Форум пользователей Visio
http://visio.getbb.ru/

Автоматическое создание VAD – Диаграмм из Excel таблиц
http://visio.getbb.ru/viewtopic.php?f=29&t=1241
Страница 1 из 5

Автор:  BPM [ 11 окт 2017, 20:10 ]
Заголовок сообщения:  Автоматическое создание VAD – Диаграмм из Excel таблиц

Хочу решить следующую простую задачу:
Имея таблицу Excel с данными о процессе (пример указан на рисунке) получить автоматическое построение схемы VAD (простой вариант).

Точнее имея шаблон visio с уже заложенными невидимыми "заготовками" (объект "процесс") на основе таблицы с данными сделать часть из них видимыми и соединить их стрелками в нужной последовательности (часть последовательно, часть параллельно, а часть вообще без связей).

Шаблон visio привел - см. рисунок, т.е. лист состоит из объектов типа "процесс". Будем считать, что таблица Excel (указанная на рис.) привязана к элементам (шейпам).
Что нужно сделать далее?

Рисунки, связанны с данными через связывание схем Visio с внешними данными - листом Excel. Однако нужно не только выводить нужный текст в объект Visio из таблицы Excel, но и задавать свойства объекта (видимость объекта "процесс", стрелки-связи между объектами типа "процесс").
Может быть, это вообще без "собственного" VBA можно сделать? Т.е. Может для этого готовые инструменты есть?

Под "готовые инструменты" не рассматриваю graphviz-dot, Data Visualizer, Smart Designer (ARIS) и т.п. (это отдельная тема, автогенерация схем) - а инструментарий шейп-листа (ShapeSheet) или подобное.
Содержимое спрятано под спойлер ↓
Спойлер:
Вложение:
Комментарий к файлу: Автоматическое создание VAD – Диаграмм из Excel таблицы (на основе шаблона)
prim2_1a.jpg
prim2_1a.jpg [ 47.38 Кб | Просмотров: 3462 ]


На схожую тему.
Вообще, учитывая большой интерес visio - как инструмента BPM, вопросы по моделированию бизнес-процессов выделить в отдельную группу или им тег дать (для поиска). Например, вопросы на тему BPMа:
viewtopic.php?f=2&t=1187
viewtopic.php?f=2&t=1129
и многие другие.

Автор:  Tumanov [ 12 окт 2017, 00:31 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Сдается мне, что без программного кода можно только передать свойства (текст, видимый-невидимый и т.д.). Да и то можно сделать только однократно, потому как если уж шейп стал невидимым, то больше с ним ничего не свяжешь.
А вот настроить связи без кода - это маловероятно.

Автор:  nbelyh [ 12 окт 2017, 02:18 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Цитата:
Под "готовые инструменты" Data Visualizer

Почему? Его же ровно для этого вроде и сделали.

Вот что получается если вбить твои данные:

Изображение

Изображение

У тебя его ("Data Visualizer") запустить вообще получилось, или философствуешь "о вкусе устриц"?
Если все посмотрел, то чем он тебя не устраивает? В него явно человеко-месяцев порядочно вбухано, на коленке такое не сделаешь.

Если проблема в Visio 365 / виртуалке - не получается зарегистрироваться (например, опасаешься что просит кредитку для идентификации), напрасно - с нее ничего не снимется 1 месяц.
В общем если в этом дело (нет Visio 365, и никак не можешь поставить, чтобы оценить Data Visualizer) можешь стукнуть мне в личку - у меня есть "рабочая" машина на azurе, я могу тебе тупо дать логин на несколько дней, на попробовать.

Автор:  BPM [ 12 окт 2017, 16:21 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

с "Data Visualizer" разберусь позже. За пример из него и возможность "на попробовать" - СПАСИБО.
Где посмотреть полное описание "Data Visualizer", желательно на русском?
Дополнено позднее: Встроенное видео спрятано под спойлер ↓ Прямая ссылка на видео
Спойлер:
phpBB [youtube]

прямая ссылка
Это и другие видео и статьи на английском вы можете найти в ветке нашего форума относящиеся к надстройке визуализатор данных

Данные кредитки в подобных случаях никогда не ввожу и другим не советую. "1 месяц" может и не снимется, но потом "забудется" или "что-то пойдет не так" и т.п. Кроме этого, где потом окажется Ваш номер кредитки - не известно.

Вопрос по "Автоматическое создание VAD – Диаграмм из Excel таблиц" предлагаю рассматривать в ключе:
- Office 365 не стал и в ближайшее время не станет массовым продуктом ;
- учитывая печальный опыт того же Мастера орг-диаграмм - нужен инструмент, который можно доработать.

Поэтому если нет готовых ShapeSheet - инструментов, позволяющих на основе Excel-данных менять свойства шейпов, то посоветуйте с чего начать пилить через VBA.

Я показал самый простой вариант задачи, т.к. далее нужно привязать к каждому процессу участников (исполнителей), показывать (маркировать другим цветом) предваряющие, завершающие и необязательные процессы и много чего еще.
Это только начало. Поэтому штатного функционала "Data Visualizer" точно не хватит. Мне уже не нравится, как получилось у "Data Visualizer", мой рисунок более строг (вход слева, выход справа).

Введение шаблона - не требует сложного процесса авто генерации схемы, и должно сделать решение несложным (по сравнению с авто генерацией, где нет равных graphviz). На это основная ставка. C чего начать пилить?

Автор:  Tumanov [ 12 окт 2017, 16:27 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Цитата:
C чего начать пилить?

С алгоритма.
Формализовать решение до такой степени, чтобы его потом можно было закодировать. Здесь выявится множество "подводных камней" и не исключено, что подобный способ реализации будет признан невозможным или "недружественным".
Первые вопросы, которые возникнут у программиста:
- сколько квадратиков будет в шаблоне
- как будет определяться, в какой квадратик попадет "Процесс124"
- какими могут быть "сложные" отношения. Например "несколько к одному" (как в примере), "один к нескольким". Или возможны "несколько к нескольким"? (Здесь имеется в виду одна строка Excel).

Автор:  BPM [ 12 окт 2017, 19:34 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Ответы:
- сколько квадратиков будет в шаблоне
Столько, сколько пометится на лист. Будем считать, что все я уже поместил: 6х4 или 6х6 - не важно, это задается самим шаблоном, а коду должно быть безразлично.
Только это не квадратики, а самые, что ни на есть VAD-овские "кораблики" (предпочтительно зеленые). Они подчеркивают "процессность": движение, направление движения, добавочное качество - ценность - стоимость и т.п.

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

В 90% случаев, схема будет только из последовательных карабликов. Верхнеуровневые VAD схемы редко бывают очень длинными и с множественными параллельными процессами.

- какими могут быть "сложные" отношения. Например "несколько к одному" (как в примере), "один к нескольким". Или возможны "несколько к нескольким"? (Здесь имеется в виду одна строка Excel).
На схеме показано: и один родитель к нескольким потомкам (раздвоение процесса после №1) и схождение процесса (№6).
Для начала можно сделать ограничение: допускается только раздвоение (параллельность только двух процессов). Троирование (редкий случай) и далее - оставим "на потом".
В примере показаны все возможные ситуации.

Алгоритм:
1) Пробежали первый раз таблицу. Расставляем кораблики на поле (странице), ненужные "топим". Есть идентификатор шейпа. Ему в соответствие ставим номер процесса (ID) и делаем "видимым". Нанесли название кораблика. Можно сделать промежуточную таблицу, где будет выполнена подстановка уже с ID шейпа (кораблика).
2) Пробежали второй раз таблицу: Тупо говорим соединить шейп такой-то с таким-то (все они уже поименованы и расставлены). Примерно как graphviz: отдельно определили сами объекты и далее установили связь между ними:
Процесс 1 -> Процесс 2
Процесс 1 -> Процесс 4 и т.д.
все стрелочки в нужном направлении.

Автор:  BPM [ 18 окт 2017, 01:57 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Выше подробно ответил и алгоритм изложил, но Тишина. Попробуем дать «малый ход» проекту.
Пошагово.
1. Делаем шаблон (изначально делается универсальный шаблон со всей флотилией VAD, но без связей).
1.1 Создали Документ: New \ Business Process \ EPC Diagram
1.2 Перетащили 3 шт. объектов-шейпов по имени «Process group». На первый тест (раз) достаточно. Подровняли нашим кораблям корму через ShapeSheet (руками): блок Geometry1, Name = 6: заменил на 0 (было 0,125, но корма такой не бывает). Так корабли более строго смотрятся (потом и цвет заменим на зеленоватый, чтобы было «как в крутом АРИСе»).
1.3 Считаем, что в таблице задано последовательное выполнение процессов 1-2 и 1-4, т.е. нужно соединить стрелками три корабля.
1.4 Visio шейпы именуются так: Process group; Process group.2, Process group.4;
1.5 Далее макросом задаем коннекторы. Здесь пока загвоздка: думал сразу через AutoConnect, но в Visio 2003 его не оказалось. Руками (GlueToPos) получилось «пока не очень».
Хотелось бы вторую стрелку сделать красивой (изогнутой). Файл прилагаю. Что в коде лишнего?

Часть 2.
Разбавим нудное кодирование сказочной идеологией.
Изначально задача ставилась брать данные для VAD из Excel. Это остается, но также (в будущем) нужно будет еще два режима:
1) из Visio в Excel (т.е. двухсторонний обмен: Excel –Visio) и
2) вместо Excel таблицы, использовать «встроенную». Встроенная - это как в Project: слева таблица, справа график (Ганта, сетевой и др.).
№2 – это классическая задача «таблица - схема», только почему то в теории BPM пока не популярная (и в Visio).
В идеале: двигаем данные в таблице – автоматом меняются картинки (схемы), двигаем \создаем шейпы (коннекторы) в схеме, автоматически (динамически) перестраивается таблица (включая обновление о связанности объектов).

Вложения:
Комментарий к файлу: Начало
test_VAD.vsd [41 Кб]
Скачиваний: 215

Автор:  Tumanov [ 18 окт 2017, 11:28 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Цитата:
классическая задача «таблица - схема», только почему то в теории BPM пока не популярная (и в Visio)

В Visio есть примеры двухоконного подхода. Например Brainstorming diagram. Там в отдельном окошке дерево (хоть и не таблица), которое постоянно синхронизируется с диаграммой в окне документа.
А если поместить и таблицу, и диаграмму в окно документа, сразу осложнится программная работа с документом.

Автор:  Tumanov [ 18 окт 2017, 11:38 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Цитата:
Файл прилагаю. Что в коде лишнего?

1. Шейпы лучше не рисовать, а брать из трафарета или Document Stencil (коллекция Masters).
2. Если соединять не линией, а универсальным коннектором, он сам изогнется, как надо.

Автор:  Tumanov [ 18 окт 2017, 12:32 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Кстати, я между делом подстроил свой шейп-импортер под эту задачу. Получилось вот так
https://www.dropbox.com/sh/d5u0kuon06eb ... 19TUa?dl=0
Данные поступают из Excel, но структуру пришлось немного перестроить.
Принцип автопостроителя, то есть не тот, что предлагается здесь. Тем не менее какие-то куски кода возможно будут Вам полезны.

Вложения:
vad.gif
vad.gif [ 261.65 Кб | Просмотров: 3170 ]

Автор:  BPM [ 20 окт 2017, 02:11 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

1) Построил по Вашим указаниям (правда - через Record Macros). Нельзя ли обойтись без промежуточных «CellsSRC»?
2) Как узнать, например, что https://msdn.microsoft.com/en-us/VBA/Vi ... erty-visio
есть в Visio 2003? Где там «в справке по каждому методу обычно пишут, в какой версии он появился»
3) правильно я понял, что Ваш VAD_3.vsd (шейп-импортер) на Visio 2003 не запустится?

Вложения:
Комментарий к файлу: Шейпы из трафарета + универсальный коннектор
test_VAD_2b.vsd [27 Кб]
Скачиваний: 227

Автор:  Tumanov [ 20 окт 2017, 09:16 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Цитата:
2) Как узнать, например, что https://msdn.microsoft.com/en-us/VBA/Vi ... erty-visio
есть в Visio 2003? Где там «в справке по каждому методу обычно пишут, в какой версии он появился»

Уже перестали?
Я как-то привык, что во всех SDK это делается. Вот SDK Visio 2007.

Вложения:
ConnectorToolDataObject.jpg
ConnectorToolDataObject.jpg [ 13.19 Кб | Просмотров: 3055 ]

Автор:  Tumanov [ 20 окт 2017, 09:19 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Цитата:
3) правильно я понял, что Ваш VAD_3.vsd (шейп-импортер) на Visio 2003 не запустится?

В Visio 2003 не проверял.
И теоретически это вычислять долго. Проще запустить и, если не работает, найти почему. А устанавливать Visio 2003 для одной проверки не хотелось бы.

Автор:  Tumanov [ 20 окт 2017, 09:38 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Цитата:
Нельзя ли обойтись без промежуточных «CellsSRC»?

Для GlueTo нужно указать две связываемых ячейки. Можно через CellsSRC, можно по имени.
Если это Connection Point, то через индексы вроде бы проще всего.

Автор:  BPM [ 20 окт 2017, 18:10 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Цитата:
если не работает, найти почему

На 2010 работает, на 2003 не работает. Потому, что Visio 2003 пора на свалку истории.
Пойду на rutracker искать Visio 2010.
Конечно жаль расставаться со "стариной", но ничего не поделать.

Автор:  BPM [ 25 окт 2017, 19:02 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Спасибо за код. Работает. Теперь осталось понять по какому алгоритму. Можете немного прокомментировать общий алгоритм размещения шейпов на листе?

Попытки анализа кода иногда ставят в тупик, например, зачем: If bCount > 2 Then
Если в матрице всегда три столбца. В каких случаях может быть более трех столбцов и зачем нужен цикл: For i = 1 To isCount

Для простоты анализа алгоритма, вместо Excel заполнил arr руками:
arr(1, 3) = "1"
arr(1, 2) = "Процесс 1"
arr(1, 3) = ""
Выдает ошибку: тип перепутан, сразу на arr(1, 3) = "1".

Автор:  Tumanov [ 26 окт 2017, 10:38 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Цитата:
например, зачем: If bCount > 2 Then

Этот блок взят из более универсального построителя. Просто не стал переделывать.
Цитата:
и зачем нужен цикл: For i = 1 To isCount

Это перебор всех строк входного массива.
Используется дважды. Первый проход - чтобы выбрать все уникальные имена и создать коллекцию этих имен. (По этой коллекции потом создаются шейпы).
Второй - чтобы создать коллекцию связей между узлами. (По ней будут рисоваться коннекторы).
Цитата:
общий алгоритм размещения шейпов

Алгоритм рассчитан на штатные средства размещения. Я просто выстраиваю шейпы в длинную линейку. Все шейпы в ряд.
Потом они соединяются, а в самом конце идет обращение
Код:
ActiveWindow.Selection.Layout

То есть я прошу Visio перестроить эту линейку по его правилам, указывая параметры размещения
Код:
PlaceStyle = "2"
RouteStyle = "6"

Эти значения взяты из диалога "Configure Layout". То есть диаграмма типа Flowchart с размещением слева направо.

Автор:  BPM [ 29 окт 2017, 17:19 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Продвигаемся (благодаря админам форума, за что им большое спасибо, и выходным).

Первая проблема:
Как ВСЕ «уместить на странице» - т.е. «длинную сосиску процессов» порезать (загнуть), чтобы при достижении правого края продолжение шла – ниже слева (типовой вариант когда «рисуешь руками»).
Т.е. "Перевод каретки" для линии процессов (в составе одного листа).

В продолжение: разбить «построенное» на несколько страниц, т.е. продолжение «сосиски процессов» на следующем листе (когда лист «переполнен»). Например, также как в мастере орг-диаграмм «разбивать постранично».

Вопрос второй:
Нужно под каждым корабликом VAD указывать снизу перечень подразделений, которые участвуют в этом процессе.
Планирую перечень подразделений вставлять в поле Data1: Shape.Data1 = "New Data"
Вопрос как вывести поле Data1 снизу под каждым карабликом? Или есть иные варианты? Но не отдельным шейпом.

Вложения:
test_VAD_3d_min.vsd [81 Кб]
Скачиваний: 232

Автор:  nbelyh [ 29 окт 2017, 18:27 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Когда я что-то подобное делал (тоже на заказ), то подход был такой -
Сначала рисуем очередгой шаг как есть (но перед началом ставим точку отката в виде application.beginundoscope).
Если не вошло на лист то , что хотели нарисовать, откатываем , и рисуем с новой строки или нового листа соответственно.
Если вошло - коммитим и начинаем новый шаг.

У меня только опыт выполнения подобного на заказ (с конкретными требованиями), imho в общем случае такой построитель сделать по силам только самой M$. В смысле, достаточно гибкий для того, чтобы быть полезным более чем в одной компании.
Что они и пытаются сделать в лице data visualizer, который, кстати, ты не хочешь . Ну окей, пилите, они золотые...

Да, Data1, Data2, Data3 - забудь про них, они просто для совместимости оставлены, с древнми версиями.
Сейчас для вывода дополнительной информации проще использовать данные фигуры совместно с data graphics, они именно для этого и прндназначены. Там можно указать положение, где выводить.

Автор:  Tumanov [ 29 окт 2017, 18:44 ]
Заголовок сообщения:  Re: Автоматическое создание VAD – Диаграмм из Excel таблиц

Цитата:
перед началом ставим точку отката в виде application.beginundoscope

Если размеры "кораблей" известны, то можно и просто координаты рассчитать. И если координата по X зашкаливает, то начинать другой ряд.
И еще - в Visio может стоять "автоподстройка" листа. Тогда алгоритм может усложниться.

Страница 1 из 5 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/