有表头行与无表头行的内表在模块化中的应用(ABAP)

PROGRAM SAPMZTST.
TYPES: BEGIN OF LINE,
         COL1 TYPE I,
         COL2 TYPE I,
       END OF LINE.
DATA: ITAB TYPE LINE OCCURS 10 WITH HEADER LINE,
      JTAB TYPE LINE OCCURS 10.
PERFORM FILL TABLES ITAB.
MOVE ITAB[] TO JTAB.
PERFORM OUT  TABLES JTAB.
FORM FILL TABLES F_ITAB LIKE ITAB[].
   DO 3 TIMES.
      F_ITAB-COL1 = SY-INDEX.
      F_ITAB-COL2 = SY-INDEX ** 2.
      APPEND F_ITAB.
   ENDDO.
ENDFORM.
FORM OUT TABLES F_ITAB LIKE JTAB.
   LOOP AT F_ITAB.
      WRITE: / F_ITAB-COL1, F_ITAB-COL2.
   ENDLOOP.
ENDFORM.
启动 SAPMZTST 后,输出如 下:
         1          1
         2          4
         3          9

详细解释:WITH HEADER LINE 指明了ITAB要带表头行,
先解释下表头行的作用吧:

内表是按行 进行访问的 。必须使用 某个工作区 域作为与表 格互相传输 数据的接口 。在先前的

 

学习中我们都又看见这样一个访问内表的句子: LOOP AT F_ITAB INTO F_LINE. F_LINE就是

 

这样一个接口。那么如果有表头行的话,你就可以省略F_LINE,直接LOOP AT F_ITAB,因为表头行就

 

是这样一个系统帮你创建的一个表格工作区域(只要你声明时加上WITH HEADER LINE ),那ITAB[]

 

中的[]是用来做什么的?这个其实是因为如果在语句中使用内表名称,系统将其解释为表格工作区域

 

的名称,也就是ITAB其实代表 表头行、表格工作区域、访问内表的接口。这样应该理解了吧。有表

 

头行的内表在运用时要带个中括号,这样才是我们平时用的内表


重点理解:FORM OUT TABLES F_ITAB LIKE JTAB.

请注意,在这种情况下, 将无表头行 的实表格传递给有表头行的形式表 格,并在子程序中使用了表格工作域 F_ITAB。
这是因为如果传递无表头行的内表,则在子程序中自动创建作为局部数据对象的表头行,也就是说F_ITAB是带表头行的,所以LOOP AT F_ITAB.的后面不用指明表格工作区域

 

http://www.diybl.com/course/7_databases/database_other/20090302/156639.html

你可能感兴趣的:(有表头行与无表头行的内表在模块化中的应用(ABAP))