К статье
Практический материал

Справочники и Данные · 10 мин

Как выгрузить номенклатуру из 1С в XML

Способы выгрузки номенклатуры из 1С в XML: типовые обработки, универсальный обмен данными, выгрузка через код. Проверка результата, ошибки и ответы на вопросы.

Выгрузка номенклатуры из 1С в XML нужна при обмене с интернет-магазином, маркетплейсами, сайтом поставщика, другой базой 1С или внешними учётными системами. Формат XML удобен тем, что его понимают практически все программы, а структуру файла можно проверить вручную в обычном текстовом редакторе.

В зависимости от конфигурации и задачи есть несколько рабочих способов: типовая обработка «Универсальный обмен данными в формате XML», встроенные механизмы обмена с сайтом (CommerceML), выгрузка списка справочника через табличный документ и собственная обработка на встроенном языке. Ниже разобраны все варианты с условиями выбора.

Перед любой массовой выгрузкой сделайте резервную копию информационной базы. Сама выгрузка данные не меняет, но сопутствующие настройки обмена (регистрация изменений, планы обмена) могут повлиять на дальнейшую синхронизацию, если она уже настроена.

Определите, какой формат XML вам нужен

Под «выгрузкой в XML» скрываются разные задачи, и от требований принимающей стороны зависит выбор инструмента. Уточните у получателя файла: нужен ли формат CommerceML (стандарт обмена с сайтами), формат EnterpriseData, структура универсального обмена 1С или произвольная схема, описанная в техническом задании.

Если файл должен загрузиться в другую базу 1С той же конфигурации — подходит универсальный обмен. Если данные уходят на сайт или в каталог поставщика — чаще всего требуется CommerceML. Если принимающая система самописная — скорее всего, понадобится своя обработка с точным соответствием XSD-схеме заказчика.

Маршрут решения

Как выбрать способ выгрузки

Нужно перенести номенклатуру в другую базу 1С с такой же конфигурациейИспользуйте «Универсальный обмен данными в формате XML» с типовыми правилами
Файл нужен для сайта, маркетплейса или каталогаНастройте обмен с сайтом (CommerceML) в разделе интеграции
Принимающая система требует свою структуру XMLНапишите собственную обработку с записью XML через объект ЗаписьXML
Нужен простой список товаров для просмотра человекомВыведите список справочника в табличный документ и сохраните его

Выгрузка через универсальный обмен данными XML

Обработка «Универсальный обмен данными в формате XML» входит в поставку большинства типовых конфигураций, а также доступна отдельно. В управляемых конфигурациях её можно открыть через раздел «НСИ и администрирование» либо запустить как внешнюю обработку через меню «Файл — Открыть».

Для выгрузки справочника «Номенклатура» потребуются правила обмена. Если база-приёмник имеет ту же конфигурацию, правила можно сформировать автоматически в конфигураторе через обработку конвертации данных или взять типовые правила из комплекта поставки. Без файла правил обработка не сможет сериализовать объекты.

Порядок выгрузки через универсальный обмен
  1. 1
    Сделайте резервную копию базы и откройте обработку «Универсальный обмен данными в формате XML»
  2. 2
    На закладке «Выгружаемые данные» укажите файл правил обмена и дождитесь загрузки дерева правил
  3. 3
    Отметьте галочкой правило выгрузки данных для справочника «Номенклатура»
  4. 4
    Задайте имя файла данных XML и при необходимости настройте отбор по папке, виду номенклатуры или другим условиям
  5. 5
    Нажмите «Выгрузить данные» и дождитесь сообщения об окончании
  6. 6
    Откройте полученный файл в текстовом редакторе и убедитесь, что в нём есть узлы с объектами справочника

Обратите внимание на отборы: по умолчанию выгружается весь справочник, включая помеченные на удаление элементы. Если приёмнику не нужны «мёртвые» позиции, добавьте отбор «ПометкаУдаления = Нет» или выгружайте только конкретную группу товаров.

