Правка XML для 1С: внешний редактор, встроенный язык, Конвертация данных

· 11 мин

Содержание

Отредактировать XML файл в 1С проще всего во внешнем редакторе: откройте его в Notepad++ или VS Code, исправьте значение и сохраните в кодировке UTF-8. Если правок много или их нужно повторять, файл меняют программно — объектами ЧтениеXML, ПостроительDOM и ЗаписьXML во внешней обработке. Правила обмена Конвертации данных правят в самой конфигурации «Конвертация данных », а не в блокноте.

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

Какой способ правки XML выбрать

Сначала определите, что у вас за файл. В 1С чаще всего встречаются четыре вида XML:

  • 📦 сообщение обмена — файл, который одна база выгружает для другой (например, обмен БП 3.0 и УТ 11 через формат EnterpriseData);
  • 📐 правила обмена Конвертации данных 2.0 — большой XML с правилами конвертации объектов и свойств;
  • 🗄️ выгрузка универсальной обработкой «Выгрузка и загрузка данных XML» — перенос данных между базами с одинаковой конфигурацией;
  • 🔗 внешний файл — от банка, маркетплейса, контрагента, который 1С загружает своей обработкой.
СпособКогда подходитРиски
Внешний редактор1–20 точечных правок, разовая задачаСломать кодировку или структуру, ошибиться в ссылке
Загрузка в копию базы и правка в формахДанные удобнее исправить в карточках, чем в тегахНужна копия базы, долго на больших объёмах
Код на встроенном языке (DOM, XPath)Массовые однотипные заменыОшибка в условии меняет лишние узлы
Конвертация данных 2.0/3.0Ошибка повторяется в каждой выгрузкеНужен доступ к правилам и навык их отладки
Внешняя обработка с формойПравку делает бухгалтер регулярноВремя на разработку и проверку

Перед любой правкой сохраните копию исходного файла рядом, например exchange_original.xml. Без неё не с чем сравнить результат, если загрузка пойдёт не так.

Правка XML без программирования: Конфигуратор и копия базы

Посмотреть содержимое XML средствами платформы можно в Конфигураторе: Файл → Открыть, в поле типа файлов выберите «Все файлы» и укажите XML. Файл откроется в текстовом редакторе Конфигуратора. Для просмотра и пары правок этого хватит, но поиск по тегам и проверки структуры там нет.

Второй приём — править не файл, а данные в нём. Он особенно удобен, когда XML получен универсальной обработкой «Выгрузка и загрузка данных XML» или из обмена между базами:

  1. Сделайте копию рабочей базы или возьмите пустую базу той же конфигурации и релиза.
  2. Загрузите в неё XML той же обработкой или тем же обменом, которым он создан.
  3. Исправьте данные в обычных формах: карточки контрагентов, номенклатуры, документы.
  4. Выгрузите исправленные объекты заново в XML.
  5. Загрузите новый файл в рабочую базу.

Плюс подхода — 1С сама следит за типами, ссылками и обязательными реквизитами. Ошибиться в формате даты или потерять закрывающий тег невозможно.

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

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

Редактирование XML файла во внешнем текстовом редакторе

Для прямой правки подойдут Notepad++ с плагином XML Tools или VS Code с расширением для XML. Стандартный «Блокнот» Windows тоже откроет файл, но в нём нет подсветки, форматирования и проверки синтаксиса.

Порядок правки в Notepad++

  1. Откройте файл и посмотрите в строке состояния кодировку. Для файлов 1С это почти всегда UTF-8.
  2. Если весь XML записан в одну строку, отформатируйте его: в XML Tools есть команда Pretty print. Отступы не меняют смысл XML, загрузка их игнорирует.
  3. Найдите нужный элемент через поиск Ctrl+F по значению: ИНН, артикулу, номеру документа.
  4. Исправьте текст между открывающим и закрывающим тегом. Сами теги и атрибуты не трогайте, если не уверены в формате.
  5. Проверьте синтаксис командой Check XML syntax now из того же плагина.
  6. Сохраните файл, не меняя кодировку.

Спецсимволы и формат значений

Пять символов внутри значений XML записываются особым образом. Если вписать их как есть, файл перестанет читаться.

СимволКак записать в XMLПример
&&ООО "Рога & Копыта"
<&lt;Остаток &lt; 10
>&gt;Сумма &gt; 0
"&quot;внутри значения атрибута в двойных кавычках
'&apos;внутри значения атрибута в одинарных кавычках

Значения типизированных полей пишутся в формате XML-схемы, а не так, как их показывает 1С:

  • 📅 дата — 2026-03-15T00:00:00, а не 15.03.2026;
  • 🔢 число — с точкой и без пробелов: 125400.50, а не 125 400,50;
  • ✅ булево — true или false.

