1С:Предприятие 8.3 (8.3.24.1758)

Управление торговлей, редакция 11 (11.5.17.169)

Конфигурация на поддержке. Сделал файловую копию базы, работаю с полными правами под администратором.

Тема вопроса: Не работает запрос из расширения конфигурации (УТ 11).

Я написал внешнюю обработку для склада. Эта обработка по введенному «коду» находит товар (справочник номенклатура) и показывает его Цену (РегистрСведений.ЦеныНоменклатуры) и Остаток (РегистрСведений.РаспределениеЗапасов)

Вот этот код, работает если его поместить во «внешнюю обработку.epf» и в 1С – Меню – Файл – Открыть.
Но если я эту обработку помещу в расширение конфигурации (дополнение), чтобы при запуске 1С, открывалась моя обработка, то код просто не работает (и ошибок нет), в выборку ничего не попадает.

Шаг-1. Найти товар по коду – работает
Шаг-2 Цена товара – НЕ РАБОТАЕТ
Шаг-3 Остаток товара – работает.

Почему запрос по цене товара не работает ?

```1c
    ТекТовар = Справочники.Номенклатура.НайтиПоКоду( КодДляПоиска ).Ссылка;

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

    //Отбор по ТекТовар
    Текст = Текст + "
    | ЦеныНоменклатуры.Номенклатура = (&ТекТовар)
    | ";

    //ВидЦены
    Текст = Текст + "
    | И
    | ЦеныНоменклатуры.ВидЦены = (&ВидЦены)
    | ";

    Запрос.Текст = Текст;
    Запрос.УстановитьПараметр("ТекДата",НачалоДня(ТекущаяДата()));
    Запрос.УстановитьПараметр("ВидЦены",ВидЦены);
    Запрос.УстановитьПараметр("ТекТовар",ТекТовар);

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

    Цена = ВыборкаДетали.Цена;

    Сообщить(" + ВыборкаДетали.Номенклатура + " = " + ВыборкаДетали.ВидЦены + " = " + ВыборкаДетали.Цена);
    КонецЦикла;
```
---
Если добавить обработку в расширение, без заимствования справочника ВидыЦен, то тип реквизита становится строкой.
Видимо у вас так и вышло.
---
В параметры среза надо отбор добавлять
---
ТекТовар = Справочники.Номенклатура.НайтиПоКоду( КодДляПоиска ).Ссылка;

а это зачем? ".Ссылка"
НайтиПоКоду и так возвращает Ссылку

и зачем вообще НайтиПоКоду если это можно в запрос запихнуть

```1c
    "ВЫБРАТЬ
    | ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
    | ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены,
    | ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
    |ИЗ
    | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, Номенклатура.Код = &Код И ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних"
```
---
НайтиПоКоду - я специально вывел отдельно

и на фотографии видно, что я показываю найденный товар "на форме"

повторюсь, не находится Цена, а вот Остаток, таким же запросом находиться
---
В параметры среза надо отбор добавлять. Как вам в (3) написали.
---
```1c
    Справочники.Номенклатура.НайтиПоКоду( КодДляПоиска ).Ссылка;
```

удоли

вообще все решается 1 запросом без кучи этого бреда что есть в первом посте.
---
я написал в параметры среза, не помогло !
так же как и было, через внешнюю обработку - работает, в расширении не работает

вот такой код теперь

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

    Запрос.Текст = Текст;
    Запрос.УстановитьПараметр("ТекДата",НачалоДня(ТекущаяДата()));

    Запрос.УстановитьПараметр("ВидЦены",ВидЦены);
    Запрос.УстановитьПараметр("ТекТовар",ТекТовар);

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

    Цена = ВыборкаДетали.Цена;

    Сообщить(" + ВыборкаДетали.Номенклатура + " = " + ВыборкаДетали.ВидЦены + " = " + ВыборкаДетали.Цена);
    КонецЦикла;
```
---
Что значит "не работает"? Выдает ошибку? Не выдает данных? Вообще не выполняется?
---
ну я же в первом сообщении всё описал. что ошибок нет, просто выборка "пустая"
в конце кода есть команда Сообщить()

```1c
    Сообщить(" + ВыборкаДетали.Номенклатура + " = " + ВыборкаДетали.ВидЦены + " = " + ВыборкаДетали.Цена);
```

она во внешней обработке показывает товар и цену
а в расширении ничего не показывает...

примечание: а после этого кода идет запрос "остатка", так вот остаток показывается и во внешней обработке и в расширении, как так ?
---
как так ?
Магия видимо, ты код то весь покажешь? Или нам и дальше гадать откуда там ВидЦены, например, берется?
---
что ошибок нет, просто выборка "пустая" Ты написал другое: то код просто не работает (и ошибок нет), в выборку ничего не попадает. И вот тут вопрос - либо код не работает (тогда и выборки быть не может), либо выборка пустая (то есть код работает).
---
вот внешняя обработка, которая работает как надо, и цену и остаток показывает
---
Если добавить обработку в расширение, без заимствования справочника ВидыЦен, то тип реквизита становится строкой.
Видимо у вас так и вышло.
---
Эх, а вот был бы отладчик...
---
Благодарю за помощь. помог ответ anton13m
на форме был реквизит ВидЦены который во внешней обработке был Справочник...ВидыЦен
а при добавлении обработки в расширение.. превратился в строку.

я то добавил ВидЦен в моё расширение, но не заметил что реквизит в форме уже стал строкой

Проблема решена !