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

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

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


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

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

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

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


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

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

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

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

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

В чем грабли?
6. homer_ 78 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С НОМЕНКЛАТУРА не найден");
ФлагОШИБКА = Истина ;
Продолжить;
Конецесли;

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

и всё получилось.
Спасибо всем.
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день