Преобразование xml в ТаблицуЗначений. Полная аналогия алгоритма Excel. Управляемые формы

Полная аналогия алгоритма Excel преобразования xml в ТаблицуЗначений!
Весь код открыт, обработку выкладываю как пример использования для вставки в свою систему.
Скорость работы: xml в 780 000 строк (38Мб) на 56 000 объектов в фоновом режиме на сервере обрабатывается 22 минуты.
Поначалу читаю xml в дерево значений. И уже дерево разбираю в плоскую таблицу с формированием по каждому реквизиту отдельной колонки результата.

Для меня необходимо было обрабатывать большие эксемельки (от 30Мб). Эксель на них рушится от нехватки памяти и оставляет пустые строки в середине таблицы.

При этом у моих xml нет стилей и впомине.

Посмотрел аналогии, ничего путного не нашел и написал свою обработку.

Обращаю внимание, данное решение имеет смысл ТОЛЬКО для xml без xslt! Для эксемелек со стилями напишите свою процедурку, которая будет работать в разы быстрее.

Немного о механизме:

— xml читается «вдумчиво», дети объекта и вложенные таблицы наследуют реквизиты родителя.

— Вложенные таблицы расскладываю аккуратно как это делает Эксель (не перемножаются, а каждая строка вложенной таблицы объекта xml выкладывается отдельной результирующей строкой).

— Обработка не имеет ограничений ни по количеству реквизитов, ни по количеству уровней вложенности. Работает в рекурсии.

— Также реализовал здесь «умную» фильтрацию колонок. Т.е. без «умной» фильтрации, если Вам не нужны колонки с вложенной таблицей и без них «свернуть» таблицу, то таки останутся лишние пустые строки. Я реализовал фильтр колонок, который не создает этих пустых строк. В данной обработке фильтр не вывел на интерфейс, но весь функционал оставил. Доработайте сами.

— Все реализовывал отдельными процедурами. Чтобы Вам проще было встраивать себе в систему.

Как обычно, приветствую комментарии и предложения!

5 Comments

  1. gubanoff

    Хорошая обработка, сам думал такую писать. Иногда удобнее xml представить в виде плоской таблицы. Единственное отредактировал кусок:

    Если БезТочек Тогда
    стр = СтрЗаменить(стр, «.», «»);
    КонецЕсли;
    

    Иначе ругалось и не добавляло колонки в тз, т.к. в наименовании были пробелы.

    Reply
  2. Rusk51

    форма тупо не открывается в бух 8.2 . скачал глянуть, а теперь нужно ещё читать и править код. эйех

    Reply
  3. Yashazz

    Было такое когда-то давно, запись эксель-файла путём создания xml и конвертации. Но было давно и не скажу, что работало нормально.

    Reply
  4. Bitnikov

    (2) Rusk51, В управляемых формах открываете?

    Поднял для теста 8.2, создал пустую базу, скачал обработку с инфостарта и открыл БЕЗ изменений.

    Вопрос закрываю

    Reply
  5. ManyakRus

    отлично работает 🙂

    и дерево делает хорошо

    особенно ТаблицаЗначений получилась классная 🙂

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *