Здравствуйте!
Мне нужно в зависимости от условия сделать поле отчета невидимым. Создаю скрипт для отчета. Прописываю обработчик события:
function fr_InvoiceReportOnPreview(ReportPreviewer) {
debugger;
}
Просматриваю объект ReportPreviewer, но не могу получить доступ ни к одному полю отчета.
Нравится
Я это делал прям в коде отчета на событие поля OnAfterData для поля.
Если отображение поля связано со значением поля, то это легко. Просто пишем условие отображения этого поля в коде отчета.
Если условие как-то сложно определяется (но оно все равно должно быть как-то через значения датасета, привязанного к отчету), то я в датасете создавал вычисляемое поле, в него соответсвенно ставил 1, если поле надо было выводить, и 0, если нет. В начале отчета создавал или где-то еще, но чтобы было перед тем полем, которое надо отобразить, ставил Memo-поле с шириной 0 (чтобы его не было видно) и значение ставил ему то вычисляемое поле, которое создал. А на событии поля OnAfterData поставить обработчик и в зависимости от этого значения отображать или не отображать элемент отчета.
Костыляво, но работает. Сам бы не прочь узнать как надо правильно сделать.
Владимир, управляйте видимостью полей в коде самого отчета. Например, в теле функции обработки события OnBeforePrint.
Пример реализации:
procedure PageOnBeforePrint(Sender: TfrxComponent); begin if <ds_ReportTaskList."ShowInScheduler"> = 0 then begin Memo1.Visible := false; end else begin Memo1.Visible := true; end end;
Здравствуйте Наталья!
Я так и сделал. Одно непонятно:
Запись Memo1.Visible := false; вызывает ошибку кодопреобразования, пришлось "схитрить":
procedure Footer1OnBeforePrint(Sender: TfrxComponent);
var
b: boolean;
begin
b := false;
if then
begin
...
Memo50.Visible := b;
...
end;
end;
Здравствуйте Александр!
Я это уже сделал:
Результат проверки условия передаю через атрибут. Создаю скрипт для отчета.
//-----------------------------------------------------------------------------
// fr_InvoiceReport
//-----------------------------------------------------------------------------
function fr_InvoiceReportOnPreview(ReportPreviewer) {
ReportPreviewer.Report.Attributes('IsUserFranchise') = true;
}
В разделе Code отчета прописываю событие на бэнд, для которого нужна проверка условия:
procedure Footer1OnBeforePrint(Sender: TfrxComponent);
var
b: boolean;
begin
b := false;
if then
begin
Picture2.Visible := b;
Memo50.Visible := b;
Picture3.Visible := b;
Picture4.Visible := b;
Memo52.Visible := b;
end;
end;
Присваивать false напрямую не получилось - вызывает ошибку кодопреобразования.
"Тюльпа Владимир" написал:Я так и сделал. Одно непонятно:
Запись Memo1.Visible := false; вызывает ошибку кодопреобразования, пришлось "схитрить":
Владимир, очень странно. Ранее с такой ситуацией не сталкивалось (да и сейчас не смогла воспроизвести).
Правильно ли я понимаю, что задача со скрытием полей в отчете решена?