您的位置:首页 > 其它

bapi_po_create1根据PR创建PO

2012-11-30 15:34 981 查看
bapi_po_create1根据PR创建PO,PO创建成功之后无法改变PR状态.是因为在调用这个BAPI时,传进的参数不够完整.

解决办法:bapimepoitem, bapimepoitemx
,bapimeposchedule
,bapimeposchedulx
.这四个参数里面的PREQ_NO,PREQ_ITEM.这两个参数要填.

总结:

在用到一些bapi时,要在SAP中的走下这个BAPI所对应的业务.例如PR转PO这个业务.特别是在根据PR转PO时,既创建采购订单时,要注意创建采购订单这个屏幕上面所填的数据,这些数据就是你调用BAPI时所要传输的数据.

FORM FRM_BAPI_CREATE_PO .

DATA: poheader LIKE TABLE OF bapimepoheader WITH HEADER LINE ,

poheaderx LIKE TABLE OF bapimepoheaderx WITH HEADER LINE,

return LIKE TABLE OF bapiret2 WITH HEADER LINE,

poitem LIKE TABLE OF bapimepoitem WITH HEADER LINE,

poitemx LIKE TABLE OF bapimepoitemx WITH HEADER LINE,

poschedule LIKE TABLE OF bapimeposchedule WITH HEADER LINE,

poschedulex LIKE TABLE OF bapimeposchedulx WITH HEADER LINE,

potextitem LIKE TABLE OF bapimepotext WITH HEADER LINE.

CONSTANTS: con VALUE ‘X’.

DATA: lifnr TYPE lfa1-lifnr,

netpr TYPE ekpo-netpr,

row TYPE i,

scheduleline TYPE i.

DATA: epo LIKE bapimepoheader-po_number.

DATA: l_return LIKE return,

wa_data LIKE LINE OF it_convert_data.

REFRESH it_save_data.

SORT it_convert_data BY bsart ekorg ekgrp lifnr.

LOOP AT it_convert_data.

wa_data = it_convert_data.

AT NEW lifnr.

CLEAR lifnr.

lifnr = wa_data-lifnr.

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’

EXPORTING

input = lifnr

IMPORTING

output = lifnr.

poheader-doc_type = wa_data-bsart.

poheader-vendor = lifnr.

poheader-purch_org = ‘1000′.

IF wa_data-ekorg IS NOT INITIAL.

poheader-purch_org = wa_data-ekorg.

ENDIF.

poheader-pur_group = wa_data-ekgrp.

poheader-comp_code = ‘8000′.

poheader-doc_date = sy-datum.

poheader-langu = sy-langu.

poheader-currency = wa_data-waers.“货币

poheaderx-doc_type = con.

poheaderx-vendor = con.

poheaderx-purch_org = con.

poheaderx-pur_group = con.

poheaderx-comp_code = con.

poheaderx-ref_1 = con.

poheaderx-doc_date = con.

poheaderx-langu = con.

poheaderx-currency = con.“货币

ENDAT.

CLEAR :netpr.

IF wa_data-netpr2 IS NOT INITIAL.

netpr = wa_data-netpr2.

ELSEIF wa_data-netpr1 IS NOT INITIAL.

netpr = wa_data-netpr1.

ELSE.

netpr = wa_data-netpr.

ENDIF.

* CALL FUNCTION ’CONVERSION_EXIT_ALPHA_INPUT’

* EXPORTING

* input = bstae

* IMPORTING

* output = bstae.

row = row + 10.

poitem-po_item = row. “采购凭证的项目编号

poitem-preq_no = wa_data-banfn.

poitem-preq_item = wa_data-bnfpo.

poitem-acctasscat = wa_data-knttp.“科目分配类别

poitem-short_text = wa_data-txz01.“短文本

poitem-quantity = wa_data-menge.“采购订单数量

poitem-po_unit = wa_data-meins .“采购订单的计量单位

poitem-net_price = netpr.“净价

poitem-po_price = ‘2′.

poitem-material = wa_data-matnr.

poitem-matl_group = wa_data-matkl.“物料组

poitem-plant = wa_data-werks. “工厂

poitem-trackingno = wa_data-bednr.“需求跟踪号

poitem-preq_name = wa_data-afnam.“需求者/请求者姓名

poitem-ref_doc = wa_data-banfn.

poitem-ref_item = wa_data-bnfpo.

* poitem-tax_code = wa_data-mwskz.”销售税代码

* poitem-conf_ctrl = bstae.”确认控制代码

