gifts2017

Дерево метаданных документа с подчиненными узлами

Опубликовал Илья Шатов (ilosa) в раздел Программирование - Практика программирования

В форме пользователь может выбирать любой документ, имеющийся в системе.
Обработка строит развернутую структуру метаданных. Например, если выбран документ "Поступление товаров и услуг", то отображаются все его
реквизиты, табличные части, их реквизиты, формы и макеты. Для каждого реквизита ссылочного типа тоже разворачивается его структура (например, для реквизита "Контрагент") и так далее. Результат обработки представлен в виде дерева значений, размещенного на форме

В обработке представляется структура метаданных выбранного документа не в конфигураторе, а в пользовательском режиме. Программным способом обработка обращается к метаданным и считывает соответствующие свойства. Корневым узлом будет выбранный документ. Подчиненными элементами дерева будут реквизиты этого документа, стандартные реквизиты, табличные части и их реквизиты. Если реквизит ссылочного типа, например, номенклатура, то у него выбираются все реквизиты. Реквизиты бывают составного типа данных. Это значит, что некоторые реквизиты, например, получатель, может иметь тип, ссылка на справочник физ. лица и ссылка на справочник контрагенты. В этом случае структура данного реквизита будет следующая: следующим подчиненным узлом указывается его тип. Для реквизита получатель существует два ответвления физ. лица и контрагенты, дальше их реквизиты. Если тип реквизита не является составным, то его тип выводится в одной строке с именем реквизита. Так выглядит дерево. При построении дерева используется рекурсия. Обрабатывается каждый реквизит и если он ссылочного типа данных, для него строится поддерево и так далее, до тех пор, пока не дойдёт до окончания этого дерева, т.е. до простых примитивных типов данных, для которых нельзя сделать разузлование. Возможно зацикливание. Например, в номенклатуре есть реквизит последней продажи, тип ДокументСсылка.РеализацияТоваров. Система поймет, что перед ней ссылочный тип и будет пытаться строить поддерево, которое уже начала строить в начале, затем процесс дойдет до номенклатуры, и опять по циклу. Проблема решена так, необходимо запомнить, при каждом рекурсивном вызове, какие реквизиты были обработаны ранее и если реквизит с таким типом данных уже обрабатывался прекращать построение поддерева. 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
metadoc.epf
.epf 6,92Kb
16.01.13
72
.epf 6,92Kb 72 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр (Иной) 16.01.13 17:27
А вот вопрос, если в реквизите Сотрудник (ссилка на справочник Сотрудники) документа есть поле, которое содержит ссылку на справочник Сотрудники (вроде как указывается непосредственный начальник). Как тогда при такой рекурсивной структуре будут отображены реквизиты?
2. TMV 16.01.13 19:27
(0) где эта вещь может пригодиться?
3. Александр (Иной) 16.01.13 19:35
Может пригодится для динамического формирования параметров отчетов (отборов, сортировок и т.д.), перечень которых не известен на момент проектирования запроса. Типа универсальных отчётов.

Но это уже "дебри". Как правило 98% отчётов, в той или иной степени специализированны. Ну и в 8-ке итак хороший движок построения запросов =)
4. TMV 16.01.13 19:38
(3) Иной, механизм СКД все это умеет, а он уже везде..
5. Александр (Иной) 16.01.13 19:43
Это из разряда очумелих ручек или сделай сам. На ценителей в общем говоря =).

Меня просто интересовало структура создавалась сразу, или же прорисовывалась при разворачивании. Тоесть учитывался ли фактор возможной рекурсии, или нет =).
6. TMV 16.01.13 19:55
(5) Иной, а по поводу вашего вопроса в (1) нужно текст дочитать до конца)
7. Александр (Иной) 16.01.13 20:03
Упс... Действительно. Но это не суть важно. Структуру можно "рисовать" при возникновении нужды, то есть при разворачивании. Это и меньше ресурсов займёт.

А подход по решению не совсем правилен. В приведённом мною примере, я бы вот хотел бы сделать, например, отбор по начальнику сотрудника, или даже по управлению начальника отдела сотрудника. таким образом - это не панацея.
8. TMV 16.01.13 20:06
(7) Иной, про начальника не понял.. здесь же дерево МЕТАданных..
9. Александр (Иной) 16.01.13 23:50
Это я отвлёкся немного. Фантазия на тему применения...
10. Артано Майаров (Артано) 21.03.13 06:49
Вопрос автору: чем не нравится построитель отчета?
11. andpyxa (andpyxa) 12.12.13 16:41
Нужно добавить чтобы и справочники разматывало, если есть такие реквизиты ссылочного типа, а не только документы.
12. Максим Жохов (ZhokhovM) 23.05.14 17:34
Ни хрена не работает ваша обработка, выбираю документ Авансовый отчет и нажимаю Заполнить, заполнение длилось более 2х часов и результата не было, а точнее закрыл нафиг режим предприятия. Проверял на УТ.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа