Программный вывод СКД (система компоновки данных) в 1с 8.2

Программный вывод СКД (система компоновки данных) в 1с 8.2

Ниже приведен пример программного вывода отчета с использованием системы компоновки данных. Обратите внимание на комментарии в программном коде.

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

// Поэтому устанавливаем параметры программно
 ПараметрСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(“ВидСредств”);
    ПараметрСКД.Использование = Истина;
 Если НЕ ЗначениеЗаполнено(ПараметрСКД.Значение) Тогда
     ПараметрСКД.Значение      = Перечисления.ВидыСредств.ЛимитыБюджетныхОбязательств;
 КонецЕсли;
 
 ПараметрСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(“ФинансовыйГод”);
    ПараметрСКД.Использование = Истина;
 Если НЕ ЗначениеЗаполнено(ПараметрСКД.Значение) Тогда
  ПараметрСКД.Значение = НачалоГода(ТекущаяДата());
 КонецЕсли;
 
// Переносим настройки из настроек в пользовательские настройки

 ТаблицаОтборов = ПолучитьТаблицуОтборов();
 Н = 0;
 Для Каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
  СтрокаТаблицы = ТаблицаОтборов.Получить(Н);
  ЭлементПользовательскогоОтбора = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[СтрокаТаблицы.Индекс+3];  
  
  ЭлементОтбора.Использование = ЭлементПользовательскогоОтбора.Использование;
  ЭлементОтбора.ПравоеЗначение = ЭлементПользовательскогоОтбора.ПравоеЗначение;
  Н = Н + 1;
 КонецЦикла;
  // Программно выводим отчет
 КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
 
 СхемаКомпоновкиДанных = ПолучитьМакет(“СхемаКомпоновкиДанных”);
 МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);

 ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
 ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

 ДокументРезультат.Очистить();
 
 ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
 ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
 
 ПроцессорВывода.Вывести(ПроцессорКомпоновки);
 
 // эта таблица должна совпадать с порядком и названиями
 // элементов отбора отчета
 Для Каждого Строка Из ТаблицаОтборов Цикл
  Если Строка.Индекс+3 <= КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Количество()-1 Тогда
   ЭлементОтбора = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[Строка.Индекс+3];
   //Сообщить(СокрЛП(ЭлементОтбора.ПравоеЗначение) + ” индекс  = ” + Н);
  
   Если ЭлементОтбора.Использование Тогда
    УстановитьНазвание = Истина;
   Иначе
    Установитьназвание = Ложь;
   КонецЕсли;
// В отчете нарисована собственная шапка. В ней необходимо установить значения параметров.

// Для этого в сформированном табличном документе делаем поиск текста и меняем его на значения параметров.   
   Область = ДокументРезультат.НайтиТекст(“&” + Строка.Название);
   Если Область<>Неопределено Тогда
    Если УстановитьНазвание Тогда
     Область.Текст = СокрЛП(ЭлементОтбора.ПравоеЗначение);
     ЗаменитьНазваниеКода(ДокументРезультат, Строка.НазваниеКода, ЭлементОтбора.ПравоеЗначение.Код);
    Иначе
     Область.Текст = “”;
     ЗаменитьНазваниеКода(ДокументРезультат, Строка.НазваниеКода, “”);
    КонецЕсли;
   КонецЕсли;
  КонецЕсли;
  
 КонецЦикла;
  
КонецПроцедуры