Различия

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

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

ru:creating_user_reports:use_macros_in_reports:examples:insert_column [2020/07/21 03:07]
192.168.1.126 удалено
— (текущий)
Строка 1: Строка 1:
-====== Вставка столбца в таблицу ====== 
- 
-===== Текущая ситуация ===== 
- 
-Для привязок, которые показаны в отчете как таблица (например, "Список", "Фильтр"), необходимо, чтобы количество столбцов было не меньше, чем количество выводимых параметров в рамках этих привязок. 
- 
-В случае необходимости в таблицу такой привязки можно добавить столбцы в шаблоне. При этом при выполнении отчета столбцы таблицы будут заполняться слева направо. Незаполненными останутся столбцы лишь справа. В шаблоне отчета вставить столбец со своими значениями между столбцами со значениями бизнес-модели нельзя. 
- 
-===== Постановка задачи ===== 
- 
-Раздел Термины в Объектах деятельности используется как "Глоссарий компании". В отчете формата Word по Терминам таблицей выводится список терминов (параметр "Название") и определений (параметр "Комментарий"). 
-  
-[{{ ru:creating_user_reports:use_macros_in_reports:insert_column:lang_inscolumn1.png?nolink |Рисунок 1. Исходный вывод "Глоссарий компании". Сделано стандартными средствами Мастера отчетов}}] 
- 
-Необходимо представить эти данные в форме, как представлен глоссарий в стандартных регламентных документах Business Studio: 
- 
-  - Между термином и определением вставить длинное тире. 
-  - Не должно быть видно заголовка таблицы и границ таблицы. 
- 
-[{{ ru:creating_user_reports:use_macros_in_reports:insert_column:lang_inscolumn2.png?nolink |Рисунок 2. Пример оформления "Термины и сокращения" в регламенте процесса}}] 
- 
-===== Исходные данные ===== 
- 
-Решение описывается с момента, когда уже существует привязка типа "Фильтр", выводящая перечень терминов и их определений. 
- 
-===== Концепция решения ===== 
- 
-Сначала напишем код VBA, который вставит столбец и заполнит тире. Чтобы было наглядней видно как работает макрос. Кроме того, это будет удобно в случае необходимости отладки кода. И после этого внесем изменения в вид таблицы в шаблоне отчета. 
- 
-===== Шаги решения ===== 
- 
-**Пишем код** **VBA** 
- 
-Определяем название привязки типа "Фильтр", которая представляет нужную таблицу (см. [[ru/manual/manual]] -> [[ru/manual/report/insert_anchor?&#пример_определения_названия_привязки_типа_список|Пример определения названия привязки типа "Список"]]). 
- 
-<code> 
-Sub ПослеВыполненияОтчета(ob As Variant, app As Variant) 
- 
-'Вводная часть 
- 
-    'название закладки для привязи типа Список, формирующей нужную таблицу 
-    GlossaryBookmarkName = "Глоссарий_компании_e26caa29" 
-    columnInsertAfter = 1 'номер столбца, после которого необходимо вставить таблицу 
-    insertText = Chr(151) 'текст для вставки, длинное тире 
- 
-        'Проверка на корректность названия привязки 
-        Dim GlossaryBkmOk As Boolean 'сначала считаем, что нужной закладки нет 
- 
-        Dim Bkm As Bookmark 'переменная типа Закладка 
- 
-        'если искомая закладка есть среди закладок в документе 
-        For Each Bkm In ActiveDocument.Bookmarks 
- 
-            If Bkm.Name = GlossaryBookmarkName Then 
-                GlossaryBkmOk = True 'отмечаем, что закладка есть 
-                'будем работать с таблицей через закладку 
-                Set tableGlossary = Application.ActiveDocument.Bookmarks(GlossaryBookmarkName).Range.Tables(1) 
- 
-            End If 
- 
-        Next 
- 
-'Процедурная часть 
- 
-    If GlossaryBkmOk Then 
- 
-        'переходим к первой ячейке столбца, справа от которого 
-        'необходимо будет вставить столбец 
-        tableGlossary.Cell(1, columnInsertAfter).Range.Select 
- 
-        'Вставляем столбец справа 
-        Selection.InsertColumnsRight 
- 
-        'проход по всем ячейкам вставленного столбца 
-        'кроме первой ячейки (заголовка) 
-        For i = 2 To tableGlossary.Rows.Count 
- 
-            'вставляем нужный текст 
-            tableGlossary.Cell(i, columnInsertAfter + 1).Range.Text = insertText 
- 
-        Next i 
- 
-        'Автподбор таблицы по содержимому 
-        tableGlossary.AutoFitBehavior (wdAutoFitContent) 
- 
-    End If 
- 
-End Sub 
- 
-</code> 
- 
-После выполнения отчета и обработки его макросом отчет будет иметь вид: 
- 
-[{{ ru:creating_user_reports:use_macros_in_reports:insert_column:lang_inscolumn3.png?nolink |Рисунок 3. Отчет после выполнения макроса, еще без форматирования таблицы}}] 
- 
-**Изменение вида таблицы в шаблоне** 
- 
-В шаблоне отчета стандартными средствами для работы с таблицами: 
- 
-  * снимаем заливку с заголовков таблицы; 
-  * убираем текст из заголовков; 
-  * делаем невидимыми границы таблицы. 
- 
-[{{ ru:creating_user_reports:use_macros_in_reports:insert_column:lang_inscolumn4.png?nolink |Рисунок 4. Вид привязки в шаблоне отчета}}] 
- 
-===== Результат ===== 
- 
-[{{ ru:creating_user_reports:use_macros_in_reports:insert_column:lang_inscolumn5.png?nolink |Рисунок 5. Вид сформированного отчета}}] 
- 
- 
- 
- 
- 
-[<contextnavigator>] 
- 
  
Driven by DokuWiki