Форум пользователей Visio
http://visio.getbb.ru/

Одинаковые формулы в двух шейпах - разное поведение
http://visio.getbb.ru/viewtopic.php?f=5&t=1026
Страница 1 из 3

Автор:  Vytos [ 26 сен 2016, 01:38 ]
Заголовок сообщения:  Одинаковые формулы в двух шейпах - разное поведение

Два шейпа с одинковыми формулами.
Верхний работает, нижний нет.
Пробовал хренову кучу раз. То получается работающий, то не работающий.
Второе чаще. Закономерности не смог уловить.
Единственное, что заметил - если из двух нижних User ячеек объединить формулы в одну, то
будет почти всегда выдавать ошибку #Value, кроме случая, когда первый элемент не одинаковый во всех трех списках.
Как-то иначе можно реализовать средствами ShapeSheet, что б при смене списка в Value ставилось значение первого элемента выбраного списка?
Вложение:
123.JPG
123.JPG [ 259.76 Кб | Просмотров: 988 ]


Файл с шейпами -
Вложение:
2.vsd [28 Кб]
Скачиваний: 120

Автор:  Surrogate [ 26 сен 2016, 02:02 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Что-то как-то накручено там у тебя. Я в первом часу ночи даже не смог осилить, чего ты пытался этим добиться ? Изображение если есть рабочий вариант, зачем нужен второй с переименованными именами ячеек !
и что конкретно не работает ?

Автор:  Vytos [ 26 сен 2016, 03:22 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Surrogate писал(а):
чего ты пытался этим добиться ?

Vytos писал(а):
реализовать средствами ShapeSheet, что б при смене списка в Value ставилось значение первого элемента выбраного списка?

Поясню. На примере работающего первого шейпа.
В Prop два списка. Первый - Prop.Выбор - статичный.
Второй - Prop.Список - динамический. Подставляется из User.Список-XX в зависимости от выбора в первом.
Когда меняешь выбор в Prop.Выбор, и, соответственно, меняется состав Prop.Список - Prop.Список.Value должен принимать значение первого элемента текущего набора в Prop.Список.
По умолчанию, если, допустим, Prop.Выбор сейчас "А" и в Prop.Список выбрать второй элемент, то при переключении Prop.Выбор на "Б" или "В" значение Prop.Список.Value останется вторым элементом нового списка. А должно принимать значение первого при смене списков.

Surrogate писал(а):
если есть рабочий вариант, зачем нужен второй

Затем, что таких шейпов разных надо делать энное количество. Причем во всех будет не два списка - статический и динамический, как тут, а по несколько динамических, зависящих друг от друга.
А еще при кидании работающего шейпа в стенсил и последующем вытаскивании оттуда на поляну, вытащенный - уже не работает! :wall:

P.S. А на предыдущую тему в этом же разделе нет соображений? :oops:

Автор:  Surrogate [ 26 сен 2016, 09:08 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

ага, стало немного понятнее!
В визио, лучше всего добавлять проверку условия для выполнения действия с SETF.
Цитата:
IF(0=0,SETF(GetRef(Prop.Список.Format),"User.Список_"&Prop.Выбор)+SETF("Prop.Список.Value",User.Def),-1)

если у тебя в сейкции user-defined cells в нескольких строках написаны команды SETF, то действия могут происходить в произвольном прядке. поэтому лучше их упорядочить!
Vytos писал(а):
Причем во всех будет не два списка - статический и динамический, как тут, а по несколько динамических, зависящих друг от друга.
это надо (по)думать!

Автор:  Shishok [ 26 сен 2016, 09:27 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Есть разница в двух шейпах. Не пойму правда почему.
Первый шейп
Изображение

Второй шейп
Изображение

Автор:  Tumanov [ 26 сен 2016, 10:21 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Кажется здесь напрашивается функция Dependson. Это только мне кажется?

Автор:  Shishok [ 26 сен 2016, 10:22 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

От чего она будет зависить?

Автор:  Tumanov [ 26 сен 2016, 10:36 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Задача - строго выставить последовательность.
При установке Value она должна зависеть от Format. И т.д.
User.Coil_SetList=SETF(GetRef(Prop.Coil.Format),"User.Coil_"&Prop.Type)+DEPENDSON(Prop.Type)
User.Coil_SetDef=SETF("Prop.Coil.Value",User.Def)+DEPENDSON(User.Coil_SetList)
---------------------------
Может формулы и не точно написал... Но по смыслу - функция заставит Setf исполняться только после того, как изменится ячейка с аргументом Dependson. Привяжет к событию изменения этой ячейки.

Автор:  Surrogate [ 26 сен 2016, 11:10 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Tumanov писал(а):
Кажется здесь напрашивается функция Dependson
я практически не использовал эту функцию, но скорее всего это может помочь !
Вот только уж очень замысловато, и количество ячеек растет !

Автор:  Vytos [ 26 сен 2016, 17:08 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Surrogate писал(а):

Цитата:
IF(0=0,SETF(GetRef(Prop.Список.Format),"User.Список_"&Prop.Выбор)+SETF("Prop.Список.Value",User.Def),-1)

Этот замут и делается для того, чтобы уйти от IF-ов. С ними все понятно и просто, и все работает. Просто их может оказаться до нескольких штук вложеных друг в друга.
Shishok писал(а):
Есть разница в двух шейпах. Не пойму правда почему

Потому, что в первом как раз все отработало, как надо - обновился список и в Value упало значение первого элемента, а во втором шейпе осталась формула.
Tumanov писал(а):
Задача - строго выставить последовательность.
При установке Value она должна зависеть от Format. И т.д.
User.Coil_SetList=SETF(GetRef(Prop.Coil.Format),"User.Coil_"&Prop.Type)+DEPENDSON(Prop.Type)
User.Coil_SetDef=SETF("Prop.Coil.Value",User.Def)+DEPENDSON(User.Coil_SetList)
---------------------------
Может формулы и не точно написал... Но по смыслу - функция заставит Setf исполняться только после того, как изменится ячейка с аргументом Dependson. Привяжет к событию изменения этой ячейки.

Ага... Тогда может User.Coil_SetDef=SETF("Prop.Coil.Value",User.Def)+DEPENDSON(Prop.Coil.Format)?
Изменился Prop.Coil.Format - отработало то, что до плюса написано? Правильно я понимаю?
Вернусь домой ночером, попробую.

Вообще структура должна быть примерно такая. Только полей выбора больше, и некоторые динамические будут зависеть не от выбора в "главном" статическом, а от выбора в других динамических. Но суть та же остается. Нарисовал только ячейки со списками в секции User, для простоты, что б не забивать схему.
Вложение:
2.jpg
2.jpg [ 61.37 Кб | Просмотров: 835 ]

Автор:  Tumanov [ 26 сен 2016, 17:21 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Цитата:
Ага... Тогда может User.Coil_SetDef=SETF("Prop.Coil.Value",User.Def)+DEPENDSON(Prop.Coil.Format)?

Может быть.
Я просто эти две строчки уже попробовал. Вроде все работает нормально. Но это же не единственный вариант.
Цитата:
User.Coil_SetDef=SETF("Prop.Coil.Value",User.Def)+DEPENDSON(Prop.Coil.Format)?
Изменился Prop.Coil.Format - отработало то, что до плюса написано? Правильно я понимаю?

Совершенно верно.

Автор:  Surrogate [ 26 сен 2016, 17:33 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Vytos писал(а):
Вообще структура должна быть примерно такая. Только полей выбора больше, и некоторые динамические будут зависеть не от выбора в "главном" статическом, а от выбора в других динамических. Но суть та же остается. Нарисовал только ячейки со списками в секции User, для простоты, что б не забивать схему.
IMHO может и можно сделать все вышеописанное в shapesheet, но мега-геморройно !

Автор:  Vytos [ 26 сен 2016, 17:43 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Tumanov писал(а):
Вроде все работает нормально.

А все же любопытно, почему один шейп работает, а второй нет, с теми исходными формулами...
Высмотрел кое-что из "особенностей"...

Работает всегда, если первый элемент списков из User не одинаков во всех.

Очень интересная особенность:
Если вместо
Код:
SETF("Prop.Coil.Value",User.Def)
INDEX(0,Prop.Coil.Format)

прописать в одной ячейке
Код:
SETF("Prop.Coil.Value",INDEX(0,Prop.Coil.Format))


Если первый элемент представляет из себя цифры и букву, используемую для обозначения расстояний/размеров (например, 22f, 1d, 2345мм), то эта гада считает, что там именно футы, дюймы, миллиметры, а не набор произвольных символов, и преобразует их, ставя в Value "1 д", а не "1d", меняя английскую "d" на нашу "д".
Если после цифр идет буква, не обозначающая размерность, то результатом выполнения формулы будет "#Value".
Если идут буквы, или буквыцифры - проглатывает нормально.

В отдельной же строке
Код:
INDEX(0,Prop.Coil.Format)
всегда обрабатывает первый элемент корректно, как набор символов "как есть", не преобразуя и не плюясь ошибками.

Пирожки с котятами.

Автор:  Vytos [ 26 сен 2016, 17:48 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Surrogate писал(а):
IMHO может и можно сделать все вышеописанное в shapesheet, но мега-геморройно !

3-4-5 десятков ячеек в User. Мини база данных :) Не так геморройно, если выборки буду работать, как задумано.
А как проще? Связь с внешними данными не предлагать.

Автор:  Tumanov [ 26 сен 2016, 17:55 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Цитата:
если выборки буду работать, как задумано

А через год кто-то попытается добавить новый шейп... И начнется...

Автор:  Surrogate [ 26 сен 2016, 17:56 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Vytos писал(а):
INDEX(0,Prop.Coil.Format)
думаю отсюда все траблы. раньше (я столкнулся с этим в 2010) в фиксированных и переменных списках когда в ячейке ShapeData (CustomProperties) меняешь значение, то в ячейке именно оно и остается. теперь ставится подобного вида формула! ее подставляет само ядро визио
Vytos писал(а):
А как проще?
программно в VBA! может не проще, но надежнее

Автор:  Vytos [ 26 сен 2016, 17:59 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Tumanov писал(а):
Цитата:
если выборки буду работать, как задумано

А через год кто-то попытается добавить новый шейп... И начнется...

Этот кто-то будет никто, кроме меня :)
Новый шейп буду делать, глядя на старый, по образу и подобию, если забыть к тому времени успею.

Автор:  Vytos [ 26 сен 2016, 18:02 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Surrogate писал(а):
программно в VBA! может не проще, но надежнее

А макрос можно встроить в шейп? Чтоб он был именно в шейпе, а не в документе?

Автор:  Surrogate [ 26 сен 2016, 18:06 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Vytos писал(а):
А макрос можно встроить в шейп? Чтоб он был именно в шейпе, а не в документе?
во внешнем документе в котором хранится шейп можно.
а в чем разница где он хранится ?

Автор:  Vytos [ 26 сен 2016, 18:10 ]
Заголовок сообщения:  Re: Одинаковые формулы в двух шейпах - разное поведение

Surrogate писал(а):
во внешнем документе в котором хранится шейп можно.
а в чем разница где он хранится ?

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

Страница 1 из 3 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/