Почему типовой отчет ЗУП 3.1 не работает как внешний и как это исправить?

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

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

Причины, по которым типовой отчет не формируется во внешнем файле

Проанализируем внутреннее устройство типовых отчетов в современных конфигурациях на базе БСП (Библиотеки стандартных подсистем) и ЗУП 3.1:

  1. Отсутствие модуля менеджера у внешних отчетов. В платформе 1С:Предприятие объект ВнешнийОтчетОбъект принципиально не имеет модуля менеджера — в нем присутствуют только модуль объекта и модуль формы. В ЗУП 3.1 логика настройки вариантов, инициализации параметров и регистрации отчета в подсистеме БСП вынесена именно в модуль менеджера (процедуры НастроитьВариантыОтчета, вызовы через общий модуль ВариантыОтчетов). При сохранении отчета во внешний файл этот модуль полностью теряется.
  2. Механизм представлений и виртуальных таблиц в СКД. В кадровых и расчетных отчетах ЗУП 3.1 текст запроса схемы компоновки данных не выполняется «как есть». В схеме используются специальные таблицы-заглушки (семейство Представления_). В типовом механизме перед компоновкой результата специализированные общие модули перехватывают запрос и заменяют эти заглушки реальными сложными выборками. Без вызова этих процедур запрос падает или возвращает пустоту.
  3. Потеря типовой формы отчета БСП. Типовые отчеты обычно не содержат собственных форм в ветке метаданных — они используют ОбщаяФорма.ФормаОтчета. При сохранении в .erf привязка к форме слетает, создается автогенерируемая форма, которая не инициализирует обязательные настройки компоновщика, отборы и параметры периодов.

Решение 1. Использование расширения конфигурации (рекомендуемый способ)

Рассмотрим наиболее надежный и современный подход. Если цель — изменить типовой отчет, не меняя режим поддержки основной конфигурации, оптимально воспользоваться механизмом расширений (.cfe):

  1. Создадим или откроем существующее расширение конфигурации с назначением Адаптация или Дополнение.
  2. Найдем исходный отчет в дереве метаданных основной конфигурации, вызовем контекстное меню и нажмем Добавить в расширение.
  3. Вместе с отчетом в расширение перенесутся схема компоновки данных, модуль объекта и модуль менеджера.
  4. Внесем необходимые изменения в СКД или программный код. Поскольку объект остается частью конфигурации (пусть и расширяющей), все механизмы БСП, виртуальные таблицы ЗУП и модуль менеджера продолжают работать в штатном режиме.

Решение 2. Адаптация внешнего отчета (.erf)

Если задача требует предоставить пользователю именно отдельный файл .erf (например, для запуска через внешние файлы или каталог), разберем, как адаптировать типовой отчет для корректной работы:

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

Решение 3. Настройка пользовательского варианта без конфигуратора

Выясним, действительно ли требуется программная переработка отчета. Если задача сводится к изменению группировок, добавлению новых колонок из реквизитов сотрудников, настройке дополнительных отборов или условного оформления, доработка в конфигураторе не требуется вовсе:

  1. Откроем типовой отчет в режиме «1С:Предприятие».
  2. Нажмем кнопку Настройки... или перейдем в меню Еще — Прочее — Изменить вариант....
  3. С помощью встроенного визуального редактора СКД настроим нужный состав полей, группировок и фильтров.
  4. Сохраним готовый результат через команду Еще — Варианты отчета — Сохранить как..., указав доступность варианта для всех или выбранных пользователей программы.
← На главную