Часто возникает задача просмотра xml файла заказов, которые отдает Битрикс при обмене с 1с.
Физически компонент обмена нигде не записывает эти файлы, а отдает сразу в консоль оператором echo
, поэтому на стороне сайта это никак не отследить.
Для обмена с товарным каталогом есть возможность логгирования установкой константы BX_CATALOG_IMPORT_1C_PRESERVE
.
define("BX_CATALOG_IMPORT_1C_PRESERVE", true);
При этом в папке /upload/ (если точнее в папке, которая указана в настройках главного модуля «Папка по умолчанию для загрузки файлов»)
будут создаваться папки с названием 1c_catalog0, 1c_catalog1 и т.д. с файлами обмена.
Т.к. файлы обмена могут быть достаточно большими, то нужно использовать это с осторожностью и только в целях диагностики, т.к. можно забить все место на диске.
Для обмена заказами такой трюк не проходит и поэтому нужно править код компонента bitrix:sale.export.1c.
Для этого в файле компонента /bitrix/components/bitrix/sale.export.1c/component.php
нужно вставить перед
echo $contents;
(примерно 815 строка, сделать поиск по тексту) примерно следующий код
if ($_GET["mode"] == "query" || $_POST["mode"] == "query") { $logFile = $_SERVER["DOCUMENT_ROOT"] . '/logs/1c_exchange/sale-query-' . date('Y-m-d-H-i') . '.xml'; file_put_contents($logFile, $contents . "\n", FILE_APPEND); file_put_contents($logFile, '\n", FILE_APPEND); }
Данные, которые необходимо залоггировать, при необходимости можно указать свои.
Папку логов /logs/1c_exchange/ нужно создать самостоятельно. В файлы логов будет записываться содержимое файлов обмена, а также фильтр по заказам в xml комментарии.
Надо помнить, что мы меняем компонент, который входит в ядро Битрикса. Изменения, которые мы внесли, могут быть перезаписаны при обновлении Битрикса.
Файлы обменов заказами как правильно небольшие и не смогут быстро забить место на диске. Но обмен может проходить достаточно интенсивно, например каждую минуту, поэтому таких файлом может быть много. Лучше не оставлять функционал логгирования надолго и пользоваться только в период диагностики.