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

Интерактивные методы размещения данных

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

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

Возьмем для примера такой широко распространенный технический документ, как перечень элементов. Вид у него примерно такой.

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

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

Для борьбы с этим применен в дополнении Visio введен специальный режим интерактивного редактирования. Макрос, размещающий данные в документе, сначала создает множество образов страниц на одном листе. Так, как показано на рисунке.

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

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

По времени такой перевывод занимает от долей секунды до нескольких секунд, поэтому неприятные ощущения не возникают.

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

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

После некоторой практики оптимальным был признан следующий набор команд редактирования (для перечня элементов):

- проредить - селектируется запись начала блока данных, запись конца блока данных и нажимается кнопка команды. В результате после каждой записи в этом блоке добавляется одна пустая запись;

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

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

- перенести - селектируются три записи: начало и конец переносимого блока и точка вставки. Блок переносится в новое место.

Остальные операции (для групп) - это специфика перечня элементов, здесь ее можно не рассматривать.

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

Кстати, при попытках отслеживать изменение размеров в зависимости от количества текста в других приложениях (в том же Excel) почти все известные решения когда-нибудь, да ошибаются. Для Visio это "родная" задача, поэтому тут ошибок не бывает.

Скорее всего прием с "фантомными" страницами применим не только в таких документах, как перечень. Предпосылками к его применению являются:

1. Необходимость совмещения автоматического построения многостраничного документа с интерактивным редактированием.

2. Возможность сохранения связи между данными в промежуточном хранилище и "фантомным" размещением, чтобы отредактированное размещение можно было перенести на физические страницы.