Code: Alles auswählen.
REPORT zsumla.
TYPE-POOLS slis.
TABLES: lfa1, bseg, bkpf, bsik, bsak, zdlkz_t, bsis, bsas.
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,
hkont LIKE bsak-hkont,
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,
laenge 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.
DATA: BEGIN OF itab_sumla2 OCCURS 10,
belnr LIKE bseg-belnr,
zuonr LIKE bseg-zuonr,
bukrs LIKE bseg-bukrs,
gjahr LIKE bseg-gjahr,
shkzg LIKE bseg-shkzg,
bschl LIKE bseg-bschl,
wrbtr LIKE bseg-wrbtr,
zdlkz2 LIKE zdlkz_t-zdlkz,
bezeichnung2 LIKE zdlkz_t-bezeichnung,
soha2 TYPE p DECIMALS 2,
soll2 TYPE p DECIMALS 2,
haben2 TYPE p DECIMALS 2,
zahler2 TYPE i,
laenge2 TYPE i,
END OF itab_sumla2.
DATA: wa_soha2 LIKE LINE OF itab_sumla2.
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.
* Wertehilfe für so_dlkz in SE11 definiert mit ZMYSEARCH
SELECT-OPTIONS: so_dlkz FOR zdlkz_t-zdlkz MATCHCODE OBJECT zmysearch.
* damit die Selektion Geschäftsjahr funktioniert, wenn kein Wert
* eingegeben wird
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.
IF sy-subrc <> 0.
MESSAGE i003(/sapdmc/lsmw_glo_030).
* Bitte tragen Sie einen gültigen Wert ein.
EXIT.
ENDIF.
* neuer Select auf Hauptbuch!!!
SELECT a~lifnr a~land1 c~hkont c~belnr c~zuonr c~blart c~bukrs c~monat
c~gjahr c~shkzg c~wrbtr c~buzei
INTO CORRESPONDING FIELDS OF TABLE itab_sumla
FROM ( ( lfa1 AS a
INNER JOIN bsik AS b
ON a~lifnr = b~lifnr )
INNER JOIN bsis AS c
ON b~belnr = c~belnr AND
b~gjahr = c~gjahr )
WHERE c~bukrs = '1001'
AND c~blart IN ('A1', 'A2', 'A3')
AND c~bschl IN ('50', '40')
AND land1 IN so_land
AND c~gjahr IN range
AND c~zuonr IN so_dlkz
AND c~monat IN so_perio.
LOOP AT itab_sumla2 INTO wa_soha2.
SELECT belnr zuonr bukrs gjahr shkzg bschl wrbtr
INTO CORRESPONDING FIELDS OF TABLE itab_sumla2
FROM bseg WHERE
bukrs = '1001'
AND bschl IN ('50', '40')
AND gjahr IN range
AND zuonr IN so_dlkz.
IF sy-subrc <> 0.
DELETE itab_sumla2.
CONTINUE.
ELSE.
MODIFY itab_sumla2 FROM wa_soha2 TRANSPORTING soll2 haben2 soha2
zahler2 zdlkz2 bezeichnung2.
ENDIF.
ENDLOOP.
* 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-wrbtr.
ELSE.
wa_soha-soll = wa_soha-wrbtr.
ENDIF.
wa_soha-soha = wa_soha-haben - wa_soha-soll.
* Spalten Vergleich
* das Dlkz hat immer nur 4 Zeichen. Sicherstellung, daß keine falschen
* Daten eingegeben werden!!!
wa_soha-laenge = strlen( wa_soha-zuonr ).
IF wa_soha-zuonr = space.
wa_soha-zdlkz = space.
ELSEIF wa_soha-laenge <> 4.
wa_soha-zdlkz = space.
wa_soha-bezeichnung = 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-no_zero = 'X'.
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 = 'ZMYSTRUKTUR1'
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 = 'BEZEICHNUNG'
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.
Was er meint ist:robin1at hat geschrieben:Wie mache ich das mit den Daten rüberschaufeln?
Kannst Du mir da bitte noch weiterhelfen?
Code: Alles auswählen.
loop at itab1.
move itab2-feld1 to itab1-feld1.
(usw.)
append itab1.
clear itab1.
endloop.
Richtig.robin1at hat geschrieben:In den Tabellen BSAK, BSAS, BSIS und BSIK sind doch die selben Einträge wie in der BSEG, oder?
Dann hast du eine reine Sachkontenbuchung, die natürlich auch in der BSEG steht.robin1at hat geschrieben:Und wenn ich jetzt nur Einträge in der BSIS habe.
Lies das Land vorher aus:robin1at hat geschrieben:Und zwar liest mir das Programm auch meine Daten aus, nur leider fehlt mir dann das Land zu dem Beleg.
Code: Alles auswählen.
data: begin of g_lfa1, "Die brauchst du zusätzlich
lifnr like lfa1-lifnr,
land1 like lfa1-land1,
end of g_lfa1,
gt_lfa1 like standard table of g_lfa1.
select lifnr land1 from lfa1
into table gt_lfa1
where land in so_land.
select .... "die Felder die du brauchst
from bseg into table....
for all entries in gt_lfa1
where lifnr in gt_lfa1-lifnr
and .... "bsiherige WHERE-bedingung ohne LAND
* Programm weiter wie gehabt