abap三月通.doc

上传人:仙人指路1688 文档编号:2884146 上传时间:2023-03-01 格式:DOC 页数:64 大小:1.35MB
返回 下载 相关 举报
abap三月通.doc_第1页
第1页 / 共64页
abap三月通.doc_第2页
第2页 / 共64页
abap三月通.doc_第3页
第3页 / 共64页
abap三月通.doc_第4页
第4页 / 共64页
abap三月通.doc_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《abap三月通.doc》由会员分享,可在线阅读,更多相关《abap三月通.doc(64页珍藏版)》请在三一办公上搜索。

1、 ABAP三月通前 言2一.基础篇21.什么是ABAP ?22.ABAP开发环境的建立23.获得Access Key .34.ABAP workbench和ABAP dictionary35.第一个程序-Hello World.36.ABAP语法简介37.Open SQL和Native SQL48.内表和工作区49.使用字段符号410.模块化程序411.文件处理412.簇数据库和逻辑数据库413.消息和错误处理414.使用用户授权415.调用外部程序和程序动态生产416.选择屏幕417.使用程序运行变式418.制作Tcode4二.加强篇.51.CATT52.BDC53.制作background

2、 job54.SapScript55.Smartform56.SAP Query57.ALV58.ALE/iDoc59.Report painter和Drilldown Report510.RFC/BAPI511.编写用户增强512.深入ABAP工作台5三.实战篇5MM模块开发实例.5SD模块开发实例.5PP模块开发实例.5FI模块开发实例.6CO模块开发实例.6开发项目流程简介.6附录:6ABAP/Basis Transaction Codes6前 言一.基础篇 如果读者已经有一定ABAP经验,可不看此篇,在此篇中,花了很少篇幅回顾ABAP编程的基本常识,读者如有其他开发工具的知识,花很少时

3、间就可理解这些常识.1.什么是ABAP ?了解一下ABAP的发展历史是必要的,ABAP产生的最初的目的是用以生成简单打印报表程序,我们知道SAP最初是为解决财务实时数据处理问题的,ABAP(Advanced Business Application Programming-高级业务应用编程语言)现在用于编写SAP AG的几乎全部产品源代码.严格地讲,ABAP/4不仅仅是一个开发工具,而且是一套完整的client/server开发环境,这很好理解,微软的Visiual Studio是一开发环境,VB,VC+等是开发工具.ABAP开发环境包含支持程序开发的一些函数和包等. 如图1-1,是SAP开发

4、环境的一个三层架构的例图,三层(多层)的概念也不新鲜,比如在安装SAP时也可将DB instance安在一台server, Central instance在另一台所谓的Application server(我想这应是相关SAP基础系统包括各种应用程序所在),而通常客户端安装的SAP Logon Front End,SAP会话管理器等是所谓的表示层,它通过TCP/IP,SAP演示协议或RFC和应用服务器进行数据传输,用户看到的只是处理后的数据返回. 和Delphi的三层逻辑相近,在应用层包含多个组件象ABAP开发平台,身份验证,系统管理维护等用以处理会话,更新,排队,网关,数据层处理nativ

5、e 和Open SQL等(这是从内部机制方面看),SAP各模块应用的业务逻辑都在应用层被处理(从用户角度)然后结果被返回. 图1-2是SAP Logon的一个截图,1表示应用服务器(通常企业为了节省成本和方便管理可能会将应用服务器和数据库安装在同一起),2System number,举个实例,开发和测试服务共用一台服务器,开发使用system number00,而测试使用system number 01,通过system number逻辑地将一台physical server逻辑地分成了两台application server. 学习ABAP并不难,有人说SAP系统重在管理思想,不在技术,通常

6、对有编程经验的读者不用任何培训参考一些相关资料就可立即上手. 简单介绍下ABAP/4的一些特征:1.和SAP紧密结合,尤其在开发报表方面,坦率地讲,除了和SAP集成的好处,.我定认为ABAP在报表开发上比Crystal report Tool要高效简单.2.和VB一样 ,ABAP是解释形的,如读者精通VB,学习ABAP应该豪不费力,倒是既然SAP是企业管理解决方案,ABAPer必须对企业管理流程熟悉. 解释性的另一好处是可以很好跟踪程序逻辑(使用/H),这对了解业务逻辑的实和追踪错误很有效. 和VB不同的是,VB跟踪时允许程序运行指针随意往回或往全拉而ABAP程序去不行, 但是ABAP程序允许

