Использование Ссылки из запроса

1. 4007 01.10.21 08:48 Сейчас в теме
Имею фрагмент программы
:
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| Справочник.Номенклатура.Ссылка как ССЫЛКА
| из Справочник.Номенклатура
| ГДЕ (КОДМАТ = &КодМат) ";

Запрос.УстановитьПараметр("КодМат","111");


// при попытке выполнить это присвоение ошибка "Значение не является значением объектного типа (ССЫЛКА)"
Мат = Выб.Ссылка.ПолучитьОбъект() ;

В чем грабли?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 01.10.21 09:02 Сейчас в теме
(1)в том, что перед присвоением необходимо:
1. запрос таки выполнить
2. сформировать выборку из результата запроса
3. спозиционироваться на элементе выборки. последовательное позиционирование(с перого по последний) происходит с помощью Выборка.Следующий()
3. DBV 01.10.21 09:12 Сейчас в теме
(2) Думаю автор не предоставил код, где он выборку получает.

Выб - это скорее всего и есть Выборка.
Интересно как обходит выборку.

Возможно, что так
Выб.Следующий();
Мат = Выб.Ссылка.ПолучитьОбъект() ; // не надо маты)


и скорее всего запрос пустой
4. nomad_irk 76 01.10.21 09:16 Сейчас в теме
(3)я не хочу играть в экстрасенсов, в приведенном куске кода нет ни выборки, ни позиционирования на элементе выборки.
5. 4007 01.10.21 09:53 Сейчас в теме
Народ простите Христа ради старого человека, Пропустил кусок.
На самом деле так:

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

Запрос.УстановитьПараметр("КодМат","111");

Выб=Запрос.Выполнить().Выбрать().Следующий();
Если Выб = Ложь тогда
	Сообщить("КодМат="+КодМат+" "+Наим+" в 1С НОМЕНКЛАТУРА не найден");
	ФлагОШИБКА = Истина ;
	Продолжить;
Конецесли;

// при попытке выполнить это присвоение ошибка "Значение не является значением объектного типа (ССЫЛКА)"
Мат = Выб.Ссылка.ПолучитьОбъект() ;
Показать

В чем грабли?
6. homer_ 79 01.10.21 10:19 Сейчас в теме
(5) во всем,

мВыб = Запрос.Выполнить()
Если мВыб .Пустой() тогда
Сообщить("КодМат="+КодМат+" "+Наим+" в 1С НОМЕНКЛАТУРА не найден");
ФлагОШИБКА = Истина ;
Продолжить;
Конецесли;

Выб = мВыб .Выбрать();
Выб.Следующий();
Показать
8. DBV 01.10.21 10:39 Сейчас в теме
(5) меня смущает оператор Продолжить,
Это запрос в цикле?

Ну и Запрос.Выполнить().Выбрать().Следующий() вернет тип Булево

Отладчиком проверяйте
nomad_irk; +1 Ответить
7. soft_wind 01.10.21 10:37 Сейчас в теме
попробуйте так
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| 	Ссылка
| из Справочник.Номенклатура 
| ГДЕ КОДМАТ = &КодМат ";

Запрос.УстановитьПараметр("КодМат","111");

Выб=Запрос.Выполнить().Выбрать();
Если Выб.Следующий() Тогда
	Мат = Выб.Ссылка;
Иначе
	Сообщить("КодМат="+КодМат+" "+Наим+" в 1С НОМЕНКЛАТУРА не найден");
	ФлагОШИБКА = Истина ;
	Мат = Неопределено;
КонецЕсли; 
Возврат Мат; //ну или что там у вас
Показать
9. 4007 01.10.21 11:55 Сейчас в теме
(7) Большое спасибо. Написал так

Запрос.УстановитьПараметр("КодМат",СокрЛП(КодМат));
Выб=Запрос.Выполнить().Выбрать();
Если Выб.Следующий() = Ложь тогда

Сообщить("КодМат="+КодМат+" "+Наим+" в 1С НОМЕНКЛАТУРА не найден");
ФлагОШИБКА = Истина ;
Продолжить;
Конецесли;

Мат = Выб.Ссылка ;

и всё получилось.
Спасибо всем.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот