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