三个月精通SAP开发-ABAP(5)

2018-12-19 21:16

'EXIT_SAPMM06E_013'. ztfdir-MAND = 'C' .

update tfdir from ztfdir.

*** 通过在LSMODU23(Function: MODX_FUNCTION_ACTIVE_CHECK设置断点很容易找出已经有PO的user_exit)

SE37 : MODX_FUNCTION_ACTIVE_CHECK 在如下图中设置断点.

你就会发现TFDIR(Function Module表)的MAND必须=AKTIV_FLAG (值就是C)才会call相应的User_exit函数

用户增强: 所有的Enhancement在表MODSAP,用户增强大概有三类

MODSAP是Enhancement表, 而TFDIR是看是否此enhancement被激活,就看字段MAND是否是”C”而已

1. E Enhancement exits :就是常说的写User_exit 2. C GUI codes 没用过

3. 3. S Subscreens 屏幕增强

OK,其实上面不用coding, 通过search MODSAP发现EXIT_SAPMM06E_013 在Enhancement MM06E005中.

使用T-code :SMOD F8 test运行然后可激活EXIT_SAPMM06E_013 ,如果你确实找不到

enhancement name和exit函数对应关系,也没关系. 使用SMOD自己建立一个Enhancement 比如叫 ZPOSO ,然后你将function 加入,它也会有错误提示告诉你它属于的enhancement,还有就是使用上面的code直接update .

你自己可写个code将所有的user_exit找出来,很容易的哟.如你完全明白这篇文章,我想你就理解了user_exit 和BAPI的使用. 建立BAPI并使用其它语言call同样很简单.

EXIT_SAPMM06E_013 include程序 ZXM06U44

在coding前使用SE37 test BAPI :BAPI_SALESORDER_CREATEFROMDATA ***注意各企业因为设置的fields status不同可能有所不同. 对ORDER_HEADER_IN只需下面几个参数

ORDER_ITEMS_IN只需要MATERIAL,REQ_QTY—(Order qty in sales units - 00009001 corresponds to 9.001,就是说call BAP REQ_QTY测试时= actual qty * 1000)

, COND_TYPE, COND_VALUE,(即对应到price很奇怪必须/10, 不知其他系统是否这样,此是注意点)

PO_METH_S(Ship-to party purchase order type,如果设置了必须输入的话), ORDER_PARTNERS如果SP和SH相同的话,只要一条SP然后输入customer No就可,如果ship-to-party不同多家一条SH+customer No.吧.

还有一样要注意. AG—SP, RE—BP

—SH (SAP经常有这样的case,就是save在DB中的数据和display出来的数据有所不同, 为什么要这样, 不得而知,难怪SAP不推荐直接使用DB table 做报表,或者这是SAP AG的一个策略)

测试OK.开始coding on ZXM06U44, Source code 如下,log写在ZPOSO表中.

测试使用BAPI_SALESORDER_CHANGE

就是说它实际是call BAPI_SALESDOCUMENT_CHANGE的

你可知道ORDER_HEADER_INX-UPDATEFLAG为U时是update,为D时是Delete sales order,不选还不行.

好了下面是Source Code(仅供参考,大体框架OK,可能根据你的SAP实际情况做些调整) .

*----------------------------------------------------------------------* * INCLUDE ZXM06U44

* 在company 1000建立PO时同时建立SO in 1000和PO in 2000 * * 注意此程序会反复call .

*----------------------------------------------------------------------* data:

ZORDER_HEADER_IN like BAPISDHEAD ,

ZORDER_ITEMS_IN like BAPIITEMIN occurs 0 with header line , ZORDER_PARTNERS like BAPIPARTNR occurs 0 with header line , ZSALESDOCUMENT like BAPIVBELN-VBELN , ZRETURN like BAPIRETURN .

Data:

ZPOHEADER like BAPIEKKOC ,

ZPOITEMS like BAPIEKPOC occurs 0 with header line,

ZPO_ITEM_SCHEDULES like BAPIEKET occurs 0 with header line, ZPURCHASEORDER like BAPIEKKOC-PO_NUMBER . tables :ZPOSO .

data zposolog like zposo occurs 0 with header line.

data : Zrepcall(1) type C. \防止反复调用BAPI_PO_CREATE.

Refresh : ZORDER_ITEMS_IN .

*** 实际应用根据I_EKKO-EBELN(其实从EBELN-PO No.可判断出plant) *** 1.I_EKKO-EBELN前面5位用case语句判断

*** 2.根据I_EKKO-BUKRS(comp. code)和XEKPO-WERKS(plant)判断

*** 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 ---***


三个月精通SAP开发-ABAP(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018年无锡市专技人员诚信建设-题库全套(保通过含答案)

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

马上注册会员

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