Формат 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) — к краху загрузки данных на маркетплейс.
Способ 1: Создание XML через встроенные механизмы обмена
Самый простой метод — использовать готовые обработки обмена, которые уже есть в типовой конфигурации. Например, в 1С:Бухгалтерии 8.3 для этого предназначен раздел Администрирование → Обмен данными с внешними программами.
Алгоритм действий:
- Откройте
Администрирование → Настройка обмена данными. - Выберите нужный формат обмена (например,
Обмен с бухгалтерской программойилиВыгрузка в XML для ФНС). - Укажите параметры выгрузки: период, объекты (справочники, документы), путь сохранения файла.
- Запустите процесс кнопкой
Выгрузить данные.
Преимущество метода — минимальные настройки и гарантия совместимости с типовymi форматами (например, для отчётности). Однако гибкость ограничена: вы не сможете изменить структуру XML или добавить нестандартные поля.
☑️ Подготовка к выгрузке XML через обмен данными
⚠️ Внимание: Если выгружаете данные для госорганов, убедитесь, что версия формата XML соответствует текущему законодательству. Например, форма 6-НДФЛ обновлялась в 2023 году, и старые шаблоны могут не пройти валидацию.
Способ 2: Программное создание XML через встроенный язык 1С
Для нестандартных задач (например, выгрузки данных в уникальном формате для клиента) придётся писать код. В 1С 8.3 есть два ключевых инструмента:
ЗаписьXML— низкоуровневый механизм для ручного формирования структуры.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-систем.
Пример добавления кнопки в справочник Контрагенты:
- Откройте конфигуратор, найдите форму справочника.
- Добавьте команду
ВыгрузитьВXMLс обработчиком: - В обработчике разместите код из Способа 2 (с
ЗаписьXML). - Обновите конфигурацию базы.
⚠️ Внимание: При модификации типовой конфигурации сохраните резервную копию перед обновлением. В некоторых случаях изменения могут конфликтовать с обновлениями от 1С.
FAQ: Частые вопросы по работе с XML в 1С 8.3
Можно ли создать XML без программирования?
Да, если используете встроенные механизмы обмена (см. Способ 1). Для нестандартных задач без кода не обойтись.
Как проверить XML на корректность?
Используйте онлайн-валидаторы (например, XMLValidation) или встроенные средства 1С через XDTO.
Почему при выгрузке XML появляются кракозябры?
Скорее всего, неверно указана кодировка. Всегда явно задавайте "UTF-8" в методе ОткрытьФайл().
Как выгрузить XML с вложенными табличными частями?
Используйте XDTO или вручную формируйте структуру через ЗаписьXML, последовательно открывая и закрывая теги для строк таблицы.