Синхронизация данных между учетной системой 1С и интернет-магазином — задача классическая, но требующая вдумчивого подхода к архитектуре, особенно когда речь идет о базе в 60 000 товаров. Рассмотрим ситуацию, когда используется 1С:Управление торговлей 10.3 (на платформе 8.3) и самописный сайт на MySQL. Основная цель — обеспечить актуальность остатков и цен в режиме реального времени, а также оперативную передачу заказов с сайта в 1С.
Разберем основные стратегии реализации этой задачи, проанализируем их плюсы и минусы, а также выясним, какие современные инструменты помогут сделать обмен стабильным.
Это наиболее современный и рекомендуемый экспертами подход. Мы рассматриваем сайт как внешнего потребителя данных, который обращается к 1С по мере необходимости. Несмотря на то, что УТ 10.3 — конфигурация на обычных формах, использование платформы 8.3 позволяет создавать в ней полноценные HTTP-сервисы.
Как это работает:
HTTPСервис или WebСервис.JSON или XML.Проанализируем ситуацию с заказами: когда покупатель нажимает кнопку «Оформить заказ», сайт отправляет POST-запрос на URL вашего HTTP-сервиса в 1С. В теле запроса передаются данные о клиенте и товарах. 1С программно создает документ ЗаказПокупателя и возвращает сайту номер созданного документа. Это избавляет от необходимости периодического опроса сайта (polling).
Выгружать 60 000 товаров целиком при каждом изменении — непозволительная роскошь для производительности. Рассмотрим механизм ПланыОбмена, который позволяет фиксировать только те объекты, которые изменились с момента последней синхронизации.
Разберем по шагам логику регистрации изменений:
ПланОбмена, в состав которого включим справочник Номенклатура и регистры сведений с ценами и остатками.Для оптимизации процесса в 1С можно использовать хеширование. Проанализируем состояние товара: если мы рассчитаем MD5 хеш от строки, содержащей цену и остаток, и сравним его с предыдущим значением, мы сможем избежать выгрузки данных, если фактически ничего не поменялось (например, если документ был перепроведен без изменения сумм и количеств).
Если веб-разработчик не готов писать API со стороны сайта, можно рассмотреть вариант прямого взаимодействия 1С с базой MySQL. Для этого используются Внешние источники данных в 1С.
Рассмотрим алгоритм настройки:
MySQL ODBC Connector.ВнешнийИсточникДанных, настраивается строка подключения к базе сайта.products, orders) становятся доступны в коде 1С почти как обычные справочники.Пример кода для обновления цены напрямую в MySQL может выглядеть так:
ЗапросSQL = "UPDATE shop_products SET price = " + Формат(НоваяЦена, "ЧГ=0") + " WHERE sku = '" + Артикул + "'";
ВнешниеИсточникиДанных.БазаСайта.ВыполнитьКоманду(ЗапросSQL);
Важный нюанс: Прямая запись в базу сайта — это быстро, но опасно. Если структура таблиц сайта изменится, код 1С перестанет работать. Кроме того, это создает нагрузку на MySQL в моменты массовых обновлений.
Выясним причину, почему стоит отказаться от классического XML в пользу JSON. Формат JSON более лаконичен, легче парсится языками программирования, на которых пишутся сайты (PHP, Python, JS), и занимает меньше трафика. Это критично при передаче десятков тысяч позиций.
Для реализации «мгновенных» заказов стоит внедрить технологию Webhooks. Разберем ситуацию: сайт не ждет, пока 1С придет за заказами, а сам «пушит» (push) информацию в 1С. Это обеспечивает непрерывность бизнес-процесса: менеджер видит заказ в 1С через секунду после того, как клиент нажал кнопку на сайте.
Поскольку ваша база 1С находится внутри локальной сети, а сайт — в интернете, нельзя просто «открыть порты» наружу. Рекомендуем использовать Reverse Proxy (например, Nginx или Apache).
Схема взаимодействия выглядит так:
Для базы в 60 000 товаров оптимальным решением будет комбинированный подход:
Такая архитектура обеспечит высокую скорость работы, надежность и минимальную нагрузку на сервер 1С, что позволит менеджерам комфортно работать в системе, пока происходят обмены.