Как добавить отчет в меню документа и программно передать параметры в 1С 8.3

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

В современных конфигурациях 1С, таких как «Комплексная автоматизация» (КА 2), «ERP Управление предприятием» или «Управление торговлей» (УТ 11), интеграция новых отчетов в интерфейс документов происходит через механизмы Библиотеки стандартных подсистем (БСП). Одной из частых задач является добавление кнопки отчета в подменю «Отчеты» формы документа с автоматической фильтрацией по текущему документу. Рассмотрим подробно, как это реализовать, и разберем причины, по которым отчет может не реагировать на передаваемые параметры.

Шаг 1. Регистрация команды в модуле менеджера документа

Для того чтобы отчет появился в списке доступных команд конкретного документа (например, ЗаказПереработчику), необходимо внести изменения в модуль менеджера этого документа. Мы воспользуемся процедурой ДобавитьКомандуОтчета, которая вызывается системой при формировании подменю.

Проанализируем пример кода для модуля менеджера документа:


Процедура ДобавитьКомандыОтчетов(КомандыОтчетов) Экспорт
    // Стандартная команда системы
    Отчеты.КонтрольПоставкиПродукцииПереработчиком.ДобавитьКомандуОтчета(КомандыОтчетов);
    
    // Регистрация нашей новой команды
    Отчеты.КонтрольПоставки2019.ДобавитьКомандуОтчета(КомандыОтчетов);
КонецПроцедуры

Этот код сообщает системе, что отчет КонтрольПоставки2019 должен быть включен в список команд данного документа.

Шаг 2. Описание команды в модуле менеджера отчета

Далее перейдем в модуль менеджера самого отчета. Здесь нам нужно реализовать процедуру ДобавитьКомандуОтчета, которая определит свойства кнопки: ее наименование, важность и условия видимости. Важно проверить права доступа, чтобы команда не отображалась пользователям без соответствующих полномочий.


Функция ДобавитьКомандуОтчета(КомандыОтчетов) Экспорт
    // Проверяем права и функциональные опции
    Если ПравоДоступа("Просмотр", Метаданные.Отчеты.КонтрольПоставки2019) Тогда
        КомандаОтчет = КомандыОтчетов.Добавить();
        КомандаОтчет.Менеджер = Метаданные.Отчеты.КонтрольПоставки2019.ПолноеИмя();
        КомандаОтчет.Представление = НСтр("ru = 'Контроль поставки продукции 2019'");
        КомандаОтчет.МножественныйВыбор = Ложь;
        КомандаОтчет.Важность = "Обычное";
        КомандаОтчет.КлючВарианта = "Основной";
        Возврат КомандаОтчет;
    КонецЕсли;
    Возврат Неопределено;
КонецФункции

Шаг 3. Настройка связи с подсистемой «Варианты отчетов»

Одной из главных проблем, с которой сталкиваются разработчики, является то, что процедуры в модуле объекта отчета (например, ПриСозданииНаСервере) не вызываются автоматически. Это происходит потому, что подсистема вариантов отчетов БСП кэширует настройки. Чтобы система «увидела» необходимость вызова событий, нужно прописать настройки в модуле менеджера отчета.

Добавим процедуру НастроитьВариантыОтчета в модуль менеджера:


Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт
    // Указываем БСП, что отчет использует переопределение настроек формы
    НастройкиОтчета.ОпределитьНастройкиФормы = Истина;
КонецПроцедуры

Шаг 4. Обработка параметров в модуле объекта отчета

Теперь, когда БСП знает о необходимости вызова событий, перейдем в модуль объекта нашего отчета. Нам нужно реализовать две ключевые процедуры: ОпределитьНастройкиФормы и ПриСозданииНаСервере. Рассмотрим подробнее их назначение.

Процедура ОпределитьНастройкиФормы включает флаг использования серверного события при создании формы:


Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
    Настройки.События.ПриСозданииНаСервере = Истина;
КонецПроцедуры

А в процедуре ПриСозданииНаСервере мы перехватываем ссылку на документ-основание, которая передается в структуре Параметры под ключом ПараметрКоманды, и устанавливаем ее в настройки компоновщика (СКД):


Процедура ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка) Экспорт
    Параметры = ЭтаФорма.Параметры;
    
    // Если отчет открыт из команды документа, заполняем отбор
    Если Параметры.Свойство("ПараметрКоманды") Тогда
        // Устанавливаем отбор по документу в пользовательские настройки
        ЭтаФорма.ФормаПараметры.Отбор.Вставить("ЗаказПереработчику", Параметры.ПараметрКоманды);
        
        // Дополнительно можно настроить КлючНазначенияИспользования для сохранения настроек
        ЭтаФорма.ФормаПараметры.КлючНазначенияИспользования = Параметры.ПараметрКоманды;
    КонецЕсли;
КонецПроцедуры

Шаг 5. Регистрация в переопределяемом модуле (Важно!)

Для того чтобы новые настройки отчета вступили в силу, часто требуется зарегистрировать отчет в общем переопределяемом модуле конфигурации. В УТ 11 и КА 2 это модуль ВариантыОтчетовУТПереопределяемый (или аналогичный в вашей конфигурации).

Разберем, как это сделать в процедуре НастроитьВариантыОтчетов. Если вы работаете с расширением, используйте аннотацию &После:


&После("НастроитьВариантыОтчетов")
Процедура Расш1_НастроитьВариантыОтчетов(Настройки)
    ОписаниеОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.КонтрольПоставки2019);
    ОписаниеОтчета.ОпределитьНастройкиФормы = Истина;
    
    ОписаниеВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, ОписаниеОтчета, "Основной");
    ОписаниеВарианта.Описание = НСтр("ru = 'Новый отчет по контролю поставок с фильтром по документу'");
КонецПроцедуры

Шаг 6. Обновление информации в базе данных

После написания кода отчет все еще может не попадать в нужные массивы БСП. Выясним причину: система хранит информацию о вариантах отчетов в справочнике «Варианты отчетов». Чтобы принудительно обновить этот кэш без перезапуска всей базы с ключом обновления ИБ, можно выполнить в консоли кода следующую команду:

ВариантыОтчетов.Обновить(Метаданные.Отчеты.КонтрольПоставки2019);

Или воспользоваться стандартной обработкой «Обновление вспомогательных данных» (доступна в составе «Инструментов разработчика»).

Рекомендации по отладке

Если после всех манипуляций процедура ПриСозданииНаСервере в модуле объекта по-прежнему не срабатывает, рекомендуем проверить следующие моменты:

  1. Общая форма отчета: Убедитесь, что у вашего отчета в метаданных НЕ назначена своя уникальная форма, а используется общая форма подсистемы (обычно это ОбщаяФорма.ФормаОтчета).
  2. Права доступа: Проверьте, что у пользователя есть права на просмотр этого отчета в расширении. Если прав нет, БСП исключит отчет из выдачи еще до этапа отрисовки формы.
  3. Функциональные опции: Если команда обернута в проверку ПолучитьФункциональнуюОпцию, убедитесь, что эта опция включена в программе.

Применяя этот структурный подход, вы сможете корректно интегрировать любой кастомный отчет в типовые бизнес-процессы конфигураций 1С, обеспечивая пользователям удобный доступ к аналитике прямо из форм документов.

← На главную