При интеграции интернет-магазинов с учетными системами 1С пользователи часто сталкиваются со сбоями в процессе обмена данными. Одной из распространенных проблем в конфигурации 1С:Розница (особенно на редакции 2.2 и смежных версиях БСП) является внезапная остановка обмена заказами с ошибкой следующего содержания:
{Обработка.РасширенныйВводКонтактнойИнформации.МодульМенеджера(675)}: Метод объекта не обнаружен (Свойство) Если НЕ ОбъектАдреса.Свойство("AddressType") Тогда
В этой статье мы подробно проанализируем, почему возникает эта ошибка, разберем механизм ее появления и рассмотрим три эффективных способа ее устранения.
Для того чтобы понять природу сбоя, обратимся к логике работы подсистемы контактной информации 1С. Во время обмена (например, при загрузке новых заказов покупателей с сайта в 1С) система парсит полученный XML- или JSON-пакет данных.
Адрес доставки или регистрации контрагента должен передаваться в виде структурированного XML-узла. Библиотека стандартных подсистем (БСП) считывает эти данные и пытается преобразовать их во внутренний объект 1С — Структура. В нормальной ситуации переменная ОбъектАдреса инициализируется именно как структура, у которой есть стандартный метод Свойство().
Однако, если на стороне сайта:
В этом случае парсер 1С не может создать структуру. Переменная ОбъектАдреса принимает значение Неопределено или обычную Строку. Когда код платформы доходит до строки 675 и пытается выполнить проверку ОбъектАдреса.Свойство("AddressType"), система экстренно завершает работу, так как у простых типов данных метода Свойство() не существует.
Рассмотрим по шагам три варианта решения этой проблемы.
Самый надежный способ устранить ошибку раз и навсегда — добавить защитный код, который будет проверять тип данных переменной ОбъектАдреса перед обращением к ее методам. Если переменная не является структурой, система просто пропустит этот шаг и не упадет с критической ошибкой.
В оригинальном коде конфигурации в файле Обработка.РасширенныйВводКонтактнойИнформации.МодульМенеджера на строке 675 находится следующий фрагмент:
Если НЕ ОбъектАдреса.Свойство("AddressType") Тогда
Нам необходимо заменить его на безопасный вариант. Чтобы не снимать конфигурацию с поддержки и сохранить возможность беспрепятственного автоматического обновления, настоятельно рекомендуем использовать Расширение конфигурации.
Разберем процесс создания расширения по шагам:
РасширенныйВводКонтактнойИнформации. Кликнем по ней правой кнопкой мыши и выберем пункт Добавить в расширение.&Вместо или &ИзменениеИКонтроля.Код исправления должен выглядеть следующим образом:
// Проверяем, что ОбъектАдреса действительно является Структурой
Если ТипЗнч(ОбъектАдреса) <> Тип("Структура") Или НЕ ОбъектАдреса.Свойство("AddressType") Тогда
// Ваша логика обработки, если свойство AddressType отсутствует или объект поврежден
КонецЕсли;
Или альтернативный, более развернутый вариант:
Если ТипЗнч(ОбъектАдреса) = Тип("Структура") Тогда
Если НЕ ОбъектАдреса.Свойство("AddressType") Тогда
// Оригинальный код обработки
КонецЕсли;
Иначе
// Если пришла строка или Неопределено, записываем лог или обрабатываем как пустой адрес
ОбъектАдреса = Новый Структура("AddressType", "");
КонецЕсли;
Применив данное расширение, мы гарантируем стабильность работы обмена даже при передаче поврежденных данных с сайта.
Многие пользователи ошибочно полагают, что для решения проблемы достаточно обновить технологическую платформу 1С (например, до версии 8.3.12 и выше). Однако сама по себе платформа не содержит бизнес-логику прикладных решений. Ошибка кроется непосредственно в коде конфигурации (а именно в коде БСП, интегрированном в «1С:Розница»).
Данная ошибка признана официальным багом старых релизов БСП. Разработчики фирмы «1С» давно выпустили исправление в последующих обновлениях. Поэтому наиболее правильным (хотя и более трудоемким) системным решением будет:
Если программно менять код в 1С по каким-то причинам нельзя, источник проблемы можно локализовать непосредственно на стороне интернет-магазина. Поскольку 1С падает из-за некорректно пришедших данных, наша задача — не допустить передачу пустых или неструктурированных адресов в файлах обмена.
Проанализируем следующие моменты:
Использование любого из предложенных методов поможет вам восстановить работоспособность обмена между сайтом и «1С:Розница» и избежать потери заказов от клиентов.