Как правильно организовать обмен данными между сайтом и 1С: выбор архитектуры и реализация

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Вопрос интеграции 1С с веб-сайтом является одной из самых частых задач при автоматизации бизнеса. Основная дилемма заключается в том, какая система должна выступать инициатором обмена и как обеспечить надежность передачи данных, если одна из сторон окажется недоступна. В этой статье мы подробно разберем различные сценарии взаимодействия, проанализируем их преимущества и недостатки, а также изучим лучшие практики построения отказоустойчивых систем.

Метод периодического опроса (Polling)

Рассмотрим наиболее стабильный и простой в реализации подход — опрос сайта со стороны 1С. В этом сценарии 1С выступает инициатором соединения. Через определенные интервалы времени (например, каждую минуту) 1С отправляет запрос к API сайта с вопросом: «Появились ли новые заказы?». Если заказы есть, сайт возвращает их в теле ответа (обычно в формате JSON), и 1С приступает к их обработке.

Преимущества метода:

  1. Безопасность: 1С находится внутри локальной сети и сама инициирует исходящее соединение. Нам не нужно публиковать базу 1С в интернете и открывать порты.
  2. Контроль нагрузки: Мы сами определяем частоту запросов в РегламентныеЗадания, что позволяет избежать перегрузки системы в пиковые часы.
  3. Простота отладки: Весь процесс контролируется на стороне 1С, что упрощает поиск ошибок в коде загрузки.

Проанализируем пример кода для реализации такого запроса:


Соединение = Новый HTTPСоединение("mysite.com", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("/api/v1/get_new_orders");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);

Попытка
    Ответ = Соединение.Получить(Запрос);
    Если Ответ.КодСостояния = 200 Тогда
        ЧтениеJSON = Новый ЧтениеJSON;
        ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
        Данные = ПрочитатьJSON(ЧтениеJSON);
        // Обработка полученного массива структур
    КонецЕсли;
Исключение
    ЗаписьЖурналаРегистрации("ОбменССайтом", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
КонецПопытки;

Использование технологии Webhooks (Вебхуки)

Разберем ситуацию, когда критически важна скорость появления заказа в 1С (Real-time обмен). В этом случае сайт «пинает» 1С сразу в момент совершения действия пользователем. Для этого в 1С создается HTTPСервис, который ожидает входящие POST-запросы.

Выясним причину, по которой этот метод считается более сложным. При использовании вебхуков 1С должна быть постоянно доступна извне. Если в офисе пропадет интернет или база будет закрыта для обновления, сайт не сможет «достучаться» до 1С, и данные могут быть потеряны. Для решения этой проблемы на стороне сайта необходимо реализовать механизм очереди и повторных попыток (Retry policy).

Алгоритм работы с вебхуками:

  1. Сайт формирует JSON-пакет с данными заказа.
  2. Сайт отправляет POST-запрос на опубликованный URL-адрес HTTP-сервиса 1С.
  3. 1С мгновенно принимает данные и возвращает HTTP-ответ 200 (ОК).
  4. Если 1С вернула ошибку или недоступна, сайт пробует отправить запрос снова через 5, 15, 60 минут.

Обеспечение надежности и обработка внештатных ситуаций

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

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

  1. 1С запрашивает данные у сайта.
  2. Сайт отдает список заказов с уникальными ID.
  3. 1С создает документы в базе и фиксирует их номера.
  4. 1С отправляет сайту второй запрос: «Заказы с ID [1, 2, 3] успешно загружены».
  5. Сайт помечает эти заказы как «Переданные в 1С» и больше не выдает их при следующих запросах.

Такой подход исключает дублирование документов и потерю данных при обрыве связи в середине сеанса.

Стандартный протокол CommerceML

Не забудем рассмотреть «классический» путь интеграции, предусмотренный фирмой 1С. Большинство типовых конфигураций поддерживают стандарт CommerceML. Здесь 1С является инициатором и работает со скриптом /bitrix/admin/1c_exchange.php (или аналогичным в других CMS). Плюс этого метода в том, что в 1С уже реализованы механизмы выгрузки остатков, цен и загрузки заказов. Нужно лишь настроить узел в справочнике НастройкиИнтеграцииСБитрикс (или аналогичном) и задать расписание.

Безопасность при публикации сервисов 1С

Если вы решили использовать входящие HTTP-сервисы, крайне важно защитить данные. Рассмотрим основные правила безопасности:

Использование планов обмена для оптимизации

Выясним, как избежать передачи лишних данных. Если на сайте 100 000 товаров, выгружать их целиком каждый раз нецелесообразно. Для этого в 1С используются ПланыОбмена. Мы создаем узел обмена, и при изменении цены или остатка товара 1С автоматически регистрирует изменения для этого узла. При следующем обмене будут переданы только те позиции, которые реально изменились с момента прошлой выгрузки. Это называется инкрементальной выгрузкой.

Промежуточное звено: Брокеры сообщений

Для высоконагруженных проектов разберем использование брокеров сообщений, таких как RabbitMQ. В этой схеме сайт не обращается к 1С напрямую, а кладет сообщение в очередь. 1С «подписывается» на эту очередь и забирает сообщения по мере возможности. Это идеальный вариант для распределенных систем, так как он полностью разрывает жесткую зависимость между доступностью сайта и 1С.

Подводя итог, можно сказать, что выбор метода зависит от требований к скорости и надежности. Для большинства задач оптимальным будет периодический опрос сайта со стороны 1С (Polling) с использованием формата JSON и механизмом подтверждения получения данных. Это обеспечивает наилучший баланс между простотой реализации и стабильностью работы системы.

← На главную