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

Форум по вопросам применения и программирования в Visio
Текущее время: 27 мар 2017, 18:29

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


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


Размещение файлов в формате vsd (а не vsdx/vsdm), увеличивает вероятность ответа стремительным домкратом !!!



Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: подменяются ячейки в формуле
СообщениеДобавлено: 20 июл 2015, 11:19 
Не в сети
Постоянный участник

Зарегистрирован: 19 июн 2015, 22:18
Сообщений: 67
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Делаю vss документ, создаю его пользовательские свойства.
Есть два свойства:
Код:
TheDoc!User.N7 = IF(User.N7_Hand=0,PAGECOUNT()-1,User.N7_Hand)
TheDoc!User.N7_Hand = 0
Смысл: когда количество страниц введено вручную (отлично от 0) - брать введенное значение из N7_Hand, иначе брать PAGECOUNT()-1.

Проблема в том, что когда я переношу мастер на документ, то формула изменяется - например на это:
Код:
TheDoc!User.N7 = IF(User.Act4=0,PAGECOUNT()-1,User.Act4)
или на это
Код:
TheDoc!User.N7 = IF(User.Act4=0,PAGECOUNT()-1,User.Act4)
Я пробовал это делать на 2013 (режим совместимости) и на 2007. Результат тот же.

Думаю проблема в том механизме - как User ячейки переносятся из vss в документ визио.
Как я понял, перенос ячеек происходит в тот момент, когда визио видит обращение к ячейке (запись в нее или из нее).
Если просто сделать ячейку в vss документе и кинуть на документ мастер, который не обращается к этой ячейке, то эта ячейка в документе не появится.

У меня происходит два обращения к свойствам документа:
1. При событии EventDrop - происходит копирование User ячеек в пользовательские свойства шейпа.
2. Поля шейпа указывают на свойства документа.

Что касается конкретных User ячеек полей документа:
1. При EventDrop происходит копирование TheDoc!User.N7_Hand -> MainData!Prop.N7
Код:
=...  +SETF("Prop.N7.Value",TheDoc!User.N7_Hand)+ ...
2. Обращение к TheDoc!User.N7:
Код:
N7!Fields.Value = TheDoc!User.N7
Возможно получается такая ситуация: первым идет обращение к TheDoc!User.N7. Там зашита формула: IF(User.N7_Hand=0,PAGECOUNT()-1,User.N7_Hand).
Свойства N7_Hand еще нет, и визио вместо него подставляет первое свойство, которое появилось (возможно в это время фоновый процесс добавил какие-то свойства). Но это мои домыслы.

Подскажите. как быть в этой ситуации?


Вложения:
3.rar [15.06 Кб]
Скачиваний: 34
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 20 июл 2015, 11:56 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
1. Если Вам нужно, чтобы документ обладал определенными свойствами, то традиционный (для Visio) путь - использовать шаблон (template). В этот шаблон можно включить и соответствующий трафарет.
Да, будет некоторое ограничение - работать с этим трафаретом можно будет только в документах, созданных на основе данного шаблона. Ну так, не такое уж это большое ограничение...
В шаблоне можно и еще много полезных вещей установить.
2. Если путь с шаблоном не нравится, можно рассмотреть установку нужных свойств документа с помощью макроса. Только надо попробовать запускать его не по EventDrop, а по событию открытия документа - трафарета. То есть до начала перетаскивания мастер-шейпа с его формулами.
Но тут все равно когда-нибудь может проявиться нежелательное взаимовлияние нескольких трафаретов. Путь с шаблоном чище.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 20 июл 2015, 12:51 
Не в сети
Постоянный участник

Зарегистрирован: 19 июн 2015, 22:18
Сообщений: 67
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Работа с шаблонами в данном случае не подойдет. Нужно кидать ГОСТ рамку на уже созданные ранее документы.

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

Лучше, мне кажется, сделать запуск макроса при двойном клике на шайпе: сначала прописываются свойства документа, а потом уже вызывается форма с данными.

