Расширенное руководство по обмену данными между 1С-Битрикс и 1С

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

Обмен данными между 1С-Битрикс и 1С

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

1. Общая схема обмена

  1. Инициатором обмена является 1С.

    1С отсылает запросы к скрипту /bitrix/admin/1c_exchange.php на стороне «1С-Битрикс». Сайт, в свою очередь, реагирует: проверяет авторизацию, принимает или отдаёт данные, возвращает результат (успешно/ошибка и т. д.).

  2. Два основных направления:
    • Импорт каталога (type=catalog) — сайт принимает файлы (import.xml, offers.xml и т. д.) и обновляет каталог товаров, структуру разделов, остатки, цены.
    • Экспорт заказов (type=sale) — сайт формирует и отправляет в 1С XML-файл с заказами интернет-магазина.
  3. Последовательность шагов:

    Для обоих сценариев (импорт/экспорт) характерен один и тот же набор запросов: checkauth (авторизация) → init (инициализация) → передача или приём файлов (file / import / query) → завершение (success).


2. Импорт каталога из 1С

Рассмотрим процесс импорта, где «1С-Битрикс» выступает в роли «приёмной стороны», а 1С отдаёт информацию о товарах, ценах, остатках.

2.1. Пошаговая схема

  1. Авторизация (checkauth)
    GET /bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth

    1С передаёт логин/пароль (указанные в настройках обмена в 1С). «Битрикс» при успехе возвращает сессионный идентификатор (sessid).

  2. Инициализация (init)
    GET /bitrix/admin/1c_exchange.php?type=catalog&mode=init&sessid=xxxx

    Сайт сообщает параметры обмена (разрешена ли упаковка в ZIP, размер шага и т. д.) и очищает или переносит старые выгрузки в /upload/1c_catalog/.

  3. Передача файлов (mode=file)
    POST /bitrix/admin/1c_exchange.php?type=catalog&mode=file&filename=import.xml&sessid=xxxx

    1С загружает XML или ZIP, которые складываются на стороне сайта в /upload/1c_catalog/.

  4. Обработка (mode=import)
    GET /bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=import.xml&sessid=xxxx

    «Битрикс» читает файл, создаёт/обновляет инфоблок, разделы, товары, цены, остатки. При успешном завершении — отдаёт success.

2.2. Основные файлы выгрузки и их роль

  • import.xml — товары, разделы, свойства, единицы измерения.
  • offers.xml — торговые предложения (остатки, цены).
  • prices.xml / rests.xml — альтернативный вариант разделения цен и остатков (в некоторых конфигурациях 1С).
  • references.xml — данные для highload-блоков.

Картинки обычно кладутся в /upload/1c_catalog/import_files/. Если используется ZIP, архив может содержать и XML, и изображения вместе.

2.3. Временные таблицы и этапы разбора XML

При mode=import файлы разбираются через классы CIBlockXMLFile и CIBlockCMLImport:

  1. Очистка временной таблицы
    CIBlockXMLFile::DropTemporaryTables(); // b_xml_tree удаляется
  2. Создание временной таблицы
    CIBlockXMLFile::CreateTemporaryTables();
    // b_xml_tree создаётся
    
  3. Чтение XML во временную таблицу
    CIBlockXMLFile::ReadXMLToDatabase();
  4. Индексация
    CIBlockXMLFile::IndexTemporaryTables();
  5. Импорт метаданных
    CIBlockCMLImport::ImportMetaData(); // Инфоблок, свойства
  6. Импорт разделов
    CIBlockCMLImport::ImportSections();
    CIBlockCMLImport::DeactivateSections();
    CIBlockCMLImport::SectionsResort();
    
  7. Импорт элементов (товаров)
    CIBlockCMLImport::ImportElements(); // Для offers.xml ImportElementPrices()
    
  8. Деактивация элементов (опционально, если включена соответствующая настройка)
  9. success — если всё успешно, сайт отдаёт success, и 1С завершает обработку текущего файла.

2.4. Примеры дополнительной логики

  • Событие OnSuccessCatalogImport1C (модуль catalog):
    
    AddEventHandler("catalog", "OnSuccessCatalogImport1C", function($arParams, $absolutePath) {
        // $arParams - массив параметров компонента bitrix:catalog.import.1c
        // $absolutePath - полный путь к обрабатываемому файлу (import.xml, offers.xml и т.д.)
        mail("admin@example.com", "Импорт завершён", 
            "Обработан файл: {$absolutePath}\nПараметры:\n" . print_r($arParams, true));
    });
        

    Можно настроить любые собственные действия: логирование, уведомления, дополнительную проверку данных.

  • Изменение процесса через события инфоблоков:
    
    AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", function(&$arFields) {
        // Проверка, что запрос идёт от 1С (type=catalog, mode=import)
        if (isset($_GET['type'], $_GET['mode'])
            && $_GET['type'] === 'catalog'
            && $_GET['mode'] === 'import')
        {
            // Дополнительная логика, например, запрет менять название
            if ($arFields["NAME"] === "Тестовый товар") {
                $arFields["RESULT_MESSAGE"] = "Нельзя изменять название!";
                return false; // Откат
            }
        }
    });
        

3. Экспорт заказов