Уникальные идентификаторы

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

Кодировка — самая частая причина поломки. Если файл объявлен как encoding="UTF-8", а сохранён в Windows-1251, при загрузке русский текст превратится в набор знаков или загрузка прервётся с ошибкой разбора.

Программная правка XML на встроенном языке 1С

Когда однотипных правок десятки и сотни, руками их не делают. Во встроенном языке 1С 8.3 для этого есть три модели работы с XML:

МодельОбъектыКогда брать
ПотоковаяЧтениеXML, ЗаписьXMLОчень большие файлы, последовательное чтение
DOMПостроительDOM, ДокументDOM, ЗаписьDOMТочечные правки в файле разумного размера
XDTOФабрикаXDTO, ОбъектXDTOФайл соответствует известной схеме, нужна работа с типами

Для правки удобнее всего DOM: файл целиком читается в память как дерево, вы находите узлы выражением XPath, меняете их и записываете дерево в новый файл.

Пример ниже ищет во всём файле элементы с заданным именем и заменяет у них одно значение на другое. Функция local-name() в XPath нужна, чтобы поиск работал и в файлах с пространством имён по умолчанию — как в сообщениях EnterpriseData.

&НаСервереБезКонтекста
Процедура ЗаменитьЗначенияВXML(ПутьИсходный, ПутьНовый, ИмяЭлемента, СтароеЗначение, НовоеЗначение)

    Чтение = Новый ЧтениеXML;
    Чтение.ОткрытьФайл(ПутьИсходный);
    Построитель = Новый ПостроительDOM;
    Документ = Построитель.Прочитать(Чтение);
    Чтение.Закрыть();

    Выражение = "//*[local-name()='" + ИмяЭлемента + "']";
    Разыменователь = Новый РазыменовательПространствИменDOM(Документ);
    Результат = Документ.ВычислитьВыражениеXPath(Выражение, Документ, Разыменователь);

    // Сначала собираем узлы в массив, потом меняем:
    // так изменение документа не мешает обходу результата XPath.
    Узлы = Новый Массив;
    Узел = Результат.ПолучитьСледующий();
    Пока Узел <> Неопределено Цикл
        Узлы.Добавить(Узел);
        Узел = Результат.ПолучитьСледующий();
    КонецЦикла;

    Заменено = 0;
    Для Каждого Элемент Из Узлы Цикл
        Если СокрЛП(Элемент.ТекстовоеСодержимое) = СтароеЗначение Тогда
            Элемент.ТекстовоеСодержимое = НовоеЗначение;
            Заменено = Заменено + 1;
        КонецЕсли;
    КонецЦикла;

    Запись = Новый ЗаписьXML;
    Запись.ОткрытьФайл(ПутьНовый, "UTF-8");
    ЗаписьDOM = Новый ЗаписьDOM;
    ЗаписьDOM.Записать(Документ, Запись);
    Запись.Закрыть();

    Сообщить("Заменено значений: " + Формат(Заменено, "ЧН=0; ЧГ=0"));

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

Пример вызова: ЗаменитьЗначенияВXML("C:\Обмен\in.xml", "C:\Обмен\in_fixed.xml", "ИНН", "7701000000", "7702000000"). Результат пишется в новый файл, исходный остаётся нетронутым.

Другие частые операции в той же модели:

  • ✏️ изменить атрибут — Элемент.УстановитьАтрибут("Имя", "Значение");
  • 🗑️ удалить узел — Элемент.РодительскийУзел.УдалитьДочерний(Элемент);
  • 🔍 сузить поиск — уточнить выражение XPath, например искать ИНН только внутри элементов контрагента.

Формат "ЧН=0; ЧГ=0" важен: без ЧН=0 функция Формат превращает ноль в пустую строку, и сообщение «Заменено значений: » ничего не скажет.

Где выполняется код и где лежит файл

Процедура выше работает на сервере, поэтому путь C:\Обмен\in.xml — это путь на компьютере сервера 1С. В файловой базе сервер и клиент совпадают, и вопроса нет. В клиент-серверной базе файл с компьютера пользователя сначала передают на сервер через временное хранилище, а результат возвращают тем же путём.

Очень большие файлы

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

Правила и файлы обмена Конвертации данных 2.0 и 3.0

Если неправильное значение появляется в каждом новом файле обмена, править сам файл бессмысленно. Причина в правилах, и чинить нужно их.

Конвертация данных 2.0

