Доступ к элементам отчета

Здравствуйте!
Мне нужно в зависимости от условия сделать поле отчета невидимым. Создаю скрипт для отчета. Прописываю обработчик события:

function fr_InvoiceReportOnPreview(ReportPreviewer) {
debugger;
}

Просматриваю объект ReportPreviewer, но не могу получить доступ ни к одному полю отчета.

Нравится

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

Я это делал прям в коде отчета на событие поля 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; вызывает ошибку кодопреобразования, пришлось "схитрить":

Владимир, очень странно. Ранее с такой ситуацией не сталкивалось (да и сейчас не смогла воспроизвести).
Правильно ли я понимаю, что задача со скрытием полей в отчете решена?

Да, правильно.

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