Как настроить обмен данными между 1С 7.7 и сайтом на платформе 1С-Битрикс?

Программист 1С v7.7 Управленческий учет IT и автоматизация бизнеса
← На главную

При автоматизации интернет-торговли нередко возникает задача связать учетную систему на базе платформы 1С:Предприятие 7.7 (типовую «Торговля и Склад» или самописную конфигурацию) с современным интернет-магазином на CMS «1С-Битрикс». Разберем, как устроена стандартная схема интеграции, какие требования предъявляются к форматам и транспорту, а также какими средствами платформы 1С 7.7 можно решить эту задачу без сложных внешних надстроек.

Архитектура обмена: форматы и транспорт

Проанализируем базовые принципы взаимодействия. Распространенным заблуждением является мнение, что для обмена с 1С-Битрикс требуются тяжелые SOAP веб-сервисы, сложные хэш-подписи (SHA-1/MD5) или формат JSON. На самом деле стандартный модуль обмена 1С-Битрикс работает по протоколу CommerceML 2 через обычные HTTP-запросы методом GET и POST.

Вся процедура обмена строится на следующих правилах:

  1. Инициатор обмена — учетная система 1С:Предприятие. Именно 1С отправляет запросы к серверу сайта.
  2. Единая точка входа — обращение выполняется к скрипту /bitrix/admin/1c_exchange.php с передачей служебных GET-параметров type (тип обмена: catalog для товаров и цен или sale для заказов) и mode (текущая фаза обмена).
  3. Формат данных — структурированные XML-файлы стандарта CommerceML 2 (файлы import.xml, offers.xml для каталога и orders.xml для заказов).

Пошаговый регламент протокола обмена

Рассмотрим последовательность шагов, которую необходимо воспроизвести в обработке 1С 7.7 при выгрузке каталога товаров на сайт:

  1. Авторизация (mode=checkauth):

    1С отправляет GET-запрос с базовой HTTP-авторизацией (Basic Auth). При успешной проверке логина и пароля Битрикс возвращает три строки: статус success, имя cookie сессии и значение cookie. Эту сессионную cookie необходимо сохранять и передавать во всех последующих запросах сеанса.

  2. Инициализация сеанса (mode=init):

    1С запрашивает системные настройки импорта. Сервер возвращает параметры, например, признак поддержки сжатия (zip=yes или zip=no) и ограничение на максимальный размер передаваемого пакета в байтах (file_limit=...).

  3. Передача файлов (mode=file&filename=имя_файла.xml):

    Файлы выгрузки отправляются телом POST-запроса в виде бинарного потока. Если размер сформированного XML-файла превышает значение file_limit, файл передается порциями (несколькими последовательными POST-запросами).

  4. Пошаговый импорт на сайте (mode=import&filename=имя_файла.xml):

    1С отправляет GET-запрос на запуск разбора переданного XML-документа. Чтобы избежать падения скрипта по таймауту выполнения PHP (max_execution_time), сайт выполняет разбор порциями. Если импорт не завершен, сервер возвращает статус progress с текстом текущего состояния. 1С должна в цикле повторять запрос mode=import до тех пор, пока от сервера не будет получен ответ success.

При обмене заказами (type=sale) шаги авторизации и инициализации аналогичны, после чего вызывается режим mode=query для получения XML с новыми заказами и режим mode=success для подтверждения успешного приема документов учетной системой.

Реализация сетевого транспорта в 1С 7.7

Выясним причину, почему старая компонента v7plus.dll не подходит для прямого обмена с современными сайтами. Данная библиотека не поддерживает защищенный протокол HTTPS с современными версиями шифрования TLS 1.2 и TLS 1.3. При попытке отправить запрос на защищенный URL возникнет ошибка соединения.

Для надежной работы по HTTP и HTTPS в среде 1С 7.7 рекомендуется использовать системные COM-объекты Windows: MSXML2.ServerXMLHTTP.6.0 или WinHttp.WinHttpRequest.5.1.

Посмотрим на пример реализации HTTP-запроса через WinHttp.WinHttpRequest.5.1:


// Инициализация объекта сетевого запроса
Попытка
    HTTP = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
Исключение
    Сообщить("Не удалось создать объект WinHttp: " + ОписаниеОшибки(), "!");
    Возврат;
КонецПопытки;

АдресСкрипта = "https://myshop.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth";

// Открываем GET-запрос (асинхронный режим = Ложь)
HTTP.Open("GET", АдресСкрипта, 0);

// Устанавливаем учетные данные для Basic Auth
HTTP.SetCredentials("Пользователь1С", "Пароль1С", 0);

// Отправляем запрос
HTTP.Send();

// Проверяем код ответа сервера
Если HTTP.Status = 200 Тогда
    ОтветСервера = HTTP.ResponseText;
    Сообщить("Ответ сайта: " + ОтветСервера);
Иначе
    Сообщить("Ошибка HTTP: " + HTTP.Status + " " + HTTP.StatusText, "!");
КонецЕсли;

Формирование XML в кодировке UTF-8

Разберем еще одну техническую особенность: стандартный объект платформы 1С 7.7 Текст сохраняет файлы исключительно в однобайтовых кодировках (Windows-1251 или DOS), тогда как протокол CommerceML 2 для Битрикс ожидает данные в кодировке UTF-8.

Чтобы сформировать XML-файл с корректной кодировкой, применяются следующие подходы:

  1. Использование COM-объекта ADODB.Stream: формируем текстовый документ стандартными средствами или склеиванием строк, после чего перекодируем его в UTF-8 и записываем на диск через поток ADO.
  2. Использование DOM-модели MSXML2.DOMDocument: строим структуру XML-документа объектным методом, задавая декларацию <?xml version="1.0" encoding="utf-8"?>, и сохраняем файл методом Save().

Альтернативные и упрощенные способы обмена

Если нет необходимости реализовывать полный пошаговый цикл протокола Битрикс на встроенном языке 1С 7.7, рассмотрим альтернативные практические варианты:

  1. Файловый обмен через каталог или FTP: обработка в 1С 7.7 формирует файлы CommerceML и сохраняет их в сетевую папку или выгружает на FTP/SFTP-сервер. На стороне 1С-Битрикс настраивается штатный импорт по расписанию (через cron) из локального каталога сервера.
  2. Использование промежуточного конвертера: 1С 7.7 выгружает остатки, цены и номенклатуру в простом формате (например, CSV или Windows-1251 XML), а промежуточный скрипт (на PHP или Python) преобразует данные в структуру CommerceML и вызывает штатные процедуры импорта Битрикс.
← На главную