Как сформировать YML-прайс для Яндекс.Маркета из 1С

· 9 мин

Содержание

Менеджер просит «отдать прайс на Маркет», а в 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. Наименование — коротко и по делу, без служебных приписок вроде «(уценка)» и внутренних кодов.
  2. Цена — у товара должен быть заполнен нужный вид (тип) цен. В «1С:Управление торговлей» это «Виды цен», в «1С:Управление нашей фирмой» — «Типы цен». Выгружать будем один конкретный вид.
  3. Группа номенклатуры — она станет категорией в YML. Плоский справочник без групп Маркет примет, но товары будет сложнее модерировать.
  4. Производитель — поле «Производитель» или реквизит с брендом; попадёт в тег <vendor>.
  5. Остаток/доступность — по остатку обработка проставит 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. Понимание этой карты помогает проверить результат и настроить обработку.

Сопоставление полей
Наименование номенклатуры→<name>
Вид/тип цены (выбранный)→<price>
Валюта→<currencyId> (RUB)
Группа номенклатуры→<categoryId> и дерево <categories>
Производитель/бренд→<vendor>
Артикул→<vendorCode>
Штрихкод→<barcode>
Ссылка на изображение→<picture>
Остаток по складу→атрибут available
Характеристики→<param name="...">

Несколько правил, о которые чаще всего спотыкаются:

  • Валюта. В теге <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. Обработка (способ 1 или 3) должна уметь сохранять файл в заданный каталог без участия пользователя.
  2. В конфигураторе или через типовые механизмы заводят регламентное задание и задают расписание — например, раз в час или раз в сутки ночью.
  3. Каталог с файлом публикуют на веб-сервере, чтобы у .yml был постоянный URL. Этот адрес и указывают в кабинете Маркета.

Для файловой базы регламентные задания выполняются только при открытом сеансе. Если база файловая, держите для этого отдельный фоновый сеанс или переносите выгрузку в клиент-серверный вариант.

Частоту обновления согласуйте со здравым смыслом: если цены и остатки меняются раз в день — нет смысла гонять выгрузку каждые 15 минут и грузить сервер.

Как проверить файл до загрузки на Маркет

Не отправляйте первый же сформированный файл сразу в боевой кабинет — иначе отклонённые товары придётся разбирать уже по жалобам модерации. Проверять лучше в таком порядке.

  1. Откройте .yml в браузере. Браузер покажет XML деревом. Если вместо дерева вы видите ошибку разбора — файл невалиден, дальше идти бесполезно.
  2. Прогоните через валидатор XML. Любой онлайн-валидатор или редактор с подсветкой покажет строку с незакрытым тегом или лишним символом.
  3. Сверьте число предложений. Посчитайте теги <offer> и сравните с ожидаемым количеством товаров. Резкое расхождение — признак, что сработал лишний фильтр по складу, цене или группе.
  4. Проверьте кодировку. В заголовке должно стоять encoding="UTF-8", а кириллица в наименованиях — читаться без кракозябр.
  5. Откройте одну-две картинки по ссылкам из <picture>. Если адрес не открывается в браузере, его не откроет и Маркет.

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

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

Почему Яндекс.Маркет не принимает файл

Фид отклонён целиком или часть товаров не прошла модерацию — разберём по симптомам.

Диагностика: выберите симптом

Ещё одна частая причина — неверная кодировка. YML должен быть в UTF-8; если файл сохранён в Windows-1251, кириллица в наименованиях «поедет», и Маркет либо отвергнет фид, либо покажет кракозябры.

Частые вопросы

Чем YML отличается от CommerceML?
YML — формат прайс-листа для Яндекс.Маркета (корневой тег <yml_catalog>). CommerceML — формат обмена между 1С и сайтом (import.xml/offers.xml). Типовая 1С умеет CommerceML, а Маркету нужен YML, поэтому часто требуется конвертация или отдельная обработка.
Можно ли выгрузить YML из 1С:Бухгалтерии?
Прямого механизма нет, и для прайс-листа Бухгалтерия — не лучшая база: в ней нет полноценного учёта остатков по складам и видов цен для розницы. YML обычно формируют из «Управления торговлей», «Розницы» или «Управления нашей фирмой».
Как часто обновлять выгрузку?
По тому, как часто у вас меняются цены и остатки. Если раз в день — достаточно ночной выгрузки по регламентному заданию. Для активной торговли с быстрым движением остатков делают выгрузку несколько раз в день.
Нужен ли программист?
Нет, если подходит готовая внешняя обработка или выгрузка идёт через сайт. Программист нужен только для нестандартной логики — своих правил цен, наценок и фильтров ассортимента.
Почему в YML просят ссылки на картинки, а не сами файлы?
Такой формат у Яндекса: в прайсе передаётся только URL изображения, а само фото Маркет скачивает по этой ссылке. Поэтому картинки должны быть опубликованы на доступном адресе.