*&---------------------------------------------------------------------*
*& 结构体的定义
*&---------------------------------------------------------------------*
* 第一种方式
DATA:
BEGIN OF ST_ADD1,
FLAG TYPE CHAR01, " 标识
ID TYPE ZWMQ_E_CODE, " ID
NAME1 TYPE ZSTD_WMQ001-Z_NAME, " 名称
Z_SCHID TYPE ZSTD_WMQ001-Z_SCHID, " 城市
END OF ST_ADD1,
BEGIN OF ST_ADD3,
FLAG TYPE CHAR01, " 标识
ID TYPE ZWMQ_E_CODE, " ID
NAME1 TYPE ZSTD_WMQ001-Z_NAME, " 名称
Z_SCHID TYPE ZSTD_WMQ001-Z_SCHID, " 城市
Z_SCHID2 TYPE ZSTD_WMQ001-Z_SCHID, " 城市
END OF ST_ADD3.
* 第二种方式(推荐方式)
TYPES:
BEGIN OF TS_ADD,
FLAG TYPE CHAR01, " 标识
ID TYPE ZWMQ_E_CODE, " ID
NAME1 TYPE ZSTD_WMQ001-Z_NAME, " 名称
Z_SCHID TYPE ZSTD_WMQ001-Z_SCHID, " 城市
Z_SCHFEE TYPE ZSCH_WMQ001-Z_SCHFEE, " 城市
END OF TS_ADD.
DATA:
ST_ADD2 TYPE TS_ADD.
*&---------------------------------------------------------------------*
*& 结构体的赋值
*&---------------------------------------------------------------------*
WRITE:'结构体的赋值'.
ST_ADD1-FLAG = ABAP_TRUE.
ST_ADD1-ID = 1001.
ST_ADD1-NAME1 = 'TEXT01'.
ST_ADD1-Z_SCHID = '101'.
WRITE:/ ST_ADD1-FLAG,
ST_ADD1-ID,
ST_ADD1-NAME1,
ST_ADD1-Z_SCHID.
*相同的结构体之间赋值
SKIP.
WRITE:'相同的结构体之间赋值'.
MOVE ST_ADD1 TO ST_ADD2.
ST_ADD2 = ST_ADD1.
WRITE: / ST_ADD2-FLAG,
ST_ADD2-ID,
ST_ADD2-NAME1,
ST_ADD2-Z_SCHID.
SKIP.
WRITE:'存在差异的结构体之间赋值'.
MOVE-CORRESPONDING ST_ADD1 TO ST_ADD3.
WRITE: / ST_ADD3-FLAG,
ST_ADD3-ID,
ST_ADD3-NAME1,
ST_ADD3-Z_SCHID,
ST_ADD3-Z_SCHID2.
*&---------------------------------------------------------------------*
*& 内表的定义
*&---------------------------------------------------------------------*
DATA:
I_ADD1 TYPE TABLE OF TS_ADD, "标准表
I_ADD2 TYPE STANDARD TABLE OF TS_ADD, "标准表
I_ADD3 TYPE SORTED TABLE OF TS_ADD WITH UNIQUE KEY FLAG, "排序表
I_ADD4 TYPE HASHED TABLE OF TS_ADD WITH UNIQUE KEY FLAG. "哈希表
* 带表头的内表
DATA I_ADD5 LIKE TABLE OF ST_ADD3 WITH HEADER LINE.
DATA I_ADD6 TYPE TABLE OF TS_ADD WITH HEADER LINE.
DATA:
BEGIN OF I_ADD7 OCCURS 0,
FLAG TYPE CHAR01, " 标识
ID TYPE ZWMQ_E_CODE, " ID
NAME1 TYPE ZSTD_WMQ001-Z_NAME, " 名称
Z_SCHID TYPE ZSTD_WMQ001-Z_SCHID, " 城市
END OF I_ADD7.
* 往内表追加数据
APPEND ST_ADD1 TO I_ADD1.
ST_ADD1-ID = 1002.
APPEND ST_ADD1 TO I_ADD1.
ST_ADD1-ID = 1003.
APPEND ST_ADD1 TO I_ADD1.
WRITE:/ '输出内表数据'.
LOOP AT I_ADD1 INTO ST_ADD1.
WRITE: / SY-TABIX.
WRITE: / ST_ADD1-FLAG,
ST_ADD1-ID,
ST_ADD1-NAME1,
ST_ADD1-Z_SCHID.
ENDLOOP.
IF SY-SUBRC = 0.
MESSAGE '数据遍历成功' TYPE 'S'." S 成功 W 警告 I 提示 都是没问题 E 错误 A 异常 有错误的
ELSE.
* MESSAGE '数据遍历失败' TYPE 'E'.
MESSAGE '数据遍历失败' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
*这个时候是把它当成结构使用
I_ADD5-FLAG = 'X' .
I_ADD5-ID = '1005'.
I_ADD5-NAME1 = 'TEST05'.
I_ADD5-Z_SCHID = '101'.
I_ADD5-Z_SCHID2 = '101'.
*APPEND I_ADD5.
APPEND I_ADD5 TO I_ADD5[].
SKIP.
WRITE '输出带表头的内表'.
LOOP AT I_ADD5[] INTO I_ADD5.
WRITE: / I_ADD5-FLAG,
I_ADD5-ID,
I_ADD5-NAME1,
I_ADD5-Z_SCHID.
ENDLOOP.
*&---------------------------------------------------------------------*
*& 读取内表数据
*&---------------------------------------------------------------------*
CLEAR ST_ADD1.
READ TABLE I_ADD1 INTO ST_ADD1
WITH KEY ID = '1003'.
SKIP.
WRITE: '读取内表数据1'.
WRITE: / ST_ADD1-FLAG,
ST_ADD1-ID,
ST_ADD1-NAME1,
ST_ADD1-Z_SCHID.
* 二分查找法(内表排序)
SORT I_ADD1 BY FLAG ASCENDING ID ASCENDING."ASCENDING 升序 默认升序
*SORT I_ADD1 BY FLAG ID ."ASCENDING 升序 默认升序
*SORT I_ADD1 BY FLAG DESCENDING ID DESCENDING."DESCENDING 降序
CLEAR ST_ADD1.
READ TABLE I_ADD1 INTO ST_ADD1
WITH KEY FLAG = ABAP_TRUE
ID = '1002'
BINARY SEARCH.
SKIP.
WRITE: '二分查找法'.
WRITE: / ST_ADD1-FLAG,
ST_ADD1-ID,
ST_ADD1-NAME1,
ST_ADD1-Z_SCHID.
* 指定行次读取
CLEAR ST_ADD1.
READ TABLE I_ADD1 INTO ST_ADD1 INDEX 1.
SKIP.
WRITE: '指定行次读取INDEX 1'.
WRITE: / ST_ADD1-FLAG,
ST_ADD1-ID,
ST_ADD1-NAME1,
ST_ADD1-Z_SCHID.
* 读取TRANSPORTING
*CLEAR ST_ADD1.
*READ TABLE I_ADD1 INTO ST_ADD1 INDEX 1 TRANSPORTING FLAG ID.
*SKIP.
*WRITE: '指定行次读取INDEX 1 TRANSPORTING FLAG ID'.
*WRITE: / ST_ADD1-FLAG,
* ST_ADD1-ID,
* ST_ADD1-NAME1,
* ST_ADD1-Z_SCHID.
*
*READ TABLE I_ADD1 TRANSPORTING NO FIELDS
* WITH KEY ID = '1002'.
*
*IF SY-SUBRC = 0.
* WRITE:'存在'.
*ELSE.
* WRITE:'不存在'.
*ENDIF.
* 内表分类汇总(COLLECT TABLE …)
*这个时候是把它当成结构使用
CLEAR:I_ADD2,"清空内表
ST_ADD2."清空结构体
ST_ADD2-FLAG = 'X' .
ST_ADD2-ID = '1005'.
ST_ADD2-NAME1 = 'TEST05'.
ST_ADD2-Z_SCHID = '101'.
ST_ADD2-Z_SCHFEE = 1000.
COLLECT ST_ADD2 INTO I_ADD2.
CLEAR ST_ADD2.
ST_ADD2-FLAG = 'X' .
ST_ADD2-ID = '1005'.
ST_ADD2-NAME1 = 'TEST05'.
ST_ADD2-Z_SCHID = '101'.
ST_ADD2-Z_SCHFEE = 2000.
COLLECT ST_ADD2 INTO I_ADD2.
LOOP AT I_ADD2 INTO DATA(ST_ADD2_2)
WHERE ID <> '1002'.
WRITE: / '测试collect'.
WRITE: / ST_ADD2_2-FLAG,
ST_ADD2_2-ID,
ST_ADD2_2-NAME1,
ST_ADD2_2-Z_SCHID,
ST_ADD2_2-Z_SCHFEE.
EXIT."退出循环语句
ENDLOOP.