Двусторонний обмен заказами — это протокол CommerceML, по которому сайт отдаёт в 1С новые заказы, а 1С возвращает их обновлённое состояние: цены, состав, статусы, реквизиты и оплату. Настраивается он отдельно от каталога и требует аккуратного сопоставления справочников с обеих сторон.
Как устроен обмен заказами
Обмен заказами живёт в том же модуле sale, что и оформление, и работает по второй фазе протокола CommerceML — mode=query/mode=success для документов. В отличие от каталога, здесь инициатором чаще выступает 1С: обработка обмена подключается к точке /bitrix/admin/1c_exchange.php и последовательно выполняет запрос заказов, их приём и подтверждение.
Цикл выглядит так:
- checkauth — авторизация обработки по логину и паролю пользователя сайта;
- query — сайт формирует
sale.xmlсо всеми заказами, попадающими под условия выгрузки, и отдаёт его 1С; - import (file/sale) — 1С присылает встречный документ с изменениями, сайт разбирает его через
sale_import.php; - success — стороны подтверждают завершение сессии.
Что передаётся в каждую сторону
Важно заранее договориться, кто является мастером для каждого поля. Иначе 1С и сайт будут перетирать данные друг друга при каждой сессии.
| Данные | Сайт → 1С | 1С → сайт |
|---|---|---|
| Новый заказ, состав, покупатель | Да | — |
| Цены и суммы позиций | Исходные | Пересчёт (мастер — 1С) |
| Статус заказа | — | Да |
| Флаги оплаты и отгрузки | — | Да |
| Комментарий менеджера | — | Да |
Состав заказа 1С может корректировать: добавить позицию, изменить количество, проставить фактическую цену со склада. Сайт принимает это как источник истины, поэтому в шаблоне личного кабинета показывайте покупателю уже согласованный состав.
Настройка на стороне сайта
В админке идёте в Магазин → Настройки → Настройки обмена данными → Экспорт в 1С (профиль обмена заказами). Ключевые параметры:
- Пользователь для обмена — отдельная учётка с правами на модуль
sale; под ней 1С проходитcheckauth; - Выгружать заказы — включите и задайте, с какого момента (обычно «изменённые с прошлой сессии»);
- Сопоставление статусов — таблица «статус 1С → статус заказа Битрикс»;
- Тип плательщика и способы оплаты — маппинг на
PAY_SYSTEM_ID; - Свойства заказа — какие поля попадают в XML как реквизиты контрагента.
На стороне 1С в типовой обработке «Обмен с сайтом» (модуль «Обмен с сайтом» в УТ/УНФ/ERP) указывается адрес узла, логин, пароль и расписание. Регламентное задание запускает обмен по таймеру.
Сопоставление справочников
Основная боль двустороннего обмена — идентификаторы. 1С находит заказ на сайте по ID (или по XML-идентификатору документа), а товарные позиции — по XML_ID элемента каталога. Если каталог выгружался не из этой же 1С, идентификаторы не совпадут и заказ приедет с «неопознанными» строками.
- Статусы. Список статусов заказа (
Магазин → Статусы заказов) сопоставляется с состояниями документа в 1С. Заведите статусы заранее и не меняйте их коды после запуска. - Способы оплаты и доставки. Маппинг на платёжные системы и службы доставки Битрикса; расхождение приводит к тому, что заказ приходит без оплаты.
- Склады. Если включён складской учёт, коды складов на сайте должны соответствовать складам 1С (см. соседнюю статью о соответствии складов).
Проверка и отладка
Ход сессии проще всего смотреть в лог-файле обмена. Включите логирование в настройках профиля — Битрикс пишет __1c_exchange.log в каталог обмена, а также сохраняет присланный sale.xml во временную папку.
Что проверять при отладке:
- Прошла ли авторизация — в логе шаг
checkauthи выданныйsessid; - Сформировался ли
sale.xmlи попал ли в него нужный заказ (фильтр по дате/статусу); - Разобрал ли сайт ответ 1С — ищите записи
sale_import.phpи обновление полей заказа; - Нет ли ошибок вида «не найден товар с XML_ID» — это разъехавшиеся идентификаторы каталога.
1c_exchange.php?type=sale&mode=query из-под учётки обмена — так видно точный XML без запуска 1С.Частые грабли
Несколько ситуаций, которые чаще всего ломают обмен заказами:
- Заказ «уезжает» в 1С повторно. Причина — сброс отметки о выгрузке; проверьте, что 1С отправляет
mode=successи сайт фиксирует факт обмена. - Дублирование позиций. Возникает, когда XML_ID торговых предложений на сайте не совпадает с 1С — заказ приходит «поверх» и добавляет строки заново.
- Слетают цены. Если мастер цен — 1С, а на сайте включён пересчёт корзины, итоговая сумма может разойтись; отключайте пересчёт для заказов, пришедших из 1С.
- Таймаут на больших заказах. Длинные документы упираются в
max_execution_time; увеличьте лимит для скрипта обмена или включите пошаговый режим. - Статус не применяется. Код статуса в 1С не совпадает с кодом в Битриксе — исправляется в таблице сопоставления.
Автоматизация и расписание
Обмен заказами должен идти чаще каталога, но не создавать конкуренцию за ресурсы. Практичная схема:
- Регламентное задание в 1С запускает обмен заказами каждые 10–15 минут в рабочее время;
- Каталог, цены и остатки выгружаются отдельным профилем 2–4 раза в сутки;
- На сайте события заказа (
OnSaleOrderSaved) можно использовать, чтобы помечать заказ к выгрузке немедленно.
Если магазин крупный, событийную модель заменяют очередью: заказ ставится в очередь на выгрузку, а 1С забирает пачками. Это снимает пики и делает обмен предсказуемым по нагрузке.
Итог
Двусторонний обмен заказами — это про дисциплину в справочниках и понимание, кто мастер данных. Настроенный правильно, он избавляет менеджеров от ручного ввода: заказ с сайта сразу появляется в 1С, а обратно приходят согласованный состав, цены, оплата и статусы. Ошибки почти всегда сводятся к разъехавшимся идентификаторам, задвоенным учёткам обмена и неверному маппингу статусов.
Если обмен заказами уже «фонит» дублями или теряет данные, мы в B2Bsite разбираем логи, приводим в порядок сопоставление справочников и настраиваем стабильное расписание — как в рамках интеграции 1С с сайтом, так и на сопровождении.
Частые вопросы
Чем обмен заказами отличается от обмена каталогом?
Это разные профили одного протокола CommerceML. Каталог передаёт товары, цены и остатки из 1С на сайт, а обмен заказами двусторонний: сайт отдаёт новые заказы, а 1С возвращает их изменения — состав, статусы, оплату.
Как часто нужно запускать обмен заказами?
Обычно каждые 10–15 минут в рабочее время, потому что заказы должны быстро попадать к менеджерам. Тяжёлую выгрузку каталога при этом выносят на отдельное расписание — 2–4 раза в сутки.
Почему заказ приходит из 1С с задвоенными позициями?
Чаще всего не совпадают XML_ID товаров или торговых предложений на сайте и в 1С. Сайт не находит существующую строку и добавляет её заново. Лечится приведением идентификаторов каталога к единому источнику.
Кто является мастером цен в заказе?
Как правило, 1С: она пересчитывает суммы по своим правилам и возвращает их на сайт. В этом случае автоматический пересчёт корзины для заказов из 1С нужно отключать, иначе итог разойдётся.
Можно ли использовать одну учётку для каталога и заказов?
Не рекомендуется. Разные профили обмена должны работать под разными пользователями, иначе при одновременных сессиях возникает блокировка и часть данных теряется.
Где смотреть, что пошло не так при обмене?
В лог-файле обмена (включается в настройках профиля) и во временном sale.xml. По шагам checkauth, query, import и success видно, на каком этапе прервалась сессия.
Почему статус заказа из 1С не применяется на сайте?
Код состояния документа в 1С не сопоставлен со статусом заказа в Битриксе. Нужно проверить таблицу соответствия статусов в настройках обмена и коды статусов в разделе Магазин.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.