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