Это старая версия документа.


Тип связи субъекта с процессом и субъект в одном столбце

Текущая ситуация

Структурирование информации позволяет "разложить все по полочкам" в голове человека, быстрей и проще понять предоставляемую информацию. Такой же подход требуют себе задачи, решаемые через программные продукты, например, Business Studio. В то же время, при разработке отчетов это означает, что каждой выделенной структуре, например, в таблице, требуется отдельный столбец. В некоторых случаях это бывает неудобно по причине нехватки места на листе. И если совместить данные некоторые столбцов в одном определенным способом, то читабельность документа от этого не уменьшиться.

Постановка задачи

В отчете формата Word по процессу в таблице со столбцами процессов, субъектов процесса и типа связи субъекта с процессом сделать так, чтобы тип связи показывался не отдельным столбцом, а в в столбце с субъектом. При этом:

  1. При выводе в HTML (HTML-публикация или Business Studio Portal) – ссылка на субъект должна остаться ссылкой, а название вида связи должно быть черным цветом как это было и в столбце с названием вида связи.
  2. При выводе в Word – название типа связи должно быть цветом, отличным от названия субъекта для большей читабельности (например, серый цвет) и курсивом.

Название субъекта и название вида связи должно быть разделено символом "/".

Исходные данные

Решение описывается с момента, когда в шаблоне отчета создана необходимая привязка типа "Список", которую можно видеть таблицей.

Invalid Link
Рисунок 1. Вид необходимой привязки типа "Список" в шаблоне отчета
Invalid Link
Рисунок 2. Вид выполненного отчета формата Word до решения задачи
Invalid Link
Рисунок 3. Вид выполненного отчета в HTML-публикации до решения задачи

Концепция решения

После того, как отчет будет сформирован, будем запоминать текст в каждой ячейке столбца "Тип связи" и добавлять его к тексту соседней ячейки столбца "Субъект" в нужном оформлении. Столбец "Тип связи" после этого удаляется.

Шаги решения

Кодом VBA:

  • для каждой ячейки столбца "Тип субъекта" заполнить текст ячейки
  • вставить в конец ячейки той же строки столбца "Субъект" и указать необходимые параметры шрифта, который будет вставлен позже. При форматировании необходимо учесть направление формирование отчета (Word, HTML).
  • в той же ячейке вставить разделительное выражение и запомненный ранее текст с типом связи.

После окончания переноса всех типов связей удалить столбец "Тип связи" и поправить таблицу к обычному виду.

Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)
 
акладки, НАЯ
 
щей нужную таблицу
Dim Bookmark As String
Bookmующей нужную таблицу
Dim Bookmark As String
Bookmark = "Подпроцессы_и_исполнител_83cdcd34"
 
столбца с типом связи
Dim ColumnTypвание Субъекта
Dim ColumnSubject As Integer
ColumnSubject = 3
 
бъектом и типом всязи
Dim Sep типом связи
Dim ColumnTypeLink As Integer
ColumnTypeLink = 4
 
 типа связи в Word
TypeLinkWordColorRGB = RGB(127, 127, 127)
 
жду Субъектом и типом всязи
Dim Separator As String
Separator = " / "
 
Dim TypeLinkWordColorRGB  As String
Dim TableTypeLink As связи в Word
TypeLinkWordColorRGB = RGB(127, 127, 127)
 
Dim TypeLinkHTMLColorRGB an
HTMLCreate = Application.Act связи в Word
TypeLinkHTMLColorRGB = RGB(0, 0, 0)
 
РОЦЕДУРНАЯ бные
Dim CellLinkText As String
Dim TableTypeLink As Table
 
нте
 
    Set TableTypeLink = Application.ActiveDocument.B (отдельный файл или HTML)
Dim HTMLCreate As Boolean
HTMLCreate = Application.ActiveDocument.Variables("BSHtml").Value    On Error Resuse
 
ext 'игнор error 59АЯ ЧАСТЬ
 
If BookmarkIs(Bookmark) Then ъединение
 
        CellLinkText ь в документе
 
    Set TableTypeLink = Application.ActiveDocument.Bookmarks(Bookmark).Range.Tables(1)
 
    countRow = TableTypeLink.Rows.Count (i, ColumnSubject).Select рок таблицы
 
    For i = 2 To countRow
 
        On Error Resume Next ленной ячейки
 
            If HTMLCreate Then 'если создается HTML
 
    вертикальное объединение
 
        CellLinkText = CellTextClean(TableTypeLink.Cell(i, ColumnTypeLink).Range.Text)
 
        If Len(CellLinkText) Then     Else
              зи указан
 
            TableTypeLink.Cell(i, ColumnSubject).Select WordColorRGB 'wdColorRed 'зжной ячейке
            Selection.EndKey lic = wdToggle 'курсив
 
            Eделенной ячейки
 
            If HTMLCreate Then kText  'дописываем вится HTML
 
                Selection.Font.Color = TypeLinkHTMLColorRGB оту в таблице цвет
                Selection.Font.Underline = wdUnderlineNone mns(ColumnTypeLink).Select
    Coluние гиперссылки
 
            Else
                ем ширину столбца с Комменя файл Word
                Selection.Font.Color = TypeLinkWordColorRGB Width = Selection.Columns.Prefeый цвет
                Selection.Font.Italic = wdToggle TypeLinkив
 
            End If
 
            Selection.TypeText Text:=Separator & CellLinkText  .PreferredWidthType = вид связи
 
        End If
 
    Next i
 
    Width = 100
 
    If HTMLCreate Then 'если создам красоту в таблице
 
    вого столбца
        TableTypeLink.Columnлбца с Типом связи
    TableTypeLink.Columns(ColumnTypeLink).Select
    ColumnTypeLinkWidth = Selection.Columns.PreferredWidth
 
    TypeLink.Columns(ColumnTypeLink).Preferredбца с Комментарием
    TableTypeLink.Columns(ColumnTypeLink + 1).Select
    ColumnCommentWidth = Selection.Columns.PreferredWidth
 
    
 
'Проверка на корректность названия приванием типа связи
    TableTypeLink.Columns(ColumnTypeLink).Delete
 
    аем, что нужной закладки нет
 
For Eaа 100% страницы
    TableTypeLink.PreferredWidthType = wdPreferredWidthPercent
    TableTypeLink.PreferredWidth = 100
 
    If HTMLCreate Then       BookmarkIs = Trтся HTML
 
        адка есть
 
    End If
 
Nexпервого столбца
        TableTypeLink.Columns(1).PreferredWidth = _
            TableTypeLink.Columns(1).PreferredWidth / 4
 
    Else
 
         текста ячейки от 2х последних службца Комментария
        TableTypeLink.Columns(ColumnTypeLink).PreferredWidth = _
            ColumnTypeLinkWidth + ColumnCommentWidth + 5
    End If
 
End If
 
End Sub
 
 
Function BookmarkIs(BookmarkName As String) As Boolean
 
стый текст)
    CellTextClean = Left$(CellTeь названия привязки
 
Dim Bkm As Bookmark его не удаляем, а возвращапа Закладка
 
 
BookmarkIs = False lText
 
End If
 
End Function

Результат

 

Invalid Link
Рисунок 4. Вид выполненного отчета формата Word после решения задачи кодом VBA
Invalid Link
Рисунок 5. Вид выполненного отчета в HTML-публикации после решения задачи кодом VBA

 

Актуальные новости, публикации и практики для бизнес-архитекторов и аналитиков
Driven by DokuWiki