Автор: Дмитрий   Дата: 2018-07-07 13:52:47

Результат работы системы компоновки данных в таблицу значений

Стоит задача вывести результат работы СКД в таблицу значений.

1. Создаем обработку.

2. Добавляем макет. Тип макета: Схема компоновки данных.

Макет СКД

3. В макете пишем запрос, его не будем усложнять.

Запрос в макете СКД

ВЫБРАТЬ
	РасчетыСКонтрагентамиОстаткиИОбороты.Контрагент,
	РасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовНачальныйОстаток,
	РасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток,
	РасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовПриход,
	РасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовРасход
ИЗ
	РегистрНакопления.РасчетыСКонтрагентами.ОстаткиИОбороты(, , Регистратор, , ) КАК РасчетыСКонтрагентамиОстаткиИОбороты

4. Переходим на закладку Параметры. Видим два параметра: НачалоПериода и КонецПериода. Данные параметры в СКД получены из виртуальной таблицы запроса. В дальнейшем мы будем использовать.

Параметры СКД

5. Вкладка Настройки. Добавим Новая группировка. Значение Поля оставим не заполненым. Тип: Без иерархии.

Добавляем новую группировку

Группировка

Детальные записи

6. Добавляем новую форму. Размещаем элемент управления Выбор периода, таблицу значений ТЗЕ.

Форма

7. Код в модуле формы:

Процедура КнопкаВыполнитьНажатие(Кнопка)
	// Вставить содержимое обработчика.
	ВыгрузкаРезультатаСКД(ТЗЕ, НачПериода,КонПериода);
	ЭлементыФормы.ТЗЕ.СоздатьКолонки();
КонецПроцедуры

Процедура ВыбПериодНажатие(Элемент)
	НастройкаПериода = Новый НастройкаПериода;
	НастройкаПериода.РедактироватьКакИнтервал = Истина;
	НастройкаПериода.РедактироватьКакПериод = Истина;
	НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
	НастройкаПериода.УстановитьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));
	Если НастройкаПериода.Редактировать() Тогда
		НачПериода = НастройкаПериода.ПолучитьДатуНачала();
		КонПериода = НастройкаПериода.ПолучитьДатуОкончания();
	КонецЕсли;
КонецПроцедуры

8. Код в модуле объекта:

Процедура ВыгрузкаРезультатаСКД(ТаблицаЗначенияРезультат, НачПериода,КонПериода) Экспорт
	СКД = ПолучитьМакет("Макет");
	
	//Загружаем настройки (НастройкиПоУмолчанию) из схемы копоновки данных
	КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; 
	КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД)); 
	КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию); 
	
	// устанавливаем параметры отчета
	НастройкиКомпоновщика = КомпоновщикНастроек.Настройки; 
	ПараметрыНастройки = НастройкиКомпоновщика.ПараметрыДанных; 
	
	//Ищем парамеры: НачалоПериода и КонецПериода. (Эти параметры определены в СКД) 
	ЗначениеПараметра = ПараметрыНастройки.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода")); 
	ЗначениеПараметра.Значение = НачПериода;  //НачПериода - получаем из формы
	ЗначениеПараметра = ПараметрыНастройки.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода")); 
	ЗначениеПараметра.Значение = КонецДня(КонПериода); 

	//Получаем макет компоновки    
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; 
	МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СКД, НастройкиКомпоновщика,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); 

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

	ТаблицаЗначенияРезультат = Новый ТаблицаЗначений; 
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; 

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