Как сохранить данные из 1С в файл XML: обработки, обмен и код
Содержание
Самый простой путь сохранить данные из 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С:Предприятие. - Откройте обработку: меню
Файл → Открыть, выберите файл обработки выгрузки и загрузки данных XML (её кладут с диска ИТС). - В форме обработки оставьте режим выгрузки.
- В дереве метаданных отметьте галочками нужные объекты — например, справочник «Номенклатура».
- Если нужны не все элементы, задайте отбор (по группе, по дате изменения).
- Укажите путь и имя файла, нажмите кнопку выгрузки.
На выходе — один 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 запускает внешнюю обработку
без участия человека. Логин и пароль лучше передавать через защищённое хранилище, а не открытой строкой.
Прежде чем ставить автоматическую запись в сетевую папку, убедитесь, что приёмник успевает забрать файл до следующей выгрузки — иначе свежий файл затрёт ещё не обработанный.
Как уменьшить размер XML-файла
XML — текстовый формат, он многословен: теги и названия полей повторяются в каждой строке. Для больших баз файл быстро раздувается. Чем его ужать:
- Выгружайте только нужное. Отбор по периоду, по организации, по виду документа сокращает файл в разы. Не выгружайте всю базу «на всякий случай».
- Сжимайте в архив. XML жмётся отлично — в 1С это делает объект
ЗаписьZipФайла. Готовый файл в ZIP занимает в несколько раз меньше и быстрее передаётся. - Не тащите вложения. Присоединённые файлы, картинки и хранилища значений раздувают XML больше всего. Их выгружают отдельно, а не внутри основного файла.
- Пишите потоково. Объект
ЗаписьXMLпишет сразу в файл, не держа всё в памяти. Не собирайте гигантскую строку в переменной — для больших объёмов это приведёт к нехватке памяти.
Для очень больших выгрузок данные бьют на части — отдельный файл на каждый период или группу объектов. Так и памяти нужно меньше, и при сбое не придётся повторять всю выгрузку.
Отдельно стоит договориться о структуре имён файлов. Если выгрузка идёт пачками, приёмнику проще разбирать их, когда в имени есть дата и порядковый номер (например, realizacii_2025-01_01.xml). Это избавляет от путаницы, какой файл свежее, и упрощает автоматический разбор на стороне получателя.
Защита данных в выгруженном файле
XML — обычный текст. Его открывает любой «Блокнот», и в нём как на ладони все контрагенты, суммы, зарплаты, персональные данные сотрудников. Это главный риск выгрузки.
Если в файле есть персональные данные, их обработка и передача подпадают под Федеральный закон № 152-ФЗ. Простые меры, которые закрывают большинство проблем:
- 🔒 Шифруйте при передаче. Не отправляйте XML с персданными открытым файлом по почте. Минимум — архив с паролем, лучше — защищённый канал.
- 📁 Ограничьте доступ к папке. Каталог выгрузки не должен быть открыт всей сети. Дайте доступ только тем, кому он нужен.
- 🧹 Удаляйте временные файлы. После того как приёмник забрал данные, выгруженный файл со склада лучше убрать, а не копить годами.
- 👤 Минимизируйте состав. Выгружайте только те поля, что действительно нужны приёмнику. Паспортные данные и адреса не тащите, если без них можно обойтись.
Частые ошибки при экспорте XML
Частые вопросы
Можно ли загрузить выгруженный XML обратно в 1С?
ЧтениеXML.Чем выгрузка в XML отличается от выгрузки в файл .dt?
.dt — это полная копия всей базы целиком: данные, настройки, пользователи. XML — выборочная выгрузка отдельных объектов для обмена. Для переноса конкретных справочников или документов нужен XML, для полного дубля базы — .dt.Открывается ли XML из 1С в Excel?
Переносятся ли остатки и проводки вместе с объектами?
Нужен ли монопольный доступ к базе для выгрузки?
Источники
- Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных»