При написании обмена между 1С 7.7 и "Меркурием" через ВЕТИС.API я впервые вплотную столкнулся с форматом XML. За основу взял существующую обработку "Обмен с системой Меркурий через Ветис.API" (//infostart.ru/public/665865/). Обработка использует внешнюю компоненту V7PLUS.DLL, которая позволяет генерировать XML для запроса и читать XML ответа.
По мере погружения в более сложные XML-запросы и дешифровки всё более сложных ответов в формате XML я понял, что становится всё тяжелее "переварить" ответный XML с помощью навигации по узлам, тем более, что у разных запросов XML-ответ приходит в разном формате с разной "глубиной залегания" узлов. Просмотр сложных XML-файлов в браузере помогал в понимании структуры XML, но окончательно не устраивал.
Я стал искать универсальные "читалки" XML для 1С 7.7, но универсального решения не нашёл, всё сводилось к фразе "циклы ... циклы ... циклы".
Пришлось самому осваивать свойства и методы внешней компоненты V7PLUS.DLL для навигации по узлам XML и конвертации узла XML в объекты 1С. В результате была написана функция "ПолучитьТаблицуПодчиненныхУзловXML()", которой на вход подаётся узел XML или весь XML-документ, а на выходе возвращается таблица значений, которая содержит подчинённые узлы, их характеристики, и для каждого подчинённого узла, имеющего свои подчинённые узлы - свою таблицу подчинённых узлов. И так до самого глубокого уровня. Атрибуты узлов содержатся в списке атрибутов, который доступен в отдельной колонке. Таким образом, подавая на вход функции любой XML-файл заранее неизвестной структуры мы получаем его автоматический перевод в объекты 1С (таблицу значений со вложенными таблицами и списками значений), что позволяет поручать разбор любого XML 1С-специалисту, который может быть не знаком со свойствами и методами "чтения" узлов XML.
При разборе сложноподчинённой таблицы значений, получаемой на выходе функции "ПолучитьТаблицуПодчиненныхУзловXML()", желательно наглядно представлять её структуру, количество вложений и т. д. Для этого используется универсальная функция "ОтладочныйПросмотрТаблицы()", которая позволяет вывести в печатную форму любую таблицу значений с возможностью интерактивного открытия и отладочного просмотра вложенных таблиц и списков значений. Пример использования отладочного просмотра таблицы значений с составом XML-файла показан на рис. 2. Однако на больших XML-файлах отладочный просмотр может приводить к "вылетанию" 1С. То есть сама таблица значений нормально возвращается из функции "ПолучитьТаблицуПодчиненныхУзловXML()", её перебор возможен, но невозможен отладочный просмотр.
Для наглядного анализа XML-файла заранее неизвестной структуры в обработке имеется возможность конвертации XML-файла в печатную форму формата MXL древовидной структуры (см. рис. 3). Кроме того, с помощью внешней компоненты "Йоксель" (SpreadSheet.dll) в обработке есть возможность вывода иерархической печатной формы со свёрткой строк по узлам (см. рис. 4).
Кроме того, наряду с конвертацией XML-файла в печатную форму MXL, в обработке предусмотрена конвертация XML-файла в файл формата Excel (XLS) (см рис. 5). В случае использования внешней компоненты "Йоксель" - Excel-файл сохраняется сразу иерархическим, а при отсутствии внешней компоненты "Йоксель" - происходит попытка добавить иерархию в Excel-файл через VBA-операторы. Однако для этого на клиентском компьютере должно быть установлено приложение "Excel" (тестирование проводилось на Microsoft Office Excel 2007 (12.0.6611.1000) SP3 MSO (12.0.6662.5000)).
Обработка позволяет сохранять полученные файлы MXL и/или XLS по заданным путям.
Таким образом, обработка "ОтладочныйПросмотрXML.ert" позволяет:
- преобразовать XML-файл неизвестной структуры в таблицу значений для дальнейших манипуляций с ней средствами встроенного языка 1С (конвертер XML в Таблицу значений)
- вывести полученную из XML-файла таблицу значений на просмотр с возможностью "погружения" в более глубокие узлы XML
- вывести XMLфайл неизвестной структуры в древовидную печатную форму формата MXL с возможностью свёртки строк по узлам XML (конвертер XML в MXL)
- вывести XMLфайл неизвестной структуры в древовидную печатную форму формата Excel (XLS) с возможностью свёртки строк по узлам XML (конвертер XML в XLS)
Обработка использует внешние компоненты V7PLUS.DLL и SpreadSheet.dll, которые можно положить в каталог внешнего отчёта, каталог базы или каталог программы.
Тестирование обработки проводилось на релизе 1С 7.7 (7.70.025) как в DBF, так и в SQL версии.
Срок бесплатной технической поддержки - 1 месяц.