Как программно передать параметры и настроить расшифровку в отчете СКД для обычных форм 1С?

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

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

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

Шаг 1. Установка параметров данных СКД из кода

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

Для прямого задания значений у параметров данных используется метод УстановитьЗначениеПараметра() коллекции ПараметрыДанных. Проанализируем пример кода:


// Создаем объект отчета
ОтчетОбъект = Отчеты.ДенежныеСредстваПоЧекамФР.Создать();

// Получаем и загружаем настройки компоновщика
НастройкиКД = ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки();
ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКД);

// Устанавливаем значения параметров данных
ПараметрыДанных = ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных;
ПараметрыДанных.УстановитьЗначениеПараметра("ДатаНачала", НачалоДня(Дата));
ПараметрыДанных.УстановитьЗначениеПараметра("ДатаКонца", КонецДня(Дата));
ПараметрыДанных.УстановитьЗначениеПараметра("КассаККМ", КассаККМ);
ПараметрыДанных.УстановитьЗначениеПараметра("ФР", ФискальныйРегистратор);

Если требуется принудительно найти параметр по имени и включить его использование вручную, можно использовать метод НайтиЗначениеПараметра():


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

Шаг 2. Почему вместо расшифровки выводятся числа и как это исправить

При выводе отчета через метод СкомпоноватьРезультат() разработчики часто сталкиваются с ситуацией: отчет формируется корректно, но при двойном клике по ячейке с документом или справочником вместо открытия объекта платформа выводит окно с числовым значением.

Выясним причину такого поведения. Число в ячейке — это идентификатор расшифровки компоновки данных. Чтобы платформа знала, как обработать этот идентификатор, объект данных расшифровки необходимо передать напрямую в свойство открываемой формы — Форма.ДанныеРасшифровки.

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

Шаг 3. Итоговый алгоритм программного формирования отчета

Сберем весь алгоритм воедино. Чтобы отчет открылся с установленными параметрами и полноценно работающей расшифровкой, соблюдайте следующую последовательность действий:

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

Посмотрим на готовый рабочий пример кода для обычного приложения:


// Создаем экземпляр отчета
ОтчетОбъект = Отчеты.ДенежныеСредстваПоЧекамФР.Создать();

// Загружаем текущие настройки компоновщика
НастройкиКД = ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки();
ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКД);

// Передаем параметры в компоновщик
ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ДатаНачала", НачалоДня(Дата));
ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ДатаКонца", КонецДня(Дата));
ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КассаККМ", КассаККМ);
ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ФР", ФискальныйРегистратор);

// Получаем форму отчета
ФормаОтчета = ОтчетОбъект.ПолучитьФорму("Отчет.ДенежныеСредстваПоЧекамФР.Форма");

// Скомпонуем результат прямо в элемент формы, передав ФормаОтчета.ДанныеРасшифровки
ОтчетОбъект.СкомпоноватьРезультат(ФормаОтчета.ЭлементыФормы.Результат, ФормаОтчета.ДанныеРасшифровки);

// Открываем готовый отчет
ФормаОтчета.Открыть();

Важное примечание: Убедитесь, что у элемента управления «Табличный документ» на форме отчета (в данном случае Результат) включено свойство ТолькоЧтение (или Защита). Если свойство ТолькоЧтение отключено, двойной клик по ячейке будет переводить ее в режим редактирования текста, а не вызывать механизм расшифровки СКД.

← На главную