Формат XML стал стандартом де-факто для обмена данными между 1С:Предприятие 8.3 и внешними системами — от бухгалтерских сервисов до маркетплейсов. Однако многие пользователи сталкиваются с трудностями при первом создании XML-файла: неясно, какие настройки использовать, как правильно сформировать структуру документа и избежать ошибок при экспорте. Эта статья закрывает все пробелы — от базовых принципов до нюансов работы с XDTO и ЗаписьXML.

Мы разберём три основных способа генерации XML в 1С 8.3 (встроенные механизмы обмена, программное создание через встроенный язык и использование внешних обработок), а также покажем, как валидировать полученный файл и исправлять типичные ошибки. Особое внимание уделим практическим примерам — от простого экспорта справочника контрагентов до формирования сложных отчётных форм для ФНС.

Зачем нужен XML в 1С 8.3: ключевые сценарии использования

XML в 1С:Предприятие выполняет роль «моста» между внутренними данными программы и внешним миром. Без этого формата невозможно:

  • 📤 Обмен с госорганами: отправка деклараций в ФНС, отчётности в ПФР или Росстат. Например, форма СЗВ-ТД требует строгой XML-структуры, соответствующей приказам ведомств.
  • 🛒 Интеграция с маркетплейсами: выгрузка каталога товаров на Ozon, Wildberries или Яндекс.Маркет через API, где XML — обязательный формат.
  • 🔄 Синхронизация с другими системами: обмен данными между 1С:УТ и 1С:Бухгалтерией, или с CRM-системами вроде Bitrix24.
  • 📊 Импорт/экспорт справочников: перенос номенклатуры, контрагентов или остатков между базами без ручного ввода.

Важно понимать, что XML в 1С — это не просто «файл для выгрузки», а инструмент с жёсткими правилами. Например, ошибка в одном теге может привести к отказу ФНС в приёме декларации, а неверная кодировка (UTF-8 vs Windows-1251) — к краху загрузки данных на маркетплейс.

📊 С какой целью вы чаще всего создаёте XML в 1С?
Для отчётности в госорганы
Для интеграции с маркетплейсами
Для обмена между базами 1С
Для резервного копирования данных

Способ 1: Создание XML через встроенные механизмы обмена

Самый простой метод — использовать готовые обработки обмена, которые уже есть в типовой конфигурации. Например, в 1С:Бухгалтерии 8.3 для этого предназначен раздел Администрирование → Обмен данными с внешними программами.

Алгоритм действий:

  1. Откройте Администрирование → Настройка обмена данными.
  2. Выберите нужный формат обмена (например, Обмен с бухгалтерской программой или Выгрузка в XML для ФНС).
  3. Укажите параметры выгрузки: период, объекты (справочники, документы), путь сохранения файла.
  4. Запустите процесс кнопкой Выгрузить данные.

Преимущество метода — минимальные настройки и гарантия совместимости с типовymi форматами (например, для отчётности). Однако гибкость ограничена: вы не сможете изменить структуру XML или добавить нестандартные поля.

☑️ Подготовка к выгрузке XML через обмен данными

Выполнено: 0 / 4
⚠️ Внимание: Если выгружаете данные для госорганов, убедитесь, что версия формата XML соответствует текущему законодательству. Например, форма 6-НДФЛ обновлялась в 2023 году, и старые шаблоны могут не пройти валидацию.

Способ 2: Программное создание XML через встроенный язык 1С

Для нестандартных задач (например, выгрузки данных в уникальном формате для клиента) придётся писать код. В 1С 8.3 есть два ключевых инструмента:

  1. ЗаписьXML — низкоуровневый механизм для ручного формирования структуры.
  2. XDTO — объектная модель для работы с XML-схемами (рекомендуется для сложных документов).

Пример кода для создания простого XML-файла со справочником контрагентов:


// Создаём объект записи XML

ЗаписьXML = Новый ЗаписьXML;

ЗаписьXML.ОткрытьФайл("C:\Export\Контрагенты.xml", "UTF-8");

// Начинаем документ

