Code: Alles auswählen.
*&---------------------------------------------------------------------*
*& Report ZTEST81 *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT ztest81.
DATA sum(15) TYPE p DECIMALS 2.
PARAMETERS: p_jahr TYPE cosp-gjahr DEFAULT '2002'.
PARAMETERS: p_von(3) TYPE n DEFAULT '003'.
PARAMETERS: p_bis(3) TYPE n DEFAULT '010'.
if p_bis ge p_von.
PERFORM add_cosp USING p_von p_bis CHANGING sum.
endif.
*&---------------------------------------------------------------------*
*& Form add_cosp
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->VON text
* -->BIS text
* -->SUMME text
*----------------------------------------------------------------------*
FORM add_cosp USING von bis CHANGING summe.
DATA ls_cosp TYPE cosp.
DATA pointer(20).
DATA max TYPE i.
DATA tmp(3) TYPE n.
FIELD-SYMBOLS <p>.
CLEAR summe.
SELECT SINGLE * FROM cosp INTO ls_cosp WHERE
gjahr = p_jahr "Geschäftsjahr
AND lednr = '00' "Hauptbuch
AND wrttp = '01' "Werttyp
AND kstar = '0000469710'
AND versn = '000'. "Version
IF NOT ls_cosp IS INITIAL.
max = bis - von + 1.
DO max TIMES.
tmp = von + sy-index - 1.
* wir basteln uns einen Feldnamen
CONCATENATE 'LS_COSP-WOG' tmp INTO pointer.
* und weisen zu
ASSIGN (pointer) TO <p>.
* wenn es funktioniert
IF sy-subrc = 0.
* feld summieren
ADD <p> TO summe.
* zuweisung aufheben
UNASSIGN <p>.
ENDIF.
* nächstes Feld
ENDDO.
ENDIF.
ENDFORM. "add_cosp
Code: Alles auswählen.
SELECT objnr (T_FELDER) from ... INTO CORRESPONDING FIELDS...
Code: Alles auswählen.
erg = wog001 + wog002 + wog003 ....
Code: Alles auswählen.
FORM add_cosp USING iv_von TYPE <periode>
iv_bis TYPE <periode>
* muss CHANGING sein, weil könnte im DO-Loop verändert werden
CHANGING cs_cosp TYPE cosp
cv_summe TYPE <summe>.
DATA:
...
lv_wog TYPE cosp-wog001.
...
DO 16 TIMES VARYING lv_wog FROM cs_cosp-wog001
NEXT cs_cosp-wog002.
* nur die Perioden berücksichten, die im Interval liegen
IF sy-index BETWEEN iv_von AND iv_bis.
cv_summe = cv_summe
+ lv_wog.
ENDIF.
ENDDO.
ENDFORM.