Как автоматически передать ссылку на документ в СКД при открытии дополнительного отчета?

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

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

Понимание механизма передачи параметров

Когда вы подключаете внешний отчет через механизм Дополнительные отчеты и обработки, платформа 1С при запуске команды из формы документа передает в отчет специальный параметр ОбъектыНазначения. Этот параметр представляет собой массив, содержащий ссылки на объекты, для которых был вызван отчет. Именно этот массив является «ключом» к решению вашей задачи.

Шаг 1: Получение ссылки в модуле формы

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

Разберем пример кода для модуля формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Проверяем, передан ли нам массив объектов
    Если Параметры.Свойство("ОбъектыНазначения") И ТипЗнч(Параметры.ОбъектыНазначения) = Тип("Массив") Тогда
        Если Параметры.ОбъектыНазначения.Количество() > 0 Тогда
            // Сохраняем ссылку в реквизит объекта для последующего использования
            Объект.ДокументСсылка = Параметры.ОбъектыНазначения[0];
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Шаг 2: Передача параметра в СКД (Модуль объекта)

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

Посмотрим, как выполнить установку параметра правильно:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь; // Отключаем стандартный вывод, чтобы управлять процессом вручную

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

    // Инициализируем схему и макет
    СхемаКомпоновки = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, Настройки, ДанныеРасшифровки);

    // Выводим результат
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры

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

Если после выполнения указанных действий отчет не выводит данные, проанализируйте следующие моменты:

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

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

← На главную