Настройка 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 день |