Попробую. Жаль. Очень хотелось обойтись без макросов - одними формулами. Видно не получится.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 20 июл 2015, 12:54 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3172
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
vin писал(а):
Лучше, мне кажется, сделать запуск макроса при двойном клике на шайпе: сначала прописываются свойства документа, а потом уже вызывается форма с данными
а можно более детально: какие свойства прописываются, и будет на форме с данными ?

добавь в ячейку EventDblClick формулу DOCMD(1312) - будет вызываться форма для ввода.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 20 июл 2015, 13:39 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3172
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
Добавил шейпу в мастере Общие данные ячейку с формулой

user.set
IF(STRSAME(TheDoc!User.N7_Hand,0),SETF(GetRef(Sheet.14!Fields.Value),PAGECOUNT()-1),SETF(GetRef(Sheet.14!Fields.Value),TheDoc!User.N7_Hand))


Вложения:
Комментарий к файлу: модифифированный
3.zip [17.43 Кб]
Скачиваний: 33
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 22 июл 2015, 21:59 
Не в сети
Постоянный участник

Зарегистрирован: 19 июн 2015, 22:18
Сообщений: 67
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Спасибо за внимание, но это не то, что мне нужно.

Дело в том, что все последующие листы будут брать значение из ячейки TheDoc!User!N7.
Т.е. мне важно установить именно TheDoc!User!N7
А поле шейпа Sheet.14 просто показывает это значение.

Я понял, что пользуясь Вашей формулой можно задавать значения в TheDoc!User!N7

Но я нашел другое решение! Я посидел-подумал: если визио пытается подставить вместо формулы хоть что-то, то скорее всего в этот момент нужная ячейка еще не определена. А раз так - ЗНАЧИТ ПОРЯДОК ИМЕЕТ ЗНАЧЕНИЕ.
У меня в начале таблицы была формула:

Код:
TheDoc!User.N7 = IF(User.N7_Hand=0,PAGECOUNT()-1,User.N7_Hand)

а в конце такая:
Код:
TheDoc!User.N7_Hand = 0


Я их поменял местами и все заработало!


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 22 июл 2015, 22:49 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
Я их поменял местами и все заработало!

А если следующая версия Visio по каким-то причинам начнет обрабатывать ячейки в другом порядке? Что будут делать через год-другой пользователи, подсевшие на такой шаблон...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 22 июл 2015, 23:03 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3172
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
vin писал(а):
Проблема в том, что когда я переношу мастер на документ, то формула изменяется - например на это:
Код:
TheDoc!User.N7 = IF(User.Act4=0,PAGECOUNT()-1,User.Act4)
я с такой ситуацией ни разу не сталкивался, подобный механизм использую уже почти 10 лет ! в твоем файле из ветки Формула не совпадает со значением
вообще творятся чудеса в ячейку не смотря на значение в свойстве документа одставляется текущая дата!
Изображение
наверно где-то в одной из ячеек сидит формула с SETF, которая это подставляет :)
vin писал(а):
Думаю проблема в том механизме - как User ячейки переносятся из vss в документ визио.
самый надежный способ перенести все те ячейки из vss в целевой документ: надо чтоб в мастере, в шейпе были вставлены нужные поля из свойств документа. (этот способ был найден эмпирическим путем, полгода назад в одной из книг увидел его - найду дам ссылку)
Этот шейп можно сделать невидимым, чтоб не мозолили глаза.
Tumanov писал(а):
А если следующая версия Visio по каким-то причинам начнет обрабатывать ячейки в другом порядке? Что будут делать через год-другой пользователи, подсевшие на такой шаблон...
Когда мы вели свои свои эксперименты совместно с Digitall™ еще в версии 2003 - очередность строк в шейпшите на заполнение не влияла. Были попытки с помощью шейпшита последовательно в нужном порядке заполнять некие ячейки


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 23 июл 2015, 12:12 
Не в сети
Постоянный участник

Зарегистрирован: 19 июн 2015, 22:18
Сообщений: 67
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
я с такой ситуацией ни разу не сталкивался, подобный механизм использую уже почти 10 лет ! в твоем файле из ветки Формула не совпадает со значением
вообще творятся чудеса в ячейку не смотря на значение в свойстве документа подставляется текущая дата!

