以下图数据为例
*&---------------------------------------------------------------------*
*& Report ZLQT98
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZLQT98.
"指针的6种用法
SELECT RYEAR ,RACCT , RBUKRS , TSLVT ,
TSL01 ,TSL02 , TSL03 , TSL04 ,
TSL05 ,TSL06 , TSL07 , TSL08 ,
TSL09 ,TSL10 , TSL11 , TSL12 ,
TSL13 ,TSL14 , TSL15 , TSL16
FROM FAGLFLEXT
WHERE RBUKRS = '1000'
AND RYEAR = '2020'
AND RACCT = '8035000001'
INTO TABLE @DATA(LT_FAG)
UP TO 10 ROWS.
"1.READ语法中分配指针
READ TABLE LT_FAG ASSIGNING FIELD-SYMBOL(<FS_FAG1>) INDEX 1.
"2.静态分配。
ASSIGN <FS_FAG1>-TSL01 TO FIELD-SYMBOL(<FS_TSL01>) .
DATA LV_NUM TYPE N LENGTH 2 VALUE 1.
DATA LV_CHA TYPE C LENGTH 20 VALUE '<FS_FAG2>-TSL' .
DATA LV_CHA2 TYPE C LENGTH 20 VALUE 'TSL' .
DATA LV_SUM TYPE DMBTR .
"3.LOOP循环里面分配指针。
LOOP AT LT_FAG ASSIGNING FIELD-SYMBOL(<FS_FAG2>).
"4.1.动态分配,循环累计工作区中的 HSL01-HSL16 。将字符串组成字段名直接分配给指针。(字符串中带工作区类型)
DO 16 TIMES.
DATA(LV_FIED) = LV_CHA && LV_NUM .
ASSIGN (LV_FIED) TO FIELD-SYMBOL(<FS_TSL>) .
IF <FS_TSL> <> 0.
LV_SUM = LV_SUM + <FS_TSL> .
ENDIF.
LV_NUM = LV_NUM + 1 .
ENDDO.
"4.2.动态分配,循环累计工作区中的 HSL01-HSL16 。将字符串组成字段名直接分配给指针。(字符串中不带工作区类型)
CLEAR : LV_SUM .
LV_NUM = 1 .
DO 16 TIMES.
DATA(LV_FIED2) = LV_CHA2 && LV_NUM .
ASSIGN COMPONENT LV_FIED2 OF STRUCTURE <FS_FAG2> TO FIELD-SYMBOL(<FS_TSL2>) .
IF <FS_TSL2> <> 0.
LV_SUM = LV_SUM + <FS_TSL2> .
ENDIF.
LV_NUM = LV_NUM + 1 .
ENDDO.
"5.动态分配,循环累计工作区中的 HSL01-HSL16 。将工作区的第几个字段分配给指针。
CLEAR : LV_NUM ,LV_SUM .
DO 16 TIMES.
LV_NUM = 5 ."从第五个字段开始累加
ASSIGN COMPONENT LV_NUM OF STRUCTURE <FS_FAG2> TO FIELD-SYMBOL(<FS_TSL3>) .
IF <FS_TSL2> <> 0.
LV_SUM = LV_SUM + <FS_TSL3> .
ENDIF.
LV_NUM = LV_NUM + 1 .
ENDDO.
"注意事项:指针分配结束后应该判断是否被分配了,此处DEMO做了省略"
ENDLOOP.