|
![]() |
#1 |
Участник
|
Как и писал Иван, в той постановке как Вы написали задача не то, чтобы не решаема, но приведет к массе проблем и недоразумений под девизом: я не успел изменить, а оно уже сохранилось...
Если код не для примера и речь действительно идет о договорах, то в таблице договоров есть поле "Статус". Если не было переделок, то, по умолчанию, при создании нового договора, это поле будет иметь значение RContractStatus::Passive = 0 - "Не оформлен". Вот ориентируясь на значение этого поля и можно делать предположения о том, находится ли запись в стадии "создания" или уже "создано" Тогда примерный код будет выглядеть так \Forms\RContractTable\Data Sources\RContractTable\Methods\active X++: public int active() { boolean isCheckGroup; int ret; ret = super(); if (ret) { // Определение принадлежности к нужной группе можно вынести в init-формы isCheckGroup = UserInfoHelp::userInUserGroup(curUserId(), 'Закупка'); if (isCheckGroup) { if (RContractTable.RContractStatus == RContractStatus::Passive) { MyObject.AllowEdit(true); } else { MyObject.AllowEdit(false); } } } return ret; } Т.е. здесь нельзя использовать только if() без else. Обязательно надо как устанавливать, так и снимать блокировку. Если, конечно, пользователь относится к нужной группе. Также следует рассмотреть вариант блокировки не объекта на форме, а напрямую поля в DataSource формы. Ведь, в общем случае, одно и то же поле DataSource может быть указано как источник данных разных объектов на форме. Ну, например, отображается объект в Grid на закладке "Обзор" и в группе полей на закладке "Разное" Непосредственно в методе active это будет выглядеть так X++: this.object(fieldnum(RContractTable,RContractAccount)).allowEdit(true);
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
![]() |
#2 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
![]() Как и писал Иван, в той постановке как Вы написали задача не то, чтобы не решаема, но приведет к массе проблем и недоразумений под девизом: я не успел изменить, а оно уже сохранилось...
Если код не для примера и речь действительно идет о договорах, то в таблице договоров есть поле "Статус". Если не было переделок, то, по умолчанию, при создании нового договора, это поле будет иметь значение RContractStatus::Passive = 0 - "Не оформлен". Вот ориентируясь на значение этого поля и можно делать предположения о том, находится ли запись в стадии "создания" или уже "создано" Тогда примерный код будет выглядеть так \Forms\RContractTable\Data Sources\RContractTable\Methods\active X++: public int active() { boolean isCheckGroup; int ret; ret = super(); if (ret) { // Определение принадлежности к нужной группе можно вынести в init-формы isCheckGroup = UserInfoHelp::userInUserGroup(curUserId(), 'Закупка'); if (isCheckGroup) { if (RContractTable.RContractStatus == RContractStatus::Passive) { MyObject.AllowEdit(true); } else { MyObject.AllowEdit(false); } } } return ret; } Т.е. здесь нельзя использовать только if() без else. Обязательно надо как устанавливать, так и снимать блокировку. Если, конечно, пользователь относится к нужной группе. Также следует рассмотреть вариант блокировки не объекта на форме, а напрямую поля в DataSource формы. Ведь, в общем случае, одно и то же поле DataSource может быть указано как источник данных разных объектов на форме. Ну, например, отображается объект в Grid на закладке "Обзор" и в группе полей на закладке "Разное" Непосредственно в методе active это будет выглядеть так X++: this.object(fieldnum(RContractTable,RContractAccount)).allowEdit(true); Владимир, Вы правы, тут некоторые данные отображаются в Grid на закладке "Обзор" и в группе полей на закладке "Разное" и т.д. Поэтому как лучше и верно будет это сделать? |
|
![]() |
#3 |
Участник
|
Цитата:
- Запретить редактировать поле DataSourse - один объект - Запретить редактировать все объекты формы, у которых в качестве источника данных указано поле этого DataSource - много объектов Выбор зависит от конкретной постановки задачи и личных предпочтений программиста.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
![]() Если будет блокировано поле на уровне DataSource, то разрешение редактирования на уровне объекта формы будет проигнорировано. Таким образом у Вас есть выбор
- Запретить редактировать поле DataSourse - один объект - Запретить редактировать все объекты формы, у которых в качестве источника данных указано поле этого DataSource - много объектов Выбор зависит от конкретной постановки задачи и личных предпочтений программиста. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|