Отчеты в Visio на примере выгрузки схемы связанных справочников

5 7

Несколько лет назад мне довелось проектировать один достаточно сложный заказной модуль в DIRECTUM. Был написан краткий техпроект, описывающий в текстовой форме структуру справочников модуля, их взаимосвязи, взаимодействие друг с другом. На первый взгляд, все казалось логичным. Однако, когда модуль был реализован и начал использоваться, обнаружилось, что некоторые сущности дублируют друг друга, отличаясь лишь местом и незначительными особенностями использования. Не то чтобы с этим нельзя было работать, но меня, как проектировщика, такая ситуация огорчила.

Тогда я задумался - какие инструменты могли бы мне помочь найти подобные ошибки на этапе проектирования или хотя бы на ранних стадиях разработки. Проанализировав возможные причины ошибки при проектировании, в моем случае я остановился на двух:

  • недостаточная наглядность проекта;
  • изменяющиеся по ходу разработки требования.

Каким образом избавиться от влияния этих причин? Конечно, очень много зависит и от опыта проектировщика, и от качественного рецензирования, но представим, что разработчик проекта предоставлен самому себе и он не настолько гуру, чтобы держать весь проект в голове. Улыбка Очевидно, что графическая схема сущностей сильно бы помогла. Она позволила бы повысить наглядность, но, во-первых, создание такой схемы трудоемкая (и, по-моему, достаточно скучная) задача, а во-вторых, изменяющиеся требования заставляют эту схему еще и постоянно актуализировать. Разумеется, хорошо бы было получать такую схему каким-либо автоматическим способом.

Первое что пришло на ум и было под рукой - MS Visio 2007. Позволяет строить схемы и, что очень важно, имеет собственный механизм оптимизации расположения блоков. Удалось набросать следующий сценарий - у пользователя запрашивается список интересующих его справочников, по ним строится схема взаимосвязей в Visio. Что включает в себя схема проще всего понять из способа ее построения:

  1. На схеме размещаются выбранные пользователем справочники.
  2. На схему добавляются все справочники, в которых используются справочники, находящиеся на схеме, и все справочники, которые используются справочниками, находящимися на схеме.
  3. Пункт 2 повторяется до тех пор, пока все связанные справочники не попадают на схему или пока не будет достигнут требуемый уровень вложенности (задается при старте сценария).

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

Вот как это выглядит, например, для справочника "Подразделения" с уровнем вложенности 1 (т.е. только те справочники, которые используются справочником "Подразделения" и те, которые используют данный справочник). Синие стрелки - связь 1 к нескольким, зеленые стрелки 1 ко многим (табличная часть).

Кстати, можете попробовать выгрузить все справочники DIRECTUM и получить полную схему. Картина получится впечатляющая. Улыбка Примерно то же самое произойдет, если запустить сценарий для любого справочника с максимальной глубиной вложенности. На схему попадут практически все справочники DIRECTUM, т.к. большинство справочников так или иначе взаимосвязаны.

Это лишь концепт, демонстрирующий возможности работы с Visio из DIRECTUM. В данном сценарии, например, места для развития хоть отбавляй - механизм анализирует только реквизиты, а мог бы еще и события, иногда полезно строить схему и по использованию какой-то функции в различных сущностях. Да и много еще чего полезного можно придумать. На основании тех же принципов можно написать сценарии построения схем не метаданных, а самих данных (например, древовидную структуру предприятия).

P.S. Работает в Visio 2007, 2010.

Сценарий для DIRECTUM 4.5 и старше (импорт через компоненту "Сценарии"): VisioSchemeBuilderExample.xml (11,78 Кб)

Константин Белов

VisioSchemeBuilderExample.zip (5,27 Кб) не открывается. Ошибка 404.
Там кроме самого сценария еще что-то есть?

Денис Баранов

Исправил один недочет, который обнаружил сразу после публикации (на схему добавлялись только те справочики, которые использовались в выбранных справочниках, но не выводились те, которые используют выбранные справочники). Теперь работает правильно.

Еще добавил возможность выбора глубины вложенности. Чем больше число - тем более "дальние" справочники будут попадать на схему.

Андрей Шилов

Как-то не удалось увидеть замечательной картинки. Через некоторое время после запуска:

Запрошенная операция сейчас отключена. Сценарий "BRD_VisioSchemeBuilderExample": ошибка в строке 180.

Денис Баранов

Ну поэтому я и говорю что это скорее концепт чем законченный инструмент. Пришлось обходить несовместимость строкового типа в Visio и вариантного в ISBL странным способом - через Excel. Обратите внимание на следующую переменную в коде сценария:

CLIPBOARD_DELAY = "'0:0:0:300'" //Пауза для корректной работы буфера обмена в форате 'ч:м:с:мс'. Если появляется ошибка "Requested operations is currently disabled", увеличить значение

Андрей Шилов

дошёл до 10 сек, появляется ошибка всё ещё. видимо, значение по умолчанию несколько оптимистично:)

да, я извиняюсь, а к чему такие сложности? не проще ли использовать GraphViz?

Денис Баранов
да, я извиняюсь, а к чему такие сложности? не проще ли использовать GraphViz?

Очень может быть, что и проще, спасибо за наводку. Улыбка Никогда с этим пакетом в жизни не сталкивался. Интересно было бы попробовать. Судя по всему, действительно очень подходящий для данной задачи инструмент.

дошёл до 10 сек, появляется ошибка всё ещё. видимо, значение по умолчанию несколько оптимистично

Вот так благодаря требовательным пользователям получается улучшить то, за что иначе бы я никогда и не взялся. Взглянул на код еще раз, заглянул в справку по Visio и неожиданно понял, что есть и более человечные методы, чем копирование текста через буфер обмена. А ведь когда писал - и так пробовал, и эдак - не нашел. Улыбка В общем, обновил сценарий еще раз - теперь никакого Excel и никаких пауз.

Андрей Ковриго

Кстати, как одно из направлений развития: довольно интересно сделано построение подобной диаграммы в TFS (Team Foundation Server). На диаграмме классы (в нашем случае это будут справочники, функции и т.д.) соединяются между собой различной толщины стрелками (чем толще, тем чаще один класс обращается к другому). По слишком тонким стрелкам можно выявить потенциальные недочеты в архитектуре системы.

Авторизуйтесь, чтобы написать комментарий