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