Это старая версия документа.


Таблица на страницу

Текущая ситуация

Отчет для разных объектов строится по одному и тому же шаблону. При этом количество страниц выполненных отчетов разных объектов будут отличаться. Это связано с тем, что разные объекты (Процессы, Субъекты) объективно имеют разное количество данных (количество подпроцессов, количество подчинённых). Поэтому могут быть ситуации, когда, например, таблица с подпроцессами для одного процесса будет размещена целиком на одной странице, а для другого – на 2х или более.

Постановка задачи

В отчете формата Word по процессу необходимо, чтобы таблица с описанием подпроцессов умещалась на одну страницу. При этом допускаемся изменение внешних параметров шрифта. Минимальный допустимый размер шрифта – 7.

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

Исходные данные

Решение описывается с момента, когда уже есть привязка типа "Список" с описанием подпроцессов. Размер шрифта всей таблицы - размер шрифта заголовка таблицы.

Invalid Link
Рисунок 1. Вид привязки типа "Список" для отображения данных о подпроцессах

Для некоторого процесса таблица с заполненными данными получается более чем на одну страницу.

Invalid Link
Invalid Link
Рисунок 2. Таблица с описанием подпроцессов располагается почти на 2х полных страницах

Концепция решения

Начало таблицы будет определяется по положению указателя в первой левой ячейке таблицы.

Для определения конца таблицы добавит в ее конец разрыв раздела (без разрыва страницы). Когда курсор будет находиться в следующем разделе от текущего (где находится таблица), то будем определять номер страницы. Этот номер и будет принимать за номер страницы конца таблицы.

Определяя разницу между номерами страниц начала и конца таблицы, будем находить ответ на вопрос: "На 1й странице находится таблица?".

Далее изменяем формат текста для всей таблицы до тех пор, пока не получим таблицу на одной странице или не сделаем максимум из доступного.

Возможные варианты изменения формата, которые приводят к уменьшению таблицы, в порядке приоритета:

  1. Уменьшение размера шрифта текста всей таблицы, но не ниже минимально допустимого.
  2. Изменение величины "Интервал после" до 0 в свойствах Абзаца.
  3. Автоподбор по содержимому для таблицы.

Шаги решения

Сразу после таблицы добавляем раздел раздела без разрыва страницы: лента "Разметка страниц", группа "Параметры страницы", меню "Разрывы", группа меню "Разрывы разделов" – пункт "Текущая страница".

Invalid Link
Рисунок 3. Сразу после таблицы добавили разрыв раздела

Для более точного определения конца таблицы уменьшим размер шрифта в первых двух строках после таблицы до 1. Это так же заденет и метку разрыва раздела.

Invalid Link
Рисунок 4. Высоту строк после таблицы уменьшили до 1

Определяем название привязки типа "Список", которая представляет нужную таблицу (см. Вставка привязки в шаблон отчета).

 Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)
 
 вывода отчета
Dim HTMLCreate As Boolие вывода отчета
Dim HTMLCreate As Boolean
HTMLCreate = Application.ActiveDocument.Variables("BSHtml").Value олько для файловse
 
d
If Not (HTMLCreate) Then
 
    'Вводная часть
ысл только для файлов Word
If Not (HTMLCreate) Then
 
    
        PodPro часть
 
        f23"
        MinFontSize = 7 'минимальный допустимый размер шрифта
    сок, формирующей нужную таблицу
        PodProcBkmName = "Подпроцессы_4244cf23"
        MinFontSize = 7 ной закладки нет
 
        мый размер шрифта
 
 
                        For Each Bkm Iрректность
            Dim PodProcOk As Boolean
            StatusOk = False  Then 'если закладка есть
                жной закладки нет
 
            Dim Bkm As Bookmark адка есть
                па Закладка
 
            For Each Bkm In ActiveDocument.Bookmarks
 
                If Bkm.Name = PodProcBkmName Then                
    дка есть
 
 
                    PodProcOk = True k Then
 
            Curreкладка есть
                    Font.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 numbу в первом столбце
 
            номер страницы конца таблицы
            'номер сомер страницы таблицы
            Dim numberPageTable As Integer
 
            umber)
 
            'до тех пор, пока таблица целикожна быть таблица целиком
            numberPageTable = Selection.Information(wdActiveEndPageNumber)
 
                    And (CurrentFontSizнец таблицы
            Selection.GoToNext wdGoToSection всю таблицу
                Seующий раздел
            Dim numberNextSection As Integer        CurrentFontSize = CurrentFontSize - 1 'учитываемр страницы конца таблицы
            таблицы
                Selection.GoToNext wdGoо за таблицей раздела
            numberNextSection = Selection.Information(wdActiveEndPageNumber)
 
            и таблица не на 1й станице - меняем абзац
          ком не на 1й странице
                            tablePodProc.Select ' не минимальный
            Do While (numberNextSection > numberPageTable) _
                And (CurrentFontSize > MinFontSize)
 
                tablePodProc.Select e
                    ю таблицу
                Selection.Font.Shrink lse
                    .LineUnitAftекст на 1 пункт
 
                CurrentFontSize = CurrentFontSize - 1 конец таблицы
            Seнение шрифта
 
                mberNextSection = Selectionнец таблицы
                Selection.GoToNext wdGoToSection
                numberNextSection = Selection.Information(wdActiveEndPageNumber)
 
            Loop
 
                  'Автподбор таблицы по содержимому
      ице - меняем абзац
            If numberNextSection > numberPageTable Then
 
                tablePodProc.Se

Результат

Invalid Link
Рисунок 5. Результат выполнения отчета – таблица на одной странице
Driven by DokuWiki