Подскажите, есть ли возможность заблокировать деталь со страницей редактирования?

По документации есть механизм бокировки "IsModelItemsEnabled", он блокирует поля, убирает кнопки "+" на детали и кнопки "Копировать", "Изменить", "Удалить", но если два раза клацнуть на запись детали то она открывается в странице редактирования и дальше делай что хочешь. Понимаю что можно заблокировать ее прочитав связанную продажу и там уже на основании какого-то признака блокировать, но может есть уже встроенный механизм и велосепед не нужно изобретать

Нравится

7 комментариев
Лучший ответ

Зверев Александр пишет:
Тогда механизм прав Вам не поможет, он регулирует доступность вне зависимости от раздела, где на детали видна запись.

Тогда на странице редактирования записи детали можно узнать, из какого раздела она открыта, и уже блокировать все поля... 

Мы оставляли возможность открытия по двойному щелчку (а также с помощью "Изменить"), чтобы была возможность увидеть запись на странице детали.
А возможность сохранения регулировали правами на объект или запись

Владимир Соколов,

 тогда как решить такую задачу механизмом прав - есть продажа, у на последнем этапе у нее блокируются все поля и детали? При этом детали есть общие для раздела "Договоры" (сделаны как в заказе с продуктами) и деталь "Контакты", есть детали что в контрагенте. При этом наследовать права от продажи нельзя так как доступы в контрагентах другие и если запретить редактирование в детали то через контрагента добавить не сможем.

Можно раздавать права через бизнес-процесс для каждой записи в детали, но если мы меняем этам нам нужно снова запускать процесс по всему списку. К тому же на странице редактирования записи детали нет управления доступом и потому изменить доступ можно снова через бизнес-процесс. Так образом мы увеличиваем нагрузку увеличившимся количеством процессов и можем поучить еще и опасность зависание процесса.

Думаю удобнее сделать наследование блокировки как это реализовано для детали с редактируемым реестром но в открывающейся странице (удобно потому что полей много бывает и просто для просмотра надо бы открывать как сейчас реализовано)

Владимир Соколов,

 

И тогда вопрос - доступы раздела можно посмотреть в таблице "Sys + название схемы + Right", а вот где смотреть доступы для деталей? К примеру нужно скопировать все доступы из раздела в деталь, как это можно сделать?

При этом наследовать права от продажи нельзя так как доступы в контрагентах другие и если запретить редактирование в детали то через контрагента добавить не сможем.

Тогда механизм прав Вам не поможет, он регулирует доступность вне зависимости от раздела, где на детали видна запись.

 И тогда вопрос - доступы раздела можно посмотреть в таблице "Sys + название схемы + Right", а вот где смотреть доступы для деталей?

Так же само. 

К примеру нужно скопировать все доступы из раздела в деталь, как это можно сделать?

Если разово, то проще всего написать SQL-запрос. Если постоянно, то выдавать можно БП. Но если хотите завязаться на событие именно выдачи прав в самом объекте, то такого события вроде бы нет, разве что SQL-триггером. 

Зверев Александр пишет:
Тогда механизм прав Вам не поможет, он регулирует доступность вне зависимости от раздела, где на детали видна запись.

Тогда на странице редактирования записи детали можно узнать, из какого раздела она открыта, и уже блокировать все поля... 

Спасибо за предложенные варианты. Решил сделать привязку к одному разделу и через бизнеспроцес отбирать права на изменение записи в детали. Благо такая деталь сейчас в доработке только одна. А вообще вопрос думаю интересный и нужно будет подумать. Всем Спасибо

Владимир Соколов пишет:   сделал похоже, но не много по другом. Использовал механизм блокировки всех полей на странице редактирования по условию - запрос в базу данных про этап текущий продажи (а в самих этапах добавил булевую строку с отметкой нужно ли блокировать поля на этапе)

Показать все комментарии

Если ваша система работает с СУБД Oracle, то вам необходимо знать, что если ввести несколько раз подряд неверный пароль, то учетная запись пользователя может быть заблокирована на уровне СУБД. "Может быть" я написал потому, что это зависит от настроек Oracle. В случае, если пользователи, все таки, блокируются, для их разблокировки проще всего выполнить в sqlplus следующую команду

ALTER USER username ACCOUNT UNLOCK

Если с такой ситуацией приходится сталкиваться часто, то можно пойти дальше - добавить в разделе Администрирование действие "Разблокировать пользователя" и реализовать следующий обработчик события:
function amiUnlockUserOnExecute(ActionMenuItem, Sender) {
  var UserName = GetDatasetFieldValue (dlData.Dataset, 'SQLObjectName');
  if (UserName) {
    Connector.DBEngine.ExecuteCustomSQL('ALTER USER "' + UserName + '" ACCOUNT UNLOCK', System.EmptyValue);
    ShowInformationDialog('Пользователь "' + UserName + '" успешно разблокирован!');
  }
}

Нравится

Поделиться

2 комментария

Впринципе, если это часто происходит блокировка пользователей в следствии некорректного воода пароля, то в настройках Oracle параметру FAILED_LOGIN_ATTEMPTS нужно указать UNLIMITED и пользователь блокироваться не будет.

я вообще ничего не понимаю в этом оракле =)
что он хочет?

ALTER USER username ACCOUNT UNLOCK
   2  /
SP2-0640: Not connected
Показать все комментарии