Stampare un rapporto (o report) con un campo condizionato

Discussioni sulle caratteristiche di database
Rispondi
Avatar utente
markinson
Messaggi: 121
Iscritto il: mercoledì 24 giugno 2020, 15:18

Stampare un rapporto (o report) con un campo condizionato

Messaggio da markinson »

Salve a tutti! :)

Eccomi di nuovo qui, sperando di trovare, come sempre accaduto, aiuto in qualche anima buona e paziente.

La questione attiene ai "rapporti" (o report, che dir si voglia). Ho creato con Apache OpenOffice, munito della vecchia (ma ancora funzionante) estensione Oracle Report Builder, un rapporto.
La mia necessità è quella di porre una condizione in un determinato campo e, se la condizione si avvera, di visualizzare un certo valore.
Mi aiuto con una screenshot.
Report_Condizione.jpg
Ho caricato anche la base di dati di esempio da me utilizzata.

Francamente non è importante, come nell'esempio riportato, che la condizione sia proprio sulla data. Voglio dire potrebbe essere posta anche su un campo testo che a un determinato valore oppure se nullo, restituisca una certa dicitura.

Ho cercato e tentato e, dopo aver letto una serie di discussioni (in particolare QUI e QUI), credo di aver capito che tutto gravita intorno alla funzione (comando?) CASEWHEN.

