* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Maggio 04, 2024, 03:09:37 pm

Inserisci il nome utente, la password e la durata della sessione.

484 Visitatori, 0 Utenti

Autore Topic: RISOLTO:Chiarimento su creazione report  (Letto 1434 volte)

giacomarko

  • Full Member
  • ***
  • Post: 105
  • Karma: +6/-0
RISOLTO:Chiarimento su creazione report
« il: 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

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

« Ultima modifica: Gennaio 11, 2023, 04:13:14 pm da giacomarko »
SO: W11
Release Lazarus: 3.0 del 2023.12.17 win32/win64
Versione FPC: 3.2.2
DB: MySQL 5.0, MSAccess

Avogadro

  • Full Member
  • ***
  • Post: 217
  • Karma: +0/-0
Re:Chiarimento su creazione report
« Risposta #1 il: 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


« Ultima modifica: Gennaio 07, 2023, 04:47:58 am da Avogadro »

giacomarko

  • Full Member
  • ***
  • Post: 105
  • Karma: +6/-0
Re:Chiarimento su creazione report
« Risposta #2 il: 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
SO: W11
Release Lazarus: 3.0 del 2023.12.17 win32/win64
Versione FPC: 3.2.2
DB: MySQL 5.0, MSAccess

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1268
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Chiarimento su creazione report
« Risposta #3 il: 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
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

giacomarko

  • Full Member
  • ***
  • Post: 105
  • Karma: +6/-0
Re:Chiarimento su creazione report
« Risposta #4 il: 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
SO: W11
Release Lazarus: 3.0 del 2023.12.17 win32/win64
Versione FPC: 3.2.2
DB: MySQL 5.0, MSAccess

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1268
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Chiarimento su creazione report
« Risposta #5 il: 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.

« Ultima modifica: Gennaio 07, 2023, 05:04:43 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Chiarimento su creazione report
« Risposta #6 il: 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.
Ieri è passato, domani è futuro, oggi è un dono...

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2873
  • Karma: +20/-4
Re:Chiarimento su creazione report
« Risposta #7 il: 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
Imagination is more important than knowledge (A.Einstein)

tito_livio

  • Full Member
  • ***
  • Post: 151
  • Karma: +3/-0
Re:Chiarimento su creazione report
« Risposta #8 il: 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.
« Ultima modifica: Gennaio 09, 2023, 12:38:11 am da tito_livio »

Mimmo

  • Jr. Member
  • **
  • Post: 76
  • Karma: +3/-0
Re:Chiarimento su creazione report
« Risposta #9 il: 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.
  • Innanzitutto creiamo un svg per ogni pagina del formulario/modulo mettendo del testo a mo' di placeholder nei posti dove dobbiamo inserire le informazioni, tipo '{{dato1}}', '{{dato2}}', ecc.... I vari svg faranno da template delle pagine e andranno distribuiti insieme all'applicativo.
  • In fase di esecuzione, con un algoritmo fatto in casa simile ad un mustache dei poveracci, sostituiamo i dati dentro ogni template delle pagine e li risalviamo come svg (li puoi trattare come dei file di testo).
  • Successivamente convertiamo gli svg a pdf con un tool da command line che si chiama rsvg-convert ottenendo un pdf per ogni pagina
  • Poi con poppler facciamo il merge delle singole pagine in un unico pdf
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 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 e https://github.com/oschwartz10612/poppler-windows

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2873
  • Karma: +20/-4
Re:Chiarimento su creazione report
« Risposta #10 il: 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...)?
Imagination is more important than knowledge (A.Einstein)

giacomarko

  • Full Member
  • ***
  • Post: 105
  • Karma: +6/-0
Re:Chiarimento su creazione report
« Risposta #11 il: 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

SO: W11
Release Lazarus: 3.0 del 2023.12.17 win32/win64
Versione FPC: 3.2.2
DB: MySQL 5.0, MSAccess

Mimmo

  • Jr. Member
  • **
  • Post: 76
  • Karma: +3/-0
Re:Chiarimento su creazione report
« Risposta #12 il: 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.  :)
« Ultima modifica: Gennaio 11, 2023, 03:58:40 pm da Mimmo »

giacomarko

  • Full Member
  • ***
  • Post: 105
  • Karma: +6/-0
Re:Chiarimento su creazione report
« Risposta #13 il: 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

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 !

SO: W11
Release Lazarus: 3.0 del 2023.12.17 win32/win64
Versione FPC: 3.2.2
DB: MySQL 5.0, MSAccess

tito_livio

  • Full Member
  • ***
  • Post: 151
  • Karma: +3/-0
Re:RISOLTO:Chiarimento su creazione report
« Risposta #14 il: 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
« Ultima modifica: Gennaio 11, 2023, 08:48:48 pm da tito_livio »

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18796
  • Topic in totale: 2237
  • Online Today: 538
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 484
Total: 484

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.