Добрый день, Упп 1.0 на 8.2
Есть справочник Номенклатура, на форму добавил 70-80 флажков и несколько переключателей. Добавил план видов характеристик с предопределенными значениями. Хранить значения нужно в регистре сведений, подумал и представил это как: Измерения: Номенклатура, Опция. Ресурсы: Значение. Подскажите пожалуйста, как лучше хранить данные и получить их при открытии формы? Мои варианты и мысли ниже.

Сохраняю так:

```1c
    НЗ = РегистрыСведений.НовыйРегистр.СоздатьМенеджерЗаписи();
    НЗ.Номенклатура = ЭтотОбъект.Ссылка;
    НЗ.Опция = ПланыВидовХарактеристик.НовыйПВХ.НайтиПоКоду("000000001");
    НЗ.Значение = Флажок1;
    НЗ.Записать();
```

получаю длинный-длинный код, но работает быстро.

А вот с получением этих данных при открытии справочника - проблема.

Первый вариант: (работает быстро, но с последующей доработкой проблемы)
//запросом получаю отсортированное ТЗ и заполняю элементы на форме

```1c
    Флажо1= ВыгрузкаДопОпций[0].Значение;
    Флажо2= ВыгрузкаДопОпций[1].Значение;
    ...
    Флажо79= ВыгрузкаДопОпций[79].Значение;
```

Работает быстро, но если через неделю добавить ещё несколько флажков. То при открытии вылезет ошибка на строке

```1c
    Флажо80= ВыгрузкаДопОпций[80].Значение;
```

т.к. не у всей номенклатуры будет эта самая 80ая строка.

Второй вариант: (работает долго)
Получить запросом значения по нужной Номенклатуре и перебрать их.

```1c
    Пока Выборка.Следующий() Цикл
    Если Выборка.Опция = ПланыВидовХарактеристик.НовыйПВХ.НайтиПоКоду("000000001") Тогда
    Флажок1= Выборка.Значение;
    КонецЕсли;
    ...

    КонецЦикла;
```
---
в регистре сохранять опции как строка по именам реквизитов.
Далее код для загрузки:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
    ЗаполнитьФлаги();
    КонецЕсли;

    КонецПроцедуры

    &НаСервере
    Процедура ЗаполнитьФлаги()

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ЗначенияДопОпций.Опция КАК Опция,
    | ЗначенияДопОпций.Значение КАК Значение
    |ИЗ
    | РегистрСведений.ЗначенияДопОпций КАК ЗначенияДопОпций
    |ГДЕ
    | ЗначенияДопОпций.Владелец = &Владелец";

    Запрос.УстановитьПараметр("Владелец", Объект.Ссылка);

    РезультатЗапроса = Запрос.Выполнить();

    Выборка = РезультатЗапроса.Выбрать();

    Пока Выборка.Следующий() Цикл
    ЭтотОбъект[Выборка.Опция] = Выборка.Значение;
    КонецЦикла;

    КонецПроцедуры
```

Увидел, что используется УПП. Для обычных форм сами переделаете. ЭтаФорма[Выборка.Опция] = Выборка.Значение;
---
в регистре сохранять опции как строка по именам реквизитов.
Далее код для загрузки:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
    ЗаполнитьФлаги();
    КонецЕсли;

    КонецПроцедуры

    &НаСервере
    Процедура ЗаполнитьФлаги()

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ЗначенияДопОпций.Опция КАК Опция,
    | ЗначенияДопОпций.Значение КАК Значение
    |ИЗ
    | РегистрСведений.ЗначенияДопОпций КАК ЗначенияДопОпций
    |ГДЕ
    | ЗначенияДопОпций.Владелец = &Владелец";

    Запрос.УстановитьПараметр("Владелец", Объект.Ссылка);

    РезультатЗапроса = Запрос.Выполнить();

    Выборка = РезультатЗапроса.Выбрать();

    Пока Выборка.Следующий() Цикл
    ЭтотОбъект[Выборка.Опция] = Выборка.Значение;
    КонецЦикла;

    КонецПроцедуры
```

Увидел, что используется УПП. Для обычных форм сами переделаете. ЭтаФорма[Выборка.Опция] = Выборка.Значение;
---
Только не ЭтотОбъект, а ЭтаФорма.
---
я это ниже озвучил.
---
спасибо, получилось! Работает быстро!
---
можно еще оптимизировать, если сохранять в регистр только значения, которые установлены. Меньше данных в регистре будет храниться и загружаться.
---
В постановке задачи, использование регистра сведений обязательное условие?
Если нет, то можно посмотреть в сторону

```1c
    ХранилищеНастроекДанныхФорм
```

Ну или свое хранилище настроек использовать.
В 8.2 этот механизм, если не ошибаюсь, должен быть.
---
Формировать эти ХХ флажков на форме программно - тогда и никаких проблем не будет...

а решение в лоб..

```1c
    Попытка
    Элементыформы["Флажо" + Формат(НомерФлажка, " тут форматную строку без разрядов" ] = ЗначениеДопОпций[НомерФлажка]
    Исключение
    // сообщение о проблемме
    КонецПопытки
```
---
Храните, например, СчетчикФлажков в текстовом поле фиксированной длинны вида "01010110001000001010010001000100101011010..." , циклом заполняйте, циклом сохраняйте через Сред(СтрокаФлажков,СчетчикФлажков,1) и ЭтаФорма["Флажо"+СчетчикФлажков] , наличие пробела в поле будет означать "не заполнено".

Можно, конечно, хранить компактнее, например в 16-ричном представлении.