Stampe di sole righe

Abbiamo parlato molto di modello testata/riga dicendo sempre che la stampa prevede di avere i dati di un record principale, ricevuto dall’oggetto batch action definito nella risorsa print .

Il comportamento usuale è che la risorsa print itera su una selezione di record la chiamata alla risorsa di stampa, ottenendo così in un solo colpo tante stampe, una per ciascun record. Così ottengo (unita in un solo PDF) una collezione di tanti documenti stampa, quanti erano i record della selezione corrente. Questo è ciò che avviene ad esempio se lanciamo la stampa delle fatture dalla pagine delle fatture, sulla selezione delle fatture odierne.

Tuttavia potrei voler definire una stampa con griglia, in cui i dati rappresentati in griglia siano direttamente le righe della selezione corrente del Tablehandler. Ad esempio la stampa dei un registro di telefonate ricevute nel giorno, in questo caso dalle selezione corrente ottengo un solo documento stampa.

Possono esistere altri casi in cui desidero stampare le righe della table, ottenute facendo una determinata query, impostata nella risorsa di stampa. Ad esempio, una stampa di crediti insoluti da sollecitare. In questo caso la selezione corrente viene totalmente ignorata ed ottengo comunque un solo documento stampa.

Stampe di sole righe paragonibili a quelle dei due ultimi esempi si potrebbero ottenere facilmente usando la MISSING LINK (le_stampe/stampe_interfaccia/modalita_view) stampa da griglia a video. Tuttavia in determinati casi può essere preferibile o necessario dover creare una risorsa specifica per rappresentare una stampa di sole righe.

Vediamo dunque come ottenere questo risultato.

Come definire stampe di sole righe

Bisogna definire ovviamente le risorse di stampa come risorse della table da rappresentare nella griglia.

E bisogna indicare come attributo della risorsa html_res , l’attributo row_table indicando il nome della tabella.

Quindi se ad esempio stiamo facendo una stampa di analisi vendite basata sulla table fatt.fattura_righe dovremo indicare

class Main(TableScriptToHtml):
   row_table = 'fatt.fattura_riga'

A questo punto dentro a self.record non ho più alcun record primario e considererò come comportamento di default che i dati delle righe griglia saranno presi dalla selezione_corrente.

Suggerimento

per selezione corrente si intendono le righe di una griglia a video selezionate dall’utente. Se nessuna riga è selezionata, si intendono tutte le righe presenti nella griglia a video. Di default, in caso di selezione corrente, le pkeys sono rese automaticamente disponibili in self.record['selectionPkeys']

Tuttavia, se invece ho previsto delle query fisse definite all’interno della mia risorsa di stampa e non volessi usare la selezione corrente è sufficiente che implementi gridQueryParameters o ridefinisca gridData come già spiegato nella sezione sui come ottenere i dati delle righe .

Suggerimento

ATTENZIONE! È importante tenere sempre presente da quale tabella stiamo lanciando la stampa e su quali righe. Se infatti la maintable e la row_table coincidono, il sistema darà la priorità ai record selezionati. Se quindi è stato ridefinito un metodo gridQueryParameters , i criteri della ricerca definiti verranno applicati unicamente alla selezione

Se invece la maintable e la row_table non coincidono, se è stato ridefinito un metodo gridQueryParameters verrà applicata per intero la query con le condizioni definite, ignorando la selezione.

Nel caso invece in cui la stampa possa rappresentare sia la selezione corrente che eventuali selezioni definite in stampa, posso usare un parametro che verrà richisto all’utente al momento dell’esecuzione. Per fare questo devo mettere tra i parametri specificati nel metodo table_script_parameters_pane, il parametro use_current_selection.

def table_script_parameters_pane(self, pane, **kwargs):
      fb = pane.formbuilder(cols=1,border_spacing='3px')
      fb.checkbox(value='^.use_current_selection',
              label='Selezione corrente')

In questo modo, se l’utente dichiara di voler usare la selezione corrente, la stampa sarà in grado di prendere i record selezionati e stampare direttamente quelli.


Per vedere nella pratica una stampa di sole righe si rimanda agli Esempi Stampa righe 1: Fatture e Stampa righe 2: Vendite cliente