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