ABAP的定义数据很简单,无非是内表,内表的structure,带表头,不带表头,这些的定义都很简单,但是不同的数据结构他们有些赋值操作是不一样的:
3种类型的表不同的读取方法:
1、分析表和structure,LIKE和type,带表头和不带表头:
①
DATAS:
BEGIN OF IT_ALV OCCURS 0,
…………….
END OF IT_ALV.
②
TYPES: BEGIN OF YT_LOG,
salesdocument TYPE bapivbeln-vbeln,
END OF YT_LOG.
GT_LOG TYPE TABLE OF YT_LOG WITH HEADER LINE.
③ IT_ALV1 LIKE IT_ALV OCCURS O WITH HEADER LINE
1和2这两种定义内表,IT_ALV和GT_LOG、IT_ALV1可以直接放到select into corresponding field of table的。。但是IT_ALV和IT_ALV1,可以用在select endselect,然后通过append放进内表里。
1,2,3,这三个都是定义一个内表,而且是带表头的。
DATA: LV_ZORDERCONTROL LIKE ZORDERCONTROL. 直接LIKE一个表。然后LV的这个变量可以放到select into哪里。
④
GT_LOG TYPE TABLE OF YT_LOG
IT_S912 TYPE TABLE OF S912.
DATA:
BEGIN OF IT_ALV,
…………….
END OF IT_ALV.
4这种是不带表头的。
带表头和不带表头之间的区别:
不带表头的不可以直接赋值,需要把值放到work area 再赋值。
例如: IT_S912-VBELN = ‘’. 这样是不行的。
其次不带表头的,不可以APPEND。
定义work area,内表等:
DATA:
L_WA_S912 TYPE S912
L_WA_ALV LIKE LINE OF IT_ALV,
DATA: IT_VBFA_COPY LIKE IT_VBFA[].
如何进行内表之间的赋值:
可以直接赋值。两个类型一样的表,可以直接赋值。
MOVE-CORRESPONDING gt_upload TO gt_bkpf.
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>.
后续继续补充遇到的一些特殊的地方。