记录一下反查的代码,稍微改改就能用
LOOP AT gt_item.
"第一次反查
CALL FUNCTION 'CS_WHERE_USED_MAT'
EXPORTING
datub = sy-datum
datuv = sy-datum
matnr = gt_item-matnr
werks = p_werks
TABLES
wultb = lt_wultb
equicat = gt_equicat
kndcat = gt_kndcat
matcat = gt_matcat
stdcat = gt_stdcat
tplcat = gt_tplcat
prjcat = gt_prjcat
EXCEPTIONS
call_invalid = 1
material_not_found = 2
no_where_used_rec_found = 3
no_where_used_rec_selected = 4
no_where_used_rec_valid = 5
OTHERS = 6.
"如果没有反查到结果,说明此组件没有上层物料,直接写到FGCODE表
"设置标记为X代表已经为最上层物料
IF lt_wultb[] IS INITIAL.
MOVE: p_werks TO gt_fgcode-werks,
gt_item-matnr TO gt_fgcode-fgcode,
gt_item-matnr TO gt_fgcode-matnr,
'X' TO gt_fgcode-flag.
APPEND gt_fgcode.
CLEAR: gt_fgcode.
ELSE.
"反查到有上层结果后,在进行递归反查
LOOP AT lt_wultb INTO gs_wultb.
MOVE: gs_wultb-werks TO gt_fgcode-werks,
gs_wultb-matnr TO gt_fgcode-fgcode,
gs_wultb-idnrk TO gt_fgcode-matnr.
APPEND gt_fgcode.
CLEAR: gt_fgcode.
ENDLOOP.
PERFORM frm_get_fgcode.
ENDIF.
ENDLOOP.
DATA: lt_wultb LIKE TABLE OF gs_wultb,
lt_mara LIKE TABLE OF mara WITH HEADER LINE.
DATA: lv_matnr LIKE mara-matnr,
lv_fgcode LIKE mara-matnr.
LOOP AT gt_fgcode WHERE flag NE 'X'.
"将之前反查到的FGCODE字段值作为组件向上反查
REFRESH: lt_wultb.
CLEAR: lv_fgcode.
lv_fgcode = gt_fgcode-fgcode.
CALL FUNCTION 'CS_WHERE_USED_MAT'
EXPORTING
datub = sy-datum
datuv = sy-datum
matnr = lv_fgcode
werks = gt_fgcode-werks
TABLES
wultb = lt_wultb
equicat = gt_equicat
kndcat = gt_kndcat
matcat = gt_matcat
stdcat = gt_stdcat
tplcat = gt_tplcat
prjcat = gt_prjcat
EXCEPTIONS
call_invalid = 1
material_not_found = 2
no_where_used_rec_found = 3
no_where_used_rec_selected = 4
no_where_used_rec_valid = 5
OTHERS = 6.
"如果此行未查到结果,说明为最上层物料,赋值标记X
IF lt_wultb[] IS INITIAL.
MOVE: 'X' TO gt_fgcode-flag.
MODIFY gt_fgcode.
CLEAR: gt_fgcode.
ELSE.
"如果还有上层物料,先保存最原始组件,删除中间料的行,
"将新查到的物料值赋值到FGCODE表
lv_matnr = gt_fgcode-matnr.
DELETE gt_fgcode.
LOOP AT lt_wultb INTO gs_wultb.
MOVE: gs_wultb-werks TO gt_fgcode-werks,
gs_wultb-matnr TO gt_fgcode-fgcode,
gs_wultb-idnrk TO gt_fgcode-matnr.
APPEND gt_fgcode.
CLEAR: gt_fgcode.
ENDLOOP.
ENDIF.
ENDLOOP.
FGCODE表就是反查结果了,根据需要区分成品半成品等。