Интересное поведение cross-tab в FastReport

Здравствуйте!

Вчера заметил очень странное поведение компоненты cross-tab в Fast Report. Есть отчет (немного измененный стандартный отчет – суммы выполненных операций по кассах в разрезе дней). Под Supervisor все работает идеально, а вот под обычным пользователем – какие-то чудеса!
Вы, наверное как и я, первое на что подумали – права доступа! Но не тут то было! Смотрим на картинки (Все действия под обычным пользователем):

Рис.1 выборка из реестра (настроено фильтрами)

Рис.2 отчет

Рис.3 запрос отчета в профайлере

exec sp_executesql N'SELECT TOP 120
    [tbl_Cashflow].[CashAccountID] AS [CashAccountID],
    [tbl_Cashflow].[ActualDate] AS [ActualDate],
    [tbl_Cashflow].[TypeID] AS [TypeID],
    [tbl_Cashflow].[Amount] AS [Amount],
    [tbl_Cashflow].[BasicAmount] AS [BasicAmount],
    [tbl_CashAccount].[Name] AS [CashAccountName],
    [tbl_Cashflow].[ID] AS [GeneralColumn]
FROM
    [dbo].[vw_Cashflow] AS [tbl_Cashflow]
LEFT OUTER JOIN
    [dbo].[tbl_CashAccount] AS [tbl_CashAccount] ON [tbl_CashAccount].[ID] = [tbl_Cashflow].[CashAccountID]
WHERE(([tbl_Cashflow].[StatusID] = @P1) AND
    ([tbl_Cashflow].[ActualDate] >= @P2 AND
    [tbl_Cashflow].[ActualDate] = @P3))'
,N'@P1 nvarchar(38),@P2 datetime,@P3 datetime',N'{FDEA47BE-53FE-4730-BF4F-4F44C3B5D61A}',''2009-07-13 00:00:00:000'',''2009-07-13
23:59:59:000''

Рис.4 результат выполнения запроса из профайлера (добавил только группировку)

Какие будут идеи?

Нравится

64 комментария

Олег, отправил Вам фрагмент базы.

--
www.it-sfera.com.ua
Terrasoft Solution Partner

Спасибо, будем разбираться.

Всё-таки последнее предположение оказалось верным :). Виталий, нужно установить в датасете Fast Report свойство FetchRecordsCount равным 0. После этого отчёт заработал корректно. Два раза проверял :).

P.S. К сожалению, так и не понял, почему работает корректно под администратором. Видимо, для компонент Fast Report'а есть разница... Либо различается сортировка записей и, соответственно, порядок прохода по записям в представлении и таблице.

Понятно. Проблема оказалась в связке FastReport и Dataset Террасофта :)

Все! Теперь точно в 1% попадает! :)

--
www.it-sfera.com.ua
Terrasoft Solution Partner

Не думаю, что в связке... Порядок прохождения по датасету может быть некорректным, если не установить свойство FetchRecordsCount. Независимо от того, связывать датасеты или взять отдельно датасет из Terrasoft. Просто нужно помнить про это свойство, если в выборке больше 40 записей.

Хорошо, а как объясните поведение оного под разными пользователями?

--
www.it-sfera.com.ua
Terrasoft Solution Partner

Из личного опыта - при прохождении по датасету, содержащему более 40 записей, не отключив свойство FetchRecordsCount, никогда нельзя быть уверенным в том, что мы будем проходить по одной записи только один раз. Такие случаи возможны, но в той же степени возможны и противоположные (заведомо некорректные).

Я вспомнил один случай в своей практике! ;)

Отчет в ФастРепорте 3.2.0 «Продукты в накладной», ничего особенного – шапка и список продуктов.
Так вот, в одну накладную клиент набил около (сейчас точно не помню) 260 продуктов
В отчете отображалось больше 280!!! Некоторые продуты выводились по 2 раза 8-)

Тогда мы это обошли – просто установив Sort By OfferingName :)
Все сразу стало на свои места!

--
www.it-sfera.com.ua
Terrasoft Solution Partner

"Виталий Ковалишин aka samael" написал:Все! Теперь точно в 1% попадает! :)

Ну, почти, согласен :)
Но, мне кажется, начиная с какой-то версии мы сделали, чтобы свойство FetchRecordsCount автоматом обнулялось в FR.

"Попов Александр" написал:Но, мне кажется, начиная с какой-то версии мы сделали

В планах есть, но пока еще не реализовали.

СВЕРШИЛОСЬ!

Прошу зачислить в 1% ;))))))

--
www.it-sfera.com.ua
Terrasoft Solution Partner

"Виталий Ковалишин aka samael" написал:СВЕРШИЛОСЬ!

Прошу зачислить в 1% ;))))))

ОК, в 1 % :)

"Ключник Алексей" написал:В планах есть, но пока еще не реализовали.

Реализовано в 3.3.1.84 и 3.3.2.25.

Спасибо :)

--
www.it-sfera.com.ua

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