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

Проблема такая. Есть новый сервис (табличка, запрос, датасет и т.д.)
В запросе колонки с вручную написанным sql-запросом. Под админом всё в порядке, а пользователи не видят. Читал, что нужно через view делать, но всё равно не работает.

Запрос (из TSAdmin)

SELECT TOP 40
        [tbl_Stat].[ID] AS [ID],
        [tbl_Stat].[CreatedOn] AS [CreatedOn],
        [tbl_Stat].[CreatedByID] AS [CreatedByID],
        [CreatedBy].[Name] AS [CreatedByName],
        [tbl_Stat].[ModifiedOn] AS [ModifiedOn],
        [tbl_Stat].[ModifiedByID] AS [ModifiedByID],
        [ModifiedBy].[Name] AS [ModifiedByName],
        [tbl_Stat].[Name] AS [Name],
        [tbl_Stat].[Description] AS [Description],
        [tbl_Stat].[TypeID] AS [TypeID],
        [Type].[Name] AS [TypeName],
        [tbl_Stat].[OwnerID] AS [OwnerID],
       
             (SELECT Sum(Amount) AS [Amount2]
        FROM [dbo].[vw_Invoice] AS [tbl_In]
        WHERE([tbl_In].[OwnerID] = [tbl_Stat].[ID] AND
                [tbl_In].[InvoiceDate] >= :StartDate AND
                [tbl_In].[InvoiceDate] :FinishDate))
                 AS [CustomSQLColumn1],
                (      SELECT
                           sum(PaymentAmount) AS [CustomSQLColumn]
        FROM
                [dbo].[vw_Invoice] AS [tbl_In]
        WHERE([tbl_In].[OwnerID] = [tbl_Stat].[ID] AND
                [tbl_In].[PaymentDate] >= :StartDate AND
                [tbl_In].[PaymentDate] :FinishDate)) AS [CustomSQLColumn2],
                     (SELECT
                          sum(PaymentAmount2) AS [CustomSQLColumn]
        FROM
                [dbo].[vw_Invoice] AS [tbl_In]
        WHERE([tbl_In].[OwnerID] = [tbl_Stat].[ID] AND
                [tbl_In].[PaymentDate2] >= :StartDate AND
                [tbl_In].[PaymentDate2] :FinishDate)) AS [CustomSQLColumn3],
                      (SELECT
                                 Count (*) AS [CustomSQLColumn]
        FROM
                [dbo].[vw_Invoice] AS [tbl_In]
        WHERE([tbl_In].[OwnerID] = [tbl_Stat].[ID] AND
                [tbl_In].[InvoiceDate] >= :StartDate AND
                [tbl_In].[InvoiceDate] :FinishDate)) AS [CustomSQLColumn4],
                                (SELECT
                                    Sum (Zakaz) AS [CustomSQLColumn1]
        FROM
                [dbo].[vw_Document] AS [tbl_Doc]
        WHERE([tbl_Doc].[OwnerID] = [tbl_Stat].[ID] AND
                [tbl_Doc].[Date] >= :StartDate AND
                [tbl_Doc].[Date] :FinishDate)) AS [CustomSQLColumn5],
                          (SELECT
                                   Sum(PublicationsAmount) AS [CustomSQLColumn]
        FROM
                [dbo].[vw_Document] AS [tbl_Doc]
        WHERE([tbl_Doc].[OwnerID] = [tbl_Stat].[ID] AND
                [tbl_Doc].[Date] >= :StartDate AND
                [tbl_Doc].[Date] :FinishDate))  AS [CustomSQLColumn6],
                                (SELECT
                 Count (*) AS [CustomSQLColumn]
        FROM
                [dbo].[vw_Task] AS [tbl_Ta]
        WHERE([tbl_Ta].[OwnerID] = [tbl_Stat].[ID] AND
                [tbl_Ta].[DueDate] :FinishDate AND
                [tbl_Ta].[StatusID] > :StatusID1 AND
                [tbl_Ta].[StatusID] > :StatusID2)) AS [CustomSQLColumn7],
                       (SELECT
                Count(*) AS [CustomSQLColumn]
        FROM
                [dbo].[vw_Account] AS [tbl_Acc]
        WHERE([tbl_Acc].[OwnerID] = [tbl_Stat].[ID] AND
                [tbl_Acc].[CreatedOn] >= :StartDate AND
                [tbl_Acc].[CreatedOn] :FinishDate)) AS [CustomSQLColumn8],
                        (SELECT
                               Count (*) AS [CustomSQLColumn]
        FROM
                [dbo].[vw_Task] AS [tbl_Ta]
        WHERE([tbl_Ta].[OwnerID] = [tbl_Stat].[ID] AND
                [tbl_Ta].[CreatedOn] >= :StartDate AND
                [tbl_Ta].[CreatedOn] :FinishDate)) AS [CustomSQLColumn9],
                        (SELECT
                           count(*) AS [CustomSQLColumn]
        FROM
                [dbo].[vw_Account] AS [tbl_Acc]
        WHERE([tbl_Acc].[OwnerID] = [tbl_Stat].[ID] AND
                [tbl_Acc].[CreatedOn] :FinishDate)) AS [CustomSQLColumn10]
