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

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

Интеграция 1С с интернет-магазином — это критически важный процесс для любого торгового бизнеса. Часто пользователи сталкиваются с убеждением, что «из коробки» 1С умеет работать только с платформой 1С-Битрикс. Однако это не совсем так. В рамках данной статьи мы разберем, как реализовать обмен данными между 1С:Управление торговлей (УТ) и альтернативными CMS, такими как OpenCart, PrestaShop или самописными решениями, используя стандартные и продвинутые инструменты платформы.

Понимаем основу: Протокол CommerceML

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

Рассмотрим, как это работает на практике. 1С не отправляет данные напрямую в базу данных сайта. Она формирует пакет файлов (обычно это import.xml со структурой товаров и offers.xml с ценами и остатками), упаковывает их в ZIP-архив и передает по протоколу HTTP на сторону сайта. Это означает, что если ваша CMS (будь то PrestaShop или OpenCart) имеет модуль, способный «понимать» и распаковывать CommerceML, интеграция станет возможной без глубокого изменения кода 1С.

Вариант 1: Использование стандартного обмена с модулями-коннекторами

Для популярных систем управления контентом уже разработаны готовые решения, которые эмулируют поведение Битрикса. Разберем по шагам, как настроить такую связку:

  1. Подготовка на стороне сайта: Установите специализированный модуль обмена (например, для OpenCart это могут быть решения от сторонних разработчиков, поддерживающие стандарт CommerceML 2.0). После установки вы получите уникальный URL для обмена, а также логин и пароль.
  2. Настройка в 1С:УТ: Перейдем в раздел Администрирование — Настройки интеграции — Обмен с сайтом. Создадим новый узел обмена.
  3. Параметры соединения: Выберем тип обмена «Выгрузка на сайт». В поле «Адрес сайта» вставим URL, полученный в модуле CMS. Укажем логин и пароль.
  4. Настройка выгрузки: В настройках узла выберем, какие данные мы хотим передавать: каталог товаров, цены, остатки или только информацию о заказах. Проанализируем настройки отбора — важно выгружать только те товары, которые действительно должны быть на сайте, чтобы не перегружать сервер.

Преимущество этого метода в том, что мы используем ПланыОбмена 1С. Это позволяет выполнять инкрементальную выгрузку — передавать только те данные, которые изменились с момента последнего сеанса связи.

Вариант 2: Использование автоматического интерфейса OData

Если стандартный XML-обмен кажется слишком громоздким или медленным, рассмотрим механизм OData. Это встроенный в 1С REST-интерфейс, который позволяет внешним системам обращаться к данным 1С напрямую через веб-запросы.

Выясним, как активировать этот инструмент:

  1. Необходимо опубликовать информационную базу на веб-сервере (Apache или IIS).
  2. При публикации в мастере настройки нужно установить галочку «Публиковать стандартный интерфейс OData».
  3. После этого справочники и документы станут доступны по ссылкам вида: http://server/base/odata/standard.odata/Catalog_Номенклатура.

Посмотрим на пример запроса. Сайт может отправить GET-запрос к 1С и получить данные в формате JSON, который гораздо легче обрабатывается современными веб-языками (PHP, JavaScript). Однако помните, что настройка безопасности в этом случае требует особого внимания, так как по умолчанию OData может открыть доступ ко многим данным.

Вариант 3: Собственные HTTP-сервисы (REST API)

Для тех, кто ищет максимальную производительность и гибкость, оптимальным решением станет создание собственных HTTP-сервисов в 1С. Разберем, почему это удобно: вы сами определяете структуру ответа и логику обработки данных.

Рассмотрим пример того, как может выглядеть программный код простейшего сервиса для отдачи остатка товара в 1С:


Функция ПолучитьОстатокТовара(Запрос)
    Артикул = Запрос.ПараметрыURL.Получить("articul");
    СсылкаТовара = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул);
    
    Если СсылкаТовара.Пустая() Тогда
        Возврат Новый HTTPСервисОтвет(404);
    КонецЕсли;
    
    Остаток = РегистрыНакопления.ТоварыНаСкладах.Остаток(Новый Структура("Номенклатура", СсылкаТовара));
    
    ТелоОтвета = Новый Структура("status, value", "ok", Остаток);
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ТелоОтвета);
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть());
    Возврат Ответ;
КонецФункции

Использование HTTPСервисы позволяет сайту мгновенно запрашивать актуальную цену или остаток в момент оформления заказа пользователем, не дожидаясь полной выгрузки каталога.

Проблема «тяжелых» выгрузок и пути решения

Проанализируем ситуацию: у вас более 20 000 товаров, у каждого по 5 изображений. При стандартном обмене 1С начнет формировать огромный ZIP-архив, что приведет к тайм-аутам на стороне хостинга сайта.

Как оптимизировать этот процесс:

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

Интеграция 1С:УТ с любым сайтом — это не магия, а работа с данными. Если вы не хотите использовать Битрикс, у вас есть три основных пути: настройка обмена по протоколу CommerceML через сторонние модули, использование OData для быстрого доступа или написание своих HTTP-сервисов для полного контроля. Выбор зависит от ваших компетенций и требований к скорости обновления данных. Помните, что «универсальной таблетки» не существует, и любая интеграция потребует финальной донастройки сопоставления характеристик и иерархии групп товаров.

← На главную