ЗаписьXML.ЗаписатьОбъявлениеXML();

ЗаписьXML.ЗаписатьНачалоЭлемента("Контрагенты");

// Выгружаем данные из справочника

Выборка = Справочники.Контрагенты.Выбрать();

Пока Выборка.Следующий() Цикл

ЗаписьXML.ЗаписатьНачалоЭлемента("Контрагент");

ЗаписьXML.ЗаписатьАтрибут("Ид", Выборка.Ссылка.УникальныйИдентификатор());

ЗаписьXML.ЗаписатьЭлемент("Наименование", Выборка.Наименование);

ЗаписьXML.ЗаписатьЭлемент("ИНН", Выборка.ИНН);

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

КонецЦикла;

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

ЗаписьXML.Закрыть();

Этот код сформирует файл вида:

<?xml version="1.0" encoding="UTF-8"?>

<Контрагенты>

<Контрагент Ид="a1b2c3d4-5678-90ef-1234-567890abcdef">

<Наименование>ООО "Ромашка"</Наименование>

<ИНН>1234567890</ИНН>

</Контрагент>

...

</Контрагенты>

💡

Используйте ПоместитьИсключение в блоке Попытка...Исключение, чтобы отловить ошибки записи в файл, например, при нехватке прав доступа к папке.

Способ 3: Использование XDTO для работы со схемами XML

XDTO (XML Data Type Objects) — это механизм 1С для работы с XML-схемами (.xsd). Он позволяет:

  • 📋 Валидировать данные по заданной структуре.
  • 🔄 Преобразовывать объекты 1С в XML и обратно.
  • 🛠️ Работать со сложными вложенными структурами (например, для УПД или Торг-12).

Пример использования XDTO для создания XML по схеме:

// Загружаем XSD-схему (например, для УПД)

ФабрикаXDTO = Новый ФабрикаXDTO;

ФабрикаXDTO.ПространстваИмен.Добавить("http://www.1c.ru/UPF/1.0", "UPF1_0.xsd");

ТипДокумента = ФабрикаXDTO.Тип("Документ");

// Создаём объект по схеме

ДокументОбъект = ФабрикаXDTO.Sоздать(ТипДокумента);

ДокументОбъект.Ид = Новый УникальныйИдентификатор();

ДокументОбъект.Наименование = "Товарная накладная №123";

// Сериализуем в XML

ЗаписьXML = Новый ЗаписьXML;

ЗаписьXML.ОткрытьФайл("C:\Export\Накладная.xml");

ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ДокументОбъект);

ЗаписьXML.Закрыть();

Преимущество XDTOавтоматическая проверка на соответствие схеме. Если вы пропустите обязательное поле или укажете неверный тип данных, 1С выдаст ошибку ещё на этапе формирования XML.

⚠️ Внимание: При работе с XDTO убедитесь, что схема (.xsd) актуальна. Например, схемы для ЭДО (электронного документооборота) обновляются ежегодно.

Типичные ошибки при создании XML в 1С и как их избежать

Даже опытные пользователи сталкиваются с проблемами при генерации XML. Вот самые распространённые:

Ошибка Причина Решение
Ошибка записи в файл Недостаточно прав доступа к папке или диск переполнен. Проверьте права на папку или укажите другой путь (например, %TEMP%).
Несоответствие XML-схеме Пропущено обязательное поле или неверный тип данных. Используйте XDTO для валидации или проверьте схему в XML Spy.
Некорректная кодировка Файл сохранён в Windows-1251, а требуется UTF-8. Явно укажите кодировку в ОткрытьФайл("путь", "UTF-8").
Ошибка при чтении XML Файл повреждён или содержит недопустимые символы. Откройте файл в Notepad++ и проверьте на наличие битых символов.

Частая проблема — неверная структура тегов. Например, если в схеме указано, что элемент <ИНН> должен быть вложен в <Реквизиты>, а вы поместили его напрямую в <Контрагент>, валидатор отклонит файл.

Как проверить XML на ошибки без сторонних программ?

