Code: Alles auswählen.
TYPE-POOLS slis.
TABLES: lfa1, bseg, bkpf, bsik, bsak, zdlkz_t.
DATA: wa_lfa1 TYPE lfa1,
wa_zdlkz_t TYPE zdlkz_t,
wa_bkpf TYPE bkpf,
wa_bsak TYPE bsak,
wa_bsik TYPE bsik.
DATA: BEGIN OF itab_sumla OCCURS 10,
lifnr LIKE lfa1-lifnr,
land1 LIKE lfa1-land1,
diekz LIKE bsak-diekz,
belnr LIKE bsak-belnr,
zuonr LIKE bsak-zuonr,
blart LIKE bsak-blart,
bukrs LIKE bsak-bukrs,
monat LIKE bsak-monat,
gjahr LIKE bsak-gjahr,
shkzg LIKE bsak-shkzg,
bschl LIKE bsak-bschl,
dmbtr LIKE bsak-dmbtr,
wrbtr LIKE bsak-wrbtr,
zdlkz LIKE zdlkz_t-zdlkz,
bezeichnung LIKE zdlkz_t-bezeichnung,
soha TYPE p DECIMALS 2,
soll TYPE p DECIMALS 2,
haben TYPE p DECIMALS 2,
END OF itab_sumla.
DATA: wa_soha LIKE LINE OF itab_sumla.
DATA: my_fieldcat TYPE slis_t_fieldcat_alv,
wa_layout TYPE slis_layout_alv,
wa_fieldcat LIKE LINE OF my_fieldcat,
repid TYPE sy-repid.
SELECT-OPTIONS: so_land FOR lfa1-land1,
so_perio FOR bkpf-monat.
PARAMETERS pa_gj LIKE bseg-gjahr.
SELECT-OPTIONS: so_dlkz FOR zdlkz_t-zdlkz.
START-OF-SELECTION.
*##################
SELECT a~lifnr a~land1 b~diekz b~belnr b~zuonr b~blart b~bukrs b~monat
b~gjahr b~shkzg b~bschl b~dmbtr b~wrbtr
INTO TABLE itab_sumla
FROM ( lfa1 AS a
INNER JOIN bsak AS b
ON a~lifnr = b~lifnr )
WHERE land1 IN so_land
AND gjahr = pa_gj
AND monat IN so_perio
AND bukrs IN ('1001')
AND blart IN ('A1', 'A2', 'A3').
APPEND itab_sumla.
SELECT a~lifnr a~land1 b~diekz b~belnr b~zuonr b~blart b~bukrs b~monat
b~gjahr b~shkzg b~bschl b~dmbtr b~wrbtr
INTO TABLE itab_sumla
FROM ( lfa1 AS a
INNER JOIN bsik AS b
ON a~lifnr = b~lifnr )
WHERE land1 IN so_land
AND gjahr = pa_gj
AND monat IN so_perio
AND bukrs IN ('1001')
AND blart IN ('A1', 'A2', 'A3').
IF sy-subrc <> 0.
MESSAGE i819(3f).
* Keine Daten im gewählten Zeitraum vorhanden
ENDIF.
LOOP AT itab_sumla INTO wa_soha.
IF wa_soha-shkzg = 'H'.
wa_soha-haben = - wa_soha-dmbtr.
ELSE.
wa_soha-soll = wa_soha-dmbtr.
ENDIF.
wa_soha-soha = wa_soha-haben - wa_soha-soll.
MODIFY itab_sumla FROM wa_soha TRANSPORTING soll.
MODIFY itab_sumla FROM wa_soha TRANSPORTING haben.
MODIFY itab_sumla FROM wa_soha TRANSPORTING soha.
ENDLOOP.
* Zusätzliche Spalte für Haben - Soll Berechnung
wa_fieldcat-fieldname = 'SOLL'.
wa_fieldcat-col_pos = 14.
wa_fieldcat-seltext_l = 'Soll'.
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO my_fieldcat.
wa_fieldcat-fieldname = 'HABEN'.
wa_fieldcat-col_pos = 15.
wa_fieldcat-seltext_l = 'Haben'.
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO my_fieldcat.
wa_fieldcat-fieldname = 'SOHA'.
wa_fieldcat-col_pos = 16.
wa_fieldcat-seltext_l = 'Haben - Soll'.
APPEND wa_fieldcat TO my_fieldcat.
wa_layout-colwidth_optimize = 'X'.
repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_structure_name = 'ZMYSTRUKTUR'
CHANGING
ct_fieldcat = my_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE e707(69).
* Lesefehler
ENDIF.
DELETE my_fieldcat WHERE NOT ( fieldname = 'BLART'
OR fieldname = 'ZDLKZ'
OR fieldname = 'LAND1'
OR fieldname = 'GJAHR'
OR fieldname = 'SHKZG'
OR fieldname = 'DMBTR'
OR fieldname = 'SOLL'
OR fieldname = 'HABEN'
OR fieldname = 'SOHA'
OR fieldname = 'MONAT' ).
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = wa_layout
it_fieldcat = my_fieldcat
TABLES
t_outtab = itab_sumla
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE e707(69).
* Lesefehler
ENDIF.