AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.05.2007, 07:14   #1  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Есть таблица. Создана для ее просмотра/модификации табличная форма.
Вопрос. Надо запретить редактирование таблицы с возможностью отмены запрета.

Проблема.
Если использовать Editable формы, то запрет ставится и на все контролы, расположенные на форме (кроме кнопок), что не есть гуд.
Если использовать Editable отдельных полей в контейнерном элементе, то у пользователя остается возможность удаления, что не есть гуд.
Если использовать Editable для контейнерного элемента, содержащего поля, то все гуд, кроме того, что я не могу получить доступ к этому свойству из кода.

Подскажите, как решить задачу и обойти перечисленные проблемы.
Заранее спасибо.
Старый 17.05.2007, 07:47   #2  
Himan is offline
Himan
Участник
Аватар для Himan
 
312 / 12 (1) ++
Регистрация: 07.11.2006
Адрес: Tumen
А что мешает на таблице перекрыть метод onDelete()?? тогда можно в ней проверять и разрешать или запрещать удаление)
тогда можно перекрыть метод Editable на полях!!!
__________________
Рабочий день сокращает жизнь на 8 часов
Старый 17.05.2007, 07:56   #3  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
2 Himan
А заодно и метод onInsert(), т.к. юзер вставлять записи тоже может. Короче при этом способе юзер имеет полный доступ к таблице, не имея его к отдельным полям. Эхм... не нравится мне такой вариант, хотя в принципе он может стать решением.

Хотелось бы услышать другие варианты, если есть.
Старый 17.05.2007, 08:16   #4  
Himan is offline
Himan
Участник
Аватар для Himan
 
312 / 12 (1) ++
Регистрация: 07.11.2006
Адрес: Tumen
можно на форма перекрыть методы onInsert(), onDelete():
Код:
IF( Code <> '' ) THEN
	EXIT(FALSE);
единственное что не очень хороше это диалоговое окно с подтверждением удаления((
Хотя это можно разрулить, типа вам это делать не льзя абратитесь к админу)
__________________
Рабочий день сокращает жизнь на 8 часов
Старый 17.05.2007, 09:11   #5  
kekki is offline
kekki
Участник
 
58 / 10 (1) +
Регистрация: 27.06.2005
У формы есть свойства InsertAllowed, ModifyAllowed и DeleteAllowed.
Они Вам не помогут?
Старый 17.05.2007, 09:48   #6  
Himan is offline
Himan
Участник
Аватар для Himan
 
312 / 12 (1) ++
Регистрация: 07.11.2006
Адрес: Tumen
Цитата:
Сообщение от kekki Посмотреть сообщение
У формы есть свойства InertAllowed, ModifyAllowed и DeleteAllowed.
Они Вам не помогут?
Браво))))

едиственное нехорошо если 2 таблицы)
__________________
Рабочий день сокращает жизнь на 8 часов
Старый 22.05.2007, 05:56   #7  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Извиняюсь, что так долго, срочная задача отвлекла.

2 kekki
Эти свойства помогли бы, но к сожалению к ним тоже нет доступа из C/AL кода.

Ну что, остается только вариант Himan'а через тригеры? Больше, получается, никак не сделать?

p.s. Кстати, свойство "ModifyAllowed" у меня почему-то вобще не сработало, т.е. с выставленным значением "no" все равно осталась возможность редактирования. Это вопщем странно, т.к. 2 других свойства сработали на ура и запретили вставку и удаление записей. Кто-нибудь знает, в чем дело?
Старый 22.05.2007, 07:13   #8  
kekki is offline
kekki
Участник
 
58 / 10 (1) +
Регистрация: 27.06.2005
Цитата:
Сообщение от smoyk Посмотреть сообщение
p.s. Кстати, свойство "ModifyAllowed" у меня почему-то вобще не сработало, т.е. с выставленным значением "no" все равно осталась возможность редактирования. Это вопщем странно, т.к. 2 других свойства сработали на ура и запретили вставку и удаление записей. Кто-нибудь знает, в чем дело?
Попробовала у себя, получается, что редактирование в форме возможно, но при попытке записать изменения в таблицу появляется ошибка "Таблица не может быть изменена в этой форме". Navision3.70
У Вас не так?
Старый 22.05.2007, 09:47   #9  
kas1 is offline
kas1
Участник
 
51 / 10 (1) +
Регистрация: 13.02.2007
Господа, сделайте так.

На форме сделайте две кнопки 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  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
2 kekki
"Все страньше и страньше..." (с). Таже самая версия Navision, что и у Вас. Изменения проходят в таблицу. Не понимаю. Придется списать на есчо адын глюк navision (ну или на кривые руки программиста, кому как нравится). В любом случае дальше копать смысла нет (разве что из любобытства), т.к. доступа к этим свойствам из кода нет, как я уже писал, и значит эти свойства в данном случае использованы быть не могут.
Мне ведь нужно дать возможность пользователю снять запрет на редактирование таблицы.

2 kas1
Как я уже писал в этом случае доступа не будет ко всем визуальным контролам формы. Чтож, отказыватся от них?

Щас начну глупо хихикать... или ругатся матом. Вопрос-то простой, неужели нет способа решить его без камасутры? Есть свойства, которые делают то, что надо, но к ним нет доступа из кода, а те свойства, к которым есть доступ из модуля делают еще и то, что не надо... Есть над чем подумать.
Старый 22.05.2007, 13:26   #11  
kas1 is offline
kas1
Участник
 
51 / 10 (1) +
Регистрация: 13.02.2007
Таким образом, как я написал пользователь может как давать доступ, так и запрещать его.
Если нужно запрет на определенные поля:
ну напишите тогда CurrForm.НазваниеПоля.Editable:=FALSE
Или может я не понял всей глубины проблемы???
Старый 23.05.2007, 05:25   #12  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
2 kas1
Ну я же написал, что при CurrForm.EDITABLE := FALSE становятся недоступными другие контролы на форме. Это плохо. В принципе мона и без них обойтись, но этого хотелось бы избежать.
А по поводу CurrForm.НазваниеПоля.Editable:=FALSE я написал в 1 посте. Блокируются поля, но не таблица, т.е. у юзера остается возможность вставки и удаления записей.

Вот такая проблема.
Старый 23.05.2007, 10:28   #13  
randrews is offline
randrews
Участник
Аватар для randrews
 
312 / 10 (1) +
Регистрация: 06.12.2004
Вы же сами уже все нашли во втором посте - используйте его и не парьтесь

Цитата:
Сообщение от smoyk Посмотреть сообщение
2 Himan
А заодно и метод onInsert(), т.к. юзер вставлять записи тоже может. Короче при этом способе юзер имеет полный доступ к таблице, не имея его к отдельным полям. Эхм... не нравится мне такой вариант, хотя в принципе он может стать решением.

Хотелось бы услышать другие варианты, если есть.
Старый 24.05.2007, 05:41   #14  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Ага нашел, только он мне не понравился Но пришлось так и сделать. Через тригерры. Других вариентов не нашлось. Всем спасибо за помощь.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:05.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.