Code: Alles auswählen.
TYPE-POOLS slis.
DATA: my_fieldcat TYPE slis_t_fieldcat_alv,
wa_layout TYPE slis_layout_alv,
wa_fieldcat LIKE LINE OF my_fieldcat,
repid type repid.
repid = repid.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = repid
i_internal_tabname = 'itab_sumla'
i_inclname = 'repid'
CHANGING
ct_fieldcat = my_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
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 ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Code: Alles auswählen.
REPORT zsumla.
* INCLUDE ZSUMLAO01 . *
* INCLUDE ZSUMLAI01 . *
* INCLUDE ZSUMLAF01 *
TYPE-POOLS slis.
TABLES: lfa1, bseg, bkpf, bsik, bsak, zdlkz_t. "BSEG, BKPF für so
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 wa_res,
lifnr TYPE lfa1-lifnr,
land1 TYPE lfa1-land1,
diekz TYPE bsak-diekz,
belnr TYPE bsak-belnr,
zuonr TYPE bsak-zuonr,
blart TYPE bsak-blart,
bukrs TYPE bsak-bukrs,
monat TYPE bsak-monat,
gjahr TYPE bsak-gjahr,
zdlkz TYPE zdlkz_t-zdlkz,
bezeichnung TYPE zdlkz_t-bezeichnung,
END OF wa_res,
itab_sumla LIKE wa_res OCCURS 10 WITH HEADER LINE.
DATA: my_fieldcat TYPE slis_t_fieldcat_alv,
wa_layout TYPE slis_layout_alv,
wa_fieldcat LIKE LINE OF my_fieldcat,
repid type 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 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
FROM bsak INTO CORRESPONDING FIELDS OF wa_bsak
WHERE lifnr = wa_lfa1-lifnr.
MOVE-CORRESPONDING wa_bsak TO itab_sumla.
SELECT lifnr zuonr gjahr belnr monat blart diekz bukrs
FROM bsik INTO CORRESPONDING FIELDS OF wa_bsik
WHERE lifnr = wa_lfa1-lifnr
AND bukrs = wa_bsak-bukrs
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.
ENDSELECT.
ENDSELECT.
ENDSELECT.
APPEND itab_sumla.
CLEAR itab_sumla.
ENDSELECT.
IF sy-subrc <> 0.
MESSAGE e180(/bdl/d-).
* Notwendige Eingabe fehlt
ENDIF.
repid = repid.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = repid
i_internal_tabname = 'ITAB_SUMLA'
i_inclname = 'REPID'
CHANGING
ct_fieldcat = my_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
DELETE my_fieldcat WHERE NOT ( fieldname = 'LAND1'
OR fieldname = 'BELNR'
OR fieldname = 'MONAT'
OR fieldname = 'ZDLKZ').
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 ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Code: Alles auswählen.
REPORT zsumla.
TYPE-POOLS slis.
TABLES: lfa1, bseg, bkpf, bsik, bsak, zdlkz_t. "BSEG, BKPF für so
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 wa_res,
lifnr TYPE lfa1-lifnr,
land1 TYPE lfa1-land1,
diekz TYPE bsak-diekz,
belnr TYPE bsak-belnr,
zuonr TYPE bsak-zuonr,
blart TYPE bsak-blart,
bukrs TYPE bsak-bukrs,
monat TYPE bsak-monat,
gjahr TYPE bsak-gjahr,
zdlkz TYPE zdlkz_t-zdlkz,
bezeichnung TYPE zdlkz_t-bezeichnung,
END OF wa_res.
*** Änderung der Datendefinition
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,
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 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 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
FROM bsak INTO CORRESPONDING FIELDS OF wa_bsak
WHERE lifnr = wa_lfa1-lifnr.
MOVE-CORRESPONDING wa_bsak TO itab_sumla.
SELECT lifnr zuonr gjahr belnr monat blart diekz bukrs
FROM bsik INTO CORRESPONDING FIELDS OF wa_bsik
WHERE lifnr = wa_lfa1-lifnr
AND bukrs = wa_bsak-bukrs
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.
*** s.u.
APPEND itab_sumla.
ENDSELECT.
ENDSELECT.
ENDSELECT.
*** Hier ist mir beim letzten Mal ein kleiner Fehler unterlaufen.
*** die Anweisung muss drei Zeilen weiter nach oben.
*** APPEND itab_sumla.
CLEAR itab_sumla.
ENDSELECT.
IF sy-subrc <> 0.
MESSAGE e180(/bdl/d-).
* Notwendige Eingabe fehlt
ENDIF.
*** Was machst du hier? Du kopierst Variable1 in Variable1!
***repid = repid.
*** So bekommst den aktuellen Programmnamen
repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = repid
i_internal_tabname = 'ITAB_SUMLA'
*** Was machst du hier? Du übergibst einen VariablenNAMEN.
***Du brauchst aber den Inhalt!
*** i_inclname = 'REPID'
*** i_inclname = 'REPID'
CHANGING
ct_fieldcat = my_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
*** Entweder du wertest den Fehler aus, oder du schmeißt den IF-Block weg.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
DELETE my_fieldcat WHERE NOT ( fieldname = 'LAND1'
OR fieldname = 'BELNR'
OR fieldname = 'MONAT'
OR fieldname = 'ZDLKZ').
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.
*** s.o.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Code: Alles auswählen.
TYPE-POOLS slis.
TABLES: lfa1, bseg, bkpf, bsik, bsak, zdlkz_t. "BSEG, BKPF für so
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 wa_res,
lifnr TYPE lfa1-lifnr,
land1 TYPE lfa1-land1,
diekz TYPE bsak-diekz,
belnr TYPE bsak-belnr,
zuonr TYPE bsak-zuonr,
blart TYPE bsak-blart,
bukrs TYPE bsak-bukrs,
monat TYPE bsak-monat,
gjahr TYPE bsak-gjahr,
zdlkz TYPE zdlkz_t-zdlkz,
bezeichnung TYPE zdlkz_t-bezeichnung,
END OF wa_res,
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,
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.
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
FROM bsak INTO CORRESPONDING FIELDS OF wa_bsak
WHERE lifnr = wa_lfa1-lifnr.
MOVE-CORRESPONDING wa_bsak TO itab_sumla.
SELECT lifnr zuonr gjahr belnr monat blart diekz bukrs
FROM bsik INTO CORRESPONDING FIELDS OF wa_bsik
WHERE lifnr = wa_lfa1-lifnr
AND bukrs = wa_bsak-bukrs
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 e180(/bdl/d-).
* Notwendige Eingabe fehlt
ENDIF.
repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = sy-repid
i_structure_name = 'BSEG'
I_INTERNAL_TABNAME = 'ITAB_SUMLA'
CHANGING
ct_fieldcat = my_fieldcat
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3
.
DELETE my_fieldcat WHERE NOT ( fieldname = 'BLART'
OR fieldname = 'ZDLKZ'
OR fieldname = 'LAND1'
OR fieldname = 'LIFNR'
OR fieldname = 'GJAHR'
OR fieldname = 'MONAT'
OR fieldname = 'DIEKZ'
OR fieldname = 'BUKRS').
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
Der Parameter i_structure_name ist im FuBa als Optional gekennzeichnet. Dass heißt du kannst ihn auch leer lassen. Der FuBa kann entweder eine Dict-Struktur (Tabelle/Structur) ODER eine interne Tabelle in einen Feldkatalog umwandeln. Wenn du den Parameter i_structure_name füllst ignoriert er deine interne Tabelle.robin1at hat geschrieben:Ich weis im Moment nicht welche i_structure_name ich übergeben sollte.
Code: Alles auswählen.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = sy-repid
*** Den Parameter brauchst du nicht übergeben
* i_structure_name = 'BSEG'
I_INTERNAL_TABNAME = 'ITAB_SUMLA'
CHANGING
ct_fieldcat = my_fieldcat
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3
.
= 2
Habe einen Testreport geschrieben, der bis auf die Z-Tabellen-Felder funktioniert.robin1at hat geschrieben: Ja, das weis ich schon, aber dann bekomme ich wieder die Meldung Feldkatalog kann nicht ermittelt werden.
Code: Alles auswählen.
REPORT z_test_alv_merge.
TYPE-POOLS slis.
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,
* zdlkz LIKE zdlkz_t-zdlkz,
* bezeichnung LIKE zdlkz_t-bezeichnung,
END OF itab_sumla.
DATA: gw_fieldcat TYPE slis_fieldcat_alv,
gt_fieldcat TYPE slis_t_fieldcat_alv.
DATA: g_repid TYPE sy-repid.
START-OF-SELECTION.
g_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = g_repid
i_internal_tabname = 'ITAB_SUMLA'
i_inclname = g_repid
CHANGING
ct_fieldcat = gt_fieldcat.
* Fieldcat ausgeben
LOOP AT gt_fieldcat INTO gw_fieldcat.
WRITE: / gw_fieldcat-fieldname,
gw_fieldcat-tabname,
gw_fieldcat-ref_fieldname,
gw_fieldcat-ref_tabname.
ENDLOOP.
Code: Alles auswählen.
REPORT zsumla.
TYPE-POOLS slis.
TABLES: lfa1, bseg, bkpf, bsik, bsak, zdlkz_t.
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,
zahler TYPE i,
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.
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.
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 = 'ZUONR'
OR fieldname = 'BEZEICHNUNG'
* OR fieldname = 'SHKZG'
* OR fieldname = 'DMBTR'
* OR fieldname = 'WRBTR'
OR fieldname = 'BELNR'
OR fieldname = 'SOLL'
OR fieldname = 'HABEN'
OR fieldname = 'SOHA'
OR fieldname = 'ZAHLER'
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.