Версия для печати темы (https://pro1c.org.ua/index.php?s=d82cd75ba77d40a49992107517bba559&showtopic=67510)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Як створити форму налаштування відборів для ТЗ на основі ПостроителяЗапроса или ПостроителяОтчета

Автор: alex_shkut 19.03.24, 15:28

Власне завдання: Створити множинний відбір для ТЗ як у списках документів і т.і.
Є форма з ТЗ.
Форма додана до Документу.
Сам відбір доступний у ПострительЗапроса - все гарно.
Як створити та відобразити форму налаштування цих відборів як у стандартних списках типу: Використання, Поле, Тип порівняння, значення?
В мене проблема сформувати та показати цю форму.
Які є ідеї?

alex_shkut @ Сегодня, 15:24 * ,
У мене є ідея винести цю форму у Обробку і там це трохи простіше.
Користувач взагалі нічого не помітить, бо явного зв'язку з Документом немає ніякого.

alex_shkut @ Сегодня, 15:27 * ,
І прошу мене не хаяти - "це папереднікі", розгрібаю г...

Автор: AnryMc 19.03.24, 15:31

alex_shkut @ Сегодня, 16:27 * ,

  Построитель = Новый ПостроительОтчета;
   Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(МояТЗ);

   //первый отбор
       Отбор = Построитель.Отбор.Добавить("МояКолонкаОтбора1");
       Отбор.ВидСравнения = ВидСравнения.МеньшеИлиРавно; //или друге
       Отбор.Использование  = Истина;
       Отбор.Значение = ЗначениеСравнения1;

   //первый отбор
       Отбор = Построитель.Отбор.Добавить("МояКолонкаОтбора2");
       Отбор.ВидСравнения = ВидСравнения.МеньшеИлиРавно; //или друге
       Отбор.Использование  = Истина;
       Отбор.Значение = ЗначениеСравнения2;

   //первый отбор
       Отбор = Построитель.Отбор.Добавить("МояКолонкаОтбора3");
       Отбор.ВидСравнения = ВидСравнения.МеньшеИлиРавно; //или друге
       Отбор.Использование  = Истина;
       Отбор.Значение = ЗначениеСравнения3;

   ПостроительЗапроса.Выполнить();
   Результат = ПостроительЗапроса.Результат.Выгрузить();

//Результат - Куда выгружаем отобраную ТЗ


где

   
// ТаблицаОтборов - Таблица значений с колонками
// ИмяОтбора - Строка
// ВидСравнения - ВидСравнения
// Значение - Any
// Возвращает отфильтрованную таблицу значений

Для Каждого СтрокаКоллекции Из ТаблицаОтборов Цикл
       Отбор = Построитель.Отбор.Добавить(СтрокаКоллекции.ИмяОтбора);
       Отбор.ВидСравнения = СтрокаКоллекции.ВидСравнения;
       Отбор.Использование  = Истина;
       Отбор.Значение = СтрокаКоллекции.Значение;
   КонецЦикла;

Автор: alex_shkut 19.03.24, 16:01

AnryMc @ Сегодня, 15:31 * ,
Як виконати - я знаю. Як показати користувачу налаштування цих отборів?
Щоб у формі не було таблиці ПостроительОтчета.Отбор на все хлебало, а відкривалася окрема форма тиму стандартного налаштування отборів.

Для Каждого СтрокаКоллекции Из ТаблицаОтборов Цикл


Як налаштувати цю саму ТаблицаОтборов?
Ага, і якщо це не ПостроительОтчета, а ПостроительЗапроса?
У ПостроителяЗапроса також є Відбір.
Навіщо мені "паровозом куча непотрібного функціоналу?

alex_shkut @ Сегодня, 15:59 * ,
Якраз завдання в тому, щоб дати можливість користувачу вібрати ці самі отбори. Множинні.

Автор: nik389 19.03.24, 16:39

alex_shkut @ Сегодня, 17:01 * ,
я робив щось подібне, через КомпоновщикНастроекКомпоновкиДанных



користувач сам може додати потрібні отбори

Автор: alex_shkut 19.03.24, 17:05

nik389 @ Сегодня, 16:39 * ,
Щось подібне до стандартної форми настройки відборів для звичайних форм.
ПостроительЗапроса - 10%
ПостроительОтчета - 50%
СКД - 120%
Навіщо зайвий функціонал, тормоза і оперативна пам'ять для простої задачі?
Тим більше, що наступне використовує попереднє.
А досить лише ПостроительЗапроса.

Автор: nik389 19.03.24, 18:01

alex_shkut @ Сегодня, 18:05 * ,
ну то добре, робіть як вам зручніше, ви спитали "як показати користувачу налаштування", я навів приклад, можливо, я щось не так зрозумів і ви мали на увазі зовсім інше
щодо "тормозів та зайвого функціоналу" - це все дуже суб`єктивне. ніколи ніяких тормозів з використанням скд, у відборах, сортуванні та іншого, не спостерігав, якщо з розумом робити
тим більше у типових, це доволі розповсюджений варіант

Автор: alex_shkut 19.03.24, 18:13

nik389 @ Сегодня, 18:01 * ,
Я намагаюся створити функціонал отбору для ТЗ, такий як типовий для звичайних форм списків документів, тощо.
Без зайвого навантаження типу СКД и т.і.
Просто і лаконічно.

Ну ось є перші результати.

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


Отримав повноцінну структуру усіх можливих отборів по ТЗ.
По видимих колонках, бо буду обробляти також накопичуваний відбір "по значенню у поточній колонці".

Автор: alex_shkut 21.03.24, 18:49

alex_shkut @ 19.03.24, 18:13 * ,

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


Процедура КоманднаяПанельВРаботеНастроитьОтбор(Кнопка)

    ФормаО = Документы.ЗаказНаРемонт.ПолучитьФорму("ФормаОтбора",ЭтаФорма);
    ФормаО.ТаблицаОтбор = мОтбор;
    ФормаО.ОткрытьМодально();
    СписокВРаботе = ПолучитьТаблицуПоСостоянию(Перечисления.СтатусыРабот.ВРаботе,мОтбор);

КонецПроцедуры


Где ФормаО.ТаблицаОтбор = Тип Отбор;
Дальше разберетесь, думаю.
Прикольно, что можно использовать методы ПостроителяЗапроса, немного добавляя (убавляя) параметры - еще не пробовал, но наверное легче чем вручную формировать условия для своего запроса.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua