![]() |
#15 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
![]() Как и писал Иван, в той постановке как Вы написали задача не то, чтобы не решаема, но приведет к массе проблем и недоразумений под девизом: я не успел изменить, а оно уже сохранилось...
Если код не для примера и речь действительно идет о договорах, то в таблице договоров есть поле "Статус". Если не было переделок, то, по умолчанию, при создании нового договора, это поле будет иметь значение 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 на закладке "Обзор" и в группе полей на закладке "Разное" и т.д. Поэтому как лучше и верно будет это сделать? |
|
|
|