17.05.2007, 07:14 | #1 |
Участник
|
Есть таблица. Создана для ее просмотра/модификации табличная форма.
Вопрос. Надо запретить редактирование таблицы с возможностью отмены запрета. Проблема. Если использовать Editable формы, то запрет ставится и на все контролы, расположенные на форме (кроме кнопок), что не есть гуд. Если использовать Editable отдельных полей в контейнерном элементе, то у пользователя остается возможность удаления, что не есть гуд. Если использовать Editable для контейнерного элемента, содержащего поля, то все гуд, кроме того, что я не могу получить доступ к этому свойству из кода. Подскажите, как решить задачу и обойти перечисленные проблемы. Заранее спасибо. |
|
17.05.2007, 07:47 | #2 |
Участник
|
А что мешает на таблице перекрыть метод onDelete()?? тогда можно в ней проверять и разрешать или запрещать удаление)
тогда можно перекрыть метод Editable на полях!!!
__________________
Рабочий день сокращает жизнь на 8 часов |
|
17.05.2007, 07:56 | #3 |
Участник
|
2 Himan
А заодно и метод onInsert(), т.к. юзер вставлять записи тоже может. Короче при этом способе юзер имеет полный доступ к таблице, не имея его к отдельным полям. Эхм... не нравится мне такой вариант, хотя в принципе он может стать решением. Хотелось бы услышать другие варианты, если есть. |
|
17.05.2007, 08:16 | #4 |
Участник
|
можно на форма перекрыть методы onInsert(), onDelete():
Код: IF( Code <> '' ) THEN EXIT(FALSE); Хотя это можно разрулить, типа вам это делать не льзя абратитесь к админу)
__________________
Рабочий день сокращает жизнь на 8 часов |
|
17.05.2007, 09:11 | #5 |
Участник
|
У формы есть свойства InsertAllowed, ModifyAllowed и DeleteAllowed.
Они Вам не помогут? |
|
17.05.2007, 09:48 | #6 |
Участник
|
Цитата:
едиственное нехорошо если 2 таблицы)
__________________
Рабочий день сокращает жизнь на 8 часов |
|
22.05.2007, 05:56 | #7 |
Участник
|
Извиняюсь, что так долго, срочная задача отвлекла.
2 kekki Эти свойства помогли бы, но к сожалению к ним тоже нет доступа из C/AL кода. Ну что, остается только вариант Himan'а через тригеры? Больше, получается, никак не сделать? p.s. Кстати, свойство "ModifyAllowed" у меня почему-то вобще не сработало, т.е. с выставленным значением "no" все равно осталась возможность редактирования. Это вопщем странно, т.к. 2 других свойства сработали на ура и запретили вставку и удаление записей. Кто-нибудь знает, в чем дело? |
|
22.05.2007, 07:13 | #8 |
Участник
|
Цитата:
Сообщение от smoyk
p.s. Кстати, свойство "ModifyAllowed" у меня почему-то вобще не сработало, т.е. с выставленным значением "no" все равно осталась возможность редактирования. Это вопщем странно, т.к. 2 других свойства сработали на ура и запретили вставку и удаление записей. Кто-нибудь знает, в чем дело?
У Вас не так? |
|
22.05.2007, 09:47 | #9 |
Участник
|
Господа, сделайте так.
На форме сделайте две кнопки EditFalse и EditTrue. Наложите одну на другую. На OnPush кнопки EditTrue напишите: CurrForm.EDITABLE := TRUE; CurrForm.EditTrue.VISIBLE:=FALSE; CurrForm.EditFalse.VISIBLE:=TRUE; На OnPush кнопки EditFalse напишите: CurrForm.EDITABLE := FALSE; CurrForm.EditFalse.VISIBLE:=FALSE; CurrForm.EditTrue.VISIBLE:=TRUE; На OnOpenForm напишите: //При открытии формы, если там нет данных редактировать можно IF NOT FIND('-') THEN CurrForm.EDITABLE := TRUE ELSE //При открытии формы, если там есть данные запрещаем редактирование CurrForm.EDITABLE := FALSE; CurrForm.EditFalse.VISIBLE:=FALSE; И нет проблем. |
|
22.05.2007, 12:58 | #10 |
Участник
|
2 kekki
"Все страньше и страньше..." (с). Таже самая версия Navision, что и у Вас. Изменения проходят в таблицу. Не понимаю. Придется списать на есчо адын глюк navision (ну или на кривые руки программиста, кому как нравится). В любом случае дальше копать смысла нет (разве что из любобытства), т.к. доступа к этим свойствам из кода нет, как я уже писал, и значит эти свойства в данном случае использованы быть не могут. Мне ведь нужно дать возможность пользователю снять запрет на редактирование таблицы. 2 kas1 Как я уже писал в этом случае доступа не будет ко всем визуальным контролам формы. Чтож, отказыватся от них? Щас начну глупо хихикать... или ругатся матом. Вопрос-то простой, неужели нет способа решить его без камасутры? Есть свойства, которые делают то, что надо, но к ним нет доступа из кода, а те свойства, к которым есть доступ из модуля делают еще и то, что не надо... Есть над чем подумать. |
|
22.05.2007, 13:26 | #11 |
Участник
|
Таким образом, как я написал пользователь может как давать доступ, так и запрещать его.
Если нужно запрет на определенные поля: ну напишите тогда CurrForm.НазваниеПоля.Editable:=FALSE Или может я не понял всей глубины проблемы??? |
|
23.05.2007, 05:25 | #12 |
Участник
|
2 kas1
Ну я же написал, что при CurrForm.EDITABLE := FALSE становятся недоступными другие контролы на форме. Это плохо. В принципе мона и без них обойтись, но этого хотелось бы избежать. А по поводу CurrForm.НазваниеПоля.Editable:=FALSE я написал в 1 посте. Блокируются поля, но не таблица, т.е. у юзера остается возможность вставки и удаления записей. Вот такая проблема. |
|
23.05.2007, 10:28 | #13 |
Участник
|
Вы же сами уже все нашли во втором посте - используйте его и не парьтесь
Цитата:
Сообщение от smoyk
2 Himan
А заодно и метод onInsert(), т.к. юзер вставлять записи тоже может. Короче при этом способе юзер имеет полный доступ к таблице, не имея его к отдельным полям. Эхм... не нравится мне такой вариант, хотя в принципе он может стать решением. Хотелось бы услышать другие варианты, если есть. |
|
24.05.2007, 05:41 | #14 |
Участник
|
Ага нашел, только он мне не понравился Но пришлось так и сделать. Через тригерры. Других вариентов не нашлось. Всем спасибо за помощь.
|
|