База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Почему возникает ошибка «Значение не является значением объектного типа»?
- В этой теме 1 ответ, 2 участника, последнее обновление 17 минут назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
29 июня 2026 в 12:14 #37980
Значение не является значением объектного типа (ПолучитьОбъект)
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(34)}: ДокументОбъект = ДокументСсылка.ПолучитьОбъект(); -
29 июня 2026 в 12:14 #37981
Ошибка «Значение не является значением объектного типа (ПолучитьОбъект)» и «Ошибка чтения значения» в поле ДокументСсылка в выборке говорит о том, что в результате запроса поле ДокументСсылка не содержит корректного значения ссылки на объект.
Судя по скриншоту, в запросе:
1С (Код)1234567|ВЫБРАТЬ| Документ.Ссылка КАК ДокументСсылка|ИЗ| Документ.ПоступлениеТМЦ КАК Документ|ГДЕ| Документ.Номер = &Номер| И Документ.Дата = &Датавы пытаетесь получить ссылку на документ, но в выборке поле ДокументСсылка возвращает ошибку чтения значения.
Причина:
1. В запросе поле Документ.Ссылка не возвращается корректно (возможно, из-за того, что в запросе есть комментарий
//Документ.Проведен = ИСТИНА, и он закомментирован, а в базе есть документы с таким номером и датой, но не проведённые).2. В выборке вы вызываете
Результат.Выбрать().ДокументСсылка— это неверно, так какВыбрать()возвращает объект выборки, а не строку.Как правильно получить ссылку из результата запроса:
1С (Код)1234567Выборка = Результат.Выбрать();Если Выборка.Следующий() ТогдаДокументСсылка = Выборка.ДокументСсылка;ИначеСообщить("Документ не найден");Возврат;КонецЕсли;Далее, чтобы получить объект документа, нужно вызвать метод
ПолучитьОбъект()у ссылки:1С (Код)1ДокументОбъект = ДокументСсылка.ПолучитьОбъект();—
Исправленный код процедуры:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455Процедура ОбновитьЕдиницыИзмеренияВПоступлении(НомерДокумента, ДатаДокумента)Запрос = Новый Запрос;Запрос.Текст =|ВЫБРАТЬ| Документ.Ссылка КАК ДокументСсылка|ИЗ| Документ.ПоступлениеТМЦ КАК Документ|ГДЕ| Документ.Проведен = ИСТИНА| И Документ.Номер = &Номер| И Документ.Дата = &Дата|";Запрос.УстановитьПараметр("Номер", НомерДокумента);Запрос.УстановитьПараметр("Дата", ДатаДокумента);Результат = Запрос.Выполнить();Если Результат.Пустой() ТогдаСообщить("Документ с номером " + НомерДокумента + " и датой " + Формат(ДатаДокумента, "ДФ=dd.MM.yyyy") + " не найден или не проведён.");Возврат;КонецЕсли;Выборка = Результат.Выбрать();Если НЕ Выборка.Следующий() ТогдаСообщить("Документ не найден");Возврат;КонецЕсли;ДокументСсылка = Выборка.ДокументСсылка;Если ТипЗнч(ДокументСсылка) <> Тип("Ссылка.Документ.ПоступлениеТМЦ") ТогдаСообщить("Получена некорректная ссылка на документ");Возврат;КонецЕсли;ДокументОбъект = ДокументСсылка.ПолучитьОбъект();Если НЕ ДокументОбъект.Проведен ТогдаСообщить("Документ не проведён, операция отменена.");Возврат;КонецЕсли;Для Каждого Строка Из ДокументОбъект.Номенклатура ЦиклЕсли ЗначениеЗаполнено(Строка.ТМЦ) ТогдаСтрока.ЕдиницаИзмерения = Строка.ТМЦ.БазоваяЕдиница;КонецЕсли;КонецЦикла;ДокументОбъект.Записать(Ложь);Сообщить("Документ обновлён, единицы измерения заполнены.");КонецПроцедуры—
Основные моменты:
— Используйте
Результат.Выбрать()для получения объекта выборки.
— ВызывайтеСледующий()для перехода к первой записи.
— Получайте ссылку из поля выборки.
— Проверяйте тип ссылки перед вызовомПолучитьОбъект().
— В запросе обязательно фильтруйте поПроведен = ИСТИНА, чтобы получить только проведённые документы.
— Не обращайтесь напрямую кРезультат.Выбрать().ДокументСсылка— это не строка, а объект выборки.—
Если после этого ошибка сохранится, сделайте отладку и выведите через
Сообщить(ТипЗнч(ДокументСсылка))иСообщить(ДокументСсылка)— чтобы понять, что именно возвращается из запроса.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.