Когда обмен «встал» или товары приходят не так, первое, что нужно открыть, — это логи и сами XML-файлы выгрузки. Они точно показывают, на каком шаге и на какой позиции всё пошло не так, без гаданий и перезапусков вслепую.
Как устроена сессия обмена
Обмен CommerceML работает как диалог между 1С и точкой входа /bitrix/admin/1c_exchange.php. 1С последовательно шлёт запросы с параметром mode, а сайт отвечает строками success, progress или failure. Понимание этих шагов — половина диагностики.
mode=checkauth— авторизация, сайт отдаёт cookie сессии;mode=init— согласование zip-сжатия и размера части файла;mode=file— заливкаimport.xml,offers.xmlи архива картинок в/upload/1c_catalog/;mode=import— собственно разбор и запись данных в каталог;mode=query/mode=success— выгрузка заказов и подтверждение.
Любой ответ failure со строкой ошибки под ним — это и есть точка, с которой начинается разбор.
Где лежат логи и файлы выгрузки
Битрикс хранит артефакты обмена в нескольких предсказуемых местах. Прежде чем что-то менять, стоит просто открыть эти папки по FTP или в файловом менеджере админки.
| Путь | Что внутри |
|---|---|
/upload/1c_catalog/ | Принятые XML каталога и торговых предложений, архивы картинок |
/upload/1c_exchange/ | Файлы обмена заказами (при отдельной настройке) |
/bitrix/tmp/ и /upload/tmp/ | Временные части файлов при пошаговой загрузке |
Сами XML-файлы (import.xml, offers.xml, prices.xml, rests.xml, orders.xml) — главная ценность: это ровно то, что 1С реально отдала сайту, а не то, что должна была отдать.
Как включить подробное логирование
По умолчанию обмен пишет минимум. Чтобы получить пошаговый протокол, включите ведение файла лога в настройках модулей. В админке это Настройки → Настройки продукта → Настройки модулей → Торговый каталог (и аналогично «Интернет-магазин» для заказов) — параметр пути к файлу лога обмена.
После этого рядом с файлами выгрузки появляется текстовый лог (обычно вида __1c_exchange.log), куда пишутся таймстампы шагов, число обработанных элементов и тексты исключений. Дополнительно фатальные ошибки PHP полезно ловить через журнал событий Битрикса (b_event_log) и лог веб-сервера.
Как читать протокол сессии
Читать лог нужно снизу вверх от последней ошибки. Типичные маркеры и их смысл:
failureсразу послеcheckauth— не сходятся логин/пароль обмена или сессия рвётся из-за cookie и редиректов;- «Превышен интервал ожидания» / таймаут на
import— слишком большой файл или тяжёлый разбор, обмен не укладывается в лимит одного шага; - «Ошибка при создании файла» на
file— нет прав на запись в/upload/1c_catalog/или переполнен диск; - «Недопустимый элемент» / ошибка парсинга — битый или обрезанный XML.
Обратите внимание на progress: если 1С шлёт import много раз подряд, значит каталог обрабатывается порциями — это нормально, а не зависание. Проблема есть только тогда, когда цикл не заканчивается success.
Разбор структуры CommerceML
Когда лог указал на конкретный товар, открываем XML и смотрим его глазами. Структура CommerceML устроена так, что почти любую проблему видно по ключевым узлам:
<Классификатор>— группы, свойства и справочники значений; здесь ищут пропавшие разделы и свойства;<Товары> → <Товар>—<Ид>(GUID-ключ соответствия),<Наименование>,<Группы>,<ЗначенияСвойств>;<ПредложенияПоказать>вoffers.xml— цены, остатки и характеристики торговых предложений.
Главный ключ — <Ид>: именно по нему Битрикс сопоставляет запись с уже существующим товаром через таблицу b_xml_tree. Если GUID в выгрузке изменился, сайт создаст дубль вместо обновления — это одна из самых частых причин «размножения» товаров.
windows-1251 или utf-8 ровно так, как заявлено в XML-декларации первой строки. Лишний BOM или неверная кодировка ломают парсер ещё до чтения товаров.Чем валидировать и воспроизводить
Разбирать многомегабайтный XML в браузере бесполезно. Соберите небольшой набор инструментов:
- Валидатор well-formed XML (любой линтер или
xmllint --noout offers.xml) — сразу отсекает обрезанные и битые файлы; - Редактор, тянущий большие файлы (Notepad++, VS Code) с поиском по
<Ид>проблемного товара; - Ручной прогон разбора: положить XML в
/upload/1c_catalog/и дёрнуть1c_exchange.php?mode=import&type=catalog&filename=offers.xmlс параметрами авторизации — обмен выполнится без 1С, а ошибки лягут в лог.
Такой прогон бесценен: он воспроизводит проблему на конкретном файле столько раз, сколько нужно, не дожидаясь регламентного запуска из 1С.
Частые причины по логам
За годы поддержки набор диагнозов повторяется. Если знаешь симптом в логе — знаешь и направление:
- Товары не обновляются — сменились GUID (
<Ид>) в 1С, разошлось соответствие вb_xml_tree; - Обмен обрывается на середине — упирается в
max_execution_time,memory_limitили размер части файла из шагаinit; - Пропали цены или остатки — не совпадают типы цен и склады между
offers.xmlи настройками обмена на сайте; - Дубли свойств — в разных выгрузках у свойства разные
<Ид>; - failure на авторизации — расходятся учётные данные или мешает внешняя защита/редиректы на
1c_exchange.php.
Итог
Логи и XML-файлы превращают диагностику обмена из угадывания в инженерную работу: протокол сессии показывает шаг сбоя, а сама выгрузка — конкретный товар и его GUID. Достаточно включить подробное логирование, читать лог снизу вверх и уметь воспроизвести разбор на отдельном файле, чтобы закрывать большинство инцидентов за один заход.
Если обмен падает регулярно, а править приходится на боевом каталоге, мы поможем настроить логирование, разобрать выгрузку и убрать корневую причину — от соответствия GUID до лимитов сервера — в рамках интеграции и сопровождения 1С с Битрикс.
Частые вопросы
Где включается лог обмена в Битрикс?
В настройках модулей «Торговый каталог» и «Интернет-магазин» есть параметр пути к файлу лога обмена. После его указания рядом с XML-файлами появляется текстовый лог со всеми шагами сессии.
Почему товары приходят как дубли, а не обновляются?
Чаще всего у товара в 1С сменился GUID в узле <Ид>, и Битрикс не находит соответствие в таблице b_xml_tree. Он воспринимает запись как новую и создаёт дубль вместо обновления существующей.
Как посмотреть, что реально выгрузила 1С?
Откройте файлы import.xml и offers.xml в папке /upload/1c_catalog/. Это точный снимок того, что сайт получил от 1С, — по нему видно, есть ли в выгрузке нужный товар, цена и остаток.
Обмен обрывается на середине — что смотреть?
Обычно это таймаут одного шага import: сайт не успевает разобрать большой файл в пределах max_execution_time или memory_limit. В логе это видно как повтор шага без финального success. Помогает уменьшение размера части файла и оптимизация выгрузки.
Можно ли запустить разбор XML без 1С?
Да. Положите файл в /upload/1c_catalog/ и вызовите 1c_exchange.php с mode=import и именем файла, передав данные авторизации. Обмен разберёт файл, а все ошибки лягут в лог — удобно для воспроизведения проблемы.
Из-за чего бывает ошибка авторизации (failure на checkauth)?
Расходятся логин или пароль обмена, либо сессия рвётся из-за cookie, редиректов или внешней защиты на 1c_exchange.php. Проверьте учётные данные в 1С и настройках сайта и доступность точки входа напрямую.
Что делать, если XML не парсится?
Прогоните файл через валидатор (например, xmllint) — он покажет место обрыва. Частые причины: файл обрезан из-за сбоя выгрузки, неверная кодировка или лишний BOM в начале, не совпадающий с XML-декларацией.
Насколько безопасно держать лог включённым постоянно?
Не рекомендуется. Лог быстро растёт, содержит артикулы и цены и нагружает диск. Включайте детальное логирование на время диагностики, а после устранения проблемы отключайте и очищайте файл.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.