Каталог решений - Отборы СКД на форме УФ

Описание

Доброго времени суток. Возникла у меня потребность в динамическом отборе таблицы значений. На не управляемых формах эту функцию использовал очень часто. Но на УФ как то не доводилось. Но понадобилось. И после изучения данного вопроса получился аккуратный шаблон для использования.

Создание динамического отбора для ТЗ

  1. Создаем реквизит с типом «КомпоновщикНастроекКомпоновкиДанных»
  2. Создадим для наглядности два реквизита ДатаНачала и ДатаОкончания
  3. Далее создаем Макет СКД который будит выбирать необходимую таблицу значений.

С одним условием Период ДатаНач и ДатаОкон.

 

 

В запросе СКД я выбираю Список документов за период.

Дальше создаем таблицу значений и переходим к формированию формы.

  1. Выносим реквизиты Периода
  2. Потом выносим реквизит на форму для формирования отбора Настройки (это наш КомпоновщикНастроекКомпоновкиДанных )->Настройки->Отбор (Объект.Настройки.Настройки.Отбор)
  3. И ,соответственно, нашу таблицу значений выносим на форму. Также не забываем команду для запуска отбора
  4. Далее переходим в модуль формы
  5. При создании на сервере прописываем такой код. Это необходимо для того чтобы в таблицу подтянулись настройки отборов из СКД  
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ОО = РеквизитФормыВЗначение("Объект");	
	
	СКД = ОО.ПолучитьМакет("МакетСКД");
	
	URLСКД = ПоместитьВоВременноеХранилище(СКД, Новый УникальныйИдентификатор()); 	
	ОО.Настройки.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСКД));	
	
	НастройкиПоУмолчанию = СКД.НастройкиПоУмолчанию;	
	ОО.Настройки.ЗагрузитьНастройки(НастройкиПоУмолчанию);	
	ЗначениеВРеквизитФормы(ОО, "Объект");
	
КонецПроцедуры

 

  1. Описываем команду для формирования ТЗ
&НаКлиенте
Процедура Команда1(Команда)	
	Страт();
КонецПроцедуры

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


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

 

Сохраняем и проверяем.

 

Вот что у нас получилось. Спасибо за внимание .

PS 

 

 

Тестировалась на платформе 1С:Предприятие 8.3 (8.3.18.1741).

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