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


Ссылка на файл документа в названии документа

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

За каждым документом в Business Studio может быть закреплен файл или указана ссылка на такой файл. При выводе отчетов в HTML (HTML-публикация или Business Studio Portal) в отчете по документу можно вывести на показ параметр "Файл". Пользователю в отчете будет представлена гиперссылка, при нажатии на которую будет открыт конкретный указанный файл или будет осуществлен переход по указанной ссылке.

Invalid Link
Рисунок 1. Ссылка на файл документа из отчета по документу

С другой стороны, в HTML все упоминания документа в отчетах других объектов имеют ссылку на документ (при условии, что есть куда ссылаться). И уже после перехода по этой ссылке будет доступна ссылка для загрузки файла документа.

Invalid Link
Рисунок 2. Ссылка на документ из отчета по процессу

В отчетах любых объектов также можно выводить не документ, а ссылку на файл. При этом такая ссылка будет иметь текст, отличный от названия документа (см. Рисунок 6).

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

В отчете формата Word по процессу в таблице со списком нормативно-справочных документов название документа сделать гиперссылкой:

  1. При выводе в HTML – ссылка на загрузку файла или ссылка для перехода на документ по указанной ссылке.
  2. При выводе в Word – ссылка для перехода на документ по указанной ссылке.

Таблица должна состоять из 2х столбцов: № пп (нумератор) и Документ (название документа).

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

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

Invalid Link
Рисунок 3. Вид привязки в дереве привязок
Invalid Link
Рисунок 4. Вид необходимой привязки типа Список в шаблоне отчета

Настройка сложной привязки "Нормативно-справочные документы" приведена в таблице ниже.

Название привязки Тип привязки Путь к привязке
1. Нормативно-справочные документы Список Процессы.Нормативно-справочные документы
2. Документ Объект БизнесМодель.СписокНСДПроцессов.Документ
3. Файл Объект БизнесМодель.СписокНСДПроцессов.Файл
Таблица 1. Настройка привязки "Нормативно-справочные документы"

Данная привязка выводит таблицу с названиями нормативно-справочных документов процесса и ссылками на их файлы.

В качестве примера возьмем процесс А1, который имеет свойства, представленные на рисунке ниже.

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

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

После того, как отчет будет сформирован (Business Studio создаст все необходимые ссылки на файлы документа), будем запоминать ссылку на файл и применять эту ссылку для соответствующего названия документа. Столбец "Файл" после этого удалим.

Шаги решения

Кодом VBA:

  • для каждой ячейки столбца "Файл" заполнить адрес гиперссылки;
  • для ячейки той же строки столбца "Документ" запомнить название документа;
  • для ячейки той же строки столбца "Документ" вставить гиперссылку с названием документа и ссылкой на файл.

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

Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)

'ВВОДНАЯ ЧАСТЬ

'название закладки для привязки типа Список, формирующей нужную таблицу
Dim BookmarkName As String
BookmarkName = "Нормативно_справочные_до_3be042ab"

Dim columnFile, columnDocName As Integer
columnDocName = 2 'номер столбца, в котором названия документа
columnFile = 3 'номер столбца, в котором названия файла документа

'служебные
Dim linkFileText, nameDoc, hLinkAdress As String
Dim TableDocs As Table

'ПРОЦЕДУРНАЯ ЧАСТЬ

ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes 'Alt+F9 - видим не коды полей, а значения

If BookmarkIs(BookmarkName) Then 'если есть необходимая закладка

    '1. Вставляем гиперссылки в названия документов

    'получаем таблицу по названию привязки
    Set TableDocs = Application.ActiveDocument.Bookmarks(BookmarkName).Range.Tables(1)

    countRowsTableDocs = TableDocs.Rows.Count 'количество строк таблицы

    For i = 2 To countRowsTableDocs 'будем проходить по всем строкам таблицы, кроме первой

        On Error Resume Next 'игнор error 5991, если какие-то ячейки имеют вертикальное объединение
        
        nameDoc = ""
        linkFileText = ""
        hLinkAdress = ""
        
        'Определяем текст в ячейке с файлом
        linkFileText = TableDocs.Cell(i, columnFile).Range.Text

        If Len(linkFileText) <> 2 Then 'если ячейка не пустая (только 2 служебных символа)

            TableDocs.Cell(i, columnFile).Range.Select 'работаем с ячейкой названия файла

            For Each hLink In Selection.Hyperlinks
                hLinkAdress = hLink.Address 'определяем адрес гиперссылки
            Next hLink

            If Len(hLinkAdress) <> 0 Then 'если гиперссылка есть

                'работаем с ячейками Названий документа
                nameDoc = TableDocs.Cell(i, columnDocName).Range.Text
                nameDoc = Left$(nameDoc, (Len(nameDoc) - 2)) 'удаляем 2 последних символа - получаем чистый текст

                'Вставляет гиперссылку в ячейку с названием документа
                TableDocs.Cell(i, columnDocName).Range.Select

                ActiveDocument.Hyperlinks.Add _
                    Anchor:=Selection.Range, _
                    Address:=hLinkAdress, _
                    SubAddress:="", _
                    ScreenTip:="Перейти к файлу документа (в новом окне)", _
                    TextToDisplay:=nameDoc, _
                    Target:="_blank"

            End If

        End If

    Next i

    '2. Удаляем лишнее и наводим красоту в таблице

    'Запоминаем ширину столбца с Нумератором (первый столбец)
    TableDocs.Columns(1).Select
    ColumnWidth = Selection.Columns.PreferredWidth

    'Удаляем столбец с названием файла
    TableDocs.Columns(columnFile).Delete

    'Расширяем таблицу на 100% страницы
    TableDocs.PreferredWidthType = wdPreferredWidthPercent
    TableDocs.PreferredWidth = 100

    'Возвращаем ширину для столбца нумератора
    TableDocs.Columns(1).PreferredWidthType = wdPreferredWidthPercent
    TableDocs.Columns(1).PreferredWidth = ColumnWidth

End If
    
End Sub

Function BookmarkIs(BookmarkName As String) As Boolean

'Проверка на корректность названия привязки

Dim Bkm As Bookmark 'переменная типа Закладка


BookmarkIs = False 'сначала считаем, что нужной закладки нет

For Each Bkm In ActiveDocument.Bookmarks 'перебираем все закладки в документе

    If Bkm.Name = BookmarkName Then 'если нашли закладку с нашим именем
    
        BookmarkIs = True 'отмечаем, что закладка есть
        
    End If
 
Next
    
End Function

Результат

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

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

Способ закрепления файла Документ есть в дереве HTML Документа нет в дереве HTML
Документ имеет закрепленный файл непосредственно Ссылка на указанный файл Ссылки нет
Документ имеет ссылку на файл вида http:// , ftp:// Ссылка на указанный файл Ссылка на указанный файл
Документ имеет ссылку на локальный файл на компьютере пользователя Business Studio Ссылка на документ в HTML Ссылки нет
Таблица 2. Возможные свойства гиперссылок в зависимости от направления вывода отчета и способа закрепления за документом файла
« ПредыдущаяНа уровень вышеСледующая »
Driven by DokuWiki