WikiUp

Generazione da script SCP_G53


In caso di necessità di ottenere report PDF di una certa complessità e qualità, con l'utilizzo di font proporzionali, si può ovviare all'utilizzo della tecnica della "generazione diretta", mediante la generazione utilizzando appositi script (SCP_G53). Tale script va richiamato/utilizzato tramite la /copy _h_B£H53G_n_

Generazione da script SCP_G53 semplici


Si carica uno script SCP_G53 "semplice" e lo si completa risolvendo le variabili in esso presente. Esso verrà automaticamente convertito in codice INV
  • Inizializzare l'XML
    • INZ.XML
  • Riempirlo con uno script semplice presente nel file SCP_G53, risolvendo le eventuali variabili presenti. Questo va fatto preoccupandosi di dichiarare nello script SCP_G53 che verrà utilizzato: coordinate assolute, salti pagina, etc.
    • INZ.SCP
  • Chiudere l'XML con eventuale Setup
    • CLO.XML
  • Far elaborare l'XML a Loocup

Generazione da script SCP_G53 di struttura


La definizione di uno script di struttura G53 permettere di delimitare e caratterizzare la pagina PDF con:
  • impostazioni di pagina (formato, destinazione, aprire il file, ecc.)
  • struttura di pagina
  • struttura Box (tabella)
    • riga
      • colonna
  • stile (da applicare alle righe)
  • tutti i TAG gestiti direttamente dal componente

Attraverso la definizione di stili (attributi grafici quali font, dimensione, colore, ecc), strutture di pagina e di riga, con colonne, alle quali si assegna unnome, applicando stili diversificati, si ottiene una definizione di un "layout logico".
Il programma applicativo, anziché emettere righe di spool senza formati, o righe di INV difficilmente posizionabili a coordinate cartesiane, può semplicemente chiamare la generazione di istruzioni INV secondo la struttura definita, chiamando l'apposita api £H53, passando i dati da riprodurre nel documento e il tipo di riga da riprodurre.

Esempio


Come pensare la pagina
Ipotizzando di voler ottenere le seguenti strutture di pagina:

Come pensare la struttura dello script
Definisco nello script le seguenti strutture:
  • Tipo PAG, nome "PAGINA"
    • Tipo RIG, nome "Riga tipo 1"
      • Tipo COL, nome "Colonna A", dimensione "33%", stile allineato sinistra
      • Tipo COL, nome "Colonna B", dimesione "33%", stile allineato destra
      • Tipo COL, nome "Colonna C", dimensione "34%", stile allineato destra
    • Tipo RIG, nome "Riga tipo 2"
      • Tipo COL, nome "Colonna A", dimensione "66%", stile allineato sinistra
      • Tipo COL, nome "Colonna B", dimensione "34%", stile allineato centro
Come scrivere lo script

Pagina di nome P01 (se presenti vengono caricati anche HEADER e FOOTER)

