事务代码:me21n
-
- BP实现
*&---------------------------------------------------------------------*
*& Report ZTEST001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST001.
"""创建采购订单
DATA:gs_poheader TYPE bapimepoheader,
gs_poheaderx TYPE bapimepoheaderx,
gt_return TYPE STANDARD TABLE OF bapiret2,
gwa_return TYPE bapiret2,
gt_item TYPE STANDARD TABLE OF bapimepoitem,
gwa_item TYPE bapimepoitem,
gt_itemx TYPE STANDARD TABLE OF bapimepoitemx,
gwa_itemx TYPE bapimepoitemx,
gt_poschedule TYPE STANDARD TABLE OF bapimeposchedule,
gwa_poschedule TYPE bapimeposchedule,
gt_poschedulex TYPE STANDARD TABLE OF bapimeposchedulx,
gwa_poschedulex TYPE bapimeposchedulx,
gt_pocomponents TYPE STANDARD TABLE OF bapimepocomponent,
gwa_pocomponents TYPE bapimepocomponent,
gwa_pocomponents_temp TYPE bapimepocomponent,
gt_pocomponentsx TYPE STANDARD TABLE OF bapimepocomponentx,
gwa_pocomponentsx TYPE bapimepocomponentx.
DATA:lv_num TYPE bapimepoheader-po_number.
"抬头
gs_poheader-doc_type = 'Z02'."采购订单类型
gs_poheader-PO_NUMBER = '2190400015'."采购凭证编号
"抬头创建标志
gs_poheaderx-doc_type = 'X'.
gs_poheaderx-PO_NUMBER = 'X'."采购凭证编号
"行项目
gwa_item-po_item = '00010'. "采购凭证的项目编号
gwa_item-quantity = 10."采购订单数量
gwa_item-AGREEMENT = '3190400002'." 主采购协议号
APPEND gwa_item TO gt_item.
gwa_itemx-po_item = '00010'. "采购凭证的项目编号
gwa_itemx-quantity = 'X'. " 采购订单数量
gwa_itemx-AGREEMENT = 'X'." 主采购协议号
APPEND gwa_itemx TO gt_itemx.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = gs_poheader
poheaderx = gs_poheaderx
* POADDRVENDOR =
* TESTRUN =
* MEMORY_UNCOMPLETE =
* MEMORY_COMPLETE =
* POEXPIMPHEADER =
* POEXPIMPHEADERX =
* VERSIONS =
* NO_MESSAGING =
* NO_MESSAGE_REQ =
* NO_AUTHORITY =
no_price_from_po = 'X'
* PARK_COMPLETE =
* PARK_UNCOMPLETE =
IMPORTING
exppurchaseorder = lv_num
* EXPHEADER =
* EXPPOEXPIMPHEADER =
TABLES
return = gt_return
poitem = gt_item
poitemx = gt_itemx
* POADDRDELIVERY =
poschedule = gt_poschedule
poschedulex = gt_poschedulex
* POACCOUNT =
* POACCOUNTPROFITSEGMENT =
* POACCOUNTX =
* POCONDHEADER =
* POCONDHEADERX =
* pocond = gt_pocond
* pocondx = gt_pocondx
* POLIMITS =
* POCONTRACTLIMITS =
* POSERVICES =
* POSRVACCESSVALUES =
* POSERVICESTEXT =
* EXTENSIONIN =
* EXTENSIONOUT =
* POEXPIMPITEM =
* POEXPIMPITEMX =
* POTEXTHEADER =
* POTEXTITEM =
* ALLVERSIONS =
* POPARTNER =
pocomponents = gt_pocomponents
pocomponentsx = gt_pocomponentsx.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
WRITE:'采购订单成功创建:',lv_num.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
FUNCTION zfmm02.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(LT_CG) TYPE ZTTMM02
*" EXPORTING
*" VALUE(LS_SIGN) TYPE ZESIGN
*" VALUE(LS_MESSAGE) TYPE ZEMESSAGE
*" VALUE(O_EBELN) TYPE EBELN
*"----------------------------------------------------------------------
DATA: gt_cg TYPE STANDARD TABLE OF zsmm02,
gs_cg TYPE zsmm02.
SELECT
ekpo~ebeln , " 采购凭证编号
ekpo~ematn , " 物料
ekpo~ebelp ,
ekpo~matnr
FROM ekpo
INTO TABLE @DATA(gt_ekpo)
FOR ALL ENTRIES IN @lt_cg
WHERE ebeln = @lt_cg-ebeln.
* AND matnr = @lt_cg-matnr.
LOOP AT lt_cg INTO DATA(ls_cg).
READ TABLE gt_ekpo INTO DATA(gs_ekpo) WITH KEY ebeln = ls_cg-ebeln matnr+22(18) = ls_cg-matnr.
IF sy-subrc = 0.
ls_cg-ktpnr = gs_ekpo-ebelp.
ENDIF.
gs_cg = ls_cg.
APPEND gs_cg TO gt_cg.
CLEAR gs_cg.
ENDLOOP.
SORT gt_cg BY bsart ebeln ebelp.
"""创建采购订单
DATA:gs_poheader TYPE bapimepoheader,
gs_poheaderx TYPE bapimepoheaderx,
gt_return TYPE STANDARD TABLE OF bapiret2,
gs_return TYPE bapiret2,
gt_item TYPE STANDARD TABLE OF bapimepoitem,
gs_item TYPE bapimepoitem,
gt_itemx TYPE STANDARD TABLE OF bapimepoitemx,
gs_itemx TYPE bapimepoitemx,
gt_poschedule TYPE STANDARD TABLE OF bapimeposchedule,
gs_poschedule TYPE bapimeposchedule,
gt_poschedulex TYPE STANDARD TABLE OF bapimeposchedulx,
gs_poschedulex TYPE bapimeposchedulx,
gt_pocomponents TYPE STANDARD TABLE OF bapimepocomponent,
gs_pocomponents TYPE bapimepocomponent,
gs_pocomponents_temp TYPE bapimepocomponent,
gt_pocomponentsx TYPE STANDARD TABLE OF bapimepocomponentx,
gs_pocomponentsx TYPE bapimepocomponentx.
DATA:lv_num TYPE bapimepoheader-po_number.
LOOP AT gt_cg INTO gs_cg.
"抬头
gs_poheader-doc_type = gs_cg-bsart . "'Z02'."采购订单类型
gs_poheader-po_number = gs_cg-ebeln . "'2190400017'."采购凭证编号
"抬头创建标志
gs_poheaderx-doc_type = 'X'.
gs_poheaderx-po_number = 'X'. "采购凭证编号
"行项目
gs_item-po_item = gs_cg-ebelp. "'00010'. "采购凭证的项目编号
gs_item-quantity = gs_cg-menge. "采购订单数量
* gs_item-PLANT = 1000. "工厂
gs_item-agreement = gs_cg-evrtn . . " 主采购协议号
APPEND gs_item TO gt_item.
gs_itemx-po_item = gs_cg-ktpnr. "采购凭证的项目编号
gs_itemx-quantity = 'X'. " 采购订单数量
* gs_itemx-PLANT = 'X'. "工厂
gs_itemx-agreement = 'X'. " 主采购协议号
APPEND gs_itemx TO gt_itemx.
AT END OF ebeln.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = gs_poheader
poheaderx = gs_poheaderx
no_price_from_po = 'X'
IMPORTING
exppurchaseorder = lv_num
TABLES
return = gt_return
poitem = gt_item
poitemx = gt_itemx
poschedule = gt_poschedule
poschedulex = gt_poschedulex
pocomponents = gt_pocomponents
pocomponentsx = gt_pocomponentsx.
LOOP AT gt_return INTO gs_return WHERE type = 'E' OR type = 'A'.
ls_sign = 'E'.
ENDLOOP.
IF ls_sign <> 'E'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ls_sign = 'S'.
ls_message = '采购申请创建成功'.
o_ebeln = lv_num.
ELSE.
ls_sign = 'E'.
LOOP AT gt_return INTO gs_return WHERE type = 'E' OR type = 'A' .
ls_message = ls_message && gs_return-message.
ENDLOOP.
ENDIF.
ENDAT.
ENDLOOP.
ENDFUNCTION.