Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: giacomarko - Gennaio 07, 2023, 12:18:36 am

Titolo: RISOLTO:Chiarimento su creazione report
Inserito da: giacomarko - Gennaio 07, 2023, 12:18:36 am
Buona sera a tutti,

In sintesi vorrei capire qualche cosa di più sui vari sistemi/componenti per creare report, più che altro per decidere in base alle funzionalità dei vari tool, su quale sarebbe meglio iniziare a spenderci del tempo per capire come funziona,

dopo aver cercato sia nel sito che in rete, ho trovato quesa pagina:
https://forum.lazarus.freepascal.org/index.php?topic=45111.0 (https://forum.lazarus.freepascal.org/index.php?topic=45111.0)

ma alla fine è solo un elenco di link che rimandano alle rispettive pagine con l'elenco delle funzionalità, a me interesserebbe di più il parere di chi ci ha lavorato, piuttosto che di quello che lo ha progettato.

Tra l'altro vorrei anche capire le varie differenze sui nomi dei progetti, mi spiego, ho installato il pacchetto mediante l'installatore integrato; la cartella dei componenti è stata nominata "LazReport", pensavo quindi di utilizzare questo... sbagliato...  se apro l'editor e vado al box di info, mi trovo FreeReport 2.32... ma allora sono a stessa cosa ?
Da quello che ho capito penso di sì o quasi, e quindi ?

Premetto che ho già creato un report, che contiene banda header e un detail collegato prelevando da DB con diversi datasource, aggiunto parametri da programma... direi semplice, però non esporta in pdf, cosa che a me invece serve,

ho letto che esiste la possibilità di integrare l'esportazione in pdf, ma il pacchetto scaricabile (sempre dal gestore di pacchetti integrato) non rigenera l'IDE a causa di una unit mancante...

Sempre in rete ho trovato PowerPDF, installato, ma a quanto ho visto il concetto è quello di disegnare il report, all'interno dell'area di un form aggiungendo poi i vari componenti e successivamente mandarlo in stampa... preferirei lavorare su un documento e non sul form

Grazie !!

M

Titolo: Re:Chiarimento su creazione report
Inserito da: Avogadro - Gennaio 07, 2023, 04:42:52 am
L' unico che funziona è questo :

https://sites.google.com/site/kryvich/reporter

Lo devi "trasformare" da delphi a lazarus (c'è un tools)  e devi sanare due problemi  (variant e tipo di "fileds") ; per generare il codice rtf/xml usa wps ; poi associa le due unit e compila il tutto

Gli altri generatori di report semplicemente non funzionano, una disperazione .

Un'alternativa, la piu' efficace perché semplice ,  è il classico file di "logout", come ai tempi die main frame, ossia un file di testo di output che posi stampa o si impagina - va bene , anzi va meglio per via del cut&paste, usare un "meo" per lo stesso scopo .

Altre alternative:

https://wiki.freepascal.org/Office_Automation

https://wiki.freepascal.org/fpvectorial_-_Text_Document_Support

https://wiki.freepascal.org/fpvectorial


Titolo: Re:Chiarimento su creazione report
Inserito da: giacomarko - Gennaio 07, 2023, 10:14:18 am
ok grazie,

proverò a convertire da Delphi, anche se non mi molto chiaro il discorso delle unit da "fixare"

adesso vedo

 :)

m
Titolo: Re:Chiarimento su creazione report
Inserito da: DragoRosso - Gennaio 07, 2023, 02:07:35 pm
Io non ti posso aiutare, perchè usavo da prima Quick Report e poi Fast Report in Delphi.

Ormai è da anni  che non creo più nuovi report (mantengo solo quello dei clienti che hanno e vogliono mantenere quello già esistente).

Il problema principale è che ogni cliente vuole avere un suo report sempre più complesso e che varia spessissimo. A questa situazione ho ovviato semplicemente (più o meno  :P ), come accennava @Avogadro. generando un file formattato tipo CSV da cui il cliente attinge i dati da stampare in un suo "format".

N.B.: mi è anche accaduto che i termini usati nella stampa non fossero quelli corretti (il corretto variava da momento a momento ....) e quindi l'opzione io ti presento un file di testo e tu ci fai quello che vuoi è secondo me la soluzione migliore in tanti casi.
Ovvio che ciò si può fare in alcuni casi, ma non per tutti .. ad esempio quando i file stampati hanno un valore "legale", fiscale o altro ....

Ciao
Titolo: Re:Chiarimento su creazione report
Inserito da: giacomarko - Gennaio 07, 2023, 02:58:34 pm
In Delphi ho sempre usato RaveReport, anche perché era incluso  ;)

