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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.04.2018, 13:45   #14  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,719 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Как и писал Иван, в той постановке как Вы написали задача не то, чтобы не решаема, но приведет к массе проблем и недоразумений под девизом: я не успел изменить, а оно уже сохранилось...

Если код не для примера и речь действительно идет о договорах, то в таблице договоров есть поле "Статус".

Если не было переделок, то, по умолчанию, при создании нового договора, это поле будет иметь значение 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;
}
Здесь важное отличие от метода init() заключается в том, что переопределение доступности редактирования объекта на форме надо делать ВСЕГДА. Вне зависимости от того, что будет определено true или false, поскольку метод срабатывает при переходе на каждую новую запись.

Т.е. здесь нельзя использовать только if() без else. Обязательно надо как устанавливать, так и снимать блокировку. Если, конечно, пользователь относится к нужной группе.

Также следует рассмотреть вариант блокировки не объекта на форме, а напрямую поля в DataSource формы. Ведь, в общем случае, одно и то же поле DataSource может быть указано как источник данных разных объектов на форме. Ну, например, отображается объект в Grid на закладке "Обзор" и в группе полей на закладке "Разное"

Непосредственно в методе active это будет выглядеть так

X++:
this.object(fieldnum(RContractTable,RContractAccount)).allowEdit(true);
Если будет создан отдельный метод для установки/снятия блокировок, то вместо ключевого слова "this" надо будет написать "RContractTable_ds"
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
В некоторых случаях не отображаются элементы дерева на форме Права групп пользователей McArrow DAX: Программирование 0 17.06.2013 18:30
DAX 2009 некорректный SPID в форме активных пользователей Logger DAX: Программирование 2 05.07.2010 17:19
Закрыть доступ к компаниям без создания домена и группы пользователей Рустем Гизатуллин DAX: Администрирование 3 04.12.2007 09:38
Перемещение полей на форме Swetik DAX: Функционал 12 15.09.2004 19:29
доступ к свойствам полей DataSource andreynikolai DAX: Программирование 2 06.06.2002 16:55

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:26.