Ручной импорт каталога годится один раз, но магазин живёт непрерывно: цены и остатки меняются каждый день. Автоматический импорт по расписанию снимает с контент-менеджера рутину и держит витрину в актуальном состоянии. В 1С-Битрикс за это отвечают два механизма — агенты и системный cron.
Чем Битрикс запускает задачи по расписанию
В 1С-Битрикс нет отдельного «планировщика импорта» — регулярные операции строятся на двух системных механизмах, которые важно не путать.
- Агенты — PHP-функции, которые ядро вызывает через заданный интервал. Список видно в
Настройки → Настройки продукта → Агенты(/bitrix/admin/agent_list.php). У каждого агента есть период, дата следующего запуска и признак сортировки. - Cron — системный планировщик сервера, который вызывает скрипт ядра и уже он «доигрывает» накопившиеся агенты и события.
По умолчанию агенты выполняются на хитах: очередной посетитель своим запросом «оплачивает» запуск фоновой задачи. Для расписания это плохо: ночью трафика нет, и импорт сдвигается на утро. Поэтому продакшн почти всегда переводят на cron.
Импорт CSV по расписанию через профиль
Самый прямой путь автоматизации для собственных выгрузок — импорт из CSV с сохранённым профилем. Мастер находится в разделе Контент → Информ. блоки → Импорт → CSV (или из самого инфоблока). Пройдите все шаги — файл, разделители, сопоставление колонок со свойствами, действия с отсутствующими товарами — и на финале нажмите «Сохранить параметры настройки».
Сохранённый профиль можно запускать по расписанию. Ключевые условия автоматизации:
- файл выгрузки должен лежать по фиксированному пути на сервере (например,
/upload/import/catalog.csv), куда 1С или внешняя система кладёт свежую версию; - в профиле включается периодический запуск, и Битрикс регистрирует агент, который вызывает импорт по этому профилю;
- кодировка файла (обычно
windows-1251для классических выгрузок 1С) и структура колонок между запусками не меняются.
max_execution_time и памятью PHP-CLI.Обмен с 1С: расписание на стороне 1С
С типовым обменом по протоколу CommerceML 2 логика обратная: инициатором выступает 1С, а сайт лишь принимает данные скриптом /bitrix/admin/1c_exchange.php. Поэтому «расписание импорта» настраивается не в Битрикс, а в конфигурации 1С.
- В 1С открываете узел обмена (модуль «Обмен с сайтом» / «1С-Битрикс: Управление сайтом»).
- Заводите регламентное задание с нужной периодичностью — например, полная выгрузка каталога раз в сутки, а обмен ценами и остатками — каждые 15–30 минут.
- Сайт при обращении сам разбирает пакеты
import.xmlиoffers.xmlи обновляет инфоблок каталога.
Если инициировать обмен нужно со стороны сайта (1С работает в пассивном режиме), обращение к 1c_exchange.php с параметрами сессии можно повесить на cron. Но это тонкий сценарий: он требует корректной авторизации и обработки многошагового протокола, поэтому чаще оставляют инициатором 1С.
Перевод агентов на cron
Чтобы расписание работало независимо от посетителей, агенты переводят на системный планировщик. Порядок такой:
- В файле
/bitrix/php_interface/dbconn.phpдобавьте строкуdefine("BX_CRON", true); - В
Настройки → Настройки продукта → Настройки модулей → Главный модульснимите флажок «Автоматически выполнять на хитах» для агентов и почтовых событий. - Заведите задание в crontab пользователя сайта:
*/5 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php
Теперь каждые пять минут ядро само проверит очередь агентов и выполнит те, у которых наступило время. Для тяжёлого импорта иногда заводят отдельный CLI-скрипт с вызовом нужной функции обмена и вешают его на cron напрямую — так он не конкурирует за время с остальными агентами.
crontab -l под пользователем bitrix.Как выбрать частоту для разных данных
Единого интервала на весь обмен не существует: справочник товаров меняется редко, а остатки — постоянно. Разделите обмен на несколько заданий с разной периодичностью, чтобы не гонять тяжёлый каталог каждые полчаса.
| Данные | Рекомендуемый интервал | Нагрузка |
|---|---|---|
| Полный каталог, свойства, категории | 1 раз в сутки, ночью | Высокая |
| Цены | каждые 1–4 часа | Средняя |
| Остатки на складах | каждые 15–30 минут | Низкая |
| Статусы заказов | каждые 5–10 минут | Низкая |
Лёгкий обмен остатками и ценами обычно настраивают отдельным пакетом CommerceML (только offers.xml без полной переиндексации свойств) — он проходит за секунды и не блокирует витрину.
Контроль, логи и защита от наложений
Автоматический импорт нельзя запустить и забыть — нужен мониторинг, иначе тихий сбой обнаружится по пустой витрине.
- Наложение запусков. Если импорт не успел завершиться, следующий такой же старт по расписанию наложится и удвоит нагрузку. Ставьте файловую блокировку (
flockв CLI-скрипте) или флаг в базе, снимаемый по завершении. - Логи обмена. Обмен с 1С пишет служебные данные; каталог результатов удобно смотреть в
Магазин → Настройки → Журнал обмена с 1Си в системном журнале событий Битрикс. - Проверка «свежести». Полезно контролировать дату последнего успешного импорта и слать уведомление, если обмена не было дольше ожидаемого интервала.
- Тестовый прогон. Первые запуски профиля делайте вручную и сверяйте количество созданных/обновлённых элементов, прежде чем отдавать задачу на расписание.
Итог
Автоимпорт в 1С-Битрикс собирается из трёх слоёв: профиль или обмен CommerceML определяет данные, агенты задают периодичность, а перевод на cron делает расписание независимым от трафика. Разнесите тяжёлый каталог и лёгкие остатки на разные интервалы, защититесь от наложений и настройте контроль последнего успешного запуска — тогда витрина будет актуальной без ручного вмешательства.
Мы в B2Bsite настраиваем такие обмены под нагрузку боевых магазинов: разбиваем пакеты, оптимизируем cron и добавляем мониторинг, чтобы сбой выгрузки не превращался в пустой каталог. Если нужна стабильная связка сайта и 1С — поможем спроектировать её и взять под сопровождение.
Частые вопросы
Чем агенты отличаются от cron в Битрикс?
Агенты — это функции ядра Битрикс, выполняемые по интервалу. Cron — системный планировщик сервера, который надёжно даёт «такты» для запуска этих агентов независимо от посещаемости сайта.
Почему импорт не запускается ночью, когда нет посетителей?
По умолчанию агенты работают на хитах: их выполняет запрос очередного посетителя. Без трафика задача сдвигается. Решение — перевести агенты на cron.
Как перевести агенты на cron?
Добавьте define("BX_CRON", true) в /bitrix/php_interface/dbconn.php, снимите флажок автоматического выполнения на хитах в настройках Главного модуля и заведите crontab-задачу на вызов /bitrix/modules/main/tools/cron_events.php.
Можно ли настроить расписание обмена с 1С на стороне сайта?
При типовом обмене CommerceML инициатором выступает 1С, поэтому периодичность задаётся регламентным заданием в 1С. Сайт лишь принимает данные через 1c_exchange.php.
Как часто обновлять остатки и цены?
Остатки обычно обновляют каждые 15–30 минут, цены — раз в 1–4 часа, а полный каталог выгружают раз в сутки ночью. Лёгкие данные разумно вынести в отдельный быстрый пакет.
Что делать, чтобы запуски импорта не накладывались?
Используйте блокировку через flock в CLI-скрипте или флаг в базе, который снимается по завершении. Тогда следующий запуск по расписанию не стартует, пока предыдущий не закончил.
Опасно ли включать удаление отсутствующих товаров при автоимпорте?
Да. Если выгрузка сформируется с ошибкой или окажется пустой, каталог может обнулиться. Для регулярного обмена безопаснее деактивировать, а не удалять отсутствующие позиции.
Где смотреть, прошёл ли обмен успешно?
Результаты обмена с 1С видны в журнале обмена в разделе Магазина и в системном журнале событий Битрикс. Дополнительно стоит контролировать дату последнего успешного импорта.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.