Работа с XML-файлами в 1С:Предприятие — одна из самых востребованных задач при обмене данными между системами, формировании отчётности для госорганов или интеграции с внешними сервисами. Однако даже опытные пользователи иногда сталкиваются с трудностями: где именно в интерфейсе искать кнопку сохранения, как избежать ошибок кодировки, или почему файл сохраняется пустым. Эта статья закрывает все пробелы — от базовых действий через меню до автоматизации сохранения с помощью встроенного языка.

Мы разберём актуальные способы для платформы 1С 8.3 (включая последние релизы 2026 года), уделим внимание типичным ошибкам при работе с XMLWriter и ЗаписьXML, а также покажем, как сохранить файл непосредственно из отчётов или обработок без программирования. Особое внимание уделим нюансам для Управления торговлей 11, Бухгалтерии 3.0 и ЗУП 3.1 — самых популярных конфигураций, где обмен XML используется чаще всего.

Если вы никогда раньше не работали с XML в 1С, начните с первого раздела. Опытным разработчикам будет полезен блок про оптимизацию сохранения больших файлов (более 10 000 строк) и обход ограничений платформы.

1. Сохранение XML через стандартные обработки 1С

Самый простой способ — использовать встроенные механизмы конфигураций. Большинство типовых решений (БП 3.0, УТ 11, КА 2.4) уже содержат обработки для выгрузки данных в XML, которые не требуют написания кода.

Например, в Бухгалтерии предприятия 3.0 для выгрузки справочников или документов в XML:

  1. Откройте нужный справочник (например, Контрагенты) или журнал документов.
  2. Выделите необходимые записи (можно использовать Ctrl+A для выделения всех).
  3. В меню Ещё (или Действия) выберите Выгрузить данныеВ файл XML.
  4. Укажите путь сохранения и имя файла (расширение .xml добавится автоматически).
📊 Какой конфигурацией 1С вы чаще всего работаете?
Бухгалтерия 3.0
Управление торговлей 11
Зарплата и управление персоналом 3.1
Комплексная автоматизация 2.4
Другая

В Управлении торговлей 11 аналогичный функционал доступен через Сервис → Обмен данными → Выгрузка в XML. Обратите внимание, что в некоторых конфигурациях (например, ЗУП 3.1) выгрузка XML может быть скрыта за правами доступа — проверьте настройки ролей пользователя.

⚠️ Внимание: При выгрузке через стандартные обработки не все реквизиты могут попадать в XML. Например, в БП 3.0 по умолчанию не экспортируются пользовательские поля справочников. Для полного контроля над структурой файла используйте программные методы (см. раздел 3).

2. Ручное сохранение XML из отчётов и печатных форм

Многие отчёты в 1С (например, Оборотно-сальдовая ведомость или Акт сверки) позволяют сохранять результаты не только в Excel, но и в XML. Этот способ удобен, когда нужно передать данные в госорганы (например, для ФНС или ПФР) в строго определённом формате.

Инструкция:

  1. Сформируйте отчёт (например, Декларация по НДС).
  2. В панели инструментов отчёта найдите кнопку Сохранить (или Экспорт).
  3. Выберите формат XML (*.xml).
  4. При необходимости укажите кодировку (по умолчанию — UTF-8, но для некоторых госсистем требуется Windows-1251).

Важный нюанс: некоторые отчёты (например, 2-НДФЛ в ЗУП 3.1) сохраняют XML в зашифрованном виде для защиты данных. Чтобы получить "чистый" XML, используйте обработку Выгрузка данных для ПФР из раздела Отчётность.

Убедиться, что отчёт сформирован без ошибок|

Проверить настройки кодировки (UTF-8 или Windows-1251)|

Выделить нужный период данных|

Закрыть все открытые транзакции в 1С (чтобы избежать блокировок)

-->

3. Программное сохранение XML через встроенный язык

Для гибкого контроля над структурой файла и автоматизации процесса используйте объекты ЗаписьXML или XMLWriter. Ниже — универсальный пример кода, который работает в любой конфигурации на платформе 8.3:

Процедура СохранитьВXML(ПутьКФайлу, Данные)

ЗаписьXML = Новый ЗаписьXML;

ЗаписьXML.ОткрытьФайл(ПутьКФайлу, "UTF-8");

// Начало документа

ЗаписьXML.ЗаписатьОбъявлениеXML();

ЗаписьXML.ЗаписатьНачалоЭлемента("Документ");

ЗаписьXML.ЗаписатьАтрибут("Дата", ТекущаяДата());

// Запись данных (пример для справочника Контрагенты)

Для Каждого Элемент Из Данные Цикл

