При настройке стандартного обмена между конфигурацией 1С:Управление торговлей (редакция 11) и интернет-магазином технические специалисты часто сталкиваются с непонятным на первый взгляд поведение системы. Номенклатура, остатки и цены выгружаются штатно, однако документы Заказ клиента, оформленные менеджерами непосредственно в базе 1С, не попадают в зарегистрированные изменения и не передаются на сайт. В этой статье мы подробно проанализируем ситуацию, выясним причину такого поведения типового механизма и рассмотрим способы решения данной задачи.
Рассмотрев архитектуру стандартного протокола обмена CommerceML и типовых подписок на события в 1С:Управление торговлей 11, можно увидеть четкое разделение ролей между сайтом и учетной системой. По умолчанию типовой обмен выстраивается по следующей модели:
Заказ клиента.Проанализируем подписки на события и код регистрации объектов. При проведении или изменении документа Заказ клиента срабатывает подписка на событие, проверяющая реквизиты заказа. Если в документе отсутствуют сведения о первоисточнике (например, не заполнены реквизиты Номер заказа на сайте или Дата заказа на сайте), регистрация документа в узле плана обмена ПланыОбмена.ОбменССайтом пропускается. Именно поэтому созданные вручную заказы в 1С не появляются в списке зарегистрированных изменений.
Чтобы убедиться, что проблема заключается именно в отсутствии регистрации документа, выполним следующие шаги:
Номенклатура (там изменения присутствуют) и документ Заказ клиента.Если бизнес-процесс компании требует, чтобы заказы, созданные менеджерами в 1С, обязательно попадали в личный кабинет покупателя на сайте, рассмотрим доступные варианты реализации этой функциональности.
Если сайт работает на платформе 1С-Битрикс, наиболее простым и надежным решением будет отказ от встроенного штатного узла обмена в пользу внешнего модуля обмена от разработчиков Битрикс.
Посмотрим на преимущества этого подхода:
Если используется стандартный узел обмена 1С и менять его на сторонний модуль не планируется, потребуется написать небольшое расширение конфигурации. В расширении мы доработаем процедуру проведения документа Заказ клиента, чтобы зарегистрировать его в плане обмена вручную.
Рассмотрим пример кода для расширения конфигурации:
&НаСервере
Процедура ПриЗаписиЗаказаПринудительнаяРегистрация(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
// Проверим, включен ли обмен с сайтом и проведен ли документ
Если Источник.Проведен И НЕ Источник.ПометкаУдаления Тогда
ВыборкаУзлов = ПланыОбмена.ОбменССайтом.Выбрать();
Пока ВыборкаУзлов.Следующий() Цикл
УзелСсылка = ВыборкаУзлов.Ссылка;
// Проверяем, что узел не является предопределенным "ЭтотУзел" и в нем включен обмен заказами
Если УзелСсылка <> ПланыОбмена.ОбменССайтом.ЭтотУзел()
И УзелСсылка.ВыгружатьЗаказы Тогда
// Принудительно регистрируем изменение заказа в плане обмена
ПланыОбмена.ЗарегистрироватьИзменения(УзелСсылка, Источник.Ссылка);
КонецЕсли;
КонецЦикл;
КонецЕсли;
КонецПроцедуры
После подключения данного кода к подписке на событие ПриЗаписи документа Заказ клиента, при каждом проведении заказа система будет принудительно вызывать метод ПланыОбмена.ЗарегистрироватьИзменения().
Даже если мы принудительно передадим заказ из 1С, сайт может отклонить его при обработке XML-пакета CommerceML. Чтобы избежать ошибок загрузки, проверим следующие требования на стороне интернет-магазина:
Таким образом, мы выяснили, что отсутствие выгрузки созданных в 1С заказов — это не сбой программы, а предусмотренное разработчиками ограничение типовой логики CommerceML. При необходимости эту функциональность можно легко расширить с помощью доработки подписок на события или установки специализированного модуля обмена.