Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Dynamic data processing

Former Member
0 Likes
828

Hi All,

My requirement is as below:

I need to sum up the values based on the month as shown below:

*December--(Sum up to November(11))

  • IF p_monat = lc_12.

  • lv_hslxx = ls_fagl-hsl01 + ls_fagl-hsl02 + ls_fagl-hsl03 + ls_fagl-hsl04 +

  • ls_fagl-hsl05 + ls_fagl-hsl06 + ls_fagl-hsl07 + ls_fagl-hsl08 +

  • ls_fagl-hsl09 + ls_fagl-hsl10 + ls_fagl-hsl11 + ls_fagl-hslvt.

I want to process the same dynamically: (As shown below and preparing the string LS_FAGL-HSL<Month No>.

DATA : lv_month TYPE numc2 ,

lv_text TYPE string,

lv_num TYPE hslxx12,

lv_cnt TYPE char2.

CLEAR lv_month.

LOOP AT GT_FAGL into LS_FAGL.

lv_month = lv_month - p_monat.

DO lv_month TIMES.

lv_cnt = lv_cnt + 1.

CONCATENATE 'LS_FAGL-HSL0' lv_cnt INTO lv_text.

TRY.

lv_num = ( lv_text ) .

CATCH CX_SY_CONVERSION_NO_NUMBER.

ENDTRY.

lv_hslxx = lv_hslxx + lv_num.

ENDDO.

ENDLOOP.

When moving the data in LV_NUM there is an exception raised...

Kindly help in filling you the value in LV_TEXT.

Regards

Shiva

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
792

Hi

U need to use the field-symbols:

DATA : LV_MONTH TYPE NUMC2 ,
       LV_TEXT TYPE STRING,
       LV_NUM TYPE HSLXX12,
       LV_CNT TYPE CHAR2.


FIELD-SYMBOLS: <FS_HSLXX> TYPE ANY.

CLEAR LV_MONTH.

LOOP AT GT_FAGL INTO LS_FAGL.

  LV_MONTH = LV_MONTH - P_MONAT.

  DO LV_MONTH TIMES.
    LV_CNT = LV_CNT + 1.
    CONCATENATE 'LS_FAGL-HSL0' LV_CNT INTO LV_TEXT.
    ASSIGN COMPONEND LV_TEXT OF STRUCTURE LS_FAGL TO <FS_HSLXX>.
    IF SY-SUBRC = 0.
      LV_HSLXX = LV_HSLXX + <FS_HSLXX>.
    ENDIF.
  ENDDO.
ENDLOOP.

Max

6 REPLIES 6
Read only

Former Member
0 Likes
792

Hi Shiva,

Use field symbols to achieve the desired result.

Cheers!

Sid

Read only

0 Likes
792

Sid,

can you replicate the below code using field symbols?

LOOP AT GT_FAGL into LS_FAGL.

lv_month = lv_month - p_monat.

DO lv_month TIMES.

lv_cnt = lv_cnt + 1.

CONCATENATE 'LS_FAGL-HSL0' lv_cnt INTO lv_text.

TRY.

lv_num = ( lv_text ) .

CATCH CX_SY_CONVERSION_NO_NUMBER.

ENDTRY.

lv_hslxx = lv_hslxx + lv_num.

ENDDO.

ENDLOOP.

Also without fieldd symbols cant we achieve? Please explain

Thanks

Shiva

Read only

Former Member
0 Likes
793

Hi

U need to use the field-symbols:

DATA : LV_MONTH TYPE NUMC2 ,
       LV_TEXT TYPE STRING,
       LV_NUM TYPE HSLXX12,
       LV_CNT TYPE CHAR2.


FIELD-SYMBOLS: <FS_HSLXX> TYPE ANY.

CLEAR LV_MONTH.

LOOP AT GT_FAGL INTO LS_FAGL.

  LV_MONTH = LV_MONTH - P_MONAT.

  DO LV_MONTH TIMES.
    LV_CNT = LV_CNT + 1.
    CONCATENATE 'LS_FAGL-HSL0' LV_CNT INTO LV_TEXT.
    ASSIGN COMPONEND LV_TEXT OF STRUCTURE LS_FAGL TO <FS_HSLXX>.
    IF SY-SUBRC = 0.
      LV_HSLXX = LV_HSLXX + <FS_HSLXX>.
    ENDIF.
  ENDDO.
ENDLOOP.

Max

Read only

Former Member
0 Likes
792

Hi Shiva,

DO lv_month TIMES.
lv_cnt = lv_cnt + 1.
CONCATENATE 'LS_FAGL-HSL0' lv_cnt INTO lv_text. "<=Here check

Here for november month you will get 11 and the name is

'LS_FAGL-HSL011' but I guess you have your field name as *'LS_FAGL-HSL11' *.

so change your field name as 'LS_FAGL-HSL011'

Use field symbol as

FIELD-SYMBOLS: <fs_field> TYPE ANY
 ASSIGN COMPONENT lv_text OF STRUCTURE LS_FAGL TO <fs_field>.
lv_num  = <fs_field>

hope this helps.

Regards,

Manoj Kumar P

Edited by: Manoj Kumar on Jan 20, 2009 11:35 AM

Edited by: Manoj Kumar on Jan 20, 2009 11:36 AM

Edited by: Manoj Kumar on Jan 20, 2009 11:47 AM

Read only

Former Member
0 Likes
792

try like dis...

FIELD-SYMBOLS: <value> TYPE ANY.

LOOP AT GT_FAGL into LS_FAGL.

lv_month = lv_month - p_monat.

DO lv_month TIMES.

lv_cnt = lv_cnt + 1.

CONCATENATE 'LS_FAGL-HSL0' lv_cnt INTO lv_text.

ASSIGN COMPONENT lv_text OF STRUCTURE LS_FAGL TO <value>.

TRY.

lv_num = <value> .

CATCH CX_SY_CONVERSION_NO_NUMBER.

ENDTRY.

lv_hslxx = lv_hslxx + lv_num.

ENDDO.

ENDLOOP.

Read only

Former Member
0 Likes
792

if u want to do with out field symbols. think u can use the case statement,

and write perform for each case.if u like to, u can use the FS to jus vary the month in the performs..