Как реализовать печать комплекта документов в конфигурации на базе БСП

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

В современных типовых решениях, таких как 1С:Управление торговлей 11, ERP или Комплексная автоматизация, реализован мощный механизм печати комплектов. Он позволяет пользователю в одном окне выбрать несколько печатных форм (например, Счёт, УПД и ТОРГ-12), указать количество копий для каждой из них и сохранить эти настройки индивидуально для каждой организации или контрагента. Разберем подробно, как устроен этот механизм и как внедрить его для своего документа, используя возможности Библиотеки стандартных подсистем (БСП).

Поиск реализации в конфигураторе

Если перед нами стоит задача повторить функционал «Реализации товаров и услуг» для нового документа, первым делом нам нужно выяснить, какие именно объекты участвуют в процессе. Проанализируем ситуацию с помощью инструментов отладки, как это советовали участники форума.

Для эффективного анализа выполним следующие шаги:

  1. Запустим конфигурацию в режиме 1С:Предприятие и откроем документ, где печать комплекта уже работает.
  2. Включим Замер производительности (Меню — Отладка — Замер производительности).
  3. Нажмем кнопку «Печать» и выберем «Комплект документов».
  4. После открытия формы настройки и выполнения печати остановим замер.

Как справедливо отмечено в обсуждении, замер производительности по умолчанию группирует строки по времени. Чтобы увидеть последовательность вызовов, проанализируем Стек вызовов. Для этого достаточно поставить точку останова в общем модуле УправлениеПечатьюКлиент в процедуре ВыполнитьКомандуПечати. Это «входная точка», с которой начинается вся магия формирования комплекта.

Ключевые объекты подсистемы печати

Проанализировав структуру БСП, мы выясним, что основная логика сосредоточена в нескольких объектах:

  1. Общая форма ПечатьКомплектаДокументов: Именно она отвечает за диалоговое окно настройки. Здесь происходит выбор макетов и определение количества экземпляров.
  2. Регистр сведений НастройкиКомандПечати: В этом регистре система хранит персонализированные настройки. Если вы один раз настроили комплект для «Контрагента А», система запомнит это именно здесь, используя измерения «Организация», «Контрагент» и «Объект».
  3. Общий модуль УправлениеПечатью: Содержит серверные методы для сборки коллекции печатных форм.

Добавление своего документа в механизм комплектов

Рассмотрим по шагам, что нужно прописать в коде, чтобы ваш документ (например, «Производство без заказа» или кастомный документ «Акт оказания услуг») научился печатать комплекты.

Вся регистрация команд происходит в модуле менеджера вашего документа. Найдем (или создадим) процедуру ДобавитьКомандыПечати. Рассмотрим пример заполнения структуры для команды комплекта:


Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
    // Регистрация обычной печатной формы
    КомандаПечать = КомандыПечати.Добавить();
    КомандаПечать.Идентификатор = "АктОказанияУслуг";
    КомандаПечать.Представление = НСтр("ru = 'Акт оказания услуг'");
    КомандаПечать.ПроверкаПроведенности = Истина;
    
    // Регистрация команды печати комплекта
    КомандаКомплект = КомандыПечати.Добавить();
    КомандаКомплект.Идентификатор = "ПечатьКомплекта";
    КомандаКомплект.Представление = НСтр("ru = 'Комплект документов...'");
    КомандаКомплект.ТипВызова = "ВызовКлиентскогоМетода";
    КомандаКомплект.ИмяМенеджера = "УправлениеПечатьюКлиент";
    КомандаКомплект.ИмяМетода = "ВыполнитьКомандуПечати";
    
    // Важно: указываем дополнительные параметры для формирования окна настроек
    КомандаКомплект.ДополнительныеПараметры.Вставить("ЭтоПечатьКомплекта", Истина);
    КомандаКомплект.ДополнительныеПараметры.Вставить("ИдентификаторКоманды", "ПечатьКомплекта");
    
КонецПроцедуры

Обратите внимание, что для команды комплекта мы указываем стандартный клиентский метод БСП УправлениеПечатьюКлиент.ВыполнитьКомандуПечати. Это позволяет не писать визуальную часть с нуля, а использовать готовую форму БСП.

Связь печатных форм с комплектом

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

Рассмотрим подробнее параметры, которые управляют поведением комплекта:

Процесс формирования печатных форм

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


Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    // Проверяем, нужно ли печатать конкретную форму из комплекта
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АктОказанияУслуг") Тогда
        // Формируем табличный документ для Акта
        ТабличныйДокумент = СформироватьПечатнуюФормуАкта(МассивОбъектов, ОбъектыПечати);
        // Добавляем его в общую коллекцию
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "АктОказанияУслуг", "Акт оказания услуг", ТабличныйДокумент);
    КонецЕсли;

    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетНаОплату") Тогда
        ТабличныйДокумент = СформироватьПечатнуюФормуСчета(МассивОбъектов, ОбъектыПечати);
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "СчетНаОплату", "Счет на оплату", ТабличныйДокумент);
    КонецЕсли;
    
КонецПроцедуры

Именно использование КоллекцияПечатныхФорм позволяет БСП собрать все выбранные пользователем документы в один поток. Это крайне важно для сквозной печати, когда принтер воспринимает весь комплект как одно задание. Это позволяет правильно работать двусторонней печати (чтобы новый документ не начинался на оборотной стороне предыдущего, если в нем нечетное количество страниц).

Настройка по умолчанию для Организации и Контрагента

Одной из самых полезных фишек комплектов является запоминание настроек. Если мы хотим программно задать «заводские» настройки для первого открытия, нам нужно обратить внимание на то, как заполняется состав комплекта при инициализации.

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

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

← На главную