.::STR.PAG Nam="P01"
Box che identifica la testata (parola chiave HEADER)
.::STR.BOX Nam="BH1" Sx="03" Sy="04" La="91" Ha="03" Typ="HEADER"
Composto da una riga di 4 colonne (3 di testo fissato con delle variabili ed un'immagine)
. ::STR.RIG Nam="RH1" Num="01"
. ::STR.COL Nam="CH2" Dim="40" Sty="F01"
. ::BOX A01="H" A02="C" A03="-" A05="F" A08="O" Txt="&OG.D1" A11="C"
. ::STR.COL Nam="CH1" Dim="20"
. ::BOX A01="H" A02="C" A03="-" A05="F" A08="O" Txt="&OG.K1" A11="C"
. ::STR.COL Nam="CH4" Dim="30"
. ::BOX A01="H" A02="C" A03="-" A05="F" A08="O" Txt="Ambiente SVI" A11="C"
. ::STR.COL Nam="CH3" Dim="10"
. ::IMG File="VO;COD_SEL;LOG_000"

Definizione di un box
.::STR.BOX Nam="B01" Sx="04" Sy="13" La="91" Ha="75"
Definizione di una riga di nome RTXT di altezza 1/60 del box che la contiene
. ::STR.RIG Nam="RTXT" Num="60"
Definizione di una colonna larga il 18% della riga che la contiene
. ::STR.COL Nam="C21" Dim="18"
Definizione dell'elemento grafico contenuto nella colonna (nello specifico un BOX di testo). A differenza del Header il testo verrà passato tramite il campo Txt nell NEW.ROW
. ::BOX A01="B" A02="A" A07="-" A08="-" A11="C"
Definizione di una colonna larga il 2% della riga che la contiene
. ::STR.COL Nam="C25" Dim="2"
. ::BOX A07="-" A08="-" Ang=" "
. ::STR.COL Nam="C22" Dim="18"
. ::BOX A01="B" A02="A" A07="-" A08="-" A11="C"
. ::STR.COL Nam="C25" Dim="2"
. ::BOX A07="-" A08="-" Ang=" "
. ::STR.COL Nam="C23" Dim="18"
. ::BOX A01="B" A02="A" A07="-" A08="-" A11="C"
. ::STR.COL Nam="C25" Dim="2"
. ::BOX A07="-" A08="-" Ang=" "
. ::STR.COL Nam="C24" Dim="18"
. ::BOX A01="B" A02="A" A07="-" A08="-" A11="C"
. ::STR.COL Nam="C25" Dim="2"
. ::BOX A07="-" A08="-" Ang=" "
. ::STR.COL Nam="C25" Dim="18"
. ::BOX A01="B" A02="A" A07="-" A08="-" A11="C"
. ::STR.COL Nam="C25" Dim="2"
. ::BOX A07="-" A08="-" Ang=" "

Altra riga di nome RSEP. 1/80 di BOX B01 ed una sola colonna larga il 99%
.::STR.RIG Nam="RSEP" Num="80"
. ::STR.COL Nam="C21" Dim="99"
. ::BOX A07="-" A08="-" Ang=" "


Similmente al Header, definizione del Footer (parola chiave FOOTER)
. ::STR.BOX Nam="BF3" Sx="3" Sy="95" La="91" Ha="04" Typ="FOOTER"
. ::STR.RIG Nam="RF1" Num="01"
. ::STR.COL Nam="CF1" Dim="25"
. ::IMG File="VO;COD_SEL;LOG_000"
. ::STR.COL Nam="CF1" Dim="50"
. ::STR.COL Nam="CF2" Dim="25"
. ::BOX A01="H" A02="C" A03="-" A05="F" A07="B" A08="B" Txt="Pagina NumPag" A11="R"

Come pensare di richiamare le strutture
Dal programma applicativo, effettuo le seguenti chiamate all'api £H53:
  1. NEW/PAG P01
  2. NEW/RIG, di tipo "RTXT", testo "Bianchi||3,40||1.200||A||A||"
  3. NEW/RIG, di tipo "RSEP", testo ""
  4. NEW/RIG, di tipo "RTXT", testo "Rossi||4,18||3.200||B||B||"
ottenendo cosi la produzione tabelle con quantità variabile di righe, sensibilmente a quanto l'applicazione riscontra negli archivi.

Come utilizzare la /copy B£H53G

  • Inizializzare l'XML
    • INZ.XML
  • CICLO 1..n DI
    • Caricare uno o più script di strutture presenti nel file SCP_G53
      • INZ.SCP
    • Richiamare le strutture definite negli script caricati. Le coordinate, i salti pagina, etc. verranno calcolati automaticamente.
      • CICLO 1..m DI
        • NEW.PAG (definizione nuova pagina, va detto il nome della pagina da inizializzare. Inserisce eventuale header definito nella pagina)
        • NEW.BDY (inserisci salto pagina)
        • CICLO 1..t DI
    • NEW.RIG (Inserisci nuova riga, va detto il nome della riga e gli eventuali valori previsti dalla stessa, divisi da "pipe" secondo la struttura di colonne COL previste dalla riga)
      • CLO.PAG (chiudi pagina attualmente aperta. Inserisce eventuale footer definito nella pagina)
  • Chiudere l'XML con eventuale Setup
    • CLO.XML (chiude xml costruendo il Setup previsto per il componente G53)
  • Far elaborare l'XML a Loocup

Come richiamare la generazione da Loocup
Di seguito un esempio di come definire in una scheda un bottone che richiama un servizio che, utilizzando dei parametri passati e richiamando uno script SCP_G53 e la /copy B£H53G, genera l'XML che verrà elaborato dal componente Loocup G53
::D.OGG D(Stampa report H53) E(F(G53;XXXXXXXX;YYY) P(P1() C1() C2() C3()))dove nel metodo YYY del programma XXXXXXXX deve essere richiamata la H53 con le sue diverse funzioni e metodi come di seguito esemplificato:

- * Assegnazione Variabili £UIBDS - C EVAL £H53_FUN='ASS' - C EVAL £H53_MET='VAR_UIB' - C EVAL £H53_STRIN=£UIBDS - C EXSR £H53 - * Inizializzazione ---> HHHHHHHH è il nome dello script preparato nel SCP_G53 - C EVAL £H53_FUN='INZ' - C EVAL £H53_MET='PDF' - C EVAL £H53_STRIN='Nam="HHHHHHH"' - C EXSR £H53 - C EVAL £JAXCP=£H53_STROU - C EXSR £JAX_ADD - * Header ----> qui si definiscono le variabili $$A1, $$A2, $$B1..... - C EXSR RHEAD - - C EVAL £H53_FUN='NEW' - C EVAL £H53_MET='PAG' - C EVAL £H53_STRIN='Nam="P01" Var="&CO.A1() ' - C '&CO.A2('+%TRIM($$A2)+') ' - C '&CO.B1('+%TRIM($$B1)+') ' - C '&CO.B2('+%TRIM($$B2)+') ' - C '&CO.C1('+%TRIM($$C1)+') ' + '"' - C EXSR £H53 - C EVAL £JAXCP=£H53_STROU - C EVAL £JAXCP=£H53_STROU - C EXSR £JAX_ADD - * Corpo --------------> in questa routine ogni nuova riga da stampare viene composta come di seguito. NB: il carattere "|" quando la sezione richiamata è composta da più colonne permette di indicare il contenuto di ogni colonna - C EXSR RBODY - C EVAL £H53_FUN='NEW' - C EVAL £H53_MET='RIG' - C EVAL £H53_STRIN='Nam="RGRA" Txt="|' - C %TRIM(FUNTxt(3))+%TRIM(V§TCRM)+') ' - C 'P(K1('+%TRIM(V§ACO1)+') ' - C 'K2('+%TRIM(V§ACO2)+') ' - C 'K3('+%TRIM(V§ACO3)+'))|"' - C EXSR £H53 - C EVAL £JAXCP=£H53_STROU - C EXSR £JAX_ADD - * Chiusura - C EVAL £H53_FUN='CLO' - C EVAL £H53_MET='PDF' - C EXSR £H53 - C EVAL £JAXCP=£H53_STROU - C EXSR £JAX_ADD



L'esecuzione della funzione produce un PDF: il percorso, il fatto che si apra o meno, etc. sono impostazioni relative al setup del componente, quindi o gestite con la specifica STR.SET dello script o tramite il Setup costruito dal servizio.

Generazione elementi di PDF da funzioni Loocup

Matrici

Utilizzando loocup come generatore del PDF è possibile passare nello script funzioni che producono XML di matrice perchè vengano generate tabelle, sia a dimensione definita, sia a lunghezza indefinita. Ad esempio utilizzando una funzione F(EXB;B£SER_46;GEN.COM) 1(J1;GRA;EXB) 2(MB;SCP_SET;SIM_SER_46) 3(;;A.008) P(ColNum(40) NumRow(10)) come testo di una BOX

NOTA BENE: al momento il richiamo di queste funzioni comporta il recepimento di tutti i setup relativi ai dati (colonne aggiuntive, colonne nascoste ecc.), ma non quelli relativi alla rappresentazione degli stessi (raggruppamenti, ordinamenti ecc.)

Grafici

In alternativa possono essere generati grafici di funzione passando la corrispettiva funzione ad un IMG. Ad esempio F(EXA;B£SER_43B;TST.IMG) 1(J1;GRA;EXA) 2(TA;V§R;) P(Typ(PIE))

Immagini di oggetto

E' anche possibile passare ad un tag IMG la variabile che identifica l'immagine di un determinato oggetto Smeup tramite la variabile IMG:TIPO;PARAMETRO:CODICE

Generazione da file di spool

Molto frequentemente programmi applicativi preesistenti o comunemente in uso, che prevedono output su file di spool, debbono essere implementati per prevedere l'output su file PDF (in aggiunta allo spool o talvolta in sostituzione), quindi ci si trova in questi casi a dover "riconvertire" l'output su stampa, così come è, su un file pdf, solitamente anche sovrapponendosi ad un modulo elettronico (esempi tipici ddt, fattura, conferma ordine, report specifici, ecc.)

In questi casi è opportuno generare in modo tradizionale lo spool, mantenendo quindi la funzionalità, e non appena completato lanciare la conversione dello spool in pdf mediante la funzioneSPLPDFdell'api £G53 (per un approfondimento della funzione si rimanda alla documentazione specifica delle funzioni dell'api £G53).

