типы контрагентов для групп пользователей

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

Заранее спасибо!

Нравится

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

Добавьте в sq_AccountType параметр UserID с типом данных Функция и значением Текущий пользователь. Также добавьте
Include фильтер.

NOT 
([tbl_AccountType].[GroupID] IN 
	(SELECT
		[tbl_UserInGroup].[GroupID] AS [GroupID]
	FROM
		[dbo].[tbl_UserInGroup] AS [tbl_UserInGroup]
	WHERE([tbl_UserInGroup].[UserID] = :UserID)))

И включайте его в карточке. Можна на OnPrepare.
P.S.Насчет NOT в фильтре неуверен. Не совсем понял какие типы вам надо скрыть. Но думаю разберетесь. Удачи.

"Underscore a.k.a. _" написал:И включайте его в карточке. Можна на OnPrepare.

лучше включать на OnPrepareSelectWindow , контрола типов
"Матвеев Сергей" написал:не входящих в эти группы, должен отображаться полный список типов.

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

"Денис М" написал:данный фильтр непоможет

Почему не поможет? Если пользоватль не входит в группу, которая соотнесена с типом, то он этот тип и не увидит. Если я конечно правильно понял задачу.
"Денис М" написал:лучше включать на OnPrepareSelectWindow

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

"Underscore a.k.a. _" написал:Добавьте в sq_AccountType параметр UserID с типом данных Функция и значением Текущий пользователь.

Функция вернула значение AdminUnit.UserContactID для моего пользователя. А в таблице UserInGroup UserID связан с AdminUnit.ID как и GroupID, поэтому сейчас ничего не пересекается.

Частично работает так:

WHERE([tbl_AccountType].[Группа] IN 
	(SELECT
		[tbl_UserInGroup].[GroupID] AS [GroupID]
	FROM
		[dbo].[tbl_UserInGroup] AS [tbl_UserInGroup]
	WHERE([tbl_UserInGroup].[UserID] = 
		(SELECT
			[tbl_AdminUnit].[ID] AS [ID]
		FROM
			[dbo].[tbl_AdminUnit] AS [tbl_AdminUnit]
		WHERE([tbl_AdminUnit].[UserContactID] = :UserID)))))

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

"Матвеев Сергей" написал:Но осталась проблема, те пользователи, которые не входят в группы

что то такого плана
(([tbl_AccountType].[Группа] IN
(SELECT
[tbl_UserInGroup].[GroupID] AS [GroupID]
FROM
[dbo].[tbl_UserInGroup] AS [tbl_UserInGroup], [dbo].[tbl_AdminUnit] AS [tbl_AdminUnit]
WHERE([tbl_UserInGroup].[UserID] = [tbl_AdminUnit].[ID][tbl_AdminUnit].[UserContactID] = :UserID)))

or ((SELECT top 1
[tbl_UserInGroup].[GroupID] AS [GroupID]
FROM
[dbo].[tbl_UserInGroup] AS [tbl_UserInGroup],[tbl_AccountType] as [AccountType]

WHERE( [AccountType].[Группа] = [tbl_UserInGroup].[GroupID]))) is null ))

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