Есть такой запрос:

```1c
    Функция ПолучитьДопРеквизит(Док,Рекв)

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

    Запрос.УстановитьПараметр("Ссылка",Док);
    Запрос.УстановитьПараметр("Рекв",Рекв);

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

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

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

В док попадет ссылка на документ, рекв - строка наименование свойства.
Отладчик в выборке выдает "Ошибка чтения значения");
В консоли запросов все отрабатывает.
В чем может быть проблема?
---
Либо ссылку в рекв передавать надо либо тут И СчетНаОплатуДополнительныеРеквизиты.Свойство = &Рекв изменить на И СчетНаОплатуДополнительныеРеквизиты.Свойство.Наименование = &Рекв
---
Ошибка уже после "Результат.Следующий();" происходит ?
---
Точка останова на Результат.Следующий();, захожу отладчиком в результат и там ошибка чтения значения и по свойству и по значению показывает.
---
на следующую строчку перейдите, там уже должно быть получено значение
---
Там показывает Поле объекта не обнаружено.
---
Почему рекв - строка наименование свойства? это же должна быть ссылка на план видов характеристик Дополнительные реквизиты
---
Либо ссылку в рекв передавать надо либо тут И СчетНаОплатуДополнительныеРеквизиты.Свойство = &Рекв изменить на И СчетНаОплатуДополнительныеРеквизиты.Свойство.Наименование = &Рекв
---
А как все-таки правильно на будущее. ПланВидовХарактеристик использовать?
---
С наименованием сработало.
---
аналогичное все. Нужно связать ссылку Заказа клиента и заказа поставщику. И ЗаказПоставщику.ДокументОснование = &ДокументОснование"; - меняю по разному, но результат один.

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

    лЗапрос = Новый Запрос(лТекст);

    // Присвоение значений переменным параметров.
    ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Услуги"); // Услуги ()
    лЗапрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатуры);

    Проведен = Истина;

    Для Номер = 0 По ПроектОплаты.Количество() - 1
    Цикл
    ДокументОснование = ПроектОплаты[Номер]; // передаем в параметр заказ клиента

    // Установка параметров.
    лЗапрос.УстановитьПараметр("ДокументОснование", ДокументОснование);

    лВыборка = лЗапрос.Выполнить().Выбрать();

    Пока лВыборка.Следующий() Цикл
    СуммаДопРасходов[Номер] = лВыборка.СуммаДокумента;
    КонецЦикла;
    КонецЦикла;
```
---
Просто в счете на оплату есть табличная часть "Дополнительные реквизиты". Я консоль запросов по ней использовал.
---
Если в функцию в качестве параметра строка с наименованием приходит, то можно например Запрос.УстановитьПараметр("Рекв",ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(Рекв, Истина));
---
Спасибо за совет.
---
Если в функцию в качестве параметра строка с наименованием приходит, то можно например Запрос.УстановитьПараметр("Рекв",ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(Рекв, Истина));

```1c
    УстановитьРежимЗанудства();

    //В данном случае будет два обращения к БД.
    //1. Получение ссылки на ПВХ
    //2. Основной запрос.

    //С точки зрения быстродействия ссылку рекомендуется получать:
    // - или хорошо заранее (если запрос используется несколько раз)
    // - или в самом запросе по тому же наименованию.

    //Не могу представить сценарий работы, где известно наименование ПВХ, но нет ссылки на него.

    ОтключитьРежимЗанудства();
```
---
понятное дело, что по хорошему логику надо переделать так, чтобы в функцию уже прилетала ссылка, но это уже совсем другая история. автор пусть сам решает. вопрос был не о переделке, а о причине неработоспособности кода
---
```1c
    Если Результат.Следующий() Тогда
    Возврат Результат.Значение;
    Иначе
    Возврат неопределено;
    КонецЕсли;
```
---
Как сказал кто-то из древних: "программа, утыканная конструкциями типа try catch с целью исключить возможность появления исключения, похожа на труп, который не падает, потому что прибит гвоздями к стене".
---
Ну если дальше копать, то прочтение одного единственного доп. реквизита для одной единственной ссылки изначально далеко не всегда верный подход, а чаще наоборот. Ну а вероятность пустого результата в запросе, особенно в контексте прочтения доп. реквизитов никто не отменял.
---
никто кроме ТС не знает контекст задачи и сценарий вызова этой функции. Поэтому, при текущих вводных никто из нас не может сказать как должен обрабатываться пустой запрос. Ваш ответ дал прямое указание на безусловное исключение исключения (простите за каламбур), следовательно он полностью соответствует приведенной в (15) цитате