FUNCTION zfm_mm_idn_create. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(IS_HEAD) TYPE ZSMM0024 *" VALUE(I_NO_COMMIT) TYPE XFELD OPTIONAL *" EXPORTING *" VALUE(E_CODE) TYPE CHAR1 *" VALUE(E_MSG) TYPE STRING *" VALUE(E_VBELN) TYPE VBELN_VL *" TABLES *" IT_ITEM STRUCTURE ZSMM0025 OPTIONAL *"---------------------------------------------------------------------- DATA:it_inb_delivery_detail TYPE TABLE OF bbp_inbd_d WITH HEADER LINE, return TYPE TABLE OF bapireturn, is_inb_delivery_header TYPE bbp_inbd_l. is_inb_delivery_header-deliv_date = is_head-eeind. *** Local Variables DATA lt_vbsk LIKE vbsk OCCURS 0 WITH HEADER LINE. DATA lt_komdlgn LIKE komdlgn OCCURS 0 WITH HEADER LINE. DATA lt_vbfs LIKE vbfs OCCURS 0 WITH HEADER LINE. DATA lt_vbls LIKE vbls OCCURS 0 WITH HEADER LINE. * DATA lf_h-ind LIKE sy-tabix. "Hilfsfeld Index DATA lf_v_vbeln LIKE likp-vbeln. "From delivery Number DATA lf_b_vbeln LIKE likp-vbeln. "To delivery Number DATA lt_prop LIKE wuebs OCCURS 100 WITH HEADER LINE. ****head lt_komdlgn-lfdat = is_head-eeind."交货日期 ****item LOOP AT it_item. "into et_po_detail. lt_komdlgn-spe_posnr = it_item-posnr. CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING input = it_item-matnr IMPORTING output = lt_komdlgn-matnr "物料编码 EXCEPTIONS length_error = 1 OTHERS = 2. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. lt_komdlgn-lfimg = it_item-bdmng."数量 CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' EXPORTING input = it_item-meins * LANGUAGE = SY-LANGU IMPORTING output = lt_komdlgn-meins "基本计量单位 EXCEPTIONS unit_not_found = 1 OTHERS = 2. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. lt_komdlgn-vrkme = lt_komdlgn-meins. " 销售单位 lt_komdlgn-vgbel = it_item-ebeln. "采购订单号 lt_komdlgn-vgpos = it_item-ebelp. "采购订单行号 lt_komdlgn-lgort = it_item-lgort. "库存地点 APPEND lt_komdlgn. CLEAR:it_item. ENDLOOP. *** Code from IDOC_INPUT_DESADV1 *** Not Available in 3.1 CALL FUNCTION 'ME_CONFIRMATION_VIA_EDI' TABLES t_kom = lt_komdlgn errors = lt_prop EXCEPTIONS OTHERS = 1. IF sy-subrc NE 0. e_code = 'E'. e_msg = 'Error Coccured in ME_CONFIRMATION_VIA_EDI'. RETURN. ENDIF. LOOP AT lt_komdlgn. * set default parameter lt_komdlgn-vgtyp = 'V'. lt_komdlgn-kzazu = 'X'. IF lt_komdlgn-lfart IS INITIAL. lt_komdlgn-lfart = 'EL'. ENDIF. MODIFY lt_komdlgn. ENDLOOP. ***** Create DATA: nrnr LIKE inri-nrrangenr. TABLES: tvsa. * Sammelgangsnummer vergeben lt_vbsk-mandt = sy-mandt. lt_vbsk-ernam = sy-uname. lt_vbsk-erdat = sy-datum. lt_vbsk-uzeit = sy-uzeit. lt_vbsk-smart = 'L'. SELECT SINGLE * FROM tvsa WHERE smart = lt_vbsk-smart. IF sy-subrc <> 0. *** Error Handling To be Done * Meldung ins Protokoll ENDIF. nrnr = tvsa-numki. CALL FUNCTION 'NUMBER_GET_NEXT' EXPORTING nr_range_nr = nrnr object = 'RV_SAMMG' IMPORTING number = lt_vbsk-sammg EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. *** Error Hadling TBD * Meldung ins Protokoll ENDIF. **** Call Core Function GN_DELIVERY_CREATE. CALL FUNCTION 'GN_DELIVERY_CREATE' EXPORTING vbsk_i = lt_vbsk no_commit = i_no_commit IMPORTING vbsk_e = lt_vbsk TABLES xkomdlgn = lt_komdlgn xvbfs = lt_vbfs xvbls = lt_vbls EXCEPTIONS OTHERS = 1. *** Error Handling IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno INTO e_msg WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ROLLBACK WORK. e_code = 'E'. e_msg = '内向交货单生成失败!' && e_msg. RETURN. ELSE. *返回内容为空的确实有错 IF lt_vbls[] IS INITIAL. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno INTO e_msg WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ROLLBACK WORK. e_code = 'E'. e_msg = '内向交货单生成失败!' && e_msg. RETURN. ENDIF. *不为空的,判断行数,多余一行的也是有问题 DATA(lt_vbls_l) = lt_vbls[]. SORT lt_vbls_l BY vbeln_lif. DELETE ADJACENT DUPLICATES FROM lt_vbls_l COMPARING vbeln_lif. IF lines( lt_vbls_l ) NE 1. ROLLBACK WORK. e_code = 'E'. e_msg = '当前数据会导致同时生成多张内向交货单,此情况不允许!'. RETURN. ELSE. *其他情况,基本就是通过了 IF i_no_commit IS NOT INITIAL."必须NO_COMMIT配合使用,不是的话默认COMMIT,NO_COMMIT需要做回滚。 ROLLBACK WORK. e_code = 'S'. e_msg = '测试通过!'. RETURN. ELSE. *总算成功 e_code = 'S'. e_msg = lt_vbls_l[ 1 ]-vbeln_lif &&'创建成功!' && e_msg. e_vbeln = lt_vbls_l[ 1 ]-vbeln_lif. *去掉前导0 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = e_vbeln IMPORTING output = e_vbeln. ENDIF. ENDIF. ENDIF. ENDFUNCTION.
网友评论