Я решил оставить этот файл в покое. Решил сделать все заново. Я имею опыт программирования (в том числе и на VBA), но с автоматизацией Visio сейчас столкнулся впервые, поэтому вполне мог где-то накосячить. Еще один момент: на работе у меня 2007, а дома 2013. Поэтому на этот файл вполне могли повлиять правки из разных версий и нарушить формат.

Tumanov писал(а):
А если следующая версия Visio по каким-то причинам начнет обрабатывать ячейки в другом порядке? Что будут делать через год-другой пользователи, подсевшие на такой шаблон...

Согласен. Такое вполне может быть. Сейчас это явная ошибка разработчиков. Даже если пока нет значения на указанную ячейку - ну выдай ошибку! Но не подставлять же первое попавшееся значение в формулу! Хотя с 2007 по 2013 логика не изменилась, но связь эта очень хрупкая.

Surrogate писал(а):
самый надежный способ перенести все те ячейки из vss в целевой документ: надо чтоб в мастере, в шейпе были вставлены нужные поля из свойств документа. (этот способ был найден эмпирическим путем, полгода назад в одной из книг увидел его - найду дам ссылку)
Этот шейп можно сделать невидимым, чтоб не мозолили глаза.

У меня сейчас так и происходит. В поле каждого отображаемого шейпа есть ссылка на пользовательское свойство документа. Есть только одна "затыка" - ячейка документа с формулой. Shape.14 (N7) ссылается именно на нее - на ячейку с формулой, а не на ячейку с константой (N7_Hand).
Можно вообще отказаться от этой ячейки с формулой. Тогда в каждом листе вместо указателя на TheDoc!N7 будет формула IF(TheDoc!N7_Hand=0,PAGECOUNT()-1,TheDoc!N7_Hand). Может лучше так и сделать?
Тогда нужно ввести эмпирическое правило: никаких формул в свойствах документа - только константы.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 23 июл 2015, 12:22 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3172
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
vin писал(а):
Тогда нужно ввести эмпирическое правило: никаких формул в свойствах документа - только константы.
в свойствах документа TheDoc в поле Value я стараюсь использовать только значения (раз так поле называется), а формулу вычисляющую это значение ставлю в поле Prompt


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 23 июл 2015, 12:34 
Не в сети
Постоянный участник

Зарегистрирован: 19 июн 2015, 22:18
Сообщений: 67
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
в свойствах документа TheDoc в поле Value я стараюсь использовать только значения (раз так поле называется), а формулу вычисляющую это значение ставлю в поле Prompt

Тогда есть еще один вариант в Prompt записать формулу, устанавливающую N7
Код:
TheDoc!User.N7.Prompt = SETF("User.N7",IF(User.N7_Hand=0,PAGECOUNT()-1,User.N7_Hand)

Только вот думаю - наступлю ли я на те же грабли, если поставлю строку с формулой намного раньше, чем строку с User.N7_Hand.
Попробую.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 23 июл 2015, 12:36 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
Сейчас это явная ошибка разработчиков.

Ну, вот с этим в корне не согласен.
Разработчик не может закладываться на все наши извращения. Мудрый пользователь такого может напридумывать, что любую программу сломает.
Не забывайте, что Visio делался не для управления космическими аппаратами, а для деловой графики. И в этом случае подмена неработающей формулы на значение выглядит вполне естественно. Иначе столько ошибок выскакивало бы...
--
А правильный путь - это самому все предусмотреть и заранее создать "вручную" (или через VBA). Не надеясь на то, что нужные ячейки возникнут сами. Они действительно чаще всего возникают, но без гарантий.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 23 июл 2015, 12:46 
Не в сети
Постоянный участник

Зарегистрирован: 19 июн 2015, 22:18
Сообщений: 67
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Попробовал. Формула из Prompt не переносится на документ вообще.

По поводу, что нужно "заранее предусмотреть". Я бы рад, но как?

Получается, что перенос данных из vss документа в основной документ НЕ ДОКУМЕНТИРОВАН. Т.е. мы им пользуемся, т.к. просто у нас это получилось?


Последний раз редактировалось vin 23 июл 2015, 12:50, всего редактировалось 1 раз.

Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 23 июл 2015, 12:50 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Не получится предварительно "обработать" те документы, в которых Вы хотите использовать новый трафарет?
Какой-нибудь WSH скрипт, который просто подготовит документ.
Для пользователя эта операция может выглядеть, например, как однократное "набрасывание" документа на иконку WSH скрипта в проводника Windows.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 23 июл 2015, 12:53 
Не в сети
Постоянный участник

Зарегистрирован: 19 июн 2015, 22:18
Сообщений: 67
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Не получится предварительно "обработать" те документы, в которых Вы хотите использовать новый трафарет?
Какой-нибудь WSH скрипт, который просто подготовит документ.

Конечно можно. Но это вообще будут "грабли". Т.е. пользоваться таким инструментом будет крайне неудобно. А если неудобно - то жить такое сооружение или вообще не будет или будет жить очень недолго.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 23 июл 2015, 12:55 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
Получается, что перенос данных из vss документа в основной документ НЕ ДОКУМЕНТИРОВАН. Т.е. мы им пользуемся, т.к. просто у нас это получилось?

Ну, примерно так... Только данные-то как раз переносятся. Но нам хочется еще и формулы со ссылками переносить.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 23 июл 2015, 12:57 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
Конечно можно. Но это вообще будут "грабли".

А это - как подойти.
Примем, что правильнее всего работать с шаблоном.
У Вас такая ситуация, что внедрять шаблон уже поздно, документы наработаны без него. Значит вводим операцию "позднего ошаблонивания" документов :)
Если понять и принять логику, вроде бы все нормально.
Делают же (хоть и не часто) апдейт ранее разработанных документов после обновления шаблона.


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

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3172
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
Tumanov писал(а):
Не забывайте, что Visio делался не для управления космическими аппаратами, а для деловой графики.
как я писал ранее
Surrogate в сообщении #7277 писал(а):
как я понимаю сейчас у M$ основной упор на красоту общечеловеческую: темы/контейнеры/псевдо 3d, улучшенные шаблоны для бизнес-процессов и орг-структур (если посмотреть какие "новые функции" добавляются в версиях после 2003). Они наверно очень удивятся, что у нас, все еще используют визио для создания схем РД, да еще что напридумывали наши местные умельцы !
Tumanov писал(а):
Делают же (хоть и не часто) апдейт ранее разработанных документов после обновления шаблона.
Лично я регулярно


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 23 июл 2015, 14:29 
Не в сети
Постоянный участник

Зарегистрирован: 19 июн 2015, 22:18
Сообщений: 67
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Тогда можно предложить такой сценарий:
В vss документе сделать шейп - InitDoc (Инициализация документа - невидимый шейп).
Пользователь должен ОБЯЗАТЕЛЬНО кинуть этот шейп на документ перед использованием других мастеров.
При этом в EventDrop этого шейпа стоит вызов макроса, который добавляет\обновляет поля документа.

При этом макрос ОБЯЗАТЕЛЬНО добавляет пользовательское свойство документа, определяющее что макрос InitDoc был запущен, а так же версию InitDoc (ведь шаблон может обновляться!) Например для ГОСТ рамки TheDoc!GostVer.

После этого в документ добавляются элементы, использующие поля документа. При их добавлении в EventDrop запускается макрос. который проверяет наличие и версию TheDoc!GostVer. Если свойства нет или версия не та, то выдается сообщение - "Обязательно поместите InitDoc на документ, иначе работа элемента будет некорректна, а пока удалите добавленный элемент".

Вот где-то так. Что скажете?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: подменяются ячейки в формуле
СообщениеДобавлено: 23 июл 2015, 14:49 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Вроде должно работать...
Цитата:
...а пока удалите добавленный элемент".

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


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

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



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

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


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

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