Капитально об программе 1С 8.0-8.3-8.4, 7.7

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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