IT-КУБиК-Сервис • Форум 1С
Абстрактный тёмно-синий фон с мягкими геометрическими линиями и оранжевыми акцентами, создающий технологичную атмосферу

Агрегатор публикаций с Инфостарта по 1С:Предприятие — обработки, расширения, конфигурации, интеграции и администрирование. Сообщество специалистов 1С.

Отложенная печать документов в 1С: пакетная обработка без ожидания

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

Механизм отложенной печати решает эту проблему за счет разделения постановки задания и фактического вывода документов. Пользователь выбирает объекты, задает параметры и продолжает работу, а фоновое задание формирует печатные формы, объединяет их в пакет и передает на принтер или сохраняет в файл.

Архитектура механизма пакетной печати

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

Статусы должны отражать весь жизненный цикл операции: «Создано», «В обработке», «Напечатано», «Ошибка» и «Отменено». Полезно также записывать текст ошибки, дату последней попытки и число повторов. Такая модель позволяет повторно запускать только неудачные элементы, не печатая уже обработанные документы.

В управляемом приложении постановка задания выполняется быстро на клиенте, а подготовка печатных форм — в серверном общем модуле. Фоновое задание с заданным интервалом выбирает необработанные записи, устанавливает блокировку и запускает обработку пакетами фиксированного размера.

Постановка документов в очередь

Команда «Отложенная печать» может находиться в форме списка документов и в форме самого объекта. Пользователь отмечает несколько строк, выбирает печатную форму и параметры вывода. Перед записью задания следует проверить проведение документа, наличие обязательных реквизитов и доступность выбранного принтера.

Удобно создавать одну запись очереди на каждый документ и вид печатной формы. Тогда ошибка в одном счете не остановит печать всей подборки. Если требуется строго единый пакет, можно добавить идентификатор группы, по которому задания будут сортироваться и объединяться в одном файле.

Пример серверной логики постановки выглядит так:

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

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

Формирование печатных форм в фоне

Фоновый обработчик получает небольшую порцию записей, например 20–50 элементов. Для каждой строки он устанавливает статус «В обработке», формирует табличный документ через стандартную печатную форму или общий модуль, затем сохраняет результат в PDF, MXL либо временное хранилище.

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

Защита от повторного вывода обязательна. Перед началом обработки запись блокируется, а после успешного результата получает статус «Напечатано». При аварийном завершении сеанса останется статус «В обработке», поэтому регламентное задание должно находить такие записи по времени и возвращать их в очередь после тайм-аута.

Контроль ошибок и производительность

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

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

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

Варианты реализации и практические рекомендации

Выбор схемы зависит от режима работы базы, требований к архиву и доступного оборудования. Ниже приведено сравнение основных вариантов.

Вариант Где формируется печатная форма Преимущества Ограничения
Фоновое задание и PDF На сервере 1С Не блокирует пользователя, удобно хранить архив Нужен отдельный этап вывода на принтер
Фоновое задание и печать с клиента Сервер, вывод на рабочем месте Использует локальные принтеры Требуется клиентский обработчик и контроль сеанса
Внешний сервис печати Сервер печати или API Централизованный контроль, поддержка разных устройств Дополнительная инфраструктура
Синхронная пакетная печать В текущем сеансе пользователя Простая разработка Блокирует интерфейс и плохо масштабируется

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

Что предусмотреть при разработке

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

Обсудите архитектуру очереди, фоновые задания и интеграцию с печатными сервисами на профессиональном форуме 1С. Практические наработки сообщества помогут быстрее адаптировать механизм под конкретную конфигурацию, а решения KUBiK — автоматизировать связанные учетные и бизнес-процессы.