Выгрузка для сайта через CommerceML

В конфигурациях «Управление торговлей», «Управление нашей фирмой», «Комплексная автоматизация» и ERP есть штатный узел обмена с сайтом. Он формирует файлы в формате CommerceML: каталог товаров (import.xml) и предложения с ценами и остатками (offers.xml). Путь к настройке обычно находится в разделе интеграции или администрирования, пункт «Обмен с сайтами».

Создайте новый узел обмена, укажите, что выгружать: товары, цены, остатки, свойства и картинки. Вместо выгрузки на сайт по сети можно выбрать выгрузку в каталог на диске — тогда 1С просто сформирует XML-файлы в указанной папке, что и требуется для ручной передачи файла.

Простая выгрузка списка без обмена данными

Если цель — передать коллегам или в смежную систему простой перечень товаров с парой реквизитов, полноценный обмен избыточен. Откройте список справочника «Номенклатура», настройте нужные колонки через «Ещё — Изменить форму» (или «Настроить список»), затем выведите список в табличный документ через «Ещё — Вывести список».

Табличный документ сохраняется через «Файл — Сохранить как» в форматы MXL, XLSX, CSV и другие. Напрямую в XML табличный документ не сохраняется, поэтому для получения именно XML этот способ подходит лишь как промежуточный: из Excel файл можно пересохранить или преобразовать сторонними средствами. Для строгого XML используйте варианты из предыдущих разделов.

Собственная обработка выгрузки на встроенном языке

Когда принимающая система задаёт собственную схему XML, пишут внешнюю обработку. Логика простая: запросом выбираются элементы справочника «Номенклатура», затем через объект ЗаписьXML последовательно формируются узлы файла с нужными именами тегов и атрибутами.

bsl
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Обмен\nomenklatura.xml");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Номенклатура");

Запрос = Новый Запрос("ВЫБРАТЬ Ссылка, Код, Наименование, Артикул ИЗ Справочник.Номенклатура ГДЕ НЕ ПометкаУдаления");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    Запись.ЗаписатьНачалоЭлемента("Товар");
    Запись.ЗаписатьАтрибут("Код", Строка(Выборка.Код));
    Запись.ЗаписатьНачалоЭлемента("Наименование");
    Запись.ЗаписатьТекст(Выборка.Наименование);
    Запись.ЗаписатьКонецЭлемента();
    Запись.ЗаписатьНачалоЭлемента("Артикул");
    Запись.ЗаписатьТекст(Выборка.Артикул);
    Запись.ЗаписатьКонецЭлемента();
    Запись.ЗаписатьКонецЭлемента(); // Товар
КонецЦикла;

Запись.ЗаписатьКонецЭлемента(); // Номенклатура
Запись.Закрыть();

Критично соблюдать три правила: экранировать спецсимволы (объект ЗаписьXML делает это автоматически при записи текста), закрывать каждый открытый элемент и записывать файл в кодировке UTF-8 — большинство внешних систем ожидают именно её. Перед сдачей файла заказчику проверьте его валидатором по XSD-схеме, если схема предоставлена.

Проверка результата и типичные ошибки

После выгрузки откройте XML-файл в браузере или редакторе: корректный XML отображается в виде дерева без сообщений об ошибке разбора. Сверьте количество выгруженных позиций с количеством элементов в справочнике по отбору — расхождение укажет на сработавшие фильтры или пропуски из-за ошибок.

Обязательно сделайте контрольную загрузку файла в копию базы-приёмника или в тестовую среду принимающей системы. Только так можно убедиться, что идентификаторы, единицы измерения и ставки НДС сопоставляются корректно, а не просто «файл открылся».

Контрольные точки

Как проверить результат

Файл открывается в браузере
Норма

Отображается дерево элементов без ошибок разбора

Тревожный признак

Сообщение об ошибке XML — незакрытый тег или недопустимый символ

Количество позиций
Норма

Совпадает с числом элементов справочника по отбору

