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

Отчеты



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

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

.

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

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 будет приставать со своими предупреждениями (хотя это можно и отключить).