Разработка и Конфигурация · 11 мин
Формат XML в 1С: как сделать выгрузку и загрузку данных
Как работать с форматом XML в 1С: выгрузка и загрузка данных, обработки, XDTO-пакеты, запись XML кодом. Пошаговые инструкции, ошибки и проверка результата.
XML — основной формат обмена данными в экосистеме 1С. Через него выгружают справочники и документы между базами, обмениваются сведениями с банками, ЭДО-операторами, сайтами и государственными сервисами. Платформа 1С:Предприятие поддерживает XML на уровне встроенного языка, поэтому файл можно создать как типовыми обработками, так и собственным кодом.
Практически в любой конфигурации есть готовые механизмы: универсальная обработка «Выгрузка и загрузка данных XML», план обмена, выгрузка по правилам конвертации. Для нестандартных задач используют объекты ЗаписьXML и ЧтениеXML либо механизм XDTO. Выбор зависит от того, куда пойдёт файл: в другую базу 1С, во внешнюю систему или на проверку контролирующему органу.
Ниже разобраны рабочие способы: от простой выгрузки через типовую обработку до формирования XML собственным кодом, а также проверка результата и типичные ошибки, из-за которых файл не принимается приёмной стороной.
Какие задачи решает XML в 1С и какой способ выбрать
Прежде чем делать файл, определите приёмника. Если данные переносятся между двумя базами 1С (например, из рабочей базы в копию или между одинаковыми конфигурациями), подходит универсальная обработка выгрузки/загрузки XML — она сохраняет объекты вместе со ссылками. Если файл уходит во внешнюю систему (сайт, банк, складская программа), структуру обычно диктует внешняя сторона, и XML формируют кодом или через XDTO по схеме заказчика.
Отдельный случай — регламентированная отчётность и электронный документооборот. Здесь форматы жёстко заданы (ФНС, банки, операторы ЭДО), и в типовых конфигурациях уже встроены кнопки «Выгрузить» или «Отправить». Самостоятельно формировать такие файлы кодом не нужно и даже вредно: малейшее отклонение от схемы приведёт к отказу при приёме.
Как выбрать способ
Выгрузка данных через типовую обработку
Самый быстрый способ получить XML — обработка «Выгрузка и загрузка данных XML» (файл обычно называется ВыгрузкаЗагрузкаДанныхXML.epf). Она входит в поставку многих типовых конфигураций и доступна на диске ИТС. Открывается через меню «Файл — Открыть» в режиме 1С:Предприятие.
Порядок работы: на закладке «Выгрузка» отметьте галочками объекты метаданных — справочники, документы, регистры. Для документов задайте период, при необходимости включите выгрузку по ссылкам, чтобы подтянулись связанные объекты. Укажите имя файла и нажмите «Выполнить». В результате получите один XML-файл, который загружается той же обработкой на другой базе на закладке «Загрузка».
- 1Откройте обработку «Выгрузка и загрузка данных XML» в режиме 1С:Предприятие
- 2На закладке «Выгрузка» отметьте нужные объекты метаданных
- 3Задайте период для документов и при необходимости выгрузку связанных объектов
- 4Укажите путь и имя XML-файла, нажмите «Выполнить»
- 5На целевой базе откройте ту же обработку, закладку «Загрузка» и загрузите файл
- 6Проверьте количество загруженных объектов и целостность ссылок
Важное ограничение: конфигурации источника и приёмника должны быть идентичны по структуре выгружаемых объектов. Если в приёмнике у справочника удалён реквизит, который есть в файле, загрузка либо прервётся с ошибкой, либо потеряет данные. Для обмена между разными конфигурациями используют правила конвертации данных, а не универсальную обработку.
Формирование XML кодом через ЗаписьXML
Когда структура файла определяется внешней системой, XML создают программно. Объект ЗаписьXML позволяет последовательно писать элементы, атрибуты и текст. Типовой пример — выгрузка списка товаров с ценами для сайта или выгрузка проводок в стороннюю учётную систему.
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Обмен\goods.xml", "UTF-8");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Товары");
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Запись.ЗаписатьНачалоЭлемента("Товар");
Запись.ЗаписатьАтрибут("Код", Строка(Выборка.Код));
Запись.ЗаписатьНачалоЭлемента("Наименование");
Запись.ЗаписатьТекст(Выборка.Наименование);
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();
Ключевые правила: каждый открытый элемент должен быть закрыт, файл должен иметь один корневой элемент, кодировку указывайте явно — чаще всего UTF-8. Если приёмная сторона требует другую кодировку (например, windows-1251), передайте её вторым параметром метода ОткрытьФайл, иначе кириллица превратится в нечитаемые символы.
Для чтения чужого файла используется зеркальный объект ЧтениеXML с циклом Пока Чтение.Прочитать() Цикл, где по типу узла (начало элемента, текст, конец элемента) разбирается содержимое. Это удобно для простых файлов, но при сложной вложенной структуре код быстро разрастается — тогда лучше подходит XDTO.
Обмен через XDTO и фабрику типов
XDTO — механизм платформы для работы с XML по формальной схеме (XSD). Вместо ручного разбора тегов вы описываете пакет XDTO в конфигураторе (ветка «Общие — XDTO-пакеты») или загружаете схему, предоставленную внешней системой, а платформа сама проверяет типы, обязательность полей и вложенность.
Для записи используют объект ЗаписьXML в связке с ФабрикаXDTO: создаётся объект XDTO нужного типа, заполняются его свойства, затем вызывается ФабрикаXDTO.ЗаписатьXML(). Для чтения — наоборот: ФабрикаXDTO.ПрочитатьXML() возвращает готовый объект, к свойствам которого обращаются как к реквизитам.
Типовые конфигурации активно используют XDTO внутри себя: форматы обмена с сайтами (CommerceML), банковские выписки, EnterpriseData для обмена между прикладными решениями. Если ваша задача пересекается с этими стандартами, имеет смысл использовать готовые пакеты конфигурации, а не создавать свои.
Загрузка XML в 1С: практические сценарии
Загрузка — обратная задача, и у неё три типовых сценария. Первый: файл получен от другой базы 1С через универсальную обработку — тогда загружайте той же обработкой, она восстановит объекты и ссылки автоматически. Второй: файл от внешней системы с простой структурой — пишется небольшая обработка на ЧтениеXML, которая ищет элементы справочника по коду или наименованию и создаёт недостающие.
Третий сценарий — регулярная загрузка по расписанию (курсы валют, остатки поставщика, заказы с сайта). Здесь разбор XML выносят в общий модуль, а запуск настраивают регламентным заданием. Обязательно добавьте журналирование: какие файлы обработаны, сколько записей создано, какие строки отклонены и почему. Без журнала поиск причины пропавших данных превращается в гадание.
При загрузке всегда решайте вопрос идентификации: по какому признаку понимать, что элемент уже есть в базе. Надёжнее всего уникальный идентификатор или внешний код из файла; поиск по наименованию ненадёжен — совпадения и переименования приводят к дублям.
Проверка результата и валидация файла
Созданный файл перед отправкой нужно проверить. Минимум — открыть его в браузере или текстовом редакторе: браузер сразу покажет синтаксическую ошибку с номером строки. Далее убедитесь, что объявленная кодировка совпадает с реальной, а данные читаемы.
Если файл уходит во внешнюю систему, запросите у её владельца XSD-схему и проверьте файл по ней. В 1С это делается программно через объект ЧтениеXML с валидацией или сторонними бесплатными валидаторами. Файл, прошедший проверку по схеме, почти гарантированно будет принят приёмником.
Как проверить результат
Отображается дерево элементов без сообщений об ошибке
Браузер показывает ошибку разбора с номером строки
Русские буквы читаемы, в объявлении XML указана та же кодировка, что задана при записи
Кракозябры вместо кириллицы
Файл проходит валидацию по XSD без замечаний
Ошибки обязательных элементов или типов данных
Количество объектов совпадает с ожидаемым, ссылки не битые
Часть объектов отсутствует или появились дубли
Частые вопросы о работе с XML в 1С
Чем открыть XML-файл, выгруженный из 1С, чтобы посмотреть содержимое?
Подойдёт любой браузер — он покажет файл в виде дерева элементов и сообщит об ошибках синтаксиса. Для редактирования удобнее текстовые редакторы вроде Notepad++, которые подсвечивают структуру и позволяют сменить кодировку. Большие файлы (сотни мегабайт) лучше смотреть в редакторах, умеющих работать с крупными файлами без полной загрузки в память.
Можно ли выгрузить из 1С в XML без программирования?
Да. Перенос данных между базами делается типовой обработкой «Выгрузка и загрузка данных XML», отчётность выгружается штатными кнопками конфигурации, документы для ЭДО отправляются встроенными механизмами. Код требуется только когда структуру файла диктует внешняя система и готового механизма под неё нет.
Почему при загрузке XML возникают дубли справочников?
Почти всегда причина в ненадёжном ключе поиска: элементы ищутся по наименованию, которое может отличаться пробелами, регистром или быть переименовано. Используйте уникальный идентификатор, код или специально заведённый реквизит с внешним идентификатором из файла.
Какую кодировку выбирать при записи XML?
По умолчанию — UTF-8: её понимают практически все современные системы. Некоторые старые банковские и государственные форматы требуют windows-1251. Главное правило: кодировка, указанная в объявлении XML, должна совпадать с той, в которой реально записан файл.
Чем XDTO лучше обычной ЗаписьXML?
XDTO работает по формальной схеме: платформа проверяет типы данных, обязательность полей и вложенность автоматически, а разбор чужого файла сводится к одной строке чтения вместо ручного обхода узлов. Для простых плоских файлов преимущество невелико, для сложных форматов с XSD-схемой XDTO заметно надёжнее.
Опасно ли загружать XML из неизвестного источника в рабочую базу?
Да. Загрузка записывает объекты напрямую и может перезаписать существующие данные или создать тысячи лишних элементов. Всегда сначала загружайте файл в тестовую копию, проверяйте результат и только потом повторяйте на рабочей базе, имея свежую резервную копию.
Что важно запомнить
Для переноса между базами 1С используйте типовую обработку выгрузки/загрузки XML, для внешних систем — код через ЗаписьXML или XDTO по схеме, для отчётности и ЭДО — только штатные механизмы. Любую загрузку сначала проверяйте на копии базы, а готовый файл — на валидность и кодировку.