2.BDC
3.制作程序的background job 4.SapScript 5.Smartform 6.SAP Query 7.ALV编程 8.ALE/iDoc
9.Report painter和Drilldown Report 10.RFC/BAPI 11.编写用户增强
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 .
4.传输请求
程序是究竟保存在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.PO增强编程 PO change history *&---------------------------------------------------------------------* *& Include 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 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 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_ARBGB = '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 ETEXT = ZERMSG . MESSAGE ZERMSG TYPE SY-MSGTY . ENDIF. 自动建立PO和SO
一. SE11建立一记录表ZPOSO ............................................................................ 20 二. 使用PO User_exit ............................................................................................ 21 ***本程序思路同样适合从建立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 line.) 3. 判断
***注意EBELN和EBELP合起来才是key fields相当于DB层的Primary key