Author |
Topic |
|
aignashev
8 Posts |
Posted - 10/07/2010 : 16:59:12
|
Добрый вечер.
У подписи (подпись нарисована кривой) в рамке ГОСТ есть параметр в User-defined cells, например user.noshow, который зависит от определенных условий и в данный момент он равен true. У этой же подписи в Geometry1.Noshow стоит формула =User.noshow, но при просмотре значений она равняется False. Т.е. как это два одних и тех же значения значения не равны друг другу? Кстати если зайти в редактирование Geometry1.Noshow и нажать Enter, то значение сразу же обновится на TRUE. Видимо это значение обновляется, по какой-то причине.
Если поможет. Подпись состоит в группе нижней формы рамки, а нижняя форма в самой рамке. User-defined cell от которой зависит Noshow зависит от параметра в свойствах документа. |
|
Tumanov
Russia
1198 Posts |
Posted - 10/07/2010 : 18:17:19
|
Формулы в шейп-листе иногда могут не выполняться. Это происходит, если в какой-то момент какая-то из ссылок, участвующих в формуле, становится недействительной или когда длина последовательности ссылок превышает определенную величину (например, десяток последовательных ссылок). На второй случай у Вас вроде не похоже... А для первого надо бы проанализировать все условия в формулах - не могут ли они когда-то стать невыполнимыми. Тогда формула временно перестает вычисляться, а после "встряски" типа редактирования опять восстанавливается. То есть, формулы, вроде, все правильные, но как бы отключены. Кажется я на такое натыкался. Попробуйте максимально упростить цепочку ссылок и, если в таком состоянии будет работать, постепенно возвращать к теперяшнему состоянию и наблюдать, когда начнет ломаться.
|
|
|
aignashev
8 Posts |
Posted - 10/07/2010 : 18:21:31
|
Может быть когда я помещаю рамку в стенсил, а потом забираю ее оттуда? |
|
|
Tumanov
Russia
1198 Posts |
Posted - 10/07/2010 : 21:08:02
|
Вполне возможно. Трафарет - это другой документ. И при переносе рамки из одного документа в другой формула может сбойнуть. По возможности рамку с такой ссылкой лучше держать прямо на странице. В шаблоне. |
|
|
Surrogate
Russia
122 Posts |
Posted - 10/08/2010 : 07:03:54
|
а если попробовать: в ячейке User.Noshow.Prompt написать формулу
=if(0=0,setf("Geometry1.Noshow",user.noshow),setf("Geometry1.Noshow",user.noshow))
думаю, таким образом можно добиться обновления полей.
лично у меня нет ячейки user.noshow в моем аналоге штампа. у меня условие видимости/невидимости подписи стоит в самом Geometry1.Noshow :) |
|
|
aignashev
8 Posts |
Posted - 10/08/2010 : 12:00:05
|
Когда подпись состоит из одной кривой это удобно, а когда из многих или из группы, то удобнее группе присвоить какое-то значение, от которого зависят все фигуры, в нее входящие, а потом менять условия и экспериментировать. |
|
|
aignashev
8 Posts |
Posted - 10/09/2010 : 16:03:21
|
Попытался еще вот так сделать =GUARD(IF(0=0,SETF("User.noshow","User.noshow"),SETF("User.noshow","User.noshow"))) в самое ячейке выдает "310", если поставить просмотр значений, а сама ячейка User.noshow не изменяется, хотя теперь уже в ячейке User.noshow не обновляются данные.
В ячейке User.noshow стоит формула =GUARD(AND(OR(User.form1,User.sign),OR(User.Form3,User.sign),OR(User.form2,User.sign)))
Есть еще USer.form1 USer.form2 USer.form3 они равны FALSE когда выбрана форма1, 2 или 3 соответственно в User.sign формула =GUARD(IF(STRSAME(User.sign.Prompt,TheDoc!User.razrabotal),0,1))
Всегда ли хорошо писать GUARD? |
|
|
Surrogate
Russia
122 Posts |
Posted - 10/11/2010 : 08:55:30
|
я конечно не доктор, но мне кажется что применять оператор guard() в этом случае точно не надо =GUARD(IF(0=0,SETF("User.noshow","User.noshow"),SETF("User.noshow","User.noshow"))), т.к. в данном случае оператор setf() принудительно записывает в некую ячейку, какое-то значение. Кстати, не совсем понял в какой ячейке стоит вышеуказанная формула ?
эта формула заменяет в формулу Ячейке User.noshow, на ее конкретное значение в этот момент времени, в этой ячейке будет лишь значение False или True/ но не формула и поэтому обновления ячейки в дальнейшем не происходит.
IMHO guard() нужно применять когда нужно зафиксировать размеры шейпа или сделать неизменным какое-то текстовое поле. не ставить его в каждое вычисляемое значение. Как показал этот пример, Guard не помог, оператор Setf() спокойненько заменил значение в "защищенной" GUARD ячейке
не совсем понятно, =GUARD(AND(OR(User.form1,User.sign),OR(User.Form3,User.sign),OR(User.form2,User.sign))) что в данном случае делает оператор or ? он используется для сравнения значений user.form1, user.form2, user.form3 и user.sign ?
quote: Когда подпись состоит из одной кривой это удобно, а когда из многих или из группы, то удобнее группе присвоить какое-то значение, от которого зависят все фигуры, в нее входящие, а потом менять условия и экспериментировать.
например есть группа Sheet.5, состоящая из 4 шейпов Sheet.1, Sheet.2, Sheet.3 и Sheet.4 для ячейки Sheet.1 назначаем условие видимости формулой в поле user.noshow.prompt =if(0=0,setf("Geometry1.Noshow",user.noshow),setf("Geometry1.Noshow",user.noshow)) для элементов остальных шейпов из группы можно в ячейке Geometry1.Noshow написать Sheet.2!Geometry1.Noshow=Sheet.1!Geometry1.Noshow Sheet.3!Geometry1.Noshow=Sheet.1!Geometry1.Noshow Sheet.4!Geometry1.Noshow=Sheet.1!Geometry1.Noshow |
Edited by - Surrogate on 10/11/2010 14:14:34 |
|
|
aignashev
8 Posts |
Posted - 10/11/2010 : 22:14:42
|
=GUARD(IF(0=0,SETF("User.noshow","User.noshow"),SETF("User.noshow","User.noshow"))) Этим я пытался сделать алтернативу нажатию два раза Enter по полю User.noshow (войти в режим редактирования формулы и присвоить), потому что если это сделать руками то все работает нормально.
=GUARD(AND(OR(User.form1,User.sign),OR(User.Form3,User.sign),OR(User.form2,User.sign))) Это формула, что подпись должна быть видима, но действует по обратной логике. User.form1 = FALSE, когда выбрана форма 1 и т.д. User.sign равна FALSE когда подпись совпадает с фамилией в графе разработал. В общем, когда вся формула равна FALSE, то подпись отображается. 1. Если это форма 1 и подпись этого человека 2. Если это форма 2 и подпись этого человека 3. Если это форма 3 и подпись этого человека Подпись должна быть видима если любое из этих условий равно FALSE
quote: например есть группа Sheet.5, состоящая из 4 шейпов Sheet.1, Sheet.2, Sheet.3 и Sheet.4 для ячейки Sheet.1 назначаем условие видимости формулой в поле user.noshow.prompt =if(0=0,setf("Geometry1.Noshow",user.noshow),setf("Geometry1.Noshow",user.noshow)) для элементов остальных шейпов из группы можно в ячейке Geometry1.Noshow написать Sheet.2!Geometry1.Noshow=Sheet.1!Geometry1.Noshow Sheet.3!Geometry1.Noshow=Sheet.1!Geometry1.Noshow Sheet.4!Geometry1.Noshow=Sheet.1!Geometry1.Noshow
а какая разница откуда берется условие, что фигура должна быть показана? Тем более к одной из десятка закорючек в подписи цеплять условие видимости всей фигуры не очень удобно, подписей много у каждой своя особенность - запутаешься.
На листе, где я создавал рамку все работает как надо. После того, как я поместил в стенсил и взял рамку оттуда, перестало работать. Хотя никаких REF() не выдает. |
|
|
Surrogate
Russia
122 Posts |
Posted - 10/12/2010 : 07:17:11
|
quote:
=GUARD(IF(0=0,SETF("User.noshow","User.noshow"),SETF("User.noshow","User.noshow"))) Этим я пытался сделать алтернативу нажатию два раза Enter по полю User.noshow (войти в режим редактирования формулы и присвоить), потому что если это сделать руками то все работает нормально.
для чего используется конструкция if(0=0, ....) понятно! я просто еще раз повторюсь что происходит по данной логике 1. мы вводим в поле value ячейки user.noshow формулу =GUARD(IF(0=0,SETF("User.noshow","User.noshow"),SETF("User.noshow","User.noshow"))) 2. в ту же секунду вычисляется значение этой ячейки, например TRUE и оператор SETF() записывает в поле value ячейки user.noshow значение TRUE, и все формула введенная в пункте 1 БЕЗВОЗВРАТНО потеряна !!!
необходимо чтобы в вычисляемое выражение для подстановки в операторе SETF() отличалась от имени целевой ячейки SETF("X",Y), где X<>Y
quote: а какая разница откуда берется условие, что фигура должна быть показана? Тем более к одной из десятка закорючек в подписи цеплять условие видимости всей фигуры не очень удобно, подписей много у каждой своя особенность - запутаешься.
да, в принципе если логика прописана правильно то действительно не важно - откуда берется условие
quote: На листе, где я создавал рамку все работает как надо. После того, как я поместил в стенсил и взял рамку оттуда, перестало работать. Хотя никаких REF() не выдает.
такое бывает, ссылка на шейп начинает работать неправильно. например на листе шейп имеет имя sheet.5, когда его переместили в стенсил стал называться sheet.1, когда потом из стенсила выносится на новый лист sheet.33! поэтому REF() не выдается |
Edited by - Surrogate on 10/12/2010 07:40:34 |
|
|
|
Topic |
|
|
|