在 ABAP 中复制内部表
Copying Internal Tables in ABAP
代码错误。
*&---------------------------------------------------------------------*
*& Report ZSUBROUTINE_TABLES
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zsubroutine_tables.
TYPES : BEGIN OF line_type,
eno(3) TYPE n,
ename(30) TYPE c,
esal TYPE i,
END OF line_type.
DATA itab TYPE line_type OCCURS 10 WITH HEADER LINE.
DATA jtab TYPE STANDARD TABLE OF line_type.
**"DATA jtab TYPE line_type OCCURS 10 WITH HEADER LINE.**
PERFORM fill TABLES itab.
jtab = itab[].
PERFORM output TABLES jtab.
*&---------------------------------------------------------------------*
*& Form fill
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ITAB text
*----------------------------------------------------------------------*
FORM fill TABLES p_itab LIKE itab[].
p_itab-eno = '14'.
p_itab-ename = 'Aman'.
p_itab-esal = 3000.
APPEND p_itab.
p_itab-eno = '142'.
p_itab-ename = 'Raman'.
p_itab-esal = 5000.
APPEND p_itab.
ENDFORM. "fill
*&---------------------------------------------------------------------*
*& Form output
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_JTAB text
*----------------------------------------------------------------------*
FORM output TABLES p_jtab LIKE jtab[].
LOOP AT p_jtab.
WRITE : / p_jtab-eno, p_jtab-ename, p_jtab-esal.
ENDLOOP.
ENDFORM. "output
粗体代码如果未注释会引发错误,原因。
在注释代码中,itab 和 jtab 都以类似的方式声明。
错误:无法将 "ITAB" 的类型转换为 "JTAB" 的类型。
请注意,JTAB 的两个定义是不同的,注释的一个有 header 行,而另一个没有。因为 ITAB[] 也没有 header 行,ITAB[] 到 JTAB 的分配只有在 JTAB 没有 header 行时才有效。如果您想在 header 行中使用 JTAB 的定义,您需要将 ITAB 直接分配给 JTAB,不需要大括号。
代码错误。
*&---------------------------------------------------------------------*
*& Report ZSUBROUTINE_TABLES
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zsubroutine_tables.
TYPES : BEGIN OF line_type,
eno(3) TYPE n,
ename(30) TYPE c,
esal TYPE i,
END OF line_type.
DATA itab TYPE line_type OCCURS 10 WITH HEADER LINE.
DATA jtab TYPE STANDARD TABLE OF line_type.
**"DATA jtab TYPE line_type OCCURS 10 WITH HEADER LINE.**
PERFORM fill TABLES itab.
jtab = itab[].
PERFORM output TABLES jtab.
*&---------------------------------------------------------------------*
*& Form fill
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ITAB text
*----------------------------------------------------------------------*
FORM fill TABLES p_itab LIKE itab[].
p_itab-eno = '14'.
p_itab-ename = 'Aman'.
p_itab-esal = 3000.
APPEND p_itab.
p_itab-eno = '142'.
p_itab-ename = 'Raman'.
p_itab-esal = 5000.
APPEND p_itab.
ENDFORM. "fill
*&---------------------------------------------------------------------*
*& Form output
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_JTAB text
*----------------------------------------------------------------------*
FORM output TABLES p_jtab LIKE jtab[].
LOOP AT p_jtab.
WRITE : / p_jtab-eno, p_jtab-ename, p_jtab-esal.
ENDLOOP.
ENDFORM. "output
粗体代码如果未注释会引发错误,原因。 在注释代码中,itab 和 jtab 都以类似的方式声明。 错误:无法将 "ITAB" 的类型转换为 "JTAB" 的类型。
请注意,JTAB 的两个定义是不同的,注释的一个有 header 行,而另一个没有。因为 ITAB[] 也没有 header 行,ITAB[] 到 JTAB 的分配只有在 JTAB 没有 header 行时才有效。如果您想在 header 行中使用 JTAB 的定义,您需要将 ITAB 直接分配给 JTAB,不需要大括号。