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