Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 29 мар 2024, 03:38

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Автоматизация нумерации процессов
СообщениеДобавлено: 15 фев 2018, 21:46 
Доброго времени суток.
Решил написать код, для автоматизации нумерации шейпов в схеме бизнес-процесса в Visio. В схеме есть шейп "начало процесса", и соответственно "конец процесса". Внутри схемы шейпы соединены стрелками. Из каждого шейпа может выйти только одна стрелка, из щейпа "условие" может выходить 2 стрелки (да, нет). Из шейпа "конец процесса" стрелки не выходят, а только входят. Нумероваться шейпы должны по определенному алгоритму от "начала процесса" к "концу процесса" в соответствии с направлением стрелок. Если стрелка входит в шейп "условие", то нумероваться после шейпа "условие" должен шейп, соединенный с шейпом "условие" стрелкой "да". Далее движение либо до шейпа "конец процесса", либо до уже пронумерованного шейпа. После чего возврат к шейпу "условие" и продолжение нумерации шейпов по стрелке "нет". Прошу помощи в реализации. Буду благодарен за любую информацию, ссылки на примеры, литературу.
Спасибо заранее


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация нумерации процессов
СообщениеДобавлено: 15 фев 2018, 23:56 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Сообщение выделено в новую тему.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация нумерации процессов
СообщениеДобавлено: 16 фев 2018, 00:01 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Вот файлик, в котором эта задача решается.
Почти не тестировал и совсем не оптимизировал. Но на приведенном примере вроде бы работает.
Нужно селектировать шейп начала и выполнить макрос Num.
Сделано в Visio 2007, в котором еще не было метода ConnectedShapes. Для более поздних версий можно слегка упростить.


Вложения:
flow1.vsd [64 Кб]
Скачиваний: 114
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация нумерации процессов
СообщениеДобавлено: 17 фев 2018, 09:17 
большое спасибо


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация нумерации процессов
СообщениеДобавлено: 17 фев 2018, 11:21 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Исправленная и немного оптимизированная версия функции Recurs:
Код:
Private Function Recurs(ByVal shp As Visio.Shape)
    a1 = 0: a2 = 0
    For i = 1 To shp.FromConnects.Count
        If shp.FromConnects(i).FromPart = 9 Then
            If a1 = 0 Then
                a1 = i
            Else
                If a2 = 0 Then a2 = i
            End If
        End If
    Next
    If a1 <> 0 And a2 = 0 Then
        GoShpOut shp, a1
    End If
    If a1 <> 0 And a2 <> 0 Then
        s = shp.FromConnects(1).FromSheet.Text
        If s = "Нет" Then
            a3 = a1: a1 = a2: a2 = a3
        End If
        GoShpOut shp, a1
        GoShpOut shp, a2
    End If
End Function

Private Sub GoShpOut(ByVal shp As Visio.Shape, ByVal a As Integer)
    Set shpOut = shp.FromConnects(a).FromSheet.Connects(2).ToSheet
    shpName = Left(shpOut.Name, 7)
    If shpName = "Process" And shpOut.Text = "" Then
        n = n + 1
        shpOut.Text = n
        Recurs shpOut
    End If
    If shpName = "Decisio" And shpOut.Text = "" Then Recurs shpOut
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB