Настройка YML-выгрузки 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка YML-выгрузки 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1175
  • 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

Настройка YML-выгрузки 1С-Битрикс

YML (Yandex Market Language) — XML-формат, который давно вышел за пределы Яндекс.Маркета. Его используют прайс-агрегаторы (Товары Mail.ru, Price.ru), CRM-системы для импорта каталогов, партнёрские сети для товарных фидов. В 1С-Битрикс генерация YML — штатная функция модуля catalog, но настроек по умолчанию хватает только для простейших каталогов.

Базовая настройка профиля экспорта

Магазин → Настройки → Экспорт каталога → Добавить профиль → Яндекс.Маркет (YML). Параметры:

  • Инфоблок каталога — из какого инфоблока выгружать товары.
  • Тип цены — какой тип цены попадёт в тег <price>. Выбирается один.
  • Валюта — RUR, USD, EUR. Если в каталоге цены в нескольких валютах, в фид попадёт цена, сконвертированная в выбранную валюту.
  • Разделы — можно ограничить выгрузку конкретными разделами инфоблока.
  • Свойства для экспорта — какие свойства инфоблока выгружать как <param>.
  • Файл экспорта — путь к результирующему файлу, например /upload/yml/feed.xml.

После сохранения — кнопка «Экспортировать». Файл генерируется и доступен по URL.

Структура YML-файла

Валидный YML содержит:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="2024-01-15 12:00">
  <shop>
    <name>Название магазина</name>
    <company>Юрлицо</company>
    <url>https://site.ru</url>
    <currencies>
      <currency id="RUR" rate="1"/>
    </currencies>
    <categories>
      <category id="1">Электроника</category>
      <category id="2" parentId="1">Смартфоны</category>
    </categories>
    <offers>
      <offer id="123" available="true">
        <url>https://site.ru/product/123/</url>
        <price>79990</price>
        <categoryId>2</categoryId>
        <picture>https://site.ru/upload/photo.jpg</picture>
        <name>Смартфон Samsung Galaxy S24</name>
        <vendor>Samsung</vendor>
        <param name="Память">256 ГБ</param>
      </offer>
    </offers>
  </shop>
</yml_catalog>

<categories> формируется из разделов инфоблока. <offers> — из элементов. Связь через <categoryId>id раздела.

Что стандартный профиль делает неправильно

1. Торговые предложения. Если у товара есть SKU (инфоблок торговых предложений), стандартный профиль генерирует <offer> для каждого предложения. Но <name> берёт из предложения, а не из основного товара. Результат: вместо «Кроссовки Nike Air Max» — «Кроссовки Nike Air Max — Белый, 42». Для Яндекс.Маркета это нормально, для прайс-агрегатора — нет.

2. Множественные фото. Стандартный экспорт берёт DETAIL_PICTURE как основное фото. Дополнительные фото из множественного свойства (например, MORE_PHOTO) нужно явно добавить в настройках профиля. Каждое фото — отдельный тег <picture>.

3. Фильтрация. Нет фильтра «только товары с остатком > 0». Выгружаются все активные элементы. Чтобы скрыть товары без остатка — либо деактивировать их (ломает SEO), либо дорабатывать профиль.

4. Спецсимволы. Символы &, <, > в описании ломают XML. Стандартный профиль экранирует их, но если в свойствах инфоблока встречается «сырой» HTML — фид может стать невалидным. Проверяйте через xmllint или онлайн-валидатор YML.

Доработка профиля экспорта

Файл обработчика: /bitrix/modules/catalog/load/yandex_run.php. Не редактируйте его напрямую — потеряется при обновлении. Скопируйте в /bitrix/php_interface/include/catalog_export/ под новым именем и зарегистрируйте как кастомный профиль.

Частые доработки:

  • Фильтр по остаткам. Добавьте в arFilter условие >CATALOG_QUANTITY => 0 или проверку через CCatalogStoreProduct для мультискладовости.
  • Свой формат <name>. Формируйте название как «Бренд + Модель + Ключевое свойство» вместо стандартного NAME.
  • <oldprice> для скидок. Стандартный профиль не выгружает зачёркнутую цену. Добавьте тег <oldprice>, подставляя значение из другого типа цены (например, «Розничная до скидки»).
  • <delivery-options>. Тег для Яндекс.Маркета с условиями доставки. Не генерируется стандартным профилем.
  • <sales_notes>. Примечание для покупателя (минимальная сумма заказа, условия). До 50 символов.

Автоматическая генерация

Cron-задача для регулярного обновления фида:

*/30 * * * * /usr/bin/php /var/www/bitrix/modules/catalog/load/yandex_run.php PROFILE_ID

Или через агент Битрикс в настройках профиля — опция «Периодический экспорт». Агент запускается через cron_events.php. Интервал — 30–60 минут для большинства магазинов.

Для каталогов 50 000+ товаров генерация YML может занимать 3–5 минут. Убедитесь, что max_execution_time в PHP достаточен, или используйте пошаговую генерацию (разбивка на части по N элементов за итерацию).

Задача Время
Базовая настройка стандартного профиля 30 мин
Кастомный профиль с фильтрацией и доп. тегами 3–5 ч
Профиль + cron + мониторинг валидности 1 день