7、在运行时修改变量的值,这是编译程序不能做到的. 当然通常编译比解释执行的速度会更快.ABAP程序执行并不直接读取源代码,而是执行内部经过“生成”的描述,对于ABAP/4字典的修改激活后将触发内部描述的重新生成,如程序并没激活就执行原版本,或者出现错误(程序没激活可能造成ABAP Dumping ABAP). 3.在对数据库处理方面,除了可直接执行SQL(使用native sql,缺点是错误处理很难控制,相当于有开发环境将SQL 语句直接传给DB去执行),SAP在ABAP开发环境层还提供了一套Open SQL访问底层数据库. 4. 程序员都知道Windows平台下开发都支持事件驱动,Window

8、s系统本身也支持事件驱动,ABAP也提供了事件驱动,这表现在Dialog编程方面,但是ABAP在此方面并不强,而且相对讲也比较难于掌握(在后面会讨论). 5.基于面向对象的风靡,ABAP在此方面也有相当反应,在SAP强大的软件包中提供了大量可重复使用的程序,读者也可定义类并使用它快速建立新的对象.6.类似Java,ABAP开发的程序能运行于任何操作系统(Java有Java虚拟机,ABAP也有ABAP processor),多种数据库(比如在ABAP字典中实现了透明表对各种底层数据库表的映射,这样在ABAP层看到的透明表就和具体数据库无关),各种网络系统.图1-3是一个ABAP开发和运行环境的图

9、例. 1 使用C|C+建立ABAP 开发工具,数亿行ABAP source code组成SAP AG多个产品. 姑且不论国内ERP产品设计在解决企业流程上的局限性,在大多数国外的ERP产品中我们都可看到结合自身ERP自带的开发工具,在技术上这也是落后人家.所以建议国内ERP界能少谈点象什么”不上ERP等死,上ERP找死”,”百分之百的企业上ERP都失败”诸如的空洞口号(实际上我并不知道他们是凭什么得出这样的结论的),多干点实际的事情.2 既然ABAP是解释型的,运行速度会有影响吗?我想多少会有的,为了解决这个问题,除了要加大相关服务器内存外(相对日新月异的硬件技术这已非主要瓶颈),SAP本身在

10、提高性能也提供了相当的ABAP技术,比如使用Cluster table, Pooled table和Logical database ,在接下来会有详细介绍.2.ABAP开发环境的建立 一个ABAP顾问和我讨论说,大学毕业我做ABAP开发不久做了顾问,薪资相当可观,最要好同学在unix平台下写Cobar组件, 薪资却并不理想. 从技术角度,我认为使用C+写组件肯定比ABAP开发难度要高,用其人话说他是坐的庙好.是的,SAP行业特别是早些年是个被异化的行业,人们可看到某些人出于经济目的铺天盖地的对ERP不正确的宣传,这同样反应在IT各行业,”拿到XX牌Route认证,拿到XX网络认证,拿到XX数

11、据库认证,拿到XX管理学位年薪基本的都在十几万以上”,现在人们发现实际不是这回事,从现在,SAP也已经开始降温了,我想这趋势还会持续. 和学习其它语言唯一不同的是,ABAP是集成在SAP基础平台系统中的,为了学习ABAP,你必须安装一套SAP(可选择R/3,miniSAP,或IDES),而通常的情况是安装光盘渠道比较难找(只有一些大企业实施了SAP才可能有,而且还必须注意版权问题,其他开发工具随便都可找到安装程序),对想学习ABAP的程序员这是个主要门槛. 掌握基本的ABAP开发环境对ABAPer是有益的,似乎多数ABAPer对底层并不感兴趣,3.获得Access Key .4.ABAP wo

12、rkbench和ABAP dictionary5.第一个程序-Hello World.如何进行ABAP开发呢?本节使用老套的做法,介绍如何建立一个”Hello World”的ABAP程序, 为了让读者尽快掌握ABAP开发熟悉ABAP开发环境是必须的,请看图1.5-1.程序的原代码如下:Report ZHELLO.Write Hello World!.按F8运行,运行成功在屏幕上显示Hello World!的字样,恭喜你,第一个程序运行成功.6.ABAP语法简介数据类型 控制流程文本摘要输出格式程序调试7.Open SQL和Native SQL8.内表和工作区9.使用字段符号10.模块化程序11

