abap三月通(6)

2019-07-29 11:13

*** company code 2000是专门用来采购的HK 公司.

*if I_EKKO-BUKRS <> '1000'. * exit. *endif.

check I_EKKO-BUKRS eq '1000'. \只对comp 1000适用.

***判断表ZPOSO有无PO no.无call BAPI_SALESORDER_CREATEFROMDATA create SO *** 如果存在call BAPi BAPI_SALESORDER_CHANGE change SO.

***注意在ME22N change PO时间XEKPO内表中只保留了被改变line item的数据. select single * from ZPOSO where EBELN eq I_EKKO-EBELN. if sy-subrc eq 0 .

* Change Sales Order,Purchase Order留给你自己写不告诉你 *CALL FUNCTION 'BAPI_SALESORDER_CHANGE' *CALL FUNCTION 'BAPI_PO_CHANGE'

else . \建立Purchase Order 和Sales Order

*** 从ZFLAG表中读取Zrepcall看是否是T, 不管使用什么方法总之不要反复 **在此处设置断点在第二次调用时将Zrepcall设成T退出. **好象无法设置到那种真正的全局变量只好使用一个表罗

**你就会发现当在comp 1000建立PO同时也建立了SO并且comp 2000也有PO *select single Zrepcall into Zrepcall from zflag . if Zrepcall = 'T' . exit . endif.

***注意使用PO另一个user_exit 001将Zflag的zrepcall设置成F ***接下来的语句立即update zflag将zrepcall设置成T. ***----------------------------------------------*** *** 开始建立Purchase Order in company 2000 *** ***----------------------------------------------*** ***----------------------------------------------*** *** 开始建立Sales Order in same company 1000 *** ***----------------------------------------------*** ***根据公司实际更改ZOR是标准Sales order ***----Sales Order Header --- *** ZORDER_HEADER_IN-DOC_TYPE = 'ZOR'. ZORDER_HEADER_IN-SALES_ORG = '1100'. ZORDER_HEADER_IN-DISTR_CHAN = '11'. ZORDER_HEADER_IN-DIVISION = '11'.

ZORDER_HEADER_IN-CURRENCY = I_EKKO-WAERS. \ ZORDER_HEADER_IN-PURCH_NO = I_EKKO-EBELN . ***---Purchase Order Header ---***

ZPOHEADER-PURCH_ORG = I_EKKO-EKORG. \正式使用换2000的采购组织 ZPOHEADER-PUR_GROUP = I_EKKO-EKGRP . \正式使用换comp2000的采购组 ZPOHEADER-CO_CODE = '2000' .

ZPOHEADER-VENDOR = I_EKKO-LIFNR .

ZPOHEADER-DOC_TYPE = 'NB' . \

***根据PO item写入SO item和另家公司的PO items

loop at XEKPO .

***----写SO items ---***

ZORDER_ITEMS_IN-ITM_NUMBER = XEKPO-EBELP .

* 使PO item NO和SO item No完全相对应,PO,SO item可manual input.

ZORDER_ITEMS_IN-MATERIAL = XEKPO-MATNR. \ ZORDER_ITEMS_IN-REQ_QTY = XEKPO-MENGE .

ZORDER_ITEMS_IN-REQ_QTY = ZORDER_ITEMS_IN-REQ_QTY * 1000 . * Call SO BAPI时Qty 测试时间必须乘上1000.ABAP中则不用

ZORDER_ITEMS_IN-COND_TYPE = 'ZPR1'. \是EST定义的price cond. ZORDER_ITEMS_IN-COND_VALUE = XEKPO-NETPR.

ZORDER_ITEMS_IN-COND_VALUE = ZORDER_ITEMS_IN-COND_VALUE / 10 . *Call SO BAPI test时Price必须/10

ZORDER_ITEMS_IN-PO_METH_S = '010' . \表示是维修期,EST设置成必输字段. Append ZORDER_ITEMS_IN .

***---写另公司的PO items,如果有必要让俩公司PO外部给号PONo可一致---*** ZPOITEMS-PUR_MAT = XEKPO-MATNR. ZPOITEMS-PLANT = XEKPO-WERKS . ZPOITEMS-NET_PRICE = XEKPO-NETPR.

***仅仅是test,注意XEKET,shedules delivery date 没item不同哟.自己去加强吧 ZPO_ITEM_SCHEDULES-DELIV_DATE = SY-DATUM . \ ZPO_ITEM_SCHEDULES-QUANTITY = XEKPO-MENGE . append ZPOITEMS .

append ZPO_ITEM_SCHEDULES . endloop.

***为了简单就将SP-Sold_to_Party和SH-Ship_to_Party设置成相同.