При экспорте заказов сценарий похож, но type=sale и другой набор файлов (сайт отдает XML в 1С):

  1. Авторизация (?mode=checkauth)
  2. Инициализация (?mode=init)
  3. Запрос заказов (?mode=query):

    «Битрикс» формирует XML, куда попадают заказы, требующие выгрузки (например, новые, изменённые, не выгруженные ранее). Разработчики часто управляют этим через флаги EXTERNAL_ORDER и UPDATED_1C.

  4. Завершение (?mode=success):

    Время последней выгрузки фиксируется, чтобы при следующем сеансе обмена выгружать только обновлённые заказы.

Для расширенной кастомизации используется класс CSaleExport и компонент bitrix:sale.export.1c. Можно также скопировать компонент и доработать под нужные бизнес-требования.


4. Отключение проверки источника запроса

По умолчанию «Битрикс» проверяет заголовки, sessid и Cookie, чтобы убедиться, что запрос идёт именно от 1С. При необходимости (только для тестов!) можно отключить эту проверку:

4.1. Для импорта каталога (type=catalog)


// Old school
COption::SetOptionString("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y");

// D7 style
\Bitrix\Main\Config\Option::set("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y");

4.2. Для экспорта заказов (type=sale)


// Old school
COption::SetOptionString("sale", "secure_1c_exchange", "N");

// D7 style
\Bitrix\Main\Config\Option::set("sale", "secure_1c_exchange", "N");

В боевой среде лучше оставлять проверку включённой во избежание несанкционированных обращений.


5. Константа BX_CATALOG_IMPORT_1C_PRESERVE

Если по умолчанию при новом обмене сайт очищает /upload/1c_catalog, то можно сохранять прошлые выгрузки, включив эту константу в /bitrix/php_interface/dbconn.php:


define("BX_CATALOG_IMPORT_1C_PRESERVE", true);

Это позволит переименовывать папку (например, в 1c_catalog0, 1c_catalog1 и т.д.) и сохранять все файлы для анализа. Однако следует регулярно проверять объём диска, чтобы избежать переполнения.


6. Практические примеры

6.1. Периодическая выгрузка каталога по расписанию

В 1С настраивается задача (каждый час или раз в день). При запуске:

  1. 1С вызывает ...&mode=checkauth, получает sessid.
  2. 1С вызывает ...&mode=init, сайт чистит/готовит папку.
  3. Если включен zip, загружается import0_1.zip. «Битрикс» распаковывает файлы import.xml, offers.xml, картинки.
  4. Далее 1С вызывает mode=import для каждого xml-файла. Сайт пошагово обрабатывает (очистка b_xml_tree, создание, импорт, deactivation и т.д.).
  5. После успешного шага возвращается success.

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

6.2. Частичное обновление по событиям инфоблока

Например, хотим при импорте из 1С проставлять каждому товару свойство «Прошёл проверку». В обработчике OnBeforeIBlockElementUpdate:


AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", function (&$arFields) {
    if (isset($_GET['type'], $_GET['mode']) && $_GET['type']=='catalog' && $_GET['mode']=='import') {
        $arFields["PROPERTY_VALUES"]["CHECKED"] = 1;
    }
});

Так автоматизируем отметку «прошёл проверку» для всех товаров, загруженных из 1С.

6.3. Экспорт заказов только определённого статуса

В админке «Интернет-магазин» → «Настройки» → «Обмен с 1С» можно указать статусы, которые должны выгружаться (например, только «N» — новые). При вызове ?type=sale&mode=query «Битрикс» отдаст XML исключительно с этими заказами. После выгрузки они отмечаются как «переданные».


7. Рекомендации и заключение

  • Настраивайте порционную загрузку при больших объёмах товаров/заказов, чтобы избежать превышения max_execution_time.
  • Ведите логи: при ошибках изучайте файлы в /upload/1c_catalog/, в каталоге log, а также лог сервера.
  • Безопасность: не отключайте проверку источника запроса (sessid) без крайней необходимости.
  • Используйте события (OnSuccessCatalogImport1C, OnBeforeIBlockElementUpdate и т. п.) для тонкой настройки логики.
  • Оптимизируйте хранение: если включаете BX_CATALOG_IMPORT_1C_PRESERVE, то регулярно убирайте старые архивы.

При тщательной настройке и понимании принципов работы стандартных компонентов, обмен «1С-Битрикс» и 1С становится надёжным инструментом автоматизации бизнес-процессов: регулярная актуализация каталога, централизованное ведение остатков и цен, синхронизация заказов. При необходимости есть возможности расширения (копирование и доработка компонентов bitrix:catalog.import.1c, bitrix:sale.export.1c, собственные события) под любые специфические задачи.

Теги:  Битрикс, 1С

Интернет-магазин от 120 000 руб., срок от 4 недель

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

Корпоративный сайт от 60 000 руб., срок от 3 недель

Готовый информационный ресурс, включающий лицензию на 1С-Битрикс «Стандарт», технологию «Композитный сайт».

Лендинг от 25 000 руб., срок от 2 недель

Компактный сайт, идеально подходящий для старта. На одной странице можно представить ключевые преимущества вашей компании и разместить форму для обратной связи.