ЗаписьXML.ЗаписатьНачалоЭлемента("Контрагент");

ЗаписьXML.ЗаписатьАтрибут("ИНН", Элемент.ИНН);

ЗаписьXML.ЗаписатьАтрибут("Наименование", Элемент.Наименование);

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

КонецЦикла;

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

ЗаписьXML.Закрыть();

КонецПроцедуры

Чтобы вызвать эту процедуру для выгрузки всех контрагентов:

Данные = Справочники.Контрагенты.Выбрать();

СохранитьВXML("C:\Export\Контрагенты.xml", Данные);

Критическая особенность: При записи больших объёмов данных (более 50 000 строк) используйте потоковую запись с буферизацией, иначе 1С может завершить процесс по таймауту. Для этого перед циклом добавьте:

ЗаписьXML.УстановитьСтрокуЗначения(Новый БуферОбмена());
⚠️ Внимание: В конфигурациях с управляемым приложением (например, УТ 11 или ERP 2.4) прямой вызов ЗаписьXML на клиенте запрещён. Используйте серверные процедуры или фоновые задания.

4. Сохранение XML через конфигуратор (для администраторов)

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

Цель Путь в конфигураторе Формат файла Примечания
Выгрузка конфигурации Файл → Сохранить конфигурацию в файл .cf (бинарный) или .xml XML содержит только метаданные, без данных пользователей
Выгрузка данных ИБ Администрирование → Выгрузить информационную базу .dt (бинарный) или .xml XML-выгрузка доступна только в файловом варианте работы
Выгрузка внешних отчётов Файл → Открыть → Внешние отчёты → Сохранить как XML .xml Поддерживает только отчёты, созданные во внешних обработках

Для выгрузки полной копии базы в XML через конфигуратор:

  1. Закройте все сеансы пользователей (через Администрирование → Активные пользователи).
  2. Выберите Администрирование → Выгрузить информационную базу.
  3. Укажите путь и выберите формат XML.
  4. Дождитесь завершения (процесс может занять несколько часов для больших баз).
Что делать если выгрузка ИБ в XML прерывается?

Если процесс прерывается с ошибкой "Недостаточно памяти", разбейте выгрузку на части:

1. Выгрузите только справочники (используйте обработку "ВыгрузкаЗагрузкаДанныхXML" из стандартных поставок).

2. Отдельно выгрузите документы за период (например, поквартально).

3. Объедините файлы вручную или с помощью XSLT-преобразования.

5. Типичные ошибки при сохранении XML и их решения

Даже при правильном коде сохранение XML может завершаться ошибками. Вот самые распространённые проблемы и способы их устранения:

  • 🔴 Ошибка "Неверная кодировка": Укажите явную кодировку при открытии файла: ЗаписьXML.ОткрытьФайл(Путь, "UTF-8"). Для госсистем (например, ФСС) может потребоваться Windows-1251.
  • 🔴 Файл сохраняется пустым: Проверьте, что перед записью данных вызван метод ЗаписатьОбъявлениеXML(). Также убедитесь, что коллекция данных не пустая (используйте Если Данные.Количество() > 0 Тогда).
  • 🔴 "Доступ запрещён" при сохранении: В 1С:Предприятие 8.3.20+ блокировка файлов усилилась. Сохраняйте файлы в папки, к которым у пользователя есть права записи (например, %APPDATA%\1C\1Cv8).
  • 🔴 Ошибка "Недопустимый символ": XML не поддерживает символы &, <, . Используйте СтрЗначениеВXMLСтроку() для экранирования: ЗаписьXML.ЗаписатьТекст(СтрЗначениеВXMLСтроку(Элемент.Наименование)).

Если ошибка сохранения связана с блокировками файлов (например, антивирус или облачный диск), попробуйте:

  • 🛡️ Временно отключить защиту антивируса для папки с 1С.
  • 💾 Сохранять файл на локальный диск (не в сетевую папку).
  • 🔄 Перезапустить 1С в режиме Конфигуратор и повторить операцию.
💡

Для отладки XML используйте бесплатный инструмент XML Notepad от Microsoft. Он показывает структуру файла и ошибки валидации, которые не видны в блокноте.

6. Оптимизация сохранения больших XML-файлов

При работе с файлами объёмом более 50 МБ стандартные методы ЗаписьXML могут приводить к зависаниям или ошибкам памяти. В таких случаях:

  1. Используйте потоковую запись:
    ЗаписьXML = Новый ЗаписьXML;
    

    ЗаписьXML.ОткрытьФайл(ПутьКФайлу, "UTF-8", Истина); // Третий параметр - буферизация

  2. Разбивайте файл на части: Сохраняйте данные порциями по 10 000 строк с промежуточным закрытием/открытием файла.
  3. Отключите журнал транзакций на время выгрузки (если это не рабочая база): НачатьТранзакцию(); ... ЗафиксироватьТранзакцию();.

