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