Как исправить ошибку при создании внешнего отчета на базе типового в 1С?

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

При попытке создать внешний отчет на основе типового (например, «Воинский Учет Общий» в 1С:ЗУП) разработчики часто сталкиваются с проблемой: отчет не видит макет печатной формы или выводит данные некорректно. Разберем, почему это происходит и как правильно настроить внешний отчет, чтобы он работал так же стабильно, как и типовой.

Почему возникает проблема с макетом?

Типовые отчеты в современных конфигурациях 1С используют механизмы Библиотеки стандартных подсистем (БСП). Когда мы сохраняем отчет как внешний, он теряет контекст конфигурации. Типовые функции поиска макета (например, через УправлениеПечатью.МакетПечатнойФормы) ищут макет внутри метаданных конфигурации по жестко заданному пути. Во внешнем файле этот путь не существует, поэтому система либо выдает ошибку, либо не может вывести таблицу должным образом.

Разберем решение задачи по шагам

Чтобы заставить типовой код «увидеть» макет, который находится внутри нашего внешнего отчета, нам нужно принудительно передать его в объект компоновки. Рассмотрим алгоритм действий:

  1. Откройте модуль вашего внешнего отчета.
  2. Найдите процедуру ПриКомпоновкеРезультата.
  3. Внесите изменения в логику инициализации макета перед вызовом процедуры формирования результата.

Доработка кода формирования отчета

Для корректной работы во внешнем отчете нам необходимо использовать метод ПолучитьМакет() и передать его в ДополнительныеСвойства компоновщика настроек. Это «подскажет» типовым функциям, какой макет нужно использовать для отрисовки печатной формы.

Внесите следующий фрагмент кода в вашу процедуру ПриКомпоновкеРезультата, сразу после инициализации настроек:


// Устанавливаем настройки, если они еще не установлены
УстановитьДатуОтчета(НастройкиОтчета, ДатаОтчета);

// Добавляем макет в дополнительные свойства, чтобы типовой код его подхватил
КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить(
    "МакетПечатнойФормы", 
    ПолучитьМакет("ПФ_MXL_КарточкаГражданинаПодлежащегоВоинскомуУчету")
);

// Теперь вызываем типовой метод формирования результата
РезультатКомпоновки = ЗарплатаКадрыОтчеты.РезультатКомпоновкиМакетаПечатнойФормы(
    ЭтотОбъект, 
    ДанныеРасшифровки, 
    НастройкиОтчета
);

Что важно учитывать при разработке

При доработке типовых отчетов стоит помнить о следующих моментах:

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

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

← На главную