Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 окт 2021, 23:20

Получение значения Перечисления в запросе

Автор Dr_Grizzly, 01 мар 2017, 15:09

0 Пользователей и 1 гость просматривают эту тему.

Dr_Grizzly

Добрый день! Учусь писать конфигурации, и столкнулся с заморочкой, которую три дня ищу по просторам интернета... Решил обратиться за помощью к гуру ))
Есть Справочник "Товары", в нем поле Наименование, ВидНоменклатуры. ВидНоменклатуры это ссылка на Перечисления.ВидыНоменклатур.
Есть документ РасходнаяНакладная. Хочу, чтобы в табличной части при выборе товара из справочника поле ВидНоменклатуры так же заполнялся из справочника, для дальнейшей работы с ним в коде модуля.
Вот что у меня получилось:

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

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

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

&НаКлиенте
Процедура ТоварыНаименованиеПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ТекущаяСтрока.ВидНоменклатуры = ЗапросВидаНоменклатуры(ТекущаяСтрока.Наименование);
КонецПроцедуры

Вроде все тривиально, даже в консоле при выполнении запроса я вижу значение всех полей запроса. А здесь просто какой-то заплет ))
Запрос выполняется, в него передается наименование товара из таблицы формы, а результат запроса пуст. В режиме отладки при ВычисленииВыражения строки "ВыборкаДетальныеЗаписи" в колонке Значения пишет - Ошибка чтения значения. В обоих полях причем. ЧТо наименование, что видНоменклатуры. В чем фокус заключается?

Dr_Grizzly

Елки-палки, сколько мучался и никак не мог догадаться, что Условие нужно ставить на поле Ссылка а не на Наименование... все получилось! Без вас бы так и тупил дальше)))

LexaK

если вообще перестать тупить то можно обойтись без запроса, и все реквизиты ссылочных объектов (если они не большие) получать через точку/имя реквизита.

сделайте в общем модуле (серверный) такую процедуру

Функция ПолучитьЗначениеРеквизита(Ссылка, ИмяСвойства)Экспорт
    //здесь можно различных проверок добавить
    Возврат Ссылка[ИмяСвойства];   
КонецФункции;


а в коде программы обращаетесь к этой процедуре так

&НаКлиенте
Процедура ТоварыНаименованиеПриИзменении(Элемент)

    ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
    //здесь тоже можно проверок добавить,
    ТекущаяСтрока.ВидНоменклатуры = ОбщийМодульСервер.ПолучитьЗначениеРеквизита(ТекущаяСтрока.Номенклатура, "ВидНоменклатуры");
    //еще как пример использования и т.д.
    ТекущаяСтрока.СтавкаНДС = ОбщийМодульСервер.ПолучитьЗначениеРеквизита(ТекущаяСтрока.Номенклатура, "СтавкаНДС");

КонецПроцедуры
ответ Понравился? (в смысле пригодился?)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск