Работа с форматом XML в 1С:Предприятие — одна из самых востребованных задач при интеграции с внешними системами, обмене данными между базами или подготовке отчетности для госорганов. Несмотря на кажущуюся сложность, выгрузка в XML может быть выполнена даже без глубоких знаний программирования — главное понимать базовые принципы и следовать проверенным алгоритмам.
В этой статье вы найдете уникальные схемы выгрузки для типовой и нетиповой конфигураций, разбор ошибок, которые не описаны в официальной документации, а также практические советы по оптимизации процесса. Мы рассмотрим как стандартные механизмы платформы, так и альтернативные подходы для нестандартных задач — от выгрузки справочников до сложных документов с вложенными табличными частями.
Особое внимание уделим трем критическим моментам, которые часто упускают даже опытные пользователи: корректная настройка XDTO-пакетов, обработка больших объемов данных без зависаний и валидация полученных файлов перед отправкой. Эти нюансы экономят часы рабочего времени при регулярном обмене.
Что такое XML в контексте 1С и зачем он нужен
Формат XML (eXtensible Markup Language) в 1С:Предприятие 8 используется как универсальный способ представления структурированных данных. Его ключевые преимущества:
- 🔄 Кросс-платформенность: файлы XML читаются любыми системами — от бухгалтерских программ до веб-сервисов
- 📊 Структурированность: иерархическое представление данных (элементы, атрибуты, вложенности) идеально подходит для документов 1С
- 🔒 Поддержка стандартов: многие госорганы (ФНС, ПФР, Росстат) требуют отчетность именно в XML-формате
- 🔧 Гибкость: можно описывать любые структуры данных без жестких ограничений
В 1С XML применяется для:
- 📤 Выгрузки справочников (номенклатура, контрагенты, сотрудники) для миграции между базами
- 📥 Загрузки данных из внешних систем (например, прайс-листов поставщиков)
- 📑 Формирования отчетности (декларации, сведения для ПФР, статистическая отчетность)
- 🔄 Обмена между разными конфигурациями (например, между 1С:Бухгалтерия и 1С:УТ)
- 🌐 Интеграции с веб-сервисами и CRM-системами
Важно понимать, что 1С работает с XML на двух уровнях:
- Уровень платформы — встроенные механизмы чтения/записи через объекты
ЧтениеXMLиЗаписьXML - Уровень конфигурации — специализированные обработки выгрузки, которые могут использовать как стандартные, так и кастомные схемы XML
Подготовка к выгрузке: что нужно сделать до начала
Перед тем как приступить к выгрузке, необходимо выполнить несколько критических шагов. Их пропуск часто приводит к ошибкам на этапе формирования файла или некорректной структуре данных.
1. Определение структуры XML
Без четкого понимания, какие данные и в каком виде должны попасть в файл, выгрузка превращается в лотерею. Источники для определения структуры:
- 📄 Техническое задание от получателя данных (если выгрузка для интеграции)
- 📋 XSD-схема (если требуется валидация по стандарту)
- 🔍 Пример файла от партнера или госоргана
2. Проверка прав доступа
У пользователя, выполняющего выгрузку, должны быть права на:
- 🔓 Чтение выгружаемых данных (справочников, документов)
- 📁 Запись в каталог выгрузки (если файл сохраняется на диск)
- 🖥️ Использование внешних компонент (если применяются)
Определить структуру выходного файла|Проверить права пользователя|Создать резервную копию базы|Подготовить каталог для выгрузки|Уточнить кодировку файла (UTF-8/Windows-1251)-->
3. Выбор метода выгрузки
В 1С доступно несколько способов формирования XML:
| Метод | Когда использовать | Сложность | Требует программирования |
|---|---|---|---|
| Стандартные обработки выгрузки | Для типовых конфигураций (Бухгалтерия, УТ, ЗУП) | Низкая | Нет |
| XDTO-пакеты | Для строгой валидации по XSD-схемам | Средняя | Да (настройка) |
| Прямая запись через ЗаписьXML | Для нестандартных структур или больших объемов | Высокая | Да |
| Внешние обработки | Для повторяющихся задач с гибкими настройками | Средняя | Да (разовая) |
⚠️ Внимание: Если выгружаемые данные содержат персональные данные (ФИО, паспортные данные, СНИЛС), убедитесь, что файл будет передаваться по защищенным каналам (SFTP, HTTPS) или шифроваться. Некоторые отрасли (например, медицина) требуют обязательного шифрования таких файлов.
Стандартная выгрузка через типовой функционал
Большинство типовых конфигураций 1С уже содержат встроенные механизмы выгрузки в XML. Рассмотрим процесс на примере 1С:Бухгалтерия 3.0 (актуально также для 1С:УТ 11 и 1С:ЗУП 3.1 с незначительными отличиями).
Шаг 1. Открытие обработки выгрузки
Перейдите в меню:
Файл → Открыть → [Выбрать обработку "Выгрузка данных в XML"]
В типовых конфигурациях обработка обычно находится в каталоге:
C:\Program Files\1Cv8\tmplts\1c\УправлениеТорговлей\ExtForms\
Шаг 2. Настройка параметров выгрузки
В открывшейся форме укажите:
- 📌 Каталог выгрузки — папка, куда будет сохранен файл
- 📝 Имя файла — например,
СправочникНоменклатуры_20260520.xml - 🔤 Кодировка — для госорганов обычно
Windows-1251, для веб-сервисов —UTF-8 - 🗃️ Объекты для выгрузки — отметьте нужные справочники или документы
Шаг 3. Запуск выгрузки
После настройки параметров нажмите кнопку Выгрузить. Процесс может занять от нескольких секунд до десятков минут в зависимости от объема данных. По завершении проверьте:
- 📁 Наличие файла в указанном каталоге
- 📏 Размер файла (слишком маленький размер может указывать на ошибку)
- 🔍 Лог выгрузки (если обработка его формирует)
Если стандартная обработка не подходит под ваши задачи, попробуйте найти альтернативные решения на портале Инфостарт — там выложено более 2000 бесплатных и платных обработок для выгрузки XML под разные конфигурации.
Выгрузка через XDTO: для строгих стандартов
Когда требуется жесткое соответствие XSD-схеме (например, для отчетности в госорганы), стандартные механизмы могут не подойти. В этом случае используется технология XDTO (XML Data Transfer Objects).
Шаг 1. Создание XDTO-пакета
Откройте конфигуратор и выполните:
- Перейдите в
Объекты → XDTO-пакеты - Создайте новый пакет с именем, например,
ПакетДляФНС - Импортируйте XSD-схему через
Действия → Импортировать схему
Шаг 2. Настройка соответствий
Свяжите объекты 1С с элементами XSD:
- 🔗 Для каждого элемента схемы укажите соответствующий объект метаданных
- 📌 Настройте преобразование типов (например,
Датав 1С →xs:dateв XML) - 🔄 Определите правила для коллекций (как выгружать табличные части)
Шаг 3. Выгрузка с использованием пакета
Пример кода для выгрузки документа "РеализацияТоваровУслуг" через XDTO:
// Создаем фабрику XDTO
ФабрикаXDTO = Новый ФабрикаXDTO();
Пакет = ФабрикаXDTO.Пакеты.Найти("ПакетДляФНС");
// Создаем объект для выгрузки
ОбъектXML = Пакет.Создать("ДокументРеализация");
// Заполняем данные
ОбъектXML.Номер = Документ.Номер;
ОбъектXML.Дата = Документ.Дата;
// ... заполнение других полей
// Записываем в файл
ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.ОткрытьФайл("C:\Export\Реализация_123.xml", "Windows-1251");
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXML);
ЗаписьXML.Закрыть();
⚠️ Внимание: При работе с XDTO обратите внимание на версию платформы 1С:Предприятие. В версиях ниже8.3.10есть ограничения на работу с некоторыми типами данных в XSD-схемах (например, сxs:union).
Прямая запись XML: для нестандартных задач
Когда ни стандартные обработки, ни XDTO не подходят (например, нужна собственная структура XML или оптимизация для больших объемов данных), используется прямая запись через объект ЗаписьXML.
Преимущества метода:
- ⚡ Максимальная гибкость — можно формировать любую структуру
- 🚀 Высокая скорость при правильной оптимизации
- 🛠️ Нет зависимости от XSD-схем
Пример: выгрузка справочника "Номенклатура"
Процедура ВыгрузитьНоменклатуруВXML(КаталогВыгрузки)
// Создаем объект записи
ЗаписьXML = Новый ЗаписьXML();
ИмяФайла = КаталогВыгрузки + "Номенклатура.xml";
ЗаписьXML.ОткрытьФайл(ИмяФайла, "UTF-8");
// Начинаем документ
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("Номенклатура");
// Выбираем данные
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Элемент");
ЗаписьXML.ЗаписатьАтрибут("Код", Выборка.Код);
ЗаписьXML.ЗаписатьАтрибут("Наименование", Выборка.Наименование);
// Записываем реквизиты
ЗаписьXML.ЗаписатьНачалоЭлемента("Реквизиты");
ЗаписьXML.ЗаписатьЭлемент("Артикул", Выборка.Артикул);
ЗаписьXML.ЗаписатьЭлемент("ЕдиницаИзмерения", Выборка.ЕдиницаИзмерения.Наименование);
ЗаписьXML.ЗаписатьКонецЭлемента(); // Реквизиты
ЗаписьXML.ЗаписатьКонецЭлемента(); // Элемент
КонецЦикла;
// Завершаем документ
ЗаписьXML.ЗаписатьКонецЭлемента(); // Номенклатура
ЗаписьXML.Закрыть();
Сообщить("Выгрузка завершена: " + ИмяФайла);
КонецПроцедуры
Оптимизация для больших объемов:
- 🔄 Используйте
ВыбратьПакетом()вместо поштучной выборки - 🗑️ Очищайте память с помощью
ОчиститьПомеченныеОбъекты()после обработки пакетов - 📦 Для очень больших файлов (>1Гб) рассмотрите вариант выгрузки в несколько файлов
Как ускорить выгрузку больших справочников?
Для справочников с миллионами записей (например, номенклатура в дистрибьюторских компаниях) стандартные методы работают слишком медленно. Альтернативные подходы:
1. Пакетная обработка: разбивайте выгрузку на порции по 10-50 тыс. записей с сохранением в отдельные файлы, затем объединяйте их внешними средствами.
2. Прямой SQL-запрос: для MS SQL можно использовать запрос напрямую к базе с формированием XML через FOR XML PATH.
3. Фоновое задание: запускайте выгрузку как фоновое задание, чтобы не блокировать работу пользователей.
4. Оптимизация индексов: перед выгрузкой проверьте наличие индексов на полях, используемых в выборке.
Типичные ошибки и их решения
Даже опытные пользователи сталкиваются с проблемами при выгрузке XML. Вот TOP-7 ошибок и способы их исправления:
| Ошибка | Причина | Решение |
|---|---|---|
| Ошибка при записи XML: "Неверная кодировка" | Несовпадение кодировки в настройках и в данных (например, символы "ё", "№" в Windows-1251) | Используйте UTF-8 или предварительно очищайте данные от "проблемных" символов |
| Файл XML пустой или неполный | Не хватает прав на запись в каталог или прерван процесс выгрузки | Проверьте права пользователя и логи выгрузки |
| "Несоответствие XSD-схеме" | Структура XML не совпадает с ожидаемой (лишние/отсутствующие элементы) | Сверьте структуру с XSD, используйте валидаторы вроде XML Validator |
| Долгая выгрузка (>1 часа) | Неоптимизированный код или слишком большой объем данных | Разбейте на пакеты, используйте выборку пакетом, оптимизируйте запросы |
| Символы заменяются на "?" | Неправильная кодировка при чтении/записи | Явно укажите кодировку при открытии файла: ЗаписьXML.ОткрытьФайл(..., "UTF-8") |
Специфические ошибки XDTO:
- 🔌 "Тип не найден в пакете XDTO" — проверьте корректность импорта XSD-схемы
- 🔄 "Невозможно преобразовать значение" — убедитесь, что типы данных 1С совместимы с типами в XSD
- 📌 "Элемент не найден в фабрике" — пересоберите XDTO-пакет после изменений
⚠️ Внимание: При выгрузке данных для ФНС или ПФР обязательно проверяйте актуальность XSD-схем на официальных ресурсах. Схемы могут обновляться ежеквартально, а использование устаревшей версии приведет к отказу в приеме отчетности.
Проверка и валидация полученного XML
Выгруженный файл нужно обязательно проверить перед отправкой или использованием. Это позволит избежать отказов со стороны получателя или ошибок при загрузке.
1. Визуальная проверка
Откройте файл в любом текстовом редакторе (например, Notepad++) или специализированном XML-редакторе (XML Notepad, Oxygen XML Editor). Обратите внимание на:
- 🔍 Структуру — соответствие иерархии ожидаемой
- 📏 Полноту данных — все ли элементы на месте
- 🔤 Кодировку — нет ли "кракозябр"
2. Валидация по XSD
Если есть XSD-схема, используйте валидаторы:
- 🌐 Онлайн-сервисы: XMLValidation, CodeBeautify
- 🖥️ Локальные инструменты: XML Spy, Altova XMLValidator
- 📦 Встроенные средства: в конфигураторе 1С можно валидировать через XDTO-пакет
3. Проверка бизнес-логики
Даже технически корректный XML может содержать ошибки данных:
- 💰 Неправильные суммы в документах
- 📅 Некорректные даты (например, будущие)
- 🔢 Дублирующиеся коды элементов
Пример кода для валидации через XDTO:
Процедура ПроверитьXMLНаСоответствиеXSD(ПутьКФайлуXML, ИмяXDTOПакет)
ФабрикаXDTO = Новый ФабрикаXDTO();
Пакет = ФабрикаXDTO.Пакеты.Найти(ИмяXDTOПакет);
Попытка
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.ОткрытьФайл(ПутьКФайлуXML);
ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, Пакет.Типы.Найти("КорневойЭлемент"));
ЧтениеXML.Закрыть();
Сообщить("XML соответствует XSD-схеме!");
Исключение
Сообщить("Ошибка валидации: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Всегда проверяйте XML на трех уровнях: синтаксическая корректность (well-formed), соответствие XSD-схеме (если есть) и бизнес-логика данных. Пропуск хотя бы одного уровня приводит к проблемам на стороне получателя.
Автоматизация выгрузки: от рутинных задач к надежным процессам
Если выгрузка в XML выполняется регулярно (ежедневно, еженедельно), ее стоит автоматизировать. Это экономит время и снижает риск ошибок.
Варианты автоматизации:
- 🕒 Регламентные задания — встроенный механизм 1С для запуска по расписанию
- 🤖 Внешние обработки с графическим интерфейсом для пользователей
- 📡 Интеграция с планировщиком Windows (для запуска обработок по времени)
- ☁️ Облачные сервисы (например, 1С:Линк для обмена с веб-сервисами)
Пример настройки регламентного задания:
- Откройте
Администрирование → Регламентные задания - Создайте новое задание с типом
Выполнение обработки - Укажите путь к обработке выгрузки XML
- Настройте расписание (ежедневно в 23:00, еженедельно по понедельникам и т.п.)
- Укажите параметры запуска (каталог выгрузки, имя файла)
- Сохраните и активируйте задание
Продвинутая автоматизация:
- 📧 Отправка файла по email — добавьте в обработку код для отправки письма с вложением
- 🔗 Загрузка на FTP/SFTP — используйте объект
FTPСоединениеилиHTTPСоединение - 📊 Логирование — ведите журнал выгрузок с датой, временем и статусом
- 🔔 Оповещения — настройте уведомления об ошибках (email, Telegram-бот)
Пример кода для отправки файла по SFTP:
Процедура ОтправитьФайлПоSFTP(ПутьКФайлу, Хост, Порт, Пользователь, Пароль, УдаленныйПуть)
SFTP = Новый FTPСоединение(Хост, Порт, Пользователь, Пароль, , , Истина);
Попытка
SFTP.Соединить();
SFTP.ПоместитьФайл(ПутьКФайлу, УдаленныйПуть);
Сообщить("Файл успешно загружен!");
Исключение
Сообщить("Ошибка загрузки: " + ОписаниеОшибки());
КонецПопытки;
SFTP.Закрыть();
КонецПроцедуры
⚠️ Внимание: При автоматизации выгрузки с последующей отправкой на внешние ресурсы (FTP, email, API) убедитесь, что пароли и другие чувствительные данные хранятся вХранилище настроекилиРегистре сведений, а не жестко прописаны в коде. Это требование безопасности, особенно актуальное после вступления в силу 152-ФЗ о персональных данных.
FAQ: Ответы на частые вопросы
Как выгрузить в XML документ с табличной частью?
Для документов с табличными частями (например, "РеализацияТоваровУслуг") используйте вложенные элементы. Пример структуры:
<Документ>
<Номер>РТ-000123</Номер>
<Дата>2026-05-20</Дата>
<ТабличнаяЧасть>
<Строка>
<Номенклатура>Товар1</Номенклатура>
<Количество>5</Количество>
</Строка>
<Строка>
<Номенклатура>Товар2</Номенклатура>
<Количество>10</Количество>
</Строка>
</ТабличнаяЧасть>
</Документ>
В коде используйте цикл по строкам табличной части с записью каждого элемента отдельно.
Можно ли выгрузить в XML данные с отбором?
Да, при формировании выборки добавьте отбор. Пример для справочника "Контрагенты":
Выборка = Справочники.Контрагенты.Выбрать();
Выборка.Отбор.Виды.Установить(Перечисление.ВидыКонтрагентов.Покупатель);
Пока Выборка.Следующий() Цикл
// Запись данных в XML
КонецЦикла;
Для документов отбор настраивается аналогично через свойство .Отбор.
Как выгрузить в XML данные с вложенными справочниками (например, номенклатура с характеристиками)?
Используйте рекурсивную запись или многоуровневую структуру. Пример для номенклатуры с характеристиками:
<Номенклатура>
<Код>00123</Код>
<Наименование>Стол письменный</Наименование>
<Характеристики>
<Характеристика>
<Наименование>Цвет</Наименование>
<Значение>Белый</Значение>
</Характеристика>
<Характеристика>
<Наименование>Материал</Наименование>
<Значение>ДСП</Значение>
</Характеристика>
</Характеристики>
</Номенклатура>
В коде организуйте вложенные циклы: внешний по номенклатуре, внутренний по характеристикам.
Что делать, если при выгрузке возникает ошибка "Недостаточно памяти"?
Эта ошибка типична при работе с большими объемами данных. Решения:
- Разбейте выгрузку на части — обрабатывайте данные пакетами по 10-50 тыс. записей.
- Используйте потоковую запись — не храните все данные в памяти, записывайте их в файл сразу после выборки.
- Увеличьте память для 1С