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

Данное руководство подробно описывает процесс обмена товарами (импорт) и заказами (экспорт) между «1С-Битрикс» и 1С, включая практические примеры кода, нюансы настройки, а также варианты модификации стандартного процесса. Дополнительно рассмотрены вопросы сохранения выгруженных файлов с помощью константы BX_CATALOG_IMPORT_1C_PRESERVE
и подключения собственных обработчиков событий.
1. Общая схема обмена
- Инициатором обмена является 1С.
1С отсылает запросы к скрипту
/bitrix/admin/1c_exchange.php
на стороне «1С-Битрикс». Сайт, в свою очередь, реагирует: проверяет авторизацию, принимает или отдаёт данные, возвращает результат (успешно/ошибка и т. д.). - Два основных направления:
- Импорт каталога (
type=catalog
) — сайт принимает файлы (import.xml, offers.xml и т. д.) и обновляет каталог товаров, структуру разделов, остатки, цены. - Экспорт заказов (
type=sale
) — сайт формирует и отправляет в 1С XML-файл с заказами интернет-магазина.
- Импорт каталога (
- Последовательность шагов:
Для обоих сценариев (импорт/экспорт) характерен один и тот же набор запросов: checkauth (авторизация) → init (инициализация) → передача или приём файлов (file / import / query) → завершение (success).
2. Импорт каталога из 1С
Рассмотрим процесс импорта, где «1С-Битрикс» выступает в роли «приёмной стороны», а 1С отдаёт информацию о товарах, ценах, остатках.
2.1. Пошаговая схема
- Авторизация (checkauth)
GET /bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth
1С передаёт логин/пароль (указанные в настройках обмена в 1С). «Битрикс» при успехе возвращает сессионный идентификатор (sessid).
- Инициализация (init)
GET /bitrix/admin/1c_exchange.php?type=catalog&mode=init&sessid=xxxx
Сайт сообщает параметры обмена (разрешена ли упаковка в ZIP, размер шага и т. д.) и очищает или переносит старые выгрузки в
/upload/1c_catalog/
. - Передача файлов (mode=file)
POST /bitrix/admin/1c_exchange.php?type=catalog&mode=file&filename=import.xml&sessid=xxxx
1С загружает XML или ZIP, которые складываются на стороне сайта в
/upload/1c_catalog/
. - Обработка (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
:
- Очистка временной таблицы
CIBlockXMLFile::DropTemporaryTables(); // b_xml_tree удаляется
- Создание временной таблицы
CIBlockXMLFile::CreateTemporaryTables(); // b_xml_tree создаётся
- Чтение XML во временную таблицу
CIBlockXMLFile::ReadXMLToDatabase();
- Индексация
CIBlockXMLFile::IndexTemporaryTables();
- Импорт метаданных
CIBlockCMLImport::ImportMetaData(); // Инфоблок, свойства
- Импорт разделов
CIBlockCMLImport::ImportSections(); CIBlockCMLImport::DeactivateSections(); CIBlockCMLImport::SectionsResort();
- Импорт элементов (товаров)
CIBlockCMLImport::ImportElements(); // Для offers.xml ImportElementPrices()
- Деактивация элементов (опционально, если включена соответствующая настройка)
- 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С):
- Авторизация (
?mode=checkauth
) - Инициализация (
?mode=init
) - Запрос заказов (
?mode=query
):«Битрикс» формирует XML, куда попадают заказы, требующие выгрузки (например, новые, изменённые, не выгруженные ранее). Разработчики часто управляют этим через флаги
EXTERNAL_ORDER
иUPDATED_1C
. - Завершение (
?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С вызывает
...&mode=checkauth
, получает sessid. - 1С вызывает
...&mode=init
, сайт чистит/готовит папку. - Если включен zip, загружается
import0_1.zip
. «Битрикс» распаковывает файлыimport.xml
,offers.xml
, картинки. - Далее 1С вызывает
mode=import
для каждого xml-файла. Сайт пошагово обрабатывает (очистка b_xml_tree, создание, импорт, deactivation и т.д.). - После успешного шага возвращается
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
, собственные события) под любые специфические задачи.