Экспорт данных в формат XML из 1С:Предприятие — одна из самых востребованных операций при интеграции с внешними системами, бухгалтерскими сервисами или государственными платформами (например, ФНС, Росалкогольрегулирование). Несмотря на кажущуюся простоту, процесс сохранения в XML таит множество нюансов: от выбора правильной кодировки до обработки специфических типов данных, таких как табличные части или справочники с иерархией.
В этой статье вы найдёте не только пошаговые инструкции для разных версий 1С 8.3 и 8.2, но и разбор типичных ошибок (например, Ошибка при записи XML: Недопустимый символ), а также способы автоматизации экспорта через встроенный язык. Особое внимание уделено экспорту данных с сохранением структуры иерархических справочников — проблема, с которой сталкиваются 78% пользователей при первой попытке выгрузки.
Если вам нужно передать данные в ФСС, ПФР, или синхронизировать 1С с интернет-магазином на Bitrix или Shop-Script — эта инструкция поможет избежать часов дебаггинга и потери данных.
1. Подготовка данных к экспорту: что нужно проверить перед сохранением
Прежде чем сохранять данные в XML, убедитесь, что они соответствуют требованиям целевой системы. Например, ФНС и ПФР предъявляют жесткие требования к структуре файлов: отсутствие пустых тегов, обязательные атрибуты, конкретные форматы дат (ДД.ММ.ГГГГ или ГГГГ-ММ-ДД).
Основные моменты для проверки:
- 📌 Кодировка символов: по умолчанию 1С использует
windows-1251, но многие внешние системы требуютUTF-8. Это критично при работе с кириллицей! - 🗃️ Структура данных: иерархические справочники (например,
Номенклатурас группами) в XML сохраняются как вложенные теги. Если структура нарушена, файл может не пройти валидацию. - 🔢 Типы данных: даты, числа с плавающей точкой и булевы значения (
Истина/Ложь) в XML преобразуются по-разному. Например,Истинаможет стать1илиtrue— это зависит от настройки экспорта. - 🔒 Права доступа: если выгружаете данные из 1С:ЗУП или 1С:Бухгалтерия, убедитесь, что у вашей роли есть права на чтение всех необходимых объектов (например,
РегистрыНакопления.Зарплата).
Для проверки структуры будущего XML-файла можно использовать XSD-схемы (если они предоставлены целевой системой). В 1С есть встроенный механизм валидации по XSD — он доступен через объект ЧтениеXML с параметром УстановитьСхему().
Если вы экспортируете данные для ФНС или ПФР, скачайте актуальные XSD-схемы с их официальных сайтов и проверьте XML перед отправкой. Это сэкономит время на исправление ошибок валидации.
2. Способы сохранения в XML: ручной экспорт vs программный
В 1С:Предприятие есть два основных способа сохранения данных в XML:
- Ручной экспорт через меню
Файл → Сохранить как...(доступен для большинства объектов: справочников, документов, отчетов). - Программный экспорт с использованием встроенного языка (методы
ЗаписатьXML(),ЗаписатьXDTO()и др.).
Ручной экспорт подходит для разовых операций, но имеет ограничения:
- 🚫 Нет контроля над структурой XML (теги формируются автоматически по именам реквизитов).
- 🚫 Нельзя задать пространство имен (
xmlns), что критично для некоторых госсистем. - 🚫 Ограниченный выбор кодировки (обычно только
windows-1251).
Программный экспорт гибче, но требует знания 1С-скриптинга. Например, для сохранения документа РеализацияТоваровУслуг в XML с кастомной структурой можно использовать такой код:
Док = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("РТ-000123");
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Export\RT_123.xml", "UTF-8");
ЗаписьXML.ЗаписатьОбъект(Док);
ЗаписьXML.Закрыть();
Для сложных структур (например, выгрузка каталога номенклатуры с изображениями) лучше использовать XDTO — механизм, позволяющий задавать произвольную структуру XML на основе пакетов XDTO. Пример:
ФабрикаXDTO = Новый ФабрикаXDTO();
Пакет = ФабрикаXDTO.Пакеты().Добавить("http://example.com/ns");
ТипОбъекта = Пакет.Типы().Добавить("КаталогНоменклатуры");
ЗаписьXDTO = Новый ЗаписьXDTO;
ЗаписьXDTO.ОткрытьФайл("C:\Export\catalog.xml");
ЗаписьXDTO.ЗаписатьXML(ОбъектXDTO);
ЗаписьXDTO.Закрыть();
Чем отличается ЗаписатьXML() от ЗаписатьXDTO()?
Метод ЗаписатьXML() сохраняет объект "как есть", используя имена реквизитов 1С в качестве тегов. Это просто, но негибко.
ЗаписатьXDTO() позволяет задать произвольную структуру XML через пакеты XDTO, что критично для интеграции со стандартизированными форматами (например, УПД или Торг-12 в электронном виде).3. Пошаговая инструкция: как сохранить справочник в XML
Рассмотрим самый распространенный сценарий — выгрузку справочника (например, Контрагенты или Номенклатура) в XML. Для этого:
- Откройте справочник в режиме
1С:Предприятие(не в конфигураторе!). - Выделите нужные элементы (или оставьте все, если требуется полная выгрузка).
- Перейдите в меню
Файл → Сохранить как.... - Выберите формат
XML-документ (*.xml). - Укажите путь для сохранения (например,
C:\Export\Контрагенты.xml). - Нажмите "Сохранить" и дождитесь завершения операции.
Если справочник иерархический (например, Номенклатура с группами и подгруппами), в XML он сохранится со вложенной структурой:
<Справочник.Номенклатура>
<Элемент>
<Наименование>Товары</Наименование>
<ЭтоГруппа>1</ЭтоГруппа>
<Элементы>
<Элемент>
<Наименование>Электроника</Наименование>
<ЭтоГруппа>1</ЭтоГруппа>
<Элементы>...</Элементы>
</Элемент>
</Элементы>
</Элемент>
</Справочник.Номенклатура>
🔹 Убедиться, что все обязательные реквизиты заполнены
🔹 Проверить права на чтение справочника
🔹 Очистить кэш 1С (если данные не обновляются)
🔹 Закрыть все формы справочника перед экспортом-->
4. Экспорт документов в XML: нюансы для бухгалтерских форм
Документы (например, ПоступлениеТоваровУслуг, СчетФактураВыданный) экспортируются в XML аналогично справочникам, но с рядом особенностей:
- 📄 Табличные части (например, список товаров в
РеализацияТоваровУслуг) сохраняются как вложенные теги<Товары><Товар>...</Товар></Товары>. - 💰 Суммы и валюты: если документ многовалютный, в XML попадают все курсы и суммы в базовой валюте. Это может увеличить размер файла.
- 🔗 Ссылки на другие объекты: например, поле
Контрагентв документе сохранится как ссылка вида<Контрагент>{UUID}</Контрагент>, а не как наименование.
Для бухгалтерских документов (например, СчетФактура) часто требуется подпись и печать в электронном виде. В этом случае XML должен соответствовать формату ФНС (например, Формат 5.01 для счетов-фактур). Пример структуры:
<Файл>
<Документ>
<СвСчФакт>
<НомерСчФ>123</НомерСчФ>
<ДатаСчФ>2026-05-20</ДатаСчФ>
<СуммаВсего>10000.00</СуммаВсего>
</СвСчФакт>
<ТабличнаяЧасть>...</ТабличнаяЧасть>
</Документ>
</Файл>
Если выгружаемый документ содержит печатные формы (например, УПД или Торг-12), их можно сохранить отдельно через метод ПечатнаяФорма().Сохранить():
Док = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("РТ-000123");
ПФ = Док.ПечатнаяФорма();
ПФ.Сохранить("C:\Export\УПД_123.pdf"); // или в XML, если форма поддерживает
Для документов, отправляемых в госорганы, всегда проверяйте актуальность формата XML на сайте ФНС или ПФР. Например, формат счетов-фактур обновлялся в 2023 и 2026 годах.
5. Распространенные ошибки и их решения
При экспорте в XML пользователи часто сталкиваются с ошибками, которые блокируют процесс или делают файл нечитаемым. Вот самые частые из них и способы их исправления:
| Ошибка | Причина | Решение |
|---|---|---|
Ошибка при записи XML: Недопустимый символ |
В данных есть символы, не поддерживаемые кодировкой (например, ©, ® или неразрывный пробел). |
Используйте UTF-8 или очистите данные от спецсимволов через СтрЗаменить(). |
Ошибка сериализации: Циклическая ссылка |
Объект ссылается сам на себя (например, документ ссылается на себя в табличной части). | Используйте параметр СериализоватьПомеченные = Истина или исключите циклические ссылки вручную. |
| XML-файл не проходит валидацию по XSD | Структура файла не соответствует схеме (отсутствуют обязательные теги или атрибуты). | Проверьте XSD-схему и скорректируйте код экспорта или используйте XDTO. |
Файл не открывается: XML-декларация отсутствует |
Файл сохранен без заголовка <?xml version="1.0"?>. |
Добавьте заголовок вручную или используйте ЗаписьXML.ЗаписатьОбъявлениеXML(). |
Если ошибка связана с большим объемом данных (например, выгрузка справочника с 50 000 элементов), разбейте экспорт на части:
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Счетчик % 1000 = 0 Тогда
ЗаписьXML.Закрыть();
ЗаписьXML.ОткрытьФайл("C:\Export\part_" + Выборка.Счетчик + ".xml");
КонецЕсли;
ЗаписьXML.ЗаписатьОбъект(Выборка);
КонецЦикла;
Для отладки XML используйте бесплатные инструменты вроде XML Notepad или Oxygen XML Editor. Они покажут ошибки структуры и кодировки.
6. Автоматизация экспорта: как настроить регулярную выгрузку
Если данные нужно выгружать в XML регулярно (например, ежедневно для синхронизации с сайтом), имеет смысл автоматизировать процесс. В 1С это можно сделать несколькими способами:
- 🕒 Регламентные задания: настройте задание в
Администрирование → Регламентные задания, которое будет запускать обработку экспорта по расписанию. - 🤖 Внешние обработки: создайте обработку с кнопкой "Экспорт в XML" и запускайте ее вручную или по событию (например, после проведения документа).
- 🔄 Обмен данными: используйте планы обмена (
ОбменДаннымиXML) для синхронизации с другой базой 1С или внешней системой.
Пример кода для регламентного задания (выгрузка ЗаказыПокупателей в XML каждый день в 23:00):
Процедура ВыгрузитьЗаказыВXML() Экспорт
Каталог = "C:\Export\Orders\";
Если Не Каталог.Существует() Тогда
Каталог.Создать();
КонецЕсли;
Выборка = Документы.ЗаказПокупателя.ВыбратьПомеченные();
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(Каталог + "orders_" + ТекущаяДата() + ".xml", "UTF-8");
Пока Выборка.Следующий() Цикл
ЗаписьXML.ЗаписатьОбъект(Выборка);
КонецЦикла;
ЗаписьXML.Закрыть();
КонецПроцедуры
Для интеграции с 1С-Битрикс, Shop-Script или другими CMS можно использовать REST API или HTTP-сервисы. Пример отправки XML на сервер:
HTTPСоединение = Новый HTTPСоединение("api.example.com", 80);
HTTPЗапрос = Новый HTTPЗапрос("/upload/xml");
HTTPЗапрос.УстановитьТелоИзФайла("C:\Export\orders.xml");
Ответ = HTTPСоединение.ВыполнитьЗапрос(HTTPЗапрос);
Если Ответ.КодСостояния <> 200 Тогда
Сообщить("Ошибка отправки: " + Ответ.ПолучитьТекст());
КонецЕсли;
При настройке автоматического экспорта всегда тестируйте процесс на копии базы. Ошибки в коде могут заблокировать работу пользователей!
7. Оптимизация XML-файлов: как уменьшить размер и ускорить обработку
Большие XML-файлы (например, выгрузка каталога номенклатуры с 100 000 позиций) могут занимать гигабайты и медленно обрабатываться. Чтобы оптимизировать их:
- 🗜️ Сжатие: используйте
ZipАрхивдля упаковки XML перед отправкой:Zip = Новый ZipАрхив;Zip.Добавить("C:\Export\catalog.xml", "catalog.xml");
Zip.Закрыть("C:\Export\catalog.zip");
- 🧹 Очистка данных: удаляйте ненужные реквизиты (например,
КомментарийилиПометкаУдаления) перед экспортом. - 🔄 Постраничная выгрузка: разбивайте данные на части (например, по 10 000 записей в файле).
- 📌 Использование ссылок: вместо дублирования данных (например, информации о контрагенте в каждом документе) используйте ссылки на внешние файлы.
Для ускорения чтения XML в целевой системе можно:
- Использовать SAX-парсер вместо DOM (он не грузит весь файл в память).
- Отключить валидацию по XSD, если она не обязательна.
- Применять XSLT-преобразования для конвертации XML в более удобный формат.
Пример XSLT для преобразования XML с данными о номенклатуре в упрощенный формат:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/Справочник.Номенклатура">
<Каталог>
<xsl:for-each select="Элемент">
<Товар>
<Наименование><xsl:value-of select="Наименование"/></Наименование>
<Цена><xsl:value-of select="Цена"/></Цена>
</Товар>
</xsl:for-each>
</Каталог>
</xsl:template>
</xsl:stylesheet>
Как применить XSLT в 1С?
Используйте объект ПреобразованиеXSLT:
XSLT = Новый ПреобразованиеXSLT;
XSLT.Загрузить("C:\Templates\transform.xslt");
Результат = XSLT.Преобразовать(ИсходныйXML);
8. Безопасность: как защитить данные в XML
XML-файлы часто содержат конфиденциальную информацию (например, данные о зарплате, паспортные данные контрагентов). Чтобы защитить их:
- 🔐 Шифрование: используйте
ШифрованиеXML(доступно в 1С 8.3.20+) или внешние инструменты вроде OpenSSL. - 👤 Ограничение доступа: сохраняйте файлы в защищенные папки с правами только для администраторов.
- 🗑️ Очистка метаданных: удаляйте из XML служебную информацию (например, версии 1С, имена пользователей).
- 📜 Электронная подпись: для документов, отправляемых в госорганы, используйте КриптоПро или встроенные механизмы 1С.
Пример шифрования XML с помощью КриптоПро:
Шифрование = Новый ШифрованиеXML;
Шифрование.УстановитьСертификат(ПолучитьСертификатПоОтпечатку("..."));
Шифрование.ЗашифроватьФайл("C:\Export\data.xml", "C:\Export\data_enc.xml");
Для удаления метаданных из XML можно использовать регулярные выражения:
ТекстXML = Новый ЧтениеТекста("C:\Export\data.xml");
Строка = ТекстXML.Прочитать();
Строка = СтрЗаменить(Строка, "<Версия1С>8.3.22</Версия1С>", "");
ЗаписьТекста = Новый ЗаписьТекста("C:\Export\data_clean.xml");
ЗаписьТекста.Записать(Строка);
Чтение = Новый ЧтениеДвоичныхДанных("C:\Export\large.xml");
Запись = Новый ЗаписьДвоичныхДанных("C:\Export\large_enc.xml");
Пока Чтение.ПрочитатьБлок(Блок, 1024) > 0 Цикл
Запись.ЗаписатьБлок(ШифроватьБлок(Блок));
КонецЦикла;
-->
⚠️ Внимание: При экспорте данных в госорганы (например, ФНС или ПФР) проверьте актуальные требования к формату и шифрованию на их официальных сайтах. Правила могут меняться ежегодно!
FAQ: Частые вопросы по экспорту XML из 1С
Как сохранить отчет (например, оборотно-сальдовую ведомость) в XML?
Отчеты сохраняются в XML аналогично справочникам: откройте отчет, сформируйте его, затем выберите Файл → Сохранить как → XML-документ. Для сложных отчетов (например, Анализ субконто) может потребоваться программный экспорт через ТабличныйДокумент.ЗаписатьXML().
Пример кода:
Отчет = Отчеты.ОборотноСальдоваяВедомость.Создать();
Отчет.Сформировать();
ТабДок = Отчет.ТабличныйДокумент;
ТабДок.ЗаписатьXML("C:\Export\ОСВ.xml");
Можно ли сохранить в XML данные из регистра накопления?
Да, но только программно. Регистры накопления (например, РегистрНакопления.ТоварыНаСкладах) не имеют интерфейса для ручного экспорта. Используйте код:
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Export\stock.xml");
Выборка = РегистрыНакопления.ТоварыНаСкладах.Выбрать();
Пока Выборка.Следующий() Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Запись");
ЗаписьXML.ЗаписатьАтрибут("Товар", Выборка.Товар);
ЗаписьXML.ЗаписатьАтрибут("Количество", Выборка.КоличествоОстаток);
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
Почему в XML вместо кириллицы отображаются знаки вопроса?
Это проблема с кодировкой. По умолчанию 1С сохраняет XML в windows-1251, но многие программы ожидают UTF-8. Решение:
- Явно укажите кодировку при сохранении:
ЗаписьXML.ОткрытьФайл(..., "UTF-8"). - Если файл уже сохранен, конвертируйте его через Notepad++ или
iconv:
iconv -f windows-1251 -t utf-8 input.xml > output.xml
Как экспортировать в XML данные с картинками (например, каталог номенклатуры с фото)?
XML не предназначен для хранения бинарных данных, но есть два варианта:
- Ссылки на файлы: сохраните изображения в папку, а в XML запишите пути:
<Товар><Наименование>Монитор</Наименование>
<Фото>C:\Export\Images\monitor1.jpg</Фото>
</Товар>
- Base64: закодируйте изображение в текст:
Base64Строка = Base64Строка(Картинка.ПолучитьДвоичныеДанные());ЗаписьXML.ЗаписатьЭлемент("Фото", Base64Строка);
Можно ли автоматически отправлять XML по email после экспорта?
Да, используйте встроенный механизм Почта или ИнтернетПочта:
Почта = Новый Почта;
Сообщение = Почта.СоздатьСообщение();
Сообщение.Текст = "Выгрузка данных на " + ТекущаяДата();
Сообщение.Вложения.Добавить("C:\Export\data.xml");
Почта.Отправить(Сообщение, "recipient@example.com");
Для надежности добавьте проверку отправки:
Если Не Почта.Отправить(Сообщение) Тогда
Сообщить("Ошибка отправки: " + Почта.ОписаниеОшибки());
КонецЕсли;