Почему заказы, созданные в 1С:Управление торговлей 11, не выгружаются на сайт при обмене?

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

При настройке стандартного обмена между конфигурацией 1С:Управление торговлей (редакция 11) и интернет-магазином технические специалисты часто сталкиваются с непонятным на первый взгляд поведение системы. Номенклатура, остатки и цены выгружаются штатно, однако документы Заказ клиента, оформленные менеджерами непосредственно в базе 1С, не попадают в зарегистрированные изменения и не передаются на сайт. В этой статье мы подробно проанализируем ситуацию, выясним причину такого поведения типового механизма и рассмотрим способы решения данной задачи.

Выясним причину: как работает штатный механизм обмена заказами

Рассмотрев архитектуру стандартного протокола обмена CommerceML и типовых подписок на события в 1С:Управление торговлей 11, можно увидеть четкое разделение ролей между сайтом и учетной системой. По умолчанию типовой обмен выстраивается по следующей модели:

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

Проанализируем подписки на события и код регистрации объектов. При проведении или изменении документа Заказ клиента срабатывает подписка на событие, проверяющая реквизиты заказа. Если в документе отсутствуют сведения о первоисточнике (например, не заполнены реквизиты Номер заказа на сайте или Дата заказа на сайте), регистрация документа в узле плана обмена ПланыОбмена.ОбменССайтом пропускается. Именно поэтому созданные вручную заказы в 1С не появляются в списке зарегистрированных изменений.

Разберем по шагам: как проверить зарегистрированные изменения

Чтобы убедиться, что проблема заключается именно в отсутствии регистрации документа, выполним следующие шаги:

  1. Перейдем в раздел Администрирование – Настройки синхронизации данных – Узлы обмена с сайтом.
  2. Откроем нужный узел обмена и нажмем кнопку Показать зарегистрированные изменения.
  3. В развернувшемся дереве объектов найдем справочник Номенклатура (там изменения присутствуют) и документ Заказ клиента.
  4. Если список заказов пуст, значит подписка на событие отклонила регистрацию документа из-за отсутствия признака происхождения заказа с сайта.

Способы решения задачи: выгрузка заказов из 1С на сайт

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

Вариант 1. Использование специализированного модуля обмена (например, 1С-Битрикс)

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

Посмотрим на преимущества этого подхода:

  1. В настройках узла модуля Битрикс присутствует отдельный флаг «Выгружать заказы, созданные в 1С».
  2. Модуль позволяет настроить гибкие фильтры по организациям, подразделениям и статусам выгружаемых заказов.
  3. На стороне CMS Битрикс активируется опция «Создавать новые заказы и контрагенты из 1С», что позволяет корректно принимать новые документы из базы 1С.

Вариант 2. Принудительная регистрация заказов через расширение конфигурации

Если используется стандартный узел обмена 1С и менять его на сторонний модуль не планируется, потребуется написать небольшое расширение конфигурации. В расширении мы доработаем процедуру проведения документа Заказ клиента, чтобы зарегистрировать его в плане обмена вручную.

Рассмотрим пример кода для расширения конфигурации:


&НаСервере
Процедура ПриЗаписиЗаказаПринудительнаяРегистрация(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    
    // Проверим, включен ли обмен с сайтом и проведен ли документ
    Если Источник.Проведен И НЕ Источник.ПометкаУдаления Тогда
        
        ВыборкаУзлов = ПланыОбмена.ОбменССайтом.Выбрать();
        Пока ВыборкаУзлов.Следующий() Цикл
            
            УзелСсылка = ВыборкаУзлов.Ссылка;
            
            // Проверяем, что узел не является предопределенным "ЭтотУзел" и в нем включен обмен заказами
            Если УзелСсылка <> ПланыОбмена.ОбменССайтом.ЭтотУзел() 
                И УзелСсылка.ВыгружатьЗаказы Тогда
                
                // Принудительно регистрируем изменение заказа в плане обмена
                ПланыОбмена.ЗарегистрироватьИзменения(УзелСсылка, Источник.Ссылка);
                
            КонецЕсли;
            
        КонецЦикл;
        
    КонецЕсли;

КонецПроцедуры

После подключения данного кода к подписке на событие ПриЗаписи документа Заказ клиента, при каждом проведении заказа система будет принудительно вызывать метод ПланыОбмена.ЗарегистрироватьИзменения().

Обязательные настройки на стороне сайта для успешной интеграции

Даже если мы принудительно передадим заказ из 1С, сайт может отклонить его при обработке XML-пакета CommerceML. Чтобы избежать ошибок загрузки, проверим следующие требования на стороне интернет-магазина:

  1. Настройка сопоставления контрагентов: В заказе 1С должны быть указаны контактные данные (Email и телефон покупателя), чтобы CMS могла автоматически найти или зарегистрировать пользователя.
  2. Сопоставление товаров (XML ID): Товары из табличной части заказа в 1С должны иметь заполненные уникальные идентификаторы, совпадающие с каталогом товаров на сайте.
  3. Настройка эквивалентов статусов: В настройках узла обмена 1С и в параметрах интеграции CMS должно быть задано точное соответствие статусов заказа 1С и статусов на сайте.

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

← На главную