В 1С 8.3 есть встроенный валидатор: используйте метод ФабрикаXDTO.ПрочитатьXML(ЧтениеXML.ОткрытьФайл("путь_к_файлу")). Если структура не соответствует схеме, будет выброшено исключение с описанием ошибки.

Практические примеры: XML для разных задач

Пример 1: Выгрузка справочника номенклатуры для маркетплейса

Маркетплейсы требуют строгой структуры XML с обязательными полями: артикул, цена, остаток, категория. Пример кода:

ЗаписьXML.ЗаписатьНачалоЭлемента("Товары");

Выборка = Справочники.Номенклатура.Выбрать();

Пока Выборка.Следующий() Цикл

ЗаписьXML.ЗаписатьНачалоЭлемента("Товар");

ЗаписьXML.ЗаписатьЭлемент("Артикул", Выборка.Артикул);

ЗаписьXML.ЗаписатьЭлемент("Наименование", Выборка.Наименование);

ЗаписьXML.ЗаписатьЭлемент("Цена", Выборка.ЦенаПродажи);

ЗаписьXML.ЗаписатьЭлемент("Остаток", ОстаткиНоменклатуры.ПолучитьОстаток(Выборка.Ссылка));

ЗаписьXML.ЗаписатьКонецЭлемента();

КонецЦикла;

Пример 2: Формирование отчёта СЗВ-ТД для ПФР

Для СЗВ-ТД требуется XML по схеме ПФР. Здесь без XDTO не обойтись:

ФабрикаXDTO.ПространстваИмен.Добавить("urn:com:oss:scheme:szv-td", "СЗВ-ТД.xsd");

ТипФайла = ФабрикаXDTO.Тип("Файл");

ФайлОбъект = ФабрикаXDTO.Создать(ТипФайла);

ФайлОбъект.ОтчетныйПериод = ТекущаяДата();

💡

Для отчётности в госорганы всегда используйте актуальные схемы XSD. Скачивайте их с официальных сайтов (например, ПФР или ФНС).

Автоматизация создания XML: обработки и расширения

Если вам регулярно приходится генерировать XML, имеет смысл автоматизировать процесс:

  • 📁 Готовые обработки: На сайте Инфостарт или 1С:ИТС можно найти бесплатные и платные решения для выгрузки данных в XML для конкретных задач (например, ВыгрузкаУПДвXML).
  • ⚙️ Расширения конфигурации: Добавьте в типовую конфигурацию собственные обработки с кнопками «Выгрузить в XML» прямо в формы справочников.
  • 🤖 Роботы и RPA: Настройте автоматическую выгрузку по расписанию с помощью 1С:Диадок или RPA-систем.

Пример добавления кнопки в справочник Контрагенты:

  1. Откройте конфигуратор, найдите форму справочника.
  2. Добавьте команду ВыгрузитьВXML с обработчиком:
  3. В обработчике разместите код из Способа 2ЗаписьXML).
  4. Обновите конфигурацию базы.
⚠️ Внимание: При модификации типовой конфигурации сохраните резервную копию перед обновлением. В некоторых случаях изменения могут конфликтовать с обновлениями от 1С.

FAQ: Частые вопросы по работе с XML в 1С 8.3

Можно ли создать XML без программирования?

Да, если используете встроенные механизмы обмена (см. Способ 1). Для нестандартных задач без кода не обойтись.

Как проверить XML на корректность?

Используйте онлайн-валидаторы (например, XMLValidation) или встроенные средства 1С через XDTO.

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

Скорее всего, неверно указана кодировка. Всегда явно задавайте "UTF-8" в методе ОткрытьФайл().

Как выгрузить XML с вложенными табличными частями?

Используйте XDTO или вручную формируйте структуру через ЗаписьXML, последовательно открывая и закрывая теги для строк таблицы.

Где взять актуальные XSD-схемы для отчётности?

Официальные схемы публикуют госорганы: ФНС (nalog.ru), ПФР (pfrf.ru). Для ЭДО — на сайте оператора (например, Диадок или Такском).