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