FUNCTION ZRFC_DNORDER_AUTO_CERATE. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(DELIV_NUMB) TYPE VBELN_VL *" EXPORTING *" VALUE(E_CODE) TYPE CHAR1 *" VALUE(E_MSG) TYPE STRING *" VALUE(E_VBELN_NEW) TYPE VBELN_VL *" TABLES *" IN_TABLE STRUCTURE ZWMS009 *"---------------------------------------------------------------------- DATA: LV_VBELN_N TYPE LIKP-VBELN, LV_REMAINING_WEIGHT TYPE LIPS-BRGEW, LV_UNIT_WEIGHT TYPE LIPS-BRGEW, LV_UNIT TYPE I, LV_NUMKI TYPE TVLK-NUMKI, LS_LIKP TYPE LIKP, LS_ITEMDATA TYPE BAPIOBDLVITEMDSP, LT_ITEMDATA TYPE STANDARD TABLE OF BAPIOBDLVITEMDSP, LT_RETURN TYPE STANDARD TABLE OF BAPIRET2. *-------------------- *第一部分 数据比较 *-------------------- SELECT * FROM LIPS WHERE VBELN EQ @DELIV_NUMB ORDER BY VBELN,POSNR INTO TABLE @DATA(LT_LIPS). LOOP AT IN_TABLE WHERE DELIV_NUMB EQ DELIV_NUMB AND ORDER_REQ_QTY IS NOT INITIAL. * 转换为内部单位 CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' EXPORTING INPUT = IN_TABLE-ORDER_UNIT * LANGUAGE = SY-LANGU IMPORTING OUTPUT = IN_TABLE-ORDER_UNIT * EXCEPTIONS * UNIT_NOT_FOUND = 1 * OTHERS = 2 . IF SY-SUBRC <> 0. * Implement suitable error handling here ENDIF. * 数量比较 READ TABLE LT_LIPS INTO DATA(LS_LIPS) WITH KEY VBELN = IN_TABLE-DELIV_NUMB POSNR = IN_TABLE-ITEMNO. CHECK SY-SUBRC EQ 0. * 单位转换(转换为销售单位) IF IN_TABLE-ORDER_UNIT NE LS_LIPS-MEINS. CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' EXPORTING I_MATNR = LS_LIPS-MATNR I_IN_ME = IN_TABLE-ORDER_UNIT ""传入单位 I_OUT_ME = LS_LIPS-VRKME I_MENGE = IN_TABLE-ORDER_REQ_QTY IMPORTING E_MENGE = IN_TABLE-ORDER_REQ_QTY EXCEPTIONS ERROR_IN_APPLICATION = 1 ERROR = 2 OTHERS = 3. ENDIF. * 校验数量 CHECK IN_TABLE-ORDER_REQ_QTY LT LS_LIPS-LFIMG. * 修改旧交货单的数据 LS_ITEMDATA-DELIV_NUMB = LS_LIPS-VBELN. LS_ITEMDATA-DELIV_ITEM = LS_LIPS-POSNR. LS_ITEMDATA-CURR_QTY = 'A'. LS_ITEMDATA-SALES_UNIT = LS_LIPS-VRKME. CALL FUNCTION 'UNIT_OF_MEASURE_SAP_TO_ISO' EXPORTING SAP_CODE = LS_ITEMDATA-SALES_UNIT IMPORTING ISO_CODE = LS_ITEMDATA-ISOCODE_SALES_UNIT EXCEPTIONS NOT_FOUND = 1 NO_ISO_CODE = 2 OTHERS = 3. IF SY-SUBRC <> 0. CLEAR LS_ITEMDATA-ISOCODE_SALES_UNIT. ENDIF. LS_ITEMDATA-SALES_QTY_NUM = LS_LIPS-UMVKZ. LS_ITEMDATA-SALES_QTY_DENOM = LS_LIPS-UMVKN. LS_ITEMDATA-DLV_QTY = IN_TABLE-ORDER_REQ_QTY. LS_ITEMDATA-DEL_QTY_FLO = IN_TABLE-ORDER_REQ_QTY. APPEND LS_ITEMDATA TO LT_ITEMDATA. CLEAR LS_ITEMDATA. ENDLOOP. *-------------------- *第二部分 旧单修改 *-------------------- IF LT_ITEMDATA[] IS NOT INITIAL. SELECT SINGLE LFART FROM LIKP WHERE VBELN EQ @DELIV_NUMB INTO @DATA(LV_LFART). SELECT SINGLE NUMKI INTO @LV_NUMKI FROM TVLK WHERE LFART EQ @LV_LFART. IF SY-SUBRC = 0. CALL FUNCTION 'NUMBER_GET_NEXT' EXPORTING NR_RANGE_NR = LV_NUMKI OBJECT = 'RV_BELEG' IMPORTING NUMBER = LV_VBELN_N EXCEPTIONS INTERVAL_NOT_FOUND = 1 NUMBER_RANGE_NOT_INTERN = 2 OBJECT_NOT_FOUND = 3 QUANTITY_IS_0 = 4 QUANTITY_IS_NOT_1 = 5 INTERVAL_OVERFLOW = 6 OTHERS = 99. IF SY-SUBRC NE 0. " Cannot find number range. Should not happened. MESSAGE ID SY-MSGID TYPE 'A' NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. CALL FUNCTION 'BAPI_OUTB_DELIVERY_SPLIT_DEC' EXPORTING DELIVERY = DELIV_NUMB DELIVERYNEW = LV_VBELN_N DELIVERYITEMSBELONGTO = 'O' BUSINESSPROCESS = '0001' TABLES ITEMDATA = LT_ITEMDATA RETURN = LT_RETURN. IF LINE_EXISTS( LT_RETURN[ TYPE = 'E' ] ) . E_CODE = 'E'. E_MSG = '拆分失败!'. ELSE. E_CODE = 'S'. E_MSG = '拆分成功!'. E_VBELN_NEW = LV_VBELN_N. ENDIF. ENDIF. ENDIF. ENDFUNCTION.
网友评论