DEMO代码
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(IF_EVENT) TYPE HUWBEVENT
*" TABLES
*" IT_DATA (自己定义)
*" ET_data(自己定义)
*"----------------------------------------------------------------------
DATA:lt_ser06 TYPE TABLE OF ser06.
DATA:ls_ser06 TYPE ser06.
DATA:ls_data LIKE LINE OF it_data.
DATA:lv_lines TYPE int4.
DATA:ls_tmp LIKE LINE OF it_data.
DATA:ls_edata LIKE LINE OF et_block.
DATA: it_move_to TYPE hum_data_move_to_t WITH HEADER LINE.
DATA: it_external_id TYPE hum_exidv_t WITH HEADER LINE.
DATA:is_imkpf TYPE imkpf.
DATA: l_subrc TYPE sysubrc,
wa_message TYPE huitem_messages,
it_message TYPE huitem_messages_t WITH HEADER LINE.
DATA: lv_mblnr TYPE mblnr.
DATA:hu_items TYPE hum_humseg_t.
DATA:ls_hu_item LIKE LINE OF hu_items.
FIELD-SYMBOLS: LIKE LINE OF hu_items.
CLEAR ls_tmp.
CLEAR lv_lines.
CLEAR lv_mblnr.
CHECK it_data[] IS NOT INITIAL.
SELECT * FROM ser06 INTO TABLE lt_ser06
FOR ALL ENTRIES IN it_data
WHERE exidv = it_data-exidv.
"去重
SORT it_data BY matnr sernr.
DELETE ADJACENT DUPLICATES FROM it_data COMPARING matnr sernr.
SORT it_data BY matnr werks lgort.
CLEAR it_external_id[]. REFRESH it_external_id.
CLEAR it_move_to[]. REFRESH it_move_to.
DATA:lv_count TYPE int4.
CLEAR lv_count.
LOOP AT it_data INTO ls_data .
lv_lines = lv_lines 1.
IF ls_tmp IS INITIAL."第一次
ls_tmp = ls_data.
ENDIF.
*&不同工厂库位 不同行项目
IF ls_tmp-matnr = ls_data-matnr
AND ls_tmp-werks = ls_data-werks
AND ls_tmp-lgort = ls_data-lgort.
it_external_id-exidv = ls_data-exidv.
APPEND it_external_id.
*&move-to HU_ITEMS
READ TABLE lt_ser06 INTO ls_ser06
WITH KEY exidv = ls_data-exidv.
CLEAR ls_hu_item.
ls_hu_item-venum = ls_ser06-venum.
ls_hu_item-vepos = ls_ser06-vepos.
*** ls_hu_item-quantity = 1. "no need
READ TABLE hu_items ASSIGNING
WITH KEY
venum = ls_hu_item-venum
vepos = ls_hu_item-vepos.
IF sy-subrc = 0.
* -quantity = -quantity 1.
ELSE.
APPEND ls_hu_item TO hu_items.
ENDIF.
ELSE.
CLEAR lv_mblnr.
it_move_to-lgort = ls_tmp-lgort.
it_move_to-werks = ls_tmp-werks.
it_move_to-matnr = ls_tmp-matnr.
it_move_to-hu_items = hu_items[].
APPEND it_move_to.
CLEAR hu_items[].
it_external_id-exidv = ls_data-exidv.
APPEND it_external_id.
*&move-to HU_ITEMS
READ TABLE lt_ser06 INTO ls_ser06
WITH KEY exidv = ls_data-exidv.
CLEAR ls_hu_item.
ls_hu_item-venum = ls_ser06-venum.
ls_hu_item-vepos = ls_ser06-vepos.
** ls_hu_item-quantity = 1."no need
READ TABLE hu_items ASSIGNING
WITH KEY
venum = ls_hu_item-venum
vepos = ls_hu_item-vepos.
IF sy-subrc = 0. ELSE.
APPEND ls_hu_item TO hu_items.
ENDIF.
*&g更新参考变量
ls_tmp = ls_data.
ENDIF." IF ls_tmp-matnr = ls_data-matnr
ENDLOOP." LOOP AT it_data INTO ls_data .
it_move_to-lgort = ls_data-lgort.
it_move_to-werks = ls_data-werks.
it_move_to-matnr = ls_data-matnr.
it_move_to-hu_items = hu_items[].
APPEND it_move_to.
CLEAR lv_mblnr.
is_imkpf-budat = sy-datum.
is_imkpf-bldat = sy-datum.
CLEAR lv_mblnr.
CLEAR ls_edata.
"清空变量
CALL FUNCTION 'SERIAL_INTTAB_REFRESH'
* EXPORTING
* OBJECTS_STATUS_REFRESH = ' '
.
CALL FUNCTION 'HU_CREATE_GOODS_MOVEMENT'
EXPORTING
if_event = if_event "'0023' "block '0022' "unblock
if_commit = space
is_imkpf = is_imkpf
it_move_to = it_move_to[]
it_external_id = it_external_id[]
IMPORTING
ef_posted = l_subrc "return
es_message = wa_message "export message
et_messages = it_message[]. "
READ TABLE it_message WITH KEY
msgid = 'HUGENERAL'
msgty = 'S'
msgno = '309'.
IF sy-subrc = 0.
lv_mblnr = it_message-msgv1.
ELSE.
ENDIF."
ENDFUNCTION.