SAP ABAP指针的6种用法。

以下图数据为例,用指针的方式计算科目余额,对该科目的10个条目数,每个条目16个记账期间求和
LT_FAG数据

*&---------------------------------------------------------------------*
*& Report ZLQT98
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZLQT98.
  DATA LV_NUMB TYPE I .
"指针的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.
  """"""如果没有取到数据先加数据,加数据这段也使用指针,可以先看后面的代码再看这段
  IF LT_FAG[] IS INITIAL. "
    DO 10 TIMES.
      APPEND INITIAL LINE TO LT_FAG ASSIGNING FIELD-SYMBOL(<FS_FAG>) .
      DO 20 TIMES.
        ASSIGN COMPONENT SY-INDEX OF STRUCTURE <FS_FAG> TO FIELD-SYMBOL(<FS_VIUE>) .
        CASE SY-INDEX.
          WHEN 1.
            <FS_VIUE> = '2020'.
          WHEN 2.
            <FS_VIUE> = '8035000001'.
          WHEN 3.
            <FS_VIUE> = '1000'.
          WHEN 4.
            <FS_VIUE> = '0'.
          WHEN OTHERS.
            <FS_VIUE> = <FS_VIUE> + LV_NUMB .
        ENDCASE.
        LV_NUMB = LV_NUMB + 1 .
      ENDDO.
    ENDDO.
  ENDIF.
  """""""

"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.
  • 10
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值