Per facilitare l'immissione dei dati di lancio nei report o per riprendere sempre gli stessi valori ci sono in SAP vari strumenti.
Alcuni sono a livello di codice sorgente, pertanto di competenza dei programmatori, altri sono disponibili lato utente.
- La definizione di valori di default: a livello di codice e che valgono sempre quando viene richiamato un report.
- La compilazione dei valori nella sezione evento INITIALIZATION. Si tratta di una parte di codice che viene eseguita prima di mostrare la pagina iniziale all'utente, quindi si possono definire valori o popolare le SELECT-OPTIONS, esempio per la selezione di tipi di ordine di acquisto:
INITIALIZATION.
s_bsart-sign = 'I'.
s_bsart-option = 'EQ'.
s_bsart-low = 'NB'. APPEND s_bsart.
s_bsart-low = 'UB'. APPEND s_bsart.
- Varianti: SAP consente di salvare i parametri di lancio dei report in quelle che vengono chiamate varianti, l'utente può richiamare poi la variante e caricare nella pagina i parametri precedentemente salvati.
I primi 2 metodi sono a livello di codice ABAP e valgono per tutti gli utenti che lanciano il report, il terzo metodo è invece più flessibile, ma si deve sempre passare attraverso alcuni passaggi (aprire varianti, selezionare quella interessata, confermare) che possono risultare "noiosi".
Ho pensato quindi di personalizzare i report (chiaramente solo gli Z aggiungendo una riga di codice con una INCLUDE), in modo da poter gestire una variante con un nome particolare (che contiene il nome utente) e che viene automaticamente chiamata all'avvio del programma.
In questo modo ogni utente può salvarsi la sua variante personalizzata e, all'avvio del report, trovarsi già caricati i valori che lui desidera. Per esempio mi torna particolarmente utile in fase di test di un report, quando voglio lanciarlo sempre con la stessa selezione di dati iniziale.
La codifica che ho pensato è questa: la variante deve essere salvata con il nome V_<username>, il codice prevede inoltre, se non esiste la variante V_<username>, di provare a cercare la V_DEFAULT.
questo il codice sorgente da trattare poi come INCLUDE nel report:
*--------------------------------------------------------------------+
* Include : Z_INIT |
* Autore : Fabio Giacobbe - 21/03/2013 |
* Descrizione: Gestione lancio variante composta da V_+<username>, da|
* includere nella INITIALIZATION. |
*--------------------------------------------------------------------+
DATA: wafg_repid LIKE rsvar-report,
wafg_variant LIKE rsvar-variant.
* Carico la variante solo all'avvio del programma.
if sy-slset IS INITIAL.
wafg_repid = sy-repid.
concatenate 'V_' sy-uname into wafg_variant.
CALL FUNCTION 'RS_SUPPORT_SELECTIONS'
EXPORTING
report = wafg_repid
variant = wafg_variant
EXCEPTIONS
variant_not_existent = 01
variant_obsolete = 02.
* Se non esiste la variante provo a caricare V_DEFAULT.
if sy-subrc <> 0.
wafg_variant = 'V_DEFAULT'.
CALL FUNCTION 'RS_SUPPORT_SELECTIONS'
EXPORTING
report = wafg_repid
variant = wafg_variant
EXCEPTIONS
variant_not_existent = 01
variant_obsolete = 02.
endif.
endif.
Modifica da inserire nei report Z:
INITIALIZATION.
include z_init.
Nota:
- ho usato la definizione delle variabili con un prefisso wafg_ per evitare eventuali errori di dichiarazione duplicata di variabili.
- se il report prevede l'inizializzazione di alcuni campi questi devono essere posizionati prima della include, altrimenti vengono sovrascritti i parametri salvati nella variante. Esempio:
INITIALIZATION.
* Popolo la select-option della data con data finale=oggi.
clear s_BUDAT.
s_BUDAT-SIGN = 'I'.
s_BUDAT-OPTION = 'BT'.
s_BUDAT-HIGH = sy-datum.
append s_BUDAT.
include z_init.
Mi sembra veramente interessante
RispondiEliminaSarà un piacere contattarla personalmente per avere altre delucidazioni
Cordialmente
Ivan Bianco
sempre a sua disposizione, caro sig. Bianco.
Elimina...mi sarei però aspettato un commento magari sui crostoli!
a presto.