Различия

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

Ссылка на это сравнение

ru:creating_user_reports:use_macros_in_reports:examples:doc_as_link [2020/07/21 03:26]
192.168.1.126 удалено
— (текущий)
Строка 1: Строка 1:
-====== Ссылка на файл документа в названии документа ====== 
- 
-===== Текущая ситуация ===== 
- 
-За каждым документом в Business Studio может быть закреплен файл или указана ссылка на такой файл. При выводе отчетов в HTML (HTML-публикация или Business Studio Portal) в отчете по документу можно вывести на показ параметр "Файл". Пользователю в отчете будет представлена гиперссылка, при нажатии на которую будет открыт конкретный указанный файл или будет осуществлен переход по указанной ссылке.  
- 
-[{{ ru:creating_user_reports:use_macros_in_reports:doc_as_link:lang_file_link1_doc_with_link.png?nolink |Рисунок 1. Ссылка на файл документа из отчета по документу}}] 
- 
-С другой стороны, в HTML все упоминания документа в отчетах других объектов имеют ссылку на документ (при условии, что есть куда ссылаться). И уже после перехода по этой ссылке будет доступна ссылка для загрузки файла документа. 
- 
-[{{ ru:creating_user_reports:use_macros_in_reports:doc_as_link:lang_file_link2_link_for_docs.png?nolink |Рисунок 2. Ссылка на документ из отчета по процессу}}] 
- 
-В отчетах любых объектов также можно выводить не документ, а ссылку на файл. При этом такая ссылка будет иметь текст, отличный от названия документа (см. Рисунок 6). 
- 
-===== Постановка задачи ===== 
- 
-В отчете формата Word по процессу в таблице со списком нормативно-справочных документов название документа сделать гиперссылкой: 
- 
-  - При выводе в HTML -- ссылка на загрузку файла или ссылка для перехода на документ по указанной ссылке. 
-  - При выводе в Word -- ссылка для перехода на документ по указанной ссылке. 
- 
-Таблица должна состоять из 2х столбцов: № пп (нумератор) и Документ (название документа). 
- 
-===== Исходные данные ===== 
- 
-Решение описывается с момента, когда в шаблоне отчета создана необходимая привязка типа "Список", которую можно видеть таблицей. 
- 
-[{{ ru:creating_user_reports:use_macros_in_reports:doc_as_link:lang_file_link3_bundles.png?nolink |Рисунок 3. Вид привязки в дереве привязок}}] 
- 
-[{{ ru:creating_user_reports:use_macros_in_reports:doc_as_link:lang_file_link4_dot_table.png?nolink |Рисунок 4. Вид необходимой привязки типа Список в шаблоне отчета}}] 
- 
-Настройка сложной привязки "Нормативно-справочные документы" приведена в таблице ниже. 
- 
-<startTableBox> 
-^ № ^ Название привязки ^ Тип привязки ^ Путь к привязке ^ 
-| 1. | Нормативно-справочные документы | Список | Процессы.Нормативно-справочные документы | 
-| 2. | Документ | Объект | БизнесМодель.СписокНСДПроцессов.Документ | 
-| 3. | Файл | Объект | БизнесМодель.СписокНСДПроцессов.Файл | 
-<endTableBox| Таблица 1. Настройка привязки "Нормативно-справочные документы"> 
- 
-Данная привязка выводит таблицу с названиями нормативно-справочных документов процесса и ссылками на их файлы. 
- 
-В качестве примера возьмем процесс А1, который имеет свойства, представленные на рисунке ниже. 
- 
-[{{ ru:creating_user_reports:use_macros_in_reports:doc_as_link:change_file_link5_poc_nsd.png?nolink |Рисунок 5. Вид закладки "Нормативно-справочные документы" в окне свойств процесса}}] 
- 
- 
-[{{ ru:creating_user_reports:use_macros_in_reports:doc_as_link:lang_file_link6_reportword_without_vba.png?nolink |Рисунок 6. Вид данных, сформированных по необходимой привязке, в выполненном отчете в HTML-публикации до решения задачи}}] 
- 
-===== Концепция решения ===== 
- 
-После того, как отчет будет сформирован (Business Studio создаст все необходимые ссылки на файлы документа), будем запоминать ссылку на файл и применять эту ссылку для соответствующего названия документа. Столбец "Файл" после этого удалим. 
- 
-===== Шаги решения ===== 
- 
-Кодом VBA: 
- 
-  * для каждой ячейки столбца "Файл" заполнить адрес гиперссылки; 
-  * для ячейки той же строки столбца "Документ" запомнить название документа; 
-  * для ячейки той же строки столбца "Документ" вставить гиперссылку с названием документа и ссылкой на файл. 
- 
-После окончания переноса всех гиперссылок  удалить столбец "Файл" и привести таблицу к обычному виду. 
- 
-<code> 
-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 
-</code> 
- 
-===== Результат ===== 
- 
-[{{ ru:creating_user_reports:use_macros_in_reports:doc_as_link:lang_file_link7_reportword_withvba.png?nolink |Рисунок 7. Вид данных, сформированных по необходимой привязке, в выполненном отчете в HTML-публикации после решения задачи}}] 
- 
-При этом решении следует помнить о том, что в зависимости от направления вывода отчета (документ Word/Excel или HTML-публикация/Business Studio Portal) и способа закрепления за документом файла, ссылки на файлы документы могут быть не всегда. 
- 
-<startTableBox> 
-^ Способ закрепления файла ^ Документ есть в дереве HTML ^ Документа нет в дереве HTML ^ 
-| Документ имеет закрепленный файл непосредственно |  Ссылка на указанный файл  |  Ссылки нет  | 
-| Документ имеет ссылку на файл вида http:%%//%% , ftp:%%//%% |  Ссылка на указанный файл  |  Ссылка на указанный файл  | 
-| Документ имеет ссылку на локальный файл на компьютере пользователя Business Studio |  Ссылка на документ в HTML  |  Ссылки нет  | 
-<endTableBox| Таблица 2. Возможные свойства гиперссылок в зависимости от направления вывода отчета и способа закрепления за документом файла>  
-  
-  
-[<contextnavigator>]  
  
Driven by DokuWiki