* * * *

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.
Aprile 20, 2024, 01:15:55 am

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

474 Visitatori, 0 Utenti

Autore Topic: lazreport - primi passi  (Letto 5742 volte)

petrusic

  • Hero Member
  • *****
  • Post: 589
  • Karma: +0/-0
Re:lazreport - primi passi
« Risposta #15 il: Marzo 25, 2022, 11:47:16 am »
@ tito_livio

Ho preparato quasi tutto l'occorrente per produrre il modulo PDF, ma ho difficoltà nell'inserire i nomi delle colonne nella finestra di disegno del freport, finestra che ho riportato come allegato per farmi capire.

Nel tuo esempio sono caricati. Io non riesco a farlo, perché, cliiccando all'interno del quadrato bianco e cominciando a scrivere si apre una finestrella dove riesco a vedere quello che scrivo. Però, dopo avere scritto la testata della 1a colonna (Es. Data), premendo |INVIO|, la finestrella scompare e quello che ho scritto non viene riportato nel quadrato grande, dove invece come pensavo che finisse.

Ed infatti il programma, al momento in cui dovrebbe compilare le celle della griglia finale, va in ERRORE, perchè non trova il nome campo che si aspetta. Ecco il codice scritto per la compilazione della griglia finale:
Codice: [Seleziona]
procedure TForm6.BpulStamPdfClick(Sender: TObject);
var i, nuRg: integer;
begin
  nuRg := GridStmp.RowCount;
  if MGridPdf1.Active then
    MGridPdf1.Close;
  MGridPdf1.Clear(False);
  MGridPdf1.Open;
  for i := 1 to nuRg - 1 do
  begin
    MGridPdf1.Append;
    MGridPdf1.Edit;
    MGridPdf1.FieldByName('PR.').Text := GridStmp.Cells[1, i];       // quando esegue questa riga va in Errore
    MGridPdf1.FieldByName('DATA').Text := GridStmp.Cells[2, i];
    MGridPdf1.FieldByName('DESCRIZIONE').Text := GridStmp.Cells[3, i];
    MGridPdf1.FieldByName('D A R E').Text := GridStmp.Cells[4, i];
    MGridPdf1.FieldByName('A V E R E').Text := GridStmp.Cells[5, i];
    MGridPdf1.FieldByName('S A L D O').Text := GridStmp.Cells[6, i];
  end;
  frreport1.LoadFromFile('pdfOrd.lrf');
  frreport1.ShowReport;
end;                                               

Non capisco. Mi manca ancora qualche componente?
« Ultima modifica: Marzo 25, 2022, 11:50:36 am da petrusic »
ciao ciao

tito_livio

  • Full Member
  • ***
  • Post: 146
  • Karma: +3/-0
Re:lazreport - primi passi
« Risposta #16 il: Marzo 25, 2022, 08:42:55 pm »
Ciao,
devi fare due cose:
1)Devi definire i campi MGridPdf1, campi che dovranno contenere i valori della StringGrid. Analogamente a quello che puoi vedere dalla prima immagine, devi agire sulla proprietà FieldDefs di MGridPdf1. Per ogni campo dovrai poi specificare il tipo (nel tuo caso stringa), e la lunghezza.
2)Per il problema del report, il tuo problema non mi è molto chiaro, provo a risolverlo.
Secondo me nel tuo report, dall'immagine che vedo, nella finestra di disegno del freport, mancano le band e i memo.
Prima di tutto devi mettere, nel report, le band e poi sopra le band devi mettere i memo. Come nella seconda immagine.
Nella band di tipo masterdata dovrai fare doppio click e selezionare la tabella MGridPdf1.
Poi facendo doppio click su ogni memo potrai inserire i campi di MGrdPdf1.
Stai attento che se il memo è troppo piccolo per la grandezza del font usato, non verrà visualizzato niente.
« Ultima modifica: Marzo 25, 2022, 08:44:33 pm da tito_livio »

petrusic

  • Hero Member
  • *****
  • Post: 589
  • Karma: +0/-0
Re:lazreport - primi passi
« Risposta #17 il: Marzo 26, 2022, 10:59:54 am »
Ciao,
devi fare due cose:
1)Devi definire i campi MGridPdf1, campi che dovranno contenere i valori della StringGrid. Analogamente a quello che puoi vedere dalla prima immagine, devi agire sulla proprietà FieldDefs di MGridPdf1. Per ogni campo dovrai poi specificare il tipo (nel tuo caso stringa), e la lunghezza.
Questo l'ho capito e l'ho fatto.  :)
Citazione da: tito_livio
2)Per il problema del report, il tuo problema non mi è molto chiaro, provo a risolverlo.
Secondo me nel tuo report, dall'immagine che vedo, nella finestra di disegno del freport, mancano le band e i memo.
Prima di tutto devi mettere, nel report, le band e poi sopra le band devi mettere i memo.
Stamattina sono riuscito a trovare nel wiki qualche indicazione per arrivare a creare band e memo, anche se non ho capito fino ad ora a che cosa servono e come usarle.
Ho cercato di crearle, come puoi vadere dalla finestra allegata, ma mi sono beccato il seguente errore:
Citazione
Unable to open dataset frDBDataSet1.
Mi aspettavo, secondo quello che ho letto qui (Report Designer) , che sarebbe bastato premere il tasto |OK| per proseguire senza problemi.
Suppongo, a questo punto, che avrei dovuto fare qualcos'altro prima.

ciao ciao

tito_livio

  • Full Member
  • ***
  • Post: 146
  • Karma: +3/-0
Re:lazreport - primi passi
« Risposta #18 il: Marzo 26, 2022, 11:27:19 pm »
Ciao,
oltre che per il Lazreport anche per altri tipi di strumenti per reportistica, le band costituiscono le parti di una stampa. Così ci può essere una band per l'intestazione, una per i dati ed una per i totali parziali o complessivi.
All'interno della band poi si devono mettere delle cose da stampare che sono i memo. I memo potranno contenere delle stringhe o dei riferimenti a dei campi di una tabella.
Questi due strumenti si devono prendere dalla parte sinistra del designer e posizionare sul foglio che rappresenta la stampa.
Penso però che ti puoi chiarire meglio le idee con un dei tanti video su youtube che parlano del lazreport.
Buon lavoro.

petrusic

  • Hero Member
  • *****
  • Post: 589
  • Karma: +0/-0
Re:lazreport - primi passi
« Risposta #19 il: Aprile 07, 2022, 06:50:17 pm »
oltre che per il Lazreport anche per altri tipi di strumenti per reportistica, le band costituiscono le parti di una stampa. Così ci può essere una band per l'intestazione, una per i dati ed una per i totali parziali o complessivi.
All'interno della band poi si devono mettere delle cose da stampare che sono i memo. I memo potranno contenere delle stringhe o dei riferimenti a dei campi di una tabella.
Questi due strumenti si devono prendere dalla parte sinistra del designer e posizionare sul foglio che rappresenta la stampa.
Si, ai due strumenti Includi Intestazioni e Includi Bande ci sono arrivato , seguendo anche più attentamente la guida del wiki, al paragrafo "Report Designer"

Dopo avere ripercorso, con la guida a portata di mano, il lavoro fatto ed avere aggiunto il file xxx.lrf ho avviato l'esecuzione del mio programma.

Riporto la parte del programma relativa all'evento BpulStamPdfClick
Codice: [Seleziona]
procedure TForm6.BpulStamPdfClick(Sender: TObject);
. . .
begin                                 
. . .
  for i := 1 to nuRg - 1 do
  begin
    MGridPdf1.Append;
    MGridPdf1.Edit;
    MGridPdf1.FieldByName('nuProg').Text := GridStmp.Cells[0, i];
    MGridPdf1.FieldByName('data').Text := GridStmp.Cells[1, i];
    MGridPdf1.FieldByName('descriz').Text := GridStmp.Cells[2, i];
    MGridPdf1.FieldByName('dare').Text := GridStmp.Cells[3, i];
    MGridPdf1.FieldByName('avere').Text := GridStmp.Cells[4, i];
    MGridPdf1.FieldByName('saldo').Text := GridStmp.Cells[5, i];
  end;
  frreport1.LoadFromFile('pdfOrd.lrf');
  frreport1.ShowReport;                                                         

Il ciclo for viene eseguito apparentemente bene. Alla fine però fallisce l'esecuzione dell'istruzione
Codice: [Seleziona]
frreport1.LoadFromFile('pdfOrd.lrf'); 
con questo tipo di Errore:
Citazione
Il progetto DomusRatio ha sollevato una eccezione di classe 'ElazReportException' con messaggio : Erroire while loading report: File not found (pdfOrd.lrf).
Non capisco l'errore perchè ho creato il file .lrf nella stessa directory del programma, così come riportato nella guida:
Codice: [Seleziona]
petrus@petrus-pc:/media/dirdati/dativari/lazarus_progetti/lazarus_progetti_miei/DomusRatio$ ls
Appunti_programma    frm2.pas     frmmain.pas
backup               frm3.lfm     griglia_e_matita.jpg
DomusRatioForm2.png  frm3.pas     grigliaMovvCto_2.png
DomusRatio.ico       frm4.lfm     grigliaMovvCto.png
DomusRatio.lpi       frm4.pas     grigliaMovv.png
DomusRatio.lpr       frm5.lfm     img1_domuRatio.png
DomusRatio.lps       frm5.pas     img_domuRatio2.png
DomusRatio.res       frm6.lfm     img_domuRatio.jpg
DomusRatio.tar.xz    frm6.pas     img_domuRatio.png
ErroreOpen_piancont  frm7.lfm   

 pdfOrd.lrf

frm2_20211026.pas    frm7.pas     Querymovimgg.ods
frm2.lfm             frmmain.lfm

Riporto anche in allegato la finestra del Report Designer dove ho lavorato oggi.

Citazione da: tito_livio
Penso però che ti puoi chiarire meglio le idee con un dei tanti video su youtube che parlano del lazreport.
Ho trovato solo guide in lingua inglese.  Non sono adatte alla mia quasi non conoscenza della lingua inglese.



ciao ciao

tito_livio

  • Full Member
  • ***
  • Post: 146
  • Karma: +3/-0
Re:lazreport - primi passi
« Risposta #20 il: Aprile 08, 2022, 01:00:40 pm »
Ciao,
dalla lista di file che hai postato mi sembra che tu abbia salvato il report col nome " pdfOrd.lrf" e non "pdfOrd".lrf". C'è uno spazio prima del nome del file.


petrusic

  • Hero Member
  • *****
  • Post: 589
  • Karma: +0/-0
Re:lazreport - primi passi
« Risposta #21 il: Aprile 08, 2022, 03:21:36 pm »
Ciao,
dalla lista di file che hai postato mi sembra che tu abbia salvato il report col nome " pdfOrd.lrf" e non "pdfOrd".lrf". C'è uno spazio prima del nome del file.
Non capisco da dove tu abbia dedotto quanto hai citato.

Comunque, visto che in esecuzione non viene trovato il nome del file, ho modificato l'istruzione
frreport1.LoadFromFile('pdfOrd.lrf');
impostando il percorso completo:
Codice: [Seleziona]
frreport1.LoadFromFile('/media/dirdati/dativari/lazarus_progetti/lazarus_progetti_miei/DomusRatio/pdfOrd.lrf');
ed ha funzionato, come puoi vedere dall'allegato.

Non capisco perchè sia successo ciò, nè come sia possibile che il programma d'esempio che mi hai passato funzioni ed il mio ha bisogno di tutto il percorso per trovare il file .lrf.

Nella pagina di anteprima, ho trovato il pulsantino per ottenere la stampa del documento, vi ho cliccato sopra e la stampa s'è avviata in maniera perfettamente trasparente.

Resterebbe quindi soltanto da capire se e come si può evitare di indicare tutto il percorso del file .lrf.


« Ultima modifica: Aprile 08, 2022, 03:29:02 pm da petrusic »
ciao ciao

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:lazreport - primi passi
« Risposta #22 il: Aprile 08, 2022, 04:39:27 pm »
Forse indicazione stupida, ma conoscendo Linux (sono sarcastico  ;) ) potrebbe essere che il file lo devi identificare come './pdfOrd.lrf'

In alternativa, la directory completa potresti ottenerla con:

Codice: [Seleziona]
var Percorso, FileReport: string;
Percorso := ExtractfilePath(Application.ExeName);
FileReport := Percorso + 'pdfOrd.lrf';

N.B.: non ricordo se in Linux c'è l'ExtractFilePath, però c'è nel forum una discussione (vado a memoria) su questo.

Ciao

« Ultima modifica: Aprile 08, 2022, 04:41:27 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:lazreport - primi passi
« Risposta #23 il: Aprile 08, 2022, 05:52:57 pm »
Non capisco perchè sia successo ciò, nè come sia possibile che il programma d'esempio che mi hai passato funzioni ed il mio ha bisogno di tutto il percorso per trovare il file .lrf.

ciao
giusto per curiosità, prima di fare il LoadFromFile, potresti visualizzare il risultato di:
Codice: [Seleziona]
ExpandFileName('pdfOrd.lrf');
Imagination is more important than knowledge (A.Einstein)

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:lazreport - primi passi
« Risposta #24 il: Aprile 08, 2022, 06:04:54 pm »
Non sempre la "directory corrente" è quella dove sta girando il programma.
Per andare sul sicuro, segui il consiglio di @DragoRosso, in quel modo, vai sempre sul sicuro ... anche in Windows !!!

Ciao, Mario

petrusic

  • Hero Member
  • *****
  • Post: 589
  • Karma: +0/-0
Re:lazreport - primi passi
« Risposta #25 il: Aprile 08, 2022, 11:13:17 pm »
giusto per curiosità, prima di fare il LoadFromFile, potresti visualizzare il risultato di:
Codice: [Seleziona]
ExpandFileName('pdfOrd.lrf');

Eccolo
Citazione
/media/dirdati/dativari/lazarus_progetti/lazarus_progetti_miei/bin/x86_64-linux/pdfOrd.lrf

Ma non è corretto (vedi allegato)

quello corretto è
Codice: [Seleziona]
petrus@petrus-pc:/media/dirdati/dativari/lazarus_progetti/lazarus_progetti_miei/DomusRatio$ ls
Appunti_programma    frm2.pas     frmmain.pas
backup               frm3.lfm     griglia_e_matita.jpg
DomusRatioForm2.png  frm3.pas     grigliaMovvCto_2.png
DomusRatio.ico       frm4.lfm     grigliaMovvCto.png
DomusRatio.lpi       frm4.pas     grigliaMovv.png
DomusRatio.lpr       frm5.lfm     img1_domuRatio.png
DomusRatio.lps       frm5.pas     img_domuRatio2.png
DomusRatio.res       frm6.lfm     img_domuRatio.jpg
DomusRatio.tar.xz    frm6.pas     img_domuRatio.png
ErroreOpen_piancont  frm7.lfm     pdfOrd.lrf
frm2_20211026.pas    frm7.pas     Querymovimgg.ods
frm2.lfm             frmmain.lfm

 ??? (**?**)
ciao ciao

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:lazreport - primi passi
« Risposta #26 il: Aprile 09, 2022, 11:26:13 am »
ExpandFileName non cerca ne testa il "nomfile". Ti propone solo dove dovrebbe "essere" se aperto da un SYSTEM UTILITY.

Ovviamente normalmente il file lo "vuole" nella directory di esecuzione, e quella directory verrà sempre indicata dall funzione (a meno che non si usino funzioni particolari di cambio directory di lavoro).

Consiglio spassionato, ma che indica anche una buona organizzazione della logica del programma:

- caricate DB, Report, INIFIles, XML in una sottodirectory della cartella di escuzione, ad esempio "Database" in modo da riferirla sempre in modo univoco (in relativo ./Database/........... o in assoluto come ho accennato in un precedente post).

N.B.: Io uso sempre la path assoluta, perchè in particolari condizioni (ad esempio con tecniche di impersonificazione di profili) può accadere che la directory corrente sia diversa da quella di esecuzione. Da quando usai tali tecniche, con l'"assoluta" non ho mai avuto problemi.

Ciao
« Ultima modifica: Aprile 09, 2022, 11:30:11 am da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

petrusic

  • Hero Member
  • *****
  • Post: 589
  • Karma: +0/-0
Re:lazreport - primi passi
« Risposta #27 il: Aprile 09, 2022, 11:41:27 am »
Forse indicazione stupida, ma conoscendo Linux (sono sarcastico  ;) ) potrebbe essere che il file lo devi identificare come './pdfOrd.lrf'

In alternativa, la directory completa potresti ottenerla con:
la directory completa potresti ottenerla con:
Codice: [Seleziona]
var Percorso, FileReport: string;
Percorso := ExtractfilePath(Application.ExeName);
FileReport := Percorso + 'pdfOrd.lrf';


1a prova:
Citazione
Codice: [Seleziona]
 percorso:= ExtractfilePath(Application.ExeName);
  fileReport:= percorso + 'pdfOrd.lrf';
  WriteLn('fileReport= |' + fileReport + '|');
  frreport1.LoadFromFile(fileReport);                     
fileReport= |/media/dirdati/dativari/lazarus_progetti/lazarus_progetti_miei/bin/x86_64-linux/pdfOrd.lrf|
L'istruzione do LoadFromFile da Errore d'eccezione di classe "Error While loading report: File not found(/media/dirdati/dativari/lazarus_progetti/lazarus_progetti_miei/bin/x86_64-linux/pdfOrd.lrf) , per le regioni che ho spiegate nel mio post precedente.

2a prova:
Codice: [Seleziona]
  frreport1.LoadFromFile('./pdfOrd.lrf');     

Anche quest'istruzione produce un Errore d'eccesione per file NON trovato.

Mi pare che'unica via sicura percorribile sia quella di indicare il percorso completo del file .lrf
ciao ciao

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:lazreport - primi passi
« Risposta #28 il: Aprile 09, 2022, 11:51:03 am »

Mi pare che'unica via sicura percorribile sia quella di indicare il percorso completo del file .lrf

Che però ti dovresti ricordare di modificare se metti l'eseguibile da un'altra parte.
Se invece fa quello che ti è stato suggerito ieri, qualche post più sopra, il tuo codice non avrà più problemi, indipendentemente da dove salvi l'eseguibile.

Ciao, Mario

petrusic

  • Hero Member
  • *****
  • Post: 589
  • Karma: +0/-0
Re:lazreport - primi passi
« Risposta #29 il: Aprile 09, 2022, 11:57:17 am »
Chiarito il concetto sull'individuazione del file .lrf tramite il percorso completo (o directory assoluta), mi resta ancora da capire il meccanismo di funzionamento  delle band e dei memo, cosa che non sono riuscito assolutamente a capire nemmeno entrando in profondità nel contenuto dell'esempio di programma che mi ha così gentilmente inviato tito_livio
dove, secondo me, avrei dovuto trovare gli oggetti per costruite l'intestazione del report, ma non ho trovato niente, . . . o non ho saputo leggere.
 ??? ::) :-\
ciao ciao

 

Recenti

How To

Utenti
  • Utenti in totale: 785
  • Latest: gmax
Stats
  • Post in totale: 18772
  • Topic in totale: 2233
  • Online Today: 492
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 474
Total: 474

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.