come giustamente hai anticipato, la soluzione del csv, va bene se fornisci l'output a chi sa che farsene, ma per l'auto officina che deve stampare fatture/ricevute... non è applicabile.

curiosità,  ma lazreport e freereport sono la stessa cosa?
l'interfaccia sembra quasi uguale

m
Titolo: Re:Chiarimento su creazione report
Inserito da: DragoRosso - Gennaio 07, 2023, 04:50:47 pm
Da quel che sapevo, LazReport (Lazarus) è stato originariamente creato su FreeReport (FPC). Poi è stato adattato con il contributo della stessa azienda di Fast Report (componente distribuito con Delphi). Mi pare che abbia addirittura gli stessi nomi dei componenti (TfrReport x il designer ad esempio) con lo stesso stile usato per Delphi.

Non ho mai usato nulla di report in Lazarus, quindi non ho alcuna esperienza in tale campo.

Ciao

Aggiornamento: visto la finestra "about" di LazReport design ... direi che freereport, lazreport sono di fatto Fast Report.

Titolo: Re:Chiarimento su creazione report
Inserito da: xinyiman - Gennaio 08, 2023, 10:55:15 am
Ho usato per anni LazReport e sono sempre riuscito a fare un po' tutto. Ora è qualche anno che non genero più report perchè ho cambiato lavoro.
L'unico neo di LazReport è che deve avere interfaccia grafica per funzionare. Se per esempio tu devi generare un report in pdf attraverso LazReport in una distro linux senza interfaccia grafica, LazReport non funziona.
Titolo: Re:Chiarimento su creazione report
Inserito da: nomorelogic - Gennaio 08, 2023, 02:38:08 pm
infatti la dipendenza da una interfaccia grafica è un problema importante quando si devono creare i report lato server e si lavora con linux
per fortuna per ora i miei report sono esportazioni in fogli elettronici e quindi uso spspreadsheet

lato pdf, so che il team di lazarus/free pascal ha rilasciato fcl-pdf (che non ho mai provato) ma che sulla carta è privo della dipendenza dell'interfaccia grafica

https://wiki.lazarus.freepascal.org/fcl-pdf_getting_started_tutorial
Titolo: Re:Chiarimento su creazione report
Inserito da: tito_livio - Gennaio 08, 2023, 11:55:05 pm
Io da diversi anni uso Lazreport e stampo immagini, fatture, ricevute, tabulati riepilogativi e grafici con istogrammi e tipo "funzione". Puoi farci tutto, pure esportare in pdf e csv la stampa senza difficoltà. Si possono pure inserire pezzi di codice dentro alla stampa.
Io produco però programmi con interfaccia grafica.
Un'alternativa che ho visionato è Fortes Report, è ancora più completo ma mi sembra non più aggiornato da troppo tempo. Fortes Report in più è scritto con i messaggi in brasiliano anche se c'è qualcuno di questo forum che l'ha tradotto.
L'unica cosa che non puoi fare con entrambi i due tipi di report è la stampa del richtest memo ma da quello che mi sembra di capire per te non è necessario.
Io quindi mi butterei con Lazreport. Nella cartella C:\lazarus\components\lazreport\doc trovi un piccolo manuale che per cominciare va bene. Se hai bisogno poi di altre spiegazioni chiedi pure.
Titolo: Re:Chiarimento su creazione report
Inserito da: Mimmo - Gennaio 11, 2023, 09:54:31 am
Ciao,
premetto che è un po' una divagazione rispetto alla tua richiesta e all'uso di Lazreport ma volevo sottoporre una via alternativa che ultimamente stiamo utilizzando con soddisfazione per la generazione di pdf di moduli/formulari particolarmente contorti o graficamente elaborati.
Funziona bene in questi casi specifici quindi: pochi dati e moduli graficamente molto pesanti.
Il caso d'uso ideale è diverso da quello di un lazreport ed è un po' tricky come cosa ma ci ha fatto risparmiare un sacco di tempo nello sviluppo di modulistica tipo CMR (https://unece.org/fileadmin/DAM/cefact/cf_forums/2018_China/TransportAndLogistics_Bio-PPT/PPT_08_eCMR.pdf) e altro.
Su linux sia rsvg-convert sia poppler sono facilmente installabili.
Per Windows devi usare qualche clone, tipo https://github.com/miyako/console-rsvg-convert (https://github.com/miyako/console-rsvg-convert) e https://github.com/oschwartz10612/poppler-windows (https://github.com/oschwartz10612/poppler-windows)
Titolo: Re:Chiarimento su creazione report
Inserito da: nomorelogic - Gennaio 11, 2023, 12:12:31 pm
interessante come escamotage

riuscite anche a stamparci documenti con il corpo ad altezza dinamica (tipo fatture, liste di cose, ecc...)?
Titolo: Re:Chiarimento su creazione report
Inserito da: giacomarko - Gennaio 11, 2023, 02:53:42 pm
Grazie a tutti per il vostro supporto,

@tito_livio: alla fine sto usando LazReport, come dicevo non è male ed è tutto sommato abbastanza semplice, o almeno, lo è stato per me provenendo da RaveReport, che più o meno utilizza la stessa logica a bande,
attualmente l'unica cosa che non sono riuscito a "sistemare" è la generazione diretta del PDF, ma solo di poter scegliere se stampare (e va bene fin qui tutto ok) oppure in alternativa, salvare il documento in PDF.
Se mi puoi dire come sei riuscito a generare il PDF, mi farebbe comodo.

@Mimmo: inizialmente avevo pensato di implementare qualche cosa di simile a quanto hai proposto, poi ho abbandonato per due motivi;
il primo per la famosa regola "mai inventare l'acqua calda"  :)
il secondo per le righe della sezione dettagli, immaginiamo un documento con una sezione header dove dati e posizione sono fissi (pensiamo ai dati anagrafici di una azienda... e fin quì nessun problema) ma poi si ha una sezione detail, dove le righe non sono definite a priori e potrebbero facilmente superare la pagina (ritornando all'esempio, immaginiamo un elenco variabile di parti di ricambio) .. in breve ho pensato allo sbattimento di codificare tutte le possibili variazioni, e ho lasciato perdere.
Seguo una logica analoga alla tua invece per un'altra situazione, dove si devono stampare delle schede di controllo per ogni lavorazione, quindi campi e posizione sono fissi,  stampa risolta utilizzando il componente FPSpreadsheet (risolto grazie all'aiuto del forum), cioè scrivendo direttamente in un foglio di Excel e mandandolo in stampa con ShellExecute,

diciamo che attualmente, con LazReport non appena avrò risolto il discorso PDF, non c'è male ...

poi immagino che migliorare sia sempre possibile, ma bisogna vedere a quale prezzo, tanto per dire, per la versione a pagamento di Fast-Report per Lazarus single user, costo SOLO 399 €    :(

M

Titolo: Re:Chiarimento su creazione report
Inserito da: Mimmo - Gennaio 11, 2023, 03:53:38 pm
interessante come escamotage

riuscite anche a stamparci documenti con il corpo ad altezza dinamica (tipo fatture, liste di cose, ecc...)?

Per liste dinamiche non è sicuramente l'ideale. Si può ovviamente far tutto, alla fine il file svg è una gerarchia di oggetti grafici in un file di testo, però sarebbe piuttosto complicato...
Di solito, essendo che lo usiamo per simulare moduli che storicamente nascono come moduli cartacei (CMR, richieste di ogni genere verso enti pubblici, bolgette), se nel modulo originale c'è un campo multilinea prevediamo già nel template svg un numero di righe predefinito inserendo un certo numero di placeholder uno sotto l'altro (tipo {{riga_indirizzo_1}}, {{riga_indirizzo_2}}, ecc...) e poi valorizziamo quelle necessarie e mettiamo un blank in quelle che non servono, attraverso quel micro mustache.
Questo vuol dire che chi inietta i dati deve essere in parte conscio della rappresentazione che se ne darà.
In ogni caso è tutto molto meno oneroso che creare complicate procedure di disegno di pdf con fpPDF.
Insomma, ritorno al punto di partenza, funziona alla grande ma solo se si parte da un maledetto modulo cartaceo con tanti fronzoli grafici che deve essere scimmiottato in pdf.
Nel mondo ideale non dovrebbe neanche essercene la necessità ma la burocrazia è la burocrazia e la "digitalizzazione dei processi" si limita ancora spesso all'uso della rappresentazione pdf del vecchio pezzo di carta..
Ovviamente tutto è raffinabile e potrebbe essere reso più sofisticato ma, come scriveva Giacomarko, piuttosto che reinventare la ruota è meglio usare Lazreport.  :)
Titolo: Re:Chiarimento su creazione report
Inserito da: giacomarko - Gennaio 11, 2023, 04:12:06 pm
Grazie a San Google ho trovato chi aveva lo stesso problema e lo ha risolto, posto quì il codice della chaimata caso mai possa servire a qualcuno.

in pratica si parte dal solito LazReport fino ad arrivare alla preparazione del report,
per l'esportazione è necessario reperire l'unit lr_e_pdf.pas da inserire in uses, ecco il link all'unit:  https://github.com/alrieckert/lazarus/blob/master/components/lazreport/source/addons/pdfexport/lr_e_pdf.pas (https://github.com/alrieckert/lazarus/blob/master/components/lazreport/source/addons/pdfexport/lr_e_pdf.pas)

una volta preparato il report ed esportato su file (uso lo stesso nome per tutti, tanto sovrascrive),
si chiama ShellExecute per visualizzarlo, stamparlo o salvarlo da qualche parte (eventualmente lo si può eliminare all'uscita del programma se non si vuole lasciare documenti in giro)
Codice: [Seleziona]
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  e: integer;
begin
  try
    // define data filters ...
    SQLQueryMaster.Filter := 'ID='+IntToStr( SQLQueryMaster.FieldByName('ID').AsInteger);
    SQLQueryDetail1.Filter := 'IDCliente='+IntToStr( SQLQueryMaster.FieldByName('ID').AsInteger);
    SQLQueryMaster.Filtered := true;
    SQLQueryDetail1.Filtered := true;

    // load report's file from disk ...
    frReport1.LoadFromFile('RptAnagrafica.lrf');

    // try report preparation...
    if frReport1.PrepareReport then
    begin
      // if ok, create pdf file directly to program folder ...
      frReport1.ExportTo(TFrTNPDFExportFilter, 'temp.pdf');

      // call external reader (must be at least one installed ...
      e := ShellExecute( 0, 'open', PChar('temp.pdf'), nil, nil, 0);
      if (e < 33) then showMessage( 'Something went wrong ... error #  '+IntToStr( e)) else showMessage( 'Report done !');
    end;
  except on E: ESQLDatabaseError do
    ShowMessage( 'ERROR ON DB !');
  end;
  SQLQueryMaster.Filtered := false;
  SQLQueryDetail1.Filtered := false;
end;

semplice e veloce !

Titolo: Re:RISOLTO:Chiarimento su creazione report
Inserito da: tito_livio - Gennaio 11, 2023, 08:04:42 pm
Ciao @giacomarko,
vedo che sei riuscito a fare quello che ti eri proposto, però perchè chiami un programma esterno per aprire il pdf?
Potresti fare:

Codice: [Seleziona]
frReport1.ExportTo(TFrTNPDFExportFilter, 'temp.pdf');
frReport1.ShowReport;

Anche così puoi visualizzarlo, stamparlo e salvarlo in pdf da qualche parte
Titolo: Re:RISOLTO:Chiarimento su creazione report
Inserito da: tito_livio - Gennaio 11, 2023, 08:46:31 pm
Aggiungo per @giacomarko,
non c'è bisogno che scarichi lr_e_pdf.pas da internet e lo metti nella uses, c'è tutto nella cartella Lazarus.
Il procedimento per stampare le tue stampe in pdf è:

1)Installare Lazreport da C:\lazarus\components\lazreport\source.
2)Installare Powerpdf da Pacchetto | On line package manager
3)Installare PdfExport da C:\lazarus\components\lazreport\source\addons\pdfexport (questo pacchetto dipende da Powerpdf)
4)Spostare il componente TFrTFNPDFExport, ora disponibile fra i componenti Lazreport, nella form dove si trova già il componente TFrReport

Spero di essere stato chiaro e di aiuto,
ciao.
Titolo: Re:RISOLTO:Chiarimento su creazione report
Inserito da: giacomarko - Gennaio 11, 2023, 09:26:56 pm
Ok,

ho provato a fare quello che mi hai indicato, ma il l'unit lr_e_pdf.pas mi restituisce due errori di compilazione,
quando provo a compilare lazreportpdfexport.lpk,
eccoli:
1° lr_e_pdf.pas(539,19) Error: identifier idents no member "SubType"
2° lr_e_pdf.pas(540,26) Error: identifier idents no member "URI"

ora, dovrei capire il perchè, ma quello che ho scaricato, funziaperfettamente, quindi tutto a posto ;)

Grazie
Titolo: Re:RISOLTO:Chiarimento su creazione report
Inserito da: giacomarko - Gennaio 11, 2023, 09:33:55 pm
Ciao @giacomarko,
vedo che sei riuscito a fare quello che ti eri proposto, però perchè chiami un programma esterno per aprire il pdf?
Potresti fare:

Codice: [Seleziona]
frReport1.ExportTo(TFrTNPDFExportFilter, 'temp.pdf');
frReport1.ShowReport;

Anche così puoi visualizzarlo, stamparlo e salvarlo in pdf da qualche parte

Si hai ragione, diciamo che conoscendo l'ambiente o meglio le persone con cui ho a che fare, gente poco "pratica" di computer...
presentargli un file pdf, aperto nello stesso modo in cui aprono tutti i documenti che ricevono, li (loro) e mi (io) tranquillizza

m