参考内表
在SAP ABAP中,FOR ALL ENTRIES IN
是一种优化内表处理的方法,它可以帮助您快速地从SAP数据表中选择和过滤一组记录。
使用FOR ALL ENTRIES IN
,您可以选择一个与目标字段匹配的内表,并使用此内表的值来过滤数据表,以便只返回与内表中的值匹配的数据记录。
格式
SELECT <F1...FN>
INTO CORRESPONDING FIELDS OF TABLE <itab1>
FROM <dbtab>
FOR ALL ENTRIES IN <itab2>
WHERE<condation>.
上述参考内表取数时,要要先检查内表不能为空。
CHECK <itab2> IS NOT INITIAL. "检查内表是否为空
示例
以下是一个使用FOR ALL ENTRIES IN
的基本示例:
REPORT Z_EXAMPLE_REPORT.
TYPES: BEGIN OF t_sap_data,
field1 TYPE string,
field2 TYPE string,
field3 TYPE string,
END OF t_sap_data.
DATA: t_sap_data TYPE TABLE OF t_sap_data.
DATA: itab TYPE STANDARD TABLE OF t_sap_data,
wa_sap_data TYPE t_sap_data,
wa_filter TYPE t_sap_data.
START-OF-SELECTION.
" Let's assume we have a filter table `itab` with some values
wa_filter-field1 = 'Value1'.
wa_filter-field2 = 'Value2'.
APPEND wa_filter TO itab.
" Now let's use `FOR ALL ENTRIES IN` to filter data from table `sap_data_table`
SELECT field1 field2 field3
FROM sap_data_table
INTO TABLE t_sap_data
FOR ALL ENTRIES IN itab
WHERE field1 = itab-field1
AND field2 = itab-field2.
" Now we can process the filtered table `t_sap_data`
LOOP AT t_sap_data INTO wa_sap_data.
APPEND wa_sap_data TO itab.
ENDLOOP.
" Now you can do additional processing on the internal table `itab`
在上面的示例中,我们首先创建了一个过滤表itab
,并将具有特定值的记录添加到该表中。然后,我们使用FOR ALL ENTRIES IN
从表sap_data_table
中选择具有特定值的记录,并将结果存储在内表t_sap_data
中。接下来,我们使用循环将过滤后的记录复制到包含过滤器的新内表itab
中,并可以在该表上执行其他处理或后续操作。
简单abap程序
REPORT Z_EXAMPLE_REPORT.
* 定义结构体
TYPES: begin of TY_MARD,
MATNR TYPE MARD-MATNR, "物料号
MTART TYPE MARA-MTART, "物料类型
LABST TYPE MARD-LABST, "数量
END OF TY_MARD.
TYPES: BEGIN OF TY_MARA,
MATNR TYPE MARA-MATNR, "物料号
MEINS TYPE MARA-MEINS, "单位
END OF TY_MARA.
TYPES:BEGIN OF TY_OUT,
MATNR TYPE MARD-MATNR, "物料号
MTART TYPE MARA-MTART, "物料类型
LABST TYPE MARD-LABST, "数量
MEINS TYPE MARA-MEINS, "单位
END OF TY_OUT.
* 定义变量和内表
DATA: WA_MARD TYPE TY_MARD.
DATA: IT_MARD TYPE STANDARD TABLE OF TY_MARD.
DATA: WA_MARA TYPE TY_MARA.
DATA: IT_MARA TYPE STANDARD TABLE OF TY_MARA.
DATA: WA_OUT TYPE TY_OUT.
DATA: IT_OUT TYPE STANDARD TABLE OF TY_OUT.
* 添加几条内表TY_MARD数据
WA_MARD-MATNR = 'S-201'.
WA_MARD-MTART = 'FERT'.
WA_MARD-LABST = 43.
APPEND WA_MARD TO IT_MARD.
WA_MARD-MATNR = 'S-203'."物料号
WA_MARD-MTART = 'HALB'. "物料类型
WA_MARD-LABST = 65. "数量
COLLECT WA_MARD INTO IT_MARD.
WA_MARD-MATNR = 'S-208'."物料号
WA_MARD-MTART = 'HALB'. "物料类型
WA_MARD-LABST = 65. "数量
INSERT WA_MARD INTO TABLE IT_MARD.
LOOP AT IT_MARD INTO WA_MARD.
WRITE:/ WA_MARD-MATNR,"物料号
WA_MARD-MTART,"物料类型
WA_MARD-LABST."数量
ENDLOOP.
*-------------------------------------------
* 参考内表 IT_MARD 取物料的 单位
*-------------------------------------------
CHECK IT_MARD IS NOT INITIAL. "检查内表是否为空
select MATNR
MEINS
INTO CORRESPONDING FIELDS OF TABLE IT_MARA
FROM MARA
FOR ALL ENTRIES IN IT_MARD "参考内表
WHERE MARA~MATNR = IT_MARD-MATNR.
*-------------------------------------------
* 数据整合 两个内表整合成新的内表
*-------------------------------------------
LOOP AT IT_MARD INTO WA_MARD.
WA_OUT-MATNR = WA_MARD-MATNR.
WA_OUT-MTART = WA_MARD-MTART.
WA_OUT-LABST = WA_MARD-LABST.
"读取内表 IT_MARA 上的一条数据 存入 WA_MARA 中
READ TABLE IT_MARA INTO WA_MARA WITH KEY MATNR = WA_MARD-MATNR.
IF sy-subrc = 0.
WA_OUT-MEINS = WA_MARA-MEINS.
ENDIF.
APPEND WA_OUT TO IT_OUT.
clear WA_OUT. "清除变量存储的数据
ENDLOOP.
LOOP AT IT_OUT INTO WA_OUT.
WRITE:/ WA_OUT-MATNR,"物料号
WA_OUT-MTART,"物料类型
WA_OUT-LABST,"数量
WA_OUT-MEINS."单位
ENDLOOP.
标签:MARD,内表,WA,参考,MARA,sap,TYPE,OUT
From: https://www.cnblogs.com/itelephant/p/17428576.html