У справочника Номенклатура есть реквизит СостояниеТовара, тип ПеречислениеСсылка.СостояниеТовара. Из файла Excel нужно загрузить в этот реквизит значения. Как изменить значение этого реквизита?
---
```1c
    Для каждого СтрЗначение Из Значения Цикл

    Если ТипЗнч(СтрЗначение.Значение) = Тип("Строка") И Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда

    НовыйЭлемент = Справочники[ИмяСправочника].СоздатьЭлемент();
    НовыйЭлемент.Наименование = СтрЗначение.Значение;
    Если ЭтоСвойство Тогда
    НовыйЭлемент.Владелец = Столбец.Реквизит;
    КонецЕсли;
    НовыйЭлемент.Записать();

    СозданоЗначений = СозданоЗначений + 1;

    ИначеЕсли ТипЗнч(СтрЗначение.Значение) = Тип("Перечисления.СостояниеТовара") Тогда
    Пар = Новый Структура("Отбор,СтрокаПоиска");
    Пар.СтрокаПоиска = Столбец.Реквизит;
    Стр = Перечисления.ВариантыВажностиЗадачи.ПолучитьДанныеВыбора(Пар);
    Для Каждого Строка Из Стр Цикл
    СтрЗначение.Значение = Стр;
    Прервать;
    КонецЦикла;

    КонецЕсли;
    КонецЦикла;
```
---
Вы в значение СтрокаПоиска должны записать значение из файла Excel. Это значение должно быть в значениях перечисления СостояниеТовара. Тогда оно будет найдено и записано в реквизит Номенклатура.СостояниеТовара.
---
Через поиск в перечислении по наименованию.
То есть в Екселе Состояние в виде Наименования очевидно, вот при загрузке - поиск по Наименовнию в Перечислениях и если нашла , то присваивать, если не нашла = Неопределено, или ошибку выдавать...
,
---
Как изменить? Не ленитесь, "руками": Номенклатура.СостояниеТовара = Перечисления.СостояниеТовара["ЗначениеПеречисленияИзЭксел"]
А вот если имена в табличке не совпадают со значениями перечислений, то тут уже простор для творчества. Тут уж вам по месту виднее чем из интернета.
---
как правильно присвоить реквизиту значение из файла (Перечисления.СостояниеТовара[СтрЗначение.Значение])?
Если реквизит номенклатуры имеет тип справочника, то делаю так:

```1c
    Для каждого СтрЗначение Из Значения Цикл

    Если ТипЗнч(СтрЗначение.Значение) = Тип("Строка") И Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда

    НовыйЭлемент = Справочники[ИмяСправочника].СоздатьЭлемент();
    НовыйЭлемент.Наименование = СтрЗначение.Значение;
    Если ЭтоСвойство Тогда
    НовыйЭлемент.Владелец = Столбец.Реквизит;
    КонецЕсли;
    НовыйЭлемент.Записать();

    СозданоЗначений = СозданоЗначений + 1;

    КонецЕсли;
    КонецЦикла;
```
---
Не понимаю что вы делаете. Где конкретно это перечисление используется?
---
это перечисление используется в карточке товара.Через обработку нужно загрузить значения реквизитов номенклатур. Как в коде обработке получить значение реквизита СостояниеТовара,чтобы присвоить ему значение из файла? Значения файла содержаться здесь:Перечисления.СостояниеТовара[СтрЗначение.Значение]
---
нужно получить объект, а потом заменить

```1c
    Для каждого СтрЗначение Из Значения Цикл
    СсылкаЭлемента= справочники.Номенклатура.НайтиПонаименованию("СтрЗначение.Наименование") ; ///А еще лучше по коду
    Если СсылкаЭлемента.Пустая() тогда ////Такого элемента нету , нужно создать
    НовыйЭлемент = Справочники[ИмяСправочника].СоздатьЭлемент();
    Иначе
    НовыйЭлемент = СсылкаЭлемента.Ссылка.ПолучитьОбъект();
    Конецесли;
    НовыйЭлемент.Наименование = СтрЗначение.Значение;
    Если ЭтоСвойство Тогда
    НовыйЭлемент.Владелец = Столбец.Реквизит;
    КонецЕсли;
    НовыйЭлемент.Записать();

    СозданоЗначений = СозданоЗначений + 1;
    КонецЦикла;
```
---
```1c
    Для каждого СтрЗначение Из Значения Цикл

    Если ТипЗнч(СтрЗначение.Значение) = Тип("Строка") И Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда

    НовыйЭлемент = Справочники[ИмяСправочника].СоздатьЭлемент();
    НовыйЭлемент.Наименование = СтрЗначение.Значение;
    Если ЭтоСвойство Тогда
    НовыйЭлемент.Владелец = Столбец.Реквизит;
    КонецЕсли;
    НовыйЭлемент.Записать();

    СозданоЗначений = СозданоЗначений + 1;

    ИначеЕсли ТипЗнч(СтрЗначение.Значение) = Тип("Перечисления.СостояниеТовара") Тогда
    Пар = Новый Структура("Отбор,СтрокаПоиска");
    Пар.СтрокаПоиска = Столбец.Реквизит;
    Стр = Перечисления.ВариантыВажностиЗадачи.ПолучитьДанныеВыбора(Пар);
    Для Каждого Строка Из Стр Цикл
    СтрЗначение.Значение = Стр;
    Прервать;
    КонецЦикла;

    КонецЕсли;
    КонецЦикла;
```
---
так реквизит номенклатуры СостояниеТоваров пустой. Походу присваивает неопределено, потому что Стр пустая
---
структура пар
---
Вы в значение СтрокаПоиска должны записать значение из файла Excel. Это значение должно быть в значениях перечисления СостояниеТовара. Тогда оно будет найдено и записано в реквизит Номенклатура.СостояниеТовара.
---
спасибо,получилось
---
Ошибка:

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