Как исправить ошибку «Метод объекта не обнаружен (Свойство)» в 1С:Розница при обмене с сайтом

Программист 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← На главную

При интеграции интернет-магазинов с учетными системами 1С пользователи часто сталкиваются со сбоями в процессе обмена данными. Одной из распространенных проблем в конфигурации 1С:Розница (особенно на редакции 2.2 и смежных версиях БСП) является внезапная остановка обмена заказами с ошибкой следующего содержания:

{Обработка.РасширенныйВводКонтактнойИнформации.МодульМенеджера(675)}: Метод объекта не обнаружен (Свойство) Если НЕ ОбъектАдреса.Свойство("AddressType") Тогда

В этой статье мы подробно проанализируем, почему возникает эта ошибка, разберем механизм ее появления и рассмотрим три эффективных способа ее устранения.

Выясняем причину возникновения ошибки

Для того чтобы понять природу сбоя, обратимся к логике работы подсистемы контактной информации 1С. Во время обмена (например, при загрузке новых заказов покупателей с сайта в 1С) система парсит полученный XML- или JSON-пакет данных.

Адрес доставки или регистрации контрагента должен передаваться в виде структурированного XML-узла. Библиотека стандартных подсистем (БСП) считывает эти данные и пытается преобразовать их во внутренний объект 1С — Структура. В нормальной ситуации переменная ОбъектАдреса инициализируется именно как структура, у которой есть стандартный метод Свойство().

Однако, если на стороне сайта:

  1. Покупатель вообще не заполнил адрес (передано пустое значение);
  2. Адрес был передан некорректно (например, простой неструктурированной строкой вместо xml-структуры);
  3. Модуль обмена сайта сформировал некорректный узел адреса в файле обмена.

В этом случае парсер 1С не может создать структуру. Переменная ОбъектАдреса принимает значение Неопределено или обычную Строку. Когда код платформы доходит до строки 675 и пытается выполнить проверку ОбъектАдреса.Свойство("AddressType"), система экстренно завершает работу, так как у простых типов данных метода Свойство() не существует.

Рассмотрим по шагам три варианта решения этой проблемы.

Способ 1. Программное исправление кода (Рекомендуемый)

Самый надежный способ устранить ошибку раз и навсегда — добавить защитный код, который будет проверять тип данных переменной ОбъектАдреса перед обращением к ее методам. Если переменная не является структурой, система просто пропустит этот шаг и не упадет с критической ошибкой.

В оригинальном коде конфигурации в файле Обработка.РасширенныйВводКонтактнойИнформации.МодульМенеджера на строке 675 находится следующий фрагмент:

Если НЕ ОбъектАдреса.Свойство("AddressType") Тогда

Нам необходимо заменить его на безопасный вариант. Чтобы не снимать конфигурацию с поддержки и сохранить возможность беспрепятственного автоматического обновления, настоятельно рекомендуем использовать Расширение конфигурации.

Разберем процесс создания расширения по шагам:

  1. Откроем базу в режиме Конфигуратор.
  2. Перейдем в меню Конфигурация -> Расширения конфигурации и нажмем кнопку Добавить. Назовем расширение, например, "ИсправлениеОбменаССайтим".
  3. В дереве основной конфигурации найдем обработку РасширенныйВводКонтактнойИнформации. Кликнем по ней правой кнопкой мыши и выберем пункт Добавить в расширение.
  4. Перейдем в модуль менеджера этой обработки внутри нашего расширения. Нам нужно перехватить процедуру/функцию, содержащую проблемную строку (обычно это функция разбора или валидации адреса), используя аннотацию &Вместо или &ИзменениеИКонтроля.

Код исправления должен выглядеть следующим образом:


// Проверяем, что ОбъектАдреса действительно является Структурой
Если ТипЗнч(ОбъектАдреса) <> Тип("Структура") Или НЕ ОбъектАдреса.Свойство("AddressType") Тогда
    // Ваша логика обработки, если свойство AddressType отсутствует или объект поврежден
КонецЕсли;

Или альтернативный, более развернутый вариант:


Если ТипЗнч(ОбъектАдреса) = Тип("Структура") Тогда
    Если НЕ ОбъектАдреса.Свойство("AddressType") Тогда
        // Оригинальный код обработки
    КонецЕсли;
Иначе
    // Если пришла строка или Неопределено, записываем лог или обрабатываем как пустой адрес
    ОбъектАдреса = Новый Структура("AddressType", ""); 
КонецЕсли;

Применив данное расширение, мы гарантируем стабильность работы обмена даже при передаче поврежденных данных с сайта.

Способ 2. Обновление конфигурации «1С:Розница»

Многие пользователи ошибочно полагают, что для решения проблемы достаточно обновить технологическую платформу 1С (например, до версии 8.3.12 и выше). Однако сама по себе платформа не содержит бизнес-логику прикладных решений. Ошибка кроется непосредственно в коде конфигурации (а именно в коде БСП, интегрированном в «1С:Розница»).

Данная ошибка признана официальным багом старых релизов БСП. Разработчики фирмы «1С» давно выпустили исправление в последующих обновлениях. Поэтому наиболее правильным (хотя и более трудоемким) системным решением будет:

Способ 3. Исправление и валидация данных на стороне CMS сайта

Если программно менять код в 1С по каким-то причинам нельзя, источник проблемы можно локализовать непосредственно на стороне интернет-магазина. Поскольку 1С падает из-за некорректно пришедших данных, наша задача — не допустить передачу пустых или неструктурированных адресов в файлах обмена.

Проанализируем следующие моменты:

  1. Поиск "битого" заказа. Проверим список заказов на сайте, оформленных непосредственно перед возникновением ошибки обмена. Обратим внимание на заказы, где покупатели не заполнили адрес доставки, ввели его некорректно или использовали специфические спецсимволы. Временно отменим выгрузку этих заказов и проверим, пройдет ли обмен для остальных документов.
  2. Настройка модуля интеграции на сайте. Если используется популярная CMS (например, 1С-Битрикс), зайдем в настройки модуля обмена с 1С. Проверим соответствие полей адреса. Убедимся, что адрес передается структурированно (индекс, город, улица, дом раздельно), а не сплошной строкой в одном произвольном поле, которое парсер 1С не в состоянии разобрать.
  3. Обязательность полей. Сделаем поля адреса на сайте обязательными для заполнения при оформлении заказа, чтобы исключить передачу пустых значений, приводящих к сбою в 1С.

Использование любого из предложенных методов поможет вам восстановить работоспособность обмена между сайтом и «1С:Розница» и избежать потери заказов от клиентов.

← На главную