Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Як створити форму налаштування відборів для ТЗ на основі ПостроителяЗапроса или ПостроителяОтчета
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
alex_shkut
Власне завдання: Створити множинний відбір для ТЗ як у списках документів і т.і.
Є форма з ТЗ.
Форма додана до Документу.
Сам відбір доступний у ПострительЗапроса - все гарно.
Як створити та відобразити форму налаштування цих відборів як у стандартних списках типу: Використання, Поле, Тип порівняння, значення?
В мене проблема сформувати та показати цю форму.
Які є ідеї?

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

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

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

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

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

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

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

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


где

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

Для Каждого СтрокаКоллекции Из ТаблицаОтборов Цикл
       Отбор = Построитель.Отбор.Добавить(СтрокаКоллекции.ИмяОтбора);
       Отбор.ВидСравнения = СтрокаКоллекции.ВидСравнения;
       Отбор.Использование  = Истина;
       Отбор.Значение = СтрокаКоллекции.Значение;
   КонецЦикла;
alex_shkut
AnryMc @ Сегодня, 15:31 необходимо зарегистрироваться для просмотра ссылки ,
Як виконати - я знаю. Як показати користувачу налаштування цих отборів?
Щоб у формі не було таблиці ПостроительОтчета.Отбор на все хлебало, а відкривалася окрема форма тиму стандартного налаштування отборів.
Для Каждого СтрокаКоллекции Из ТаблицаОтборов Цикл


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

alex_shkut @ Сегодня, 15:59 необходимо зарегистрироваться для просмотра ссылки ,
Якраз завдання в тому, щоб дати можливість користувачу вібрати ці самі отбори. Множинні.
nik389
alex_shkut @ Сегодня, 17:01 необходимо зарегистрироваться для просмотра ссылки ,
я робив щось подібне, через КомпоновщикНастроекКомпоновкиДанных



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

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


Отримав повноцінну структуру усіх можливих отборів по ТЗ.
По видимих колонках, бо буду обробляти також накопичуваний відбір "по значенню у поточній колонці".
alex_shkut
alex_shkut @ 19.03.24, 18:13 необходимо зарегистрироваться для просмотра ссылки ,

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


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

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

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


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