Разберите выгрузку CommerceML между 1С и сайтом
Парсинг и анализ XML CommerceML 2.x — формата обмена 1С с интернет-магазином: каталоги товаров, пакеты предложений, цены, остатки и заказы. Сверка выгрузок и диагностика ошибок импорта.
Как агент работает
Корень любого файла — КоммерческаяИнформация с атрибутами ВерсияСхемы (обычно 2.08 или 2.10) и ДатаФормирования. В import.xml лежат Классификатор с иерархией Групп и справочником Свойств и Каталог с Товарами: Ид, Наименование, Артикул, привязка к группам, ЗначенияСвойств и ЗначенияРеквизитов, а варианты товара — в ХарактеристикахТовара.
offers.xml несёт ПакетПредложений: по каждому Предложению — Цены с ТипомЦены, ЦенойЗаЕдиницу и Валютой, Количество и остатки по Складам. orders.xml описывает Документ заказа — Номер, Дата, ХозОперация, Сумма, Контрагенты с адресом и контактами, Товары с ценой и скидками, а также ЗначенияРеквизитов со статусом заказа, способом доставки и оплаты.
Диагностика идёт по типовым поломкам обмена: старые выгрузки в windows-1251 вместо UTF-8, составной идентификатор GUID товара с GUID характеристики через решётку в offers.xml, порционные файлы import0_1.xml и offers0_1.xml, пустое Значение как сброс свойства, несовпадение ИдТипаЦены в ТипахЦен и Предложениях, файлы больше 100 МБ, которые читаются через iterparse.
Смысл элементов сверяется с объектами 1С: Товар — Справочник.Номенклатура, ХарактеристикаТовара — Справочник.ХарактеристикиНоменклатуры, ТипЦены — ВидыЦен или ТипыЦенНоменклатуры, заказ — Документ.ЗаказПокупателя или ЗаказКлиента. При этом файлы только читаются: навык не изменяет и не генерирует CommerceML, выгрузку делает 1С:Предприятие, и не разбирает XML регулярками.
Примеры задач
Диагностика падающего обмена 1С → сайт
Агент разберёт import.xml и offers.xml, найдёт битые GUID, пустые обязательные элементы и несоответствия схеме — причину, по которой импорт не проходит.
Сверка выгрузки с учётной системой
Цены, остатки и состав каталога из файла обмена сверяются с ожидаемыми значениями — видно, что потерялось или задвоилось при выгрузке.
Разбор структуры чужой выгрузки
Классификатор, товары, свойства, пакеты предложений и заказы — агент объяснит, что лежит в файле и как это ляжет в ваш каталог.
Вопросы и ответы
Какие версии формата поддерживаются?
CommerceML 2.x — типовые версии схемы 2.08 и 2.10, которые генерирует 1С:Предприятие при обмене с интернет-магазинами и маркетплейсами.
С какими файлами работает навык?
import.xml (классификатор и каталог товаров), offers.xml (пакеты предложений: цены и остатки) и файлы заказов — весь цикл обмена 1С с сайтом.
Поможет ли навык, если импорт падает без внятной ошибки?
Да, это основной сценарий: агент валидирует файл по структуре формата и показывает конкретные элементы, из-за которых сайт или маркетплейс отклоняет выгрузку.
Анализ CommerceML (обмен 1С с сайтом)
Область: Парсинг и интерпретация XML-файлов формата CommerceML 2.x — стандарт обмена данными между 1С:Предприятие и внешними системами (интернет-магазины, маркетплейсы, ERP).
Корневой элемент
<КоммерческаяИнформация> — обязательные атрибуты:
ВерсияСхемы— версия CommerceML (обычно2.08,2.10)ДатаФормирования— дата/время генерации файла
Структура каталога (import.xml)
<КоммерческаяИнформация> → <Классификатор> + <Каталог>
Классификатор
| Элемент | Описание |
|---|---|
<Ид> | Уникальный GUID классификатора |
<Наименование> | Название классификатора |
<Группы> → <Группа> | Иерархия категорий товаров (вложенные <Группы>) |
<Свойства> → <Свойство> | Справочник свойств (характеристик) с вариантами значений |
Каталог товаров
| Элемент | Описание |
|---|---|
<Каталог> → <Товары> → <Товар> | Список товаров |
<Товар> / <Ид> | GUID товара |
<Товар> / <Наименование> | Название товара |
<Товар> / <Артикул> | Артикул (SKU) |
<Товар> / <Группы> → <Ид> | Привязка к категориям классификатора |
<Товар> / <Описание> | Текстовое описание |
<Товар> / <Картинка> | Путь к изображению |
<Товар> / <ЗначенияСвойств> → <ЗначенияСвойства> | Значения характеристик товара |
<Товар> / <ЗначенияРеквизитов> → <ЗначениеРеквизита> | Реквизиты (ВидНоменклатуры, ТипНоменклатуры, Вес и др.) |
Характеристики товаров
<ХарактеристикиТовара> → <ХарактеристикаТовара> — варианты одного товара (размер, цвет):
<Ид>— GUID характеристики<Наименование>— название (например, «Красный, XL»)<Значение>— составное значение характеристики
Структура предложений (offers.xml)
<КоммерческаяИнформация> → <ПакетПредложений>
| Элемент | Описание |
|---|---|
<ПакетПредложений> | Контейнер с ценами и остатками |
<Предложения> → <Предложение> | Список предложений |
<Предложение> / <Ид> | GUID товара (или товар#характеристика) |
<Предложение> / <Цены> → <Цена> | Цены по типам (<ТипЦены>, <ЦенаЗаЕдиницу>, <Валюта>) |
<Предложение> / <Количество> | Остаток на складе |
<Предложение> / <Склад> | Остатки по складам (атрибуты ИдСклада, КоличествоНаСкладе) |
<ТипыЦен> → <ТипЦены> | Справочник типов цен (розничная, оптовая, закупочная) |
Структура заказов (orders.xml)
<КоммерческаяИнформация> → <Документ>
| Элемент | Описание |
|---|---|
<Документ> / <Ид> | Идентификатор заказа |
<Документ> / <Номер> | Номер заказа |
<Документ> / <Дата> | Дата заказа (YYYY-MM-DD) |
<Документ> / <Время> | Время заказа (HH:MM:SS) |
<Документ> / <ХозОперация> | Тип операции («Заказ товара») |
<Документ> / <Роль> | Роль документа (Продавец / Покупатель) |
<Документ> / <Валюта> | Валюта документа |
<Документ> / <Курс> | Курс валюты |
<Документ> / <Сумма> | Итого по документу |
<Документ> / <Контрагенты> → <Контрагент> | Данные покупателя |
<Документ> / <Товары> → <Товар> | Позиции заказа |
<Документ> / <ЗначенияРеквизитов> | Статус, способ доставки, оплата |
Контрагент заказа
| Элемент | Описание |
|---|---|
<Ид> | GUID контрагента |
<Наименование> | ФИО или название организации |
<ПолноеНаименование> | Полное наименование |
<Роль> | «Покупатель» |
<АдресРегистрации> → <АдресноеПоле> | Структурированный адрес (Почтовый индекс, Страна, Регион, Город, Улица, Дом) |
<Контакты> → <Контакт> | Телефон, email (<Тип>, <Значение>) |
Товар в заказе
| Элемент | Описание |
|---|---|
<Ид> | GUID товара (или товар#характеристика) |
<Наименование> | Название позиции |
<БазоваяЕдиница> | Единица измерения (Код, НаименованиеПолное, МеsждународноеСокращение) |
<ЦенаЗаЕдиницу> | Цена |
<Количество> | Количество |
<Сумма> | Сумма позиции |
<Скидки> → <Скидка> | Скидки (Наименование, Сумма, Процент, УчтеноВСумме) |
<ЗначенияРеквизитов> | Доп. реквизиты позиции (ТипНоменклатуры, ВидНоменклатуры, Склад) |
Статусы заказа (в ЗначенияРеквизитов)
| Реквизит | Значения |
|---|---|
Статус заказа | Новый, Принят, Выполняется, Выполнен, Отменён |
Проведён | true / false |
Оплачен | true / false |
Способ доставки | Самовывоз, Курьер, Почта, ТК |
Способ оплаты | Наличные, Безналичные, Карта, Онлайн |
Дата отгрузки | YYYY-MM-DD |
Номер по 1С | Номер документа в 1С после загрузки |
Протокол обмена (sale/exchange)
Последовательность HTTP-запросов
| Шаг | Метод | URL | Описание |
|---|---|---|---|
| 1 | GET | /sale/exchange?type=sale&mode=checkauth | Авторизация (Basic Auth) → cookie, sessid |
| 2 | GET | /sale/exchange?type=sale&mode=init | Инициализация → zip=yes/no, file_limit |
| 3 | POST | /sale/exchange?type=sale&mode=file&filename=orders.xml | Загрузка файла заказов в 1С |
| 4 | GET | /sale/exchange?type=sale&mode=import&filename=orders.xml | Обработка загруженного файла |
| 5 | GET | /sale/exchange?type=sale&mode=query | Запрос изменений из 1С |
Для каталога (catalog/exchange)
| Шаг | Метод | URL | Описание |
|---|---|---|---|
| 1 | GET | /catalog/exchange?type=catalog&mode=checkauth | Авторизация |
| 2 | GET | /catalog/exchange?type=catalog&mode=init | Инициализация |
| 3 | POST | /catalog/exchange?type=catalog&mode=file&filename=import.xml | Загрузка каталога |
| 4 | POST | /catalog/exchange?type=catalog&mode=file&filename=offers.xml | Загрузка предложений |
| 5 | GET | /catalog/exchange?type=catalog&mode=import&filename=import.xml | Обработка каталога |
| 6 | GET | /catalog/exchange?type=catalog&mode=import&filename=offers.xml | Обработка предложений |
Маппинг CommerceML → объекты 1С
| CommerceML элемент | Объект 1С | Комментарий |
|---|---|---|
<Группа> | Справочник.НоменклатурныеГруппы / Справочник.КатегорииНоменклатуры | Зависит от конфигурации |
<Товар> | Справочник.Номенклатура | Основной справочник товаров |
<ХарактеристикаТовара> | Справочник.ХарактеристикиНоменклатуры | Размер, цвет, вариант |
<Свойство> | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения | Произвольные свойства |
<ТипЦены> | Справочник.ВидыЦен (УТ) / Справочник.ТипыЦенНоменклатуры (БП) | Розничная, оптовая |
<Склад> | Справочник.Склады | Складские остатки |
<Контрагент> | Справочник.Контрагенты | Покупатели/поставщики |
<Документ> (заказ) | Документ.ЗаказПокупателя (УТ) / Документ.ЗаказКлиента (ERP) | Заказ с сайта |
<Цена> | РегистрСведений.ЦеныНоменклатуры | Хранение цен |
<Количество> (остаток) | РегистрНакопления.ТоварыНаСкладах / СвободныеОстатки | Текущие остатки |
Типичные ошибки и проблемы
1. Кодировка windows-1251
Старые выгрузки из 1С могут использовать windows-1251 вместо UTF-8:
3. Связь товар#характеристика
В offers.xml идентификатор предложения может быть составным: GUID_товара#GUID_характеристики. Обязательно split('#'):
4. Порционная выгрузка
Большие каталоги разбиваются на файлы: import0_1.xml, import0_2.xml... Каждый файл — самостоятельный XML с тем же корневым элементом. Нужно обрабатывать все файлы:
5. Пустые значения свойств
<ЗначенияСвойства> может содержать пустое <Значение/> — это означает сброс свойства. Не игнорировать:
6. Несовпадение ИД типов цен
GUID типов цен в offers.xml → <ТипыЦен> и в самих <Предложение> → <Цена> → <ИдТипаЦены> должны совпадать. Если выгрузка неполная, типы цен могут быть не определены.
7. Большие файлы (>100MB)
Для файлов >100MB используй iterparse вместо parse:
Стандартные имена файлов
| Файл | Назначение |
|---|---|
import.xml | Каталог товаров (классификатор + товары) |
offers.xml | Цены и остатки |
orders.xml | Заказы (выгрузка из сайта в 1С) |
import0_1.xml | Порционная выгрузка каталога (часть 1) |
offers0_1.xml | Порционная выгрузка предложений (часть 1) |
Типичные задачи анализа
| Задача | Что делать |
|---|---|
| Извлечь каталог товаров | Разобрать <Классификатор> → <Группы> + <Каталог> → <Товары>, построить дерево категорий |
| Сравнить цены | Сопоставить <Предложение> / <Ид> с <Товар> / <Ид>, вывести таблицу товар-цена |
| Проверить остатки | Извлечь <Количество> или <Склад КоличествоНаСкладе> из offers.xml |
| Сверить заказы | Сопоставить <Документ> / <Товары> с каталогом по GUID, проверить цены и суммы |
| Найти товары без цен | Найти товары из import.xml, отсутствующие в offers.xml по <Ид> |
| Анализ характеристик | Извлечь <ХарактеристикиТовара>, сгруппировать по товару |
| Проверить загрузку заказов | Сверить orders.xml с ответом 1С (статусы, номера по 1С) |
| Валидация целостности | GUID товаров в offers.xml должны быть в import.xml |
Особенности формата
- GUID идентификаторы: все
<Ид>— UUID v4 в форматеxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - Связь товар-предложение:
<Предложение>/<Ид>=<Товар>/<Ид>(простой) или<Товар>/<Ид>#<Характеристика>/<Ид>(с характеристиками) - Кодировки: обычно UTF-8, реже windows-1251 в старых выгрузках
- Большие файлы: каталоги с 10 000+ товарами — порционная выгрузка (import0_1.xml, import0_2.xml...)
Anti-patterns
- Не изменять CommerceML-файлы — только читать и анализировать
- Не генерировать CommerceML XML — для этого используется 1С:Предприятие
- Не путать с XML ФНС (2-НДФЛ, 3-НДФЛ) — это другой формат
- Не парсить регулярками — только XML-парсер (ElementTree, lxml)
- Не загружать целиком в память файлы >100MB — использовать iterparse
Похожие навыки
Попробуйте этот навык
Зарегистрируйтесь и используйте навык «Анализ CommerceML (обмен 1С с сайтом)» бесплатно.