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