При работе в современных конфигурациях на базе 1С:Предприятие 8.3, таких как Управление торговлей 11.5, ERP 2.5 или Комплексная автоматизация 2.5, пользователи часто сталкиваются с проблемой при массовой печати. Если выбрать несколько документов (например, десять «Реализаций товаров и услуг») и отправить на печать одновременно два макета (например, УПД 2026 с QR-кодом и «Транспортная накладная»), система часто выдает результат «пачками»: сначала печатаются все десять УПД, а затем все десять накладных. В итоге сотруднику склада или офиса приходится вручную перебирать огромную стопку бумаги, чтобы собрать комплект для каждого конкретного клиента.
В этой статье мы подробно разберем, как изменить этот алгоритм, проанализируем возможности стандартной библиотеки стандартных подсистем (БСП) и рассмотрим программные способы решения задачи, чтобы документы выходили из принтера по порядку: комплект для первого клиента, затем комплект для второго и так далее.
Прежде всего, давайте выясним причину такого поведения системы. В типовых конфигурациях 1С используется механизм печати, основанный на БСП. Когда мы нажимаем кнопку «Печать», программа формирует коллекцию печатных форм. Если выбрано несколько типов макетов, алгоритм зачастую обходит сначала массив документов для первого макета, а затем тот же массив для второго. Это делается для оптимизации запросов к базе данных, чтобы получить данные для всех макетов одного типа за один раз.
Однако для пользователя такая оптимизация оборачивается лишней ручной работой. Чтобы решить эту задачу, нам необходимо заставить систему группировать макеты в разрезе каждого объекта (ссылки на документ).
Рассмотрим самый простой способ, который не требует изменения программного кода. В последних версиях учетных систем реализован функционал, позволяющий настроить печать всех связанных документов в виде единого пакета — для этого подойдёт универсальная обработка пакетной печати документов для 1С. Проанализируем, как его включить и использовать:
Если стандартный комплект все равно выводит документы некорректно, следует проверить настройку «Разбирать по копиям» в диалоговом окне печати принтера. Иногда драйвер принтера сам перегруппировывает задания, если они отправляются раздельно.
Если типовой функционал «Печати комплектов» не подходит под специфические нужды бизнеса (например, нужно разное количество копий в зависимости от условий договора), мы можем написать свою обработку или использовать конструктор печатных форм для объектов базы 1С, который позволяет создавать шаблоны без глубокого погружения в код. Если же вы решили дорабатывать систему самостоятельно, рассмотрим логику работы ВПФ, которая будет выступать в роли «диспетчера».
Суть метода заключается в том, чтобы перехватить массив ссылок на документы и в цикле сформировать один общий ТабличныйДокумент, куда будут последовательно добавлены все формы. Разберем пример кода для модуля команды печати:
// В обработчике печати внешней формы
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Создаем результирующий табличный документ
ОбщийТабДок = Новый ТабличныйДокумент;
Для Каждого СсылкаИзСписка Из МассивОбъектов Цикл
// 1. Формируем первый макет (например, Счет на оплату)
ТабДок1 = СформироватьСчетНаОплату(СсылкаИзСписка);
ОбщийТабДок.Вывести(ТабДок1);
// Вставляем разрыв страницы, чтобы следующий макет начинался с нового листа
ОбщийТабДок.ВывестиГоризонтальныйРазделительСтраниц();
// 2. Формируем второй макет (например, Реализация товаров)
ТабДок2 = СформироватьНакладную(СсылкаИзСписка);
ОбщийТабДок.Вывести(ТабДок2);
// Снова разрыв страницы перед следующим документом в цикле
ОбщийТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЦикла;
// Добавляем результат в коллекцию для отображения пользователю
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "Комплект", "Комплект документов", ОбщийТабДок);
КонецПроцедуры
При таком подходе мы гарантируем, что в очередь печати уйдет один единый документ, в котором страницы уже расположены в нужном нам порядке. Использование метода Вывести() позволяет «склеивать» разные табличные документы в один.
В современных конфигурациях существует мощный инструмент — «Правила печати документов». Это позволяет автоматически печатать договор продажи товаров или оказания услуг вместе с основным пакетом документов — для этого подойдёт печать договоров по шаблонам из документов продажи. Выясним, как это помогает в нашей задаче:
Перейдем в раздел НСИ и администрирование — Печатные формы, отчеты и обработки — Правила печати документов. Здесь можно создать правило для конкретного партнера. Например, для «Клиента А» всегда печатать 2 копии УПД и 1 копию счета, а также отслеживать все неотгруженные реализации по заказу клиента, выводя их отдельным списком. При групповой печати, если выбрать команду «Печать по правилам», система сама разберет документы по пакетам согласно настройкам. Это исключает необходимость ручного выбора макетов и снижает риск ошибки.
Проанализируем разницу в методах вывода на печать, так как это критично для очередности документов. Существует два основных способа отправить данные на принтер:
ТабличныйДокумент.Напечатать(). Если вызывать его в цикле для каждого макета, 1С отправит в Windows много маленьких заданий. В этом случае спулер печати Windows может перепутать их порядок (какой файл быстрее обработался драйвером, тот и вылетел первым).ОбщийТабДок.Вывести() собирает всё в один объект. Это самый надежный способ сохранить порядок листов.При использовании Вывести() важно не забывать про метод ВывестиГоризонтальныйРазделительСтраниц(). Если его пропустить, начало следующего документа может напечататься на нижней половине листа предыдущего, если там осталось свободное место.
Если вы разрабатываете собственную систему печати на базе БСП, обратите внимание на параметр ИмяПараметраПечати в функции УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию. Если для каждого комплекта передавать уникальный идентификатор, система будет понимать, что это разные логические блоки. Однако для полной уверенности в порядке следования страниц лучше использовать стратегию формирования единого ТабличногоДокумента внутри процедуры печати.
Резюмируем: для решения проблемы групповой печати «в разрезе документов» в 1С наиболее эффективным является использование штатного механизма «Печать комплектов» или создание внешней печатной формы, объединяющей макеты в цикле по объектам. Это позволит сэкономить время на сортировке бумаг и автоматизировать документооборот предприятия.