Всем привет!. Начинаю программировать. Не судите строго.

1с7.Требуется сформировать отчет по справочнику Товары, в котором есть 3 реквизита - все имеют тип "Перечисление"
На форме отчета 3 списка с пометками (список 1, список2, список 3) , заполненные программно значениями перечислений, например

Список1 (значения РФ, РБ). список2 (Годный,Негодный), Список3(Мелкий, Средний, Крупный)

Как программно перебором (с функцией) вывести в отчет те Товары, которые соответствуют выбранным пользователем значениям в списках, при этом в списке могут быть выбраны несколько значений. К примеру получить все элементы у которых стоит пометка РФ, Годный, Мелкий, Средний.
Помогите реализовать без использования запроса
---
ну тогда так

```1c
    Функция ПроверитьЭлемент(Элемент)
    //циклы по спискам
    Рез = 0;
    Для сч = 1 По Список1.РазмерСписка() Цикл
    Если Список1.Пометка(сч) = 1 и Элемент.ИмяРеквизитаДляРФ = Список.ПолучитьЗначение(сч) Тогда
    Рез = Рез + 1;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    ........циклы по другим спискам......

    Возврат Рез;
    КонецФункции
```

И в первом цикле

```1c
    Если ПроверитьЭлемент(Элемент) < 3 Тогда
    Продолжить;
    КонецЕсли;
```
---
Так если ты выведешь всё, и пользователь добавит отбор по 3 значениям. остальные уберутся.

Или хочешь сказать что пользователю эти поля недоступны?
Проще тебе отчет сюда скинуть
---
Спасибо, но вопрос по 1с7
---
почти забыл семерку, но что-то типа

```1c
    Спр = СоздатьОбъект("Справочник.Товары");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
    Если ПроверитьЭлемент(Спр.ТекущийЭлемент()) = 0 Тогда
    Продолжить;
    КонецЕсли;
    ............выводим элемент..............
    КонецЦикла;

    ............................................

    Функция ПроверитьЭлемент(Элемент)
    //циклы по спискам
    Для сч = 1 По Список1.РазмерСписка() Цикл
    Если Список1.Пометка(сч) = 1 и Элемент.ИмяРеквизитаДляРФ = Список.ПолучитьЗначение(сч) Тогда
    Возврат 1;
    КонецЕсли;
    КонецЦикла;
    ........циклы по другим спискам......

    Возврат 0;
    КонецФункции
```

Кстати, нужно выводить элемент, если у него хоть один реквизит равен какому-нибудь отмеченному в списках?
---
Выводить нужно элемент с условием, что он соответствует условиям одновременно из трех списков, т.е по одному из списков он в выборку попадает, должен попасть и в условие 2 и 3 списка, т.е. если имеются 3 списка
"Список1 (значения РФ, РБ). список2 (Годный,Негодный), Список3(Мелкий, Средний, Крупный) "
и пользователь указал в списке1 - РБ, РФ, в списке 2 - Годный, в списке 3 - Мелкий, то в отчет должно выбрать все товары у которых "Перечисление" соответствует "РБ, РФ", "Годный" и "Мелкий" одноременно
---
ну тогда так

```1c
    Функция ПроверитьЭлемент(Элемент)
    //циклы по спискам
    Рез = 0;
    Для сч = 1 По Список1.РазмерСписка() Цикл
    Если Список1.Пометка(сч) = 1 и Элемент.ИмяРеквизитаДляРФ = Список.ПолучитьЗначение(сч) Тогда
    Рез = Рез + 1;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    ........циклы по другим спискам......

    Возврат Рез;
    КонецФункции
```

И в первом цикле

```1c
    Если ПроверитьЭлемент(Элемент) < 3 Тогда
    Продолжить;
    КонецЕсли;
```
---
у которых "Перечисление" соответствует "РБ, РФ", "Годный" и "Мелкий" одноременно

Ну, одновременно РБ и РФ у одного элемента быть не может, прально?
---
Ну, одновременно РБ и РФ у одного элемента быть не может, прально?
Да верно, Любой элемент имеет лишь одно значение каждого из 3 списков.
Попробую Вашу версию - отпишусь. Спасибо
---
Да метод работает, только после небольшой доработки:
Список.ПолучитьЗначение(сч) возвращает число, доработал,чтобы возвращал представление значения списка в виде строки и сравнивал с Элементом справочника, заданному в виде представления - тогда работает.

Для себя пока решил так (имхо быстрее работает, в отладчике меньше циклов) - при помощи функций нахожу только помеченные значения, далее при помощи СтрЧислоВхождений проверяю в цикле соответствует ли Элемент справочника отмеченному значению каждого из списков, отсекаю ненужные через "Если,тогда,продолжить"
Сейчас пробую (тестирую) через прямой запрос к базе- скорость в разы, но как-то не универсально из-за необходимости ставить драйвера VFPOLEDB и из-за ошибок в монопольном режиме

Спасибо за совет