Правка XML для 1С: внешний редактор, встроенный язык, Конвертация данных
Содержание
Отредактировать 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» или из обмена между базами:
- Сделайте копию рабочей базы или возьмите пустую базу той же конфигурации и релиза.
- Загрузите в неё XML той же обработкой или тем же обменом, которым он создан.
- Исправьте данные в обычных формах: карточки контрагентов, номенклатуры, документы.
- Выгрузите исправленные объекты заново в XML.
- Загрузите новый файл в рабочую базу.
Плюс подхода — 1С сама следит за типами, ссылками и обязательными реквизитами. Ошибиться в формате даты или потерять закрывающий тег невозможно.
Если файл пришёл из обмена, иногда проще вообще не трогать XML. Исправьте данные в базе-источнике и выполните синхронизацию ещё раз: новое сообщение уйдёт уже с правильными значениями.
Не загружайте экспериментальные файлы сразу в рабочую базу. Загрузка создаёт и перезаписывает объекты, а откатить её штатно нельзя — только восстановлением из резервной копии.
Редактирование XML файла во внешнем текстовом редакторе
Для прямой правки подойдут Notepad++ с плагином XML Tools или VS Code с расширением для XML. Стандартный «Блокнот» Windows тоже откроет файл, но в нём нет подсветки, форматирования и проверки синтаксиса.
Порядок правки в Notepad++
- Откройте файл и посмотрите в строке состояния кодировку. Для файлов 1С это почти всегда UTF-8.
- Если весь XML записан в одну строку, отформатируйте его: в XML Tools есть команда Pretty print. Отступы не меняют смысл XML, загрузка их игнорирует.
- Найдите нужный элемент через поиск
Ctrl+Fпо значению: ИНН, артикулу, номеру документа. - Исправьте текст между открывающим и закрывающим тегом. Сами теги и атрибуты не трогайте, если не уверены в формате.
- Проверьте синтаксис командой Check XML syntax now из того же плагина.
- Сохраните файл, не меняя кодировку.
Спецсимволы и формат значений
Пять символов внутри значений XML записываются особым образом. Если вписать их как есть, файл перестанет читаться.
| Символ | Как записать в XML | Пример |
|---|---|---|
& | & | ООО "Рога & Копыта" |
< | < | Остаток < 10 |
> | > | Сумма > 0 |
" | " | внутри значения атрибута в двойных кавычках |
' | ' | внутри значения атрибута в одинарных кавычках |
Значения типизированных полей пишутся в формате 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-файл. Внутри — правила конвертации объектов (ПКО), правила конвертации свойств (ПКС), правила выгрузки данных и обработчики событий с кодом на встроенном языке.
Порядок правки:
- Откройте конфигурацию «Конвертация данных» 2.0 и загрузите в неё правила из XML-файла вместе с метаданными обеих конфигураций.
- Найдите нужное правило конвертации объекта и в нём — правило свойства, которое даёт неверное значение.
- Исправьте соответствие свойств или код обработчика.
- Сохраните правила обратно в XML-файл.
- Подключите новые правила в базе, где идёт обмен: в настройках синхронизации или в обработке «Универсальный обмен данными в формате 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.
& или < без экранирования, лишний символ до объявления <?xml. Проверьте синтаксис в редакторе — он покажет номер строки.ГГГГ-ММ-ДДTЧЧ:ММ:СС, число с запятой, слово вместо true/false, лишний или переставленный элемент. Сравните правленый фрагмент с таким же фрагментом в неизменённом файле.Для сравнения двух версий файла удобен плагин Compare в Notepad++ или встроенное сравнение VS Code. Видно ровно то, что вы поменяли, — и случайно задетое тоже.
Внешняя обработка для автоматической правки XML
Если исправлять файлы приходится регулярно — например, каждый день чистить выгрузку маркетплейса перед загрузкой, — процедуру из раздела про встроенный язык стоит обернуть во внешнюю обработку с формой.
Как её собрать:
- В Конфигураторе:
Файл → Новый → Внешняя обработка. - На форму добавьте реквизиты: путь к файлу или каталогу, имя элемента, старое и новое значение.
- Добавьте команду «Выполнить»: в клиентском обработчике выбор файла, затем вызов серверной процедуры правки.
- Для пакетной обработки переберите файлы каталога функцией
НайтиФайлы(Каталог, "*.xml")и для каждого вызовите правку, записывая результат с суффиксом_fixed. - Сохраните обработку в файл
.epf.
Запуск в режиме Предприятия — главное меню, Файл → Открыть. Пользователю нужно право на интерактивное открытие внешних обработок, а при первом открытии платформа показывает предупреждение безопасности.
Чтобы бухгалтер не искал файл обработки на диске, в БП 3.0 её регистрируют в Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Для регистрации в модуле объекта обработки нужна экспортная функция СведенияОВнешнейОбработке(), которая описывает её вид и команды.
Что стоит заложить в такую обработку сразу:
- 📝 протокол: сколько узлов найдено и сколько заменено в каждом файле;
- 👀 режим «только проверить» — показать найденные значения без записи;
- 🛡️ запись в новый файл, а не поверх исходного.