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