Здравствуйте.
Программа 1С ERP 2.4.
У элемента справочника "Номенклатура" создал дополнительный реквизит с типом значения "Дополнительное значение". Также внес перечень значений, например, "Списание 1 мес. (Инвентарь)" или "Списание 1 мес. (Инвентарь)". Данные наименования полностью совпадают с категориями эксплуатации, которые используются в документе "ВнутреннееПотреблениеТоваров" с хоз. операцией "Передача в эксплуатацию".
Далее создал простенькую обработку по заполнению ТЧ вышеупомянутого документа. Но не получается получать дополнительный реквизит и подставлять подходящую категорию эксплуатации.

Собственно код:

```1c
    &НаКлиенте
    Процедура ЗаполнитьКатегориюЭксплуатации(Команда)

    КатегорияЭксп = Справочники.Номенклатура.

    Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
    ТекущаяСтрока.КатегорияЭксплуатации = ????????;
    ТекущаяСтрока.Упаковка = 100;
    ТекущаяСтрока.КоличествоУпаковок = 100;
    КонецЦикла;

    Закрыть();

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

Пробовал просто вывести перечень номенклатуры с этим доп реквизитом, получается, но использовать запросы на клиенте нельзя, а дополнительные реквизиты на сервере нельзя получать.

Текст запроса:

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Номенклатура.ДополнительныеРеквизиты.(
    | Значение КАК Значение
    | ) КАК ДополнительныеРеквизиты,
    | Номенклатура.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура";

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

Подскажите, пожалуйста, решение моей проблемы.
Спасибо.
---
```1c
    &НаСервере
    Функция ЗаполнитьКатегориюЭксплуатацииНаСервере(Номенклатура)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | НоменклатураДополнительныеРеквизиты.Значение КАК Значение
    |ИЗ
    | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
    |ГДЕ
    | НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка",Номенклатура);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();

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

    &НаКлиенте
    Процедура ЗаполнитьКатегориюЭксплуатации(Команда)

    Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
    ПоищемДопРеквизит = ЗаполнитьКатегориюЭксплуатацииНаСервере(ТекущаяСтрока.Номенклатура);
    Если ПоищемДопРеквизит <> Неопределено Тогда
    ТекущаяСтрока.КатегорияЭксплуатации = ПоищемДопРеквизит ;
    Иначе
    Сообщить("Нет доп реквизитов" + ТекущаяСтрока.Номенклатура);
    КонецЕсли;
    КонецЦикла;
    Закрыть();

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

Поправил чутка
---
```1c
    РезультатЗапроса = Запрос.Выполнить().Выбрать();
    Если РезультатЗапроса.Следующий() Тогда
    Возврат РезультатЗапроса.Значение;
    Иначе
    Возврат Неопределено;
    КонецЕсли;
```
---
Я про ошибку написал.
Конечно не работает.
КатегорииЭксплуатации имеет тип СправочникСсылка.КатегорииЭксплуатации
т.е. надо как-то так

Возврат Справочники.КатегорииЭксплуатации.НайтиПоНаименованию(Строка(РезультатЗапроса.Значение),Истина);
---
```1c
    &НаКлиенте
    Процедура ЗаполнитьКатегориюЭксплуатации(Команда)

    КатегорияЭксп = Справочники.Номенклатура.
    ДопРеквизиты = ВернутьРезультатЗапроса();
    Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
    ТекущаяСтрока.КатегорияЭксплуатации = ????????;
    ТекущаяСтрока.Упаковка = 100;
    ТекущаяСтрока.КоличествоУпаковок = 100;
    КонецЦикла;
    КонецПроцедуры;

    &НаСервере
    Функция ВернутьРезультатЗапроса()
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Номенклатура.ДополнительныеРеквизиты.(
    | Значение КАК Значение
    | ) КАК ДополнительныеРеквизиты,
    | Номенклатура.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура";

    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    Возврат РезультатЗапроса ;
    КонецФункции;
```

Я конечно слабо понял что Вы хотите сделать, но попробуйте, так вернете результат запроса на форму
---
Я конечно слабо понял что Вы хотите сделать

Есть элемент справочника "Номенклатура" с доп. реквизитом "Категория эксплуатации".
И если в тч документа "Внутреннее потребление товаров" есть эта номенклатура, мы нажимаем на кнопку заполнения, ищется совпадение по наименованию доп реквизита и категории эксплуатации и подставляется в колонку "Категория эксплуатации".
---
РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Возврат РезультатЗапроса ;
в результате получим Таблицу значений, а вернется она на клиент без ошибок только при работе на Толстом клиенте, на тонком надо возвращать либо массив, либо структуру.
---
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        | Номенклатура.ДополнительныеРеквизиты.(
        | Значение КАК Значение
        | ) КАК ДополнительныеРеквизиты,
        | Номенклатура.Ссылка КАК Ссылка
        |ИЗ
        | Справочник.Номенклатура КАК Номенклатура";

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

Обратите внимание, что если в будущем понадобится добавить еще один доп реквизит, то данный запрос будет возвращать информацию также по нему, поэтому нужно указать тип реквизита(сделайте по аналогии с моим запросом, "руководитель это имя доп реквизита в моем случае") :

