ABAP三月通项目介绍

上传人:仙*** 文档编号:94360479 上传时间:2022-05-22 格式:DOC 页数:50 大小:1.27MB
返回 下载 相关 举报
ABAP三月通项目介绍_第1页
第1页 / 共50页
ABAP三月通项目介绍_第2页
第2页 / 共50页
ABAP三月通项目介绍_第3页
第3页 / 共50页
点击查看更多>>
资源描述
ABAP三月通前 言 2一 . 基础篇 21. 什么是 ABAP ? 22. ABAP开发环境的建立 53. 获得 Access Key . 64. ABAP workbench 和 ABAP dictionary 65. 第一个程序 -Hello World. 76. ABAP语法简介77.0pen SQL和 Native SQL88. 内表和工作区 89. 使用字段符号 810. 模块化程序 811. 文件处理 812. 簇数据库和逻辑数据库 813. 消息和错误处理 814. 使用用户授权 1415. 调用外部程序和程序动态生产 1516. 选择屏幕 1517. 使用程序运行变式 1518. 制作 Tcode15二. 加强篇 151. CATT152. BDC163. 制作 background job 164.SapScript 165.Smartform 166.SAP Query167. ALV168. ALE/iDoc 169. Report painter 和 Drilldown Report 1610. RFC/BAPI1611. 编写用户增强 1612. 深入ABAP工作台16三. 实战篇18MM模块开发实例18SD模块开发实例31PP模块开发实例31FI 模块开发实例 32CO莫块开发实例48开发项目流程简介 58附录:ABAP/Basis Tran sact ion Codes59错误!未定义书签。.言、八刖SAP进入中国已经有些年头,在近年,实施SAP的公司越来越多,尽管SAP本身提 供了相当强大的可配置功能,但是由于企业复杂的业务背景,特别是对各种报表的需 求,依旧免不了二次开发长期以来,特别是受各种媒体和某些机构不正确的宣传,大家对SAP心存诸多疑 虑,编写本套丛书的目的就是在于解除大家的疑虑,揭开SAP神秘的棉纱.经常有用户感叹SAP博大精深,的确如此,但是本人认为那应该指SAP的设计理 念,能融合诸多先进管理思想并可动态配置,确实是难能可贵,但是学习SAP并不难, 甚至可算是很容易,设计手机芯片难吗?难,但是没有手机用户反应其不会使用手机, 设计办公软件难吗?微软办公软件据说光从97版到2000版几千程序员花了两年时 间,但是没有听说用户反映学习办公软件难的.学习SAP也是如此,如果要说难,难就 难在国内市场上极少哪怕是介绍一个模块详细操作释疑的书籍,广大的SAP用户只能是自己摸索学习,即使参加了一些培训,可能起到的作用依旧有限,毕竟各培训教师 自编的教材参差不齐水平也不一.SAP顾问行业一度也是高薪标志,做SAP顾问需要什么条件究竟需要多长时间 磨练,这是广大立志于SAP行业的读者经常困惑的问题.就本人的经验,如读者有一 定的编程数据库和企业运作经验,做ABAP顾问三个月就足够,视具体情况而言,可能 更长,甚至更短,事实上有相当部分朋友做到了这点.本书分三部分,基础篇,以简短的篇幅介绍最基本的语法,增强篇介绍了常用的 ABAP技术,最后的实战篇以五大模块(MM|SD|PP|FI|CO)最常见开发为实例介绍 ABAPer可能要面临的开发任务.本人有近10年的各种ERP系统分析开发和技术管理经验,在多家跨国公司担任 过(迎合时下风气,在此吹牛皮N下).从2004年下年开始接触SAP在不到一年时间 参与或主持了多个项目的实施,愿意将经验和各位读者分享,同时希望此书对想从事 ABAP开发的读者有相当帮助,本书就达到目的.由于本人水平有限,错误难免,欢迎专家指正.一.基础篇如果读者已经有一定 ABAP经验,可不看此篇,在此篇中,花了很少篇幅回顾 ABAP编程的基本常识,读者如有其他开发工具的知识,花很少时间就可理解这些常 识.1. 什么是ABAP了解一下ABAP的发展历史是必要的,ABAP产生的最初的目的是用以生成简 单打印报表程序,我们知道SAP最初是为解决财务实时数据处理问题的,ABAP(Advaneed Business Application Programming-高级业务应用编程语言)现 在用于编写SAP AG的几乎全部产品源代码.严格地讲,ABAP/4不仅仅是一个开发工具,而且是一套完整的elient/server开发 环境,这很好理解,微软的Visiual Studio是一开发环境,VB,VC+等是开发工 具.ABAP开发环境包含支持程序开发的一些函数和包等.如图1-1,是SAP开发环境的一个三层架构的例图,三层侈层)的概念也不新鲜, 比如在安装SAP时也可将DB instanee安在一台server, Central instanee在另一台所 谓的Application server(我想这应是相关SAP基础系统包括各种应用程序所在),而通 常客户端安装的SAP Logon Fro nt En d,SAP会话管理器等是所谓的表示层,它通过 TCP/IP,SAP演示协议或RFC和应用服务器进行数据传输,用户看到的只是处理后的 数据返回.和Delphi的三层逻辑相近,在应用层包含多个组件象 ABAP开发平台,身份验证, 系统管理维护等用以处理会话,更新,排队,网关,数据层处理native和Open SQL等 (这是从内部机制方面看),SAP各模块应用的业务逻辑都在应用层被处理(从用户角 度)然后结果被返回.图1-2是SAP Logon的一个截图,1表示应用服务器(通常企业为了节省成本和方便 管理可能会将应用服务器和数据库安装在同一起),2System number举个实例,开发和测试服务共用一台服务器,开发使用system numberOO而测试使用system number01,通过 system numbe逻辑地将一台 physical server逻辑地分成了两台 applieation server.学习ABAP并不难,有人说SAP系统重在管理思想,不在技术,通常对有编程经 验的读者不用任何培训参考一些相关资料就可立即上手简单介绍下ABAP/4的一些特征:1. 和SAP紧密结合,尤其在开发报表方面,坦率地讲,除了和SAP集成的好处,我定 认为ABAP在报表开发上比Crystal report Tool要高效简单.2. 和VB 样,ABAP是解释形的,如读者精通VB,学习ABAP应该豪不费力,倒是既 然SAP是企业管理解决方案,ABAPer必须对企业管理流程熟悉.解释性的另一好处是可以很好跟踪程序逻辑(使用/H),这对了解业务逻辑的实和 追踪错误很有效.和VB不同的是,VB跟踪时允许程序运行指针随意往回或往 全拉而ABAP程序去不行,但是ABAP程序允许在运行时修改变量的值,这是编 译程序不能做到的.当然通常编译比解释执行的速度会更快.ABAP程序执行并不直接读取源代码,而是执行内部经过“生成”的描述 ,对于 ABAP/4字典的修改激活后将触发内部描述的重新生成,如程序并没激活就执行 原版本,或者出现错误(程序没激活可能造成ABAP Dumping ABAP).3. 在对数据库处理方面,除了可直接执行SQL(使用native sql,缺点是错误处理很难 控制,相当于有开发环境将SQL语句直接传给DB去执行),SAP在ABAP开发环 境层还提供了一套Open SQL访问底层数据库.4. 程序员都知道 Windows平台下开发都支持事件驱动,Windows系统本身也支持 事件驱动,ABAP也提供了事件驱动,这表现在Dialog编程方面,但是ABAP在此 方面并不强,而且相对讲也比较难于掌握(在后面会讨论).5. 基于面向对象的风靡,ABAP在此方面也有相当反应,在SAP强大的软件包中提供 了大量可重复使用的程序,读者也可定义类并使用它快速建立新的对象.6. 类似Java,ABAP开发的程序能运行于任何操作系统(Java有Java虚拟机,ABAP 也有ABAP processor)多种数据库(比如在ABAP字典中实现了透明表对各种底层数据库表的映射,这样在ABAP层看到的透明表就和具体数据库无关),各种网 络系统图1-3是一个ABAP开发和运行环境的图例遊开发环境1mi-3ABAP/4Oicfionaiv代 ScreenPainterABAP/4MenuPainter3运行环境Dialog processorAQAP4 processor1使用C|C+建立ABAP开发工具,数亿行ABAP source code组成SAP AG多个产 品.姑且不论国内ERP产品设计在解决企业流程上的局限性,在大多数国外的ERP产 品中我们都可看到结合自身ERP自带的开发工具,在技术上这也是落后人家所以建 议国内ERP界能少谈点象什么”不上ERP等死,上ERP找死”百分之百的企业上 ERP都失败”诸如的空洞口号(实际上我并不知道他们是凭什么得出这样的结论的),多干点实际的事情.2既然ABAP是解释型的,运行速度会有影响吗?我想多少会有的,为了解决这个问 题,除了要加大相关服务器内存外(相对日新月异的硬件技术这已非主要瓶颈),SAP本身在提高性能也提供了相当的 ABAP技术比如使用Cluster table, Pooled table和 Logical database 在 接下来会有详细介绍 .2. ABAP开发环境的建立一个ABAP顾问和我讨论说,大学毕业我做ABAP开发不久做了顾问,薪资相当 可观,最要好同学在unix平台下写Cobar组件,薪资却并不理想.从技术角度,我认为使用C+写组件肯定比ABAP开发难度要高,用其人话说他 是坐的庙好.是的,SAP行业特别是早些年是个被异化的行业,人们可看到某些人出于 经济目的铺天盖地的对ERP不正确的宣传,这同样反应在IT各行业,”拿到XX牌 Route认证,拿到XX网络认证,拿到XX数据库认证,拿到XX管理学位年薪基本的 都在十几万以上”现在人们发现实际不是这回事,从现在,SAP也已经开始降温了,我 想这趋势还会持续.和学习其它语言唯一不同的是,ABAP是集成在SAP基础平台系统中的,为了学习ABAP,你必须安装一套SAP(可选择R/3,miniSAP,或IDES ),而通常的情况是安装光盘 渠道比较难找(只有一些大企业实施了 SAP才可能有,而且还必须注意版权问题,其他开发工 具随便都可找到安装程序),对想学习ABAP的程序员这是个主要门槛.掌握基本的ABAP开发环境对ABAPer是有益的,似乎多数ABAPer对底层并不感 兴趣,3. 获得 Access Key .4. ABAP workbench 和 ABAP dictionary5. 第一个程序-Hello World.ABAP Editor; Initial ScreenSJ1.5-1 I, 二一絶 町峙 u a a bt|iMisc.-Error Management 按钮也 可).-*另外临时处理方法 一是将相关component的物料Cost 1 View 选上Do not Costing .对需要计算标准成本的材料选上它就不再允许计算标准成本,不妥,但是对原材料无所谓,因为系统会这样处理,如此材料没维护价格,BOM用到它的成品不计算其成本,但是如此物料维 护了价格后,还是以物料价格为先的.(当然CK11N去估算此原材料是不行的,用户也不需如此 做).二是按SAP推荐的如果将 price设成0.01,price unit 设置成100.Case 2如何限定物料价格必须维护 .(1)对采用S price control的.SAP默认是 Warning(Tcode :OMT4 M3-132,如需要限定必须维护价格,将其改成W就可. 对采用V price control的,OMT4找不到其消息号 M3-131,但系统默认是 Warning,如果用户认为也有相关配置就有犯了认为SAP万能的错误,再次强调SAP只是一堆代码并不神秘.好让我们看看其逻辑.*实际上直接使用 SE16:T160M可直接配置MM目关.如图:1SE38找到程序LMG1仆01 2在此处设置断点3如价格为0(空格)写死的,当然配置无效.includeL1HG11F01ActiveI IF VEK VPRSV =矿 AND VER VERPR = 0, 2jCASE P MESSAGE.圳HEM SPACE. 3jMESSAGE W131,MESSAGE 1131.WHEN J .ENDCASE.ENDIF,再看S Price control(如下图,显然从T160M表读了 IMG数据).IF STP VPRSV = J SJ AMD STF STPRS = 0,MESSAGE E132 RAISING WO_OTRS. *uh zu 3. Od (- laut MH zulassig/ ist auch Ln MR21 erlaubt)Wegen Auiwartskoiipatibil 1 tat Message customizbar gemacht 55/111296 CALL FUNCTION J KE_CHECK_T160MJ q |EXPORTINGI_ARBGB = MFIJSGNR = J132JX.MSGVS = *00*EXCEPTIONS恥THING = 00WARNING = 01ERROR = 02.CASE SY-SUBRC,WHEN 1.CASE P_1ESSAGE,WHEN SPACE.MESSAGE VI32*WHEN J IJ . MESSAGE 1132.WHEN J NJ ENDCASE.THEN 2.MESSAGE E132 RAISING NO_STPRStENDCASE,4灵活运用消息.对于消息的运用,除了可配置消息类别外,另外一个重要用处就在于,可根据消息找到程序弹 出消息的确切行,然后稍微花点时间看看程序逻辑就可大概知道异常发生的根本原因从某种程度来讲,即使对某模块很陌生,只要掌握得好,依旧可排除一些问题5配置自定义的消息. 俩方法可模妨SAP勺消息配置 1从上我们已经知道既然T160M是可直接使用SE16维护的,我们就可直接将相关设置写入T160M.然后就可根据相关设置取得消息类别(如上图我们使用函数 ME_CHECK_T160M这样 比类似MESSAGE E017(ZFIMSG)Hard code要安全得多,假设不管三七二一就给 出错误消息,除非在程序中确信已考虑了所有情况,否则还是在T160M这样设置比较 好(万一在生产环境还可更改 E成 W什么的).ZFIMSG Message Class for FI Customized ProgramsData Browser: Table T16OM Select Entries 200 捻如 S S 3 H Check Table,.Table:T160MDisplayed fields:6 of 6 Fixed coltunns:4MANDTKSGVSARBGBHSGHRMSGTFMSGTYWSJ2202202202202200000000000!?L3L3L9ZFIMSG伽438711040017$WE2我们知道T100C是所谓的可配置消息表,我们可使用SE16:T100C和V_T100C. (1)SE16:T100S定义消息可配置信息.如图1在此新建.(进去browse数据似乎不可新建)Data Browser: Initial Screen E 0Table Name|T100S设置消息如下图1Appl Area 消息类ZFIMSG. 2表示允许配置的消息类型3没选则表示不能关闭消息Change View Configurablemessages11: Overview? New Entries J H鳳H3Application AreaMsgfdoAllowedStandardSwitch offE1 1WY178WEW0*収179幅甲-WY1S2KE回ZFIMSG 11017EIAS 2 i 31J(2)SE16:V_T100C 配置消息.如图:1表示直接使用程序(Tcode)的消息类型2当当程序以BD(方式运行时的消息类型3就是上图设置的允许的消息类型,可看到警告和关闭都没出现 (T100C没允许)Message Control by Useri.Msfo017Message textUser NameRestrictionsMessage type (5) 4 BntrieiOnline Batchi StandardESSDAS3 ijnlta ts 岡1= 0MsgT DescriptionErrorsNote In windowTerminationNote in foolerTEKT2同样在程序中避免使用泪水 MESSAGE E017(ZFIMS而采用CALL FUNCTION READ_CUSTOMIZED_MESSAGE EXPORTINGI ARBGB = ZFIMSGI_DTYPE =I_MSGNR = 017IMPORTINGE_MSGTY = SY-MSGTY.根据返回的SY-MSGT去判断消息类型将更好些.6实例介绍P(在有发票校验后禁止修改价格,假设无PO release策略,使用User-exit步骤如下:(1) 找合适的用户出口发现 EXIT_SAPMM06E_01 比较合适,SMOD输入 enhancement name :MM06E005(2) 编写代码.*&*& In clude ZXM06U42*&*DATA : ZWATEKPO like BEKPO ,ZIEINFO LIKE EINFO OCCURS 0 WITH HEADER LINE, ZERMSG(73) TYPE C.TABLES EKBE .*TEKPO records all the old PO item date .* I_EKPO records curre ntly processed PO item .READ TABLE TEKPO INTO ZWATEKPO WITH KEY EBELP = I_EKPO-EBELP . *只对ME22才生效.CHECK SY-TCODE = ME22N .*EKBE是PO history 表,如有Q,R表示有发票校验历史,不允许更改价#SELECT SINGLE * FROM EKBEWHERE EBELN = I_EKPO-EBEL nAND EBELP = I EKPO-EBELPAND ( BEWTP = Q OR BEWTP = R).#CHECK SY-SUBRC = 0 .*如果SY-SUBRC二表示发票已经校验,不允许更改价格,否则还是可更改价格IF l_EKPO-NETPR ZWATEKPO-NETPR .* Cha nge eO17(ZFIMSG) accordi ngly* MESSAGE e017(ZFIMSG).使用下面函数代替.CALL FUNCTION READ_CUSTOMIZED_MESSAGEEXPORTINGI_ARBGB = ZFIMSGI_DTYPE =I_MSGNR = 017IMPORTINGE_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_TEXTEXPORTINGIEINFO = ZIEINFOILANGU = SY-LANGUIMPORTINGETEXT = ZERMSG . MESSAGE ZERMSG TYPE 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. 深入ABAP工作台在这章将深入介绍各种 ABAP 对象的操作 .13. 传输请求这节并不是侧重介绍如何配置传输请求和其运行机制的,这通常是basis的工作和 ABAPer 并无关系,还是那句话 ,了解点大概是必要的 .通常企业起码会有两个系统 ,开发 (测试)系统和生产系统 (有些企业开发任务相对少 , 开发和测试使用同一台server甚至同一 client,开发和测试也都有ABAPer完成),如 果要严格开发流程,开发,测试必须是分开的(为了节省当然可使用同一 server不同的 Client甚至用不同System Number逻辑分成两Server)在此不深入讨论.熟悉几个名词 :1开发类 (Development Class).开发类可简单理解为逻辑上相关的一组 ABAP 对象,在将来传输时将使用同一 传输层实际上开发类本身也可看做是一个 ABAP对象,可使用SE80建立.$TMP 是本地开发类 ,属于此开发类的任何 ABAP 对象(包括自定义的表 ,编写的程序 等都只能在 Client 做测试用而不能被传输到其他 Client.包现在被用来代退开发类 .2. 包(Package)相关的 ABAP 对象被组合在一个包内 ,SE16:TADIR 可看到被分配到某包的所有 的 ABAP 对象,包决定了这些对象的传输层 .所有的包被存在表 TDEVC中,建立包可使用SE80或直接使用SM30:V_TDEVC.包作为开发类的退代和前身有这么几个加强特征 .1. 包可嵌套使用 (这点类似 Java package)2. 包类可包含最多本包中可见的对象 ,这些对象在包外不可见这点类似私有对象(Private object)在 OOP中也很常见.3. 包可为包接口定义使用访问授权 .4. 通常自定义包必须是 Y 或 Z 前坠,这点和其他 ABAP 对象相同 (包其实也可看做 ABAP对象).其他一些包前坠A-S, U-X表示SAP标准包,T私有测试包,$本地临时 包,/* 名字空间前坠 .3. 传输层 (Transport Layer) 传输层决定包内对象是分配给本地还是可产生传输请求 . 通常,开发系统都被分配了一个标准的传输层 ,当包被建立时 ,.它就被分配了一个标准 传输层 .包内对象也立即自动获得相关传输属性 .相关 IMG 配置使用的是标准的传输层 .通常由basis使用Tcode STMS配置传输管理系统维护传输曾和路由.图2.13-1,显示的是从DVU开发的程序传输到QAS和PRD的传输路由,在图中程序 在DVU server的client 210,100开发后被传输到QAS Client 310测试,成功后被分别 传入 PRD Client 800,810和 820 .Three System Landscape (Test)06/13/2005 14:41:32TransportZDVUSystem DVU |r|盘Transport SAPFirst Targ 、/ZQAS/y- 210- 100Hz 13-14. 传输请求程序是究竟保存在server的什么地方?程序是如何在不同client和server之间进行传 输的?要明白这问题,首先让我们看看什么是传输程序和传输控制程序 传输控制程序TP和R3TRANS传输程序,R3TRANS被用来实现SAP各Client间的 数据传输和不同版本迁移,TP传输控制程序根据传输参数(Transport Profile)调用 R3TRANS传输程序.14. 和其它语言的交互VB,Delphi,Java其实开发工具使用都简单,别人都弄出开发环境都给弄出了学用还 会难吗?二.实战篇在这一篇将介绍企业常用模块开发实例,其中可能还涉及一些辅助相关后台配置 每个模块的8个实例是经过精心挑选出的具有相当代表性,由于篇幅原因和各个企 业实际需求可能不一样,有的可能在本书只描述了设计思路和部分源代码,希望读者 在实际运用中能自行完善并能举一反三除非必要,尽量使用SAP标准的报表少自行 开发,另外,如有可能,使用信息结构1. MM模块开发实例.MM常用表格及其关联关系图.开发实例下面是一个企业的参考MM开发需求清单(并不包括用户出口等).供应商列表 信息记录|PR,PO打印(Scrip或Smartform)|MRB物料清单|物料报废报表 物料入库 报表|物料运输申请单|物料主数据查询报表|收货单打印|IQC报表|Pull List|发料单(生产定单)|物 料转移单|Delivery notes|Packing List|RMA发料单库存分析报告|PO分析报告|GR/IR分析报 告|物料盘点单|盘点物料报告等.如项目紧急而开发人手不足(有些中小企业专职的ABAPer可能只有一个或各模 块的SAP内部支持顾问兼做开发),必须排定开发优先次序,除了比如PO套打收货单 打印等必须在项目正式上线前完成的开发任务,相关查询报表可在上线后开发如果是专职负责开发,依旧需要很好理解业务,最好和负责业务支持的多沟通,一 个最有效的方法就是将相关模块的业务流程(通常在业务蓝图阶段会有非常详细的 相关资料)在测试系统走一遍,这样对以后开发是大有益处的1. MM相关单据打印PO和收货单打印开发NACE,MB04 外协 PO.2. P 0增强编程PO cha nge history*&*& In cludeZXM06U42*&*DATA : ZWATEKPO like BEKPO ,ZIEINFO LIKE EINFO OCCURS 0 WITH HEADER LINE,ZERMSG(73) TYPE C.TABLES EKBE .*TEKPO records all the old PO item date .* I_EKPO records curre ntly 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 EKBEWHERE EBELN = I_EKPO-EBEL nAND EBELP = I_EKPO-EBELPAND ( BEWTP = Q OR BEWTP = R).CHECK SY-SUBRC = 0 .*如果SY-SUBRC =0表示发票已经校验,不允许更改价格,否则还是可更改价格#IF I_EKPO-NETPR ZWATEKPO-NETPR .* Change e017(ZFIMSG) accord in gly* MESSAGE eO17(ZFIMSG).使用下面函数代替CALL FUNCTION READ_CUSTOMIZED_MESSAGE EXPORTINGI_ARBGB = ZFIMSGI_DTYPE = ”I_MSGNR = 017 IMPORTINGE_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 EXPORTINGIEINFO = ZIEINFOILANGU = SY-LANGUIMPORTINGETEXT =ZERMSG.MESSAGE ZERMSG TYPE SY-MSGTY .ENDIF.自动建立PO和SOSE11建立一记录表 ZPOSO20使用 PO User_exit21*本程序思路同样适合从建立 Sales orde时自动建立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 ne.)3. 判断*注意EBELN和EBELP合起来才是key fields相当于DB层的Primary key伞=SOa E 1 K fflTechnical settingsAppend structuiTransparent table2P0S0ActiueShort descriptionTest table For SD issueAttributes Fields Currency/quant- fields创列囤囱FieldsCheck tableUalue taReference tableRefT FieldKEy 卜丄d typEBELNI#EBELNEKKOEBELPEBELPEKPDUBELHUBELN UAUBUKPOSMRPOSNR UAUBUPUAERSUAERSTCURCMATNR11MATNRMARAKUNENGKUMENGUBAPURKMENETPftNETPRUBAPIMERKBAPMSGFLAG二.使用 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 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 in dex sy-tabix TRANSPORTING MAND.en dloop.update tfdir from ztfdir.*由于只有一笔使用Work area就可搞定,所以要这样霸王强上弓是没有找到配置 在哪里.REPORT ZTEST11 .data ztfdir 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_FLAG (值就是 C)才会call相应的User_exit函数用户增强:所有的Enhancemen在表MODSA用户增强大概有三类MODSAPEnhancemen表,而TFDIR是看是否此enhancemen被激活,就看字段MAN是 否是” C而已1. E Enhancement exits : 就是常说的写 User_exit2. 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同 样很简单 .Function module Edit iGoto Utilities Environment System Help&1 日0 Q ImtatJfl觀?3心罔丨園圄6Fuaction Bailtfer:MODX FffNCrrffft HCT/ffE HLK便 乡-J5可 G,屈吟蟲昼口吁 Pattern HeT lnseFunction nodule AttributesMODK_FUNCTIOH_fiCTIUE_CHECKActiveImportExportChangingTablesExceptionsSACTIUE = SPACE-HFUHCNAME-PRDGNAIIE = CPROGNAME.* Numnr angegeben - prJe aingegeibnn Funktionsexit IF FUHCNUMBER ftKTIU FLfiG.ACTIVE - X-ENDIF.EXIT_SAPMM06E_013 in elude 程序 ZXM06U44在 coding 前使用 SE37 test BAPI :BAPI_SALESORDER_CREATEFROMDATA *注意各企业因为设置的fields status不同可能有所不同.对ORDER_HEADER_IN只需下面几个参数Editor-ffE&ES_ Iff FroM Entr-jORDER_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.吧.2 EntriesPAPARTN_NUMBITM NU9000360B0090SP800042OOOB00还有一样要注意.AG SP, RE-BPSH (SAP经常有这样的case就是save在DB中的数据和display出来的数据有所不同,为什么要这样,不得而知难怪SAP不推荐直接使用DB table做报表, 或者这是SAP AG的一个策略)liable : TPARDisplayed fields: 9 qF 9 Fied columns:? List width G25fl测试使用 BAPI_SALESORDER_CHANGE就是说它实际是 call BAPI_SALESDOCUMENT_CHANGE 的你可知道 ORDER_HEADER_INX-UPDATEFLAG 为 U 时是 update为 D 时是 Delete sales order不选还不行.FUNCTION SD SALESDOCUMENT CHANGEPERFORM MSMOUEHEADERINX USING ORDERHEADERINX.IF ORDERHEADERINX-UPDATEFLAG NE D1 AND卜 ORDER_HEADER_INX-UPDfiTEFLAG NE U1.PERFORM ERROR_P
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!