接口创建BOM,包括相关性
FUNCTION zplm_bom.
*"----------------------------------------------------------------------
*"*"本地接口:
*" TABLES
*" IT_BOM STRUCTURE ZPLM_BOM OPTIONAL
*" IT_MESSAGE STRUCTURE MESSAGE OPTIONAL
*"----------------------------------------------------------------------
DATA:ls_zplm_bomlog TYPE zplm_bomlog.
ls_zplm_bomlog-datum = sy-datum.
ls_zplm_bomlog-uzeit = sy-uzeit.
LOOP AT IT_BOM INTO DATA(ls_log).
MOVE-CORRESPONDING ls_log TO ls_zplm_bomlog.
ADD 1 TO ls_zplm_bomlog-zsn.
MODIFY zplm_bomlog FROM ls_zplm_bomlog.
ENDLOOP.
COMMIT WORK.
DATA: l_bom_header LIKE bicsk,
l_group_data LIKE bgr00,
l_msgid LIKE t100-arbgb,
l_msgno LIKE t100-msgnr,
p_msgno LIKE sy-msgno,
l_msgty LIKE sy-msgty,
l_msgv1 LIKE sy-msgv1,
l_msgv2 LIKE sy-msgv2,
l_msgv3 LIKE sy-msgv3,
l_msgv4 LIKE sy-msgv4 .
DATA: lt_bom_item LIKE TABLE OF bicsp,
ls_bom_item LIKE LINE OF lt_bom_item,
lt_sub_item LIKE bicsu OCCURS 0 WITH HEADER LINE,
gs_msg LIKE message,
l_error(1),
L_POSNR TYPE I.
DATA: BEGIN OF ls_list,
matnr LIKE rc29n-matnr , "物料编码
werks LIKE mast-werks , "工厂
sortf LIKE rc29p-sortf, "排序字符串
knnam LIKE cukb-knnam, "相关性名称
stlnr TYPE stnum, "物料单
knnum TYPE knnum, "知识元素的内部号
END OF ls_list,
lt_list LIKE STANDARD TABLE OF ls_list.
l_bom_header-tcode = 'CS01'.
LOOP AT it_bom INTO DATA(ls_bom).
l_bom_header-werks = ls_bom-werks.
l_bom_header-matnr = ls_bom-matnr.
l_bom_header-bmeng = ls_bom-emeng.
l_bom_header-datuv = ls_bom-datuv.
* l_bom_header-stlal = wa_it_upload-stlal.
l_bom_header-stlan = '1'.
ADD 10 TO L_POSNR.
CLEAR ls_bom_item.
ls_bom_item-xline = '1'.
ls_bom_item-posnr = L_POSNR.
ls_bom_item-posnr = |{ ls_bom_item-posnr ALPHA = IN }|.
ls_bom_item-postp = 'L'.
ls_bom_item-idnrk = ls_bom-idnrk.
ls_bom_item-menge = ls_bom-menge.
ls_bom_item-meins = ls_bom-meins.
ls_bom_item-sortf = ls_bom-sortf.
APPEND ls_bom_item TO lt_bom_item.
"相关性
ls_list-matnr = ls_bom-matnr.
ls_list-werks = ls_bom-werks.
ls_list-sortf = ls_bom-sortf.
ls_list-knnam = ls_bom-knnam.
APPEND ls_list TO lt_list.
AT END OF matnr.
CALL FUNCTION 'CS_BI_BOM_CREATE_BATCH_INPUT1'
EXPORTING
* BDC_FLAG = ' '
bom_header = l_bom_header
* CLOSE_GROUP = ' '
commit_work = 'X'
group_data = l_group_data
* NEW_GROUP = ' '
tcode_mode = 'N'
tcode_update = 'S'
IMPORTING
msgid = l_msgid
msgno = l_msgno
msgty = l_msgty
msgv1 = l_msgv1
msgv2 = l_msgv2
msgv3 = l_msgv3
msgv4 = l_msgv4
TABLES
bom_item = lt_bom_item
bom_sub_item = lt_sub_item.
p_msgno = l_msgno.
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
msgid = l_msgid
msgno = p_msgno
msgty = l_msgty
msgv1 = l_msgv1
msgv2 = l_msgv2
msgv3 = l_msgv3
msgv4 = l_msgv4
msgv5 = space
IMPORTING
error = l_error
messg = gs_msg
EXCEPTIONS
OTHERS = 1.
APPEND gs_msg TO it_message.
CLEAR:lt_bom_item,l_msgid,l_msgno,l_msgty,l_msgv1,l_msgv2,l_msgv3,l_msgv4,l_error,gs_msg.
ENDAT.
ENDLOOP.
"相关性。
IF lt_list IS NOT INITIAL.
DATA:ls_cuob TYPE cuob.
"判断物料是否属于 可配置物料。
SELECT matnr,kzkfg INTO TABLE @DATA(lt_mara)
FROM mara
FOR ALL ENTRIES IN @lt_list
WHERE matnr = @lt_list-matnr.
SORT lt_mara BY matnr.
SELECT matnr,werks,stlnr INTO TABLE @DATA(lt_mast)
FROM mast
FOR ALL ENTRIES IN @lt_list
WHERE matnr = @lt_list-matnr
AND werks = @lt_list-werks.
SORT lt_mast BY matnr werks.
SELECT knnam,knnum INTO TABLE @DATA(lt_cukb)
FROM cukb
FOR ALL ENTRIES IN @lt_list
WHERE knnam = @lt_list-knnam.
SORT lt_cukb BY knnam.
IF lt_mara IS NOT INITIAL.
* ----取相关性编号
SELECT MAX( knobj ) FROM stpo
INTO @DATA(lv_knobj)
WHERE knobj >= '300000000000000000'
AND knobj <= '399999999999999999'
.
IF sy-subrc NE 0 OR lv_knobj = '000000000000000000'.
lv_knobj = '300000000000000000'.
ENDIF.
LOOP AT lt_list INTO ls_list.
READ TABLE lt_mara INTO DATA(ls_mara) WITH KEY matnr = ls_list-matnr BINARY SEARCH.
IF sy-subrc EQ 0.
READ TABLE lt_cukb INTO DATA(ls_cukb) WITH KEY knnam = ls_list-knnam BINARY SEARCH.
IF sy-subrc EQ 0.
READ TABLE lt_mast INTO DATA(ls_mast) WITH KEY matnr = ls_list-matnr werks = ls_list-werks BINARY SEARCH.
IF sy-subrc EQ 0.
ls_list-stlnr = ls_mast-stlnr.
ls_list-knnum = ls_cukb-knnum.
ADD 1 TO lv_knobj.
SELECT SINGLE * INTO @DATA(ls_stpo)
FROM stpo
WHERE stlty = 'M'
AND stlnr = @ls_mast-stlnr
AND sortf = @ls_list-sortf.
IF sy-subrc EQ 0.
IF ls_stpo-knobj NE space.
DELETE FROM cuob WHERE knobj = ls_stpo-knobj.
COMMIT WORK AND WAIT.
ENDIF.
ls_stpo-knobj = lv_knobj.
MODIFY stpo FROM ls_stpo.
ls_cuob-mandt = sy-mandt.
ls_cuob-kntab = 'STPO'.
ls_cuob-knobj = lv_knobj.
ls_cuob-knnum = ls_cukb-knnum.
MODIFY cuob FROM ls_cuob.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
CLEAR:ls_mara,ls_cukb,ls_mast,ls_stpo,ls_cuob.
ENDLOOP.
ENDIF.
ENDIF.
ENDFUNCTION.