При разработке внешних печатных форм в среде 1С часто возникает задача: необходимо выделить несколько строк в списке документов, нажать кнопку печати и получить один пакетный документ, содержащий печатные формы для каждого выбранного элемента. В этой статье мы подробно разберем, как настроить систему для получения массива выбранных документов и как корректно обработать эти данные программно.
Первым делом необходимо сообщить системе, что ваша внешняя печатная форма должна уметь работать не с одним, а с несколькими объектами сразу. Для этого при регистрации или редактировании внешней печатной формы в справочнике Дополнительные отчеты и обработки выполните следующие действия:
Этот простой шаг критически важен: именно он меняет поведение платформы при вызове вашей процедуры, обеспечивая передачу в параметр МассивОбъектов не одного элемента, а целого массива выбранных ссылок.
После того как вы настроили множественный режим, в процедуру Печать начнет приходить массив ссылок. Давайте рассмотрим структуру серверной процедуры Печать, которая является стандартной для подсистемы УправлениеПечатью:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"",
НСтр("ru = 'Ваше Наименование'"),
СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати)
);
КонецЕсли;
КонецПроцедуры
В этой процедуре мы передаем МассивОбъектов в нашу функцию формирования табличного документа. Важно помнить, что ОбъектыПечати — это специальный параметр, который позволяет системе корректно сопоставлять сформированные страницы с документами в базе данных.
Теперь перейдем к самой логике формирования табличного документа. Основная задача здесь — организовать цикл по массиву документов и правильно вывести макеты в результирующий ТабличныйДокумент.
Функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати) Экспорт
УстановитьПривилегированныйРежим(Истина);
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
// Получаем данные для всех объектов одним запросом для повышения производительности
ДанныеДляПечати = ПолучитьДанныеДляПечатнойФормы(МассивОбъектов);
// Заполняем табличный документ в цикле
ЗаполнитьТабличныйДокумент(ТабличныйДокумент, ДанныеДляПечати, МассивОбъектов, ОбъектыПечати);
Возврат ТабличныйДокумент;
КонецФункции
При реализации пакетной печати важно учитывать несколько нюансов, которые помогут сделать работу с формой удобной:
ГДЕ Ссылка В (&МассивОбъектов). Это значительно ускорит работу при печати больших списков.ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц() после вывода макета каждого документа.ОбъектыПечати. Это нужно для корректной работы штатных функций сохранения формы в PDF или отправки по почте.Используя этот подход, вы сможете создать гибкую внешнюю печатную форму, которая будет эффективно справляться с задачей массовой печати любых документов в 1С. Анализируйте состав переданного массива и обходите его последовательно, чтобы каждый документ был сформирован корректно в рамках одного общего документа.