Логирование xml выгружаемых в 1с заказов

Модуль расширенного управления меню для битрикс

Июнь 23, 2026

Теги: Магазин

Заказы из битрикс в 1с выгружаются через папку /upload/1c_exchange, при этом папка очищается после процесса выгрузки. В отличие от выгрузки каталога из 1с в битрикс, нет какой-то константы наподобие BX_CATALOG_IMPORT_1C_PRESERVE, которая позволяла бы сохранять копии папки /upload/1c_exchange.

Данный метод не претендует на полную точность, т.к. название файла и прочее, что находится в папке  /upload/1c_exchange не сохраняется, но он использует тот же метод создания xml, что и компонент "bitrix:sale.export.1c", используемый при выгрузке заказов.

Константы задают папку для выгрузки заказов от корня сайта и максимальное количество заказов для сохранения, файлы сверх указанного количества автоматически удаляются.


<?php

namespace Partner;

\Bitrix\Main\EventManager::getInstance()->addEventHandler
    
'sale'
    
'OnSaleOrderSaved'
    
'Partner\OrderXmlLog::onSaleOrderSaved'
);

class 
OrderXmlLog
{    
    const 
orderXmlLogFolder '1c_logs';
    const 
orderXmlLogMax 10;

    public static function 
onSaleOrderSaved(\Bitrix\Main\Event $event)
    {
        if(!
$event->getParameter("IS_NEW"))
            return;
        if(!static::
orderXmlLogFolder || !is_dir($_SERVER['DOCUMENT_ROOT'].'/'.static::orderXmlLogFolder))
            return;
        
$order $event->getParameter("ENTITY");
        
ob_start();
        
\CSaleExport::ExportOrders2Xml(array('ID' => $order->getId()));
        
$xml ob_get_contents();
        
ob_end_clean();
        
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/'.static::orderXmlLogFolder.'/'.$order->getId().'.xml',$xml);
        static::
clearOldLogs();
    }

    
    public static function 
clearOldLogs()
    {
        if(!static::
orderXmlLogFolder || !is_dir($_SERVER['DOCUMENT_ROOT'].'/'.static::orderXmlLogFolder))
            return;
        
$files scandir($_SERVER['DOCUMENT_ROOT'].'/'.static::orderXmlLogFolder);
        
$fileList = [];
        foreach(
$files as $file)
        {
            if(
in_array($file,['.','..','.htaccess']))
                continue;
            
$fileList[pathinfo($file,PATHINFO_FILENAME)] = $file;
        }
        
krsort($fileList);
        
$i=static::orderXmlLogMax;
        foreach(
$fileList as $file)
        {
            if(
$i>0)
            {
                
$i--;
                continue;
            }
            
unlink($_SERVER['DOCUMENT_ROOT'].'/'.static::orderXmlLogFolder.'/'.$file);
        }
        
    }
}

Содержимое файла .htaccess в папке логов, чтобы скрыть папку от публичного доступа:


Deny from all

Интеграция с iiko и rkeeper, готовый сайт ресторана

← Переход к списку