Здравствуйте, товарищи! Имеется форма выбора справочника "Сотрудники". При открытие формы выбора справочника должен срабатываться отбор подразделений, которые закреплены за начальником.
Проблема в том, отбор работает по последнему элементу массива. В чем может быть ошибка? В коде Отдел - это должность. Конфигурация самописная одного разраба) Так что я лишь просто допиливаю) Заранее всем спасибо)

```1c
    &наСервере
    Функция ОтделыНачальника1()
    Массив = Новый Массив(5);
    Массив[0] = Справочники.Должность.НайтиПоНаименованию("Красильный цех");
    Массив[1] = Справочники.Должность.НайтиПоНаименованию("Ткацкий цех");
    Массив[2] = Справочники.Должность.НайтиПоНаименованию("Ткацкий 2");
    Массив[3] = Справочники.Должность.НайтиПоНаименованию("Швейный цех");
    Массив[4] = Справочники.Должность.НайтиПоНаименованию("Маркетинг-текстиль");
    Возврат Массив;
    КонецФункции
```

```1c
    &НаКлиенте
    Процедура УстОтбор(Отдел)
    Список.Отбор.Элементы.Очистить();
    Если Не Отдел = ВернутьСсылкуСпрСотр() Тогда
    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Должность");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = Отдел;
    КонецЕсли;
    КонецПроцедуры
```

```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    Данные = ОтделыНачальника1();
    Для Каждого ЭлементМассива Из Данные Цикл
    Если ОбщегоНазначения.ЭтоАдмин()Тогда
    УстОтбор(ЭлементМассива);
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
```
---
```1c
    &НаКлиенте
    Процедура ОтборыОтделыДляНачальника1(Отдел)
    Отдел = Новый Массив();
    Список.Отбор.Элементы.Очистить();
    Если Не Отдел = ВернутьСсылкуСпрСотр() Тогда
    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Должность");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    ЭлементОтбора.ПравоеЗначение = Отделывыборка();
    КонецЕсли;
    КонецПроцедуры

    &наСервере
    Функция Отделывыборка()
    Массив = Новый Массив();
    Массив.Добавить(Справочники.Должность.НайтиПоНаименованию("Красильный цех"));
    Массив.Добавить(Справочники.Должность.НайтиПоНаименованию("Ткацкий цех"));
    Массив.Добавить(Справочники.Должность.НайтиПоНаименованию("Ткацкий 2"));
    Массив.Добавить(Справочники.Должность.НайтиПоНаименованию("Швейный цех"));
    Массив.Добавить(Справочники.Должность.НайтиПоНаименованию("Маркетинг-текстиль"));
    Возврат Массив;
    КонецФункции

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)

    Если ОбщегоНазначения.ЭтоШухрат()тогда
    Данные = Отделывыборка();
    Для Индекс = 0 По Данные.Количество()-1 Цикл
    ЭлемОтдел = Данные[Индекс];
    ОтборыОтделыДляНачальника1(ЭлемОтдел);
    КонецЦикла;
    КонецЕсли;
    КонецПроцедуры
```
---
Так вы ведь на каждом шаге цикла чистите отбор, и перезаписываете.
---
Вам нужно вид сравнения ВСписке или ка кто так сделать, и в правое значение передавать массив(или список)
---
ВСписке не работает)
---
все должно работать
попробуйте сделайть список а не массив подразделений (Должностей(?!) )
---
Вы когда делаете Всписке, и откроете отборы там список заполнен? И вообще отбор есть?)
---
Да) работает отбор) но только по самому последнему элементу массива(или спискаЗначений)
---
дак потому что во первых - вы в цикле очищаете отбор, во вторых - вид сравнения равно может быть только для одного значения, поэтому он априори не подходит для списка.
---
С первым пунктом - я согласен) Но как же быть со вторым пунктом?)
---
Сделать вид сравнения всписке)
---
Я то проставил это, но у меня вылетает ошибка)
---
А правое значение как присваиваете?
---
Просто переменная Отдел
---
А в отделе у нас что?) Просто отдел? Список отделов? Массив отделов?
---
Вы про переменную отдел в процедуре Отбора или про процедуру ПриОткрытии формы выбора?)
---
про ту что вы в правое значение отбора устанавливаете)
---
Там просто "Отдел". Я просто обращаюсь к массиву или списку Отделов в процедуре ПриОткрытии. Там же я и прохожусь по массиву.
Если брать тип СписокЗначений, то у меня вылетает ошибка)
---
Получилось) Ура)
---
Как? Покажите код чтобы другие не мучались
---
```1c
    &НаКлиенте
    Процедура ОтборыОтделыДляНачальника1(Отдел)
    Отдел = Новый Массив();
    Список.Отбор.Элементы.Очистить();
    Если Не Отдел = ВернутьСсылкуСпрСотр() Тогда
    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Должность");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    ЭлементОтбора.ПравоеЗначение = Отделывыборка();
    КонецЕсли;
    КонецПроцедуры

    &наСервере
    Функция Отделывыборка()
    Массив = Новый Массив();
    Массив.Добавить(Справочники.Должность.НайтиПоНаименованию("Красильный цех"));
    Массив.Добавить(Справочники.Должность.НайтиПоНаименованию("Ткацкий цех"));
    Массив.Добавить(Справочники.Должность.НайтиПоНаименованию("Ткацкий 2"));
    Массив.Добавить(Справочники.Должность.НайтиПоНаименованию("Швейный цех"));
    Массив.Добавить(Справочники.Должность.НайтиПоНаименованию("Маркетинг-текстиль"));
    Возврат Массив;
    КонецФункции

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)

    Если ОбщегоНазначения.ЭтоШухрат()тогда
    Данные = Отделывыборка();
    Для Индекс = 0 По Данные.Количество()-1 Цикл
    ЭлемОтдел = Данные[Индекс];
    ОтборыОтделыДляНачальника1(ЭлемОтдел);
    КонецЦикла;
    КонецЕсли;
    КонецПроцедуры
```
---
и почему так нельзя было сделать после второго сообщения?)
---
Видимо не заметил))
---
а так спасибо вам)