Как настроить детальный лог обмена и исправить отсутствие команды mode=import при выгрузке из 1С:ERP 2.4 на Bitrix

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При настройке интеграции между 1С:ERP Управление предприятием 2.4 и сайтом на платформе Bitrix часто возникает ситуация, когда стандартный Журнал регистрации 1С выдает крайне скудную информацию: «Запуск выгрузки», «Данные успешно выгружены» и «Завершена выгрузка». Однако на стороне сайта данные не обновляются, а администраторы сайта заявляют, что 1С не отправляет финальную команду mode=import, которая инициирует обработку переданных файлов. Рассмотрим подробно, как разобраться в этой ситуации, включить детальное логирование и выяснить причины «молчания» системы.

Разбираем протокол обмена CommerceML 2

Прежде всего, проанализируем, как работает стандартный протокол обмена. Процесс выгрузки каталога на сайт состоит из нескольких последовательных шагов (запросов):

  1. Авторизация (type=catalog&mode=checkauth): 1С проверяет учетные данные.
  2. Инициализация (type=catalog&mode=init): уточнение параметров (поддержка zip, ограничение по размеру файла).
  3. Передача файлов (type=catalog&mode=file): отправка XML-файлов и картинок на сервер.
  4. Импорт (type=catalog&mode=import): команда серверу начать обработку загруженных файлов.

Проблема, описанная в теме, заключается в том, что 1С завершает работу после шага mode=file, не отправляя финальный запрос mode=import. Выясним причину этого поведения.

Настройка детального логирования на стороне 1С

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

В современных версиях 1С:ERP (на базе БСП) в узле настройки обмена с сайтом часто присутствует возможность включить лог в текстовый файл. Если же штатный функционал не выводит нужные детали, рекомендуется временно модифицировать код или использовать внешние средства перехвата трафика.

Рассмотрим, как 1С обрабатывает ответы сервера. В типовом модуле обмена существует проверка: если сервер возвращает любое сообщение, отличное от success, 1С выводит это сообщение в лог. Однако, если сервер возвращает пустое тело ответа или некорректные заголовки (например, при ошибке 500 на стороне PHP-скрипта), 1С может интерпретировать это как «тихое» завершение процесса без детализации.

Почему 1С не отправляет команду mode=import?

Проанализируем ситуацию с точки зрения программного кода. Автор темы обнаружил, что в ERP 2.4 вызов функции выгрузки может содержать жестко заданные («захардкоженные») параметры. Рассмотрим пример функции, отвечающей за передачу данных:


Успешно = ВыгрузитьНаСайт(Параметры, МассивПодкаталогов, ОписаниеОшибки, Ложь, ТипСоединения);

Здесь четвертый параметр, установленный в Ложь, может отвечать за необходимость выполнения немедленного импорта. Однако основной причиной отсутствия команды mode=import чаще всего является невыполнение условий на предыдущем этапе. Разберем по шагам условия перехода к импорту:

  1. Ответ сервера: 1С отправит mode=import только в том случае, если на последний запрос mode=file сервер ответил строго строкой success. Любые лишние пробелы, PHP-нотисы или BOM-символы в ответе сайта ломают эту логику.
  2. Разбиение на части: Если файл выгрузки большой и передается частями, команда импорта посылается только после передачи последнего пакета данных. Если соединение обрывается в середине процесса, импорт не будет запрошен.
  3. Настройки узла обмена: Проверьте флаг «Выполнять полную загрузку данных» в настройках интеграции в 1С. Если логика обмена подразумевает только «подготовку файлов», команда импорта может быть проигнорирована программно.

Диагностика на стороне сайта (Bitrix)

Если со стороны 1С код кажется верным, проанализируем ситуацию на стороне Bitrix. Выясним причину, по которой скрипт 1c_exchange.php может не отвечать success или не видеть запрос.

Шаг 1. Включение лога в Bitrix. В настройках модуля «Интеграция с 1С» в административной панели сайта необходимо включить опцию «Записывать лог в файл». Лог будет сохраняться в папке /bitrix/modules/1c_exchange.log или аналогичной. В нем будет четко видно, пришел ли запрос с параметром mode=import.

Шаг 2. Проверка папки временных файлов. Проанализируем папку /upload/1c_catalog/ на сервере. Если файлы XML присутствуют, значит, этап mode=file прошел успешно. Если файлы отсутствуют — проблема в правах доступа или лимитах post_max_size в php.ini.

Шаг 3. Анализ ответа скрипта. Часто скрипт импорта на сайте падает по memory_limit или max_execution_time именно в момент попытки завершения загрузки файла. В этом случае 1С не получает заветное success и прекращает сессию.

Особенности работы с HTTPСоединение в ERP 2.4

В конфигурации ERP 2.4 для обмена используется объект HTTPСоединение. Важно помнить, что современные сайты часто принудительно используют HTTPS. Если в 1С не настроено защищенное соединение или не установлены корневые сертификаты, обмен может завершаться некорректно.

Посмотрим на пример того, как может выглядеть формирование параметров запроса в общем модуле, чтобы убедиться, что параметр mode формируется динамически:


ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("type", "catalog");
ПараметрыЗапроса.Вставить("mode", "import");
ПараметрыЗапроса.Вставить("filename", ИмяФайла);

Результат = ВыполнитьЗапросКСайти(ПараметрыЗапроса);

Если вы обнаружили, что в вашем коде параметр mode=import действительно игнорируется, рекомендуется проверить, не используется ли в системе расширение, переопределяющее логику обмена. В типовой ERP 2.4 логика обмена заложена в библиотеке БСП, и она достаточно отлажена, чтобы работать «из коробки» с большинством версий Bitrix.

Итоги и рекомендации

Подведем итог. Если вы столкнулись с отсутствием детальных логов и команды mode=import:

Совместный анализ логов 1С и Bitrix обычно позволяет решить проблему в течение часа, выявив скрытую ошибку PHP или некорректную настройку тайм-аутов на сервере.

← На главную