Как сохранить данные из 1С в файл XML: обработки, обмен и код

· 9 мин

Содержание

Самый простой путь сохранить данные из 1С в XML — открыть универсальную обработку «Выгрузка и загрузка данных XML» через Файл → Открыть, отметить нужные справочники и документы и указать файл. Если формат задаёт внешняя система или нужен обмен по расписанию — пишут код с объектом ЗаписьXML или настраивают правила обмена.

Выгрузка только читает базу и ничего в ней не меняет, поэтому резервная копия и монопольный режим для неё не нужны. Ниже — какой способ выбрать под вашу задачу, как выгрузить справочник и документы, как автоматизировать регулярную выгрузку и что делать, если файл не открывается.

Что проверить перед выгрузкой в XML

XML из 1С бывает двух принципиально разных видов, и от этого зависит весь дальнейший порядок действий.

  • 📦 Обмен между базами 1С. Данные уедут в другую базу 1С. Формат XML тогда определяет сама платформа, ссылки (внутренние идентификаторы объектов) сохраняются, связи при загрузке восстановятся автоматически.
  • 🌐 Отдача во внешнюю систему. Сайт, банк, госсистема, Excel. Здесь формат диктует приёмная сторона — обычно по своей схеме XSD. Тут редко подходит «родной» XML 1С, нужен свой набор тегов.

Разберитесь с этим до выгрузки — иначе легко сделать технически корректный файл, который примет только сама 1С.

Что ещё стоит проверить:

  • Права. Для открытия внешних обработок нужен профиль с правом на открытие внешних обработок и отчётов. Без него обработка просто не откроется.
  • Папка для файла. У пользователя (а в клиент-серверном варианте — у пользователя сервера) должно быть право на запись в каталог выгрузки.
  • Объём. Если выгружаете всю номенклатуру или документы за несколько лет, файл легко разрастается до сотен мегабайт. Заранее подумайте про отбор по периоду.
  • Кодировка. По умолчанию используют UTF-8 — её понимают и 1С, и внешние системы. Если приёмник требует другую кодировку (встречается у старых банковских форматов), задайте её явно при открытии файла.
  • Полнота данных. Проверьте, что выгружаемые объекты заполнены корректно: пустые обязательные реквизиты и «битые» ссылки на удалённые элементы при загрузке в приёмник дадут ошибки.

Выгрузка не блокирует работу коллег: читать базу можно в обычном режиме, пока в ней работают другие пользователи.

Три способа сохранить данные в формат XML

У задачи «выгрузить в XML» есть три рабочих инструмента. Выбор зависит от того, куда едут данные и готовы ли вы писать код.

СпособКогда подходитНужен код
Универсальная обработка выгрузки XMLПеренос в другую базу той же конфигурацииНет
Правила обмена (Конвертация данных)Перенос в другую конфигурацию 1СНет, но нужны правила
Программная запись (ЗаписьXML)Свой формат для внешней системыДа
Куда переносите данные?

Универсальную обработку берут с диска ИТС — это стандартный сервисный инструмент для переноса произвольных объектов. Правила обмена готовят в отдельной конфигурации «Конвертация данных », а затем применяют к базе. Программная запись — самый гибкий путь: вы полностью управляете структурой тегов.

Выгрузка справочника в XML через готовую обработку

Самый частый сценарий без программирования — перенести справочник (контрагентов, номенклатуру) в другую базу. Порядок такой.

  1. Запустите базу в режиме 1С:Предприятие.
  2. Откройте обработку: меню Файл → Открыть, выберите файл обработки выгрузки и загрузки данных XML (её кладут с диска ИТС).
  3. В форме обработки оставьте режим выгрузки.
  4. В дереве метаданных отметьте галочками нужные объекты — например, справочник «Номенклатура».
  5. Если нужны не все элементы, задайте отбор (по группе, по дате изменения).
  6. Укажите путь и имя файла, нажмите кнопку выгрузки.

