1С Битрикс · 7 мин чтения

Ошибки обмена 1С и Битрикс: где смотреть логи и как читать протокол

Обмен между 1С и Битрикс валится обычно в самый неподходящий момент: заказы копятся в очереди, цены не обновляются, склад показывает остатки недельной давности. Ошибки обмена 1С и Битрикс редко видны на витрине сайта сразу, они прячутся в логах CommerceML, в журнале регистрации 1С и в системном логе PHP на хостинге. За несколько лет я разбирал десятки таких обменов на разных редакциях Битрикса и версиях 1С:Управление торговлей, и картина почти всегда одна: разработчик тратит день на угадывание причины там, где 10 минут в правильном логе дают точный ответ.

Как устроен обмен 1С и Битрикс и что в нём чаще всего рвётся

Стандартный обмен работает по протоколу CommerceML поверх HTTP. 1С отправляет запросы на файл /bitrix/admin/1c_exchange.php, а модуль «1С-Битрикс: Обмен данными» на стороне сайта принимает их и обрабатывает пошагово: авторизация (checkauth), инициализация сессии (init), приём файлов (file), импорт данных (import), опрос статуса длительной операции (query) и завершение сеанса (complete). Для заказов добавляется отдельная ветка обмена: выгрузка заказов из Битрикса в 1С и обратная загрузка статусов.

На практике ломается обмен в трёх местах. Первое: лимиты хостинга, max_execution_time и memory_limit в PHP, когда каталог из 20-30 тысяч товаров с картинками не успевает импортироваться за отведённое время. Второе: смена пароля технического пользователя или прав доступа к разделу «1С-Битрикс: Обмен данными» в админке, из-за чего checkauth падает с 403. Третье: кодировка и структура XML, когда после обновления конфигурации 1С в файлах появляются поля, которых не ждёт обработчик на сайте, или наоборот пропадают обязательные теги.

Где смотреть логи обмена в административной панели Битрикс

Первым делом я включаю подробное логирование в самом модуле: раздел «Настройки» → «Обмен данными с 1С» → «Обмен CommerceML», там есть чекбокс детального протоколирования обмена. После включения все запросы и ответы пишутся в файлы внутри /bitrix/tmp/1c_exchange/ или /upload/1c_exchange/ в зависимости от версии модуля. В имени файла обычно есть дата и идентификатор сессии обмена, так что при повторяющейся ошибке проще всего сравнить два последних лога построчно.

Второй источник, который часто игнорируют, это журнал событий Битрикса: рабочий стол администратора → «Журнал событий» с фильтром по модулям iblock, sale и main. Туда попадают ошибки на уровне PHP-исключений, которые не всегда доходят до лога самого обмена: превышение памяти, отсутствие прав на запись во временную папку, повреждённый XML.

