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

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

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


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


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

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



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Глюк с функциями POINTALONGPATH и ANGLEALONGPATH
СообщениеДобавлено: 23 янв 2015, 19:01 
Не в сети
Новичок

Зарегистрирован: 21 май 2014, 11:11
Сообщений: 45
Использую Visio c: 2005
Очков репутации: 3

Добавить очки репутацииУменьшить очки репутации
Коллеги, прошу помощи разобраться является ли описанная ситуация глюком или нет и как с ней бороться!

Собственно что и как делаю: беру стандартный коннектор, к нему добавляю пользовательское поле с неким текстом, связываю текст коннектора и созданное поле, добавляю инфографику в виде текста без подписи и связываю все с тем же полем. Далее используя функции POINTALONGPATH и ANGLEALONGPATH размещаю текст коннектора в начале и текст инфографики в конце линии. Все великолепно, до тех пор, пока не переношу объект в stensil, а затем обратно. При этом наблюдается следующая картина: подпись коннектора перемещается и вращается без лагов, подпись инфографики при первом перемещении улетает. Сами формулы прописаны правильно, в том числе и ссылка по ID на коннектор обновляется, но сама формула не работает. Если включить редактирование формулы и без изменений ее сохранить то она выделяется синим (типа ее изменили) и все снова работает без проблем.

Что это и как с этим бороться!?
Файл с примером во вложении. Проверять следующим образом:
- открыть файл
- создать или открыть Stencil (Создать набор элементов)
- вытащить на Stencil одну из двух фигур (они идентичны)
- затем вытащить фигуру обратно из Stencil на лист
- пробуем ее повернуть и вуаля, текст улетает :(
- вращаем другую фигуру - там все ОК

P.S.
Проверил на версиях 2010 и 2013 - идентично


Вложения:
TestFunc.vsd [43.5 Кб]
Скачиваний: 165
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Глюк с функциями POINTALONGPATH и ANGLEALONGPATH
СообщениеДобавлено: 25 янв 2015, 16:07 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Чем дальше в лес, тем больше дров... :)
По мере освоения Visio пользователями все чаще фиксируются попытки применить сложные функции в ситуациях, на которые разработчики не рассчитывали.
На мой взгляд (субъективно!), наличие подобных ошибок вполне закономерно и может быть даже неизбежно. Множество связанных объектов копируется, одновременно переименовывается и при этом проверяется целостность ссылок. (Причем нет гарантии, что в исходном объекте они были правильны). В такой ситуации вполне логично наработающие формулы блокировать.
Остается разобраться, что делать пользователю.
1. Как "пожарный" вариант можно предложить обновлять формулы макросом. Хотя бы те, в которых обнаруживались ошибки. Если рассматривать данный случай, то достаточно перебрать все шейпы, выявить являющиеся экземплярами одного мастера и "пробудить" там три ячейки. Как-то вот так:
Код:
Sub ttt()
    Dim shp As Visio.Shape
    Set shp = ActivePage.Shapes("Sheet.11")
    shp.Cells("PinX").Formula = shp.Cells("PinX").Formula
    shp.Cells("PinY").Formula = shp.Cells("PinY").Formula
    shp.Cells("Angle").Formula = shp.Cells("Angle").Formula
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Глюк с функциями POINTALONGPATH и ANGLEALONGPATH
СообщениеДобавлено: 25 янв 2015, 16:17 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
2. В дальнейшем нужно попытаться научиться выявлять такие ошибки автоматикой. И также автоматически чинить их. Типа, одна из функций верификации документа...
Для этого хорошо бы иметь "зоопарк" подобных ситуаций. Хотя бы для проверки и отработки инструмента ремонта. Как минимум один экземпляр в зоопарке уже есть (в этом топике). Недавно было нечто подобное с PageNumber. Да и ранее в форумах похожие случаи отмечались... Надо будет только это как-то в одно место собрать.
Сдается мне, что ситуация не является тупиковой :)
3. У "зоопарка" будет и другая функция - предостеречь пользователей от "опасных" ситуаций. Чтобы по-возможности не лезли туда, где уже другие на грабли наступили.
Ведь чаще всего к цели ведет не один путь. И большинство решений не содержат таких вот подводных камней.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Глюк с функциями POINTALONGPATH и ANGLEALONGPATH
СообщениеДобавлено: 26 янв 2015, 15:03 
Не в сети
Новичок

Зарегистрирован: 21 май 2014, 11:11
Сообщений: 45
Использую Visio c: 2005
Очков репутации: 3

Добавить очки репутацииУменьшить очки репутации
Спасибо за совет! Делюсь своей версией костыля. Он вполне пригоден для расширения и на другие случаи. Аналогичную проверку можно запускать и при открытии документа для лечения старых файлов. Данный костыль проверяет создаваемую (в т.ч. копируемую) фигуру на наличие ячеек с глючными функциями, при обнаружении таких ячеек они обновляются. Все прочие ячейки остаются без изменений.

Код:
Private Sub Document_ShapeAdded(ByVal Shape As IVShape)
    Dim Flag
   
    For iSect = visSectionFirst + 1 To Visio.visSectionLast
        For iRow = 0 To Shape.RowCount(iSect) - 1
            For iCol = 0 To Shape.RowsCellCount(iSect, iRow) - 1
                Set Cell = Shape.CellsSRC(iSect, iRow, iCol)
                Flag = False
               
' Repair POINTALONGPATH
                If InStr(1, Cell.Formula, "POINTALONGPATH", 1) > 0 Then
                    Flag = True
                End If
' Repair ANGLEALONGPATH
                If Flag = False Then
                    If InStr(1, Cell.Formula, "ANGLEALONGPATH", 1) > 0 Then
                        Flag = True
                    End If
                End If
               
                If Flag Then
                    Cell.FormulaForce = Cell.Formula
                End If
               
            Next iCol
        Next iRow
    Next iSect
   
    For Each SubShape In Shape.Shapes
        Document_ShapeAdded (SubShape)
    Next
   
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 03 фев 2015, 16:57 
Не в сети
Ветеран

Зарегистрирован: 06 май 2013, 13:01
Сообщений: 746
Откуда: Россия
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Подозреваю, что там где-то в другом месте проблема. Я попытался DEPENDSON приписать и лейбл сразу улетел чёрт знает куда.


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

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



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

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


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

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