Форум пользователей 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 [ 259.76 Кб | Просмотров: 988 ] Файл с шейпами - Вложение:
|
Автор: | 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 писал(а): если есть рабочий вариант, зачем нужен второй Затем, что таких шейпов разных надо делать энное количество. Причем во всех будет не два списка - статический и динамический, как тут, а по несколько динамических, зависящих друг от друга. А еще при кидании работающего шейпа в стенсил и последующем вытаскивании оттуда на поляну, вытащенный - уже не работает! P.S. А на предыдущую тему в этом же разделе нет соображений? |
Автор: | 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 [ 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/ |