Как передать артикул товара при выгрузке заказа из 1С-Битрикс в 1С:Управление торговлей?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При настройке обмена заказами между сайтом на 1С-Битрикс и типовой конфигурацией 1С:Управление торговлей 11.4 часто возникает необходимость передачи дополнительных данных, таких как артикул товара. Многие начинающие разработчики совершают ошибку, пытаясь найти «компонент», отвечающий за выгрузку заказа, и редактировать файлы ядра. Давайте разберем, как правильно реализовать эту задачу, не рискуя работоспособностью вашего интернет-магазина.

Почему не стоит искать компоненты в папке /bitrix/components/

Первое, что важно усвоить: обмен заказами и обмен каталогом — это два принципиально разных процесса в Битриксе. Компоненты, которые вы видите в публичной части сайта (например, bitrix:catalog.import.1c), отвечают за импорт каталога на сайт. Обмен заказами, в свою очередь, полностью управляется модулем sale (Интернет-магазин).

Файл /bitrix/admin/1c_exchange.php является лишь входной точкой (контроллером). Вся логика формирования XML-пакета, который отправляется в 1С, скрыта внутри модуля. Любые изменения, внесенные вами в файлы внутри папки /bitrix/modules/, будут полностью удалены при первом же автоматическом обновлении системы. Поэтому мы будем использовать только официально рекомендованный способ — механизм событий.

Анализ структуры обмена

Перед внесением изменений, давайте проанализируем, что именно уходит из Битрикса. Обмен происходит по стандарту CommerceML. Чтобы понять, передается ли артикул, нам нужно перехватить XML-ответ.

  1. Инициируйте обмен заказом из 1С.
  2. Перехватите ответ сервера (можно использовать логирование HTTP-запросов или временный перехват вывода в PHP).
  3. Проверьте структуру полученного файла. Если в тегах товара отсутствует информация об артикуле, значит, стандартный механизм модуля sale его не формирует.

Решение через обработчики событий (Events)

Самый безопасный и правильный способ «добавить» артикул в выгрузку — использовать событие OnSaleOrderBeforeExport. Это событие позволяет перехватить XML-объект заказа в момент его формирования и добавить в него необходимые данные до того, как они будут отправлены в 1С.

Вам необходимо создать (или отредактировать, если уже есть) файл /bitrix/php_interface/init.php. В нем мы пропишем обработчик:


// Пример логики обработчика события
AddEventHandler('sale', 'OnSaleOrderBeforeExport', 'MyOnSaleOrderBeforeExport');

function MyOnSaleOrderBeforeExport($order, &$xmlDocument) {
    // Получаем список товаров в заказе
    $basket = $order->getBasket();
    foreach ($basket as $basketItem) {
        // Логика получения артикула по ID товара или предложения
        $productId = $basketItem->getProductId();
        $article = GetArticleById($productId); // Ваша функция получения артикула

        // Находим нужный узел в XML и добавляем артикул
        // Работа с объектом $xmlDocument производится через DOMDocument или SimpleXMLElement
    }
}

На что обратить внимание при доработке

Рассмотрим важные аспекты, которые часто упускают из виду:

Подведем итоги

Мы выяснили, что поиск «файла, который нужно исправить» в ядре — это тупиковый путь. Правильный подход — это использование событийного программирования. Это позволит вам гибко изменять данные выгрузки, сохраняя при этом возможность обновления Битрикса без потери ваших наработок. Если вы не имеете опыта в написании обработчиков событий, рекомендуем привлечь специалиста по разработке на 1С-Битрикс, который поможет реализовать логику модификации XML-пакета согласно вашим бизнес-требованиям.

← На главную