Имя: Пароль:
1C
1С v8
Пользовательский фильтр в отчете на СКД программно
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
В итоге просто добавил отбор, в параметры запроса:
Для Каждого ЭлементОтбора Из Настройки.Отбор.Элементы Цикл
          Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация") И ЭлементОтбора.Использование
              И ЭлементОтбора.ВидСравнения = ВидСравненияПользователя  Тогда
              Запрос.УстановитьПараметр("Организация", ЭлементОтбора.ПравоеЗначение);
              
          КонецЕсли;
КонецЦикла;

Отбор только один, поэтому пока сойдет. Но я читал, что лучше через построитель такое делать.
Тема закрыта
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн