Es gab bei uns eine Anfrage, ob die Daten, die aus einem bestehenden Report kommen und nach Excel transferiert werden, damit noch einige zusätzliche Berechnungen gemacht werden, nicht direkt in unserem SAP-System erstellt werden können.
Nach Analyse des Reports, der die Daten bereitstellt, habe ich festgestellt, dass die Datenbeschaffung nicht trivial ist. Deswegen habe ich einen Weg gesucht, wie ich die Ergebnismenge des ALV-Grids in mein eigenes Programm "umlenken" kann. Dabei habe ich diesen interessanten Artikel im SDN gefunden, der beschreibt, wie man aus jedem(!) Report, der ALV als Ausgabemedium nutzt, generieren kann.
Relativ einfach formuliert wird ein Report im Hintergrund ausgeführt, die ALV-Ausgabe aber "dunkel" geschaltet. Das Ergebnis der Datenselektion, das eigentlich im Ursprungsreport per ALV ausgegeben worden wäre, wird über eine Klasse referenziert und an den eigenen Report übergeben. Und da sind sie, die Daten, in einer internen Tabelle....
Weiter vorteilhaft ist natürlich, dass so modifikationsfrei und ohne "Nachdenken" über die Datenherkunft die Daten einfach weiterverarbeitet werden können. Zudem werden im vorgelagerten Report durchgeführte Korrekturen direkt "durchgereicht".
Für mich offen ist nun noch, wie ich die PARAMETERS und SELECT-OPTIONS des Reports, der per SUBMIT die Daten holt, versorge. Bisher habe ich lediglich erfolgreich umgesetzt, die Werte zu doppeln. Dieses ist aber ein anderes Problem!
[codesyntax lang="abap"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
REPORT zlcstestalv. TABLES: bseg. FIELD-SYMBOLS: <lt_pay_data> TYPE ANY TABLE. DATA: lr_pay_data TYPE REF TO data. DATA: lt_bseg TYPE TABLE OF bseg, lv_bseg TYPE bseg. * Übergabedatei für SUBMIT DATA: lt_selscreen TYPE TABLE OF rsparams, lv_selscreen TYPE rsparams. * Parameter und SELECT-OPTIONS müssen vom Report, der per SUBMIT aufgerufen wird, gespiegelt werden SELECT-OPTIONS: so_bukrs FOR bseg-bukrs. PARAMETERS: pa_buzei TYPE bseg-buzei. START-OF-SELECTION. * schaufelt die SELECT-OPTIONS und PARAMETERS in die RSPARMS für den SUBMIT CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS' EXPORTING curr_report = sy-repid * IMPORTING * SP = TABLES selection_table = lt_selscreen * SELECTION_TABLE_255 = * EXCEPTIONS * NOT_FOUND = 1 * NO_REPORT = 2 * OTHERS = 3 . * ALV-Verarbeitung des SUBMIT-Reports auf "unsichtbar" und Zeiger auf Daten.... cl_salv_bs_runtime_info=>set( EXPORTING display = abap_false metadata = abap_false data = abap_true ). * Report holt nun die Daten SUBMIT zlcs_sako_kredpos WITH SELECTION-TABLE lt_selscreen AND RETURN . TRY . * Daten werden an Variable übergeben cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = lr_pay_data ). ASSIGN lr_pay_data->* TO <lt_pay_data>. CATCH cx_salv_bs_sc_runtime_info. MESSAGE 'Kann keine ALV-Daten packen' TYPE 'E'. ENDTRY. * und den ALV wieder freigeben cl_salv_bs_runtime_info=>clear_all( ). lt_bseg = <lt_pay_data>. LOOP AT lt_bseg INTO lv_bseg. WRITE:/ lv_bseg-bukrs. ENDLOOP. |
[/codesyntax]