Как программно сформировать отчет на СКД

Очень часто приходится формировать отчет на “компоновке”  с внешним источником данных.

Это несложно сделать, если у вас есть изначально созданный макет схемы.

Программный вывод СКД

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

//Заранее созданная компоновка, с полями совпадающими по имени с полями таблицы значений
СхемаКомпоновкиДанных = ПолучитьМакет(“ОсновнаяСхемаКомпоновкиДанных”);

//ПолеТабличного документа или Новый ТабличныйДокумент для вывода
Результат = ЭлементыФормы.Результат;
Результат.Очистить();
    

//Далее вспомогательные объекты
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
Настройка = КомпоновщикНастроек.Настройки;    
    
//Применяем настройки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройка, ДанныеРасшифровки);
    

//Передаем данные
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ИспользоватьВнешниеФункции = Ложь;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, Новый Структура(“Данные”, Данные), ДанныеРасшифровки,ИспользоватьВнешниеФункции);

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

 

Вот такой лишь поверхностно сложный код вывода СКД

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

тогда отчет будет корректно сформирован.

В данной конструкции кода данные можно фильтровать как на этапе формирования таблицы значений, так и средствами СКД

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

ЗначениеДатаНач = Настройки.ПараметрыДанных.Элементы.Найти(“НачДата”);

Если НЕ ЗначениеДатаНач = Неопределено Тогда
    ЗначениеДатаНач.Значение = ТекущаяДата();
КонецЕсли;    

Газетные объявления содержат больше правды о том, что происходит в стране, чем газетные передовицы.

— Г. Бичер