Доброго времени суток, коллеги!
Извиняюсь, если вопрос бородатый, но беглый пробег по имеющимся темам мне не помог.
Нужно группе пользователей скрыть обязательное поле "Приоритет" в карточке инцидента. Чтобы они его вообще не видели и туда проставлялось значение по-умолчанию. Если в "правах доступа к полям" запрещаю доступ к этому полю, или оставляю только "чтение", то при создании инцидента не проставляется значение по-умолчанию, и, соответственно, не проходит сохранение.
Или запретить этой группе видеть варианты приоритетов, которые им нельзя видеть. Подобное, видимо, поднимается здесь https://community.terrasoft.ru/forum/topic/9503 . Но, возможно, просто прикрыть видимость проще будет?

Нравится

12 комментариев

Если при настройке прав вас всё устраивает, кроме значения по умолчанию, можно убрать обязательность, а значение проставлять на уровне триггера в БД.

Как вариант.
А может есть механизм просто сокрытия видимости соответствующего контрола на форме? И пусть оно там втихаря штатным механизмом проставляет значение по-умолчанию, проверяет это поле на обязательность и т.п.
Дело в том, что решение нужно временное: пока не выдрессировал манагеров правильно оценивать приоритетность, все лепят максимальный уровень, чтобы пролезть вне очереди :)

Если важно скрыть видимость только на карточке, можно просто скриптом на событие OnPrepare. Но тогда особо хитрые смогут посмотреть в гриде. Вам же не страшно, что посмотрят, только бы не меняли?

Верно, смотреть не жалко. Лишь бы поменять не могли.
Спасибо, через скрипт и сделаю.

Здравстуйте, Андрей!
Можно устанавливать свойство поля "IsVisible" в false при инициализации страницы в зависимости от текущего пользователя. Информацию о текущем пользователе можно получить из Connector.CurrentUser. Например:

if (Connector.CurrentUser.ContactName == "Василий")
{
       Self.ComponentsByName('edtName').IsVisible = false;
}

Что не правильно в таком варианте:

function wnd_IncidentEditOnPrepare(Window) {
.......
.......
.......
/* Сокрытие поля Приоритет от манагеров*/ 
	// получение ID группы
	var GroupID = Dataset.Values('OwnerGroupID');
	edtPriority.isVisible = (GroupID != '07744A4C-D95D-4A74-8861-B0F217654691') 
	//07744A4C-D95D-4A74-8861-B0F217654691 манагеры
	//4404B91C-F17E-4308-8726-4B3C602EA20B манагеры регионы

не падает, но и не работает. ID групп получил из sq_Group

Странное получение id группы. Пользователь может ходить в несколько групп. Я бы как-то так написал:

function UserHasGroup(UserID, GroupID) {
	var UserInGroup = Services.GetNewItemByUSI('ds_UserInGroup');
	UserInGroup.Close();
	ApplyDatasetFilter(UserInGroup, 'UserID', UserID, true);
	ApplyDatasetFilter(UserInGroup, 'GroupID', GroupID, true);
	UserInGroup.Open();
	if (UserInGroup.RecordsCount == 0) return false;
	return true;
}
 
function wnd_IncidentEditOnPrepare(Window) {
.......
.......
.......
/* Сокрытие поля Приоритет от манагеров*/ 
        edtPriority.IsVisible = !UserHasGroup(Connector.CurrentUser.ID, '07744A4C-D95D-4A74-8861-B0F217654691');
        //07744A4C-D95D-4A74-8861-B0F217654691 манагеры
        //4404B91C-F17E-4308-8726-4B3C602EA20B манагеры регионы

получение группы стырено из функции edtOwnerIDOnPrepareSelectWindow(LookupDataControl), буквально двумя строчками ниже. Правда, возможно там другие цели преследовались. Не подумал о вероятности нахождения в нескольких группах.
Вариант Александра меня полностью осчастливил.

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

Михаил, Вы правы, галка нужна.

"Борисов Михаил Евгеньевич" написал:

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


Можно подробнее про это?
У меня элемент формы не удаляется, а просто скрывается от шаловливых ручек, причём уже после того, как прошли все выборки. Можно было бы даже не скрыть полностью, а просто сделать его неактивным, чтобы пользователи визуально привыкали к правильному значению.

Здравствуйте, Андрей!
Загрузка необходимых полей происходит в ядре. Если просто скрыть колонку, то значение должно загружаться.
Если поля нет на карточке, то для загрузки значения может понадобится установить обязательность загрузки в sq.

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