ABAP 用指针的方式

首先要定义指针

FIELD-SYMBOLS: <fs_out> LIKE gt_tab_out.

然后在循环赋值时使用ASSIGNING关键字对指针初始化。

LOOP AT lt_tab_out ASSIGNING <fs_out> WHERE aufnr NE space.
        READ TABLE lt_afko WITH KEY aufnr = <fs_out>-aufnr.
        IF sy-subrc EQ 0.
          MOVE lt_afko-fevor TO <fs_out>-fevor.
          MOVE lt_afko-txt TO <fs_out>-fevortxt.
          CLEAR lt_afko.
        ENDIF.
      ENDLOOP.

2、指针的定义和赋值:(这部分网上参考一部分,后续自己有遇到继续补充)

1、定义指针:
    指针的定义主要有以下语句
    定义任意类型的指针,但是不具备栏位结构(仅仅是一个地址)
      FIELD-SYMBOLS <carrid> TYPE ANY.
  参考数据库表定义(这种指针是含有栏位结构的,参考内表同理)
    
      FIELD-SYMBOLS <sflight> TYPE sflight.
      FIELD-SYMBOLS <sflight> LIKE sflight.
      FIELD-SYMBOLS <sflight> LIKE LINE OF sflight.
  动态定义具有栏位结构的指针类型
    
       DATA: tabname TYPE tabname VALUE 'SFLIGHT' ,   
       dref TYPE REF TO data.
        FIELD-SYMBOLS: <itab> TYPE ANY TABLE.    
        CREATE DATA dref TYPE TABLE OF (tabname).
        ASSIGN dref->* TO <itab>.
    2、指针的分配(常用句法)
    分配某个变量给指针
       ASSIGN var TO <field-symbols>
  分配结构中的某个字段的地址给指针
    
      ASSIGN COMPONENT pos OF STRUCTURE struc TO <field-symbols>.
  分配整个内表行给指针(指针必须定义为有栏位结构的类型)   
      READ TABLE itab INDEX/WITH KEY ASSIGNING <field-symbols>.
      LOOP AT itab
      ASSIGNING  <field-symbols>.
       ENDLOOP.
    分配类的方法或借口给指针
      ASSIGN dref->* TO <field-symbols>.

赋值:
FIELD-SYMBOLS: <fs1>.   "定义一个指针
DATA: num0     TYPE i VALUE 10,
      num1(10) TYPE c VALUE '巴拉巴拉'.
ASSIGN num0 TO <fs1>.

WRITE:/ '<FS1>:',<fs1>.     "输出结果:10
WRITE:/ 'num0:',num0.       "输出结果:10

IF <fs1> IS ASSIGNED.       "一定要进行判断
  <FS1> = 21.
ENDIF.
WRITE:/ 'num0:',num0.       "输出结果:21 ;当指针的值变化时,赋值给指针的变量的值也将改变

1, 创建动态内表: 
a,动态内表的结构的定义. 
   动态内表表结构的定义必须使用表结构与 table type: lvc_t_fcat一样的内表. 
   一般情况下,我们都内表的所有列定义成字符型. 
b,根据表结构生成内表. 
   系统提供了一个标准的method来产生动态表,使用方法如下: 
2, 动态内表的赋值: 
a,获取指定的字段 
b,给指定的字段赋值 
3, 读取动态内表的值: 
a,获取指定的字段 
b,读取指定的字段值 

REPORT  zdyn_test.
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_wa>,
<dyn_field>.
DATA: dy_table TYPE REF TO data,
     dy_line  TYPE REF TO data,
     it_structure TYPE lvc_t_fcat,
     wa_structure TYPE lvc_s_fcat.
