1C-Code → Ошибки 1С → Значение не является значением объектного типа
Сообщение платформы: Значение не является значением объектного типа
Вы обратились через точку к тому, у чего точки быть не может: к Неопределено, к NULL, к числу или строке. В скобках платформа называет то поле, которое вы пытались получить.
Выборка.Контрагент.Наименование // Контрагент пуст → NULL.Наименование
Самая частая причина. В левом соединении несовпавшие строки дают NULL, и обращение к его полю падает. Проверяйте до обращения или используйте ЕСТЬNULL прямо в запросе.
Ссылка = Справочники.Номенклатура.НайтиПоКоду(Код);
Ссылка.Наименование // если не нашлось — пустая ссылка
НайтиПоКоду и НайтиПоНаименованию возвращают ПУСТУЮ ССЫЛКУ, а не Неопределено. У пустой ссылки поля читаются, но дают пустые значения; а вот метод у Неопределено уже не вызвать. В тренажёре ссылок-пустышек нет: ненайденный элемент — это Неопределено, и проверять надо «<> Неопределено». Проверка нужна в обоих случаях, разница только в том, с чем сравнивать.
Функция Найти(Код)
Если Условие Тогда
Возврат Элемент;
КонецЕсли;
// а если условие не сработало — вернётся Неопределено
КонецФункции
Проверяйте перед обращением: Если ЗначениеЗаполнено(Ссылка) Тогда или Если Ссылка <> Неопределено Тогда. В запросах — ЕСТЬNULL(Поле, ЗначениеПоУмолчанию). Проверка стоит одну строку, а её отсутствие роняет обработку у пользователя.
Проверить себя на практике. В тренажёре те же ошибки возникают на настоящем интерпретаторе языка 1С: сообщения дословно те же, что у платформы, но исправить их можно сразу в браузере, без установки и без риска для рабочей базы.