Ручной запуск обмена с 1С хорош только на этапе отладки. В бою каталог, цены, остатки и заказы должны синхронизироваться сами — по расписанию. Разберём, как настроить автоматический обмен в 1С-Битрикс: со стороны 1С, со стороны сайта и на уровне сервера.
Кто инициирует обмен: 1С или сайт
Важно с самого начала понять архитектуру: в связке 1С-Битрикс ↔ 1С инициатором сеанса обмена почти всегда выступает 1С, а не сайт. Типовая конфигурация («Управление торговлей», «Комплексная автоматизация», «ERP») по расписанию сама подключается к сайту по адресу /bitrix/admin/1c_exchange.php, авторизуется и запускает сессию CommerceML.
Отсюда следует ключевое правило: частоту выгрузки каталога, цен и остатков вы задаёте в 1С, в настройках узла обмена с сайтом. Сайт в этом сценарии — приёмная сторона, он лишь обрабатывает то, что ему прислали.
- Выгрузка каталога/цен/остатков (1С → сайт) — расписание в 1С.
- Обмен заказами — 1С по расписанию забирает новые заказы с сайта и отдаёт статусы; тоже управляется из 1С.
- Роль сайта — принять данные, разобрать XML, обновить инфоблоки; за фоновую доработку отвечают агенты Битрикса.
Расписание на стороне 1С
В типовой конфигурации откройте НСИ и администрирование → Синхронизация данных → Обмен с сайтом (в старых редакциях — Обмены с сайтами). Для нужного узла есть флажок «Автоматическая синхронизация по расписанию» и кнопка настройки самого расписания.
Расписание задаётся как регламентное задание платформы 1С. Указываете периодичность (например, каждые 5–15 минут), интервал повтора в течение дня и дни недели. Чтобы задание вообще срабатывало, на сервере 1С должны выполняться два условия:
- Запущен сеанс, обрабатывающий регламентные задания. В файловой базе это должен быть открытый клиент (или отдельный фоновый сеанс), в клиент-серверной — сервер 1С:Предприятия с включённым выполнением регламентных заданий.
- Пользователь, от имени которого идёт обмен, имеет право на подключение к сайту и корректный логин/пароль узла.
Агенты и cron на стороне Битрикса
Даже когда данные пришли, часть работы Битрикс выполняет отложенно — через агентов. Это касается пересчёта, индексации, отправки уведомлений и «дообработки» больших выгрузок. По умолчанию агенты запускаются хитами — то есть на посещениях сайта. Для стабильного обмена этого недостаточно.
Правильное решение — перевести агенты и очередь на cron. В файле /bitrix/php_interface/dbconn.php добавляется константа:
define("BX_CRON", true);— отключает запуск агентов на хитах;- в crontab сервера добавляется вызов
*/1 * * * * php -f /home/bitrix/www/bitrix/php_interface/cron_events.php(путь зависит от хостинга).
Так агенты выполняются по системному расписанию, независимо от трафика. Это критично для магазинов с низкой посещаемостью ночью — иначе заказы и статусы «зависают» до первого утреннего визита.
Настройки → Настройки продукта → Агенты (/bitrix/admin/agent_list.php).Как выбрать частоту обмена заказами
Для заказов частота важнее, чем для каталога: покупатель ждёт, что оплата и статус «уедут» в 1С быстро, а менеджер — что новый заказ появится в учётной системе почти сразу. Но слишком частый обмен нагружает и сайт, и 1С. Ориентиры:
| Профиль магазина | Каталог/цены/остатки | Заказы |
|---|---|---|
| Небольшой, стабильный ассортимент | 1–2 раза в сутки | каждые 15–30 мин |
| Средний, активные продажи | каждые 1–3 часа | каждые 5–15 мин |
| Крупный, быстрые остатки | каждые 15–30 мин (только изменения) | каждые 2–5 мин |
Разделяйте расписания: тяжёлую полную выгрузку каталога ставьте на ночь, а частый лёгкий обмен заказами и остатками — на день. В 1С для этого удобно завести отдельные узлы или отдельные регламентные задания с разной периодичностью.
Окна обмена, пересечения и блокировки
Сеанс обмена CommerceML — не мгновенная операция. Полная выгрузка большого каталога может идти десятки минут, разбиваясь на шаги по параметру PHP_INTERVAL (ограничение времени одного шага). Если следующее задание стартует, пока предыдущее не завершилось, возможны конфликты.
- Не накладывайте выгрузки друг на друга. Интервал расписания должен быть заведомо больше времени полного сеанса.
- Разводите каталог и заказы по времени — так тяжёлая выгрузка товаров не блокирует быстрый приём заказов.
- Учитывайте бэкапы и регламентные работы на сервере: ночное окно резервного копирования не должно совпадать с полной выгрузкой.
import*.xml, «зависшие» в каталоге /upload/1c_exchange/. Это сигнал, что интервал расписания слишком короткий.Мониторинг: как убедиться, что обмен идёт
Автоматика без контроля опасна: обмен может тихо остановиться на неделю, и заметят это только когда остатки на сайте разойдутся с реальностью. Организуйте наблюдение на трёх уровнях:
- Логи обмена Битрикса —
Магазин → Настройки → Торговый каталог → Настройки обмена с 1Си файл/bitrix/exchange.log(если включено логирование). Смотрите время последнего успешного сеанса. - Регламентные задания 1С — журнал регистрации покажет, отрабатывало ли задание и с какими ошибками.
- Внешний мониторинг — простейший способ: скрипт-«часовой», который проверяет дату последнего изменения товаров или последнего заказа, уехавшего в 1С, и шлёт алерт, если тишина дольше порога.
Для критичных магазинов имеет смысл настроить уведомления на почту или в мессенджер при отсутствии обмена дольше заданного времени — это дешевле, чем разбирать последствия суток простоя.
Итог
Автоматический обмен с 1С — это три согласованных слоя: расписание регламентных заданий в самой 1С (кто и как часто инициирует сеанс), агенты Битрикса на cron (чтобы дообработка не зависела от трафика) и мониторинг (чтобы вовремя заметить остановку). Разделяйте тяжёлую ночную выгрузку каталога и частый дневной обмен заказами, не допускайте пересечения сеансов и следите за временем последней успешной синхронизации.
Если обмен «встаёт» без видимой причины, расписания конфликтуют или нужно развести несколько узлов под разную периодичность — мы настраиваем и сопровождаем интеграцию 1С с 1С-Битрикс под ключ: от расписаний и cron до мониторинга и разбора логов.
Частые вопросы
Сайт или 1С запускает автоматический обмен?
В типовой связке инициатором выступает 1С: она по расписанию сама подключается к 1c_exchange.php на сайте и запускает сеанс. Поэтому частоту выгрузки задают в настройках узла обмена в 1С.
Где в 1С настроить расписание обмена с сайтом?
В разделе НСИ и администрирование — Синхронизация данных — Обмен с сайтом. У нужного узла включается автоматическая синхронизация по расписанию, а само расписание задаётся как регламентное задание платформы.
Почему расписание настроено, а обмен не идёт?
Чаще всего база файловая и никто не держит открытым клиент 1С, поэтому регламентные задания не выполняются в фоне. В клиент-серверном варианте нужно, чтобы сервер 1С выполнял регламентные задания.
Зачем переводить агентов Битрикса на cron?
По умолчанию агенты запускаются на посещениях сайта, и при низком трафике дообработка обмена задерживается. Cron запускает агентов по системному расписанию независимо от посетителей.
Как часто обменивать заказами?
Для среднего магазина комфортный интервал приёма заказов и статусов — каждые 5–15 минут. Каталог и остатки при этом можно обновлять реже, отдельным расписанием.
Можно ли выгружать каталог и заказы с разной частотой?
Да, и это рекомендуется. Заведите отдельные узлы или регламентные задания: тяжёлую полную выгрузку каталога ставьте на ночь, а частый лёгкий обмен заказами — на день.
Что будет, если сеансы обмена наложатся друг на друга?
Возможны незавершённые сессии и зависшие файлы import*.xml в каталоге выгрузки. Интервал расписания должен быть заведомо больше времени одного полного сеанса обмена.
Как понять, что автоматический обмен остановился?
Смотрите время последнего успешного сеанса в логах обмена Битрикса и в журнале регистрации 1С. Надёжнее добавить внешний мониторинг, который шлёт алерт при отсутствии обмена дольше заданного порога.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.