← База знаний

Скорость обмена 1С с сайтом: как заставить выгрузку каталога работать быстрее

Ситуация: в каталоге 50 000 товаров, и полная выгрузка цен и остатков из 1С на сайт занимает от 4 до 8 часов. Сервер зависает, менеджеры не могут работать, а актуальные остатки появляются на сайте только к утру. Знакомо? Разберем, "где узкое место" и как ускорить выгрузку в 5-10 раз.

🐌 Где "бутылочное горлышко" в архитектуре обмена?

Процесс обмена товарами по протоколу CommerceML (используется по умолчанию в Битрикс, InSales и др.) состоит из трех последовательных этапов. Тормозить может на каждом из них:

  1. Сборка (генерация) данных в 1С. 1С выполняет тяжелые SQL-запросы: выбирает все активные товары, их цены, рассчитывает остаток по регистрам на лету, собирает картинки из хранилища и формирует огромный XML-файл (или архив `import.xml` / `offers.xml`).
  2. Транспорт (передача файла). Файл (часто десятки и сотни мегабайт) закачивается на веб-сервер сайта. Чем хуже канал, тем дольше идет загрузка. Если HTTP-соединение обрывается — часть CMS просят начать все заново.
  3. Распаковка и запись на сайт (CMS). Сайт принимает XML-файл и начинает его построчно читать. Для каждого товара ищется совпадение по UUID. Если это 1С-Битрикс, то на каждое изменение товара сбрасывается кэш, что создает огромную нагрузку на БД веб-сервера.

⚡ 5 способов ускорить обмен 1С и Сайта

1. Включите "Выгрузку только изменений" (Only Changes)

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

На стороне 1С в узле обмена нужно включить "Выгрузка только изменений". В этом режиме 1С использует "Планы обмена": она помечает измененные объекты (например, пришел новый приходный ордер, или менеджер сменил цену). Выгрузятся только 50-100 товаров, что займет пару минут.

Внимание: проблемы с остатками в типовых (старых) 1С!

Во многих старых конфигурациях 1С (особенно в самописных или при использовании старых версий модулей обмена Битрикс) при изменении остатка программа "не видит", что товар изменился, если сам справочник "Номенклатура" не трогали. В результате новый остаток просто не летит на сайт. Эта проблема решается установкой официального свежего модуля "Обмен с интернет-магазином" от Битрикс (он умеет отлавливать записи регистров).

2. Разделите выгрузку на потоки

Каталог, цены+остатки и картинки — это три совершенно разных типа данных, которые меняются с разной частотой. Создайте в 1С 3 разных узла обмена (или настройте разные расписания в одном расширенном модуле):

  • Обмен заказами: Работает каждые 5-10 минут (быстро и легко).
  • Обмен ценами и остатками: Каждые 15-30 минут (только изменения).
  • Полная структура каталога с картинками: 1 раз в сутки (ночью, когда на сервере никого нет).

3. ZIP-сжатие и разбиение файла (Zip & Split)

Если канал связи или PHP веб-сервера "задыхается", настройте в узле обмена 1С галочки: Сжимать отправляемые файлы (XML жмется в 10-15 раз!) и Разбивать файлы на порции (например, по 5-10 Мб).

Сайт будет "проглатывать" данные маленькими порциями: принял кусок 10Мб, распаковал, записал в БД, запросил у 1С следующий.

4. Оптимизация на стороне сайта (Битрикс)

Очень часто 1С формирует и отдает файл за 5 минут, а сайт его обрабатывает 3 часа. В настройках модуля интеграции Битрикса (на стороне админки сайта) нужно настроить:

  • Шаг интеграции в секундах: (обычно 20-30 сек), чтобы PHP-скрипт не падал с 504 Gateway Time-out.
  • Отключить "Сброс кэша каталога" при каждом товаре: Это убьет ваш сайт. Кэш каталога нужно сбрасывать только 1 раз, после завершения всего сеанса обмена всей партии (можно настроить в параметрах компонента Битрикса).
  • Не деактивировать товары, пропавшие из выгрузки: Если у вас миллион товаров в базе, но только 50 тыс активных, поиск отсутствующих товаров в Битриксе съест 80% времени. Лучше выгружать из 1С признак "Нет в наличии" или нулевой остаток.

5. Переход с файлов на обмен по API

Если у вас > 200 000 товаров, огромные матрицы характеристик или высоконагруженный проект, файловый CommerceML больше не подходит. Требуется написание прямой интеграции: когда остаток или цена в 1С меняется, она *мгновенно* шлет HTTP-POST запрос (Webhook) напрямую в API-метод сайта (например, Laravel или Node.js бекенд), меняя конкретное поле в БД за 100 миллисекунд.

Обмен 1С с сайтом висит часами?

Проведу технический аудит узкого места: проверю тяжелые SQL-запросы при сборке пакета в 1С, настрою правильную выгрузку только изменений регистраций, оптимизирую шаг и кэширование на стороне CMS (Битрикс, WordPress, Laravel). Оставляйте заявку на аудит.

Получить консультацию →

📚 Связанные статьи