Фильтр в разделе контрагентов

Добрый день!

Нужно добавит фильтр в группу фильтров. На сервере запрос выглядит так:

        SELECT d.CustomerID
        FROM (
            SELECT
                Id
                , CustomerID
                , CreatedOn            ,OwnerID                                                                                                                                                                                                                                                                                                                                                                                                                                            
                ,row_number() over (partition BY CustomerID ORDER BY CreatedOn DESC) AS rn
            FROM
                tbl_Opportunity
        ) AS d
        WHERE RN =  1 AND d.OwnerID = :OwnerID

как осуществить это в конструкторе?
в моей реализации ошибка, от которой пока нет идей как избавиться.

Нравится

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

Немного упростил запрос (не добавлял условия), однако запрос выполняется без ошибок:

1

Сам сервис во вложении.

В том-то и дело, что нужно условие.
получается, что фильтр сделан для параметра, который указан в колонке типа sql Text Colomn, и там этот параметр не виден:

exec sp_executesql N'SELECT TOP 40
	[tbl_Account].[ID] AS [ID],
	[tbl_Account].[Name] AS [Name],
	[tbl_Account].[Communication1] AS [Communication1],
	[tbl_Account].[Communication2] AS [Communication2],
	[tbl_City].[Name] AS [CityName],
	[tbl_Account].[CityID] AS [CityID],
	[tbl_Account].[CountryID] AS [CountryID],
	[tbl_Account].[StateID] AS [StateID],
	[tbl_Account].[AccountTypeID] AS [AccountTypeID],
	[tbl_AccountType].[Name] AS [AccountTypeName],
	[tbl_Account].[TaxRegistrationCode] AS [TaxRegistrationCode]
FROM
	[dbo].[tbl_Account] AS [tbl_Account]
LEFT OUTER JOIN
	[dbo].[tbl_City] AS [tbl_City] ON [tbl_City].[ID] = [tbl_Account].[CityID]
LEFT OUTER JOIN
	[dbo].[tbl_AccountType] AS [tbl_AccountType] ON [tbl_AccountType].[ID] = [tbl_Account].[AccountTypeID]
WHERE(([tbl_Account].[OwnerID] = ''{93C4775E-589A-447E-BA47-F99816015E6F}'') AND
	(EXISTS 
	(SELECT
		 d.CustomerID
		from (
		    select
		        Id
		        , CustomerID
		        , CreatedOn
		        , OwnerID                                                                                                                                                   
		        ,row_number() over (partition by CustomerID order by CreatedOn desc) as rn
		    from
		        tbl_Opportunity
		) as d
		where RN =  1 and d.OwnerID = @P1    and tbl_Account.ID = d.CustomerID  AS [ID]
	FROM
		[dbo].[tbl_Empty] AS [d]
	WHERE((@P2 IN (@P3))))))
ORDER BY
	2 ASC',N'@P1 varchar(1),@P2 varchar(1),@P3 nvarchar(38)',NULL,NULL,N'{D27E9D09-387D-4BA5-ADC2-ECACBAA1D156}'

однако в тексте колонки стоит

 d.CustomerID
	from (
	    select
	        Id
	        , CustomerID
	        , CreatedOn
	        , OwnerID                                                                                                                                       
	        ,row_number() over (partition by CustomerID order by CreatedOn desc) as rn
	    from
	        tbl_Opportunity
	) as d
	where RN =  1 and d.OwnerID = :OwnerID    and tbl_Account.ID = d.CustomerID 

Елена, условие можно добавить стандартными средствами, приложенный Дмитрием запрос иллюстрирует как раз суть решения Вашей задачи по добавлению SQL-колонки в систему.

Производилась ли Вами настройка колонки согласно предложенному Дмитрием примеру?

решение Дмитрия выглядит вот так:

SELECT
	NULL AS [ContactID]
FROM
	[dbo].[tbl_Empty] AS [d]

Пустая колонка. пустая таблица. Мне нужно совсем другое:

реализовать такой запрос в конструкторе:

WHERE(EXISTS 
	(SELECT
		      d.CustomerID
	from (
		    select
		        Id
		        , CustomerID
		        , CreatedOn
		        , OwnerID                                                                                                                                       
		        ,row_number() over (partition by CustomerID order by CreatedOn desc) as rn
		    from
		        tbl_Opportunity
		) as d
	where RN =  1 and d.OwnerID =:OwnerID
		and   d.CustomerID = [tbl_Account].[ID] ))

где :OwnerID - параметр, выбирающийся в быстром фильтре раздела.

Елена,

в данном случае проблема в том, что дизайнер запросов подставляет вместо значения CustomSQL-колонки ее содержимое, то есть, запрос.

Данная проблема исправлена на последних версиях 3.4.1, мы спустим исправления на 3.3.2 и предоставим Вам новые бинарные файлы.

Что касается запроса, пример настроенного запроса в приложении. Данный запрос будет работать после обновления бинарных файлов.

FilterForHelen

Спасибо! Когда можно ожидать исправленные бинарники?

Елена, ориентировочные сроки, предоставленные отделом разработки - 7 декабря.

Анна, а какой релиз вышел для TS3.3.2 в декабре? Мы работает на 3.3.2.278 :(

И ещё злободневный вопрос: здесь в трейс листе есть код

...........
where RN =  1 and d.OwnerID = @P1    and tbl_Account.ID = d.CustomerID  AS [ID]
        FROM
                [dbo].[tbl_Empty] AS [d]
        WHERE((@P2 IN (@P3))))))
ORDER BY
        2 ASC',N'@P1 varchar(1),@P2 varchar(1),@P3 nvarchar(38)',NULL,NULL,N'{D27E9D09-387D-4BA5-ADC2-ECACBAA1D156}'

КАКИМ образом в varchar(1) поместится GUID , а в nvarchar(38) - список GUIDs??
Как определяет ядро когда и какую размерность под GUID ставить? У меня возникает нестабильная ошибка на этом (бывает и varchar(8000)):
"Insufficient result space to convert uniqueidentifier value to char."

Здравствуйте, Алексей!

Актуальная сборка для Вашей версии - 3.3.2.290.

Проблема, описанная выше, исправлена начиная со сборки 3.3.2.287.

Что касается поисанного Вами сбоя - он требует детального разбора. Есть ли У Вас возможность предоставить скриншот структуры запроса в sq_ и результирующий запрос из профайлера?

Алексей, по результатам анализа:

Размерность параметра выставляется компонентами доступа к MSSQL (MDAC), перед выполнением запроса и если в параметре NULL, там будет varchar(1), а если там уникальный идентификатор то (38)

Анна, у меня есть два трейса от двух разных пользователей по одному и тому же запросу - размерность выставляется разная и в случае varchar(1) сервер выдаёт ошибку.
Вставлять? Или создадим новую тему? (я не мастер блога)

Можно посмотреть на вашем портале самообслуживания: инцидент №0135535 "Плавающая ошибка в Call-Центре"

Алексей, оптимальным вариантом будет прикрепить данную информацию к инциденту.

Инциденту в портале? Там уже всё есть. И сервисы и трейс-листы. Спасибо.

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