.. _le_stampe/stampe_genropy/stampe_risorsa/tipi_stampa/multipagina_con_griglia/stampa_selection: 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 :ref:`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 :ref:`stampa da interfaccia` . 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 :ref:`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*. .. hint :: 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 :ref:`dati delle righe ` . .. hint:: **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 :ref:`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 :ref:`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. .. raw:: html
Per vedere nella pratica una stampa di sole righe si rimanda agli Esempi :ref:`Stampa righe 1: Fatture` e :ref:`Stampa righe 2: Vendite cliente`