Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.
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>] | ||