bin gerade auf noch was draufgekommen.
wenn ich bei zdlk einen wert angebe, bringt er alle daten.
Wie kann ich hier sagen, daß wenn kein Wert vorkommt, ebenfalls die Fehlermeldung kommt? (kein Wert zu den unten stehenden Joins)
Weil wie der select jetzt ist, findet er in der Tabelle zdlkz_t immer Werte.
Es wird erst weiter unten im Coding die Tabelle für einen Vergleich herangezogen.
Danke vielmals für Eure Hilfe ....
Hier mein komplettes Coding ...
[/code]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.
* Zweite interne Tabelle für "READ" - Spalten Vergleich
DATA: BEGIN OF itab_zdlkz_t OCCURS 10,
zdlkz LIKE zdlkz_t-zdlkz,
bezeichnung LIKE zdlkz_t-bezeichnung,
END OF itab_zdlkz_t.
DATA: wa_soha LIKE LINE OF itab_sumla,
wa_zdlkz LIKE LINE OF itab_zdlkz_t.
* zum sy-subrc Auswerten von beiden JOINS
DATA: lv_subrc TYPE sy-subrc.
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.
* damit die Selektion Geschäftsjahr funktioniert
RANGES: range FOR bseg-gjahr.
IF NOT pa_gj IS INITIAL.
range-sign = 'I'.
range-option = 'EQ'.
range-low = pa_gj .
APPEND range.
ELSE.
REFRESH range.
ENDIF.
START-OF-SELECTION.
*##################
* GUI-Titel anlegen
SET TITLEBAR 'T_SOHA'.
SELECT zdlkz bezeichnung
FROM zdlkz_t INTO CORRESPONDING FIELDS OF TABLE itab_zdlkz_t
WHERE zdlkz IN so_dlkz.
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 CORRESPONDING FIELDS OF TABLE itab_sumla
FROM ( lfa1 AS a
INNER JOIN bsak AS b
ON a~lifnr = b~lifnr )
WHERE bukrs IN ('1001')
AND blart IN ('A1', 'A2', 'A3')
AND land1 IN so_land
AND gjahr IN range
AND monat IN so_perio.
IF sy-subrc <> 0.
lv_subrc = sy-subrc.
ENDIF.
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 CORRESPONDING FIELDS OF TABLE itab_sumla
FROM ( lfa1 AS a
INNER JOIN bsik AS b
ON a~lifnr = b~lifnr )
WHERE bukrs IN ('1001')
AND blart IN ('A1', 'A2', 'A3')
AND land1 IN so_land
AND gjahr IN range
AND monat IN so_perio.
IF sy-subrc <> 0 OR lv_subrc <> 0.
MESSAGE i819(3f).
* Keine Daten im gewählten Zeitraum vorhanden + EXIT, weil Message
* Typ i sonst Daten zeigen würde, die in einen der Joins wären !!!
EXIT.
ENDIF.
* wa_soha-.... weil durch DATA Deklaration wa_soha
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.
* Spalten Vergleich
IF wa_soha-zuonr = space.
wa_soha-zdlkz = space.
ELSE.
READ TABLE itab_zdlkz_t INTO wa_zdlkz WITH KEY zdlkz =
wa_soha-zuonr.
IF sy-subrc = 0.
wa_soha-zdlkz = wa_zdlkz-zdlkz.
wa_soha-bezeichnung = wa_zdlkz-bezeichnung.
ENDIF.
ENDIF.
* Zähler für keine Einträge in DlKz
IF wa_soha-zdlkz = space.
wa_soha-zahler = 1.
ELSE.
wa_soha-zahler = 0.
ENDIF.
MODIFY itab_sumla FROM wa_soha TRANSPORTING soll haben soha zahler
zdlkz bezeichnung.
ENDLOOP.
* Zusätzliche Spalten für Haben - Soll Berechnung, ...
wa_fieldcat-fieldname = 'ZUONR'.
wa_fieldcat-col_pos = 14.
wa_fieldcat-seltext_l = 'ZUONR'.
APPEND wa_fieldcat TO my_fieldcat.
wa_fieldcat-fieldname = 'BEZEICHNUNG'.
wa_fieldcat-col_pos = 15.
wa_fieldcat-seltext_l = 'BEZEICHNUNG'.
APPEND wa_fieldcat TO my_fieldcat.
wa_fieldcat-fieldname = 'SOLL'.
wa_fieldcat-col_pos = 16.
wa_fieldcat-seltext_l = 'Soll'.
wa_fieldcat-no_zero = 'X'. " Es werden keine Einträge mit 0 angezeigt
wa_fieldcat-do_sum = 'X'. " Spalte summieren
APPEND wa_fieldcat TO my_fieldcat.
wa_fieldcat-fieldname = 'HABEN'.
wa_fieldcat-col_pos = 17.
wa_fieldcat-seltext_l = 'Haben'.
wa_fieldcat-no_zero = 'X'.
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO my_fieldcat.
wa_fieldcat-fieldname = 'SOHA'.
wa_fieldcat-col_pos = 18.
wa_fieldcat-seltext_l = 'Haben - Soll'.
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO my_fieldcat.
wa_fieldcat-fieldname = 'BELNR'.
wa_fieldcat-col_pos = 19.
wa_fieldcat-seltext_l = 'BELNR'.
APPEND wa_fieldcat TO my_fieldcat.
wa_fieldcat-fieldname = 'ZAHLER'.
wa_fieldcat-col_pos = 20.
wa_fieldcat-seltext_l = 'keine Einträge DlKz'.
wa_fieldcat-do_sum = 'X'.
APPEND wa_fieldcat TO my_fieldcat.
* Tabelle sortieren
SORT itab_sumla BY gjahr monat land1.
* Spaltenbreite optimieren, Zebra Muster
wa_layout-colwidth_optimize = 'X'.
wa_layout-zebra = '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 = '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.