Для ускорения выгрузки из базы используйте прямые запросы вместо объектной модели:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Контрагенты.Ссылка КАК Ссылка,

| Контрагенты.Наименование КАК Наименование

|ИЗ

| Справочник.Контрагенты КАК Контрагенты";

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();

Если файл всё равно сохраняется слишком долго, рассмотрите альтернативные форматы:

  • 📄 JSON: Легче и быстрее парсится, но не подходит для госотчётности.
  • 🗃️ ZIP-архив: Сожмите XML перед сохранением (используйте объект ZIPФайл).
  • 🗂️ CSV: Для табличных данных без вложенных структур.
💡

Для файлов более 100 МБ оптимально использовать внешние обработки на .NET или Python, которые вызываются из 1С через COM-соединение или HTTP-сервис.

7. Автоматизация сохранения XML по расписанию

Если XML-файлы нужно формировать регулярно (например, для ежедневной выгрузки заказов в WMS-систему), настройте регламентное задание:

  1. В конфигураторе откройте Общие → Регламентные задания.
  2. Создайте новое задание с типом Выполнение кода.
  3. Вставьте код из раздела 3, заменив путь к файлу на динамический (например, с датой): ПутьКФайлу = "C:\Export\Data_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd") + ".xml".
  4. Настройте расписание (ежедневно в 23:00) и права доступа.

Для облачных версий 1С (например, 1С:Fresh) регламентные задания недоступны. В этом случае:

  • 🌐 Используйте HTTP-сервисы: Разместите код сохранения на веб-сервере и вызывайте его по URL.
  • ⏰ Настройте внешний планировщик (например, Windows Task Scheduler), который будет запускать 1Cv8.exe с параметрами.

Пример команды для запуска из планировщика:

"C:\Program Files\1cv8\8.3.26.1253\bin\1cv8.exe" DESIGNER /S"C:\Bases\Trade" /N"Администратор" /P"пароль" /Execute"C:\Scripts\ExportToXML.epf"

FAQ: Частые вопросы по сохранению XML в 1С

Можно ли сохранить XML прямо из формы документа без программирования?

Да, в большинстве конфигураций достаточно открыть документ (например, Реализация товаров), нажать Ещё → Выгрузить в файл → XML. Если такой опции нет, проверьте настройки ролей пользователя или используйте универсальную обработку ВыгрузкаДанныхXML.epf из стандартной поставки 1С.

Почему при сохранении XML из 1С в файле появляются символы " "?

Это символы переноса строки (CR), которые 1С добавляет по умолчанию. Чтобы их убрать, используйте замену при записи:

ТекстБезПереносов = СтрЗаменить(ИсходныйТекст, Символы.ПС, "");

ЗаписьXML.ЗаписатьТекст(ТекстБезПереносов);

Для госотчётности (например, СЗВ-ТД) эти символы обычно допустимы и не требуют удаления.

Как сохранить XML с цифровой подписью прямо из 1С?

Стандартными средствами — невозможно. Для подписи XML используйте:

  1. Внешние утилиты (например, КриптоПро CSP).
  2. Специализированные обработки (например, ПодписаниеXML.epf от партнёров 1С).
  3. Веб-сервисы (отправляйте XML на сервер, где происходит подпись).

В БП 3.0 и ЗУП 3.1 для отчётности в ФНС/ПФР подпись добавляется автоматически при отправке через 1С-Отчётность.

Где в 1С хранится история сохранённых XML-файлов?

1С не ведёт журнал сохранённых файлов автоматически. Чтобы отслеживать выгрузки:

  • Создайте документ "РегистрацияВыгрузкиДанных" с реквизитами "Путь", "Дата", "ТипДанных".
  • Используйте журнал регистрации (настройте событие ПриЗаписиXML).
  • Сохраняйте файлы в папку с именем, содержащим дату и время (например, Контрагенты_20260515_1430.xml).
Как проверить, что XML сохранён корректно?

Используйте эти инструменты:

  • 🔍 Валидаторы: XMLValidation (проверяет структуру и схему XSD).
  • 📝 Редакторы: Notepad++ с плагином XML Tools или Oxygen XML Editor.
  • 🤖 Скрипты: Для автоматизированной проверки используйте Python с библиотекой lxml:
import lxml.etree as ET

doc = ET.parse("file.xml")

print("Ошибок нет" if doc.xpath("//error") == [] else "Найдены ошибки")