|
Пользовательский фильтр в отчете на СКД программно |
☑ |
0
BenDiget
27.12.22
✎
15:14
|
Ребят, привет!
Делаю отчет на СКД с емким результатом запроса. Как бы сделать так, чтобы пользовательский отбор влиял на Запрос, а не на результат запроса. Чтобы отчет формировался быстрее?
Вот мой код: Таблицу запроса получаю функцией: ПолучитьТаблицуСвязей()
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТаблицаСвязей = ПолучитьТаблицуСвязей();
//Связь между таблицей значений и именами в СКД
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ТаблицаСвязей", ТаблицаСвязей);
//Макет компоновки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
//Компоновка данных
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
//Вывод результата
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
|
|
1
BenDiget
27.12.22
✎
15:16
|
Возможно будут другие рекомендации, как фильтр правильно настроить. Уточню: например пользователь захотел отобрать по Организации, добавил на форме отчета отбор. И у меня Запрос отработал уже с этим отбором. Если так нельзя, то как лучше?
|
|
2
SleepyHead
гуру
27.12.22
✎
15:30
|
Как вариант - делай свой набор данных-объект, и заполняй его как тебе хочется.
|
|
3
toypaul
гуру
27.12.22
✎
16:42
|
очистить отбор в ЭтотОбъект.КомпоновщикНастроек после того как получил таблицу связей
|
|
4
Мультук
гуру
27.12.22
✎
17:55
|
(3)
Я думаю, он хочет вот так, чтобы получить в "ТаблицаСвязей" не 100 млн строк, а по отборам из компоновщика
ТаблицаСвязей = ПолучитьТаблицуСвязей(ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки());
|
|
5
BenDiget
29.12.22
✎
11:51
|
В итоге просто добавил отбор, в параметры запроса:
Для Каждого ЭлементОтбора Из Настройки.Отбор.Элементы Цикл
Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация") И ЭлементОтбора.Использование
И ЭлементОтбора.ВидСравнения = ВидСравненияПользователя Тогда
Запрос.УстановитьПараметр("Организация", ЭлементОтбора.ПравоеЗначение);
КонецЕсли;
КонецЦикла;
Отбор только один, поэтому пока сойдет. Но я читал, что лучше через построитель такое делать.
Тема закрыта
|
|