Формирование XML-файлов в 1С:Предприятие — ключевой навык для автоматизации обмена данными между системами. Без корректно настроенной выгрузки невозможно синхронизировать каталоги товаров с интернет-магазином, передавать заказы в бухгалтерию или интегрироваться с логистическими сервисами. При этом многие пользователи сталкиваются с ошибками при генерации XML: от неверной структуры документа до проблем с кодировкой.
В этой статье вы найдёте пошаговые инструкции для создания XML в типовой и управляемой конфигурациях 1С 8.3, примеры кода для распространённых задач (выгрузка номенклатуры, прайс-листов, заказов), а также разбор типичных ошибок. Материал будет полезен как начинающим администраторам, так и разработчикам, которые хотят оптимизировать процессы обмена данными.
Зачем нужен XML в 1С и где он применяется
Формат XML (eXtensible Markup Language) стал де-факто стандартом для обмена структурированными данными между разными системами. В экосистеме 1С он используется для:
- 📦 Выгрузки каталогов товаров на маркетплейсы (Wildberries, Ozon, Яндекс.Маркет) или собственные интернет-магазины на Bitrix, OpenCart.
- 📊 Обмена документами с контрагентами (счёта, накладные, акты) в формате
УПДилиЭДО. - 🔄 Синхронизации между разными базами 1С (например, между 1С:УТ и 1С:Бухгалтерией).
- 📈 Импорта/экспорта справочников (номенклатура, контрагенты, сотрудники) при миграции данных.
Главное преимущество XML перед другими форматами (например, CSV или JSON) — возможность сохранять иерархическую структуру данных и метаинформацию (атрибуты, пространства имён). Это критично для документооборота, где важны не только сами данные, но и их контекст (например, валюта цены, единица измерения товара).
⚠️ Внимание: Если вы настраиваете обмен с маркетплейсами, уточните актуальные требования к структуре XML в их документации. Например, Wildberries и Ozon регулярно обновляют схемы для выгрузки карточек товаров.
Подготовка 1С к работе с XML: проверка настроек
Перед тем как приступить к созданию XML, убедитесь, что ваша конфигурация 1С:Предприятие 8.3 готова к обмену данными:
- Права доступа. У пользователя, от имени которого будет выполняться выгрузка, должны быть права на чтение справочников и документов, а также на использование внешних обработок (если планируете использовать их для генерации XML).
- Кодировка. По умолчанию 1С работает с кодировкой
UTF-8, но некоторые системы (например, старые версии Bitrix) могут требоватьwindows-1251. Проверьте настройки вАдминистрирование → Настройки программы → Обмен данными. - Версия платформы. Для работы с современными XML-схемами рекомендуется версия 1С:Предприятие 8.3.20+. В старых версиях могут отсутствовать методы для работы с пространствами имён.
Если вы используете управляемые формы, убедитесь, что в настройках конфигуратора включена поддержка XDTO (если планируете работать со сложными схемами). Для этого:
- Откройте конфигуратор (
Файл → Конфигуратор). - Перейдите в
Сервис → Параметры. - На вкладке
Запуск 1С:Предприятияпроверьте, что установлен флажокИспользовать управляемые формы в обычном приложении.
Способы создания XML в 1С: сравнение методов
В 1С:Предприятие 8.3 есть несколько способов генерации XML-файлов. Выбор зависит от задачи, объёма данных и требований к гибкости:
| Метод | Когда использовать | Плюсы | Минусы |
|---|---|---|---|
| ЗаписьXML | Простые структуры, небольшие объёмы данных | Простота, не требует знания XDTO | Ограниченные возможности форматирования |
| XDTO | Сложные схемы с пространствами имён (например, для ЭДО) | Поддержка XSD-схем, валидация | Требует настройки пакетов XDTO |
| Внешние обработки | Повторяющиеся задачи (например, еженедельная выгрузка прайса) | Гибкость, возможность доработки | Нужны права на подключение обработок |
| HTTP-Сервисы | Обмен данными в реальном времени (например, с сайтом) | Автоматизация, интеграция с API | Сложность настройки, требует знаний программирования |
Для большинства задач по выгрузке справочников (номенклатура, контрагенты) или документов (заказы, счета) достаточно метода ЗаписьXML. Если же вам нужно сформировать XML по строгой схеме (например, для ФНС или ЭДО), лучше использовать XDTO.
Перед выбором метода проверьте, поддерживает ли система-получатель XML с пространствами имён. Например, Wildberries требует строгую структуру с атрибутами xmlns, которые проще сформировать через XDTO.
Пошаговая инструкция: как создать XML в 1С через ЗаписьXML
Рассмотрим самый распространённый сценарий: выгрузка справочника Номенклатура в XML-файл для дальнейшего импорта на сайт. Используем встроенный объект ЗаписьXML.
Шаг 1. Подготовка данных
Откройте 1С:Предприятие в режиме 1С:Предприятие и выполните:
- Перейдите в раздел
Справочники → Номенклатура. - Откройте отчёт
Все номенклатурыили создайте новый запрос для выборки нужных данных. - Экспортируйте данные в таблицу значений (например, через кнопку
Ещё → Выгрузить в таблицу).
Шаг 2. Создание объекта ЗаписьXML
В модуле (например, в обработке или отчёте) добавьте следующий код:
// Создаём объект для записи XML
ЗаписьXML = Новый ЗаписьXML;
// Указываем путь к файлу
ПутьКФайлу = "C:\Export\Номенклатура.xml";
// Открываем файл для записи
ЗаписьXML.ОткрытьФайл(ПутьКФайлу, "UTF-8");
Шаг 3. Формирование структуры XML
Теперь последовательно записываем данные в XML. Пример для справочника номенклатуры:
// Начинаем корневой элемент
ЗаписьXML.ЗаписатьНачалоЭлемента("КаталогТоваров");
// Проходим по таблице с данными
Для Каждого Строка Из ТаблицаДанных Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Товар");
// Записываем атрибуты
ЗаписьXML.ЗаписатьАтрибут("Код", Строка.Код);
ЗаписьXML.ЗаписатьАтрибут("Артикул", Строка.Артикул);
// Записываем вложенные элементы
ЗаписьXML.ЗаписатьНачалоЭлемента("Наименование");
ЗаписьXML.ЗаписатьТекст(Строка.Наименование);
ЗаписьXML.ЗаписатьКонецЭлемента(); // Закрываем Наименование
ЗаписьXML.ЗаписатьНачалоЭлемента("Цена");
ЗаписьXML.ЗаписатьТекст(Формат(Строка.Цена, "ЧЦ=2; ЧРД='.'"));
ЗаписьXML.ЗаписатьКонецЭлемента(); // Закрываем Цена
ЗаписьXML.ЗаписатьКонецЭлемента(); // Закрываем Товар
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента(); // Закрываем КаталогТоваров
ЗаписьXML.Закрыть();
Шаг 4. Проверка результата
После выполнения кода откройте сгенерированный файл Номенклатура.xml в любом текстовом редакторе или валидаторе (например, XML Validator). Убедитесь, что:
- 🔹 Структура соответствует ожидаемой (корневой элемент
<КаталогТоваров>содержит список<Товар>). - 🔹 Все символы отображаются корректно (нет "кракозябр" из-за неверной кодировки).
- 🔹 Числовые значения (цена, количество) записаны с правильным разделителем (
.вместо,).
☑️ Проверка XML перед выгрузкой
⚠️ Внимание: Если в наименованиях товаров есть символы&,<или>, их нужно экранировать с помощью методаЗаписьXML.ЗаписатьЭкранированныйТекст(). Иначе XML будет с ошибками.
Работа с XDTO: создание XML по строгой схеме
Если вам нужно сформировать XML по фиксированной схеме (например, для ЭДО или ФНС), используйте механизм XDTO. Он позволяет:
- 📋 Привязываться к
XSD-схемам (описанию структуры XML). - 🔍 Валидировать данные перед записью.
- 🌐 Работать с пространствами имён (
xmlns).
Пример создания XML для счета-фактуры с использованием XDTO:
Шаг 1. Импорт XSD-схемы
Скачайте XSD-схему для нужного документа (например, с сайта ФНС) и импортируйте её в 1С:
- Откройте конфигуратор.
- Перейдите в
Файл → Открытьи выберите XSD-файл. - В открывшемся окне нажмите
Импортироватьи сохраните пакет XDTO.
Шаг 2. Формирование объекта XDTO
В модуле используйте следующий код:
// Создаём фабрику XDTO
ФабрикаXDTO = Новый ФабрикаXDTO();
// Загружаем пакет с импортированной схемой
Пакет = ФабрикаXDTO.Пакеты.XDTO.Добавить("http://example.com/schema");
Пакет.ПространствоИменURI = "urn:document:invoice";
Пакет.Загрузить();
// Создаём объект документа
ДокументXML = ФабрикаXDTO.Sоздать("urn:document:invoice", "Invoice");
// Заполняем данные
ДокументXML.Номер = "INV-12345";
ДокументXML.Дата = ТекущаяДата();
ДокументXML.Поставщик.Наименование = "ООО Ромашка";
ДокументXML.Покупатель.Наименование = "ИП Васильев";
// Добавляем строки товара
СтрокаТовара = ДокументXML.Строки.Добавить();
СтрокаТовара.Наименование = "Стул офисный";
СтрокаТовара.Количество = 5;
СтрокаТовара.Цена = 2500.00;
Шаг 3. Сохранение в файл
Преобразуйте объект XDTO в XML и сохраните:
// Создаём писатель XML
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Export\Invoice.xml", "UTF-8");
// Сериализуем объект XDTO в XML
СериализаторXDTO = Новый СериализаторXDTO();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ДокументXML);
// Закрываем файл
ЗаписьXML.Закрыть();
Готовый XML будет соответствовать импортированной схеме, что гарантирует его корректную обработку системой-получателем.
Что делать, если XSD-схема не подходит?
Если импортированная схема не полностью соответствует вашим данным, вы можете создать собственный пакет XDTO в конфигураторе (Объекты → Пакеты XDTO) и определить в нём нужные типы и элементы.
Типичные ошибки при генерации XML в 1С и как их избежать
Даже опытные пользователи 1С сталкиваются с проблемами при работе с XML. Вот самые распространённые ошибки и способы их решения:
| Ошибка | Причина | Решение |
|---|---|---|
Ошибка при записи XML: неверный формат данных |
Попытка записать недопустимые символы (&, <) |
Используйте ЗаписьXML.ЗаписатьЭкранированныйТекст() |
| Кракозябры вместо кириллицы | Неверная кодировка (например, windows-1251 вместо UTF-8) |
Явно указывайте кодировку при открытии файла: ЗаписьXML.ОткрытьФайл(..., "UTF-8") |
Не найден пакет XDTO |
Не импортирована XSD-схема или неверное пространство имён | Проверьте URI пространства имён в коде и в пакете XDTO |
| XML не проходит валидацию | Нарушена структура (отсутствует обязательный элемент) | Используйте валидаторы вроде XML Validator или СериализаторXDTO.Проверить() |
Ещё одна частая проблема — большой размер XML-файла при выгрузке крупных справочников. Чтобы оптимизировать процесс:
- 🔹 Используйте постраничную выгрузку (например, по 1000 записей за раз).
- 🔹 Архивируйте XML на лету с помощью
ЗаписьGZip. - 🔹 Для повторяющихся данных (например, единицы измерения) используйте ссылки вместо дублирования.
⚠️ Внимание: При обмене с 1С:Бухгалтерией через XML убедитесь, что версии конфигураций совместимы. Например, выгрузка из 1С:УТ 11.4 в 1С:Бухгалтерию 3.0 требует специальных правил конвертации.
Автоматизация выгрузки XML: обработки и регламентные задачи
Если выгрузка XML нужна регулярно (например, ежедневный прайс-лист), автоматизируйте процесс с помощью:
1. Внешние обработки
Создайте обработку с формой, где пользователь может:
- 📅 Выбрать период данных.
- 📌 Указать путь для сохранения XML.
- ⚙️ Настроить параметры выгрузки (кодировку, структуру).
Пример кода для кнопки Выгрузить:
Процедура Выгрузить(Команда)
ПутьКФайлу = ЭлементыФормы.ПутьКФайлу.Значение;
ДатаНачала = ЭлементыФормы.ДатаНачала.Значение;
// Получаем данные
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ПометкаУдаления = ЛОЖЬ";
Результат = Запрос.Выполнить();
ТаблицаДанных = Результат.Выгрузить();
// Формируем XML
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ПутьКФайлу, "UTF-8");
// ... код формирования XML (см. выше)
ЗаписьXML.Закрыть();
Сообщить("XML успешно выгружен в файл: " + ПутьКФайлу);
КонецПроцедуры
2. Регламентные задачи
Для полностью автоматической выгрузки (например, ночью) настройте регламентное задание:
- Перейдите в
Администрирование → Поддержка и обслуживание → Регламентные задания. - Создайте новое задание с типом
Выполнить код. - Укажите расписание (например, ежедневно в 2:00).
- Вставьте код для генерации XML (аналогично примеру выше).
Для отслеживания ошибок добавьте в код отправку уведомления администратору:
Попытка
// Код выгрузки XML
Исключение
ТекстОшибки = ОписаниеОшибки();
ПочтовыйПрофиль = ПолучитьОбъектПоСсылке(СсылкаНаПочтовыйПрофиль);
ОтправкаПисьма = Новый ИнтернетПочта;
ОтправкаПисьма.Адресат = "admin@example.com";
ОтправкаПисьма.Тема = "Ошибка выгрузки XML";
ОтправкаПисьма.Текст = ТекстОшибки;
ОтправкаПисьма.Отправить(ПочтовыйПрофиль);
КонецПопытки;
Регулярная выгрузка XML через регламентные задачи экономит время, но требует мониторинга логов. Настройте уведомления об ошибках, чтобы быстро реагировать на сбои.
Практические примеры: XML для популярных задач
Разберём готовые решения для типовых сценариев обмена данными.
1. Выгрузка прайс-листа для интернет-магазина
Многие CMS (например, Bitrix или OpenCart) требуют XML с определённой структурой. Пример для выгрузки цен и остатков:
ЗаписьXML.ЗаписатьНачалоЭлемента("ПрайсЛист");
ЗаписьXML.ЗаписатьАтрибут("ДатаФормирования", Формат(ТекущаяДата(), "ДЛФ=DT"));
Для Каждого Товар Из ТаблицаТоваров Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Предложение");
ЗаписьXML.ЗаписатьАтрибут("id", Товар.Артикул);
ЗаписьXML.ЗаписатьНачалоЭлемента("Цены");
ЗаписьXML.ЗаписатьНачалоЭлемента("Цена");
ЗаписьXML.ЗаписатьАтрибут("Валюта", "RUB");
ЗаписьXML.ЗаписатьТекст(Товар.Цена);
ЗаписьXML.ЗаписатьКонецЭлемента(); // Цена
ЗаписьXML.ЗаписатьКонецЭлемента(); // Цены
ЗаписьXML.ЗаписатьНачалоЭлемента("Количество");
ЗаписьXML.ЗаписатьТекст(Товар.Остаток);
ЗаписьXML.ЗаписатьКонецЭлемента(); // Количество
ЗаписьXML.ЗаписатьКонецЭлемента(); // Предложение
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента(); // ПрайсЛист
2. Обмен заказами с 1С:Бухгалтерией
Для передачи заказов покупателей из 1С:Управление торговлей в 1С:Бухгалтерию используйте универсальный формат обмена:
// Формируем заголовок документа
ЗаписьXML.ЗаписатьНачалоЭлемента("Документ");
ЗаписьXML.ЗаписатьАтрибут("Тип", "ЗаказПокупателя");
ЗаписьXML.ЗаписатьАтрибут("Номер", Заказ.Номер);
ЗаписьXML.ЗаписатьАтрибут("Дата", Формат(Заказ.Дата, "ДЛФ=D"));
// Записываем контрагента
ЗаписьXML.ЗаписатьНачалоЭлемента("Контрагент");
ЗаписьXML.ЗаписатьАтрибут("ИНН", Заказ.Контрагент.ИНН);
ЗаписьXML.ЗаписатьТекст(Заказ.Контрагент.Наименование);
ЗаписьXML.ЗаписатьКонецЭлемента();
// Записываем табличную часть
ЗаписьXML.ЗаписатьНачалоЭлемента("Товары");
Для Каждого СтрокаТовара Из Заказ.Товары Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Товар");
ЗаписьXML.ЗаписатьАтрибут("Код", СтрокаТовара.Номенклатура.Код);
ЗаписьXML.ЗаписатьТекст(СтрокаТовара.Количество);
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента(); // Товары
ЗаписьXML.ЗаписатьКонецЭлемента(); // Документ
3. Выгрузка для Wildberries или Ozon
Маркетплейсы требуют строгую структуру XML с обязательными полями. Пример для карточки товара на Wildberries:
<?xml version="1.0" encoding="UTF-8"?>
<yml_catalog date="2026-05-20 12:00">
<shop>
<name>Магазин Одежды</name>
<company>ООО Мода</company>
<url>https://example.com</url>
<currencies>
<currency id="RUB" rate="1"/>
</currencies>
<categories>
<category id="1">Одежда</category>
</categories>
<offers>
<offer id="12345" available="true">
<url>https://example.com/product1</url>
<price>1990</price>
<currencyId>RUB</currencyId>
<categoryId>1</categoryId>
<picture>https://example.com/image1.jpg</picture>
<name>Футболка мужская</name>
<vendor>ModaBrand</vendor>
<description>Хлопковая футболка, размеры S-XXL</description>
<param name="Цвет">Белый</param>
<param name="Размер">L</param>
</offer>
</offers>
</shop>
</yml_catalog>
Для генерации такого XML в 1С используйте комбинацию ЗаписьXML и строковых шаблонов.
Как проверить XML перед загрузкой на маркетплейс?
Многие маркетплейсы предоставляют тестовые среды (песочницы), где можно загрузить XML и проверить его на ошибки без последствий для реального каталога. Например, в Wildberries это раздел "Тестовый контур" в личном кабинете.
FAQ: Ответы на частые вопросы
Можно ли создать XML без программирования?
Да, в некоторых конфигурациях (например, 1С:Управление торговлей) есть встроенные обработки для выгрузки в XML. Найдите их в разделе Сервис → Обмен данными. Однако для гибкой настройки структуры всё равно потребуется доработка кода.
Как исправить ошибку "Неверный формат XML" при загрузке на сайт?
Чаще всего это связано с:
- Неэкранированными символами (
&,<,>). ИспользуйтеЗаписьXML.ЗаписатьЭкранированныйТекст(). - Несовпадением структуры с ожидаемой схемой. Проверьте XML через валидатор (например, xmlvalidation.com).
- Неверной кодировкой. Убедитесь, что файл сохранён в
UTF-8.
Как выгрузить XML с фотографиями товаров?
Фотографии в XML обычно передаются в виде ссылок (URL). Алгоритм:
- Загрузите изображения на сервер (FTP или облако).
- В XML добавьте тег с ссылкой, например:
<picture>https://example.com/images/product123.jpg</picture> - Если нужно встроить изображение прямо в XML, закодируйте его в
Base64и поместите в тег<binary>.
Пример кода для кодирования в Base64: