Пока каталог маленький, цены и остатки правят руками. Но стоит бизнесу вырасти — и ручное ведение превращается в ад: остатки на сайте не совпадают с реальными, цены отстают, заказы переносят в учёт вручную с ошибками. Единственное системное решение — связать сайт с 1С обменом, чтобы данные ходили автоматически. Стандартный путь для этого в 1С-Битрикс — обмен по CommerceML.
В этой статье разберём настройку обмена с 1С по CommerceML с нуля: как он устроен, что подготовить в 1С, как настроить приём на сайте, чем связываются товары, как выгружать заказы и почему обмен обрывается на больших каталогах. Настройку обмена и импорта товаров под ключ мы делаем в рамках услуги импорта товаров из Excel, CSV, XML, YML и CommerceML.
Коротко
- CommerceML — штатный XML-формат обмена между 1С и Битрикс: каталог и остатки из 1С, заказы обратно в 1С.
- Товары связываются по идентификатору из 1С (GUID в XML_ID) — его стабильность критична, иначе плодятся дубли.
- Обмен идёт сессиями порциями; на больших каталогах его рвут таймауты и нехватка памяти.
- Настраивают и тестируют на копии сайта, с резервной копией каталога перед первым боевым обменом.
Что такое обмен по CommerceML
CommerceML (Commerce Markup Language, «Коммерческая информация») — стандартный XML-формат, разработанный фирмой 1С для обмена коммерческими данными между учётной системой и сайтом. По нему передаются каталог товаров, цены, остатки, свойства и заказы.
Главное достоинство формата — он поддерживается 1С-Битрикс из коробки. В редакциях с торговым каталогом обмен встроен, а типовые конфигурации 1С (Управление торговлей, Розница и другие) умеют выгружать данные в этом формате. Поэтому CommerceML — самый надёжный и распространённый способ связать магазин с 1С без сторонних модулей.
Как устроен обмен: направления и сессии
Обмен двусторонний и идёт по инициативе 1С, которая обращается к специальному скрипту на сайте. Два направления:
| Направление | Что передаётся | Частота |
|---|---|---|
| 1С → сайт (каталог) | Товары, свойства, категории, изображения | Реже, полная выгрузка |
| 1С → сайт (цены/остатки) | Цены по типам, остатки по складам | Часто, инкрементально |
| Сайт → 1С (заказы) | Новые и изменённые заказы | Регулярно |
Обмен идёт сессиями: 1С авторизуется на сайте, затем передаёт данные порциями (шагами), а сайт их принимает и обрабатывает. Разбиение на шаги нужно как раз для того, чтобы не упереться в лимиты времени и памяти на больших объёмах. Понимание сессионной природы обмена — ключ к диагностике его сбоев.
Подготовка данных в 1С
Качество обмена на 80% определяется порядком в 1С. Прежде чем настраивать выгрузку, данные в учётной системе приводят в порядок:
- Чистая номенклатура. Без дублей карточек, с корректными наименованиями и группами.
- Заведённые характеристики. Для товаров с вариантами — корректные характеристики (размеры, цвета) как основа торговых предложений.
- Типы цен. Настроены типы цен, которые пойдут на сайт (розница, опт, дилер).
- Остатки по складам. Определено, остатки каких складов выгружаются на сайт.
Мусор в 1С неизбежно приедет на сайт — обмен не «почистит» данные за вас. Поэтому наведение порядка в номенклатуре — обязательный первый шаг, а не то, что делают потом.
Настройка узла обмена в 1С
На стороне 1С обмен настраивается через узел обмена с сайтом (в типовых конфигурациях — «Обмен с сайтом» или аналогичный раздел). Базовые параметры:
- Адрес сайта. URL скрипта обмена на сайте, к которому обращается 1С.
- Логин и пароль. Учётные данные пользователя сайта с правами на обмен.
- Состав выгрузки. Какие группы номенклатуры, типы цен и склады выгружаются.
- Изображения и свойства. Выгружать ли картинки, дополнительные реквизиты и характеристики.
- Расписание. Регламентное задание, запускающее выгрузку автоматически.
После настройки узла 1С сможет по расписанию или вручную инициировать сеанс обмена. Важно, чтобы у пользователя, под которым идёт обмен, на сайте были достаточные права — нехватка прав частая причина сбоев на старте.
Настройка приёма на стороне Битрикс
На сайте обмен принимает штатный механизм торгового каталога. Ключевые настройки:
- Инфоблок каталога. Указывается, в какой инфоблок загружаются товары и в какой — торговые предложения.
- Права на обмен. Пользователь, под которым 1С заходит на сайт, имеет права на изменение каталога.
- Размер шага. Сколько элементов обрабатывается за один шаг сессии — балансируется под сервер.
- Логирование. Включается протокол обмена для диагностики.
При проектировании нового магазина структуру инфоблоков сразу закладывают под обмен — тогда товары, свойства и предложения ложатся ровно, без ручной доводки. Для чтения и обработки загруженных данных в кастомном коде удобно использовать D7 ORM.
Ключ связи и стабильность идентификаторов
Это фундамент, на котором держится весь обмен. Товар на сайте и в 1С связываются по идентификатору из 1С — обычно GUID номенклатуры, который на сайте хранится в поле XML_ID элемента инфоблока.
Именно по этому ключу обмен понимает: товар в новой выгрузке — это тот же товар, что уже есть на сайте, значит его надо обновить, а не создать заново. Если идентификаторы стабильны, обмен работает как часы. Если «плывут» — обмен начинает плодить дубли товаров, и каталог превращается в свалку.
Сопоставление свойств и предложений
Самый кропотливый этап — сопоставление свойств. В 1С у товара свои реквизиты и характеристики, в Битрикс — свои свойства инфоблока. Их нужно связать, чтобы данные легли в правильные поля.
Особое внимание — торговым предложениям (SKU). Товар с вариантами (размеры, цвета, фасовки) выгружается из 1С как номенклатура с характеристиками, а на сайте становится товаром-родителем со связанными торговыми предложениями. Чтобы вариации не задваивались и не терялись, характеристики в 1С должны быть заведены корректно и стабильно. Это тот случай, когда порядок в 1С напрямую определяет качество каталога на сайте.
Выгрузка заказов обратно в 1С
Обмен не заканчивается загрузкой каталога — сайт отдаёт заказы обратно. Это замыкает цикл: клиент оформил заказ на сайте, заказ уехал в 1С, менеджер работает с ним в привычной учётной системе.
Что важно при настройке выгрузки заказов:
- Согласование статусов. Статусы заказа и оплаты на сайте и в 1С сопоставлены между собой.
- Состав данных. Определено, какие поля заказа передаются (покупатель, доставка, оплата, позиции).
- Двусторонняя синхронизация. Изменение заказа в 1С (например, отгрузка) может отражаться на сайте.
- Идемпотентность. Повторная выгрузка не создаёт дубли заказов.
Расписание и автоматизация
Ручной запуск обмена — только для отладки. В работе обмен идёт по расписанию, и разные данные обновляются с разной частотой:
| Данные | Частота | Почему так |
|---|---|---|
| Остатки, цены | Каждые 15–60 минут | Критичны для актуальности витрины |
| Заказы | Регулярно, часто | Менеджеру нужны свежие заказы |
| Полный каталог | Раз в сутки, ночью | Тяжёлая операция, не в часы пик |
Автоматизируют обмен регламентными заданиями в 1С и агентами или cron на стороне сайта. Тяжёлые полные выгрузки ставят на ночь, чтобы не нагружать витрину днём. Стабильность расписания зависит и от инфраструктуры — правильно настроенная среда на BitrixVM помогает обмену не спотыкаться.
Таймауты и большие каталоги
Самая частая боль на серьёзных проектах — обмен обрывается на большом каталоге. Причины почти всегда инфраструктурные:
- Таймаут PHP. Скрипт обмена упирается в лимит времени выполнения — увеличивают лимит для процесса обмена.
- Нехватка памяти. Порция данных не помещается в отведённую память — поднимают лимит или уменьшают шаг.
- Слишком большой шаг. За один шаг обрабатывается слишком много элементов — уменьшают размер шага.
- Медленная база. Обновление тысяч товаров упирается в производительность БД — оптимизируют запросы и индексы.
Диагностируют обрывы по логам обмена и логам сервера. Как читать эти логи, мы разбирали в статье про безопасность и обработку внешних запросов в Битрикс — тот же подход применим и к отладке обмена.
Частые ошибки обмена
- Нестабильные идентификаторы. GUID из 1С меняются, обмен плодит дубли товаров.
- Мусор в 1С. Дубли и кривые характеристики в учёте приезжают на сайт как есть.
- Настройка на боевом. Отладку ведут на проде и портят живой каталог.
- Слишком большой шаг. Обмен обрывается по таймауту на первой же полной выгрузке.
- Нет резервной копии. Первый боевой обмень ломает каталог, а откатиться не к чему.
- Рассинхрон статусов. Статусы заказов на сайте и в 1С не согласованы, менеджер видит разное.
Чек-лист настройки
- Данные в 1С в порядке. Номенклатура без дублей, характеристики, типы цен и склады настроены.
- Узел обмена в 1С. Адрес сайта, учётные данные, состав выгрузки и расписание заданы.
- Приём на сайте. Инфоблоки, права пользователя обмена, размер шага и логирование настроены.
- Ключ связи стабилен. GUID из 1С не меняются, товары обновляются, а не задваиваются.
- Свойства сопоставлены. Реквизиты и характеристики легли в нужные свойства и предложения.
- Заказы выгружаются. Заказы уходят в 1С, статусы согласованы, дублей нет.
- Расписание работает. Остатки часто, каталог ночью, автоматически.
- Протестировано на копии. Всё проверено на тесте, перед боем сделан бэкап каталога.
Вывод
Обмен с 1С по CommerceML — это то, что превращает сайт из витрины в часть работающего бизнеса: остатки актуальны, цены свежие, заказы сами уходят в учёт. Формат штатный и надёжный, но настройка требует внимания к деталям — порядку в 1С, стабильности идентификаторов, сопоставлению свойств и лимитам сервера на больших каталогах.
Главные правила: сначала порядок в 1С, стабильные GUID как основа связи, настройка и тесты на копии сайта и резервная копия перед первым боевым обменом. Соблюдая их, вы получите обмен, который работает годами без сюрпризов. А чтобы настроить его с нуля без проб и ошибок, начните с импорта товаров и обмена с 1С под ключ.