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


Ссылка для процесса с видом типа "Код"

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

Для того, чтобы в отчетах типа HTML (HTML-публикация, Business Studio Portal), названия Процессов, Субъектов и т.д. показывались ссылками (при условии, что есть куда ссылаться), необходимо, чтобы соответствующие привязки создавались как объекты, а не как параметры объекта. При этом текст такого объекта предопределен. Например, в отчетах ссылка будет только у процессов с текстом вида "Код НазваниеПроцесса". Если в отчет вывести параметр "Автокод процесса", то гиперссылки у такого кода процесса не будет.

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

В отчете формата Word по процессу в таблице с данными его подпроцессов столбец "Следующий процесс" должен быть:

  1. Представлен в формате "Код + Название процесса" если формируется как отдельный документ Word (т.е. обычный формат).
  2. Представлен в формате "Код"  с гиперссылкой на процесс, если формируется для HTML (HTML-публикация или Business Studio Portal).

Ничего не делать с данными о следующем процессе для отчетов типа HTML в случаях, если:

  • Процесс не является гиперссылкой;
  • Процесс обозначен как {Туннель} или {Граница}.

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

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

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

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

После того, как отчет будет сформирован и Business Studio создаст все необходимые ссылки, будем запоминать каждую ссылку и название столбца.

Шаги решения

Только если отчет формируется  для HTML-публикации или Business Studio Portal необходимо кодом VBA для каждой ячейки столбца "Следующий процесс":

  • запомнить текст ячейки и гиперссылку;
  • из текста взять только код процесса (весь текст ячейки слева до первого пробела) и запомнить;
  • заменить содержимое ячейки гиперссылкой с текстом типа "Код" и таким же адресом ссылки;
  • если ячейка не содержит информацию о процессе, не содержит ссылки на процесс, тогда оставить все без изменения.
Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)
 
ие вывода отчета (файл или HTML: публикатор или портал)
Dim HTMLCreate As Booл или HTML: публикатор или портал)
Dim HTMLCreate As Boolean
HTMLCreate = Application.ActiveDocument.Variables("BSHtml").Value
 
If HTMLCreate Then tring
    Dim SpecText As String
   или BS Portal
 
    ng
    DiНАЯ
 
    Dim BookmarkName As String
    Dim SpecText As String
    Список, формирующей нужн    Dim СolumnNextProc As Integer
 
    4860073"
    СolumnNextProc = 4 'номер столбца "Следующий процесс" в табисок, формирующей нужную таблицу
    BookmarkName = "Подпроцессы_54860073"
    СolumnNextProc = 4   Dim KodText As String
    Dim hLinkAdress A процесс" в таблице
    SpecText = "{" НАЯ ЧАСТЬ
 
    If BookmarkIs(BookmarkName) Then 'если есть неция о {Туннель} или {Граница}
 
    odes = Not бные
    Dim CellText As String
    Dim KodText As String
    Dim hLinkAdress As String
    Dim spaceNum As Integer
 
    nt.Bookmarks(BookmaАЯ ЧАСТЬ
 
    If BookmarkIs(BookmarkName) Then bleKod.Rows.Count 'количество стимая закладка
 
        ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes     On Error Resume Next ' игнорирование <erй, а значения
 
        Set TableKod = Application.ActiveDocument.Bookmarks(BookmarkName).Range.Tables(1)
 
        TableKodRows = TableKod.Rows.Count Text = Left$(CellText, (Leрок таблицы
 
        For i = 2 To TableKodRows ки
 
            If Len(CellText)аблицы, кроме первой
 
            On Error Resume Next ая ячейка И не {Туннель} или {Границы}
 
                spaceNum = InStr(ют вертикальное объединение
 
            CellText = TableKod.Cell(i, СolumnNextProc).Range.Text обела
                    ение ячейки
            CellText = Left$(CellText, (Len(CellText) - 2)) 
 
                hLinkAdress бных символа ячейки
 
            If Len(CellText) <> 0 And _
                SpecText <> Left$(CellText, 1) Then k.Address 'определяем адрес гиперссылки
            уннель} или {Границы}
 
                spaceNum = InStr(1, CellText, " ") цесс имеет ссылку
     о пробела
 
                KodText = Mid(CellText, 1, spaceNum - 1)                    ActiveDocumого пробела
 
                TableKod.Cell(i, СolumnNextProc).Range.Select LinkAdress, _
       ячейкой
 
                hLinkAdress = "" Tip:="", _
                      адреса ссылки
 
                For Each hLink In Selection.Hyperlinks
                    hLinkAdress = hLink.Address End Sub
 
 
Function BookmarkIs(с гиперссылки
                Next hLink
 
                If Len(hLinkAdress) <> 0 Then дка
 
BookmarkIs = False 'снмеет ссылку
 
                    ment.Bookmarks 'перебираем все закладки вчейки гиперссылкой
                    ActiveDocument.Hyperlinks.Add _
                        Anchor:=Selection.Range, _
                        Address:=hLinkAdress, _
 

Результат

Рисунок 3. Вид данных, сформированных по необходимой привязке, в выполненном отчете в HTML-публикации после решения задачи макросом

 

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