***AG-SP:sold_to WE:SH Shipping-to,BAPI测试只要SP,call时则要求俩者 ***下面假设PO vendor no就是SO 的customer no,如非就建立对应关系. ZORDER_PARTNERS-PARTN_ROLE = 'AG'.

ZORDER_PARTNERS-PARTN_NUMB = I_EKKO-LIFNR.

***实际应用时HK开PO时产生的SO customer当然只有一个就是SZ公司. Append ZORDER_PARTNERS .

ZORDER_PARTNERS-PARTN_ROLE = 'WE'.

ZORDER_PARTNERS-PARTN_NUMB = I_EKKO-LIFNR. Append ZORDER_PARTNERS .

CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDATA' EXPORTING

ORDER_HEADER_IN = ZORDER_HEADER_IN IMPORTING

SALESDOCUMENT = ZSALESDOCUMENT * SOLD_TO_PARTY = * SHIP_TO_PARTY = * BILLING_PARTY =

RETURN = ZRETURN TABLES

ORDER_ITEMS_IN = ZORDER_ITEMS_IN ORDER_PARTNERS = ZORDER_PARTNERS * ORDER_ITEMS_OUT = * ORDER_CFGS_REF = * ORDER_CFGS_INST = * ORDER_CFGS_PART_OF = * ORDER_CFGS_VALUE = * ORDER_CFGS_BLOB = * ORDER_CCARD = .

if ZSALESDOCUMENT <> '' . loop at XEKPO .

zposolog-ebeln = I_EKKO-EBELN. \

zposolog-ebelp = XEKPO-EBELP. \ zposolog-vbeln = ZSALESDOCUMENT.\ zposolog-posnr = XEKPO-EBELP . \ zposolog-waers = I_EKKO-WAERS . \ zposolog-matnr = XEKPO-MATNR . \ zposolog-kwmeng = XEKPO-MENGE. \ zposolog-netpr = XEKPO-netpr. \

zposolog-bapimsg = 'Creation OK' . \ zposolog-flag = 'T'. \ append zposolog .

insert ZPOSO from zposolog. endloop.

else.

zposolog-ebeln = I_EKKO-EBELN.

* zposolog-bapimsg = ZRETURN-MESSAGE .

***为了好SE91查找message合并message type, messge code,和message text concatenate ZRETURN-TYPE '--' ZRETURN-CODE '--:' ZRETURN-MESSAGE into zposolog-bapimsg .

zposolog-flag = 'F'. \ append zposolog .

insert ZPOSO from zposolog. endif.

***----------------------PO可能会反复调用吗--------------------- *** 不管如何做到call一次就退出.

*** 建立一表ZFLAG, 可只有一个字段, Zrepcall,default是F, CALL FUNCTION 'BAPI_PO_CREATE' EXPORTING

PO_HEADER = ZPOHEADER * PO_HEADER_ADD_DATA = * HEADER_ADD_DATA_RELEVANT = * PO_ADDRESS = * SKIP_ITEMS_WITH_ERROR = 'X' * ITEM_ADD_DATA_RELEVANT = IMPORTING

PURCHASEORDER = ZPURCHASEORDER \好瞧瞧 TABLES

PO_ITEMS = ZPOITEMS * PO_ITEM_ADD_DATA =

PO_ITEM_SCHEDULES = ZPO_ITEM_SCHEDULES * PO_ITEM_ACCOUNT_ASSIGNMENT = * PO_ITEM_TEXT = * RETURN = * PO_LIMITS = * PO_CONTRACT_LIMITS = * PO_SERVICES = * PO_SRV_ACCASS_VALUES = * PO_SERVICES_TEXT = * PO_BUSINESS_PARTNER = * EXTENSIONIN = * POADDRDELIVERY = .

Endif. \结束建立Purchase Order 和Sales Order

下面是使用VB Call BAPI_CREATE_PO建立PO的例子的部分,首先使用SE37 测试,基本上建立PO最简单只需要以下参数. 注意vendor必须是10位数,如果长度不足,请加0

tvendor = Mid(\Trim(VENDOR.Text)

‘保证如果vendor length<10补充到10位,否则就会出错 poheader.Value(\

poheader.Value(\poheader.Value(\poheader.Value(\poitems.Rows.Add

poitems.Value(1, \poitems.Value(1, \poitems.Value(1, \poitemschedule.Rows.Add

poitemschedule.Value(1, \poitemschedule.Value(1, \

3.物料主数据编程 使用物料主数据 4.供应商列表分析 5.收货检测增强 物料移动报表


abap三月通(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:实习指导老师评语

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: