Обмен с 1С по протоколу CommerceML устроен просто по идее, но на практике ломается в десятках мест: от таймаута веб-сервера до дублей торговых предложений. Большинство «внезапных» ошибок обмена — следствие типовых причин, которые диагностируются по логу и HTTP-ответу за несколько минут. Ниже — карта самых частых сбоев интеграции 1С-Битрикс с 1С и проверенные способы их устранения.
Как правильно читать сбой обмена
Прежде чем чинить, нужно понять, на каком шаге и с чьей стороны произошёл сбой. Обмен CommerceML — это диалог: 1С шлёт HTTP-запросы вида ?type=catalog&mode=checkauth, mode=init, mode=file, mode=import, а сайт отвечает строками success, progress или failure. Любая строка, начинающаяся с failure, — это отказ Битрикса, и вторая строка ответа содержит текст ошибки.
- Ошибка в 1С («Не удалось подключиться», «Превышено время ожидания») — проблема на транспортном уровне: URL, авторизация, таймаут, размер файла.
- Ошибка на сайте (
failureв ответе) — не прошёл разбор XML, не хватило прав, упал импорт конкретной позиции.
Основной источник правды — журнал в Магазин → Настройки → Автозагрузка и системный лог обмена. Ошибки уровня PHP пишутся в /bitrix/php_interface/log/ (если включено логирование) и в лог веб-сервера.
Ошибки авторизации и подключения
Самый первый шаг обмена — mode=checkauth. Если он не проходит, дальше ничего не поедет. Типичные симптомы: в 1С «Ошибка авторизации на сайте», «401», «Сервер вернул неверный формат».
| Причина | Решение |
|---|---|
| Неверный логин или пароль в настройках обмена 1С | Проверьте учётку в 1С; пароль должен совпадать с пользователем Битрикса, у которого есть право на обмен |
URL указан без /bitrix/admin/1c_exchange.php | Точный адрес: http://site.ru/bitrix/admin/1c_exchange.php |
| Sessid/cookie не сохраняются между запросами | Проблема прокси или балансировщика, режущего cookie PHPSESSID / BITRIX_SM_ |
| Basic Auth на сервере перехватывает запрос | Добавьте исключение для 1c_exchange.php в конфиге веб-сервера |
Отдельная ловушка — двухфакторная аутентификация или капча для пользователя обмена. Технической учётке 1С их включать нельзя. Также убедитесь, что пользователь не заблокирован и входит в группу с правом на модуль sale/catalog.
Таймауты и обрыв больших выгрузок
Самая массовая проблема на живых каталогах: обмен стартует, но обрывается на середине с ошибкой failure или зависанием в 1С. Причина почти всегда — ограничения по времени и памяти PHP, которых не хватает на большой XML.
- Увеличьте лимиты для
1c_exchange.php:max_execution_time(300+ сек),memory_limit(512M+),post_max_sizeиupload_max_filesizeбольше размера выгружаемого файла. - В веб-сервере поднимите
fastcgi_read_timeout(nginx) илиProxyTimeout(Apache) — иначе шлюз оборвёт соединение раньше PHP. - Включите в 1С пошаговую выгрузку («Использовать пошаговую выгрузку данных») и уменьшите число элементов в одном пакете — тогда сайт отвечает
progressи обмен идёт частями, не упираясь в один длинный запрос.
max_execution_time в PHP не поможет, если nginx уже отдал 504.Дубли товаров, разделов и торговых предложений
После обмена в каталоге появляются копии одних и тех же товаров или разделов. Корень проблемы — идентификация по XML_ID. Битрикс сопоставляет элементы 1С и сайта по полю XML_ID (GUID из 1С). Если оно не совпало, создаётся новый элемент.
- Сменился GUID номенклатуры в 1С (перенос базы, свёртка, перезаливка) — сайт считает товары новыми. Лечится сопоставлением или синхронизацией XML_ID, но не «удалить всё и залить заново».
- Каталог создавался вручную на сайте до обмена — у товаров нет XML_ID, первый обмен их дублирует. Перед запуском обмена нужно связать существующие позиции.
- Дубли характеристик (SKU) — XML_ID торговых предложений строится как
GUID товара#GUID характеристики; при рассинхроне свойства-связкиCML2_LINKпредложения отвязываются от родителя.
Диагностика: откройте выгруженный import.xml и сверьте теги <Ид> с полем XML_ID в списке товаров (Каталог → Товары, вывести колонку «Внешний код»).
Слетают цены, остатки и торговые предложения
Товары на месте, но цены нулевые, остатки не обновились или предложения пропали. Разберём по слоям.
- Нулевые/пустые цены. Не настроено соответствие типов цен: имя типа цены в 1С («Розничная», «Оптовая») должно быть сопоставлено с типом цены каталога Битрикса. Проверьте
Магазин → Настройки → Типы цени блок сопоставления в профиле обмена. - Остатки приходят, но не отображаются. Не включён учёт количества (
Каталог → Настройки → «Использовать складской учёт») или остатки пишутся на склад, не привязанный к сайту. См. соответствие складов 1С и сайта. - Пропали торговые предложения. Частый случай — раздельная выгрузка:
offers.xmlпришёл раньшеimport.xmlили без него. Предложения без родительского товара не создаются. Всегда выгружайте каталог и предложения одним сеансом.
Проблемы с обменом заказами
Обмен заказами — вторая половина интеграции, и ломается она иначе, чем каталог. 1С запрашивает заказы через ?type=sale&mode=query и возвращает их через mode=success с изменёнными статусами.
- Заказы не выгружаются в 1С. Обычно не совпадают коды свойств заказа: способы оплаты, доставки, статусы на сайте и в 1С сопоставляются по внешним кодам. Проверьте настройку соответствия в обработке обмена 1С.
- Товар в заказе «не найден». Позиция заказа ссылается на XML_ID, которого нет в номенклатуре 1С (товар удалён или пришёл не тем GUID) — заказ загружается с ошибкой строки.
- Задваиваются заказы. При сбое подтверждения (
successне дошёл до 1С) заказ выгружается повторно. Идентификация идёт поID/ACCOUNT_NUMBER— следите, чтобы номер не менялся между обменами. - Статус с сайта не уходит в 1С и наоборот. Проверьте, что статусы заказа заведены и сопоставлены с обеих сторон, а обмен заказами включён в расписании отдельно от каталога.
Кодировка, битый XML и права на файлы
Реже, но болезненнее — ошибки уровня разбора файла. В логе они выглядят как failure с текстом об ошибке парсинга или молчаливо обрывают импорт.
- Ошибка кодировки. CommerceML идёт в
UTF-8(в заголовке<?xml version="1.0" encoding="UTF-8"?>). Если сайт наwindows-1251, конвертация выполняется на импорте — сбой здесь даёт «кракозябры» в названиях. Спецсимволы&,<в наименованиях 1С должны быть экранированы. - Недописанный файл. Оборванная выгрузка оставляет обрезанный XML — парсер падает на неожиданном конце. Обычно это следствие таймаута из раздела выше.
- Нет прав на временную папку. Битрикс складывает пакеты в
/upload/1c_catalog/(или/bitrix/tmp/). Если веб-сервер не может писать (права, переполнен диск, quota) —failureуже на шагеmode=file.
Итог
Почти все ошибки обмена с 1С укладываются в несколько категорий: авторизация и транспорт, таймауты на больших пакетах, рассинхрон идентификаторов (XML_ID/GUID), несопоставленные типы цен, складов и статусов, а также сбои разбора XML. Алгоритм диагностики всегда один: определить сторону сбоя по HTTP-ответу, прочитать вторую строку failure, свериться с выгруженным XML и логом автозагрузки.
Если обмен ломается регулярно, тормозит на пиковых выгрузках или требует ручных перезапусков — это уже вопрос стабильности бизнес-процесса, а не разовой правки. Мы настраиваем и сопровождаем обмен 1С-Битрикс с 1С «под ключ»: разбираем причину по логам, чиним сопоставления, оптимизируем пошаговую выгрузку и ставим мониторинг, чтобы сбой не оставался незамеченным до звонка клиента.
Частые вопросы
Где искать текст ошибки обмена?
Основные источники — журнал в разделе Магазин → Настройки → Автозагрузка и вторая строка HTTP-ответа сайта, которая идёт после слова failure. Ошибки уровня PHP смотрите в логе веб-сервера и в /bitrix/php_interface/log/ при включённом логировании.
Почему обмен обрывается на большом каталоге?
Как правило, не хватает лимитов PHP (время выполнения, память) или срабатывает таймаут веб-сервера либо прокси. Помогает увеличение лимитов для 1c_exchange.php и включение пошаговой выгрузки с меньшим числом элементов в пакете.
Почему после обмена появились дубли товаров?
Битрикс сопоставляет позиции 1С и сайта по полю XML_ID (GUID из 1С). Если GUID сменился в 1С или каталог создавался вручную без XML_ID, сайт считает товары новыми и создаёт копии. Нужно связать существующие позиции по внешнему коду.
Товары обновились, а цены нулевые — в чём дело?
Почти всегда не настроено соответствие типов цен: имя типа цены в 1С не сопоставлено с типом цены каталога Битрикса. Проверьте раздел Магазин → Настройки → Типы цен и блок сопоставления в профиле обмена.
Пропали торговые предложения после выгрузки, почему?
Чаще всего offers.xml пришёл без родительского import.xml или раньше него: предложения без товара-родителя не создаются. Выгружайте каталог и торговые предложения одним сеансом обмена.
1С не может авторизоваться на сайте, что проверить?
Проверьте логин, пароль и точный URL вида /bitrix/admin/1c_exchange.php, а также что у пользователя есть права на обмен. Частая причина — включённая двухфакторная аутентификация или Basic Auth сервера, перехватывающие запрос обмена.
Заказы не выгружаются в 1С — с чего начать?
Проверьте соответствие внешних кодов способов оплаты, доставки и статусов заказа между сайтом и 1С. Также убедитесь, что позиции заказа ссылаются на существующие в 1С XML_ID номенклатуры и что обмен заказами включён в расписании.
Обмен работал годами и вдруг сломался без изменений — почему?
Частые причины — переполнение диска (файл пакета некуда записать), исчерпание прав на временную папку или смена GUID из-за операций с базой 1С. Начните с проверки свободного места и логов последнего успешного и первого неудачного обмена.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.