Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 06:23

Динамическая фильтрация записей в форме списка справочника 1С 8.2

Автор APMEH19, 01 мар 2011, 15:26

0 Пользователей и 1 гость просматривают эту тему.

APMEH19

Не получается настроить программно фильтр в 1с 8.2 :(
Замучался в яндексе искать ответ :xfbnsdfb:

Постановка задачи:
Имеется справочник "Процедуры" с реквизитами "Год" (СправочникСсылка.Год) и "Наименование" (строка).
В форме списка добавлен дополнительный реквизит "Год" (СправочникСсылка.Год).
Необходимо, чтобы при изменении дополнительного реквизита "Год" происходила фильтрация в динамическом списке справочника (по аналогии "Все действия/настроить список/Выбираем вкладку отбор и настраиваем фильтрацию).

progmikon

а что значит "чтобы при изменении дополнительного реквизита "Год" происходила фильтрация в динамическом списке справочника".

APMEH19

Значит, что все элементы элементы справочника, у которых реквизит "год" отличается от выбранного в дополнительном реквизите "Год" значения автоматически скроются.

Дополнительный реквизит "Год", как указано выше, создан в форме списка справочника специально для фильтрации.

progmikon

Год - реквизит формы списка.

&НаКлиенте
Процедура ГодПриИзменении(Элемент)
ОтфильтроватьПоГоду(Год);
КонецПроцедуры


&НаСервере
Процедура ОтфильтроватьПоГоду(СсылкаНаГод)
    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Год");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = СсылкаНаГод;
    ЭлементОтбора.Использование = Истина;
КонецПроцедуры


cska-fanat-kz

Динамический список на основе запроса.
У запроса задаете параметр - &Год.

Далее в событии  РеквизитГодПриИзменении:

Список.Параметры.УстановитьЗначениеПараметра("Год", РеквизитГод);
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

APMEH19

Получилось!!!
Спасибо Вам большое Progmikon, и всем откликнувшимся. Пол дня промучался...

APMEH19

Нет, проблема не до конца решена.
Каждый раз при изменении доп. реквизита "Год", добавляется условие, а предыдущее не удаляется.
Я попробовал добавить строчку для сброса, но при работе кода появляется сообщение об ошибке (метод "сбросить" не найден).

&НаСервере
Процедура Фильтрация(Год)
Список.Отбор.Сбросить();   
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));      
...
КонецПроцедуры

P.S. после "." в "Список.Отбор." выбор каких - либо свойств или методов НЕ предлагается, (Хотя до этого "отбор" был выбран из выпадающего списка). Это нормально?

cska-fanat-kz

Это нормально. Бывает после точки ничего не выпадает, а вручную напишешь - и работает!
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

cska-fanat-kz

Вместо отбора попробуйте все-таки параметром к запросу...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

progmikon

Попробуйте через

Список.Отбор.Элементы.Очистить();

Вставьте в начало процедуры "Процедура ОтфильтроватьПоГоду(СсылкаНаГод)".
Но опять же, это если вы принципиально  не хотите использовать "произвольный запрос". Лично я бы сделал, как предложил cska-fanat-kz хотя бы по тому, что это короче.
Хотя нужно признать, что знание обоих подходов не лишнее.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск