Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/246: Рейтинг темы: голосов - 246, средняя оценка - 4.73
prokoputko
1

Проблема с условием в Access Formula

28.06.2010, 19:02. Показов 44801. Ответов 30
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Возникла такая проблема.
Есть форма, в ней секция, в которой находится поле "Body".
Нужно, чтобы это поле становилось доступным для редактирования только для роли Office после того, как документ сохранен и имеет статус "Черновик"("Draft").

Для этого я использую вкладку Access Formula (тип Computed for display) для секции, пишу в ней условие:

<!--shcode--><pre><code class=@-formula>@If(!@IsNewDoc & Status = "Draft";"[office]";"[none]")[/CODE]

Затем захожу под пользователем с ролью Office, создаю и сохраняю документ, а данное поле не появляется.
Если оставить в условии только !@IsNewDoc, то данный раздел также не появляется после сохранения.

Думаю, что-то не так с использованием этой функции (@IsNewDoc) в Access Formula...

Помогите понять, что не так, пожалуйста!
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2010, 19:02
Ответы с готовыми решениями:

Проблема с условием
if (Form1-&gt;N1231-&gt;Checked==true) ...

Проблема с условием
Доброго времени суток!:wall: Нужна небольшая помощь:cry: Необходимо чтобы в программе с...

Проблема с условием сравнения
Здравствуйте, Проблема в вот в этом куске кода: for (int i=0; i&lt;6; i++) { // cout &lt;&lt; code...

Проблема с условием подстановки SQL
Не понимаю, почему возникает ошибка Тип поля &quot;Руководитель&quot; - логический Тип поля...

30
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
28.06.2010, 19:22 2
А регистр роли не влияет?
+ всегда люблю поставить явно скобки @If((!@IsNewDoc) & Status = "Draft";"[Office]";"[none]")

Добавлено: А после переоткрытия документа не срабатывает?
кстати, если у Вас для секции задано имя поля (Section Field Name), можете посмотреть, чему равно его значение после сохранения документа - так, для проверки правильности отработки формулы.
0
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
28.06.2010, 19:33 3
Цитата Сообщение от OKEN
+ всегда люблю поставить явно скобки @If((!@IsNewDoc) & Status = "Draft";"[Office]";"[none]")
Как-то ты их дивно расставила )) Я бы так: @If(!@IsNewDoc & (Status = "Draft");"[Office]";"[none]")



Цитата Сообщение от OKEN
А после переоткрытия документа не срабатывает?
Меня тот же вопрос мучает.
0
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
28.06.2010, 19:37 4
А ты придира сегодня. Но прав, вот, например, совсем маньячно:
@If((!@IsNewDoc) & (Status = "Draft");"[Office]";"[none]")
и еще надо помнить, что роли "просто так" (без галочки Enforce consystent ACL) на локале не работают.
0
prokoputko
28.06.2010, 19:45 5
Цитата Сообщение от OKEN
А регистр роли не влияет?
+ всегда люблю поставить явно скобки @If((!@IsNewDoc) & Status = "Draft";"[Office]";"[none]")

Добавлено: А после переоткрытия документа не срабатывает?
кстати, если у Вас для секции задано имя поля (Section Field Name), можете посмотреть, чему равно его значение после сохранения документа - так, для проверки правильности отработки формулы.

Регистр и скобки роли не играют (но на всякий случай попробовала по-разному - ничего не изменилось).

После переоткрытия все тоже самое - поле не отображается.
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
28.06.2010, 19:49 6
А в поле, указанном в Section Field Name что записано при открытом документе? или дизайн скрыт?
0
prokoputko
28.06.2010, 19:51 7
Цитата Сообщение от OKEN
А ты придира сегодня. Но прав, вот, например, совсем маньячно:
@If((!@IsNewDoc) & (Status = "Draft");"[Office]";"[none]")
и еще надо помнить, что роли "просто так" (без галочки Enforce consystent ACL) на локале не работают.
В этом документе у меня еще кнопка (она находится не в секции) должна при тех же условиях появляться после сохранения. В условии Hide Action if formula is true для нее пишу

@IsNewDoc | !Status="Draft" | !@Contains(@UserRoles; "office")

и все работает, как надо. Так что с ролями, думаю, все нормально...
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
28.06.2010, 20:02 8
вы уверены, что ошибка именно в формуле? ну, чудес обычно не бывает)))
1) посмотрите, что в поле или что говорит диалог "Кто может редактировать данную секцию" (при клике на секцию)? скопируйте точное имя роли, может, где-то русский символ затесался.
2) может, случайно поставили скрытие на рт-поле
3) может, просто секция свернута
0
prokoputko
28.06.2010, 20:11 9
Цитата Сообщение от OKEN
А в поле, указанном в Section Field Name что записано при открытом документе? или дизайн скрыт?
Посмотрите в screenе (сделан после сохранения документа под ролью Office).
Там стоит "[none]"

Добавлено:


Цитата Сообщение от OKEN
вы уверены, что ошибка именно в формуле? ну, чудес обычно не бывает)))
1) посмотрите, что в поле или что говорит диалог "Кто может редактировать данную секцию" (при клике на секцию)? скопируйте точное имя роли, может, где-то русский символ затесался.
2) может, случайно поставили скрытие на рт-поле
3) может, просто секция свернута
Если проблема не в формуле, я тогда не понимаю, почему, если вообще из условия убрать !@IsNewDoc, то поле для роли Office и статуса документа "Черновик" отображается всегда?
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
28.06.2010, 20:27 10
проверяйте, где-то что-то не то
1) после переоткрытия всё работает.
Field Name: InCard_Access
Data Type: Text List
Data Length: 12 bytes
Seq Num: 1
Dup Item ID: 0
Field Flags: SUMMARY NOUPDATE

"[office]"

2) или кнопка сохранения типа
@Command([FileSave]);
@Command([ViewRefreshFields])
0
prokoputko
28.06.2010, 20:50 11
Цитата Сообщение от OKEN
проверяйте, где-то что-то не то
1) после переоткрытия всё работает.
Field Name: InCard_Access
Data Type: Text List
Data Length: 12 bytes
Seq Num: 1
Dup Item ID: 0
Field Flags: SUMMARY NOUPDATE

"[office]"
После переоткрытия-то получается, что нужное поле доступно для "[office]", а вот после сохранения остается "[none]".



Цитата Сообщение от OKEN
2) или кнопка сохранения типа
@Command([FileSave]);
@Command([ViewRefreshFields])
Что-то не пойму, что Вы имеете в виду)) Можно поподробнее, пожалуйста;)
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
29.06.2010, 09:33 12
Цитата Сообщение от prokopulka
@IsNewDoc | !Status="Draft" | !@Contains(@UserRoles; "office")
Для проверки наличия у пользователя роли следует использовать @IsNotMember("[Office]"; @UserRoles). @Contains проверяет наличие подстроки в строке, соответственно в Вашем варианте будут ложные срабатывания, если в БД помимо "[Office]" есть роли типа "[PostOffice]", "[OfficeManager]" и т.п. Да и работает @IsNotMember быстрее, поскольку при первом же несовпадении заканчивает проверку, а @Contains ищет до конца строки.


Цитата Сообщение от prokopulka
Цитата: (OKEN @ 30:06:2010, 00:14 ) *
2) или кнопка сохранения типа
@Command([FileSave]);
@Command([ViewRefreshFields])

Что-то не пойму, что Вы имеете в виду)) Можно поподробнее, пожалуйстаsmile.gif
На кнопке сохранения после команды сохранения добавьте команду обновления документа, может формула не пересчитывается.
0
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
29.06.2010, 10:46 13
Цитата Сообщение от nvy
Да и работает @IsNotMember быстрее, поскольку при первом же несовпадении заканчивает проверку
Может при первом же совпадении? ))

prokopulka, рекомендую роли всегда использовать в коде в том же регистре, в котором они заведены в ТУД!
Где-то это не важно, а где-то важно.



Цитата Сообщение от prokopulka
Нужно, чтобы это поле становилось доступным для редактирования только для роли Office после того, как документ сохранен и имеет статус "Черновик"("Draft").
Для этого я использую вкладку Access Formula (тип Computed for display) для секции, пишу в ней условие:
@If(!@IsNewDoc & Status = "Draft";"[office]";"[none]")
Затем захожу под пользователем с ролью Office, создаю и сохраняю документ, а данное поле не появляется.
У меня работает, но как и было сказано выше - надо переоткрывать документ, чтобы изменения стали действовать.
0
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
29.06.2010, 11:07 14
Цитата Сообщение от Akupaka
Может при первом же совпадении? ))
Я имел ввиду, что функция @IsNotMember(text; textlist) посимвольно сравнивает text с элементами списка textlist и при первом же несовпадении символов считает, что строки не равны. @Contains же проверяет "до упора".
Разумеется, если text содержится в textlist при совпадении text и элемента textlist дальнейшая проверка прекращается. @Contains в этом смысле тоже ищет до первого совпадения.
0
prokoputko
29.06.2010, 11:53 15
Цитата Сообщение от nvy
Для проверки наличия у пользователя роли следует использовать @IsNotMember("[Office]"; @UserRoles). @Contains проверяет наличие подстроки в строке, соответственно в Вашем варианте будут ложные срабатывания, если в БД помимо "[Office]" есть роли типа "[PostOffice]", "[OfficeManager]" и т.п. Да и работает @IsNotMember быстрее, поскольку при первом же несовпадении заканчивает проверку, а @Contains ищет до конца строки.
В условии скрытия для кнопки поменяла !@Contains на @IsNotMember("[office]"; @UserRoles),теперь кнопка не появляется при сохранении. Что может быть не так?



Цитата Сообщение от nvy
На кнопке сохранения после команды сохранения добавьте команду обновления документа, может формула не пересчитывается.
На кнопке сохранения добавила команду обновления документа, теперь там так:
@Command ([FileSave]);
@Command([RefreshHideFormulas] );
@Command([ViewRefreshFields])

Создаю и сохраняю документ под ролью office, теперь в свойствах документа для данной секции написано, что доступ для "[office]", но поле все равно не появляется

Добавлено: Добавлено:


Цитата Сообщение от Akupaka
prokopulka, рекомендую роли всегда использовать в коде в том же регистре, в котором они заведены в ТУД!
Где-то это не важно, а где-то важно.
Да я так обычно и делаю, просто уже и так и сяк пробовала, на всякий случай...))


Цитата Сообщение от Akupaka
У меня работает, но как и было сказано выше - надо переоткрывать документ, чтобы изменения стали действовать.
Так-то у меня тоже работает, но проблема в том, что изменения должны появляться сразу после сохранения документа.
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
29.06.2010, 11:59 16
Цитата Сообщение от prokopulka
В условии скрытия для кнопки поменяла !@Contains на @IsNotMember("[office]"; @UserRoles),теперь кнопка не появляется при сохранении. Что может быть не так?
Всю формулу "в студию" (с). Да, и как там с регистром, как точно роль записана в ACL?


Цитата Сообщение от prokopulka
Создаю и сохраняю документ под ролью office, теперь в свойствах документа для данной секции написано, что доступ для "[office]", но поле все равно не появляется
Попробуйте изменить тип поля на просто текст. Если будет появляться, значить проблема именно в том, что для рт-поля необходимо обязательно переоткрыть документ. Как — ищите в разделе codebase.
0
prokoputko
29.06.2010, 12:19 17
Цитата Сообщение от nvy
Всю формулу "в студию" (с). Да, и как там с регистром, как точно роль записана в ACL?
В условии Hide Action if formula is true для кнопки:
@IsNewDoc | !Status="Draft" | @IsNotMember("[office]"; @UserRoles)
В ACL роль записана [office] (с маленькой o).

Добавлено:


Цитата Сообщение от nvy
Попробуйте изменить тип поля на просто текст. Если будет появляться, значить проблема именно в том, что для рт-поля необходимо обязательно переоткрыть документ. Как — ищите в разделе codebase.
Поменяла тип поля на просто text, все равно не появляется.
prokoputko
29.06.2010, 12:33 18
@IsNewDoc | !Status="Draft" | @IsNotMember("[office]"; @UserRoles)
В ACL роль записана [office] (с маленькой o).

А, в этом условии с @IsNotMember("[office]"; @UserRoles) для кнопки все работает, я просто забыла O на o в [office]" обратно поменять)))
Так что остается только вопрос по условию для секции...
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
29.06.2010, 12:37 19
prokopulka


Цитата Сообщение от prokopulka
@IsNewDoc | !Status="Draft" | @IsNotMember("[office]"; @UserRoles)
Я бы написал @IsNewDoc | Status != "Draft" | @IsNotMember("[office]"; @UserRoles), но не суть важно. А база где — на локале или на сервере? На локале могут быть проблемы.
И попробуйте скопировать роль из ТУД — может быть банальная опечатка (русская о, с или е).


Цитата Сообщение от prokopulka
А, в этом условии с @IsNotMember("[office]"; @UserRoles) для кнопки все работает, я просто забыла O на o в [office]" обратно поменять)))
— внимательней быть надо , так народу мозги вывихнуть можно .

Добавлено:


Цитата Сообщение от prokopulka
Так что остается только вопрос по условию для секции...
Добавьте на форму cfd поле с формулой из секции, чтоб контролировать, что там в каком случае вычисляется.
0
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
29.06.2010, 12:56 20
Цитата Сообщение от prokopulka
Так-то у меня тоже работает, но проблема в том, что изменения должны появляться сразу после сохранения документа.
Ну и? В чем вопрос?
Вариант 1:
Если не сработает, не подойдет, то вариант 2:

nvy
А у тебя без переоткрытия срабатывает изменение прав доступа к секции?

Добавлено: У меня и первый формыльный вариант срабатывает!
0
29.06.2010, 12:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2010, 12:56
Помогаю со студенческими работами здесь

База книг. Проблема с условием.
Программа должна выводить список книг определённого издания и года выпуска болше, например, 2005....

Проблема с выводом переменных GET условием
Здравствуйте! Помогите реализовать фильтр с помощью GET Вот мой код: &lt;?php session_start(); if...

Не выполняется 'запрос с условием' из бд MS Access
Есть некая бд, содержащая таблицу &quot;Люди&quot;: Я выполняю запрос, в котором описывается, что...

Проблема с условием (Четные и нечетные шарики)
Сделать так, чтобы четные шарики изначально двигались на юг, нечетные на север. Как правильно...

SQL запрос с исключающим условием к БД Access
Доброго времени суток, уважаемые форумчане. Имеется таблица, из которой я достаю элементы...

Ошибка при группировке с условием в Access 2007
Доброй ночи,уважаемые коллеги! Добрый день, Уважаемые коллеги! У меня в ходе работы с Access 2007...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru