Обработка позволяет выгрузить плоский (без группировок) результат запроса в XML произвольной структуры с неограниченным количеством уровней вложенности данных.
Обработка представляет из себя некий симбиоз из 2-х:
1. Консоль запросов (взял за основу консоль запросов ИР //infostart.ru/public/57854/)
2. Выгрузка документа в XML произвольной структуры (за основу взята обработка //infostart.ru/public/85238/)
Отдельное спасибо их авторам за разрешение использовать свои обработки.
Описание последовательности работы:
1. Пишем некий запрос, результат которого требуется выгрузить в XML. Причем в нем не обязательно иметь все поля, которые присутствуют в структуре файла XML. Например, если значение какого то реквизита постоянное, то это значение можно задать в форме описания структуры XML.
2. Задаем необходимые параметры и выполняем его.
3. Открываем закладку «Выгрузка в XML» и нажимаем на кнопку «Редактировать настройки»
4. Задаем имя файла образца и нажимаем кнопку «Прочитать XML».
5. После успешного чтения структуры XML необходимо задать соответствие узлов (реквизитов) XML и полей результата запроса. Это делается путем выбора реквизита запроса в таблице структуры XML.
6. И, наконец, самое интересное. В колонке «Ключевое поле» необходимо в строке с нужным реквизитом XML указать поле запроса, которое будет играть роль ключа для данного реквизита. Это означает то, что узел XML (включая подчиненные) будет выгружаться несколько раз, пока поле в таблице результата имеет одинаковое значение. Подчиненные узлы также могут иметь ключевое поле.
7. Для выгрузки необходимо нажать кнопку «Выгрузить результат запроса». После чего, указать имя файла выгрузки.
Для полного понимания приведу пример результата запроса (рис. 1), настройки структуры XML (рис. 2) и файла XML результата (рис. 3), который получается после обработки результата запроса. Образец файла XML можно увидеть на рис 4.
Вкратце опишу смысл узлов и реквизитов XML:
voucher — это узел, описывающий некий документ, имеющий реквизит «id» — номер документа.
voucher_head — секция шапки документа
inputOp — реквизит шапки документа
voucher_body — секция табличной части документа
entry — секция строки табличной части документа
sum,kol — реквизиты строки табличной части.
Предположим, что нам необходимо выгрузить все документы одного вида, а также реквизиты табличной части документа другого вида. Документы имеют некое общее поле для связи друг с другом.
Для выгрузки всего результата запроса необходимо создать некое ключевое поле с любым одинаковым значением. В данном примере этим полем является «ПолеКлюча» со значением «1» (см. рис. 1).
В нашем случае «ПолеКлюча» необходимо прописать в качестве ключевого поля для XML-узла «voucher«. Что мы и видим на рис. 2.
А поле «Номер» результата запроса является ключевым для строк табличной части. Т.е. для XML-узла «entry».
Если мы таким образом настроим структуру XML-файла, как показано на рис. 2, то добьемся нужного нам результата. Т.е. будут выгружены все документы и все строки табличных частей в документе. См. рис. 3.
Как видите, поле «inputOp» во всех документах содержит то значение, которое задано в графе «Значение» в таблице настройки структуры XML.
В заключение, хочу сказать, что обработка, в идеале, должна открываться в типовых конфигурациях, имеющих справочник «НастройкиПользователей». В противном случае будут недоступны функции сохранения настроек в самой конфигурации, но будет доступна функция сохранения настроек в файле.
Все пожелания/предложения/ошибки прошу высказывать в комментариях.
Сама идея замечательная, но реализация подводит. Обработку нельзя просто открыть и использовать. При открытии сразу выдается куча ошибок — Имена функций, вызываемые из форм не совпадают с именами в модуле обработки — во многих процедурах и функциях пропущен «_». К тому же в форме «ФормаНастройки» идет обращение к модулям «СохранениеНастроек», «ТиповыеОтчеты», которые отсутствуют в типовой конфигурации УТ10.3.
Не работает на БГУ 1.0
{Форма.ирКлсПолеТекстовогоДокументаСКонтекстнойПодсказкой.Форма(107,3)}: Процедура или функция с указанным именем не определена (ЛксСообщитьСУчетомМодальности)
<<?>>ЛксСообщитьСУчетомМодальности(ОписаниеОшибки(), мСообщенияЧерезПредупреждения);
{Форма.ирКлсПолеТекстовогоДокументаСКонтекстнойПодсказкой.Форма(108,3)}: Процедура или функция с указанным именем не определена (ЛксСообщитьСУчетомМодальности)
(2) kurt52, Предполагаю, что вы пытаетесь открыть форму в управляемом режиме. Данная обработка предполагает режим запуска предприятия с обычными формами.
(3) Elgrego, можно мне здесь скинуть подправленную версию? Изначально была куча ошибок, теперь работает