APPEND poitem.

CLEAR poitem.

poitemx-po_item = row . “采购凭证的项目编号

poitem-preq_no = con.

poitem-preq_item = con.

poitemx-acctasscat = con .“科目分配类别

poitemx-short_text = con.“短文本

poitemx-quantity = con.“采购订单数量

poitemx-po_unit = con .“采购订单的计量单位

poitemx-net_price = con.“净价

poitemx-po_price = con.

poitemx-material = con.

poitemx-matl_group = con.“物料组

poitemx-plant = con.“工厂

poitemx-trackingno = con.“需求跟踪号

poitemx-preq_name = con.“需求者/请求者姓名

poitemx-ref_doc = con.

poitemx-ref_item = con.

* poitemx-tax_code = con.”销售税代码

* poitemx-conf_ctrl = con.”确认控制代码

* poitemx-ret_item = con.”退货项目

APPEND poitemx.

CLEAR poitemx.

scheduleline = scheduleline + 1.

poschedule-po_item = row . “采购凭证的项目编号

poschedule-sched_line = scheduleline . “采购凭证的项目编号

poschedule-del_datcat_ext = ‘D’.“交货日期的类别

poschedule-delivery_date = wa_data-lfdat.“交货日期

poschedule-quantity = wa_data-menge.“采购订单数量

poschedule-preq_no = wa_data-banfn.

poschedule-preq_item = wa_data-bnfpo.

APPEND poschedule.

CLEAR poschedule.

poschedulex-po_item = row . “采购凭证的项目编号

poschedulex-sched_line = scheduleline . “采购凭证的项目编号

poschedulex-del_datcat_ext = con.“交货日期的类别

poschedulex-delivery_date = con.“交货日期

poschedulex-quantity = con.“采购订单数量

poschedulex-preq_no = con.

poschedulex-preq_item = con.

APPEND poschedulex.

CLEAR poschedulex.

AT END OF lifnr.

CALL FUNCTION ‘BAPI_PO_CREATE1′

EXPORTING

poheader = poheader

poheaderx = poheaderx

* POADDRVENDOR =

* TESTRUN =

* MEMORY_UNCOMPLETE =

* MEMORY_COMPLETE =

* POEXPIMPHEADER =

* POEXPIMPHEADERX =

* VERSIONS =

* NO_MESSAGING =

* NO_MESSAGE_REQ =

* NO_AUTHORITY =

* NO_PRICE_FROM_PO =

IMPORTING

exppurchaseorder = epo

* EXPHEADER =

* EXPPOEXPIMPHEADER =

TABLES

return = return

poitem = poitem

poitemx = poitemx

* POADDRDELIVERY =

poschedule = poschedule

poschedulex = poschedulex

* poaccount = poaccount

* POACCOUNTPROFITSEGMENT =

* poaccountx = poaccountx

* POCONDHEADER =

* POCONDHEADERX =

* POCOND =

* POCONDX =

* POLIMITS =

* POCONTRACTLIMITS =

* POSERVICES =

* POSRVACCESSVALUES =

* POSERVICESTEXT =

* EXTENSIONIN =

* EXTENSIONOUT =

* POEXPIMPITEM =

* POEXPIMPITEMX =

* POTEXTHEADER =

* potextitem = potextitem

* ALLVERSIONS =

* POPARTNER =

* POCOMPONENTS =

* POCOMPONENTSX =

* POSHIPPING =

* POSHIPPINGX =

* POSHIPPINGEXP =

.

LOOP AT return WHERE type = ‘E’ OR type = ‘A’.

ENDLOOP.

wa_data-tdline = ”.

IF sy-subrc = 0.

CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.

LOOP AT return INTO l_return WHERE type = ‘E’ .

CONCATENATE wa_data-tdline l_return-message ‘;’ INTO wa_data-tdline.

ENDLOOP.

APPEND wa_data TO it_save_data.

ELSE.

CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’

EXPORTING

wait = ‘X’.

MOVE epo TO wa_data-ebeln2 .

MOVE sy-datum TO wa_data-bedat .

ENDIF.

MODIFY it_convert_data FROM wa_data.

REFRESH: poitem,poitemx,poschedule,poschedulex,

poheader,poheaderx,return.

CLEAR: it_convert_data, wa_data, row, poitem,poitemx,poschedule,poschedulex,

poheader,poheaderx,return.

ENDAT.

ENDLOOP.

ENDFORM. “ FRM_BAPI_CREATE_PO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: