Это старая версия документа.
Отчет для разных объектов строится по одному и тому же шаблону. При этом количество страниц выполненных отчетов разных объектов будут отличаться. Это связано с тем, что разные объекты (Процессы, Субъекты) объективно имеют разное количество данных (количество подпроцессов, количество подчинённых). Поэтому могут быть ситуации, когда, например, таблица с подпроцессами для одного процесса будет размещена целиком на одной странице, а для другого – на 2х или более.
В отчете формата Word по процессу необходимо, чтобы таблица с описанием подпроцессов умещалась на одну страницу. При этом допускается изменение внешних параметров шрифта. Минимальный допустимый размер шрифта - 7.
В случае невозможности размещения таблицы на одной странице необходимо разместить ее на меньшем количестве страниц.
Решение описывается с момента, когда уже есть привязка типа "Список" с описанием подпроцессов. Размер шрифта всей таблицы - размер шрифта заголовка таблицы.
Для некоторого процесса таблица с заполненными данными получается более чем на одну страницу.
Начало таблицы будем определять по положению указателя в первой левой ячейке таблицы.
Для определения конца таблицы добавим в ее конец разрыв раздела (без разрыва страницы). Когда курсор будет находиться в следующем разделе от текущего (где находится таблица), то будем определять номер страницы. Этот номер и будет принимать за номер страницы конца таблицы.
Определяя разницу между номерами страниц начала и конца таблицы, будем находить ответ на вопрос: "На 1й странице находится таблица?".
Далее изменяем формат текста для всей таблицы до тех пор, пока не получим таблицу на одной странице или не сделаем максимум из доступного.
Возможные варианты изменения формата, которые приводят к уменьшению таблицы, в порядке приоритета:
Сразу после таблицы добавляем разрыв раздела без разрыва страницы: лента "Разметка страниц", группа "Параметры страницы", меню "Разрывы", группа меню "Разрывы разделов" – пункт "Текущая страница".
Для более точного определения конца таблицы уменьшим размер шрифта в первых двух строках после таблицы до 1. Это так же заденет и метку разрыва раздела.
Определяем название привязки типа "Список", которая представляет нужную таблицу (см. Вставка привязки в шаблон отчета).
Sub ПослеВыполненияОтчета(ob As Variant, app As Variant) вывода отчета Dim HTMLCreate As Boolие вывода отчета Dim HTMLCreate As Boolean HTMLCreate = Application.ActiveDocument.Variables("BSHtml").Value только для файлоse rd If Not (HTMLCreate) Then 'Вводная часть ысл только для файлов Word If Not (HTMLCreate) Then PodPro часть f23" MinFontSize = 7 'минимальный допустимый размер шрифта исок, формирующей нужную таблицу PodProcBkmName = "Подпроцессы_4244cf23" MinFontSize = 7 й закладки нет мый размер шрифта For Each Bkm In рректность Dim PodProcOk As Boolean StatusOk = False hen 'если закладка есть жной закладки нет Dim Bkm As Bookmark ка есть па Закладка For Each Bkm In ActiveDocument.Bookmarks If Bkm.Name = PodProcBkmName Then дка есть PodProcOk = True Then Currenкладка есть ont.Size 'текущий размер шрифта цей через закладку Set tablePodProc = Application.ActiveDocument.Bookmarks(PodProcBkmName).Range.Tables(1) End If Next 'номер страницы, ная часть If PodProcOk Then CurrentFontSize = tablePodProc.Cell(1, 1).Range.Font.Size 'Определеяем конер шрифта tablePodProc.Cell(1, 1).Range.Select следующий раздел Dim numberNу в первом столбце ер страницы конца таблицы 'номер страомер страницы таблицы Dim numberPageTable As Integer er) 'до тех пор, пока таблица целиком нжна быть таблица целиком numberPageTable = Selection.Information(wdActiveEndPageNumber) And (CurrentFontSize >нец таблицы Selection.GoToNext wdGoToSection таблицу Selecующий раздел Dim numberNextSection As Integer CurrentFontSize = CurrentFontSize - 1 'учитываем изр страницы конца таблицы лицы Selection.GoToNext wdGoToSо за таблицей раздела numberNextSection = Selection.Information(wdActiveEndPageNumber) аблица не на 1й странице - меняем абзац ком не на 1й странице tablePodProc.Select 'вы не минимальный Do While (numberNextSection > numberPageTable) _ And (CurrentFontSize > MinFontSize) tablePodProc.Select .Sю таблицу Selection.Font.Shrink e .LineUnitAfterекст на 1 пункт CurrentFontSize = CurrentFontSize - 1 ец таблицы Selecнение шрифта rNextSection = Selection.Inнец таблицы Selection.GoToNext wdGoToSection numberNextSection = Selection.Information(wdActiveEndPageNumber) Loop 'Автоподбор таблицы по содержимому нице - меняем абзац If numberNextSection > numberPageTable Then tablePodProc