Code: Alles auswählen.
REPORT zsumla.
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,
END 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.
DATA result TYPE p DECIMALS 2.
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 lifnr land1
FROM lfa1 INTO CORRESPONDING FIELDS OF wa_lfa1
WHERE land1 IN so_land.
MOVE-CORRESPONDING wa_lfa1 TO itab_sumla.
SELECT lifnr zuonr gjahr belnr monat blart diekz bukrs shkzg dmbtr
wrbtr bschl
FROM bsak INTO CORRESPONDING FIELDS OF wa_bsak
WHERE lifnr = wa_lfa1-lifnr
AND gjahr = pa_gj
AND monat IN so_perio
AND shkzg IN ('S', 'H')
AND bukrs IN ('1001')
AND blart IN ('A1', 'A2', 'A3').
MOVE-CORRESPONDING wa_bsak TO itab_sumla.
SELECT lifnr zuonr gjahr belnr monat blart diekz bukrs shkzg dmbtr
wrbtr bschl
FROM bsik INTO CORRESPONDING FIELDS OF wa_bsik
WHERE lifnr = wa_lfa1-lifnr
AND shkzg = wa_bsak-shkzg
AND blart = wa_bsak-blart
AND bukrs = wa_bsak-bukrs
AND bschl = wa_bsak-bschl
AND monat IN so_perio
AND gjahr = pa_gj.
MOVE-CORRESPONDING wa_bsik TO itab_sumla.
SELECT zdlkz bezeichnung
FROM zdlkz_t INTO CORRESPONDING FIELDS OF wa_zdlkz_t
WHERE zdlkz IN so_dlkz.
MOVE-CORRESPONDING wa_zdlkz_t TO itab_sumla.
APPEND itab_sumla.
ENDSELECT.
ENDSELECT.
ENDSELECT.
CLEAR itab_sumla.
ENDSELECT.
IF sy-subrc <> 0.
MESSAGE i819(3f).
* Keine Daten im gewählten Zeitraum vorhanden
ENDIF.
CASE bsak-shkzg.
WHEN 'S'.
result = bsak-dmbtr - bsak-wrbtr.
WHEN 'H'.
result = bsak-wrbtr - bsak-dmbtr.
ENDCASE.
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 = 'WRBTR'
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.
Code: Alles auswählen.
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 shkzg IN ('S', 'H')
AND bukrs IN ('1001')
AND blart IN ('A1', 'A2', 'A3').
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 shkzg IN ('S', 'H')
AND bukrs IN ('1001')
AND blart IN ('A1', 'A2', 'A3').
SELECT zdlkz
into corresponding fields of wa_zdlkz_t
FROM zdlkz_t
WHERE zdlkz in so_dlkz.
APPEND wa_zdlkz_t to itab_sumla.
endselect.
Code: Alles auswählen.
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 shkzg IN ('S', 'H') "sind denn andere Werte zulässig?
AND bukrs IN ('1001')
AND blart IN ('A1', 'A2', 'A3').
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
APPENDING TABLE itab_sumla "hier musst Du hinten anhängen (INTO ersetzt bisherige Werte)
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 shkzg IN ('S', 'H') "sind denn andere Werte zulässig?
AND bukrs IN ('1001')
AND blart IN ('A1', 'A2', 'A3').
* Welche Verbindung gibt es denn zwischen zdlkz_t und den Belegen?
* nachfolgender Code ist so definitiv falsch
* SELECT zdlkz
* into corresponding fields of wa_zdlkz_t
* FROM zdlkz_t
* WHERE zdlkz in so_dlkz.
* APPEND wa_zdlkz_t to itab_sumla.
* endselect.
Code: Alles auswählen.
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 z~benennung
INTO TABLE itab_sumla
FROM ( lfa1 AS a
INNER JOIN ( bsak AS b
ON a~lifnr = b~lifnr
LEFT OUTER JOIN zdlkz_t AS z
on z~zdlkz = b~zdlkz ) )
WHERE land1 IN so_land
AND gjahr = pa_gj
AND monat IN so_perio
AND shkzg IN ('S', 'H') "sind denn andere Werte zulässig?
AND bukrs IN ('1001')
AND blart IN ('A1', 'A2', 'A3').
gibt es denn bei Euch eine Tabelle ZDLKZ (oder ähnliches), in der die Verbindung von Belegposition zu 'diekz' oder 'zdlkz' steht?robin1at hat geschrieben:Hallo!
Ja, die Felder passen zusammen.
Wenn ich mir die Tabellen ansehe, steht in der diekz nicht drinnen. Schätze darum gibt es die Kundeneigene Tabelle zdlkz_t wo diese gepglegt werden.
Ein Anhängen der ZDLKZ_T macht doch überhaupt keinen Sinn, denn Du willst doch zu einer Belegposition mit einem Dienstleistungskennzeichen, den dazugehörigen Text anzeigen, oder?robin1at hat geschrieben:Wenn ich die zdlkz_t mit einem "normalen" select an die itab_sumla anhängen will, kommt die Meldung, daß itab_sumla keine Kopfzeile hat. Würde Dir dazu noch was einfallen, wie ich das umgehen könnte?