I vantaggi di questa funzione sono un intervento minimale al programma applicativo che prevede già l'output su spool, mentre gli svantaggi sono che la formattazione grafica dell'output risulta di qualità inferiore, dovendo necessariamente in questo caso scegliere un fontnon proporzionaleper mantenere l'allineamento delle stringhe posizionate così come lo erano sullo spool.

Generazione diretta

Nel caso un programma applicativo debba prevedere l'output solo in PDF, è possibile generare direttamente lo script INV scrivendo direttamente le istruzioni secondo la sintassi prevista, che verranno poi elaborate per la produzione del file PDF.

Questa tecnica può essere applicata sia per la produzione di PDF con sola parte testuale, che con elementi grafici tipo box, line e barcode, che con overlay di moduli elettronici. I vantaggi sono la completa libertà di utilizzo di tutti i TAG disponibili ed il libero posizionamento di tutto il contenuto nella pagina del documento, metre gli svantaggi sono nella difficoltà di posizionamento degli elementi all'interno della pagina, che debbono essere obbligatoriamente effettuati mediante coordinate cartesiane x,y.

Per un approfondimento sulle istruzioni (TAG) utilizzabili nello script INV ed i relativi attributi e parametri riferirsi alla sezione di documentazione sui TAG.

Add new attachment

Only authorized users are allowed to upload new attachments.
«