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