В шаге "Шаг 248 - Устанавливаем фильтр на движения регистра" мы обсуждали установку фильтра. Но теперь нам нужно бы сделать сложную фильтрацию по условиям. Вот, например, такая форма регистра.

У нас есть 5 позиций, по которым можно сделать фильтрацию. Конечно пользователь может захотеть посмотреть ЧерезКого было требование, может посмотреть и КомуПоставляем. А может захотеть и отфильтровать по двум вариантам сразу. Ну не писать же каждый раз сложные Если. Конечно нет. Вот, например, есть форма.

Здесь можно установить КомуПоставляем и Тип ТМЦ. Заведем две переменные.
Процедура Сформировать() Перем Пр; Перем ТипТр; ........
И теперь если Выбор все-таки был, то будет устанавливать именно переменную.
Процедура Сформировать()
Перем Пр;
Перем ТипТр;
Рег1 = СоздатьОбъект("Регистр.Требования");
Т = СоздатьОбъект("Таблица");
Т.ВывестиСекцию("Секция_1");
Если Предприятие.Выбран()=1 Тогда
Пр=Предприятие;
КонецЕсли;
Если ТипТребования.Выбран()=1 Тогда
ТипТр= ТипТребования;
КонецЕсли;
.......
А как только это будет сделано установим сам фильтр.
Процедура Сформировать()
Перем Пр;
Перем ТипТр;
Рег1 = СоздатьОбъект("Регистр.Требования");
Т = СоздатьОбъект("Таблица");
Т.ВывестиСекцию("Секция_1");
Если Предприятие.Выбран()=1 Тогда
Пр=Предприятие;
КонецЕсли;
Если ТипТребования.Выбран()=1 Тогда
ТипТр= ТипТребования;
КонецЕсли;
Рег1.УстановитьФильтр(Пр,,,,ТипТр);
Рег1.ВыбратьДвижения(ДатаНач,ДатаКон);
Пока Рег1.ПолучитьДвижение() > 0 Цикл
Т.ВывестиСекцию("Секция_2");
Пр=Пр+Рег1.Сумма;
КонецЦикла;
Т.ТолькоПросмотр(1);
Т.ВывестиСекцию("Секция_3");
Т.Показать()
КонецПроцедуры
Теперь мы можем проводить фильтрацию с очень сложным условиям.