Как в 1С:СКД вывести в схемы компановки данных друг под другом

Давно я не писал ничего по 1с, хотя и в этом стеке много что полезного происходит. Итак сегодня хотел бы поделиться найденным решением по вопросу как вывести 2 таблицы СКД друг под другом. Набор данных один, отличие только в установленном отборе и заголовке отчета.

Гуглеж увы ни к чему не привел. В итоге полез в отладку и документацию по СКД. На задачу было потрачено часов больше чем я ожидал, а потому грех не поделиться решением. Быть может для кого то будет полезно.

Набор данных у нас один как и говорилось выше:

А вот варианта отчета будут уже два:

В настройках каждого отбора отключаем вывод параметров и отборов:

Ну и самое интересное происходит в модуле объекта отчета в событии ПриКомпановкеДанных.
Тут мы программно выводим 2 варианта отчета друг за другом, попутно устанавливая в них нужные нам параметры. В моем случае параметр всего один, это Документ отбора.

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ОбработчикиСобытий

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
//Кешируем значение параметра
кДокумент = КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных.Элементы[0].Значение;
//кДокумент = ЭтотОбъект.Документ;

Для Каждого ВариантНастроек ИЗ СхемаКомпоновкиДанных.ВариантыНастроек Цикл

СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.ВариантыНастроек.Найти(ВариантНастроек.Имя).Настройки);
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
//Загрузим кешировнный документ в параметры Варианта отчета
пДокумент = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("Документ");
пДокумент.Значение = кДокумент;
пДокумент.Использование = Истина;
КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиОтчета);

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

КонецЦикла;
КонецПроцедуры

#КонецОбласти

#КонецЕсли

На выходе получаем 2 отчета друг за другом.

Спасибо за внимание, у меня всё).

Вам также может понравиться

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика