Битрикс не экспортирует товары автоматически с помощью агента. Что делать?
Довольно часто возникает задача автоматического экспорта товаров с сайта на 1С-Битрикс в XML или CSV формате на сторонние площадки. В системе для этого предусмотрен довольно мощный инструмент экспорта, размещенный здесь: Админка -> Магазин -> Экспорт данных.
Если вы в него зайдете, то увидите наборы стандартных профилей выгрузки. Для типовых случаев этого бывает достаточно, но в нашей практике примерно на каждом третьем проекте нужно что-то сильно изменить, и стандартные профили битрикса уже не подходят. В этом случае битриксом предусмотрена возможность кастомизации экспорта, которая связана с определенными сложностями.
В частности при кастомизированном экспорте бывает так, что Агент не отрабатывает автоматический запуск. Что в этом случае делать?
Для начала надо убедиться, что наш агент зарегистрирован в системе и происходит его опрос. Для этого нужно найти его в таблице БД и посмотреть. Идем в Настройки -> Производительность -> Таблицы и открываем b_agent, далее в ней находим наш агент:
Если данный агент опрашивался системой, но завершился ошибкой, вы увидите дату в поле DATE_CHECK.
Предлагаю использовать следующий алгоритм для поиска ошибок в экспорте:
- При формировании агента система генерирует функцию вида CCatalogExport::PreGenerateExport(5); (ее можно подсмотреть в соответствующем Агенте). Берем ее, идем в админке Командную PHP-строку (Настройки -> Инструменты -> Командная PHP строка) и запускаем нашу функцию. Предварительно не забудьте подключить модуль каталога CModule::IncludeModule('catalog');, чтобы функция запустилась.
- С огромной вероятностью у вас покажет ошибку в результате выполнения. Вам останется ее только исправить. Может, ошибок будет несколько. Последовательным запуском вы их отловите.
У нас была ситуация, когда при многосайтовости не подтягивались нужные функции, определенные в init.php. Данный метод позволяет легко локализовать подобную ошибку.
После того, как вы это проделали, можно настроить Агента на выполнение на ближайшее время и дождаться его запуска. Всё должно отработать корректно.