Вопрос

Запрет просмотра полей с контактными данными контрагента

Можно ли сделать так, чтобы поля с контактными данными контрагента видел и мог изменять только ответственные. Остальные же, чтобы видели только поля - Контрагент, Полное название, Ответственный???

Нравится

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

Добрый день Максим!!!

конечно можно. Реализация очень проста. Для начала все ваши пользователи должны быть разделены на группы безопасности. Далее для каждой группы безопасности вы настраиваете свои права. Сделать это можно в разделе "Инструменты"-->"Администрирования". После в разделе "Контрагенты" (таблица tbl_Account) должно быть обновлено поле "Ответственный" (OwnerID). Здесь вы должны прописать ID записи "Контактов" (таблица tbl_Contact). При обновлении поля Ответственный нужно не забывать что Контакт должен быть привязан к Пользователю (таблица tbl_AdminUnit).

После создаем функцию:

function InitializeFormOwner() {
var Dataset = dlData.Dataset;
var OwnerID = Dataset.Values('OwnerID');
if (OwnerID != Connector.CurrentUser.ContactID) {
frmFinance.IsVisible = false;
fmGenLeft.IsVisible = false;
fmGenRight.IsVisible = false;
fmAddressComm.IsVisible = false;
} else {
frmFinance.IsVisible = true;
fmGenLeft.IsVisible = true;
fmGenRight.IsVisible = true;
fmAddressComm.IsVisible = true;
}
}

Добавляем данную функцию в wnd_AccountEditOnPrepare(Window)

function wnd_AccountEditOnPrepare(Window) {
....
InitializeFormOwner();
}

Пример приведен для стандартной конфигурации Terrasoft XRM 3.3.2

Если ваша конфигурация отличается от стандартной то прошу выложить сервисы wnd_AccountEdit,scr_AccountEdit
я вам помогу в решении вашего вопроса.

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

Ну хорошо забыл я про Деталь "Контактные данные" а кто ее просто мешает скрыть и показывать по событию "OnActiveViewChanged" в GridArea

А колонки в реестре?

С колонками ничего не поделаешь. Но как показывает практика пользователь это человек который работает с тем набором данных что есть на экране. Но пока писал данное сообщение созрела идея. Требуется полностью переделать SQL запрос Реестра "Контрагенты". Где каждое поле тогда требуется преобразовать в "Колонка с текстом SQL" со следующим текстом:

CASE
WHEN [tbl_Contact].[ID] = :OwnerID
THEN [tbl_Account].[Name]
ELSE NULL
END

Пареметр ":OwnerID" передаем в запрос перед Инициализации реестра. вот и результат. есть колонки но в них ничего невидно

У меня была похожая ситуация.
В итоге сделал следующее:
1. Добавил еще одно представление "Мои контрагенты" с соответсвующим фильтром. С этого представления можно увидеть всех своих контрагентов со всем набором колонок.
2. В представлении "Все контрагенты" убрать все колонки, которые запрещены для общего просмотра.
3. Для каждого выбранного контрагента из реестра проверять список разрешенных деталей для отображения: если он ответственный, то выводить все детали, если нет - показывать только опеределенные.
4. В окне редактирования контрагента реализовать проверку возможности просмотра текущим пользователем этого окна. Если он не ответственный, то выводить автоматически сообщение об этом и закрывать окно
5. Всем пользователям дать права на чтение группы таблиц "Контрагенты".

Возможно, не хорошо, но зато работает.
Плюс: реализовал функционал, который запрещает использовать лично добавленные фильтры для просмотра "Все контрагенты", можно использовать только фильтры, созданные админом системы.

"Власов Михаил Викторович" написал:Требуется полностью переделать SQL запрос Реестра "Контрагенты". Где каждое поле тогда требуется преобразовать в "Колонка с текстом SQL"

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

Спасибо за советы, сейчас к сожалению нет времени этим заняться...нагрянула инвентаризация :,)

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