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