```1c
    "ВЫБРАТЬ
    | ПодразделенияОрганизацийДополнительныеРеквизиты.Ссылка КАК Подразделение,
    | ЕСТЬNULL(ПодразделенияОрганизацийДополнительныеРеквизиты.Значение, ЗНАЧЕНИЕ(справочник.сотрудники.пустаяссылка)) КАК Руководитель
    |ИЗ
    | Справочник.ПодразделенияОрганизаций.ДополнительныеРеквизиты КАК ПодразделенияОрганизацийДополнительныеРеквизиты
    |ГДЕ
    | ПодразделенияОрганизацийДополнительныеРеквизиты.Свойство = &ДопРеквизитРуководитель"
    Запрос.УстановитьПараметр("ДопРеквизитРуководитель", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Руководитель"));
```
---
Пока что попробовал так

```1c
    &НаСервере
    Функция ЗаполнитьКатегориюЭксплуатацииНаСервере()

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Номенклатура.ДополнительныеРеквизиты.(
    | Значение КАК Значение
    | ) КАК ДополнительныеРеквизиты,
    | Номенклатура.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура";

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

    Возврат РезультатЗапроса;

    КонецФункции

    &НаКлиенте
    Процедура ЗаполнитьКатегориюЭксплуатации(Команда)

    ДопРеквизит = ЗаполнитьКатегориюЭксплуатацииНаСервере();
    Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
    ТекущаяСтрока.КатегорияЭксплуатации = ДопРеквизит.ДополнительныеРеквизиты;
    КонецЦикла;
    Закрыть();

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

Выдало ошибку.
---
Поправил: РезультатЗапроса = Запрос.Выполнить().Выбрать(); на РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Другая ошибка вывалилась.
---
Проблема в том, что мне необходимо, чтобы работало и на тонком клиенте тоже. Скорее всего из-за этого ошибка.
---
```1c
    &НаСервере
    Функция ЗаполнитьКатегориюЭксплуатацииНаСервере(Номенклатура)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | НоменклатураДополнительныеРеквизиты.Значение КАК Значение
    |ИЗ
    | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
    |ГДЕ
    | НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка",Номенклатура);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();

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

    &НаКлиенте
    Процедура ЗаполнитьКатегориюЭксплуатации(Команда)

    Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
    ПоищемДопРеквизит = ЗаполнитьКатегориюЭксплуатацииНаСервере(ТекущаяСтрока.Номенклатура);
    Если ПоищемДопРеквизит <> Неопределено Тогда
    ТекущаяСтрока.КатегорияЭксплуатации = ПоищемДопРеквизит ;
    Иначе
    Сообщить("Нет доп реквизитов" + ТекущаяСтрока.Номенклатура);
    КонецЕсли;
    КонецЦикла;
    Закрыть();

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

Поправил чутка
---
Не знаю, может быть скрины помогут доп реквизита, который был добавлен.
---
А вот где должно искаться соответствие
---
Длина строки "Наименование" в справочнике "ЗначениеСвойстОбъектов" и "КатегорииЭксплуатации" совпадает и равна 100.
---
Вот в таком виде выдает ошибку:

```1c
    &НаСервере
    Функция ЗаполнитьКатегориюЭксплуатацииНаСервере(Номенклатура)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | НоменклатураДополнительныеРеквизиты.Значение КАК Значение
    |ИЗ
    | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
    |ГДЕ
    | НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка",Номенклатура);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();

    Возврат РезультатЗапроса.Значение;

    КонецФункции

    &НаКлиенте
    Процедура ЗаполнитьКатегориюЭксплуатации(Команда)

    Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
    ПоищемДопРеквизит = ЗаполнитьКатегориюЭксплуатацииНаСервере(ТекущаяСтрока.Номенклатура);
    Если ПоищемДопРеквизит <> Неопределено Тогда
    ТекущаяСтрока.КатегорияЭксплуатации = ПоищемДопРеквизит ;
    Иначе
    Сообщить("Нет доп реквизитов" + ТекущаяСтрока.Номенклатура);
    КонецЕсли;
    КонецЦикла;

    Закрыть();

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

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

Возврат Справочники.КатегорииЭксплуатации.НайтиПоНаименованию(Строка(РезультатЗапроса.Значение),Истина);
---
Сделал как вы написали, только написал не "Справочники.КатегорииЭксплуатации.НайтиПоНаименованию(Строка(РезультатЗапроса.Значение),Истина);", а
"Справочники.КатегорииЭксплуатации.НайтиПоНаименованию(РезультатЗапроса.Значение,Истина);" и получилось.
Буду тестировать. Спасибо.
---
Заполняйте ТЧ на сервере. Параметры регистрации обработки должны быть примерно такими:

```1c
    Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();

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

    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Заполнить категорию эксплуатации";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнениеФормы();
    НоваяКоманда.Идентификатор = "ЗаполнитьКатегориюЭксплуатации";

    Возврат ПараметрыРегистрации;
    КонецФункции
```

Для получения доп. реквизитов используйте функции общего модуля УправлениеСвойствами:
УправлениеСвойствами.ЗначенияСвойств() или УправлениеСвойствами.ЗначениеСвойства()