Обмен 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С можно выбрать один из двух режимов:
-
Только изменения — выгружаются элементы, помеченные как изменённые
-
Полная выгрузка — выгружается весь набор по заданному отбору
Также можно отключить:
-
выгрузку изображений
-
определённые свойства или разделы
Заказы выгружаются, если их
дата изменения больше даты последней выгрузки.
Типовые проблемы и их причины
-
❌ Включён 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 используется в следующих шагах.
Загрузка файла вручную:
-
Положите нужный XML-файл в
/upload/1c_catalog/ -
Вызовите:
/bitrix/admin/1c_exchange.php?type=catalog&mode=file&filename=rests_123.xml&sessid=ВАШ_ID
-
Жмите F5 — по ответам на экране будет видно, когда обмен завершится
Почему не выгружаются заказы
Если 1С «не видит» заказы:
-
Проверьте отбор на стороне 1С — может стоять фильтр «только оплаченные»
-
Сайт отправляет всё, что попадает под условия (
)дата изменения > последней выгрузки
Важно: при ручной проверке обмена заказы выгружаются один раз. Чтобы повторить выгрузку — нужно изменить заказ вручную (например, добавить комментарий).
Проверка:
/bitrix/admin/1c_exchange.php?type=sale&mode=query&sessid=ВАШ_ID
Кастомизация модуля обмена
Что можно делать безопасно:
-
добавлять свойства в заказ через штатную схему
-
использовать доп. свойства, не меняя структуру XML
-
выносить изменения в
/local/ -
сделать отдельную точку входа для особой выгрузки
Что не стоит делать:
-
править ядро модуля обмена напрямую — это приведёт к проблемам при обновлении
Дополнительные справочники (например, бонусы клиентов) лучше выгружать через отдельный скрипт (XML, CSV, JSON).
Реальный кейс: обмен встал из-за завершённых заказов
На одном из проектов 1С начала выгружать старые заказы, уже в статусе «Выполнен». Битрикс по умолчанию не позволяет вносить изменения в закрытые заказы. В результате:
-
1С пыталась обновить более 1000 заказов
-
сайт их отклонял
-
обмен вставал
-
сервер перегружался
Что сделали:
-
Очистили очередь заказов на сайте (
)mode=query -
В таблице
сняли флаг «к выгрузке»b_sale_order -
В 1С очистили внутренний реестр на стороне обмена
После этого обмен заработал.
Общие выводы
Обмен с 1С — мощный инструмент, но требует внимания:
-
при росте проекта он начинает тормозить из-за избыточности (всё дерево, все свойства)
-
устаревшие конфигурации могут не справляться с объёмом
-
кастомизации лучше выносить отдельно
Если проект выходит за рамки стандартного обмена — стоит рассматривать переход на брокеры: RabbitMQ, Kafka, Datareon. Там выше гибкость и скорость, но потребуется тщательная архитектура, чтобы избежать зацикливаний и потерь данных.
Если вы столкнулись с похожей проблемой — поможем разобраться. Мы работаем как со стандартным обменом, так и с интеграциями через очереди и API.