Создал отчет. Два параметра в запросе всегда одни и те же. Два параметра изменяются - это период "Дата с" и "Дата по".
Окно для выбора периода собственное. Вот такой код:
обработчик кнопки "Ok"
var ReportPreviewer = Services.GetNewItemByUSI('wnd_BaseFastReportPreview');
var ReportPreviewerComponent = ReportPreviewer.Attributes('ReportPreviewer');
var ReportDataset = Services.GetNewItemByUSI('ds_ServicesOnPeriod');
ApplyDatasetFilter(ReportDataset, 'DueDateROBeg', BegDate.Value, true);
ApplyDatasetFilter(ReportDataset, 'DueDateROEnd', EndDate.Value, true);
ReportDataset.Open();
SetAttribute(ReportPreviewer, 'Report', Report);
ReportPreviewer.Build();
ReportPreviewer.Prepare();
Report.Attributes('BegDate') = BegDate.Value;
Report.Attributes('EndDate') = EndDate.Value;
var CurrentDate = new Date();
CurrentDate = CurrentDate.getVarDate();
Report.Attributes('CurDate') = CurrentDate;
ReportPreviewer.WindowState = wsMaximized;
ReportPreviewerComponent.DatasetByComponentName('ds_ServicesOnPeriod') = ReportDataset;
ReportDataset.Close();
Self.Close()
Просматриваю профайлером, какой запрос выполняется. Первый раз (на методе ReportDataset.Open()) отрабатывает нормально. Но дальше запрос начинает выполняться с отключенными параметрами DueDateROBeg и DueDateROEnd. Соответственно выполняется он сначала для TOP 40, потом - TOP 80 и т.д.
С чего это он вдруг так нехорошо поступает?
версия 3.0.2.244
Нравится
SSV, здравствуйте.
Все верно, ведь Вы здесь обращаетесь к компоненту отчета, а не к самому сервису конфигурации.
а вот в другом отчете так не получается...
всё сделано абсолютно аналогично, только другие сервисы датасета и отчета... если на всех фильтрах поставить галочки (т.е. фильтры всегда включены), то получается нормальный отчет, а если галочки сняты, то запрос выполняется без фильтров, хотя значения им присваиваются:
ApplyDatasetFilter(ReportDataset, 'StartDateRO' ,BegDate.Value, true); ApplyDatasetFilter(ReportDataset, 'DueDateRO', EndDate.Value, true); ApplyDatasetFilter(ReportDataset, 'UrFaceIDParam', ur, true);
Здравствуйте, SSV.
Есть предположение, что Вы включаете фильтры не в том экземпляра датасета (т.е в абсолютно новом, а не том, который используется в отчете).
И этот код лучше переписать так:
var Report = Services.GetNewItemByUSI('fr_ServicesOnPeriodReport'); var ReportPreviewer = Services.GetNewItemByUSI('wnd_BaseFastReportPreview'); var ReportPreviewerComponent = ReportPreviewer.Attributes('ReportPreviewer'); var ReportDataset = Services.GetNewItemByUSI('ds_ServicesOnPeriod'); ApplyDatasetFilter(ReportDataset, 'DueDateROBeg', BegDate.Value, true); ApplyDatasetFilter(ReportDataset, 'DueDateROEnd', EndDate.Value, true); Report.Attributes('BegDate') = BegDate.Value; Report.Attributes('EndDate') = EndDate.Value; var CurrentDate = new Date(); CurrentDate = CurrentDate.getVarDate(); Report.Attributes('CurDate') = CurrentDate; ReportPreviewer.WindowState = wsMaximized; ReportPreviewerComponent.DatasetByComponentName('TSDataSet') = ReportDataset; SetAttribute(ReportPreviewer, 'Report', Report); ReportPreviewer.Build(); ReportPreviewer.Prepare(); Self.Close()
"Олейник Дмитрий" написал:
Есть предположение, что Вы включаете фильтры не в том экземпляра датасета
это врядли...
посмотрел, как реализованы другие отчеты (реализованы не мной), получается, что фильтры в селектах, которые используются для отчетов, всегда должны быть включены по умолчанию?
"неладно что-то в Датском королевстве"...
простой код:
case '5': var DSHouses = Services.GetNewItemByUSI('ds_Houses'); ApplyDatasetFilter(DSHouses, 'PostalCode', Dataset.Values('ZIP') , true); DSHouses.Open(); break;
запрос даже в профайлере не отображается, т.е. он как бы вообще не выполняется, хотя в дэбаггере DSHouses.RecordsCount имеет вполне определенное значение, но неправильно, как будто запрос выполнился без фильтра...
дальше, в той же функции:
var DSHouses = Services.GetNewItemByUSI('ds_Houses'); ApplyDatasetFilter(DSHouses, 'AOGUID1', DSAdObj.Values('AOGUID') , true) DSHouses.Open();
как видно - используется другой фильтр, запрос отрабатывает...
в чем может быть проблема?
PS датасет ds_Houses построен на основе представления, могут ли в этом случае быть какие-то подводные камни?
хотя второй участок кода ведь работает...
Здравствуйте!
Уточните, пожалуйста, параметр фильтра называется так же, как сам фильтр или иначе?
Кроме того, не вполне понятна ситуация с профайлером: он может не показывать запрос в случае, если в нем настроена фильтрация либо же скрипт просто не входит в case 5
В данном случае сложно что-то сказать наощупь, хотелось бы провести отладку непосредственно на базе.
В случае, если у Вас есть возможность предоставить резервную копию базы данных либо удаленное подключение для тестирования, направьте, пожалуйста, запрос на support@terrasoft.ru
Если такой возможности нет, тогда будем искать другие, более медленные и сложные пути :) Например, выгрузка сервисов конфигурации - таблиц, из которых запрос берет данные, самого запроса, датасета и отчета. Для диагностики и устранения сбоя нужно как-то воспроизвести его на нашей стороне и отладиться.
Хорошо бы еще выяснить, какая у Вас версия базы данных и какой продукт был развернут изначально.
Вы указали версию бинарных файлов, мне нужно, как минимум, знать еще версию базы данных. Они могут различаться, и в Вашем случае различаются - сборка 3.0.2.244 одна из самых новых, тогда как версия базы данных для MSSQL последняя была 3.0.2.68. Между версиями БД могут меняться скрипты конфигурации, хранимые процедуры и триггеры и т.д.
Это важно для того, чтобы мы могли развернуть конфигурацию, максимально близкую к Вашей.
Давайте попробуем поступить следующим образом: Вами будут предоставлены запрошенные сервисы, я попробую их развернуть на последнем имеющемся бэкапе. Если не удастся воспроизвести, буду запрашивать дополнительную информацию для диагностики.