На выходе — один XML-файл со всеми отмеченными объектами. Его же обработка умеет загружать обратно в базу-приёмник.

Если приёмник — другая версия конфигурации, структура метаданных может не совпасть, и часть объектов при загрузке будет пропущена. Выгружайте и загружайте между базами близких релизов.

Когда готовая обработка не подходит (нужен свой формат), справочник выгружают кодом. Пример выгрузки номенклатуры с корректным корневым элементом:

Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Обмен\Номенклатура.xml", "UTF-8");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Номенклатура");

Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
    ЗаписатьXML(Запись, Выборка.ПолучитьОбъект());
КонецЦикла;

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

Корневой элемент обязателен. Если записать несколько объектов подряд без общего контейнера ЗаписатьНачалоЭлемента/ЗаписатьКонецЭлемента, в файле окажется несколько корней — такой XML считается невалидным и не откроется.

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

СериализаторXDTO.ЗаписатьXML(Запись, Выборка.ПолучитьОбъект());

Как выгрузить документы и их движения

С документами есть нюанс, на котором спотыкаются чаще всего. Когда вы сериализуете объект документа, в XML попадают его реквизиты и табличные части — но не движения по регистрам (проводки, остатки, взаиморасчёты).

Движения хранятся отдельно, в наборах записей регистров. Поэтому для полного переноса есть два пути:

  • 🔁 Перепровести документы в приёмнике. Переносите только сами документы, а движения база сформирует заново при проведении. Это надёжнее: проводки будут соответствовать учётной политике приёмника.
  • 📤 Выгрузить наборы записей отдельно. Если перепроведение недопустимо, выгружают ещё и записи нужных регистров — каждый набор отдельным блоком.

Пример выгрузки документов за период с отбором:

Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Обмен\Реализации.xml", "UTF-8");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Документы");

Отбор = Новый Структура("Дата", НачалоДня('20250101'));
Выборка = Документы.РеализацияТоваровУслуг.Выбрать(, , Отбор);
Пока Выборка.Следующий() Цикл
    ЗаписатьXML(Запись, Выборка.ПолучитьОбъект());
КонецЦикла;

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

Если движения всё же нужно выгрузить отдельно, набор записей регистра сериализуют так же, предварительно установив отбор по регистратору:

Набор = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(СсылкаНаДокумент);
Набор.Прочитать();
ЗаписатьXML(Запись, Набор);

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

Иногда XML не нужно сохранять на диск — его отдают веб-сервису прямо строкой. Тогда ЗаписьXML открывают не файлом, а в память:

Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку("UTF-8");
ЗаписатьXML(Запись, Объект);
ТекстXML = Запись.Закрыть();

Метод Закрыть() в этом случае вернёт готовый XML строкой — её можно сразу передать во внешний сервис или положить в реквизит.

Автоматическая выгрузка XML по расписанию

Если XML нужен регулярно (каждую ночь, раз в час), выгрузку автоматизируют одним из двух способов.

Регламентное задание внутри 1С. Процедуру выгрузки оформляют в общем модуле, затем создают регламентное задание и задают ему расписание через Администрирование → Обслуживание → Регламентные и фоновые задания.

  • В клиент-серверном варианте задание выполняет сервер — расписание работает само.
  • В файловом варианте регламентные задания идут только при запущенном сеансе. Нужен отдельный постоянно открытый сеанс либо запуск по планировщику ОС.

Запуск по планировщику Windows. Из планировщика задач запускают 1С в пакетном режиме и выполняют обработку выгрузки:

1cv8 ENTERPRISE /S "сервер\база" /N Пользователь /P Пароль /Execute "C:\Обмен\Выгрузка.epf"

Параметр /Execute запускает внешнюю обработку без участия человека. Логин и пароль лучше передавать через защищённое хранилище, а не открытой строкой.

Проверьте перед запуском автоматической выгрузки
Выполнено: 0 / 5

