Как в 1С 7.7 выгрузить XML с читаемым форматированием и исправить ошибки загрузки данных?

Программист 1С v7.7 Бухгалтерский учет Торговля и дистрибуция
← На главную

При выгрузке документов из 1С:Предприятие 7.7 в формат XML программисты часто сталкиваются с двумя типичными проблемами. Первая — это форматирование: файл, созданный стандартными средствами вроде v7plus.dll, представляет собой одну длинную строку, которую невозможно анализировать в текстовом редакторе. Вторая — ошибки при загрузке такого файла в сторонние системы (например, оператору ЭДО "Диадок"), когда часть данных, например, номера строк в таблице, не считывается, хотя структура файла кажется верной. Разберем, как решить обе эти задачи.

Решение проблемы с форматированием XML (вывод "лесенкой")

Выясним причину, почему XML-файл отображается в одну строку. Это не является ошибкой или "глюком" компоненты v7plus.dll. Такое поведение называется минификацией. Формат XML предназначен в первую очередь для обмена данными между программами, которым совершенно не важны отступы и переносы строк. Отсутствие этих "лишних" символов экономит место и немного ускоряет парсинг. Однако для отладки и ручного анализа читаемый вид файла критически важен. Рассмотрим несколько способов добиться "красивого" вывода.

Способ 1: Формирование XML как текстового файла (рекомендуемый)

Самый надежный и контролируемый метод — это отказаться от XML-парсеров, которые не поддерживают форматирование, и формировать файл построчно, как обычный текстовый документ. В этом случае вы полностью управляете структурой, отступами и переносами строк. Отличный пример такого подхода можно найти прямо в типовых конфигурациях 1С 7.7.

Посмотрим на пример из регламентированной отчетности:

  1. Откройте в конфигураторе отчет 6NDFL1501.ERT (форма 6-НДФЛ).
  2. Найдите в его модуле процедуру СформироватьФайлВыгрузки.
  3. Проанализируйте, как она работает: процедура рекурсивно вызывает функцию ЗаписатьУзелВФайл, передавая в нее данные узла и его уровень вложенности.

Логика работы примерно следующая: функция ЗаписатьУзелВФайл получает на вход уровень вложенности и генерирует соответствующий отступ (например, несколько символов табуляции). Затем она записывает в текстовый файл открывающий тег, вызывает сама себя для всех дочерних узлов (увеличив уровень вложенности на 1), а после их обработки записывает закрывающий тег с тем же отступом. Это позволяет сформировать идеально структурированный XML-документ.

Способ 2: "Быстрый и грязный" — замена в текстовом редакторе

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

Разберем по шагам:

  1. Сгенерируйте ваш XML-файл, пусть даже он будет в одну строку.
  2. Откройте его в текстовом редакторе.
  3. Вызовите диалог "Найти и заменить".
  4. В поле "Найти" введите символ >.
  5. В поле "Заменить" введите > и символ переноса строки (в Notepad++ это \r\n в расширенном режиме поиска).

Это разобьет файл на строки после каждого закрывающего тега. Для лучшего результата можно использовать замену >< на >\r\n<. Этот способ не создаст правильных отступов-"лесенки", но уже сделает структуру файла наглядной и позволит легко найти нужные теги.

Способ 3: Использование системного объекта Microsoft.XMLDOM

Более современный и гибкий подход для 1С 7.7 — использовать COM-объект для работы с XML. Встроенные средства Windows позволяют создавать XML-документ в памяти как иерархию объектов, а затем сохранять его в файл с автоматическим форматированием.

Ключевой момент при работе с любым из этих методов — кодировка. 1С 7.7 по умолчанию работает в кодировке Windows-1251. Однако практически все современные системы обмена данными, включая операторов ЭДО, требуют XML в кодировке UTF-8. Поэтому при сохранении файла убедитесь, что в его заголовке указано <?xml version="1.0" encoding="UTF-8"?>, и сам файл сохранен именно в этой кодировке. Для перекодировки строк из ANSI в UTF-8 в 1С 7.7 может потребоваться использование внешних компонент.

Решение проблемы с отсутствием номеров строк при загрузке

Проанализируем ситуацию: выгруженный из 1С 7.7 файл УПД загружается в Диадок, но номера строк в табличной части не появляются. При этом аналогичный файл из 1С 8.x загружается корректно. Как показывает практика, в 99% случаев проблема кроется в самом XML-файле.

Основная причина — ошибка в имени тега или его атрибута. Формат электронных документов строго регламентирован ФНС. Любое отклонение, даже в регистре символов (XML чувствителен к регистру), приводит к тому, что система-получатель не может найти ожидаемый тег и пропускает данные.

Автор исходного вопроса нашел ошибку самостоятельно в тот момент, когда начал готовить фрагменты кода и XML-файлов для публикации на форуме. Это иллюстрирует самый эффективный метод отладки.

Пошаговая инструкция по поиску ошибок в XML

Если ваш файл не загружается или загружается частично, выполните следующие действия:

  1. Найдите эталонный файл. Возьмите XML-документ, который гарантированно загружается корректно. Это может быть файл, выгруженный из обновленной 1С 8, или пример из документации вашего оператора ЭДО.
  2. Используйте инструмент сравнения файлов. Откройте ваш проблемный файл и эталонный в специальной программе для сравнения текста (например, обработке для сравнения XML, WinMerge, Beyond Compare или воспользуйтесь плагином Compare для Notepad++).
  3. Сравнивайте файлы поблочно, обращая внимание на:
    • Имена тегов. Убедитесь, что тег для номера строки (например, НомСтр) в вашем файле называется точно так же, как в эталонном. Проверьте каждую букву и регистр.
    • Имена атрибутов. Аналогично проверьте все атрибуты внутри тегов (например, НомерСтроки="1").
    • Структуру и вложенность. Убедитесь, что тег с номером строки находится внутри правильного родительского тега (например, внутри блока с информацией о товаре <СведТов>).
    • Форматы данных. Проверьте, что числовые значения не содержат лишних символов, а даты соответствуют требуемому формату.

Этот метод почти всегда позволяет быстро выявить расхождение и исправить ошибку в коде формирования XML в 1С 7.7.

Важные технические и законодательные аспекты

При работе с выгрузкой электронных документов из 1С 7.7 важно помнить о нескольких вещах:

← На главную