START-OF-SELECTION.
PERFORM create_structure.  " 定义内表的结构
PERFORM create_dynamic_table.  " 按照定义的内表结构,产生一个内表
PERFORM write_data_to_dyntable.  " 向动态内表中写数
PERFORM output_dyntable_data.   " 从动态内表中取数,并写到屏幕
*&---------------------------------------------------------------------*
*&      Form  create_structure
*&---------------------------------------------------------------------*
FORM create_structure .
wa_structure-fieldname = 'COL1'.  " 第一列列名
wa_structure-col_pos   = 1.       " 表示第一列 --- 可心省略,默认情况下,第一行对应到生产内表的第一列,如果指定,则按指定的列顺序生成内表
wa_structure-inttype = 'C'.       " 数据类型
wa_structure-intlen = 6.          " 长度
APPEND wa_structure TO it_structure.
wa_structure-fieldname = 'COL2'.  " 第二列列名
wa_structure-col_pos   = 2.       " 表示第二列--- 可心省略,默认情况下,第一行对应到生产内表的第一列,如果指定,则按指定的列顺序生成内表
wa_structure-inttype = 'C'.       " 数据类型
wa_structure-intlen = 6.          " 长度
APPEND wa_structure TO it_structure.
wa_structure-fieldname = 'COL3'.  " 第三列名
wa_structure-col_pos   = 3.       " 表示第三列 --- 可心省略,默认情况下,第一行对应到生产内表的第一列,如果指定,则按指定的列顺序生成内表
wa_structure-inttype = 'C'.       " 数据类型
wa_structure-intlen = 6.          " 长度
APPEND wa_structure TO it_structure.
ENDFORM.                    " create_structure
*&---------------------------------------------------------------------*
*&      Form  create_dynamic_table
*&---------------------------------------------------------------------*
FORM create_dynamic_table .
CALL METHOD cl_alv_table_create=>create_dynamic_table
   EXPORTING
it_fieldcatalog = it_structure
   IMPORTING
ep_table        = dy_table.
ASSIGN dy_table->* TO <dyn_table>.    " 用表类型指针 <dyn_table> 指向 数据对象的内容.
ENDFORM.                    " create_dynamic_table
*&---------------------------------------------------------------------*
*&      Form  write_data_to_dyntable
*&---------------------------------------------------------------------*
FORM write_data_to_dyntable .
DATA:wa_new_line TYPE REF TO data.
DATA:i TYPE n.
DATA:j TYPE n.
CREATE DATA wa_new_line LIKE LINE OF <dyn_table>.  " 建立一个与动态内表结构相同的数据对象,且数据对象为是一个结构
ASSIGN wa_new_line->* TO <dyn_wa>.
" 用<dyn_wa>指针指向该结构
DO 3 TIMES.
i = i + 1.
   CLEAR j.
   LOOP AT it_structure INTO wa_structure.
j = j + 1.
     ASSIGN COMPONENT wa_structure-fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.  " 用指针 <dyn_field>指向工作区<dyn_wa>中的一个字段,字段名为wa_structure-fieldname.
     CONCATENATE i j INTO <dyn_field>.                                              " 给指针指向的字段赋值
   ENDLOOP.
   APPEND <dyn_wa> TO <dyn_table>.
ENDDO.
ENDFORM.                    " write_data_to_dyntable
*&---------------------------------------------------------------------*
*&      Form  output_dyntable_data
*&---------------------------------------------------------------------*
FORM output_dyntable_data .
LOOP AT it_structure INTO wa_structure.
   WRITE: wa_structure-fieldname(5).
ENDLOOP.
LOOP AT <dyn_table> INTO <dyn_wa>.
   WRITE: / .
   LOOP AT it_structure INTO wa_structure.
     ASSIGN COMPONENT wa_structure-fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.  " 用指针 <dyn_field>指向工作区<dyn_wa>中的一个字段,字段名为wa_structure-fieldname.
     WRITE: <dyn_field>.
   ENDLOOP.
ENDLOOP.
ENDFORM.                    " output_dyntable_data
原文地址:https://www.cnblogs.com/BruceKing/p/14510580.html