Прежде чем ставить автоматическую запись в сетевую папку, убедитесь, что приёмник успевает забрать файл до следующей выгрузки — иначе свежий файл затрёт ещё не обработанный.

Как уменьшить размер XML-файла

XML — текстовый формат, он многословен: теги и названия полей повторяются в каждой строке. Для больших баз файл быстро раздувается. Чем его ужать:

  • Выгружайте только нужное. Отбор по периоду, по организации, по виду документа сокращает файл в разы. Не выгружайте всю базу «на всякий случай».
  • Сжимайте в архив. XML жмётся отлично — в 1С это делает объект ЗаписьZipФайла. Готовый файл в ZIP занимает в несколько раз меньше и быстрее передаётся.
  • Не тащите вложения. Присоединённые файлы, картинки и хранилища значений раздувают XML больше всего. Их выгружают отдельно, а не внутри основного файла.
  • Пишите потоково. Объект ЗаписьXML пишет сразу в файл, не держа всё в памяти. Не собирайте гигантскую строку в переменной — для больших объёмов это приведёт к нехватке памяти.

Для очень больших выгрузок данные бьют на части — отдельный файл на каждый период или группу объектов. Так и памяти нужно меньше, и при сбое не придётся повторять всю выгрузку.

Отдельно стоит договориться о структуре имён файлов. Если выгрузка идёт пачками, приёмнику проще разбирать их, когда в имени есть дата и порядковый номер (например, realizacii_2025-01_01.xml). Это избавляет от путаницы, какой файл свежее, и упрощает автоматический разбор на стороне получателя.

Защита данных в выгруженном файле

XML — обычный текст. Его открывает любой «Блокнот», и в нём как на ладони все контрагенты, суммы, зарплаты, персональные данные сотрудников. Это главный риск выгрузки.

Если в файле есть персональные данные, их обработка и передача подпадают под Федеральный закон № 152-ФЗ. Простые меры, которые закрывают большинство проблем:

  • 🔒 Шифруйте при передаче. Не отправляйте XML с персданными открытым файлом по почте. Минимум — архив с паролем, лучше — защищённый канал.
  • 📁 Ограничьте доступ к папке. Каталог выгрузки не должен быть открыт всей сети. Дайте доступ только тем, кому он нужен.
  • 🧹 Удаляйте временные файлы. После того как приёмник забрал данные, выгруженный файл со склада лучше убрать, а не копить годами.
  • 👤 Минимизируйте состав. Выгружайте только те поля, что действительно нужны приёмнику. Паспортные данные и адреса не тащите, если без них можно обойтись.

Частые ошибки при экспорте XML

Диагностика: выберите симптом

Частые вопросы

Можно ли загрузить выгруженный XML обратно в 1С?
Да. Файл, созданный универсальной обработкой выгрузки данных XML, та же обработка загружает в базу-приёмник в режиме загрузки. Файл произвольного формата, собранный кодом, читают своим кодом через объект ЧтениеXML.
Чем выгрузка в XML отличается от выгрузки в файл .dt?
Файл .dt — это полная копия всей базы целиком: данные, настройки, пользователи. XML — выборочная выгрузка отдельных объектов для обмена. Для переноса конкретных справочников или документов нужен XML, для полного дубля базы — .dt.
Открывается ли XML из 1С в Excel?
Excel умеет импортировать XML, но «родной» XML 1С содержит служебную структуру со ссылками и его таблицы читаются плохо. Если цель — выгрузить данные именно для Excel, проще сохранить список в табличный документ и выгрузить в формат XLSX.
Переносятся ли остатки и проводки вместе с объектами?
Нет. При сериализации документа выгружаются его реквизиты и табличные части, но не движения по регистрам. Проводки формируют перепроведением в приёмнике, а начальные остатки заводят документами ввода остатков.
Нужен ли монопольный доступ к базе для выгрузки?
Нет. Выгрузка только читает данные, не меняя их, поэтому её выполняют в обычном режиме, пока в базе работают другие пользователи.

Источники

  • Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных»