Italian community of Lazarus and Free Pascal

Programmazione => Componenti Aggiuntivi => Topic aperto da: b.antonino - Marzo 17, 2022, 05:18:05 pm

Titolo: Stampa report in un Service/Daemon
Inserito da: b.antonino - Marzo 17, 2022, 05:18:05 pm
Come da oggetto devo sviluppare un Servizio che mi stampa dei report.

Pensavo si potesse fare con fpReport, ma quando includo la libreria fpreportprinterexport per generare la stampa mi da errori nella compilazione.

Pensate sia fattibile quello che voglio?

Grazie.

(Ho scritto anche daemon perchè devo fare anche un'altra applicazione uguale, ma sotto linux)
Titolo: Re:Stampa report in un Service/Daemon
Inserito da: DragoRosso - Marzo 17, 2022, 06:55:22 pm
Se parliamo di Windows, direi che per farlo ci sono da superare diversi scogli.

Uno dei principali è che i servizi di Windows, di qualsiasi natura, non possono gestire alcunchè di grafico / visuale (intendo oggetti tipo LCL o VCL in generale). I Servizi non hanno e non possono avere un "desktop" di riferimento e ci sono molte limitazioni per la loro programmazione.

Con i servizi ad esempio si possono invece usare i database.

Per fare un report ci si appoggia normalmente a delle canvas più o meno appartenenti al SO o a varie librerie. Questo in un servizio non è generalmente possibile.

Il servizio potrebbe effettuare la raccolta dati e prepararli, ma un programma esterno dovrebbe poi generare il report stesso.

Non è complessissimo fare i due programmi, ma è da vedere quali obiettivi hai.

Ciao
Titolo: Re:Stampa report in un Service/Daemon
Inserito da: b.antonino - Marzo 17, 2022, 07:38:25 pm
Cominciamo a parlare di Windows poi cercherò di replicare su Linux.

Devo far girare questo servizio/processo su windows server in logoff.

Poi su Linux su CentOS in run level 3, senza interfaccia grafica avviata.

Il punto è che quel programma esterno dovrebbe girare su una macchina che ha fatto logon e avere un processo/finestra sul desktop aperto, è quello che non avrei voluto.

Ciao
Titolo: Re:Stampa report in un Service/Daemon
Inserito da: DragoRosso - Marzo 17, 2022, 09:24:07 pm
Se è un Server, potrai proporre dei "servizi" in ascolto, ad esempio il tuo SERVIZIO potrebbe comunicare con l'esterno con un socket TCP, e scambiare i dati con chi fà il report tramite TCP (con dati tabellati, CSV, JSON, e chi più ne ha più ne metta  ;) ).

E' una delle soluzioni generiche. Questa và generalmente bene con tutti i SO, perchè un daemon, un servizio o qualcosa di simile si può fare con tutto. E ti lascia libero di gestire con un tool esterno il tuo report.

Ciao
Titolo: Re:Stampa report in un Service/Daemon
Inserito da: xinyiman - Marzo 18, 2022, 08:18:00 am
Con fpReport dovresti poterlo fare, perchè non ha dipendenze da interfaccia grafica (cosa che non si può certo dire di LazReport per esempio).
Titolo: Re:Stampa report in un Service/Daemon
Inserito da: DragoRosso - Marzo 18, 2022, 09:36:06 am
Eseguendo il testdemo di fpreport il progetto viene compilato ed eseguito.

Il programma una volta compilato deve essere fatto girare a riga di comando.

I risultati dei report vengono generati in file JSON.

Il test è   "D:\lazarus\fpc\3.2.2\source\packages\fcl-report\test\testfpreport.lpi"

(Dove D:\lazarus è la vs. cartella di installazione)

I risultati del test (i report) sono inseriti nella dierctory  "D:\lazarus\fpc\3.2.2\source\packages\fcl-report\test\rendered"

Come accennava @xinyiman apparentemente non sembra ci siano collegamenti a parti grafiche, quindi dovrebbe funzionare anche in un servizio.

Ciao
Titolo: Re:Stampa report in un Service/Daemon
Inserito da: b.antonino - Marzo 19, 2022, 06:11:13 pm
Ciao,

ho guardato quell'esempio, ma non ho capito molto su come integrarlo.

Il punto è che devo fare l'esportazione verso la stampante e in quell'esempio non vedo la libreria printer utilizzata.

Vengono generati dei file di report, ma questo riesco a farlo già con fpreport, mi manca la stampa su carta (stampante in rete)

Grazie
Titolo: Re:Stampa report in un Service/Daemon
Inserito da: DragoRosso - Marzo 20, 2022, 09:08:26 am
Secondo quanto riportato su questo topic di @xinyiman, sembrerebbe che il "print" sia stato implementato sulle LCL ...

http://www.lazaruspascal.it/index.php?topic=1927.0 (http://www.lazaruspascal.it/index.php?topic=1927.0)

Non ho mai usato una stampante da Lazarus ne da FPC, quindi su questo argomento non posso esserti d'aiuto.

AGGIORNAMENTO: sembra ulteriormente che le stampe pdf (se i tuoi report son in pdf) da Lazarus, consigliate anche da vecchi post sul forum inglese, siano fatte tramite Powerpdf (pack-powerpdf), che però ha come requisito la LCL. Occorre vedere se il componente core di stampa è o no dipendente da LCL (se è dipendente non può essere usato in un programma ch egira come servizio).

Ciao