Topic: Переменные в fastreport

Можно ли перенести информацию из программы, не сохраняя ее перед этим в базе? т.е как на скриншоте - поле Memo и поле Date. Что ввел в этих полях, то и получил в текущем отчете? Таких отчетов может генерится несколько за день и эту информацию не нужно хранить в Бд.

Post's attachments

Attachment icon 2016-01-18 13-21-56 Скриншот экрана.png 18.14 kb, 258 downloads since 2016-01-18 

Re: Переменные в fastreport

да можно

Re: Переменные в fastreport

Можно пример реализации этого?

Re: Переменные в fastreport

memult wrote:

Можно пример реализации этого?

Пожалуйста.

Post's attachments

Attachment icon Report from components.zip 3.81 kb, 806 downloads since 2016-01-18 

Dmitry.

Re: Переменные в fastreport

Спасибо, а когда это все вставляется в блок в скрипте :

SQLQuery(запрос_sql_из_примера, Results);

Синтаксис уже меняется? БД MYSQL

Re: Переменные в fastreport

примерно так

SQLQuery('SELECT '+Form1.DateTimePicker1.sqlValue+','+Form1.Memo1.sqlValue, Results);
Dmitry.

7 (edited by memult 2016-01-18 14:21:46)

Re: Переменные в fastreport

В таком варианте выводит ошибку:

Undeclared identifier: 'sqlValue' at ..

Не так нужно:

SQLQuery('SELECT '+Form1.Date_report.sqlDateTime+','+Form1.Report_memo.sqlValue, Otchet); ?

Только вот в отчете они сохраняются не как переменные, нужно добавить AS?

Re: Переменные в fastreport

Да, перепутал, у компонента DateTimePicker нужно использовать свойство sqlDateTime
И да, нудно добавить AS

SQLQuery('SELECT '+Form1.Date_report.sqlDateTime+' as DateField,'+Form1.Report_memo.sqlValue + ' as TextField', Otchet);

Dmitry.

Re: Переменные в fastreport

Дмитрий,все работает. Единственно что, вносишь в поле мемо любой текст - он нормально переносится в отчет. Потом закрываешь отчет, снова вносишь в поле мемо новые данные, вместо старых, но в отчете опять появляется текст,который я внес в первый раз. Я так понимаю, чтобы все было нормально нужно закрыть/открыть программу? Или как то можно очистить содержимое поле мемо, не перезапускав программу?

Re: Переменные в fastreport

memult
Сложно сказать, т.к. у вас скриптом создается отчет, возможно забыли где то TDataSet очистить, пришлите проект на support@drive-software.com со ссылкой на данную тему.

Dmitry.

Re: Переменные в fastreport

Отправил Вам проект.

Re: Переменные в fastreport

Вы забыли закрыть и очистить TfrxDBDataset

frxDBDataset3.DataSet.Close;  и frxDBDataset3.Free;

в итоге скрипт будет таким:

procedure Form1_bReport_OnClick (Sender: string; var Cancel: boolean);
var
    frxDBDataset1, frxDBDataset2,frxDBDataset3: TfrxDBDataset;
    Results1,Otchet, Results2: TDataSet;
    sql: string;
    sFile: string;
    sDest: string;