FROM
        [dbo].[tbl_Stat] AS [tbl_Stat]
LEFT OUTER JOIN
        [dbo].[tbl_Contact] AS [CreatedBy] ON [CreatedBy].[ID] = [tbl_Stat].[CreatedByID]
LEFT OUTER JOIN
        [dbo].[tbl_Contact] AS [ModifiedBy] ON [ModifiedBy].[ID] = [tbl_Stat].[ModifiedByID]
LEFT OUTER JOIN
        [dbo].[tbl_StatType] AS [Type] ON [Type].[ID] = [tbl_Stat].[TypeID]

Помогите!

Нравится

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

У вас достаточно простые SQL-подзапросы, их можно реализовать, используя вместо "Колонка с текстом SQL" - "Колонка подзапроса". При этом ядро Террасофт при необходимости само заменит таблицы в подзапросах на представления.

Млин, у меня и было в подзапросах изначально, однако пользователи не видели результат.
потом прочитал про view, сделал пользовательские запросы, так как view там нельзя было выбрать... Потом пришлось все "as [tbl_Account]" менять на однозначные [tbl_Acc]..

Ничего не понимаю..

Говоря простые, я имел ввиду отсутствие сложных условий, из-за которых было бы невозможно реализовать задачу с помощью колонки-подзапроса. Но это не означает, что можно за 5 минут построить этот запрос, или какой-либо другой.
Оценка же всей задачи вообще не имеет прямой зависимости от сложности запроса, есть и другие сервисы, которые нужно реализовывать, плюс бизнес-логика. Так что оценка, скорее всего, была вполне адекватна.

Павел, можете чуть конкретнее, что значит "не видят"?
У пользователей есть доступ на записи счетов, документов и задач?

Да и полностью согласен, что эти запросы нужно реализовывать как SubSelect колонки, там за Вас все система правильно напишет и соберет запрос.

Павел, проверьте права доступа на записи, которые Вы выбираете в подзапросах. Пользователи вообще видят в разделе те записи, которые попадают в подзапросы? Под администратором всё в порядке, поскольку для него не проверяются права.

[upd] Опоздал :).

"Валерий Андрусик" написал:Говоря простые, я имел ввиду отсутствие сложных условий, из-за которых было бы невозможно реализовать задачу с помощью колонки-подзапроса. Но это не означает, что можно за 5 минут построить этот запрос, или какой-либо другой.
Оценка же всей задачи вообще не имеет прямой зависимости от сложности запроса, есть и другие сервисы, которые нужно реализовывать, плюс бизнес-логика. Так что оценка, скорее всего, была вполне адекватна.

Согласен в принципе)

У пользователей есть права на всё везде, в администрировании в TS все галочки стоят.

Не видят – это значит, что GridArea отрисовывается, фильтр тоже, названия столбцов, но самих строк нету

По поводу subselect – я изначально так и сделал, всё через них, но пользователи (не админы)их также не видели. вот попробовал через customSQLColumnс view – тоже самое.

Где собака зарыта?

"Шитиков Павел Владимирович" написал:У пользователей есть права на всё везде, в администрировании в TS все галочки стоят.

Павел, имелся в виду доступ на конкретные записи раздела. То есть, могут ли пользователи видеть в реестре раздела те записи, которые отбираются в созданном Вами запросе? Доступ на конкретную запись раздела регулируется на детали "Доступ" этого раздела.

Понял. Добавил нужную группу в доступ

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

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

Чтобы иметь представление о концепции прав доступа в системе Terrasoft, прочитайте соответствующий раздел в Руководстве администратора.

Спасибо за помощь

Мануал обязательно полистаю

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