Каталог решений - Вывод результата СКД в таблицу значений

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

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

В наличии

Вывод результата СКД в таблицу значений по Отбору Компоновки Данных

Категория:

Описание

1) В обработку добавим Макет с типом “Схема компоновки данных” (СКД) (рис.1)

 2) Откроем нашу СКД(Макет) и опишем её (Сделаем запрос, заполним “Выбранные поля” и “Отборы”). (рис.2 и рис.3)

3) Добавим реквизит формы “ОтборНаФорме” с типом “КомпоновщикНастроекКомпоновкиДанных”. Перенесём таблицу  с отборами на форму.(рис.4). Реквизит мы назвали "ОтборНаФорме", но там не только настройки отбора. Помимо "Отбора", на форму можно вынести: "Параметры данных", "Выбор", "Порядок" — любую настройку Компоновщика Настроек — ОтборНаФорме.Настройки.  

4) Добавим реквизит формы “ТаблицаОжиданий” с типом "ТаблицаЗначений", куда будем выгружать результата нашей СКД. Перенесём таблицу на форму. (рис.5).

5) В обработчике формы “ПриСозданииНаСервере” Инициализируем компоновку, чтобы окошко с отборами заполнялось выбранными отборами нашего СКД.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ИнициализироватьКомпоновкуДанных(Ложь);
	
КонецПроцедуры

&НаСервере
Процедура ИнициализироватьКомпоновкуДанных(ВсегдаИспользоватьНастройкиПоУмолчанию)
	
	СхемаКомпоновкиДанных = РеквизитФормыВЗначение("Объект").ПолучитьМакет("СКДОтбора");
	
	URLСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, Новый УникальныйИдентификатор());
	
	ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСхемы);
	
	ОтборНаФорме.Инициализировать(ИсточникНастроек);
	
	ОтборНаФорме.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
					
КонецПроцедуры

 6) Осталось выполнить нашу СКД(Макет) по Настройкам на форме (ОтборНаФорме.Настройки) и результат загрузить в таблицу значений

&НаКлиенте
Процедура Заполнить(Команда)
	ЗаполнитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНаСервере()
	
	ТаблицаОжиданий.Очистить();

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

 

Стоит отметить:

1) В компоновщик настроек можно передать параметры. Параметры должны быть в описании нашей СКД (закладка "Параметры").  "НастройкиКомпановщикаНастроек" — в нашем примере это "ОтборНаФорме.Настройки"

Процедура УстановитьЗначениеПараметраНастроек(НастройкиКомпоновщикаНастроек, ИмяПараметра, Значение)
	Параметр = НастройкиКомпоновщикаНастроек.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
	Если Параметр <> Неопределено Тогда
		Параметр.Значение = Значение;
		Параметр.Использование = Истина;
	КонецЕсли;
КонецПроцедуры

2) Настройки нашего реквизита "ОтборНаФорме" можно сохранять/восстанавливать, например, в/из константы.

Сохраняем:

&НаСервере
Процедура СохранитьНастройкиНаСервере()
	Константы.НастройкиНазначенияЗадачПоРезультатамАнкетирования.Установить(Новый ХранилищеЗначения(ОтборНаФорме.Настройки, Новый СжатиеДанных(9)));
КонецПроцедуры

&НаКлиенте
Процедура СохранитьНастройки(Команда)
	СохранитьНастройкиНаСервере();
КонецПроцедуры

В процедуре инициализации восстанавливаем:

ТекНастройки = Константы.НастройкиНазначенияЗадачПоРезультатамАнкетирования.Получить().Получить();
Если ТекНастройки = Неопределено Или ВсегдаИспользоватьНастройкиПоУмолчанию Тогда
     ОтборНаФорме.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
Иначе
     ОтборНаФорме.ЗагрузитьНастройки(ТекНастройки);
КонецЕсли;
ОтборНаФорме.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность);

3) Результат СКД можно выгрузить в "ДеревоЗначений". Имеет смысл, если Структура нашего СКД тоже имеет древовидную структуру, имеет больше одной группировки.

4) Результат СКД можно выгружать не только в КоллекциюЗначений, коей является ТаблицаЗначений, но и в ТабличныйДокумент. Для этого нужно указать другой объект для вывода результата и в параметрах процедуры выполнения компоновщика указать тип генератора.

Для таблицы значений:

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

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

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

5) Текст запроса СКД можно изменить. Конечно, менять текст имеет смысл только в процедуре выполнения компоновщика, в нашей случае это процедура ЗаполнитьНаСервере()

СхемаКомпоновкиДанных.НаборыДанных.Основной1.Запрос = СтрЗаменить(ТекстЗапроса, "ПЕРВЫЕ 7", "ПЕРВЫЕ " + Строка(КоличествоДокументов));

Таким образом, обработка может работать в ручном режиме и в автоматическом(в режиме регламентного задания, по сохранённым настройкам). Процедуры регламентного режима, которые выполняют СКД по Настройкам, конечно, должны быть размещены в модуле объекта обработки.

Для автоматического режима ничего восстанавливать не нужно. Форму мы не открываем. Передаём сохранённую настройку из константы(НастройкаИзКонстанты) прямо в функцию выполнения Компоновщика.

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

Не нужно открывать конфигуратор и менять условия в запросах, достаточно изменить настройки компановщика в хранилище. Мало того, одна СКД может отрабатывать по нескольким настройкам.

Все описанные возможности есть в присоединённом файле.

 

has been added to your cart:
Оформление заказа