Hier ist für Analysezwecke die Bewegungen eines Materials aufgeschlüsselt.
Dies ist notwendig, will man ein Material analysieren, die Einstellungen des Materials verändern etc.
REPORT zmm_bew1.
*Programm zur raschen Auswertung der Bewegungen
*Anzeige der Bewegungen und Summen
*Filtern der Bewegungen
*Anzeige von Zusatzinfo zu Bewegungen
*
"Version 003 HST 20190712
*Beleganzeige per Doppelklick/Link
*Sonderbestandskennzeichen eingefügt.
*Version 002 HST 20190301
*Materialbelegnummer in Detail plus Zusatz ergänzt
*Version 001 HST
*ALV Grid ergänzt
*Version 000 HST
*Ausgabe als ALV List
SELECTION-SCREEN COMMENT 01(80) text-001.
SELECTION-SCREEN SKIP.
TABLES:
coas,
mseg.
SELECTION-SCREEN BEGIN OF BLOCK all WITH FRAME.
SELECTION-SCREEN BEGIN OF BLOCK aus WITH FRAME TITLE text-011.
SELECT-OPTIONS so_matnr FOR mseg-matnr DEFAULT '12-780-071-Z2'. "'7227775030' DEFAULT '800000004*'. " '7277771163-2'.
SELECT-OPTIONS so_bwart FOR mseg-bwart. "default ''.
SELECT-OPTIONS so_budat FOR mseg-budat_mkpf.
SELECT-OPTIONS so_aufnr FOR mseg-aufnr NO-DISPLAY. "Future possibilities
SELECTION-SCREEN SKIP.
SELECT-OPTIONS so_saknr FOR mseg-sakto.
SELECTION-SCREEN END OF BLOCK aus.
SELECTION-SCREEN BEGIN OF BLOCK opt WITH FRAME TITLE text-012.
SELECT-OPTIONS so_buda2 FOR mseg-budat_mkpf.
PARAMETERS p_date TYPE sy-datum DEFAULT sy-datum NO-DISPLAY.
SELECT-OPTIONS so_sobkz FOR mseg-sobkz MATCHCODE OBJECT h_t148. "HST 20190712
PARAMETERS: alv_grid RADIOBUTTON GROUP g1 DEFAULT 'X'.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK alv WITH FRAME TITLE text-015.
SELECTION-SCREEN COMMENT 1(60) text-016 .
PARAMETERS p_var TYPE rsvar-variant. "LIKE p_alvvar.
SELECTION-SCREEN END OF BLOCK alv.
SELECTION-SCREEN SKIP.
PARAMETERS : p_list RADIOBUTTON GROUP g1 ."DEFAULT 'X'.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK det WITH FRAME TITLE text-013.
PARAMETERS p_detail TYPE xfeld AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK zus WITH FRAME TITLE text-014.
PARAMETERS: p_zusat0 RADIOBUTTON GROUP g2,
p_zusat1 RADIOBUTTON GROUP g2 DEFAULT 'X',
p_zusat2 RADIOBUTTON GROUP g2.
SELECTION-SCREEN END OF BLOCK zus.
PARAMETERS p_summe TYPE xfeld AS CHECKBOX DEFAULT abap_true.
PARAMETERS p_sumges TYPE xfeld AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN END OF BLOCK det.
SELECTION-SCREEN END OF BLOCK opt.
SELECTION-SCREEN END OF BLOCK all.
TYPES: BEGIN OF ty_alv,
bemer(30) TYPE c,
beme2(30) TYPE c,
matnr TYPE mseg-matnr,
bwart TYPE mseg-bwart,
shkzg TYPE mseg-shkzg,
sakto TYPE mseg-sakto,
dmbtr TYPE mseg-dmbtr,
"dmbtr TYPE betrag11,
"menge TYPE mseg-menge, HST20181219
menge TYPE p LENGTH 7 DECIMALS 0,
tcode TYPE mseg-tcode2_mkpf,
aufnr TYPE mseg-aufnr,
kostl TYPE mseg-kostl,
budat TYPE mseg-budat_mkpf,
sobkz TYPE mseg-sobkz, "HST 20190712
mblnr TYPE mseg-mblnr,
mjahr TYPE mseg-mjahr,
ampel(4) TYPE c,
END OF ty_alv.
TYPES: ty_alv_table TYPE STANDARD TABLE OF ty_alv.
DATA: gt_alv TYPE ty_alv_table,
gt_alv2 TYPE ty_alv_table,
gs_alv TYPE ty_alv.
TYPES: BEGIN OF ty_list,
matnr TYPE mseg-matnr,
bwart TYPE mseg-bwart,
shkzg TYPE mseg-shkzg,
sakto TYPE mseg-sakto,
dmbtr TYPE mseg-dmbtr,
"dmbtr TYPE betrag11,
"menge TYPE mseg-menge, HST20181219
menge TYPE p LENGTH 7 DECIMALS 0,
tcode TYPE mseg-tcode2_mkpf,
aufnr TYPE mseg-aufnr,
kostl TYPE mseg-kostl,
budat TYPE mseg-budat_mkpf,
sobkz TYPE mseg-sobkz,
mblnr TYPE mseg-mblnr,
mjahr TYPE mseg-mjahr,
END OF ty_list.
TYPES: ty_list_table TYPE STANDARD TABLE OF ty_list.
DATA gt_list TYPE ty_list_table.
DATA gv_titel(50) TYPE c.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var.
PERFORM f4_alv_variant USING p_var.
INITIALIZATION.
* CLEAR so_matnr.
* so_matnr-sign = 'I'.
* so_matnr-option = 'CP'.
* so_matnr-low = '800000004*'.
* APPEND so_matnr.
so_budat-sign = 'I'.
so_budat-option = 'BT'.
so_budat-low = '20150101'.
so_budat-high = '20181231'.
APPEND so_budat.
so_buda2-sign = 'I'.
so_buda2-option = 'BT'.
so_buda2-low = '20180101'.
so_buda2-high = '20181231'.
APPEND so_buda2.
p_date = sy-datum - 60.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-name = 'P_DATE'.
screen-input = 0.
screen-invisible = abap_false.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
AT SELECTION-SCREEN.
"HST 20190712 Beginn
CLASS cl_event_handler DEFINITION.
PUBLIC SECTION.
CLASS-METHODS on_before_salv_function " BEFORE_SALV_FUNCTION
FOR EVENT if_salv_events_functions~before_salv_function
OF cl_salv_events_table
IMPORTING e_salv_function.
CLASS-METHODS on_after_salv_function " AFTER_SALV_FUNCTION
FOR EVENT if_salv_events_functions~before_salv_function
OF cl_salv_events_table
IMPORTING e_salv_function.
CLASS-METHODS on_added_function " ADDED_FUNCTION
FOR EVENT if_salv_events_functions~added_function
OF cl_salv_events_table
IMPORTING e_salv_function.
CLASS-METHODS on_top_of_page " TOP_OF_PAGE
FOR EVENT if_salv_events_list~top_of_page
OF cl_salv_events_table
IMPORTING r_top_of_page
page
table_index.
CLASS-METHODS on_end_of_page " END_OF_PAGE
FOR EVENT if_salv_events_list~end_of_page
OF cl_salv_events_table
IMPORTING r_end_of_page
page.
CLASS-METHODS on_double_click " DOUBLE_CLICK
FOR EVENT if_salv_events_actions_table~double_click
OF cl_salv_events_table
IMPORTING row
column.
CLASS-METHODS on_link_click " LINK_CLICK
FOR EVENT if_salv_events_actions_table~link_click
OF cl_salv_events_table
IMPORTING row
column.
ENDCLASS. "cl_event_handler DEFINITION
*----------------------------------------------------------------------*
* CLASS cl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_event_handler IMPLEMENTATION.
METHOD on_before_salv_function.
"BREAK-POINT.
ENDMETHOD. "on_before_salv_function
METHOD on_after_salv_function.
"BREAK-POINT.
ENDMETHOD. "on_after_salv_function
METHOD on_added_function.
"BREAK-POINT.
ENDMETHOD. "on_added_function
METHOD on_top_of_page.
"BREAK-POINT.
ENDMETHOD. "on_top_of_page
METHOD on_end_of_page.
"BREAK-POINT.
ENDMETHOD. "on_end_of_page
METHOD on_double_click.
PERFORM display_document TABLES gt_alv USING row column.
ENDMETHOD. "on_double_click
METHOD on_link_click.
PERFORM display_document TABLES gt_alv USING row column.
ENDMETHOD. "on_link_click
ENDCLASS. "cl_event_handler IMPLEMENTATION
"HST 20190712 Ende
START-OF-SELECTION.
IF p_list EQ 'X'.
PERFORM collect_list.
PERFORM show_list.
ELSE.
PERFORM collect_alv.
PERFORM show_alv.
ENDIF.
EXIT.
FORM collect_list.
*Zwei Select je nach Infomenge
IF p_zusat0 = abap_true.
"Minimales Detail
SELECT matnr, bwart, shkzg, sakto, "budat_mkpf,
SUM( dmbtr ) AS dmbtr, SUM( menge ) AS menge, MIN( tcode2_mkpf ) AS tcode, MIN( aufnr ) AS aufnr, MIN( kostl ) AS kostl,
@sy-datum AS budat,
MIN( mblnr ) AS mblnr, MIN( mjahr ) AS mjahr
FROM mseg INTO TABLE
@gt_list
WHERE matnr IN @so_matnr
AND budat_mkpf IN @so_budat
AND sakto IN @so_saknr
AND bwart IN @so_bwart
AND aufnr IN @so_aufnr
AND sobkz IN @so_sobkz "HST 20190712
GROUP BY
matnr,
shkzg,
"budat_mkpf,
sakto,
bwart.
ELSEIF p_zusat1 = abap_true.
SELECT matnr, bwart, shkzg, sakto, "budat_mkpf,
SUM( dmbtr ) AS dmbtr, SUM( menge ) AS menge, tcode2_mkpf AS tcode, aufnr, kostl,
@sy-datum AS budat,
sobkz, "HST 20190712
MIN( mblnr ) AS mblnr, MIN( mjahr ) AS mjahr
FROM mseg
APPENDING TABLE @gt_list
WHERE matnr IN @so_matnr
AND budat_mkpf IN @so_budat
AND sakto IN @so_saknr
AND bwart IN @so_bwart
AND aufnr IN @so_aufnr
AND sobkz IN @so_sobkz "HST 20190712
GROUP BY
tcode2_mkpf,
aufnr,
kostl,
matnr,
shkzg,
"budat_mkpf,
sakto,
sobkz, "HST 20190712
bwart.
ELSEIF p_zusat2 = abap_true.
SELECT matnr, bwart, shkzg, sakto, "budat_mkpf,
SUM( dmbtr ) AS dmbtr, SUM( menge ) AS menge, tcode2_mkpf AS tcode, aufnr, kostl, budat_mkpf AS budat,
sobkz, "HST 20190712
mblnr, mjahr
FROM mseg
APPENDING TABLE @gt_list
WHERE matnr IN @so_matnr
AND budat_mkpf IN @so_budat
AND sakto IN @so_saknr
AND bwart IN @so_bwart
AND aufnr IN @so_aufnr
AND sobkz IN @so_sobkz "HST 20190712
GROUP BY
tcode2_mkpf,
aufnr,
kostl,
matnr,
shkzg,
"budat_mkpf,
sakto,
bwart,
budat_mkpf,
sobkz, "HST 20190712
mblnr,
mjahr.
ENDIF.
IF sy-subrc <> 0.
MESSAGE i531(0u) WITH 'Keine Daten gefunden'.
RETURN.
BREAK-POINT.
ENDIF.
DATA:
lv_kostv LIKE mseg-kostl.
* Nachbereitung der Daten
CLEAR lv_kostv.
SORT gt_list BY aufnr.
LOOP AT gt_list INTO DATA(gs_list) WHERE NOT aufnr IS INITIAL.
AT NEW aufnr.
SELECT kostv FROM coas INTO lv_kostv WHERE aufnr = gs_list-aufnr.
ENDSELECT.
ENDAT.
gs_list-kostl = lv_kostv.
MODIFY gt_list FROM gs_list.
ENDLOOP.
ENDFORM.
FORM show_list.
DATA:
lv_text(30) TYPE c,
lv_menge LIKE mseg-menge,
lv_dmbtr LIKE mseg-dmbtr,
lv_mengeges LIKE mseg-menge,
lv_dmbtrges LIKE mseg-dmbtr.
* Ausgabe Berichtsparameter
WRITE: / 'Buchungszeitraum: ', so_budat-low, '-', so_budat-high.
ULINE.
"WRITE: /.
WRITE: / 'Zugang/Abgang'.
WRITE: / '101 /201'.
WRITE: / '102 /202'.
WRITE: / '561 /562'.
WRITE: / ' /261'.
WRITE: / '501'.
WRITE: / ' /601'.
WRITE: / ' /711'.
WRITE: / '912'.
ULINE.
* Ausgabe Tabellenüberschrift
WRITE: 'MATNR'.
IF p_detail EQ abap_true.
WRITE: 20 'BWA'.
IF p_zusat1 EQ abap_true OR p_zusat2 EQ abap_true.
WRITE: 31 'TCODE', 41 'KOSTL', 51 'AUFNR'.
IF p_zusat2 EQ abap_true.
WRITE: 61 'MBLNR', 72 'MJAHR', 81 'BUDAT'.
ENDIF.
ENDIF.
ENDIF.
WRITE: 100 'Wert', 114 'Menge'.
ULINE.
* Ausgabe Tabelle
CLEAR: lv_menge, lv_dmbtr, lv_text, lv_mengeges, lv_dmbtrges.
lv_text = 'Summe'.
SORT gt_list BY matnr budat bwart.
LOOP AT gt_list INTO DATA(gs_list).
IF gs_list-shkzg = 'H'.
gs_list-dmbtr = - gs_list-dmbtr.
gs_list-menge = - gs_list-menge.
ENDIF.
lv_dmbtr = lv_dmbtr + gs_list-dmbtr.
lv_menge = lv_menge + gs_list-menge.
lv_dmbtrges = lv_dmbtrges + gs_list-dmbtr.
lv_mengeges = lv_mengeges + gs_list-menge.
IF p_detail EQ abap_true.
WRITE: / gs_list-matnr, gs_list-bwart, gs_list-shkzg, 26 gs_list-sakto, 92 gs_list-dmbtr, gs_list-menge.
IF p_zusat1 EQ abap_true OR p_zusat2 EQ abap_true.
SHIFT gs_list-kostl LEFT DELETING LEADING '0'.
SHIFT gs_list-aufnr LEFT DELETING LEADING '0'.
"shift gs_list-menge right deleting trailing '0'.
WRITE: 31 gs_list-tcode.
WRITE: 41 gs_list-kostl.
WRITE: 51 gs_list-aufnr.
IF p_zusat2 EQ abap_true.
WRITE: 61 gs_list-mblnr.
WRITE: 72 gs_list-mjahr.
"WRITE: 81 gs_list-budat(4), gs_list-budat+4(2), gs_list-budat+6(2).
WRITE: 81 gs_list-budat DD/MM/YYYY.
ENDIF.
ENDIF.
ENDIF.
AT NEW matnr.
ENDAT.
AT END OF matnr.
IF p_summe EQ abap_true.
WRITE: / gs_list-matnr, lv_text, (39) '', lv_dmbtr, (15) lv_menge.
ENDIF.
CLEAR: lv_menge, lv_dmbtr.
ULINE.
ENDAT.
ENDLOOP.
* Ausgabe Gesamt
IF p_sumges EQ abap_true.
lv_text = 'Gesamt'.
WRITE: /20 lv_text, 91 lv_dmbtrges, (15) lv_mengeges.
ENDIF.
ENDFORM.
FORM collect_alv.
* Ausgabe ALV
DATA: lv_buda2_low TYPE d.
lv_buda2_low = so_buda2-low.
CLEAR gs_alv.
SELECT
'VOR' AS bemer,
'Zugang' AS beme2,
* CASE
* WHEN budat_mkpf = @so_buda2-low then 'KRIT'
* else ' '
* end as bemer,
matnr, bwart, shkzg, sakto, "budat_mkpf,
SUM( dmbtr ) AS dmbtr, SUM( menge ) AS menge, tcode2_mkpf AS tcode, aufnr, kostl,
budat_mkpf AS budat,
sobkz, "HST 20190712
mblnr, mjahr
"case budat_mkpf when @p_date then '@EBQ' else '@EB@' end as ampel
FROM mseg
INTO TABLE @gt_alv2
WHERE matnr IN @so_matnr
AND budat_mkpf IN @so_budat
"AND budat_mkpf < @so_buda2-low
AND sakto IN @so_saknr
AND bwart IN @so_bwart
AND aufnr IN @so_aufnr
AND sobkz IN @so_sobkz "HST 20190712
GROUP BY
tcode2_mkpf,
aufnr,
kostl,
matnr,
shkzg,
"budat_mkpf,
sakto,
bwart,
budat_mkpf,
sobkz, "HST 20190712
mblnr,
mjahr.
*letzter eintrag auslesen
" ampel = '@08@'. Grün
" ampel = '@09@'. Gelb
" ampel = '@0A@'. Rot
" ampel = '@EB@'. Kein Licht
LOOP AT gt_alv2 ASSIGNING FIELD-SYMBOL(<gs_alv>).
IF <gs_alv>-budat < so_buda2-low.
<gs_alv>-bemer = '1VOR'.
ELSEIF <gs_alv>-budat > so_buda2-high.
<gs_alv>-bemer = '3NACH'.
ELSE.
<gs_alv>-bemer = '2KRIT'.
ENDIF.
<gs_alv>-ampel = '@EB@'.
IF <gs_alv>-shkzg = 'H'.
<gs_alv>-beme2 = 'Abgang'.
<gs_alv>-dmbtr = - <gs_alv>-dmbtr.
<gs_alv>-menge = - <gs_alv>-menge.
<gs_alv>-ampel = '@0A@'.
"MODIFY gt_alv FROM gs_alv.
ELSE.
<gs_alv>-beme2 = 'Zugang'.
ENDIF.
APPEND <gs_alv> TO gt_alv.
ENDLOOP.
SORT gt_alv BY matnr budat bwart.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SHOW_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
FORM show_alv.
"Initialisierung
DATA: lref_salv TYPE REF TO cl_salv_table,
lr_layout TYPE REF TO cl_salv_layout,
ls_key TYPE salv_s_layout_key.
DATA: lr_functions TYPE REF TO cl_salv_functions_list.
DATA: lr_display TYPE REF TO cl_salv_display_settings.
* Titel
DATA: lv_titel TYPE lvc_title.
* Sortierung und Aggregation
DATA: lr_sorts TYPE REF TO cl_salv_sorts.
DATA: lr_aggs TYPE REF TO cl_salv_aggregations.
* Feldkatalog ändern
DATA: lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column_table.
DATA: lf_variant TYPE slis_vari.
DATA: lo_events TYPE REF TO cl_salv_events_table. "HST 20190712
* ALV aufbauen,
* lref_salv zeigt danach auf das Objekt,
* gt_alv ist die Tabelle, die als Info mitgegeben wird, wo die Daten zukünftig gespeichert werden.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = lref_salv
CHANGING
t_table = gt_alv.
"HST 20190712 Beginn
lo_events = lref_salv->get_event( ).
SET HANDLER cl_event_handler=>on_before_salv_function FOR lo_events.
SET HANDLER cl_event_handler=>on_after_salv_function FOR lo_events.
SET HANDLER cl_event_handler=>on_added_function FOR lo_events.
SET HANDLER cl_event_handler=>on_top_of_page FOR lo_events.
SET HANDLER cl_event_handler=>on_end_of_page FOR lo_events.
SET HANDLER cl_event_handler=>on_double_click FOR lo_events.
SET HANDLER cl_event_handler=>on_link_click FOR lo_events.
"HST 20190712 Ende
CATCH cx_salv_msg .
ENDTRY.
"Die Keydaten werden gefüllt
ls_key-report = sy-repid.
"lr_layout zeigt auf das Layout des ALV
lr_layout = lref_salv->get_layout( ).
"Layout erhält Keydaten: Program Name
lr_layout->set_key( ls_key ).
"Layout Speichern erlaubt (3 Werte möglich) User can save
lr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).
* Layout auf Kundenspezifisches Layout einstellen
lr_layout->set_initial_layout( value = '/STANGL1' ).
* IF sy-slset = 'CUS&Z_PPMDT_01'.
* lr_layout->set_initial_layout( value = '/Z_PPMDT_TEL' ).
* ENDIF.
"lr_functions zeigt auf die Funktionen des ALV
lr_functions = lref_salv->get_functions( ).
"lr_functions einschalten
" lr_functions->set_default( ). "minimal
lr_functions->set_all( abap_true ). "Standard
"Überschrift des Display einstellen
gv_titel = 'Bewegungen'.
CONCATENATE gv_titel ` - Zeitraum: ` so_budat-low ' - ' so_budat-high INTO lv_titel.
lr_display = lref_salv->get_display_settings( ).
lr_display->set_list_header( lv_titel ).
lr_display->set_striped_pattern( abap_true ).
lr_columns = lref_salv->get_columns( ).
lr_columns->set_optimize( abap_true ).
TRY.
* "Sort einstellen
* lr_sorts = lref_salv->get_sorts( ).
* lr_sorts->add_sort( columnname = 'NACHN' subtotal = abap_true ).
**
* "Aggregation einstellen
* lr_aggs = lref_salv->get_aggregations( ).
* lr_aggs->add_aggregation( 'ZTAGE' ).
* lr_aggs->add_aggregation( 'ZSTUN' ).
lr_column ?= lr_columns->get_column( 'MENGE' ).
lr_column->set_short_text( 'Menge').
lr_column->set_medium_text( 'Menge').
lr_column->set_long_text( 'Menge').
"lr_column->set_output_length( '20' ).
lr_column->set_sign( abap_true ).
lr_column ?= lr_columns->get_column( 'DMBTR' ).
"lr_column->set_output_length( '20' ).
lr_column->set_sign( abap_true ).
* lr_column ?= lr_columns->get_column( 'FAVOR' ).
* lr_column->set_short_text( 'Not.Vorn').
* lr_column->set_medium_text( 'Not.Vorname').
* lr_column->set_long_text( 'Not.Vorname').
* lr_column->set_output_length( '10' ).
*
*
* lr_column ?= lr_columns->get_column( 'WERKS' ).
* lr_column->set_visible( '' ).
*
* lr_column ?= lr_columns->get_column( 'ORGEH' ).
* lr_column->set_visible( '' ).
*
lr_column ?= lr_columns->get_column( 'AMPEL' ).
lr_column->set_short_text( 'Status').
lr_column->set_medium_text( 'Status').
lr_column->set_long_text( 'aktueller Status').
lr_column->set_icon( abap_true ).
"HST 20190712 Beginn
lr_column ?= lr_columns->get_column( 'MBLNR' ).
lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
lr_column ?= lr_columns->get_column( 'BWART' ).
lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
lr_column ?= lr_columns->get_column( 'SOBKZ' ).
lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
"HST 20190712 Ende
lr_columns->set_column_position( columnname = 'AMPEL' position = 1 ).
** set initial Layout
lf_variant = 'DEFAULT'.
lr_layout->set_initial_layout( lf_variant ).
CATCH cx_salv_not_found.
cl_demo_output=>display('Error' ).
CATCH cx_salv_existing.
cl_demo_output=>display('Error: Existence' ).
CATCH cx_salv_data_error.
cl_demo_output=>display('Error: Data' ).
ENDTRY.
* Ausgabe
lref_salv->display( ).
ENDFORM.
FORM f4_alv_variant CHANGING p_var TYPE rsvar-variant. "LIKE p_alvvar.
DATA:variant TYPE disvariant.
variant-report = sy-repid.
"variant-handle = '0001'.
variant-username = sy-uname.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = variant
i_save = 'A'
IMPORTING
es_variant = variant
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
CHECK sy-subrc = 0.
p_var = variant-variant.
ENDFORM. " f4_alv_variant
*&---------------------------------------------------------------------*
*& FORM call_transaction
*&---------------------------------------------------------------------*
* Call standard transactions with authority check and progress indicator
*----------------------------------------------------------------------*
"HST 20190712
FORM call_transaction USING trx TYPE tcode.
DATA: lv_message TYPE string.
CONCATENATE 'Opening transaction' trx '...' INTO lv_message SEPARATED BY space. "#EC NOTEXT
CALL FUNCTION 'AUTHORITY_CHECK_TCODE'
EXPORTING
tcode = trx
EXCEPTIONS
ok = 0
not_ok = 1
OTHERS = 2.
IF sy-subrc NE 0.
MESSAGE e172(00) WITH trx.
ELSE.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = lv_message.
CALL TRANSACTION trx AND SKIP FIRST SCREEN.
ENDIF.
ENDFORM. "call transaction
"HST 20190712
FORM display_document_fb03 TABLES gt_alv USING row TYPE salv_de_row column TYPE salv_de_column.
gs_alv = gt_alv[ row ].
"SET PARAMETER ID: 'BLN' FIELD gs_alv-belnr.
"SET PARAMETER ID: 'GJR' FIELD gs_alv-gjahr.
PERFORM call_transaction USING 'FB03'.
"BREAK-POINT.
ENDFORM.
"HST 20190712
FORM display_document TABLES gt_alv USING row TYPE salv_de_row column TYPE salv_de_column.
"HST 20190712
IF column EQ 'SOBKZ'.
FIELD-SYMBOLS: <lv_sobkz> TYPE mseg-sobkz.
ASSIGN COMPONENT column OF STRUCTURE gt_alv[ row ] TO <lv_sobkz>.
PERFORM display_document_mb03 TABLES gt_alv USING row column.
ELSEIF column EQ 'BWART'.
PERFORM display_document_mb03 TABLES gt_alv USING row column.
ELSE.
PERFORM display_document_migo TABLES gt_alv USING row column.
ENDIF.
ENDFORM.
FORM display_document_mb03 TABLES gt_alv USING row TYPE salv_de_row column TYPE salv_de_column.
gs_alv = gt_alv[ row ].
SET PARAMETER ID: 'MBN' FIELD gs_alv-mblnr.
SET PARAMETER ID: 'MJA' FIELD gs_alv-mjahr.
PERFORM call_transaction USING 'MB03'.
"BREAK-POINT.
ENDFORM.
FORM display_document_migo TABLES gt_alv USING row TYPE salv_de_row column TYPE salv_de_column.
DATA: lv_mblnr TYPE mblnr,
lv_mjahr TYPE mjahr.
gs_alv = gt_alv[ row ].
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = 'Opening transaction MIGO...'. "#EC NOTEXT
"Call MIGO in display mode; this contains the authorization checks
lv_mblnr = gs_alv-mblnr. "to avoid type mismatch
lv_mjahr = gs_alv-mjahr. "automatic cast here
CALL FUNCTION 'MIGO_DIALOG'
EXPORTING
i_action = 'A04'
i_refdoc = 'R02'
i_notree = 'X'
i_no_auth_check = ' '
i_deadend = 'X'
i_skip_first_screen = 'X'
i_okcode = 'OK_GO'
i_mblnr = lv_mblnr
i_mjahr = lv_mjahr.
ENDFORM.
FORM display_document_div USING transaction TYPE ckmi1-awtyp
document TYPE ckmi1-awref
year TYPE ckmi1-aworg.
DATA: lv_mblnr TYPE mblnr,
lv_mjahr TYPE mjahr,
lv_belnr TYPE ck_belnr,
lv_kjahr TYPE ck_kjahr,
lv_belnr_iv TYPE re_belnr, "invoice
lv_belnr_am TYPE ko_belnr, "account maintenance
lv_gjahr TYPE gjahr,
lv_belnr_s TYPE aa_belnr. "settlement
CASE transaction.
WHEN 'MKPF'. "Material document
"Progress bar for opening MIGO
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = 'Opening transaction MIGO...'. "#EC NOTEXT
"Call MIGO in display mode; this contains the authorization checks
lv_mblnr = document. "to avoid type mismatch
lv_mjahr = year. "automatic cast here
CALL FUNCTION 'MIGO_DIALOG'
EXPORTING
i_action = 'A04'
i_refdoc = 'R02'
i_notree = 'X'
i_no_auth_check = ' '
i_deadend = 'X'
i_skip_first_screen = 'X'
i_okcode = 'OK_GO'
i_mblnr = lv_mblnr
i_mjahr = lv_mjahr.
WHEN 'RMRP'. "Invoice document
DATA: lv_vgart TYPE vgart.
lv_belnr_iv = document. "to avoid type mismatch
lv_gjahr = year. "automatic cast here
"Check the document type of the Invoice-Document
SELECT SINGLE vgart FROM rbkp INTO lv_vgart
WHERE belnr = lv_belnr_iv
AND gjahr = lv_gjahr.
IF sy-subrc <> 0. "Document has been archived
MESSAGE e184(m8) WITH lv_belnr_iv lv_gjahr.
ENDIF.
"KP = Account maintenance
"KS = Account maintenance Reversal >> can be opened in MR11SHOW
IF lv_vgart EQ 'KP' OR lv_vgart EQ 'KS'.
lv_belnr_am = document.
SET PARAMETER ID: 'KBN' FIELD lv_belnr_am,
'GJR' FIELD lv_gjahr.
PERFORM call_transaction USING 'MR11SHOW'.
"RS = credit memo
"RD = logistisc invoice >> can be opened in MR11SHOW
ELSE.
SET PARAMETER ID: 'RBN' FIELD lv_belnr_iv,
'GJR' FIELD lv_gjahr.
PERFORM call_transaction USING 'MIR4'.
ENDIF.
WHEN 'PRCHG'. "Price change document
lv_belnr = document. "to avoid type mismatch
lv_kjahr = year. "automatic cast here
SET PARAMETER ID: 'MLN' FIELD lv_belnr,
'MLJ' FIELD lv_kjahr.
PERFORM call_transaction USING 'CKMPCD'.
WHEN 'MLHD'. "Material ledger document
lv_belnr = document. "to avoid type mismatch
lv_kjahr = year. "automatic cast here
SET PARAMETER ID: 'MLN' FIELD lv_belnr,
'MLJ' FIELD lv_kjahr.
PERFORM call_transaction USING 'CKMB'.
WHEN 'AUAK'. "Settlement document
lv_belnr_s = document. "to avoid type mismatch
SET PARAMETER ID: 'BLN' FIELD lv_belnr_s.
PERFORM call_transaction USING 'KO8B'.
ENDCASE.
ENDFORM. "display_document