tail -f /home/site/www/bitrix/tmp/1c_exchange/*.log | grep -i error

Этой командой я обычно слежу за обменом в реальном времени, когда клиент запускает синхронизацию каталога вручную и просит проверить, что на этот раз всё прошло без сбоев.

Журнал регистрации и технологический журнал на стороне 1С

Со стороны 1С логика обратная: сначала смотрю «Журнал регистрации» в конфигураторе, фильтр по подсистеме «Обмен данными» и уровню «Ошибка». Там видно, на каком шаге обмен остановился: не прошла авторизация, не найден узел плана обмена, не получилось отправить файл целиком. Часто в тексте ошибки прямо указан HTTP-код ответа сайта, и это экономит массу времени.

Если журнала регистрации недостаточно, включаю технологический журнал через logcfg.xml в каталоге conf информационной базы. Он куда подробнее и показывает время каждого HTTP-запроса, таймауты и содержимое ответов сервера целиком. На один такой обмен я обычно даю поработать 10-15 минут с включённым логом, потом отключаю: технологический журнал за час способен накопить несколько гигабайт данных на активной базе.

Отдельно проверяю сертификат и протокол на стороне 1С, если обмен идёт по https. Ошибка «не удалось установить защищённое соединение» почти всегда означает просроченный SSL-сертификат на сайте или расхождение версий TLS между сервером 1С и хостингом.

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Как читать протокол обмена CommerceML: структура запросов и коды ответов

Каждый запрос в обмене возвращает текстовый ответ, начинающийся со слова success, progress или failure, и это первое, на что стоит смотреть в логе, даже не разбирая XML целиком.

POST /bitrix/admin/1c_exchange.php?type=catalog&mode=import HTTP/1.1
Ответ сервера: failure
Ошибка: Не удалось разобрать xml-файл. Возможно поврежден файл или неверная структура.

По коду HTTP-ответа можно сразу отсеять типовые причины. 200 с телом failure значит, что сайт принял запрос, но обработчик споткнулся на данных, и дальше нужно смотреть текст ошибки и сам XML-файл. 413 Request Entity Too Large означает, что файл превысил лимит client_max_body_size на nginx или upload_max_filesize в PHP. 500 обычно указывает на исключение в коде модуля или в обработчиках событий, которые кто-то повесил на импорт каталога. 502 и 504 почти всегда о том, что обмен упёрся в таймаут веб-сервера при большом объёме данных, а не в саму логику протокола.

Отдельно советую смотреть на порядок шагов в логе. Если после checkauth сразу идёт повторный checkauth без init, значит сессия обмена не сохраняется между запросами, и дело в куках или в параметре PHPSESSID, который теряется на балансировщике или CDN перед сайтом.

Частые ошибки обмена 1С и Битрикс и их причины

Ошибка в логе Вероятная причина Что проверить в первую очередь
Ошибка авторизации (401/403 на checkauth) Неверный логин или пароль технического пользователя, заблокирован IP Учётные данные в настройках обмена 1С, список разрешённых IP на хостинге
Timeout на шаге import Каталог слишком большой для лимита выполнения скрипта max_execution_time, включение обмена по частям (small business режим)
Не удалось разобрать XML Файл обрезан из-за таймаута или конфликт кодировок Целостность файла на диске, кодировка UTF‑8 без BOM
Заказы не подтягиваются в 1С Не настроен узел плана обмена для заказов или отключена выгрузка Настройки узла в 1С, права пользователя на чтение раздела заказов
502/504 Gateway Timeout Веб-сервер обрывает долгий запрос раньше, чем завершится импорт Таймауты nginx/Apache, лимиты PHP-FPM

По моей практике, где-то треть обращений с «обмен не работает» на деле оказывается таймаутом хостинга, а не проблемой самой конфигурации 1С или Битрикса. Если проект стоит на дешёвом shared-хостинге, а каталог перевалил за 15-20 тысяч позиций, обмен физически не укладывается в стандартные лимиты, и тут либо переносить сайт на VPS с настраиваемым PHP-FPM, либо переписывать обмен под порционную выгрузку.

Как настроить мониторинг ошибок обмена, чтобы не проверять логи вручную

Проверять логи руками каждый день неудобно, особенно если клиенту важно знать о сбое обмена сразу, а не через день после того, как менеджер заметил старые остатки на сайте. Для таких задач я обычно ставлю сценарий в n8n: воркфлоу раз в 10-15 минут читает последний файл лога обмена по SSH или через простой HTTP-эндпоинт со стороны сайта, ищет строки с failure или error и при находке отправляет сообщение в Telegram-канал администратора. Для самого бота использую aiogram, если нужна не просто рассылка, а ещё и возможность из чата запросить статус последнего обмена или вручную дёрнуть повторную синхронизацию.

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

Чтобы сайт работал без сбоев

Техподдержка

от 15 000 ₽/мес

Подробнее →

Частые вопросы

Почему обмен 1С и Битрикс останавливается всегда на одном и том же файле каталога?

Чаще всего дело в конкретной карточке товара внутри этого файла: например, в характеристике с недопустимым символом в значении или в слишком длинном названии, которое превышает лимит поля в инфоблоке. Стоит открыть файл в текстовом редакторе, найти по номеру позиции элемент, на котором обрывается импорт, и проверить его поля вручную, обычно причина находится за 5-10 минут.

Как понять, что обмен зависает на стороне 1С, а не на стороне сайта?

Если в журнале регистрации 1С запрос числится как отправленный, а в логах Битрикса записи о его получении вообще нет, проблема на сети или на файрволе хостинга. Если наоборот, лог Битрикса показывает получение и обработку, а 1С сообщает об ошибке таймаута ожидания ответа, дело в том, что сервер сайта не успел прислать ответ за отведённое в 1С время ожидания, и его стоит увеличить в настройках узла обмена.

Можно ли ускорить обмен большими каталогами без переписывания конфигурации?

Частично да: включить обмен по частям (режим для малого бизнеса с разбивкой на файлы меньшего размера), увеличить max_execution_time и memory_limit на хостинге, отключить лишние обработчики событий на импорт, если их вешали сторонние модули. Но если каталог продолжает расти, рано или поздно упираешься в лимиты shared-хостинга, и дальше без перехода на VPS с гибкими настройками PHP-FPM не обойтись.

Что делать, если лог обмена вообще пустой и в нём нет ни одной записи об ошибке?

Это обычно значит, что запросы от 1С не долетают до обработчика на сайте: либо отключено детальное логирование в настройках модуля, либо запросы блокируются на уровне firewall или CDN перед сайтом, либо неверно указан адрес обмена в самой 1С. Проверяю в такой последовательности: включено ли логирование в настройках обмена, приходят ли вообще запросы на сервер по логам nginx или Apache, и только потом разбираю содержимое самого протокола.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Самозанятый Калинкин Н. А. · работаю с физлицами и юрлицами

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно