Для русскоязычных пользователей Visio. Начинающих и профессионалов. Где взять, как сделать, что купить и т.д.

Отчеты



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

Ручные операции с отчетами довольно хорошо раскрыты в справке Visio и множестве обучающих статей. Но помимо этого существует и возможность программного запуска отчетов. А вот эта возможность описана гораздо хуже. Я бы сказал, что она вообще толком не документирована. Частично эта тема раскрывается в статье Отчеты Visio Геннадия Туманова

.

Перечень литературы

20.03.2019  Из Visio в Excel через Power Query  Геннадий Туманов.   

28.12.2018  Отчеты Visio  Геннадий Туманов.  Структура описания отчета, программный вызов, ключи. 

03.08.2009  Displaying the Master and Stencil Name of Shape  David Parker.   

15.10.2006  Visio's other file format – Report Definition files  John Marshall.  Краткое описание формата .vrd 

Ответы на вопросы

Подсчет количества элементов

Имеется рисунок с большим количеством элементов порожденных 10-20 мастерами.
Требуется посчитать количество элементов порожденных конкретным мастером.
При добавлении поля в произвольный sheet функция ID считает общее количество всех sheet на странице включая саму себя. Может есть способ указать в ID имя конкретного мастера. 

Буду рад, если кто-то меня опровергнет, но кажется на уровне ShapeSheet эта задача не имеет решения, так как в ячейке можно дать любую ссылку, но нельзя последовательно опросить множество Shape. И функция ID дает не количество, а номер последнего Shape, который только иногда совпадает с количеством.
Зато на программном уровне задача решается очень легко. Например:
- рисуем на листе единственный квадрат (для вывода результатов);
- вводим в документ макрос вот такого вида: 

Sub ttt()
s1 = ""
For i = 1 To ActivePage.Shapes.Count
s1 = s1 + "Name= " + ActivePage.Shapes(i).Name
s1 = s1 + " Id= " + Str(ActivePage.Shapes(i).ID) + vbCrLf
Next
ActivePage.Shapes(1).Text = s1
End Sub 

- и подцепляем его к нашему квадрату через Format/Behavior/Double-Click/RunMacro/TchisDocument.ttt
Теперь при двойном щелчке по этому квадрату наша функция будет последовательно опрашивать все имеющиеся на листе Shapes и писать в качестве текста их имена и ID. На этот лист можно набросать много мастеров или нарисовать Shape и двойным щелчком по первому квадрату обновить их список.
Ну, а если мы можем собрать список имеющихся шейпов, то после небольшой модификации можем его рассортировать или подсчитать экземпляры нужных мастеров.
Одна беда - как только появляются макросы, Visio будет приставать со своими предупреждениями (хотя это можно и отключить).