Разработка модуля генерации фидов 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка модуля генерации фидов 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка модуля генерации фидов 1С-Битрикс

Маркетолог обнаруживает, что фид для Яндекс.Маркета обновляется раз в сутки через ручной экспорт, а цены в каталоге меняются несколько раз в день из-за выгрузки из 1С. В итоге на маркетплейсе показываются цены, которые уже неактуальны — покупатели кликают, видят другую стоимость, уходят. Стандартный модуль экспорта Битрикс (catalog.export) справляется с базовыми случаями, но при нестандартных требованиях (несколько складов, кастомные свойства, условия по регионам) быстро упирается в ограничения.

Архитектура модуля генерации фидов

Основная задача — сделать генерацию быстрой, гибкой и не зависящей от ручного запуска. Модуль строится вокруг трёх компонентов: движка шаблонов фидов, планировщика обновлений и реестра форматов.

Реестр форматов хранит конфигурации для каждого канала: Яндекс.Маркет (YML), Google Merchant (XML/CSV), ВКонтакте, Avito, Ozon, собственный формат клиента. Каждый формат описывается PHP-классом, реализующим интерфейс FeedFormatInterface:

interface FeedFormatInterface {
    public function getHeader(): string;
    public function renderOffer(array $element, array $prices): string;
    public function getFooter(): string;
    public function getMimeType(): string;
}

Это позволяет добавлять новые форматы, не трогая ядро генератора.

Генератор работает поточно: данные читаются из b_iblock_element, b_catalog_price, b_catalog_product через DataManager::getList с пагинацией (батчи по 500 элементов), немедленно пишутся в файл через fwrite — так генерация фида из 50 000 товаров не требует 512 МБ памяти. Финальный файл атомарно заменяет предыдущий (rename), поэтому краулер никогда не получает частично записанный документ.

Детальный разбор: логика цен и остатков

Это самая вариативная часть. Одному проекту нужна цена «для незарегистрированного пользователя», другому — специальная цена с учётом акции, третьему — минимальная цена среди всех складов.

Модуль реализует резолвер цен — стратегию, выбирающую итоговую цену по набору правил:

$priceResolver = new PriceResolver([
    new DiscountRule($userId),           // применить скидки через Sale\Discount
    new RegionPriceRule($regionCode),    // региональная надбавка
    new MinPriceRule(),                   // взять минимум среди групп цен
]);
$finalPrice = $priceResolver->resolve($productId);

Остатки по складам. Для Ozon и некоторых других площадок нужно указывать остатки по конкретным складам (b_catalog_store_product). Модуль умеет агрегировать остатки по нескольким складам, применять резервы из таблицы b_sale_basket и выводить корректное доступное количество.

Фильтрация товаров. Через интерфейс модуля задаются условия включения в фид: только товары с ненулевым остатком, только определённые разделы каталога, исключение товаров с конкретным значением свойства CML2_EXPORT = N. Условия компилируются в фильтр для CIBlockElement::GetList.

Инкрементальное обновление

Полная перегенерация фида из 50 000 позиций занимает 3–5 минут. Для частого обновления цен это неприемлемо. Модуль поддерживает инкрементальный режим: через событие OnAfterCatalogPriceUpdate фиксируются изменившиеся товары, и раз в 15 минут агент перегенерирует только их строки в фиде через технику partial-update с временным файлом и патчингом.

Мониторинг и статистика

Модуль ведёт таблицу myvendor_feed_log с историей генераций: время начала/конца, количество элементов, размер файла, ошибки. В административном интерфейсе выводится дашборд: когда последний раз обновился каждый фид, сколько товаров попало в выгрузку, какие были отфильтрованы и почему.

Сроки разработки

Объём Состав Срок
Базовый 1 формат (YML или GMC) + планировщик 2–3 недели
Средний 3–5 форматов + резолвер цен + остатки 4–6 недель
Расширенный + инкрементальное обновление + мониторинг + регионы 7–10 недель

Конфигурация торгового каталога (одна или несколько цен, структура складов, наличие торговых предложений) должна быть зафиксирована до начала разработки — она напрямую влияет на архитектуру резолвера.