12 лет в IT, последние 10 лет занимаюсь развитием digital продакшена для ecom.
Пишу в tg | Сетка | Tenchat | vc | habr.

Обмен 1С с сайтом: как работает, почему падает и как починить

Удивительно, но на некоторых проектах до сих пор всплывают проблемы с обменом между сайтом и 1С которые не могут решить.

Недавно помогали коллегам с подобным кейсом: старый БУС, 1С, обмен заказами долго шёл без проблем — и в один день встал. В логах — вал ошибок, обмен стоит. Разобрались, починили. Заодно решил расчехлить старую инструкцию из Wiki.

Принцип работы штатного обмена

Обмен между 1С и сайтом реализован через протокол CommerceML 2, где основа — XML-файлы. Обмен всегда инициируется со стороны 1С. Сайт играет роль приёмника.

Что можно передавать:

  • товары и торговые предложения (в 1С — «характеристики»)

  • остатки

  • цены

  • заказы в обе стороны

  • пользователи

  • справочники и прочие сущности

Ключевые особенности:

  • точка входа на сайте —

    /bitrix/admin/1c_exchange.php

  • взаимодействие идёт через серию GET-запросов

  • данные записываются во временные таблицы (b_xml, b_xml_tree_import_1c)

  • при сбое обмен начинается с начала

Важно: одновременные обмены одного типа невозможны, так как данные будут перезаписаны. Это может привести к потере целостности данных.

Версии обмена: как определить

Разные версии модуля обмена (на стороне 1С и на сайте) формируют разные составы файлов:

  • import.xml
    и 
    offers.xml
    — минимальный набор

  • добавление

    prices.xml
    и 
    rests.xml
    — передача цен и остатков отдельно

  • goods.xml
    + дополнительные запросы (например, деактивация) — для кастомизированных решений

Подробности: https://www.dev.1c-bitrix.ru/api_help/sale/xml/index.php

Дополнительный модуль обмена от 1С

На сайте 1С доступен бесплатный модуль, который можно установить в конфигурацию:
https://1c.1c-bitrix.ru/ecommerce/download.php

Что он даёт:

  • дерево выгрузки товаров и категорий

  • гибкость в отборе данных

❗️Внимание: если используются отборы по дереву, категории или товары, не попавшие в него, не выгрузятся. Нужно контролировать это вручную.

Режимы выгрузки

В 1С можно выбрать один из двух режимов:

  1. Только изменения — выгружаются элементы, помеченные как изменённые

  2. Полная выгрузка — выгружается весь набор по заданному отбору

Также можно отключить:

  • выгрузку изображений

  • определённые свойства или разделы

Заказы выгружаются, если их

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

Типовые проблемы и их причины

  • ❌ Включён ZIP-архив — часто вызывает ошибки. Лучше выключить.

  • ❌ Слишком большой размер пакета — рекомендуемое значение: не более 100 элементов.

  • ❌ Много свойств у товаров — увеличивает нагрузку и время выполнения.

  • ❌ Ручное редактирование в админке перетирается данными из 1С.

  • ❌ Массовое изменение заказов (обработчиком или API) — вызывает очередь, которую 1С не успевает обработать.

Ручная отладка обмена

Иногда проще отладить руками, эмулируя работу 1С.

Пример запросов:

Авторизация:

/bitrix/admin/1c_exchange.php?type=sale&mode=checkauth
/bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth

Полученный

sessid
используется в следующих шагах.

Загрузка файла вручную:

  1. Положите нужный XML-файл в 

    /upload/1c_catalog/

  2. Вызовите:

/bitrix/admin/1c_exchange.php?type=catalog&mode=file&filename=rests_123.xml&sessid=ВАШ_ID
  1. Жмите F5 — по ответам на экране будет видно, когда обмен завершится

Почему не выгружаются заказы

Если 1С «не видит» заказы:

  • Проверьте отбор на стороне 1С — может стоять фильтр «только оплаченные»

  • Сайт отправляет всё, что попадает под условия (

    дата изменения > последней выгрузки
    )

Важно: при ручной проверке обмена заказы выгружаются один раз. Чтобы повторить выгрузку — нужно изменить заказ вручную (например, добавить комментарий).

Проверка:

/bitrix/admin/1c_exchange.php?type=sale&mode=query&sessid=ВАШ_ID

Кастомизация модуля обмена

Что можно делать безопасно:

  • добавлять свойства в заказ через штатную схему

  • использовать доп. свойства, не меняя структуру XML

  • выносить изменения в 

    /local/

  • сделать отдельную точку входа для особой выгрузки

Что не стоит делать:

  • править ядро модуля обмена напрямую — это приведёт к проблемам при обновлении

Дополнительные справочники (например, бонусы клиентов) лучше выгружать через отдельный скрипт (XML, CSV, JSON).

Реальный кейс: обмен встал из-за завершённых заказов

На одном из проектов 1С начала выгружать старые заказы, уже в статусе «Выполнен». Битрикс по умолчанию не позволяет вносить изменения в закрытые заказы. В результате:

  • 1С пыталась обновить более 1000 заказов

  • сайт их отклонял

  • обмен вставал

  • сервер перегружался

Что сделали:

  1. Очистили очередь заказов на сайте (

    mode=query
    )

  2. В таблице

    b_sale_order
    сняли флаг «к выгрузке»

  3. В 1С очистили внутренний реестр на стороне обмена

После этого обмен заработал.

Общие выводы

Обмен с 1С — мощный инструмент, но требует внимания:

  • при росте проекта он начинает тормозить из-за избыточности (всё дерево, все свойства)

  • устаревшие конфигурации могут не справляться с объёмом

  • кастомизации лучше выносить отдельно

Если проект выходит за рамки стандартного обмена — стоит рассматривать переход на брокеры: RabbitMQ, Kafka, Datareon. Там выше гибкость и скорость, но потребуется тщательная архитектура, чтобы избежать зацикливаний и потерь данных.

Если вы столкнулись с похожей проблемой — поможем разобраться. Мы работаем как со стандартным обменом, так и с интеграциями через очереди и API.