Правила КД 2.0 — это XML-файл. Внутри — правила конвертации объектов (ПКО), правила конвертации свойств (ПКС), правила выгрузки данных и обработчики событий с кодом на встроенном языке.

Порядок правки:

  1. Откройте конфигурацию «Конвертация данных» 2.0 и загрузите в неё правила из XML-файла вместе с метаданными обеих конфигураций.
  2. Найдите нужное правило конвертации объекта и в нём — правило свойства, которое даёт неверное значение.
  3. Исправьте соответствие свойств или код обработчика.
  4. Сохраните правила обратно в XML-файл.
  5. Подключите новые правила в базе, где идёт обмен: в настройках синхронизации или в обработке «Универсальный обмен данными в формате XML».

Править XML правил КД 2.0 в блокноте технически можно — например, исправить опечатку в коде обработчика. Но связи между правилами там держатся на именах, и одно неверное переименование ломает весь обмен. Структурные изменения делайте в КД.

Конвертация данных 3.0

В КД 3.0 правила не хранятся отдельным XML. Конфигурация «Конвертация данных» 3.0 формирует текст модуля менеджера обмена, и он встраивается в конфигурацию базы. Обмен идёт сообщениями в формате EnterpriseData: корневой элемент Message, заголовок Header с номером сообщения и версией формата, данные — в Body.

Что можно править в сообщении EnterpriseData:

  • значения реквизитов внутри объектов в Body — по правилам из раздела про внешний редактор;
  • лишние объекты целиком, если их нельзя загружать, — удаляйте элемент объекта полностью, от открывающего до закрывающего тега.

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

Ошибки при загрузке отредактированного XML и их проверка

Ошибки после ручной правки делятся на два вида. Синтаксические — файл перестал быть корректным XML. Ошибки схемы — XML корректен, но значение не подходит по типу или стоит не на своём месте.

Синтаксис проверяется до загрузки в 1С: Check XML syntax в Notepad++ или подсветка ошибок в VS Code показывают строку и позицию. Если есть XSD-схема формата, проверьте файл и по ней — в XML Tools это команда Validate now.

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

Для сравнения двух версий файла удобен плагин Compare в Notepad++ или встроенное сравнение VS Code. Видно ровно то, что вы поменяли, — и случайно задетое тоже.

Внешняя обработка для автоматической правки XML

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

Как её собрать:

  1. В Конфигураторе: Файл → Новый → Внешняя обработка.
  2. На форму добавьте реквизиты: путь к файлу или каталогу, имя элемента, старое и новое значение.
  3. Добавьте команду «Выполнить»: в клиентском обработчике выбор файла, затем вызов серверной процедуры правки.
  4. Для пакетной обработки переберите файлы каталога функцией НайтиФайлы(Каталог, "*.xml") и для каждого вызовите правку, записывая результат с суффиксом _fixed.
  5. Сохраните обработку в файл .epf.

Запуск в режиме Предприятия — главное меню, Файл → Открыть. Пользователю нужно право на интерактивное открытие внешних обработок, а при первом открытии платформа показывает предупреждение безопасности.

Чтобы бухгалтер не искал файл обработки на диске, в БП 3.0 её регистрируют в Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Для регистрации в модуле объекта обработки нужна экспортная функция СведенияОВнешнейОбработке(), которая описывает её вид и команды.

Что стоит заложить в такую обработку сразу:

  • 📝 протокол: сколько узлов найдено и сколько заменено в каждом файле;
  • 👀 режим «только проверить» — показать найденные значения без записи;
  • 🛡️ запись в новый файл, а не поверх исходного.

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

Можно ли открыть XML-файл в 1С как таблицу?
Штатного табличного просмотра XML в режиме Предприятия нет. Для таблицы прочитайте файл встроенным языком и выведите данные в табличный документ, либо загрузите файл в копию базы и смотрите данные в списках.
Почему после сохранения в «Блокноте» файл перестал загружаться?
Чаще всего изменилась кодировка: старые версии «Блокнота» по умолчанию сохраняли в ANSI. Сохраните файл заново в UTF-8 и сверьте с исходной копией.
Нужно ли форматировать XML отступами перед загрузкой обратно?
Нет. Переносы строк и отступы между тегами 1С игнорирует. Форматирование нужно только для удобства чтения.
Можно ли править XML прямо в рабочей базе через обработку, без копии файла?
Можно, но так вы теряете исходник для сравнения и отката. Пишите результат в новый файл и загружайте его после проверки.
Чем отличается правка правил КД 2.0 от правки файла обмена?
Правка файла исправляет одну выгрузку. Правка правил меняет все будущие выгрузки. Если ошибка повторяется, меняйте правила.