13、.文件处理12.簇数据库和逻辑数据库13.消息和错误处理尽管消息这词还用在其他地方比如PO,SO打印传真等所谓的output message(请看ABAP百夜谈),系统出现异常,在这里消息只谈在程序运行逻辑异常处理时的消息.1定义消息(参考图7-7). 使用Tcode SE91可自定义包含多消息号的消息类,在图7-7中就定义了一个消息类ZFIMSG,同时消息号017 中使用了俩&消息变量2运用消息.1.可在程序Title中使用MESSAGE-ID加入消息类.REPORT ZMSGTEST MESSAGE-ID ZFIMSG .MESSAGE I017.使用消息IMG有这样的画面,12的appl

14、和work area实际上对应的就是程序的message_id(SE91:message class).2.在程序Title中定义直接在语句中使用.REPORT ZMSGTEST .MESSAGE I017(ZFIMSG).1. 将变量赋给消息.REPORT ZMSGTEST .MESSAGE I017(ZFIMSG) with Var1 Var2 Var3 .或者MESSAGE ID ZFIMSG TYPE I NUMBER 0171 with Var1 Var2 Var3 .尽管017只定义了两消息变量,但是可With多个值,当然只有前俩生效.4.SAP程序消息类型有下列几种.I:信息窗口

15、 W:警告 E:错误 S:成功 A:终止程序或Tcode X:未知.5.和标准SAP一样,你可配置消息,比如你需要由用户决定消息类型,使用下面程序.PROGRAM ZMSGTEST .CALL FUNCTION READ_CUSTOMIZED_MESSAGE EXPORTING I_ARBGB = ZFIMSG I_DTYPE = I_MSGNR = 017 IMPORTING E_MSGTY = SY-MSGTY.假设你做了Tcode和OBA5一样可配置消息类型,在程序中你就可根据返回值SY-MSGTY判断下步工作,E停止处理,A退出程序等.在标准程序中,接下来会PERFORM MESSAG

16、E_SEND来决定发送消息类型.3常用消息表格和各模块常用消息配置Tcode. 在消息配置中,Application Area和SE91的Message Class实际上是同一概念.1消息相关最常用的table:T100: SAP能用到的消息都应该在此表中找到.T160M :MM模块相关消息表,此表可完全直接维护.就是说只要记住它,MM的消息配置直接使用SE16就可以.T100C: FI模块中用户自定义的消息,比如使用OBA5, OFMG等自定义的消息会写入此表,CO配置消息不在此表.T100S: 此表保存着允许用户更改的应用区域和消息号,举例假设你删除了KI 005则在OBA5中再不能配置此

17、消息.(对MM模块有些例外,M7不在此表,使用OMCQ依旧可设置,M3不在此表,OMT4依旧可设置)此表也可直接维护.和T160M不同的是,你必须在SE16输入T100S按新建按钮 才可维护.查询时只可Display. T100U: 哪个用户最后更改了消息,从此表能找到.T100W: For Workflow2常用Tcode(部分):FI: OBA5|OFMG|OFPM MM: OMRM|OKZZ|OMT4|OMCQ |O04C|SD: OVAHCO: OPR4_ACT|OPR4_CK|OPR4_CKML|OPR4_CKPF|OPR4_KKA|OPR4_KKP|OPR4_KKS|OPR4_KK

18、S1|OPR4_PPCOPPOthers: OPR5|OPR1|OPR3|OPR6|OPR7|OPR8|OPR9|OPRCMFE|MSW1|MSW23应用举例.物料价格维护问题Case 1如何在物料价格未维护时依旧可估算成本.比如在CK11N(CK40N)计算成品标准成本时,其中有一些Component没维护价格.就可使用OPR4_CK将默认的错误消息Switch Off掉(从Tcode OKKN-Misc.-Error Management按钮也可).*另外临时处理方法一是将相关component的物料Cost 1 View选上Do not Costing.对需要计算标准成本的材料选上它就不

