Добрый день. Подскажите, пожалуйста, в какую сторону копать: есть управляемая форма на ней поле ввода. В поле ввода можно выбрать три варианта статусов. Мне нужно в зависимости от доступности определенной роли дать права на смену статуса или соответственно не давать его сменить. Как можно в управляемых формах
добиться такого? Без "ПриИзменении" и "РольДоступна"?
---
1. Открываем модуль менеджера перечисления
2. Создаем процедуру

```1c
    Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ДанныеВыбора = Новый СписокЗначений;

    //Повторить этот блок нужное число раз в зависимости от условий
    ЗначениеСписка = Новый Структура;
    ЗначениеСписка.Вставить("Значение", Перечисления.<Ваше перечисление>.<Имя элемента>);
    ЗначениеСписка.Вставить("ПометкаУдаления", Ложь);
    ДанныеВыбора.Добавить(ЗначениеСписка, <Синоним перечисления>);
    //Конец блока
    КонецПроцедуры
```

3. Закрываем модуль менеджера и радуемся жизни
---
ПеречислениеМенеджер.<Имя перечисления> (EnumManager.<Имя перечисления>)

ПолучитьДанныеВыбора (GetChoiceData)

Синтаксис:
ПолучитьДанныеВыбора(<Параметры>)

Параметры:

<Параметры> (обязательный)
Тип: Структура.
Содержит параметры для формирования списка значений:
Структура, в которой обязательно должны содержаться следующие ключи:••Отбор (Filter) - отбор, используемый для поиска данных, тип Структура; значения элементов отбора могут иметь тип Массив, СписокЗначений, ФиксированныйМассив или иной тип, не являющийся коллекцией; для типов Массив, СписокЗначений, ФиксированныйМассив сравнение выполняется с видом сравнения ВСписке, иначе вид сравнения Равно;
•СтрокаПоиска (SearchString) - содержит строку, используемую при поиске данных; для быстрого выбора содержит значение Неопределено.

Возвращаемое значение:
Тип: СписокЗначений.

Описание:
Формирует список значений данных выбора при вводе по строке, автоподборе текста и быстром выборе.
---
Можно маленький пример?
---
Что то вроде такого:

```1c
    Список = ПолучитьСписокСтатусов(Объект.Владелец);

    ОповещениеВыбора = Новый ОписаниеОповещения("ПослеПолученияСпискаСтатусовЗавершение", ЭтотОбъект);
    ПоказатьВыборИзСписка(ОповещениеВыбора, Список, Элемент);
```

Вызывается в событии НачалоВыбора или НачалоВыбораИзСписка.
Процедура ПолучитьСписокСтатусов возвращает СписокЗначений заполненный разрешенными для пользователя данными.

После выбора пользователем значения, его надо присвоить реквизиту формы и обработать в процедуре ПослеПолученияСпискаСтатусовЗавершение.
---
процедура в модуле менеджера
---
Алексей, напишите потом, как мне вам тоже 1$ перевести.
---
Можно видимость по ролям настроить, тогда у пользователей без нужной роли не будет виден этот элемент вообще
---
Не вариант.. По доступной роли нужно добавлять нужные значения в поле ввода. Думаю по первому варианту верное решение, но пока туплю. Не могу понять как прикрутить.
---
Если по первому варианту, то правильнее всего в модуле менеджера перечисления обработать событие ОбработкаПолученияДанныхВыбора. Тогда будет работать не только для вашей формы но и в целом по конфигурации
---
да, я написал про модуль менеджера и ошибся с именем процедуры
---
Т.е. в нужном мне документе (где нужно ограничить выбор из перечисления) в модуле менеджера в процедуре "ОбработкаПолученияДанныхВыбора" я обращаюсь к своему перечислению (предварительно делаю в нём процедуру так же в модуле менеджера по отсеиванию ненужных статусов), и из модуля менеджера перечисления передаю обратно в свой документ нужный список с перечислениями? Так что ли?
---
Если про мой пример, то нет. Он рассчитан на обработку на форме, при открытии списка выбора. В других случаях вам предлагают дописать модуль менеджера самого перечисления.
Вот только зачем делать перечисление? Лучше бы иметь справочник, со статусами обычно именно через него работают.
---
Статусы уже есть и они в виде перечисления.. Ваш вариант не подойдёт к сожалению. Первый вариант - честно пока не пойму как связать. Не могу попасть в "ОбработкаПолученияДанныхВыбора" в своём документе.
---
Не могу попасть в "ОбработкаПолученияДанныхВыбора" в своём документе
Потому что это нужно делать не в документе
---
Нет. Процедура о которой идет речь находится в моделе менеджера перечисления
---
Можно использовать механизм БСП: https://infostart.ru/public/290219/ или сделать регистр соответствий ролей/статусов.
---
Разделение данных это немножко про другое
---
Господа, извиняюсь дико, но хоть убейте не пойму как попасть в процедуру "ОбработкаПолученияДанныхВыбора" в своём перечислении. Как из управляемой формы попасть в менеджер перечисления и как вернуть обратно в элемент доступные значения.
---
1. Открываем модуль менеджера перечисления
2. Создаем процедуру

```1c
    Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ДанныеВыбора = Новый СписокЗначений;

    //Повторить этот блок нужное число раз в зависимости от условий
    ЗначениеСписка = Новый Структура;
    ЗначениеСписка.Вставить("Значение", Перечисления.<Ваше перечисление>.<Имя элемента>);
    ЗначениеСписка.Вставить("ПометкаУдаления", Ложь);
    ДанныеВыбора.Добавить(ЗначениеСписка, <Синоним перечисления>);
    //Конец блока
    КонецПроцедуры
```

3. Закрываем модуль менеджера и радуемся жизни
---
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
        СтандартнаяОбработка = Ложь;
        ДанныеВыбора = Новый СписокЗначений;

        //Повторить этот блок нужное число раз в зависимости от условий
        ЗначениеСписка = Новый Структура;
        ЗначениеСписка.Вставить("Значение", Перечисления..);
        ЗначениеСписка.Вставить("ПометкаУдаления", Ложь);
    ДанныеВыбора.Добавить(ЗначениеСписка, );
        //Конец блока
КонецПроцедуры

Спасибо вам больше. К этому я примерно уже дошёл. Но изначально эта процедура должна вызываться из Перечисления.Имяперечисления.ПолучитьДанныеВыбора() верно?
В ПолучитьДанныеВыбора нужно поместить структуру. Не могу теперь понять что в ней необходимо передать..?
---
Перечисления.Имяперечисления.ПолучитьДанныеВыбора() верно?
Верно отчасти. ПолучитьДанныеВыбора нужна для того чтобы получить список выбора программно.
Для отображения на форме это не нужно, все отработает само без вашего участия
---
Какой я тупой.. Я вообще в другом перечислении сидел и долбился в процедуру. Господи.. ужас какой((( Всем спасибо за помощь, понял что надо делать. Всех благодарю!