Avrei dovuto magari (senz'altro) approfondire nella Documentazione HSQL 1.8, ma ... non sono riuscito ... ammetto che è più facile chiedere direttamente. :oops:

Cercherò nel frattempo di fare altri tentativi, ma se qualcuno potesse venire in soccorso ...

Grazie in anticipo per l'attenzione!

---EDIT---
Una piccola aggiunta/precisazione: il report da me creato si appoggia su una ricerca/query che cerca/chiede l'ipotetica classifica di un fascicolo. E' possibile inserire, come classifica, 003 oppure 004 (o anche altre classifiche presenti nella tabella originaria, per chi volesse cercare).
Allegati
Istruttoria_005-002_Rapporti-report_Condizione campo report.odb
(105.49 KiB) Scaricato 114 volte
OpenOffice 4.1.15 / LibreOffice 7 still - Windows 10 Pro x64
"Facesti come quei che va di notte, che porta il lume dietro e sé non giova, ma dopo sé fa le persone dotte"
Dante (Purgatorio, Canto XXII)
Avatar utente
markinson
Messaggi: 121
Iscritto il: mercoledì 24 giugno 2020, 15:18

Re: Stampare un rapporto (o report) con un campo condizionat

Messaggio da markinson »

Forse mi sto avvicinando gradualmente alla soluzione. Forse, ripeto.
Condivido gli sviluppi.

Ho cercato di lavorare direttamente alla radice, ossia sulla ricerca/query per trovare la corretta sintassi del comando.

Innanzitutto ho compreso che il comando / la funzione deve essere impartita a livello della riga "Campo", no quindi in "Criteri" o altra posizione.

Poi mi sto trovando meglio con CASE WHEN piuttosto che con CASEWHEN.

Con un codice del tipo:

Codice: Seleziona tutto

CASE WHEN "StatoProcedimento" = 'improcedibile' THEN 'Yes' ELSE 'No' END
la ricerca/query viene lavorata e il risultato è restituito.

Sono passato successivamente al rapporto (report) e, visualizzata la struttura dello stesso, ho creato un "Campo testo" con dentro la seguente stringa:

Codice: Seleziona tutto

CASE WHEN "StatoProcedimento" = 'improcedibile' THEN 'Yes' ELSE 'No' END
Il report lavora l'istruzione e l'informazione è restituita.
Adesso passo a vedere come si comporta con i campi data ...
OpenOffice 4.1.15 / LibreOffice 7 still - Windows 10 Pro x64
"Facesti come quei che va di notte, che porta il lume dietro e sé non giova, ma dopo sé fa le persone dotte"
Dante (Purgatorio, Canto XXII)
Avatar utente
markinson
Messaggi: 121
Iscritto il: mercoledì 24 giugno 2020, 15:18

Re: Stampare un rapporto (o report) con un campo condizionat

Messaggio da markinson »

Ulteriore aggiornamento ... sperando che qualcuno poi venga in mio aiuto! :shock:

Sono riuscito a far lavorare anche il campo data, in questo modo dal campo all'interno della struttura del report:

Codice: Seleziona tutto

CASE WHEN "DataScadenzaFascicolo" IS NOT NULL THEN 'Yes' ELSE 'No' END
Passando invece dalla (GUI della) ricerca/query mi sono accorto che bisogna dare:

Codice: Seleziona tutto

CASE WHEN "DataScadenzaFascicolo" IS NOT EMPTY THEN 'Yes' ELSE 'No' END
Aprendo la ricerca/query in SQL, insomma, EMPTY viene trasformato in NULL.

Adesso ho questi altri due problemi:
  • come gestire i campi booleani? cioè qual è la sintassi corretta per far leggere VERO/TRUE/1 e FALSO/FALSE/0 e valore nullo?
  • devo far lavorare questo comando: "se la data scadenza fascicolo è nulla/vuota, allora spazio vuoto, altrimenti scrivi proprio la data scadenza fascicolo" (non riesco a far funzionare la condizione altrimenti ...).
Chiedo scusa, ma sono estremamente stanco. Spero solo di essermi spiegato.
OpenOffice 4.1.15 / LibreOffice 7 still - Windows 10 Pro x64
"Facesti come quei che va di notte, che porta il lume dietro e sé non giova, ma dopo sé fa le persone dotte"
Dante (Purgatorio, Canto XXII)
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8785
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Stampare un rapporto (o report) con un campo condizionat

Messaggio da charlie »

Ciao, risposta "al volo".
Se l'espressione condizionale viene impostata sul campo della query che sta alla base del report, in quest'ultimo non c'è da impostare proprio niente.
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Avatar utente
markinson
Messaggi: 121
Iscritto il: mercoledì 24 giugno 2020, 15:18

Re: Stampare un rapporto (o report) con un campo condizionat

Messaggio da markinson »

charlie ha scritto:Ciao, risposta "al volo".
Se l'espressione condizionale viene impostata sul campo della query che sta alla base del report, in quest'ultimo non c'è da impostare proprio niente.
Infatti credo di aver capito che posso/debbo agire o nell'una o nell'altro, in alternativa; altrimenti sarebbe inutile e sovrabbondante.

Il problema è che, per esempio, non riesco a far passare questa istruzione:

Codice: Seleziona tutto

CASE WHEN "DataScadenzaFascicolo" IS EMPTY THEN 'vuoto' "DataScadenzaFascicolo" END
Il mio obiettivo, in parole povere, è questo: se la data è vuota, allora deve inserire la parola "vuoto" oppure esattamente uno spazio vuoto (immagino con l''utilizzo di apici del tipo: ' '), altrimenti verrà restituita proprio quella data.

Lavorando a livello di query la condizione viene accettata (cioè non ottengo errori all'atto del salvataggio della stessa); tuttavia lanciando la ricerca si produce un errore che non sono in grado di decifrare e la data, ovviamente, non è restituita.

Spero di essermi spiegato e grazie del tuo tempo!
OpenOffice 4.1.15 / LibreOffice 7 still - Windows 10 Pro x64
"Facesti come quei che va di notte, che porta il lume dietro e sé non giova, ma dopo sé fa le persone dotte"
Dante (Purgatorio, Canto XXII)
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8785
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Stampare un rapporto (o report) con un campo condizionat

Messaggio da charlie »

Nelle funzioni SQL tutti i parametri devono essere dello stesso tipo. Non ci possono essere date con stringhe o numeri.
In alternativa bisogna ricorrere alle funzioni di conversione.
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Avatar utente
markinson
Messaggi: 121
Iscritto il: mercoledì 24 giugno 2020, 15:18

Re: Stampare un rapporto (o report) con un campo condizionat

Messaggio da markinson »

charlie ha scritto:Nelle funzioni SQL tutti i parametri devono essere dello stesso tipo. Non ci possono essere date con stringhe o numeri.
Ok! Prima lezione/spiegazione acquisita: non posso mescolare nelle funzioni dati con formato diverso. Mi sembra che, secoli - ahimè - or sono, programmando in Dbase III Plus, si imponeva la stessa prescrizione (ricordo le mitiche DTOC() e CTOD() ... se la memoria non mi tradisce).
charlie ha scritto:In alternativa bisogna ricorrere alle funzioni di conversione.
D'accordo.
Mi sono messo allora alla ricerca, a questo vuoi spingermi, giusto? Devo arrivarci da solo e piano piano. Hai ragione: per imparare al meglio bisogna sbagliare, correggere, riprovare e tentare, poi si capisce per bene.

Quindi ho cercato ... sempre partendo dall'assunto che lavorerò a livello di query/ricerca e, semmai, andrò a vedere il codice SQL della query/ricerca una volta passata correttamente la funzione, così da inserire il codice medesimo direttamente nel campo del report. Ma questo verrà dopo.

Dicevo, spero vorrai seguirmi nel ragionamento e nella ricerca, mi sono messo alla caccia della funzione per convertire un campo in formato testo.
Ho incontrato CONVERT(), ma non sono riuscito a farlo lavorare sulla query: la funzione era accettata nel campo, però all'atto di lanciare l'interrogazione ricevevo un errore, per me non decifrabile.

Ho cercato ancora e, dopo ulteriori tentativi (passando anche per CAST()), sono arrivato da QUI a: TO_CHAR

Sto per giungere alla conclusione, eh.

Vado quindi nella mia ricerca/query e, con trepidazione, digito:

Codice: Seleziona tutto

CASE WHEN "DataScadenzaFascicolo" IS EMPTY THEN 'data non precisata' ELSE TO_CHAR( "DataScadenzaFascicolo", 'DD-MM-YYYY' ) END
oppure

Codice: Seleziona tutto

CASE WHEN "DataScadenzaFascicolo" IS EMPTY THEN 'data non precisata' ELSE TO_CHAR( "DataScadenzaFascicolo", 'DD/MM/YYYY' ) END
Il nocciolo è qui: TO_CHAR( "DataScadenzaFascicolo", 'DD/MM/YYYY' )

Funziona!!! :D :bravo:

Grazie, charlie, per avermi instradato e indotto a cercare e provare!

Ma le mie peripezie non sono finite ... adesso devo lavorare con un campo numerico e fare la stessa cosa, ossia porre la stessa questione: se il campo numerico è vuoto, allora scriverò "nessun importo fornito", altrimenti "restituire l'importo".

Vediamo se trovo il modo ...

Vado bene per ora?

Detto tra noi, quello che mi duole è che non capisco assolutamente niente di macro e per trovare le funzioni da sfruttare non so bene cercare "dentro" la documentazione da te indicata. Sono ancora troppo troppo imbranato e non so se acquisirò mai quella minima sicurezza e preparazione necessarie ... peccato. :(

Vorrei tanto tornare a dedicarmi allo studio, ma ... sono dirottato altrove ... mah. :?
OpenOffice 4.1.15 / LibreOffice 7 still - Windows 10 Pro x64
"Facesti come quei che va di notte, che porta il lume dietro e sé non giova, ma dopo sé fa le persone dotte"
Dante (Purgatorio, Canto XXII)
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8785
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Stampare un rapporto (o report) con un campo condizionat

Messaggio da charlie »

markinson ha scritto:Vado bene per ora?
benissimo direi :super: .
markinson ha scritto:quello che mi duole è che non capisco assolutamente niente di macro
per le operazioni "normali" non sono indispensabili, ma talvolta aiutano.
markinson ha scritto:non so bene cercare "dentro" la documentazione da te indicata.
non è una documentazione molto "friendly" e quindi non aiuta.
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
marcocurreli
Messaggi: 104
Iscritto il: sabato 10 aprile 2021, 13:28

Re: Stampare un rapporto (o report) con un campo condizionat

Messaggio da marcocurreli »

L'ultima versione dell'hsqldb è questa (2.6.1):
http://www.hsqldb.org/doc/guide/index.html
LibreOffice 7.3.0 -- Linux 5.16.4-arch
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8785
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Stampare un rapporto (o report) con un campo condizionat

Messaggio da charlie »

marcocurreli ha scritto:L'ultima versione dell'hsqldb è questa (2.6.1):
http://www.hsqldb.org/doc/guide/index.html
Sì, ma la versione incorporata in Base è ancora la 1.8.
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
marcocurreli
Messaggi: 104
Iscritto il: sabato 10 aprile 2021, 13:28

Re: Stampare un rapporto (o report) con un campo condizionat

Messaggio da marcocurreli »

Io ho libreoffice 7.2. Come faccio a sapere la versione di hsqldb incorporato?
Trovato: https://ask.libreoffice.org/t/how-do-i- ... on/23024/2

versione 1.8 anche nella 7.2
LibreOffice 7.3.0 -- Linux 5.16.4-arch
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8785
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Stampare un rapporto (o report) con un campo condizionat

Messaggio da charlie »

  • Conosco Base da 10 anni e la versione di HSQLDB non è mai cambiata né in OO né in LO.
  • Qualche versione fa LO aveva introdotto Firebird come motore predefinito, conservando comunque anche l'opzione HSQLDB. Vedo che adesso è sparito, segno che gli sviluppatori hanno capito di essere caduti dalla padella alla brace.
  • Base può collegarsi a versioni più recenti di HSQLDB tramite i connettori, oppure ricorrendo allo splitDataBase viewtopic.php?f=13&t=7244&p=38278&hilit ... rlo#p38222
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
marcocurreli
Messaggi: 104
Iscritto il: sabato 10 aprile 2021, 13:28

Re: Stampare un rapporto (o report) con un campo condizionat

Messaggio da marcocurreli »

Grazie charlie. L'ho messo nei preferiti. La funzione che mi mancava per il mio database era datediff.
LibreOffice 7.3.0 -- Linux 5.16.4-arch
Rispondi