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