begin
 //Data for first dataset
 if isAdmin then
            sql := 'SELECT employees.Формулировка,employees.id,employees.Начало, employees.Изменение, employees.Срок,users.login FROM employees LEFT OUTER JOIN users ON users.id=employees.id_users ORDER BY employees.id'
        else
            sql := 'SELECT employees.Формулировка, employees.Начало, employees.Изменение, employees.Срок, users.login FROM employees LEFT OUTER JOIN users ON users.id=employees.id_users WHERE ' + 'id_users='+IntToStr(idUser);
    SQLQuery(sql, Results1);


    // Data for second dataset
    if isAdmin then
            sql := 'SELECT employees.Формулировка, employees.Начало, employees.Изменение, employees.Срок, users.login FROM employees LEFT OUTER JOIN users ON users.id=employees.id_users'
        else
            sql := 'SELECT employees.Формулировка, employees.Начало, employees.Изменение, employees.Срок, users.login FROM employees LEFT OUTER JOIN users ON users.id=employees.id_users WHERE ' + 'id_users='+IntToStr(idUser);
    SQLQuery(sql, Results2);

                     // Data for 3 datase


  SQLQuery('SELECT '+Form1.Date_report.sqlDateTime+' as DateField,'+Form1.Report_memo.sqlValue + ' as TextField', Otchet);
    //SQLQuery('SELECT '+Form1.DateTimePicker1+','+Form1.Memo1.sqlValue, Results);

    // create first DataSet
    frxDBDataset1 := TfrxDBDataset.Create(Form1);
    frxDBDataset1.UserName := 'Report1';
    frxDBDataset1.CloseDataSource := True;
    frxDBDataset1.OpenDataSource := True;
    frxDBDataset1.DataSet := Results1;

    // create second DataSet
    frxDBDataset2 := TfrxDBDataset.Create(Form1);
    frxDBDataset2.UserName := 'Report2';
    frxDBDataset2.CloseDataSource := True;
    frxDBDataset2.OpenDataSource := True;
    frxDBDataset2.DataSet := Results2;

     // create 3 DataSet
    frxDBDataset3 := TfrxDBDataset.Create(Otchet);
    frxDBDataset3.UserName        := 'Otchet';
    frxDBDataset3.CloseDataSource := True;
    frxDBDataset3.OpenDataSource  := True;
    frxDBDataset3.DataSet         := Otchet;

    // set up report
    Form1.frxReport.Clear;
    Form1.frxReport.DataSets.Clear;
    Form1.frxReport.DataSets.Add(frxDBDataset1);
    Form1.frxReport.DataSets.Add(frxDBDataset2);
    Form1.frxReport.DataSets.Add(frxDBDataset3);

    // DESIGN MODE
    Form1.frxReport.LoadFromFile(ExtractFilePath(Application.ExeName)+'Report\print.fr3');
    Form1.frxReport.DesignReport;


    // OPEN REPORT IN PDF
    Form1.frxReport.LoadFromFile(ExtractFilePath(Application.ExeName)+'Report\print.fr3');
    Form1.frxReport.PrepareReport();
    Form1.frxRTFExport1.FileName := ChangeFileExt(GetTempFileName+'32', '.rtf');
    Form1.frxRTFExport1.ShowDialog := False;
    Form1.frxReport.Export(Form1.frxRTFexport1);


    // PREVIEW MODE
    //frxDBDataset1.DataSet.Close;
    //frxDBDataset2.DataSet.Close;
    //frxDBDataset3.DataSet.Close;
    //Form1.frxReport.LoadFromFile(ExtractFilePath(Application.ExeName)+'Report\print.fr3');
    //Form1.frxReport.ShowReport;


                                            
    frxDBDataset1.Free;
    frxDBDataset2.Free;
    frxDBDataset3.Free;

    sFile := Form1.frxRTFExport1.FileName;
    //Form1.frxRTFExport1.FileName:=ChangeFileExt(sUser+' '+FormatDateTime('YYYY-MM-DD.', frmEmployee.dtDateOfBirth.Date), '.rtf');
       sDest := 'R:\Report4\'+FormatDateTime('YYYY', now)+'\'+FormatDateTime('MM-MMMM', now)+'\'+sUser+'\';
    if ForceDirectories(sDest) then
    begin
        CopyFile(sFile, sDest+sUser+' '+FormatDateTime('YYYY-MM-DD.', Form1.Date_report.Date)+'rtf');
    end;
    ShowMessage('Файл отчета сохранен по адресу:'#13'Free/qq/'+FormatDateTime('YYYY-MM-DD', now)+'\'+sUser+'\'+#13+'Под именем:'+' '+sUser+' '+FormatDateTime('YYYY-MM-DD.', Form1.Date_report.Date)+'rtf' );

    DeleteFile(sFile);
end;
Dmitry.

Re: Переменные в fastreport

В очередной раз спасибо за помощь)

14 (edited by memult 2016-01-18 20:10:58)

Re: Переменные в fastreport

Можно ли экспортировать поле  #(Auto Increment) в отчет?. Там есть аналог #Line, он нормально подсчитывает строки, но нумерация строк в отчете и в таблице - разная. А т.к в программе можно менять приоритет строки (менять их местами) то когда это происходит, нумерация записей в отчете и в  Гриде различается. Тут же получается (В отчете) каждый пользователь видит свое и когда пользователь администратор то все нормально- он видит все записи с нормальной нумерацией, а вот другой пользователь уже видит строки счетчика record_count, т.е Eployees.id и его записи начинаются с отсчета не 1, а к примеру 4 или 5.  Т.е нужно чтобы строки в гриде, их положение и нумерация, соответствовали строкам в отчете, и если меняешь приоритет строк в гриде - меняется их положение и в таблице в отчете. Проект тот же.

Мб можно решить этот вопрос, добавив в этот запрос:
sql := 'SELECT Tema.Тема,Iniciators.Инициатор,Percent.Проценты,Aktive.Активность,employees.Формулировка,employees.id,strftime(''%d.%m.%Y'', employees.Начало) as Nachalo, strftime(''%d.%m.%Y'', employees.Изменение) as Izmenenie, strftime(''%d.%m.%Y'', employees.Срок) as Srok,users.login FROM employees LEFT OUTER JOIN users ON users.id=employees.id_users LEFT OUTER JOIN Tema ON Tema.id=employees.id_Tema LEFT OUTER JOIN Iniciators ON Iniciators.id=employees.id_Iniciators LEFT OUTER JOIN Percent ON Percent.id=employees.id_percent LEFT OUTER JOIN Aktive ON Aktive.id=employees.id_Aktive WHERE ' + 'id_users='+IntToStr(idUser);

условие Order BY record_count и поставить в отчете нумерацию переменной #LINE?
Но не могу понять,куда его добавить тут?

15 (edited by memult 2016-01-19 15:54:57)

Re: Переменные в fastreport

Вроде вышеописанный вариант работает.

Не подскажите еще по скрипту, скрывающему кнопки и поле, в зависимости админ, не админ?

ППробовал конструкцию :
If isAdmin then begin
Form1.memo1.Visible :=False;
Form1.btn.Visible :=False;
End else
Form1.btn2.Visible :=False;
end;
Не корректно работает. Вставляю в конце скрипта, между begin end.

UPD: разобрался

Re: Переменные в fastreport

Пожалуйста, для каждого вопроса создавайте отдельную тему.

Dmitry.