База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить ошибку «Поле объекта не обнаружено (ОсновнойДоговорКонтрагента)» в › Ответ в теме: Как исправить ошибку «Поле объекта не обнаружено (ОсновнойДоговорКонтрагента)» в
Ошибка «Поле объекта не обнаружено (ОсновнойДоговорКонтрагента)» говорит о том, что у объекта «ГРАСС ТАЙМ» (справочник Контрагенты) нет реквизита или свойства с именем «ОсновнойДоговорКонтрагента».
Причины и решения:
1. Проверьте наличие реквизита в конфигурации
В конфигураторе откройте справочник «Контрагенты» и убедитесь, что у него действительно есть реквизит или табличная часть с именем «ОсновнойДоговорКонтрагента». Возможно, реквизит называется иначе или отсутствует.
2. Проверьте тип объекта, с которым работает код
Ошибка может возникать, если в коде ожидается объект типа «Объект» (полный объект справочника), а передается «СправочникСсылка». У ссылочного объекта нет реквизитов, только ссылка на объект. Для доступа к реквизитам нужно получить объект через .ПолучитьОбъект().
Пример:
|
1 2 3 4 5 |
КонтрагентСсылка = Справочники.Контрагенты.НайтиПоНаименованию("ГРАСС ТАЙМ"); Если КонтрагентСсылка <> Неопределено Тогда КонтрагентОбъект = КонтрагентСсылка.ПолучитьОбъект(); Договор = КонтрагентОбъект.ОсновнойДоговорКонтрагента; КонецЕсли; |
Если в вашем коде используется ссылка, а не объект, то обращение к реквизиту вызовет ошибку.
3. Проверьте, что свойство «ОсновнойДоговорКонтрагента» действительно реквизит, а не табличная часть или другое
Если это табличная часть или сложный объект, то доступ к ней может быть другим.
4. Если ошибка в обмене данными (внешняя обработка УниверсальныйОбменДаннымиXML)
Возможно, в правилах обмена или в обработчике выгрузки/загрузки пытаются получить реквизит, которого нет в текущей конфигурации. Проверьте настройки обмена, соответствие версий конфигураций.
5. Отладка
В месте ошибки (8118 строка модуля объекта ВнешнейОбработки) добавьте проверку типа и наличия реквизита:
|
1 2 3 4 5 6 7 8 9 |
Если ТипЗнч(Объект) = Тип("СправочникОбъект.Контрагенты") Тогда Если Объект.Свойство("ОсновнойДоговорКонтрагента") Тогда Значение = Объект.ОсновнойДоговорКонтрагента; Иначе Сообщить("Реквизит ОсновнойДоговорКонтрагента отсутствует"); КонецЕсли; Иначе Сообщить("Объект не является объектом справочника Контрагенты"); КонецЕсли; |
Это поможет понять, что именно передается в функцию.
Если реквизит отсутствует, его нужно добавить в конфигурацию. Если передается ссылка, а не объект — получить объект через .ПолучитьОбъект().
Рекомендую посмотреть здесь:
https://infostart.ru/public/89842/ — про работу с объектами и ссылками в 1С
https://infostart.ru/public/1137213/ — про диагностику ошибок в обработках и модулях