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

Динамическая фильтрация записей в форме списка справочника 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

Поиск