Люди добрые помогите пожалуйста

отредактировано 00:25 Раздел: FastReport 3.0
;) Люди добрые помогите пожалуйста. Я в Fast-Reporte не силен и нуждаюсь в вашей помощи. Help перечитал в доль и поперек раз 5, вроде делаю как написано там, но результат отрицательный.
Проблема в следующем :

Отчет состоит из:

1. ReportTitle1
2. Memo1 на ReportTitle1
3. ColumnHeader1
4. MasterData1
5. В "Списке переменных" переменная "NoInform"

MasterData1 привязан к внешнему(на dmForm) Query1.

Нужно, чтобы при пустом Query1 в Memo1 записалось "Нет данных для отчёта" и ColumnHeader1 стал невидимым. В Memo1 написано [NoInform], пробывал и [<NoInform>].

if (qryChildren.IsEmpty) then
frxReport1.Variables := '''' + 'Нет данных для отчета' + '''';

frxMainReport.LoadFromFile('C:\Program Files\Borland\Delphi7\Projects\Тренировки\Отчеты для расчета\Отчеты(бланки)\Report1.fr3');

frxMainReport.PrepareReport; - Это главный отчет в который я вливаю все подготовленные

bPerpareReport := True;

frxMainReport.ShowPreparedReport;

А как сделать ColumnHeader1 из Delphi7 невидимым я вообще не представляю.
В Memo1 ничего не выводися. Может в скрипте или на каких либо событиях отчета что-то нужно вписать ? Если не тяжело приведите код программы.

Заранее благодарен откликнувшимся на просьбу.

Комментарии

  • отредактировано 00:25
    if (qryChildren.IsEmpty) then
    frxReport1.Variables := true
    else
    frxReport1.Variables := false;

    для ColumnHeader1 назначаешь обработчик BeforePrint, в котором пишешь:

    ColumnHeader1.Visible := <NoInform>;

    аналогично для Memo1 в BeforePrint:

    if <NoInform> then Memo1.Memo.Add('Нет данных для отчета' );
  • отредактировано 00:25
    Plumbum написал:
    if (qryChildren.IsEmpty) then
      frxReport1.Variables := true
    else
      frxReport1.Variables := false;

    для ColumnHeader1 назначаешь обработчик BeforePrint, в котором пишешь:

    ColumnHeader1.Visible := <NoInform>;

    аналогично для Memo1 в BeforePrint:

    if <NoInform> then Memo1.Memo.Add('Нет данных для отчета' );
    Ты написал:

    if (qryChildren.IsEmpty) then
    frxReport1.Variables := true
    else frxReport1.Variables := false;

    ColumnHeader1.Visible := <NoInform>;

    Так получается, что если данных нет, то ColumnHeader1 будет видимым.
    потом

    if <NoInform> then Memo1.Memo.Add('Нет данных для отчета' );

    несовсем понятное условие оператора if...then ...
    <NoInform> чему-нибудь должно быть равно или нет ?

    Вообщем как ты сказал я пробывал результат - отрицательный, в Memo1 не записывается 'Нет данных для отчета', а ColumnHeader1 всегда скрыт, такое ощущение, что переменная NoInform не передается.

    Переменная NoInform должна быть заведена в "Списке переменных" или в скрипте отчета ? и где написать условие if (qryChildren.IsEmpty) then ... в Delphi или скрипте отчета ?

    ПОЖАЛУЙСТА ответьте !!! Нужно очень СРОЧНО !!! ;)
  • отредактировано 00:25
    косяк. попутал. сорри.
    написал:
    Переменная NoInform должна быть заведена в "Списке переменных" или в скрипте отчета ?
    если хочешь чтобы в десигн-тайм работало, то нужно в список переменных занести. если не критично, то и так сойдет.

    в Delphi:
    // присваиваем значение. если NoInform не существует (не объявлена в списке переменных) то она сперва создастся.
    if (qryChildren.IsEmpty) then
      frxReport1.Variables['NoInform'] := true  
    else
      frxReport1.Variables['NoInform'] := false;
    

    для ColumnHeader1 назначаешь обработчик BeforePrint, в котором пишешь(в скрипте):
    ColumnHeader1.Visible := <not NoInform>;
    

    аналогично для Memo1 в BeforePrint(в скрипте):
    if <NoInform> then Memo1.Memo.Add('Нет данных для отчета' )
    else
      Memo1.Memo.Add(<Поле_из_запроса> );
    

    условие нормальное. Переменные отчета являются вариантными.

    Важно: при проектировании формы текст в Memo1 никакой назначать не нужно ты это сделаешь в обработчике Memo1.BeforePrint
  • отредактировано 00:25
    Plumbum написал:
    Важно: при проектировании формы текст в Memo1 никакой назначать не нужно ты это сделаешь в обработчике Memo1.BeforePrint
    Переменная "NoInform" у меня создана в самом отчете (т.е. не программно).
    Всё сделал как ты и сказал.

    1. Когда запускаю прогу, доходит до breakpoint на frxReport1.PrepareReport и
    выдаёт ошибку : 'Could not convert variant of type(Null) into type (Boolean)' ;)

    2. Если создать переменную "NoInform" программно:
    frxChildren.Variables.Clear;
    frxChildren.Variables['' + 'Category'] := Null;
    frxChildren.Variables.AddVariable('Category', 'NoInform', false);
    
    то выдаёт ошибку: 'Unkhown variable or datafield: NoInform' ;)

    3. И ещё на мой взгляд ОЧЕНЬ ВАЖНО!!
    В Help в параграфе "Добавление переменнной" написано:
    var
        Variable: TfrxVariable;
    
    так вот если у меня в проге объявить такую же переменную, то при компиляции выдаёт ошибку:

    Udeclared identifier: 'TfrxVariable'
    Could not compile used unit 'RSPasswordDlg.pas'

    Где нужно хранить отчёты там же где и *.pas, *.dlg или все равно где ?
    Может у меня где нибудь patch не указан ?
    Как можно узнать передалась переменная NoInfom или нет ?
  • отредактировано 00:25
    постучись на мыло - вышлю пример

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.