ABAP笔记:定义指针,动态指针分配:ASSIGN COMPONENT <N> OF STRUCTURE <结构> TO <指针>.

参考大佬文章学习,总结了下没有提到的点:SAP ABAP指针的6种用法。_abap 指针-CSDN博客

定义指针:其实指针这玩意,就是类似你给个地方,把东西临时放进去,然后指针就是这个东西的替身了,写代码的时候更方便,指针可以直接赋值。

  FIELD-SYMBOLS: <F1>,<F2>,<F3>.

ASSIGN <结构体> TO <F1>.参照结构体定义指针

 ASSIGN <变量> TO <F2>.参照变量定义指针

动态指针分配:

 <N> -结构的字段技术名称,或者当前行 ,SY-INDEX这种变量,可以是动态的

 <结构>-结构体,工作区之类的

 <指针>-一般以F开头

粗浅理解为:将<结构>中的某个<N>的值 ,分配给<指针>

哈哈,怎么感觉说了好像没说~还得自己理解。

仔细一点就是把结构中,具体的某一个字段,分配给指针,这个字段可以是动态变化的,也可以是静态的某个字段,这里的<N>代表的是结构中的字段技术名称。听不懂没关系,可以看下面示例代码参悟。

ASSIGN COMPONENT <N> OF STRUCTURE <结构> TO <指针>.

使用场景:

可以用灵活计算财务在一行的账龄金额例如 T100,T200,或者各个期间的金额累计,如DMBTR1,DMBTR2……,结构的T100,,T200可以参考如下代码,动态替代,以下计算累计的方式

    REPORT ztest.
    DATA:BEGIN OF wa_tab,
      char1 TYPE i VALUE '1',
      char2 TYPE i VALUE '2',
      char3 TYPE i VALUE '3',
      char4 TYPE i VALUE '4',
      END OF wa_tab.
      DATA:comp(6) VALUE 'CHAR05'.
      FIELD-SYMBOLS: <F1>,<F2>,<F3>.
      ASSIGN WA_TAB TO <F1>.
      ASSIGN COMP TO <F2>.
      DATA :LS_TEST TYPE CHAR10,
            LS_I TYPE I,
            LS_SUM TYPE I.

    DO 4 TIMES.

    LS_I  = LS_I +  1.
    LS_TEST  = 'char' && LS_I .
     ASSIGN COMPONENT LS_TEST OF STRUCTURE <F1> TO <F3>.
     IF <F3> IS ASSIGNED AND SY-SUBRC = 0.
       LS_SUM = LS_SUM  + <F3>.
       WRITE :/ '第' && LS_I && '次累计' , LS_SUM .
     ENDIF.
    ENDDO.

注意事项:

1.需要配合sy-subrc 来判断是否分配成功,

而不是 IF <F3> IS ASSINGED,这个只是判断有没有分配,不能判断有没有成功分配到值

如图结果第五次为999

    REPORT ztest.
    DATA:BEGIN OF wa_tab,
      char1 TYPE i VALUE '01',
      char2 TYPE i VALUE '02',
      char3 TYPE i VALUE '03',
      char4 TYPE i VALUE '04',
      END OF wa_tab.
      DATA:comp(6) VALUE 'CHAR05'.
      FIELD-SYMBOLS: <F1>,<F2>,<F3>.
      ASSIGN WA_TAB TO <F1>.
      ASSIGN COMP TO <F2>.
      DATA :LS_TEST TYPE CHAR10,
            LS_I TYPE I.


    DO 5 TIMES.

    LS_I  = LS_I +  1.
    LS_TEST  = 'char' && LS_I .
     ASSIGN COMPONENT LS_TEST OF STRUCTURE <F1> TO <F3>.
     IF sy-subrc = 0.
     WRITE:/ <F3>.
     ELSE.
     <F3> = 999.
     WRITE:/ <F3>.
     ENDIF.
     CLEAR <F3>.
    ENDDO.

2.如果下一次没有分配成功,指针的值仍为上一次分配的值,第五次执行结果等于第四次,并不是第五次没有分配成功,指针就会清空

    REPORT ztest.
    DATA:BEGIN OF wa_tab,
      char1 TYPE i VALUE '1',
      char2 TYPE i VALUE '2',
      char3 TYPE i VALUE '3',
      char4 TYPE i VALUE '4',
      END OF wa_tab.
      DATA:comp(6) VALUE 'CHAR05'.
      FIELD-SYMBOLS: <F1>,<F2>,<F3>.
      ASSIGN WA_TAB TO <F1>.
      ASSIGN COMP TO <F2>.
      DATA :LS_TEST TYPE CHAR10,
            LS_I TYPE I,
            LS_SUM TYPE I.


    DO 5 TIMES.

    LS_I  = LS_I +  1.
    LS_TEST  = 'char' && LS_I .
     ASSIGN COMPONENT LS_TEST OF STRUCTURE <F1> TO <F3>.
     IF  <F3> <> ''.
      WRITE:/ <F3>.
     ENDIF.
    ENDDO.

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-25 03:24:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-25 03:24:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-25 03:24:05       87 阅读
  4. Python语言-面向对象

    2024-03-25 03:24:05       96 阅读

热门阅读

  1. 设计模式之观察者模式

    2024-03-25 03:24:05       48 阅读
  2. C++异常处理

    2024-03-25 03:24:05       45 阅读
  3. c++统计字符出现次数

    2024-03-25 03:24:05       39 阅读
  4. 字母在字符串中的百分比

    2024-03-25 03:24:05       41 阅读
  5. LeetCode的使用方法

    2024-03-25 03:24:05       41 阅读
  6. Vue修饰符总结

    2024-03-25 03:24:05       39 阅读
  7. AcWing 3417.砝码称重

    2024-03-25 03:24:05       45 阅读
  8. qinakun实现公共依赖的加载

    2024-03-25 03:24:05       50 阅读
  9. Git tag总结

    2024-03-25 03:24:05       39 阅读
  10. vscode集成git管理项目

    2024-03-25 03:24:05       37 阅读