1 дек. 2016 г.

Множественный отобор в списке Справочника 7.7

Для реализации возможности одновременно выбора фильтров по нескольким значениям в форме списка справочника я сначала добавил флажки на форму где каждому флажку присвоил Заголовок и Идентификатор, а во вкладке Дополнительно написал такую формулу
?(Новый = 1,УстановитьФильтры(Перечисление.СтатусДокумента.Новый,1),УстановитьФильтры(Перечисление.СтатусДокумента.Новый,0))
ну типа, если флажок установлен, тогда мы в функцию передаем по какому фильтру мы 
будем искать элементы в списке.

А вот и самое главное
Перем АрхивТТН;        
Перем СписокСтатусов;  
             
Функция ПодготовитьФильтр(СтатусПоиска,ДобавитьУдалить)             
                                                            
 Если ДобавитьУдалить = 1 Тогда
  //добавляем 
  АрхивТТН.ВыбратьЭлементыПоРеквизиту("Статус",СтатусПоиска,,0);
  Пока АрхивТТН.ПолучитьЭлемент() = 1 Цикл      
   НайденныйЭлемент = СписокСтатусов.НайтиЗначение(АрхивТТН.ТекущийЭлемент());
   Если НайденныйЭлемент= 0 Тогда    
    //документ добавляем в список фильтров
    СписокСтатусов.ДобавитьЗначение(АрхивТТН.ТекущийЭлемент());
   Иначе      
    //документ уже есть в списке фильтров
    Продолжить;
   КонецЕсли;
  КонецЦикла;    
 Иначе
  //удаляем        
  АрхивТТН.ВыбратьЭлементыПоРеквизиту("Статус",СтатусПоиска,,0);  
  Пока АрхивТТН.ПолучитьЭлемент() = 1 Цикл      
   НайденныйЭлемент = СписокСтатусов.НайтиЗначение(АрхивТТН.ТекущийЭлемент());   
   Если НайденныйЭлемент <> 0 Тогда    
    //элемент найден в списке фильтров
    СписокСтатусов.УдалитьЗначение(НайденныйЭлемент);  
   КонецЕсли;
  КонецЦикла;
 КонецЕсли;            
 
 Возврат СписокСтатусов;
    
КонецФункции     

Функция УстановитьФильтры(СтатусПоиска,ДобавитьУдалить)          
 СписокСтатусов = ПодготовитьФильтр(СтатусПоиска,ДобавитьУдалить);   
 Если СписокСтатусов.РазмерСписка() = 0 Тогда      
  ИспользоватьСписокЭлементов();
 Иначе
  ИспользоватьСписокЭлементов(СписокСтатусов);
 КонецЕсли;
КонецФункции                                           

АрхивТТН = СоздатьОбъект("Справочник.АрхивТТН");
СписокСтатусов = СоздатьОбъект("СписокЗначений");         
где мы сначала объявляем переменные и присваиваем им значения Справочника где будем
искать значения и СписокЗначений куда будем ложить найденные по множественному фильтру
значения.
Далее логика такая, если флажок установлен мы по передаваемом значении флажка ищем в нашем
справочнике нужное значение и если находим то записываем найденное значение в СписокЗначений.
Плюс если мы сняли флажок тогда мы должны опять найти в Справочнике нужное нам значение
и потом по найденном значении проверить, есть ли оно в СпискеЗначений, если есть тогда удалить,
ведь мы уже не хотим иметь по данном значении (флажке) фильтр.
Только после того как заполнился СписокЗначений мы можем воспользоваться методом платформы
для отбора в списке Формы ИспользоватьСписокЭлементов()куда нам нужно поместить список значений
с теми значениями, по которым нужно отфильтровать список, ну а если СписокЗначений наш пуст, тогда
ничего не передавая в ИспользоватьСписокЭлементов()мы отключим все фильтры

Вот результат


На всякий случай конфигурация, в ней это реализовано в АрхивТТН объекте, форма Списка.

Продолжение


 

CopyPaste Copyright © 2017 - |- Шаблон создан O Pregador - |- Отредактирован myr4ik07