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