Как организовать двустороннюю синхронизацию 1С:УТ 10.3 с интернет-магазином на MySQL?

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

Синхронизация данных между учетной системой 1С и интернет-магазином — задача классическая, но требующая вдумчивого подхода к архитектуре, особенно когда речь идет о базе в 60 000 товаров. Рассмотрим ситуацию, когда используется 1С:Управление торговлей 10.3 (на платформе 8.3) и самописный сайт на MySQL. Основная цель — обеспечить актуальность остатков и цен в режиме реального времени, а также оперативную передачу заказов с сайта в 1С.

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

Решение 1: Использование HTTP- и Web-сервисов

Это наиболее современный и рекомендуемый экспертами подход. Мы рассматриваем сайт как внешнего потребителя данных, который обращается к 1С по мере необходимости. Несмотря на то, что УТ 10.3 — конфигурация на обычных формах, использование платформы 8.3 позволяет создавать в ней полноценные HTTP-сервисы.

Как это работает:

  1. В конфигурации 1С создается объект HTTPСервис или WebСервис.
  2. Для получения остатков сайт отправляет запрос к 1С (например, передавая артикул или GUID товара).
  3. 1С мгновенно выполняет запрос к базе, рассчитывает реальный остаток и возвращает ответ в формате JSON или XML.

Проанализируем ситуацию с заказами: когда покупатель нажимает кнопку «Оформить заказ», сайт отправляет POST-запрос на URL вашего HTTP-сервиса в 1С. В теле запроса передаются данные о клиенте и товарах. 1С программно создает документ ЗаказПокупателя и возвращает сайту номер созданного документа. Это избавляет от необходимости периодического опроса сайта (polling).

Решение 2: Использование Планов обмена и дельта-выгрузок

Выгружать 60 000 товаров целиком при каждом изменении — непозволительная роскошь для производительности. Рассмотрим механизм ПланыОбмена, который позволяет фиксировать только те объекты, которые изменились с момента последней синхронизации.

Разберем по шагам логику регистрации изменений:

  1. Создадим новый ПланОбмена, в состав которого включим справочник Номенклатура и регистры сведений с ценами и остатками.
  2. При изменении цены товара 1С автоматически ставит «метку» (регистрирует изменение) для этого товара в плане обмена.
  3. Регламентное задание по расписанию (например, раз в 5-10 минут) выбирает только измененные позиции, формирует файл (или JSON-пакет) и отправляет его на сайт.
  4. После успешного приема данных сайтом, 1С очищает регистрацию изменений.

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

Решение 3: Внешние источники данных (ODBC соединение)

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

Рассмотрим алгоритм настройки:

  1. На сервере 1С устанавливается драйвер MySQL ODBC Connector.
  2. В конфигураторе 1С добавляется новый объект ВнешнийИсточникДанных, настраивается строка подключения к базе сайта.
  3. Таблицы MySQL (например, products, orders) становятся доступны в коде 1С почти как обычные справочники.

Пример кода для обновления цены напрямую в MySQL может выглядеть так:


ЗапросSQL = "UPDATE shop_products SET price = " + Формат(НоваяЦена, "ЧГ=0") + " WHERE sku = '" + Артикул + "'";
ВнешниеИсточникиДанных.БазаСайта.ВыполнитьКоманду(ЗапросSQL);

Важный нюанс: Прямая запись в базу сайта — это быстро, но опасно. Если структура таблиц сайта изменится, код 1С перестанет работать. Кроме того, это создает нагрузку на MySQL в моменты массовых обновлений.

Решение 4: Оптимизация обмена через JSON и Webhooks

Выясним причину, почему стоит отказаться от классического XML в пользу JSON. Формат JSON более лаконичен, легче парсится языками программирования, на которых пишутся сайты (PHP, Python, JS), и занимает меньше трафика. Это критично при передаче десятков тысяч позиций.

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

Архитектурные советы по безопасности

Поскольку ваша база 1С находится внутри локальной сети, а сайт — в интернете, нельзя просто «открыть порты» наружу. Рекомендуем использовать Reverse Proxy (например, Nginx или Apache).

Схема взаимодействия выглядит так:

Итоги

Для базы в 60 000 товаров оптимальным решением будет комбинированный подход:

  1. Планы обмена + HTTP-сервисы (JSON) — для регламентной выгрузки обновлений цен и остатков (только измененные позиции).
  2. HTTP-сервисы (POST-запросы) — для мгновенного приема заказов с сайта в 1С.
  3. Регламентные задания — для полной сверки данных (например, раз в сутки ночью), чтобы гарантированно устранить возможные расхождения.

Такая архитектура обеспечит высокую скорость работы, надежность и минимальную нагрузку на сервер 1С, что позволит менеджерам комфортно работать в системе, пока происходят обмены.

← На главную