19、再允许计算标准成本,不妥,但是对原材料无所谓,因为系统会这样处理,如此材料没维护价格,BOM用到它的成品不计算其成本,但是如此物料维护了价格后,还是以物料价格为先的.(当然CK11N去估算此原材料是不行的,用户也不需如此做).二是按SAP推荐的如果将price设成0.01,price unit设置成100.Case 2如何限定物料价格必须维护.(1)对采用S price control的.SAP默认是Warning(Tcode :OMT4 M3-132,如需要限定必须维护价格,将其改成W就可.(2)对采用V price control的,OMT4找不到其消息号M3-131,但系统默认是Warn

20、ing,如果用户认为也有相关配置就有犯了认为SAP万能的错误,再次强调SAP只是一堆代码并不神秘.好让我们看看其逻辑.*实际上直接使用SE16:T160M可直接配置MM相关.如图:1SE38找到程序LMG11F01 2在此处设置断点 3如价格为0(空格) 写死的,当然配置无效.再看S Price control(如下图,显然从T160M表读了IMG数据).4灵活运用消息.对于消息的运用,除了可配置消息类别外,另外一个重要用处就在于,可根据消息找到程序弹出消息的确切行,然后稍微花点时间看看程序逻辑就可大概知道异常发生的根本原因. 从某种程度来讲,即使对某模块很陌生,只要掌握得好,依旧可排除一些问

21、题.5 配置自定义的消息.俩方法可模妨SAP的消息配置1从上我们已经知道既然T160M是可直接使用SE16维护的,我们就可直接将相关设置写入T160M.然后就可根据相关设置取得消息类别(如上图我们使用函数ME_CHECK_T160M),这样比类似MESSAGE E017(ZFIMSG)Hard code要安全得多,假设不管三七二十一就给出错误消息,除非在程序中确信已考虑了所有情况,否则还是在T160M这样设置比较好(万一在生产环境还可更改E成W什么的).2我们知道T100C是所谓的可配置消息表,我们可使用SE16:T100C和V_T100C.(1)SE16:T100S定义消息可配置信息.如图1

22、在此新建.(进去browse数据似乎不可新建)设置消息.如下图.1Appl Area消息类ZFIMSG. 2表示允许配置的消息类型 3没选则表示不能关闭消息.(2)SE16:V_T100C配置消息.如图:1表示直接使用程序(Tcode)的消息类型2当当程序以BDC方式运行时的消息类型3就是上图设置的允许的消息类型,可看到警告和关闭都没出现(T100C没允许)同样在程序中避免使用泪水MESSAGE E017(ZFIMSG)而采用CALL FUNCTION READ_CUSTOMIZED_MESSAGE EXPORTING I_ARBGB = ZFIMSG I_DTYPE = I_MSGNR =

23、017 IMPORTING E_MSGTY = SY-MSGTY.根据返回的SY-MSGTY去判断消息类型将更好些.6实例介绍PO在有发票校验后禁止修改价格,假设无PO release策略,使用User-exit步骤如下:(1)找合适的用户出口发现EXIT_SAPMM06E_017比较合适,SMOD 输入enhancement name :MM06E005(2)编写代码.*&-*& Include ZXM06U42 *&-*DATA : ZWATEKPO like BEKPO , ZIEINFO LIKE EINFO OCCURS 0 WITH HEADER LINE, ZERMSG(73)

24、TYPE C.TABLES EKBE .*TEKPO records all the old PO item date .* I_EKPO records currently processed PO item .READ TABLE TEKPO INTO ZWATEKPO WITH KEY EBELP = I_EKPO-EBELP .*只对ME22N才生效.CHECK SY-TCODE = ME22N .*EKBE是PO history 表,如有Q,R表示有发票校验历史,不允许更改价#SELECT SINGLE * FROM EKBE WHERE EBELN = I_EKPO-EBELn A

25、ND EBELP = I_EKPO-EBELP AND ( BEWTP = Q OR BEWTP = R).CHECK SY-SUBRC = 0 .*如果SY-SUBRC =0表示发票已经校验,不允许更改价格,否则还是可更改价格#IF I_EKPO-NETPR ZWATEKPO-NETPR .* Change e017(ZFIMSG) accordingly* MESSAGE e017(ZFIMSG).使用下面函数代替. CALL FUNCTION READ_CUSTOMIZED_MESSAGE EXPORTING I_ARBGB = ZFIMSG I_DTYPE = I_MSGNR = 01

26、7 IMPORTING E_MSGTY = SY-MSGTY. CHECK SY-MSGTY NE - . REFRESH ZIEINFO. ZIEINFO-MSGID = ZFIMSG. ZIEINFO-MSGNO = 017 . ZIEINFO-MSGV1 = VAR1. ZIEINFO-MSGV2 = VAR2. APPEND ZIEINFO . CALL FUNCTION MESSAGE_GET_TEXT EXPORTING IEINFO = ZIEINFO ILANGU = SY-LANGU IMPORTING ETEXT = ZERMSG . MESSAGE ZERMSG TYPE

27、 SY-MSGTY .ENDIF.*在大多数情况下追踪消息能发现问题所在,然而在一些特定情况下,SAP显示的消息似乎和实际业务并不符合.好比一个人咳嗽的厉害,以为是感冒结果其实不过是有写异物进入其喉咙而已.14.使用用户授权15.调用外部程序和程序动态生产16.选择屏幕17.使用程序运行变式18.制作Tcode二.加强篇.1.CATT2.BDC3.制作程序的background job4.SapScript5.Smartform6.SAP Query7.ALV编程8.ALE/iDoc9.Report painter和Drilldown Report10.RFC/BAPI11.编写用户增强12.

28、深入ABAP工作台在这章将深入介绍各种ABAP对象的操作.13.传输请求这节并不是侧重介绍如何配置传输请求和其运行机制的,这通常是basis的工作和ABAPer并无关系,还是那句话,了解点大概是必要的.通常企业起码会有两个系统,开发(测试)系统和生产系统(有些企业开发任务相对少,开发和测试使用同一台server甚至同一client,开发和测试也都有ABAPer完成),如果要严格开发流程,开发,测试必须是分开的(为了节省当然可使用同一server,不同的Client甚至用不同System Number逻辑分成两Server),在此不深入讨论.熟悉几个名词:1开发类(Development Cla

29、ss).开发类可简单理解为逻辑上相关的一组ABAP对象,在将来传输时将使用同一传输层.实际上开发类本身也可看做是一个ABAP对象,可使用SE80建立.$TMP是本地开发类,属于此开发类的任何ABAP对象(包括自定义的表,编写的程序等都只能在Client做测试用而不能被传输到其他Client. 包现在被用来代退开发类.2.包(Package) 相关的ABAP对象被组合在一个包内,SE16:TADIR可看到被分配到某包的所有的ABAP对象,包决定了这些对象的传输层.所有的包被存在表TDEVC中,建立包可使用SE80或直接使用SM30:V_TDEVC.包作为开发类的退代和前身有这么几个加强特征.1.

30、包可嵌套使用(这点类似Java package)2.包类可包含最多本包中可见的对象,这些对象在包外不可见 这点类似私有对象(Private object),在OOP中也很常见.3.包可为包接口定义使用访问授权.4.通常自定义包必须是Y或Z前坠,这点和其他ABAP对象相同(包其实也可看做ABAP对象).其他一些包前坠 A-S, U-X表示SAP标准包,T私有测试包,$本地临时包,/*名字空间前坠.3.传输层(Transport Layer)传输层决定包内对象是分配给本地还是可产生传输请求.通常,开发系统都被分配了一个标准的传输层,当包被建立时,.它就被分配了一个标准传输层.包内对象也立即自动获得

31、相关传输属性.相关IMG配置使用的是标准的传输层.通常由basis使用Tcode STMS配置传输管理系统维护传输曾和路由.图2.13-1,显示的是从DVU开发的程序传输到QAS和PRD的传输路由,在图中程序在DVU server的client 210,100开发后被传输到QAS Client 310测试,成功后被分别传入PRD Client 800,810和820 .4.传输请求程序是究竟保存在server的什么地方?程序是如何在不同client和server之间进行传输的?要明白这问题,首先让我们看看什么是传输程序和传输控制程序.传输控制程序TP和R3TRANS传输程序,R3TRANS被用

32、来实现SAP各Client间的数据传输和不同版本迁移,TP传输控制程序根据传输参数(Transport Profile)调用R3TRANS传输程序.14.和其它语言的交互VB,Delphi,Java其实开发工具使用都简单,别人都弄出开发环境都给弄出了,学用还会难吗?三.实战篇在这一篇将介绍企业常用模块开发实例,其中可能还涉及一些辅助相关后台配置,每个模块的8个实例是经过精心挑选出的具有相当代表性,由于篇幅原因和各个企业实际需求可能不一样,有的可能在本书只描述了设计思路和部分源代码,希望读者在实际运用中能自行完善并能举一反三.除非必要,尽量使用SAP标准的报表少自行开发,另外,如有可能,使用信息

33、结构.1.MM模块开发实例.一.MM常用表格及其关联关系图二.开发实例下面是一个企业的参考MM开发需求清单(并不包括用户出口等).供应商列表|信息记录|PR,PO打印(Scrip或Smartform)|MRB物料清单|物料报废报表|物料入库报表|物料运输申请单|物料主数据查询报表|收货单打印|IQC报表|Pull List|发料单(生产定单)|物料转移单|Delivery notes|Packing List|RMA发料单|库存分析报告|PO分析报告|GR/IR分析报告|物料盘点单|盘点物料报告等.如项目紧急而开发人手不足(有些中小企业专职的ABAPer可能只有一个或各模块的SAP内部支持顾问

34、兼做开发),必须排定开发优先次序,除了比如PO套打收货单打印等必须在项目正式上线前完成的开发任务,相关查询报表可在上线后开发.如果是专职负责开发,依旧需要很好理解业务,最好和负责业务支持的多沟通,一个最有效的方法就是将相关模块的业务流程(通常在业务蓝图阶段会有非常详细的相关资料)在测试系统走一遍,这样对以后开发是大有益处的.1.MM相关单据打印PO和收货单打印开发NACE,MB04外协PO.2.PO增强编程PO change history*&-*& Include ZXM06U42 *&-*DATA : ZWATEKPO like BEKPO , ZIEINFO LIKE EINFO OCC

35、URS 0 WITH HEADER LINE, ZERMSG(73) TYPE C.TABLES EKBE .*TEKPO records all the old PO item date .* I_EKPO records currently processed PO item .READ TABLE TEKPO INTO ZWATEKPO WITH KEY EBELP = I_EKPO-EBELP .*只对ME22N才生效.CHECK SY-TCODE = ME22N .*EKBE是PO history 表,如有Q,R表示有发票校验历史,不允许更改价#SELECT SINGLE * FRO

36、M EKBE WHERE EBELN = I_EKPO-EBELn AND EBELP = I_EKPO-EBELP AND ( BEWTP = Q OR BEWTP = R).CHECK SY-SUBRC = 0 .*如果SY-SUBRC =0表示发票已经校验,不允许更改价格,否则还是可更改价格#IF I_EKPO-NETPR ZWATEKPO-NETPR .* Change e017(ZFIMSG) accordingly* MESSAGE e017(ZFIMSG).使用下面函数代替. CALL FUNCTION READ_CUSTOMIZED_MESSAGE EXPORTING I_AR

37、BGB = ZFIMSG I_DTYPE = I_MSGNR = 017 IMPORTING E_MSGTY = SY-MSGTY. CHECK SY-MSGTY NE - . REFRESH ZIEINFO. ZIEINFO-MSGID = ZFIMSG. ZIEINFO-MSGNO = 017 . ZIEINFO-MSGV1 = VAR1. ZIEINFO-MSGV2 = VAR2. APPEND ZIEINFO . CALL FUNCTION MESSAGE_GET_TEXT EXPORTING IEINFO = ZIEINFO ILANGU = SY-LANGU IMPORTING E

38、TEXT = ZERMSG . MESSAGE ZERMSG TYPE SY-MSGTY .ENDIF. 自动建立PO和SO一.SE11建立一记录表ZPOSO1二.使用PO User_exit1*本程序思路同样适合从建立Sales order时自动建立PO 只是调用的function是BAPI_CREATE_PO和使用creating SO时的User_exit而已一. SE11建立一记录表ZPOSO如图建立一个表ZPOSO俩个用途,1. 保存PO到SO的联系以方便将来查询2. 判断PO是create还是change (比如ME22N update PO qty,or delete PO li

39、ne.)3. 判断*注意EBELN和EBELP合起来才是key fields相当于DB层的Primary key二. 使用PO User_exitEXIT_SAPMM06E_001 (002,004,006,007,009) 006是PO还未create前检查的.EXIT_SAPMM06E_016, 017此时虽然有PO item数据但是PO No.还没有给出.EXIT_SAPMM06E_009, PO已经建立并且数据已经refresh .所以使用EXIT_SAPMM06E_013在使用之前必须update TFDIR表将MAND设置成”C”.程序如下:REPORT Zupdate .data

40、 ztfdir like tfdir occurs 0 with header line .select * from tfdir into table ztfdir where FUNCNAME =EXIT_SAPMM06E_013.loop at ztfdir .ztfdir-MAND = C .modify ztfdir index sy-tabix TRANSPORTING MAND.endloop.update tfdir from ztfdir. *由于只有一笔使用Work area就可搞定,所以要这样霸王强上弓是没有找到配置在哪里. REPORT ZTEST11 . data z

41、tfdir like tfdir . select single * from tfdir into ztfdir where FUNCNAME = 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_FL

42、AG (值就是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 :SMO

43、D 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*注意各

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号