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