Как сформировать YML-прайс для Яндекс.Маркета из 1С
Содержание
Менеджер просит «отдать прайс на Маркет», а в 1С кнопки «выгрузить YML» нет — и начинается поиск по всем разделам. Разберём честно: выгрузить YML из 1С напрямую стандартная конфигурация почти всегда не умеет, потому что YML — это формат Яндекс.Маркета, а не формат обмена 1С.
Получить YML-файл из базы 1С можно тремя путями: внешней обработкой, которая формирует готовый .yml; выгрузкой в CommerceML с последующей конвертацией на стороне сайта; собственной обработкой на запросе, которая пишет XML по правилам Яндекса. Ниже — чем эти способы различаются, как сопоставить поля номенклатуры с тегами YML, как настроить автоматическую выгрузку и почему Маркет отклоняет файл.
Что такое YML и почему в 1С нет кнопки «выгрузить»
YML (Yandex Market Language) — это XML-файл со списком товаров, который магазин отдаёт Яндекс.Маркету и другим прайс-агрегаторам. В нём перечислены категории, цены, остатки, картинки и характеристики товаров.
Важно не путать два формата:
- 🟡 YML — формат прайс-листа для Яндекс.Маркета. Корневой тег
<yml_catalog>, внутри — магазин, категории и предложения. - 🔵 CommerceML — формат обмена между 1С и сайтом (файлы
import.xmlиoffers.xml). Именно его умеет формировать типовой «Обмен с сайтом» в 1С.
Отсюда и путаница. Типовая 1С выгружает каталог в CommerceML, а Яндекс ждёт YML. Это разные схемы с разными тегами, и «переложить» одно в другое без конвертации нельзя.
Если у вас есть сайт на 1С-Битрикс или другой CMS с модулем Маркета, самый короткий путь — выгрузить из 1С CommerceML в сайт, а YML для Яндекса сгенерирует уже сайт. Отдельная выгрузка из 1С тогда вообще не нужна.
Что подготовить в номенклатуре до выгрузки
Качество YML зависит от того, как заполнены справочники. Маркет строгий: товар без цены, категории или с пустым наименованием в выдачу не попадёт. Пройдитесь по справочнику номенклатуры заранее.
Минимум, без которого предложение не примут:
- Наименование — коротко и по делу, без служебных приписок вроде «(уценка)» и внутренних кодов.
- Цена — у товара должен быть заполнен нужный вид (тип) цен. В «1С:Управление торговлей» это «Виды цен», в «1С:Управление нашей фирмой» — «Типы цен». Выгружать будем один конкретный вид.
- Группа номенклатуры — она станет категорией в YML. Плоский справочник без групп Маркет примет, но товары будет сложнее модерировать.
- Производитель — поле «Производитель» или реквизит с брендом; попадёт в тег
<vendor>. - Остаток/доступность — по остатку обработка проставит
available="true"или"false".
Дополнительно пригодятся: артикул, штрихкод, ссылки на картинки (Маркет берёт изображения по URL, а не из базы) и характеристики — они пойдут в теги <param>. Чем полнее заполнены характеристики (мощность, объём, цвет, размер), тем выше шанс, что товар попадёт на нужную карточку Маркета и подтянется к ней в поиске.
Отдельно проверьте дубли. Если одна и та же позиция заведена в номенклатуре дважды, в YML уйдут два <offer> с разными id, и Маркет посчитает их разными товарами. Перед выгрузкой имеет смысл свести дубли или исключить лишние карточки фильтром.
Картинки в YML передаются ссылками на внешний адрес (<picture>https://…</picture>). Если фото хранятся только внутри базы 1С и нигде не опубликованы, в прайсе их не будет — сначала выложите изображения на доступный по HTTP адрес.
Три способа получить YML-файл из 1С
Выбор способа зависит от того, есть ли у вас сайт, бюджет и программист. Сравним по трудозатратам.
| Способ | Когда подходит | Что нужно |
|---|---|---|
| Внешняя обработка | Нет сайта или нужен файл «здесь и сейчас» | Готовая обработка .epf под вашу конфигурацию |
| Через обмен с сайтом | Есть сайт на Битрикс/CMS с модулем Маркета | Настроенный узел обмена CommerceML |
| Своя обработка на запросе | Нестандартные правила, своя логика цен и остатков | Программист 1С |
Способ 1. Внешняя обработка. Самый частый вариант без сайта. Обработку (.epf) открывают через Файл → Открыть, в её форме выбирают вид цен, склад для остатков, группы номенклатуры и жмут «Сформировать». На выходе — готовый .yml. Такие обработки продаются на сторонних площадках, ориентировочно от пары тысяч рублей; встречаются и бесплатные, но их качество нужно проверять.
Способ 2. Через обмен с сайтом. Если сайт уже обменивается с 1С по CommerceML, YML генерирует сам сайт из загруженного каталога. В 1С настройка живёт в разделе интеграции/обмена с сайтом — точное название пункта зависит от конфигурации и релиза. Из 1С вы отдаёте import.xml/offers.xml, а настройку YML-фида делаете уже в CMS.
Способ 3. Своя обработка. Когда нужны нестандартные правила (например, цена с наценкой только для Маркета или фильтр по своему признаку), программист пишет обработку: запрос к номенклатуре, ценам и остаткам, затем сборка XML. Это дороже, но даёт полный контроль над содержимым.
Начните со способа 1 или 2. Своя разработка оправдана, только когда готовые обработки не покрывают вашу логику цен и ассортимента.
Как сопоставить поля 1С с тегами YML
Независимо от способа, под капотом происходит одно и то же: данные номенклатуры раскладываются по тегам YML. Понимание этой карты помогает проверить результат и настроить обработку.
Несколько правил, о которые чаще всего спотыкаются:
- Валюта. В теге
<currencyId>указываютRUB(раньше требовалсяRUR, сейчас принимается рублёвый код). Валюта должна быть объявлена в блоке<currencies>. - Категории. Каждая группа номенклатуры превращается в
<category>со своимid, а вложенная группа ссылается на родителя через атрибутparentId. У товара в<offer>указывается<categoryId>конечной группы. - Цена. Выгружается ровно один выбранный вид цены. Если у товара он не заполнен — предложение либо уйдёт без цены (и Маркет его отклонит), либо не выгрузится вовсе.
- Доступность. Атрибут
availableв теге<offer>показывает наличие. По нулевому остатку обычно ставятavailable="false".
Как устроен готовый YML-файл
Чтобы проверить выгрузку глазами, полезно знать структуру. YML — это обычный XML в кодировке UTF-8. Упрощённый пример того, что должно получиться:
<?xml version="1.0" encoding="UTF-8"?>
<yml_catalog date="2026-10-07 09:00">
<shop>
<name>Мой магазин</name>
<company>ООО «Пример»</company>
<url>https://example.ru</url>
<currencies>
<currency id="RUB" rate="1"/>
</currencies>
<categories>
<category id="1">Инструмент</category>
<category id="2" parentId="1">Дрели</category>
</categories>
<offers>
<offer id="12345" available="true">
<name>Дрель ударная 650 Вт</name>
<url>https://example.ru/drel-650</url>
<price>3990</price>
<currencyId>RUB</currencyId>
<categoryId>2</categoryId>
<picture>https://example.ru/img/12345.jpg</picture>
<vendor>Пример-Тул</vendor>
<vendorCode>DR-650</vendorCode>
<description>Патрон 13 мм, реверс, регулировка оборотов.</description>
<param name="Мощность">650 Вт</param>
</offer>
</offers>
</shop>
</yml_catalog>
Алгоритм сборки у любой обработки одинаковый: сначала запросом собирают дерево групп и пишут блок <categories>, затем обходят номенклатуру с ценами и остатками и на каждый товар пишут <offer>. Технически в 1С это делают через запись XML (ЗаписьXML) или построчную запись текста; если пишете сами — проверьте, что спецсимволы (&, <, >, кавычки) экранируются, иначе файл не пройдёт проверку.
Перед первой боевой выгрузкой сохраните файл и откройте его в браузере или валидаторе XML. Одна незакрытая скобка или неэкранированный символ & в наименовании — и Маркет отвергнет весь фид целиком, а не одну строку.
Автоматическая выгрузка по расписанию
Вручную формировать файл каждый день неудобно. В клиент-серверной базе выгрузку вешают на регламентное задание, которое по расписанию запускает обработку и кладёт свежий .yml в каталог, откуда его по ссылке забирает Яндекс.
Что для этого нужно:
- Обработка (способ 1 или 3) должна уметь сохранять файл в заданный каталог без участия пользователя.
- В конфигураторе или через типовые механизмы заводят регламентное задание и задают расписание — например, раз в час или раз в сутки ночью.
- Каталог с файлом публикуют на веб-сервере, чтобы у
.ymlбыл постоянный URL. Этот адрес и указывают в кабинете Маркета.
Для файловой базы регламентные задания выполняются только при открытом сеансе. Если база файловая, держите для этого отдельный фоновый сеанс или переносите выгрузку в клиент-серверный вариант.
Частоту обновления согласуйте со здравым смыслом: если цены и остатки меняются раз в день — нет смысла гонять выгрузку каждые 15 минут и грузить сервер.
Как проверить файл до загрузки на Маркет
Не отправляйте первый же сформированный файл сразу в боевой кабинет — иначе отклонённые товары придётся разбирать уже по жалобам модерации. Проверять лучше в таком порядке.
- Откройте
.ymlв браузере. Браузер покажет XML деревом. Если вместо дерева вы видите ошибку разбора — файл невалиден, дальше идти бесполезно. - Прогоните через валидатор XML. Любой онлайн-валидатор или редактор с подсветкой покажет строку с незакрытым тегом или лишним символом.
- Сверьте число предложений. Посчитайте теги
<offer>и сравните с ожидаемым количеством товаров. Резкое расхождение — признак, что сработал лишний фильтр по складу, цене или группе. - Проверьте кодировку. В заголовке должно стоять
encoding="UTF-8", а кириллица в наименованиях — читаться без кракозябр. - Откройте одну-две картинки по ссылкам из
<picture>. Если адрес не открывается в браузере, его не откроет и Маркет.
У Яндекс.Маркета в кабинете есть предварительная проверка фида по URL: он разбирает файл и показывает ошибки ещё до публикации. Пользуйтесь ей после каждой доработки обработки — так вы правите причину, а не гадаете по отклонённым товарам.
Когда файл проходит проверку глазами и валидатором, можно указывать его URL в кабинете и запускать регулярную выгрузку.
Почему Яндекс.Маркет не принимает файл
Фид отклонён целиком или часть товаров не прошла модерацию — разберём по симптомам.
&, <) в наименовании или описании. Откройте файл в валидаторе XML и найдите строку с ошибкой.<picture> стоит внутренний путь или битая ссылка. Адрес должен быть внешним и открываться по HTTP.parentId, либо у товара не указан <categoryId>.Ещё одна частая причина — неверная кодировка. YML должен быть в UTF-8; если файл сохранён в Windows-1251, кириллица в наименованиях «поедет», и Маркет либо отвергнет фид, либо покажет кракозябры.
Частые вопросы
Чем YML отличается от CommerceML?
<yml_catalog>). CommerceML — формат обмена между 1С и сайтом (import.xml/offers.xml). Типовая 1С умеет CommerceML, а Маркету нужен YML, поэтому часто требуется конвертация или отдельная обработка.