Тревожный признак

Позиций меньше — сработал отбор или есть ошибки выгрузки

Кодировка файла
Норма

UTF-8, русские наименования читаются

Тревожный признак

Кракозябры — неверная кодировка при записи

Загрузка в приёмник
Норма

Товары создаются без дублей, реквизиты заполнены

Тревожный признак

Дубли элементов или пустые реквизиты — проблема синхронизации по идентификаторам

Типичные ошибки
01
Выгрузка без правил обмена — обработка универсального обмена выдаёт ошибку или пустой файл
02
Забытый отбор по пометке удаления — в приёмник попадают архивные и мусорные позиции
03
Синхронизация по наименованию вместо GUID — при загрузке возникают дубли товаров
04
Выгрузка цен без указания вида цен — файл offers.xml оказывается пустым
05
Запись XML вручную через конкатенацию строк — спецсимволы в наименованиях ломают структуру файла

Ограничения и частные случаи

Объёмные каталоги выгружайте порциями: файл на сотни тысяч позиций может не открыться в приёмнике из-за ограничений памяти. В универсальном обмене есть разбивка по количеству объектов, в обмене с сайтом — настройка размера порции. Также учитывайте, что картинки товаров в XML не вкладываются — они выгружаются отдельными файлами со ссылками в узлах.

Если номенклатура содержит характеристики (размеры, цвета), убедитесь, что правила или обработка выгружают и справочник «Характеристики номенклатуры» вместе со связями. Иначе в приёмнике товары появятся, а варианты товаров потеряются.

Итог

Что важно запомнить

Сначала выясните требуемый формат XML у принимающей стороны, затем выбирайте инструмент: универсальный обмен — для переноса между базами 1С, CommerceML — для сайта, своя обработка — для нестандартной схемы. Перед выгрузкой сделайте копию базы, после — проверьте файл разбором в браузере и контрольной загрузкой в тестовую среду.

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

Можно ли выгрузить номенклатуру в XML без конфигуратора и программирования?

Да. Для переноса между одинаковыми конфигурациями достаточно типовой обработки «Универсальный обмен данными в формате XML» и готовых правил, а для сайта — штатного узла обмена с выгрузкой в каталог на диске. Программирование требуется только при нестандартной схеме файла.

Чем XML отличается от выгрузки в Excel для передачи номенклатуры?

XML — структурированный машиночитаемый формат с иерархией, типами данных и возможностью проверки по схеме; его напрямую загружают сайты и учётные системы. Excel удобен для просмотра человеком, но требует от принимающей стороны отдельной настройки импорта и хуже передаёт иерархию групп и связанные данные.

Почему после загрузки в другую базу появились дубли товаров?

Чаще всего синхронизация настроена по наименованию или коду, которые в базах различаются. Надёжный способ — синхронизация по внутреннему уникальному идентификатору (GUID), который сохраняется при обмене между связанными базами. Перед первой загрузкой выполните сопоставление объектов.

Как выгрузить только часть номенклатуры, например одну группу товаров?

В универсальном обмене откройте настройку отбора у правила выгрузки справочника и добавьте условие «Родитель = нужная группа» с учётом иерархии. В обмене с сайтом отбор по группам задаётся в настройках отбора товаров узла обмена.

Выгрузятся ли в XML штрихкоды и единицы измерения?

Зависит от правил или обработки. В типовых правилах конвертации штрихкоды (регистр сведений) и единицы измерения обычно выгружаются вместе с товаром, но это нужно проверить в дереве правил. В собственной обработке эти данные добавляют отдельными запросами к соответствующим регистрам и справочникам.

Файл получился очень большим и не загружается в приёмник. Что делать?

Разбейте выгрузку на порции: в универсальном обмене есть ограничение количества объектов в файле, в обмене с сайтом — настройка размера порции. Альтернатива — выгружать по группам товаров отдельными файлами либо сжать XML в архив ZIP, если приёмник это поддерживает.