Всем привет. Есть процедура, которая принимает в качестве параметра строку табличной части и работает с ней. На форме вынесен элемент Отборы, для настройки разных условий (по полям ТЧ). Как проверить, что текущая строка ТЧ удовлетворяет условиям отборов?
(0) Если твоё поле отбор связано с нужной тебе ТЧ, то любая строка из выведенных в таблицу уже соответствует отбору.
А вообще - пробежаться по отбору и сравнить все поля, которые там есть с теми, которые есть в строкеТЧ.
связать с тч нельзя, так было бы просто :)
на самом деле, я описал простую задачу для понимания. в реале, коллекция представлена не только конкретно одной ТЧ, а выборками, разными ТЗ. Состав колонок у них одинаковый, и процедура написана как универсальная, и вызывается из разных мест конфигурации.
Отбор с условиями - это новое требование заказчика. Соответственно, прикрутить проверку условий нужно уже в самой процедуре, дабы код не размазывать.
// Функция проверки значения
// Проверяемое - значение которое проверяем
// ТипСравнения - значение типа ВидСравнения
// Сравниваемое - значение с которым сравниваем
Функция СоответствиеОтбора(Проверяемое, ТипСравнения, Сравниваемое)
Результат = Истина;
Если ТипСравнения = ВидСравнения.Равно тогда
Результат = (Проверяемое = Сравниваемое);
ИначеЕсли ТипСравнения = ВидСравнения.НеРавно тогда
Результат = (Проверяемое <> Сравниваемое);
ИначеЕсли ТипСравнения = ВидСравнения.БольшеИлиРавно тогда
Результат = Проверяемое >= Сравниваемое;
ИначеЕсли ТипСравнения = ВидСравнения.Больше тогда
Результат = Проверяемое > Сравниваемое;
ИначеЕсли ТипСравнения = ВидСравнения.Меньше тогда
Результат = Проверяемое < Сравниваемое;
ИначеЕсли ТипСравнения = ВидСравнения.ВСписке тогда
Результат = (Сравниваемое.НайтиПоЗначению(Проверяемое) <> Неопределено);
ИначеЕсли ТипСравнения = ВидСравнения.НеВСписке тогда
Результат = (Сравниваемое.НайтиПоЗначению(Проверяемое) = Неопределено);
ИначеЕсли ТипСравнения = ВидСравнения.Содержит тогда
Результат = Найти(Сравниваемое,Проверяемое) > 0;
ИначеЕсли ТипСравнения = ВидСравнения.НеСодержит тогда
Результат = Найти(Сравниваемое,Проверяемое) = 0;
КонецЕсли;
Возврат Результат;
КонецФункции
функция используется для каждого строки отбора.
Всем спасибо.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший