创建指定数量的PO(不使用SAP建议采购的数量)
以下代码是RFC接口:
表参数结构:
代码如下所示:
FUNCTION RFC_Z_SCE_POCREATE.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(IBUKRS) TYPE BUKRS
*" VALUE(ILIFNR) TYPE ELIFN
*" VALUE(IBSART) TYPE ESART
*" VALUE(IBEDAT) TYPE EBDAT
*" VALUE(IEKORG) TYPE EKORG
*" VALUE(IEKGRP) TYPE EKGRP
*" VALUE(IWAERS) TYPE WAERS
*" EXPORTING
*" VALUE(OEBELN) TYPE EBELN
*" VALUE(OMSGNO) TYPE CHAR01
*" VALUE(OMESSG) TYPE STRING
*" TABLES
*" T_POITEM STRUCTURE ZMMSCEPOITEM
*"----------------------------------------------------------------------
DATA: L_PO_ITEM(5) TYPE N.
DATA: L_BSART LIKE IBSART.
DATA: L_TEMP TYPE STRING.
DATA: LS_PO_HEADER LIKE BAPIMEPOHEADER,
LS_POHEADERX LIKE BAPIMEPOHEADERX.
DATA: LT_PO_ITEMS LIKE BAPIMEPOITEM OCCURS 0 WITH HEADER LINE,
LT_PO_ITEM_SCHEDULES LIKE BAPIMEPOSCHEDULE OCCURS 0 WITH HEADER LINE,
LT_POACCOUNT LIKE BAPIMEPOACCOUNT OCCURS 0 WITH HEADER LINE,
LT_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
LT_ITEMX LIKE BAPIMEPOITEMX OCCURS 0 WITH HEADER LINE,
LT_SCHEDULX LIKE BAPIMEPOSCHEDULX OCCURS 0 WITH HEADER LINE,
LT_POACCOUNTX LIKE BAPIMEPOACCOUNTX OCCURS 0 WITH HEADER LINE.
DATA: LT_POCOND LIKE BAPIMEPOCOND OCCURS 0 WITH HEADER LINE,
LT_POCONDX LIKE BAPIMEPOCONDX OCCURS 0 WITH HEADER LINE.
DATA: LT_POCOMPONENTS LIKE BAPIMEPOCOMPONENT OCCURS 0 WITH HEADER LINE,
LT_POCOMPONENTSX LIKE BAPIMEPOCOMPONENTX OCCURS 0 WITH HEADER LINE.
DATA: L_MSG TYPE STRING.
DATA: RT_FLAG(1) TYPE C.
REFRESH: LT_PO_ITEMS,LT_PO_ITEM_SCHEDULES,LT_RETURN,
LT_ITEMX,LT_SCHEDULX.
CASE IBSART.
WHEN 'NB'.
MOVE 'NB' TO L_BSART.
WHEN 'KB'.
MOVE 'NB' TO L_BSART.
WHEN 'LB'.
MOVE 'NB' TO L_BSART.
ENDCASE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = ILIFNR
IMPORTING
OUTPUT = ILIFNR.
"抬头信息
MOVE IBUKRS TO LS_PO_HEADER-COMP_CODE.
MOVE L_BSART TO LS_PO_HEADER-DOC_TYPE.
MOVE IBEDAT TO LS_PO_HEADER-CREAT_DATE.
MOVE ILIFNR TO LS_PO_HEADER-VENDOR.
MOVE IEKORG TO LS_PO_HEADER-PURCH_ORG.
MOVE IEKGRP TO LS_PO_HEADER-PUR_GROUP.
MOVE IWAERS TO LS_PO_HEADER-CURRENCY.
LS_POHEADERX-COMP_CODE = 'X'.
LS_POHEADERX-DOC_TYPE = 'X'.
LS_POHEADERX-CREAT_DATE = 'X'.
LS_POHEADERX-VENDOR = 'X'.
LS_POHEADERX-PURCH_ORG = 'X'.
LS_POHEADERX-PUR_GROUP = 'X'.
LS_POHEADERX-CURRENCY = 'X'.
FIELD-SYMBOLS: <FS_POITEM> LIKE LINE OF T_POITEM.
LOOP AT T_POITEM ASSIGNING <FS_POITEM>.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
INPUT = <FS_POITEM>-MATNR
IMPORTING
OUTPUT = <FS_POITEM>-MATNR.
"行项目号
L_PO_ITEM = L_PO_ITEM + 10.
LT_PO_ITEMS-PO_ITEM = L_PO_ITEM.
LT_PO_ITEMS-PLANT = <FS_POITEM>-WERKS.
LT_PO_ITEMS-QUANTITY = <FS_POITEM>-MENGE.
LT_PO_ITEMS-STGE_LOC = <FS_POITEM>-LGORT.
LT_PO_ITEMS-PO_UNIT = 'ST'.
LT_PO_ITEMS-NO_ROUNDING = 'X'. "以输入数量为准,不使用SAP建议舍入的数量
IF <FS_POITEM>-MATNR IS INITIAL."文本订单
LT_PO_ITEMS-SHORT_TEXT = <FS_POITEM>-TXZ01.
LT_PO_ITEMS-ACCTASSCAT = 'K'.
LT_PO_ITEMS-MATL_GROUP = <FS_POITEM>-MATKL.
LT_POACCOUNT-PO_ITEM = L_PO_ITEM.
LT_POACCOUNT-GL_ACCOUNT = <FS_POITEM>-SAKTO.
LT_POACCOUNT-COSTCENTER = <FS_POITEM>-KOSTL.
LT_POACCOUNT-ORDERID = <FS_POITEM>-AUFNR.
APPEND LT_POACCOUNT.CLEAR LT_POACCOUNT.
LT_POACCOUNTX-PO_ITEM = L_PO_ITEM.
LT_POACCOUNTX-GL_ACCOUNT = 'X'.
LT_POACCOUNTX-COSTCENTER = 'X'.
LT_POACCOUNTX-ORDERID = 'X'.
APPEND LT_POACCOUNTX.CLEAR LT_POACCOUNTX.
CLEAR LT_POCOND.
LT_POCOND-ITM_NUMBER = L_PO_ITEM.
LT_POCOND-COND_TYPE = 'PBXX'.
LT_POCOND-COND_VALUE = 1.
LT_POCOND-COND_P_UNT = 1.
LT_POCOND-CURRENCY = IWAERS.
LT_POCOND-CHANGE_ID = 'U'.
APPEND LT_POCOND.
CLEAR LT_POCONDX.
LT_POCONDX-ITM_NUMBER = L_PO_ITEM.
LT_POCONDX-COND_TYPE = 'X'.
LT_POCONDX-COND_VALUE = 'X'.
LT_POCONDX-COND_P_UNT = 'X'.
LT_POCONDX-CURRENCY = 'X'.
LT_POCONDX-CHANGE_ID = 'X'.
APPEND LT_POCONDX.
ELSE."正常订单
IF IBSART EQ 'LB'.
LT_PO_ITEMS-ITEM_CAT = '3'.
ENDIF.
LT_PO_ITEMS-MATERIAL = <FS_POITEM>-MATNR.
ENDIF.
APPEND LT_PO_ITEMS.CLEAR LT_PO_ITEMS.
LT_ITEMX-PO_ITEM = L_PO_ITEM.
LT_ITEMX-PO_ITEMX = 'X'.
LT_ITEMX-PLANT = 'X'.
LT_ITEMX-QUANTITY = 'X'.
LT_ITEMX-STGE_LOC = 'X'.
LT_ITEMX-PO_UNIT = 'X'.
LT_ITEMX-NO_ROUNDING = 'X'.
IF <FS_POITEM>-MATNR IS INITIAL.
LT_ITEMX-SHORT_TEXT = 'X'.
LT_ITEMX-ACCTASSCAT = 'X'.
LT_ITEMX-MATL_GROUP = 'X'.
ELSE.
IF IBSART EQ 'LB'.
LT_ITEMX-ITEM_CAT = 'X'.
ENDIF.
LT_ITEMX-MATERIAL = 'X'.
ENDIF.
APPEND LT_ITEMX.CLEAR LT_ITEMX.
LT_PO_ITEM_SCHEDULES-PO_ITEM = L_PO_ITEM.
LT_PO_ITEM_SCHEDULES-DELIVERY_DATE = <FS_POITEM>-EINDT.
APPEND LT_PO_ITEM_SCHEDULES.
CLEAR LT_PO_ITEM_SCHEDULES.
LT_SCHEDULX-PO_ITEM = L_PO_ITEM.
LT_SCHEDULX-PO_ITEMX = 'X'.
LT_SCHEDULX-DELIVERY_DATE = 'X'.
APPEND LT_SCHEDULX.
CLEAR LT_SCHEDULX.
ENDLOOP.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
POHEADER = LS_PO_HEADER
POHEADERX = LS_POHEADERX
IMPORTING
EXPPURCHASEORDER = OEBELN
TABLES
RETURN = LT_RETURN
POITEM = LT_PO_ITEMS
POITEMX = LT_ITEMX
POSCHEDULE = LT_PO_ITEM_SCHEDULES
POSCHEDULEX = LT_SCHEDULX
POACCOUNT = LT_POACCOUNT
POACCOUNTX = LT_POACCOUNTX
POCOND = LT_POCOND
POCONDX = LT_POCONDX.
**** COMMIT WORK
READ TABLE LT_RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC NE 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
CONCATENATE '采购订单' OEBELN '创建成功.'
INTO OMESSG.
MOVE '0' TO OMSGNO.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT LT_RETURN WHERE TYPE = 'E'.
MESSAGE ID LT_RETURN-ID TYPE LT_RETURN-TYPE NUMBER LT_RETURN-NUMBER
WITH LT_RETURN-MESSAGE_V1 LT_RETURN-MESSAGE_V2
LT_RETURN-MESSAGE_V3 LT_RETURN-MESSAGE_V4
INTO L_TEMP.
CONCATENATE OMESSG L_TEMP INTO OMESSG SEPARATED BY ';'.
ENDLOOP.
MOVE '1' TO OMSGNO.
ENDIF.
ENDFUNCTION.