Вывод подписей на каждой странице табличного документа

Когда мы создаём печатную форму (например договор, инвентаризационная опись и т.п.), которая будет содержать повторяющийся текст или любой другой объект на каждой странице (подписи, логотип, таблица и т.п.).

При разработке печатной формы с подобными особенностями есть очень важный момент - уместить максимально возможное количество строк табличной части и вывести повторяющиеся объекты (подписи, логотип, таблица и т.п.).

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

Итак начнём для начала создадим макет:

Теперь можем перейти к формированию функции для создания и заполнения табличного документа на основе таблицы с данными (перечень товаров и их количество).

Для начала получим макет:

    ОбъектРеальный = РеквизитФормыВЗначение("Объект");
    Макет = ОбъектРеальный.ПолучитьМакет("Макет");

Теперь сразу укажем ссылки на каждую область макета:

    ОбластьЗаголовок    = Макет.ПолучитьОбласть("Заголовок");
    ОбластьШапка        = Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока        = Макет.ПолучитьОбласть("Строка");
    ОбластьНаСтранице    = Макет.ПолучитьОбласть("НаСтранице");
    ОбластьПоДокументу    = Макет.ПолучитьОбласть("ПоДокументу");
    ОбластьКомиссия        = Макет.ПолучитьОбласть("Комиссия");

Далее нам необходимо создать массив, который мы будем передавать в функцию "ПроверитьВывод" для проверки вывода страницы (т.е. будет ли табличный документ помещаться на стриницу если к нему добавить области из массива):

    МассивПроверки = Новый Массив;
    МассивПроверки.Добавить(ОбластьСтрока);
    МассивПроверки.Добавить(ОбластьНаСтранице);
    МассивПроверки.Добавить(ОбластьКомиссия);

Создаём и заполняем табличный документ. Заполняем первую страницу на ней будет расположен заголовок, шапка таблицы, строки таблицы, количество строк на странице и подписи комиссии. В первую очередь выводим секцию заголовок и шапку:

    ТабДокумент = Новый ТабличныйДокумент;
    
    ОбластьЗаголовок.Параметры.Заголовок = "Инвентаризационная опись № 1 от 07.04.2022";
    ТабДокумент.Вывести(ОбластьЗаголовок);
    
    ТабДокумент.Вывести(ОбластьШапка);

Теперь создаём цикл по таблице с данными и начинаем заполнять строки в табличном документе и предварительно проверяем вывод на страницу строки таблицы + количество по странице + подписи комиссии (ранее указанный массив проверки "МассивПроверки"):

    КоличествоНаСтранице = 0;
    КоличествоПоДокументу = 0;
    
    Для Каждого СтрокаТЗ Из ТЗ Цикл
       
        ОбластьСтрока.Параметры.Заполнить(СтрокаТЗ);

        // Проверяем поместиться ли на странице табличный документ
       
        Если НЕ ТабДокумент.ПроверитьВывод(МассивПроверки) Тогда
           
            // Выводим количество по странице + состав комиссии
           
            ОбластьНаСтранице.Параметры.КоличествоНаСтранице = КоличествоНаСтранице;
            ТабДокумент.Вывести(ОбластьНаСтранице);
            ТабДокумент.Вывести(ОбластьКомиссия);
           
            // Начинаем новую страницу
           
            ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
           
            ТабДокумент.Вывести(ОбластьШапка);
 

            // Обязательно обнуляем количество на странице, т.к. мы создали новую стриницу

            КоличествоНаСтранице = 0;
           
        КонецЕсли;
       
        ТабДокумент.Вывести(ОбластьСтрока);   
       
        КоличествоНаСтранице = КоличествоНаСтранице + 1;
        КоличествоПоДокументу = КоличествоПоДокументу + 1;
       
    КонецЦикла;

Обязательно после цикла выводим количество по документу и подписи комиссии:

    ОбластьПоДокументу.Параметры.КоличествоПоДокументу = КоличествоПоДокументу;
    ТабДокумент.Вывести(ОбластьПоДокументу);
    ТабДокумент.Вывести(ОбластьКомиссия);

Функция по подготовке табличного документа готова. Т.е. таким образом благодаря функции "ПроверитьВывод" мы можем предварительно увидеть поместиться ли текущая страница табличного документа на страницу (формат страницы задаётся в параметрах принтера). 

    Так же по мимо метода "ПроверитьВывод" можно использовать метод "ПроверитьПрисоединение". Данный метод так же проверяет поместиться ли на странице табличный документ плюс области из массива, но в данной функции будет проиходить присоединение, а не вывод областей (т.е. добавление справа). И следует учитывать, что если маштаб табличного документа установлен "АвтоМаштаб", то функция будет постоянно возвращать Истина, т.к. страница будет постоянно уменьшать маштаб для размещения табличного документа на странице по ширине.

Ссылка на обработку: на drive.google.com

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.