Как вывести на печать отдельные печатные формы для каждой строки табличной части документа 1С?

Программист 1С v8.3 (Управляемые формы)
← На главную

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

Основные принципы формирования многостраничных документов

Для решения этой задачи мы будем использовать объект ТабличныйДокумент. Ключевая особенность этого объекта заключается в том, что при последовательном вызове метода Вывести данные не перезаписываются, а накапливаются. Таким образом, чтобы добавить разрыв страницы между печатными формами, нам понадобится специализированный метод ВывестиГоризонтальныйРазделительСтраниц.

Пошаговая реализация алгоритма печати

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

Шаг 1: Подготовка документа. Создадим пустой объект ТабличныйДокумент, который станет контейнером для всех наших форм.

Шаг 2: Организация цикла. Пройдемся по коллекции Товары нашего объекта. Важно помнить, что если данных много, запрос на получение детальной информации лучше выполнять оптимально.

Шаг 3: Заполнение макета. Получим области макета (Заголовок, Шапка, Детали, Подвал) и заполним их данными из текущей строки цикла.

Шаг 4: Управление разрывами. После вывода всех областей одной формы, используем ВывестиГоризонтальныйРазделительСтраниц для принудительного переноса следующей формы на новую страницу.

Пример программного кода

Проанализируем готовый пример кода, который решает поставленную задачу:


ТабДок = Новый ТабличныйДокумент;
ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_КачественноеУдостоверение";

Для Каждого Строка Из ЭтотОбъект.СсылкаНаОбъект.Товары Цикл
    Макет = ПолучитьМакет("Макет1");
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ... ГДЕ Номенклатура = &Номенклатура";
    Запрос.УстановитьПараметр("Номенклатура", Строка.Номенклатура);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        ОбластьДетальныхЗаписей.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(ОбластьДетальныхЗаписей);
    КонецЦикла;
    
    ТабДок.Вывести(ОбластьПодвал);
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЦикла;

Возврат ТабДок;

Важные рекомендации по оптимизации

При работе с большими объемами данных следуйте этим советам:

  1. Оптимизация запросов: Старайтесь не выполнять запрос внутри цикла, если это возможно. Лучше получить все необходимые данные одним запросом до начала цикла, а затем фильтровать их в памяти или использовать выборку по группировкам.
  2. Использование ресурсов: Если в документе тысячи строк, формирование такого табличного документа может потребовать значительного объема оперативной памяти. В таких случаях стоит рассмотреть возможность вывода данных частями.
  3. Группировки: Помните, что методы типа НачатьАвтогруппировкуСтрок удобны, но их следует использовать обдуманно. Если структура макета статична, настраивайте группировки непосредственно в конструкторе макета 1С.
  4. Архитектура: Если вы планируете внедрять данную функцию в типовую конфигурацию, используйте механизм Расширения конфигурации вместо создания внешних печатных форм. Это позволит обновлять систему без потери доработок.

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

← На главную