Bismillah..
Varying = Horizontal Looping
That’s explain what varying is.
You may have struggled when you have to calculate the total of a table like FAGLFLEXT that saves value to the right ( ex: HSL01, HSL02, HSL03, and so on… )
Let us learn how to do it.
First, prepare the dummy data:
* -------------------------------
" Declaration
* -------------------------------
TYPES:
BEGIN OF ty_faglflext,
hslvt TYPE wrbtr,
hsl01 TYPE wrbtr,
hsl02 TYPE wrbtr,
hsl03 TYPE wrbtr,
hsl04 TYPE wrbtr,
hsl05 TYPE wrbtr,
hsl06 TYPE wrbtr,
hsl07 TYPE wrbtr,
hsl08 TYPE wrbtr,
hsl09 TYPE wrbtr,
hsl10 TYPE wrbtr,
hsl11 TYPE wrbtr,
hsl12 TYPE wrbtr,
hsl13 TYPE wrbtr,
hsl14 TYPE wrbtr,
hsl15 TYPE wrbtr,
hsl16 TYPE wrbtr,
total TYPE wrbtr,
END OF ty_faglflext.
DATA:
ls_data TYPE ty_faglflext.
* -------------------------------
" Populate Data
* -------------------------------
ls_data = VALUE #(
hslvt = 9000 hsl01 = 100 hsl02 = 200 hsl03 = 300 hsl04 = 400
hsl05 = 500 hsl06 = 600 hsl07 = 700 hsl08 = 800 hsl09 = 900
hsl10 = 100 hsl11 = 200 hsl12 = 300 hsl13 = 400 hsl14 = 500
hsl15 = 600 hsl16 = 700 total = 0
).
- Trick 1 (without varying):
* ——————————-
” Do SUM (without varying)
* ——————————-
DATA: lv_number TYPE numc2,
lv_field TYPE char20,
lv_hsl TYPE wrbtr.
FIELD-SYMBOLS: <lfs_hsl> TYPE wrbtr.
ls_data-total = ls_data-hslvt.
DO 16 TIMES.
lv_number = sy-index.
lv_field = ‘LS_DATA-HSL’ && lv_number.
ASSIGN (lv_field) TO <lfs_hsl>.
IF sy-subrc EQ 0.
ls_data-total = ls_data-total + <lfs_hsl>.
ENDIF.
ENDDO.
- Trick 2 (with varying):
* -------------------------------
" Do SUM (with varying)
* -------------------------------
DATA: lv_hsl TYPE wrbtr.
DO 17 TIMES VARYING lv_hsl FROM ls_data-hslvt NEXT ls_data-hsl01.
ls_data-total = ls_data-total + lv_hsl.
ENDDO.
Write the result
* -------------------------------
" Write Data
* -------------------------------
WRITE: ls_data-total.
That’s all. Thank you for reading. 🙂