Как прикрепить внешний отчет к конфигурации и передать в него ссылку на документ?

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

В процессе разработки внешних печатных форм и отчетов часто возникает необходимость открывать отчет прямо из формы документа, передавая при этом ссылку на этот документ для автоматического отбора данных в запросе. В типовых конфигурациях, использующих Библиотеку стандартных подсистем (БСП), это реализуется через механизм дополнительных отчетов и обработок. Давайте разберем этот процесс по шагам.

Реализация модуля объекта для передачи параметров

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

Рассмотрим реализацию кода в модуле объекта:


Функция СведенияОВнешнейОбработке Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет();
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.Наименование = "НазваниеОтчета";
    ПараметрыРегистрации.Назначение.Добавить("Документ.НужныйДокумент");
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    ПараметрыРегистрации.Информация = "НазваниеОтчета";
    ПараметрыРегистрации.ОпределитьНастройкиФормы = Истина;

    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "НазваниеОтчета";
    НоваяКоманда.Идентификатор = "ИмяОбработки";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    НоваяКоманда.ПоказыватьОповещение = Истина;
    
    Возврат ПараметрыРегистрации;
КонецФункции

Настройка формы отчета

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


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

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

Основные нюансы работы

При реализации данного решения важно учитывать следующие моменты:

  1. Передача ссылки: Параметр ОбъектыНазначения является массивом. Так как мы вызываем отчет из одного конкретного документа, нас интересует первый элемент — ОбъектыНазначения[0].
  2. Работа с СКД: Чтобы отчет сразу отфильтровался по документу, параметр ПараметрВОтчете должен быть описан в схеме компоновки данных. Имя параметра в коде должно строго соответствовать имени, заданному в СКД.
  3. Использование типовых механизмов: Создание отдельной кнопки на форме документа (вне панели «Отчеты» или «Печать») требует внесения изменений в форму самого документа. В 1С это крайне не рекомендуется, так как документ снимается с поддержки, что значительно усложняет обновление программы. Правильным подходом является использование именно подсистемы ДополнительныеОтчетыИОбработки.

Если после внедрения кода отчет открывается, но данные не фильтруются, рекомендуем установить точку останова в процедуре ПриСозданииНаСервере. В отладчике можно просмотреть содержимое параметра Параметры и убедиться, что структура ОбъектыНазначения заполнена корректно. Также убедитесь, что в функции СведенияОВнешнейОбработке указан точный тип документа, к которому вы привязываете внешний отчет.

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

← На главную