SAP NOTES

SAP R/3 接口技术剖析
  2006-09-20
  作为目前ERP市场上最为领先的应用系统之一,一直以来,SAP R/3在提供API应用编程接口和接口工具方面也同样领先于其它ERP厂商。ALE/IDocs是SAP公司为SAP R/3 R4.6C版本所提供的接口机制,目前应用最为广泛。在 R4.0以后的版本中,又添加了技术上先进的BAPI。本文作为系列介绍之一,对ALE/IDocs, BAPI以及其它可用的整合方式进行介绍。
  1、ALE/IDocs是什么?
  ALE 是Application Link and Enabling的缩写,是SAP专门为SAP与SAP之间所设计的整合中间件。IDocs是中介文本 (Intermediate DOCument) 的缩写,是SAP提供的系统整合专用的数据/消息格式。ALE在SAP 3.0版本开始就作为SAP整个应用体系的一部分,为分布式数据交换提供了可靠安全的通讯机制。ALE的设计,原本作为两个SAP流程之间的一种消息传递服务(Messaging Service) ,使SAP与SAP的业务流程之间企业数据能够有效的交换,为两个独立的SAP之间提供了的系统整合服务。不过,随着应用的发展,ALE/IDocs接口机制也已然成为与其它非SAP系统的标准的整合方式。
  2、ALE/IDocs的消息发送接收过程
  ALE的设计结构可以分为三层,即应用层,数据/消息分配层和通讯层。通讯层是SAP整合机制的基础,它利用远程功能呼叫RFC(Remote Function Call) 调用SAP系统的功能模块。
  
  数据/消息分配层,主要提供三个关键服务:
  • 按数据分配模型决定数据接收者。
  • 消息的过滤和转换。
  • 数据/消息的压缩,以提高传递效率。
  应用层直接与SAP系统接口,生成或从其它系统接收含有路由信息的消息文本IDocs,包括消息接收者的姓名,要求发送的类型以及对消息进行处理的规则。
  ALE的机制代替了原来的SAP所提供的批数据通讯BDC(Batch Data Communication) 方式。顾名思义,BDC为系统之间提供了简单的数据批处理服务,还不能作为一种中间件技术,它没有提供系统之间进行无缝整合所要求的纠错功能、系统管理和其它安全措施。总得说来,应用SAP的ALE机制进行SAP与SAP或非SAP系统整合有以下几个好处:
  • ALE技术不受SAP版本升级的影响,它提供了版本向后兼容性。ALE定义于SAP应用层,与SAP的逻辑层相对独立,整个ALE中间件独立于发送和接收系统。
  • ALE消息设计逻辑保证消息的“一次且只有一次”的消息传递。ALE采用“存储-发送”技术确保消息即使系统发生故障或接收方没有准备接收时也可以达到目的地。这样就保证接收方不至于收到重复消息。
  • ALE也提供了IDocs管理功能。主要有文本缩减、文本版本控制以及文本数据过滤。三种控制机制使得SAP开发人员可以根据实际需要对IDocs文本在运行中进行动态处理。
  • ALE提供了系统管理功能,允许对ALE系统进行启动/复位/恢复等系统操作,为开发人员提供了进一步的管理控制。
  IDoc 几乎可以传带任何SAP应用的数据,是一种“外围”定义格式,与SAP的应用数据定义不直接相关。IDocs已经广泛应用于早期的SAP-EDI的数据交换,因而它的设计有点类似于EDI的标准,即EDIFACT标准。
  IDocs是以字符基础的,因而是可读的。它有三种纪录类型,即:
  • 控制纪录-含文本信息,如IDoc类型,发送/接收方信息以及文本标识。
  • 数据纪录-含管理和实际数据部分。
  • 状态纪录-用来追踪文本传递各点的状态,如状态码,系统时间,错误标识等。
  
  下面对ALE/IDocs在系统整合过程中消息的实际传递进行介绍。
  让我们首先看发送过程。
  3、BAPI简介
  一个发送过程由事件触发,文本生成,数据打包以及交由传输媒介传递这四个步骤组成,具体如下:
  • 应用系统事件触发
  系统目标(Objects) 的状态变化,用户自主活动或其它数据库特定变化等可以启动数据表的触发程序,从而进行数据传递的初始化工作,如数据准备。
  • 生成主IDoc文本(Master)
  按标准格式生成主IDoc文件,包含所有可以传递数据(不分接收者)
  • 生成通讯Idoc
  从主IDoc中生成只与特定接收者有关的文本,通讯文本是主文本的子数据集(Subset)
  • Idoc 发送
  利用异步通讯方式将一定版本的IDoc传递到接收方。
  
  下面,让我们看接收过程。
  接收过程始于SAP系统从外部收到IDoc文本。接收过程的优点在于,接收方既可以是SAP系统,也可以是第三方系统,这也是SAP与第三方进行有效整合的基础。接收过程由以下三个步骤组成:
  • 存储Idoc-将文本存储于数据库,并进行语法校验
  • 邮件处理程序读取Idoc--一个专门设计的IDoc处理程序读取IDoc并产生SAP或其它系统所需的系统消息。多个程序可以同时运行。
  • 生成系统文本--处理程序进一步生成系统文本供系统使用,并将结果信息存于Idoc d的状态纪录中。
  
  BAPI是Business Application Programming Interface的缩写, 是SAP为3.0版本以上提供的基于企业目标(Business Object) 技术的接口应用界面。SAP在3.0版本以上采用了Object-oriented技术,逻辑定义了SAP R/3系统的所有功能目标,并且将所有的目标(Objects) 和BAPIs存储于企业目标库BOR(Business Objects Repository). SAP R/3 企业目标的目标类型(Object Type) 相当于目标设计语言中类(Class) 的概念,其定义结构由以下几部分组成:
  • 基本数据--所有目标类的通用属性,如目标标识和默认方法(Method) 。
  • 接口界面--目标的方法(Method), 事件(Event), 特征(Attributes) 。
  • 键(Key Fields)--供BOR中目标检索使用
  • 方法(Methods)-- 对目标进行所要求的各种操作。
  • 特征(Attibutes)-- 描述目标特征。
  • 事件(Events)-- 触发以改变目标状态。
  4、应用SAP-DCOM接口
  SAP于1998首次提供SAP-DCOM接口,以满足各种桌面应用开发的要求。利用DCOM连接端口,开发人员可以利用VB, C++,以DCOM目标方式访问SAP数据。在Web应用上,可以用VBScript, JavaScript 以DHTML方式页面访问,也可以用ASP访问数据。
  另外,利用DCOM也可以间接访问SAP的企业目标库BOR。上面提到的BAPI是SAP系统上专用的,在实际应用上不如DCOM来得广泛。DCOM端口主要有两个技术模块组成,一个是管理模块,另一个模块生成SAP BO的DCOM 代理组件(Proxy Components),生成的DCOM组件存放于C++。代理组件有以下属性:
  • Client-要访问的R/3客户系统
  • UserID-R/3用户
  • Password-用户密码
  • Language-系统语言
  • Destination-预先定义的目标名称
  另外,每个组件具有以下方法:
  • PutSeesionInfo()—设定系统一次调用的目标参数
  • AdviceRfcGuiSink()—用于需要SAPGUI或dubugging的场合。
  • CommitWork()-用于数据更新,无implicit commit的场合。
  • InitKeys()-DCOM目标键初始化
  • DimAs()-返回Microsoft ADO(Advanced Data Object) 纪录集(支持游标控制)。
  • 其它从R/3 BO定义中继承的方法。
  总起说来,SAP R/3 作为一个相对灵活的ERP系统,利用上述的各种整合技术能够实现SAP系统之间以及SAP 与其它系统之间的数据/过程的整合。当然,一个应用系统的高度客户化导致了系统整合的难度。随着系统功能的增加,多种可供采用的整合技术也就显得很有必要。对于SAP R/3用户来说,正确选择适用的整合技术是实现成功系统整合的关键。
  利用BAPI,开发人员可以实现对BOR进行实时访问,从而实现应用系统(SAP-SAP)之间在数据/逻辑层上的有效整合。
  透明表
  每个透明表在数据库中有一个相应的物理表。物理表的名称和数据字典中的逻辑表
  定义的名称一致。所有事务和应用数据存贮在透明表中。
  结构
  结构在数据库不存在数据记录。结构用于在程序之间或程序与屏幕之间的接口定义。
  附加结构
  附加结构定义字段的子集,该字段属于其他表格或结构,但是在修正管理中作为单
  独的对象。
  存贮表
  存储表可以用来存贮控制数据(例如:屏幕顺序,程序参数或临时数据)。几个存
  储表可以组合成一个表库。该表库和数据库中的一物理表库相一致。它包含了各组
  合库分派给它的所有记录。
  簇表
  连续的文本如文档之类可以存贮在簇表中。几个簇表可以组合成一个表簇。对这种
  表类型,不同表中的几个逻辑行组合到一物理记录。这可以实现一对象接一对象地
  存贮或访问,访问簇中的表的一个前提是,至少关键字的一部分必须相符合。几个
  簇表存贮在数据库中 一个相应的表里。
  >
  2006.5.12 14:17 作者:king 收藏 | 评论:0
  如何定义内部变量
  分类:专业技术
  > DATA [()] [] [].
  注:对于C和N型,如果length不输入,则默认长度为1;对于N型变量,如果值中包括字符,则字符不起作用,只输出数字。如果length大于实际内容的长度,则对于C型来讲,以空字符来填充,对于N型来说,对0来填充。如果指定长度,但未指定类型,则创建给定长度的字符字段。
  ? 例子:Str=’ab123’,NStr = ‘1245ab3’,Int = 100
  write 'This is star''s computer.'. 输出:This is star’s computer.
  DATA Str type C. 输出:a
  DATA Str(5) type C. 输出:ab123
  DATA NStr type N. 输出:3
  DATA NStr(7) type N. 输出:12453
  DATA NStr1 like NStr value ’1234567’. 输出:1234567
  DATA Int type I. 输出:100
  DATA Pdat(10) type p value '9.876543210' decimals 9. 输出:9.876543210
  CONSTANTS PI TYPE P DECIMALS 10 VALUE '3.1415926536'. 输出:3.1415926536
  DATA MYNAME LIKE SY-UNAME. 与系统定义的对象SY-UNAME有一样的数据类型
  ? DATA SUM1 TYPE I.
  DATA SUM2 TYPE I.
  DATA SUM3 TYPE I.
  和
  DATA: SUM1 TYPE I,
  SUM2 TYPE I,
  SUM3 TYPE I,
  是一样的,这就是链语句。 >
  2006.5.11 11:23 作者:king 收藏 | 评论:0
  预定义的数据类型
  分类:默认栏目
  > C(文本和字符):文本文字最长可达254个字符。如果需要非整型数值或较长的数字(如:'12345678901234567890'、'+0.58498'、'-8473.67'),则必须使用文本文字,该文本文字自动转换到正确的类型。同样,请使用文本文字表示浮点数值。
  D:(日期):
  F(浮点数): 对于正数和负数,类型F数值范围是1x10**-307到1x10**308,包括0(零)。精确范围近似为15位十进制数,这取决于硬件平台的浮点算法;由于是在内部将类型F数据转换为二进制系统,因此可能出现舍入误差。尽管ABAP/4处理器试图将这些影响减至最小,但是如果要求高精度,则不应该使用类型F数据。而应代之以类型P数据;如果需要大的数值范围,而且舍入误差不重要,则可以使用类型F数据。
  I(整型):数值范围是-2**31到2**31-1并且仅包括整数;对算术运算的非整型结果(如分数)进行四舍五入,而不是截断;可用于计数器、项目号、索引和时间期段等。
  N(数字文本):虽然由数字组成,但不包含数值,,但这些数字不用于计算。科目号和邮编是典型的类型。
  P(压缩号):允许在小数点后有数字;类型P数据的数值范围取决于大小和小数点后的位数,有效大小可以是从1到16字节的任何值,将两个十进制数字压缩到一个字节,而最后一个字节包含一个数字和符号,在小数点后最多允许14个数字;使用类型P数据时,最好将程序属性设置为“定点算法”,否则,将类型P数字作为整型对待;类型P数据可用于如距离、重量和钱数等数值。
  >
  2006.5.11 11:18 作者:king 收藏 | 评论:0
  程序属性的一些关键内容
  分类:默认栏目
  > 进入程序开发界面,输入program名字后,进入程序属性界面(Program Attributes):
  ? Title(标题):必须输入项;
  ? Type(类型):包括Executable program(1:如同报表的独立程序)、INCLUDE program(I:包含程序)、Module pool(M:模块存储)
  ? Application(应用程序):该项能够使系统将程序分配给适当的业务区,如:选择Financial Accounting(F:财务会计)。
  ? Logical database(逻辑数据库):仅仅应用于应用程序中的报表程序。这个属性决定报表使用哪个逻辑数据库来检索数据,以及逻辑数据库属于哪个应用程序。应用程序中数据库名称必须是唯一的。但是,整个系统可以包括数个同名数据库,因此指定应用程序很重要。如果报表程序直接读取数据,而未使用逻辑数据库,则应该像通常一样指定应用程序,而将“逻辑数据库”字段置空。
  ? Selection screen(选择屏幕版本):仅仅应用于应用程序中的报表程序。如果没有指定选择屏幕版本,则系统在逻辑数据库选择标准、报表特定参数选项的基础上自动创建选择屏幕;如果想使用自己的选择屏幕,请输入号码同时该号码必须小于1000。
  ? Editor lock(编辑器锁定):如果设置此属性,则其他用户则不能修改、改名或删除程序。只有创建用户可以更改程序、维护属性、文本摘要及文档或者解除锁定。
  ? Fixed point arithmetic(定点算术):如果设置此属性,系统则根据小数点位数将类型P字段四舍五入,或用零填补。这种情况下,无论在用户主记录中指定了什么,小数点字符总是句点(.)。
  ? Start using variant(通过变式启动): 仅仅应用于应用程序中的报表程序。如果设置该属性,则用户只能通过使用变式启动报表程序。在启动程序之前,必须创建至少一个报表变式。 >
  2006.5.11 11:04 作者:king 收藏 | 评论:0
  ABAP4的命名程序规则
  分类:默认栏目
  > ? 使用至少1个但不超过8个字符。
  ? 不要使用下列字符:句点(.);逗号(,);空格( );括号'('')';单引号(');双引号(");等号(=);星号(*);元音变音( , , , , , )和' ';百分号(%)和下划线(_):
  ? 报表程序(以列表格式输出数据分析):Yaxxxxxx或Zaxxxxxx。用应用程序区的分类字母替换a。任何有效字符替换x。注意SAP报表程序遵守相似的命名约定:Raxxxxxx。
  ? 任何其它ABAP/4程序(培训程序或事务程序):SAPMYxxx或SAPMZxxx。用有效字符替换x。注意标准SAPABAP/4程序遵守相似的命名约定:SAPMaxxx,其中a代表某应用程序区。 >
  2006.5.11 11:02 作者:king 收藏 | 评论:0
  关于SAP内表及工作区
  分类:默认栏目
  > 内表(internal table)和工作区(work area)的区别
  ABAP/4的Internal Table如同其他语言的数组结构,在操作上可以有复制,删除,新增等功能,可以存很多条记录,并且ABAP的这种用法,对行数没什么限制。
  WORK AREA就是其他语言的结构,象自定义的一个类型一样,但一旦创建一个Internal Table之后,WORK AREA就成了外界跟Intertal Table的交流口,每条记录的进入和取出都得通过它。并且在清除它们的时候要分开来清除。
  要用 MODIFY 语句更改行 ,请使用:
  语法
  MODIFY [FROM ] [INDEX ].
  FROM 选项中指定 的工作区域 代替 中的行。如 果表格有表 头行,可以 忽略 FROM 选项。这样 ,表格工作 区域就代替 行。
  如果使用 INDEX 选项,则新 行代替索引 为 的现有行。 如果替换成 功,则将 SY-SUBRC 设置为0。 如果内表包 含的行少于 , 则不更改任 何行并且 SY-SUBRC 包含4。
  如果使用没 有 INDEX 选项的 MODIFY 语句,则系 统只能在 LOOP - ENDLOOP 块中通过更 改当前行( 例如由 SY-TABIX 返回其索引 的行)来处 理它。
  modify 是用来更新内表的!
  >
  2006.5.11 10:58 作者:king 收藏 | 评论:0
  ABAP基础篇-语法-数据类型
  分类:专业技术
  > > >
  1. 数字类型(numeric types)
  (1).类型
   Abap支持三种数字类型:
   I:整型
   范围:-2147483648 to 2147483647
   P:16位
   范围:取决于小数位的长度
   注意事项:为了确保计算正确,必须在程序属性中把fixed point arithmetic选中,参考图1。
   F:浮点类型
   范围:+/- 2.2250738585072014E-308 to 1.7976931348623157E+308
   注意事项:因为长度的关系,所以尽量不要用两个该类型的数据相等作为判断条件
  (2).定义方法
   [f1] type I.
   [f1] type P decimals [num].
   [f1] type F.
  (3).使用
   I类型:
   主要是用于计数器,数量,索引,偏移量等等
   例如:
   *取得内表行数
   DATA: V_COUNTER TYPE I.
   V_COUNTER = LINES( I_TAB ).
   *根据索引读取内表中的数据
   DATA: V_INDEX TYPE I.
   READ TABLE I_TAB INDEX V_INDEX.
   *截取字符串
   DATA: V_OFFSET_START TYPE I,
   V_OFFSET_LENGTH TYPE I,
   V_C(10) TYPE C,
   L_C(3) TYPE C.
   V_C = ‘ABCDEFGHIJ’.
   V_OFFSET_START = 3.
   V_OFFSET_LENGTH = 5
   L_C = V_C+V_OFFSET_START(V_OFFSET_LENGTH).
   RESULT:
   L_C = ‘DEFGH’.
   P类型:
   主要和数据库中的QUAN类型关联;
   常用场合:大小,长度,重量,货币等有单位的场合
   *根据单位把数量写入字符型变量中
   WRITE:[数量] to [字符型变量] unit [单位].
   F类型:
   常用场合:计算
  字符类型:
   一.包括:
   C:字符
   N:应该算是字符型的数字
   D:日期类型,标准长度8(YYYYMMDD),注意其初期值的判断,不是space,而是'00000000',判断语句可以使用is initial or not。
   T:时间类型,标准长度6(HHMMSS)
   二.具体使用:
   1.对字符串的操作
   1).SHIFT:截断字符串
   SHIFT {c} [BY {n} PLACES] [{mode}].:
   作用:去掉字符串的前n个位置的字符,如果n未指定,默认为1,如果指定的n小于等于0,则字符串不变。如果n超出字符串的长度,则字符串变空,所以在做此操作的时候要注意n的指定。可以首先获得该字符串的长度,方法:len=STRLEN(C)。
   Mode:指定字符串截断的方向。
   LEFT:从左边截断
   RIGHT:从右边截断
   CIRCULAR:把左边的字符放到右边。
   SHIFT {c} UP TO {str} {mode}.:
   作用:把字符串中在str以前的字符都去掉,同样可以指定mode,原理同上。
   SHIFT {c} LEFT DELETING LEADING {str}.
   SHIFT {c} RIGHT DELETING TRAILING {str}.:
   作用:这两个语句就是把字符串c中前的(LEFT)或者后的(RIGHT)的字符str都去掉。
   以上语句常用的场合:
   A.去掉字符串中的前导字符。例如:如果alv中定一了一个字段是10位的字符,里面放的是so,po等number,而你不想显示前面的0,那么就可以这样做:SHIFT {c} LEFT DELETING LEADING 0.
   B.已知某个字符串中包含固定的字符,想把这个固定字符前面的字符删掉,那么可以使用:SHIFT {c} UP TO {str}。例如:某个物料,通过增强mga00002和mga00003对其加了前缀,这个前缀部分是在某固定值表中取得的数据,在具体显示中,要把其前缀去掉。如TE-MRP-MAT1中想把te去掉,mrp表示该物料是跑mrp的,需求要求把te-去掉,mrp可以在固定值表中取得,则可以使用SHIFT {c} UP TO 'MRP'.
   2).REPLACE:替换字符串
   REPLACE {str1} WITH {str2} INTO {c} [LENGTH {l}].:
   作用:把字符串c中的str1替换成str2,如果指定l,就是指定了替换的长度。如果替换成功,则SY-SUBRC设置成0。
   常用场合:
   字符串的替换操作比较常用,需要注意的是l的指定长度。
   3). TRANSLATE:转换字符串
   TRANSLATE {c} TO UPPER CASE.
   TRANSLATE {c} TO LOWER CASE.:
   作用:字符串的大小写的转换
   TRANSLATE {c} USING {r}. :
   作用:根据规则r转换字符串c
   常用场合:
   Sap系统一般都是使用大写字母的,但是某些特定的字段却是用小写字母来标记的,在操作这些字段的时候就需要注意大小写的转换了。转换规则倒是不太常用,到现在我还没有遇到过。
   4). SEARCH:查找字符串
   SEARCH {c} FOR {str} {options}.:
   作用:在字符串c中查找str,如果找到了,SY-SUBRC为0,SY-FDPOS为找到字符串的具体位置。
   需要说明的地方:注意模式的使用
   指定str:查找str,str中后面的空格忽略
   指定.str.:查找str,包含了str中尾部的空格
   指定*str:查找以str结尾的字符串
   指定str*:查找以str开头的字符串
   {options}的指定:
   主要用到的就是:STARTING AT {n1}指定开始位置
   ENDING AT {n2}指定结束位置
   常用场合:
   一般用来判断某个字符串是否符合条件。也可以结合其他语句对字符串进行操作。
   5).CONDENSE:去掉字符串中的空格
   CONDENSE {c} [NO-GAPS].:
   作用:去掉字符串中的前面和后面的空格,如果指定NO-GAPS,则去掉字符串中的所有空格。
   常用场合:获得字符串的精确长度,用于判断。
   6).SPLIT:拆分字符串
   SPLIT {c} AT {del} INTO {c1} ... {cn}.
   作用:按照分割字符del把字符串c分割成c1…cn。
   SPLIT {c} AT {del} INTO TABLE {itab}.
   作用:按照分割字符del把c分割,然后放到内表中的相应字段
   常用场合:
   文件名的分割,根据完整的文件路径加文件名把文件名分割出来。
   难点:无法确定要分割多少次.
   解决方法:两两分割,到最后的那个就是了。例如:str=c:dir1dir2dir3file
   Split str at '' into str1 str2.
   Find str2 for '/'.
   Check sy-subrc = 0.
   Do.
   Find str2 for '/'.
   If sy-subrc = 0.
   Split str2 into str1 str2.
   Else.
   Exit.
   Endif.
   Enddo.
   文件上传的类型是字符串,把其分割后放到内表中。例如上面的问题:
   data: begin of itab occurs 0 ,
   col1(30) type c,
   end of itab.
   Split str at '' into table itab.
   describe table itab lines line.
   Read table itab index line.
   Itab-col1就是file
   7).CONCATENATE:连接字符串
   CONCATENATE {c1} ... {cn} INTO {c} [SEPARATED BY {s}].
   作用:把c1…cn用s分隔连接到c中
   常用场合:文件下载,对文件中的字段编辑。
  > > >
  2006.5.9 10:07 作者:king 收藏 | 评论:1
  ABAP-报表的事件
  分类:专业技术
  > >
  一, 首先介绍一下ABAP的程序的类型:
  Program type(程序类型) Introductory statement(类型描述)
  1 REPORT(报表)
  M PROGRAM(屏幕程序)
  F FUNCTION-POOL(函数组)
  K CLASS-POOL(类组)
  J CLASS-POOL(接口组)
  T TYPE-POOL(类型池)
  二, 下面介绍报表中用到的事件以及作用:
  1. LOAD-OF-PROGRAM:程序开始执行时候自动调用
  这个事件在SUBMIT,CALL TRANSACTION,PERFORM等执行的时候系统会自动调用这个事件。所以无需声明即可。
  2. INITIALIZATION
  (1).只能用于报表程序
  (2).在选择屏幕出现之前执行,如果用逻辑数据库的话,这个是唯一能够修改选择屏幕初始值的地方。
  (3).通常的用法是在这里给选择屏幕中的字段赋值。
  3. AT SELECTION-SCREEN
  (1).其实就像一个FORM,所以在这个事件里声明的变量都是局部变量。
  (2).根据SY-UCOMM这个系统变量可以判断用户的命令
  (3).在这个事件里响应的是屏幕上选择条件中的事件,例如CHECKBOX的选择与否,RADIOBUTTON的选择,LISTBOX的选择等等。所以分为以下几个方面:
  1. ... ON psel :在PARAMETER变化是触发的事件
  2. ... ON END OF sel :SELECT-OPTION触发的事件
  3. ... ON VALUE-REQUEST FOR psel_low_high :选择的帮助(F4)
  4. ... ON HELP-REQUEST FOR psel_low_high :选择的帮助(F1)
  5. ... ON RADIOBUTTON GROUP radi :单选按钮事件
  6. ... ON BLOCK block :框架的触发事件
  7. ... OUTPUT :响应屏幕上的事件,修改选择屏幕的唯一方法
  4. START-OF-SELECTION
  报表程序必须执行的事件,在进入第二屏幕之前触发。
  5. GET
  获得逻辑数据库的值。前提是必须首先声明逻辑数据库。
  6. END-OF-SELECTION
  第二屏幕显示完毕,结束处理。
  7. MODULE
  这个是当你调用自己定义的屏幕时,响应屏幕事件的方法。
  8. ENDMODULE
  9. CHECK
  只对逻辑数据库使用,检查是否取得数据。
  10. REJECT
  同样只对逻辑数据库使用,退出。
  11. STOP
  结束一个处理块。
  12. RETURN
  返回一个处理块。
  三, 附加说明:
  1. SET PF-STATUS:
  基本语法格式:SET PF-STATUS pfstat.
  扩展:
  1. ... EXCLUDING f oder ... EXCLUDING itab
  2. ... IMMEDIATELY
  3. ... OF PROGRAM progname
   这个是设置屏幕菜单,命令行等的命令,详细地信息我会在后面关于菜单设计的时候说明。
  2. SET TITLEBAR:
  设置屏幕标题,在屏幕显示之前调用。
  > >
  2006.5.9 10:02 作者:king 收藏 | 评论:0
  献给低收入的大学生和民工们!
  分类:默认栏目
  > 在21世纪,在这么发达的年代,你竟然能从一个大学毕业生的嘴巴里听到“拉空了肚子,晚上容易饿!”,你会有怎样的感觉?感动?悲恸?还是心酸?还是无可奈何的哀叹?
  
    或许都是,或许都不是!
  
    我无暇顾及一个弱者的心态,因为社会如此,我也无能为力。我唯一能表示的除了同情或许还是只有同情.
  
    我也曾经鄙视过,甚至曾经在心底侮辱过: 活该,谁让你没本事考个名牌大学呢!没钱读个屁书,自作自受!
  
    可是我也不得不承认,一个山里的孩子,是不能仅仅凭着聪明才智就能高攀的起名牌大学的门槛的;那需要能力,实力.实力有时候除了良好的教育,优秀的老师,还有很多很多,比如金钱堆砌的补习班,比如只有城里孩子才能享受的到的全方位的教育,又比如有有权有势的父母.
  
    他们没有,他们是农村的孩子,他们没资格和权利有,没人给他们买各种辅导资料,也没有全国的优秀教师给他们手把手的教,他们没见过钢琴,没见过电脑,他们甚至除了村支书,不认识任何一个可以称得上干部的领导.
  
    他们一天到晚只会看发的那唯一的课本,只会拼命的学,只知道只有考上大学才能改变自己的命运.
  
    听着他们蹩脚的英语,不太流利的普通话,有些邋遢的装扮,破旧过时的衣着,我们都会忍不住笑.
  
    当我们有了太多的这样的习惯,于是我们便开始不在乎,他们是不是饿,是不是在我们浪费粮食的时候,他们在心底里还默念着:不敢去厕所,怕拉空了肚子,饿!的事实.
  
    " 人怎能跟人相比呢?没有可比性!农村的怎么能跟城市的孩子比呢?没比的必要!" 这是以前我的一个朋友经常跟我说的一句话,那时候听了觉得好笑,现在想起来,觉得有点无可奈何的心酸.
  
  人难道真分三六九等么?谁分的?你么??
  
   农村真的穷,很多人都说,穷还生那么多?其实,为什么要生了一个还要生一个?谁愿意那么穷还要养几个孩子,生活压力更大,可是没办法。被逼的啊!在农村,人老了,没劳动能力的,就等于开始要养个闲人,农村的老人没养老保险,没任何社会福利,也没任何生活保障。如果不多生自己孩子,老了后,一个孩子养不起俩人老,那还不得活活饿死,于是只好多生几个,分轻负担。养儿防老是农村不得以的传统!
  
    每个农村的父母都想自己孩子有出息,而想改变命运只有考大学一条出路,可是读大学却是很昂贵的,所以家里只要有一个考上大学的,全家都要遭殃,跟着砸锅卖铁的供着。可是现在大学生毕业工作很难找,尤其是读的学校不好,专业又不好,更难找;没拿到毕业证等于没上大学,去任何单位人家都要看你学历证书,没有,只能当民工。
  一. APPEND LINE
  格式: APPEND [ TO ] .
  舉例一. (使用work area)
  DATA: BEGIN OF LINE,
   COL1 TYPE I,
   COL2 TYPE I,
   END OF LINE.
  DATA ITAB LIKE LINE OCCURS 10.
  DO 2 TIMES.
   LINE-COL1 = SY-INDEX.
   LINE-COL2 = SY-INDEX ** 2.
   APPEND LINE TO ITAB.
  ENDDO.
  LOOP AT ITAB INTO LINE.
   WRITE: / LINE-COL1, LINE-COL2.
  ENDLOOP.
  執行結果為:
  1 1
  2 4
  舉例二. (不使用work area)
   DATA: BEGIN OF ITAB OCCURS 10,
   COL1 TYPE I,
   COL2 TYPE I,
   END OF ITAB.
   DO 2 TIMES.
   ITAB-COL1 = SY-INDEX.
   ITAB-COL2 = SY-INDEX ** 2.
   APPEND ITAB.
   ENDDO.
   LOOP AT ITAB.
   WRITE: / ITAB-COL1, ITAB-COL2.
   ENDLOOP.
   執行結果与舉例一相同.
  舉例三. (加入另一個Internal table的元素)
   格式: APPEND LINES OF [FROM ] [TO ] TO .
   將的元素加入至中,可選取自至的范圍.
   APPEND LINES OF ITAB TO JTAB.
  2006.3.17 00:12 作者:boxman2000 收藏 | 评论:0
  Internal table 的定義有以下几种格式
  分类:ABAP学习
  § INTERNAL TABLE
  一. Internal Table 的宣告
  ABAP/4中的Internal Table是一种Data Structure,類似于其他語言中的STRUTURE,它可以由几個不同類型的欄位(field)組成,用來表示具有不同屬性的某一事物,單獨一筆資料表示某個事物,多筆資料表示具有相同屬性的多個事物.例如:
  為了存取或記錄某班的同學資料,我們創建如下的internal table:
  DATA: BEGIN OF STUDENT OCCURS 20,
   STD_ID TYPE N,
   NAME(10) TYPE C,
   AGE TYPE I,
   BIRTH TYPE D,
   SCORE TYPE P DECIMALS 2,
   END OF STUDENT.
  此時我們已經創建了名叫STUDENT的internal table,并且為它預先申請了能夠存放20筆資料的Buffer(當然,如果存取資料不止20筆,程式執行時,會自動申請系統Buffer)
  Internal table 的定義有以下几种格式:
  格式一. DATA: BEGIN OF OCCURS ,
   TYPE ,
   [ TYPE ,
   TYPE ,
   … ]
   END OF .
  格式二. TYPES: BEGIN OF ,
   TYPE ,
   [ TYPE ,
   TYPE ,
   … ]
   END OF .
   TYPES TYPE OCCURS .
  格式三. DATA: BEGIN OF .
   INCLUDE STRUCTURE











































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































.    DATA: END OF .    DATA: LIKE OCCURS .   2006.3.17 00:04 作者:boxman2000 收藏 | 评论:0   2006 年 3 月 16 日 晴   分类:小金的生活   天气非常好,看来春天很快就来了,也不知道报的驾校什么时候开班,想快点学完。   不知道,会是什么样的。。。。。   2006.3.16 22:25 作者:boxman2000 收藏 | 评论:1   涂龙文上课笔记   分类:ABAP学习   --Field Symbols 参数传递   --The CASTing Addition ,按照数组分段   --TYPE GROUP:   TYPE-POOLS:SLIS   SE80----OBJECT SELECTION   --整数类型   1.强制转换   se11--数据类型察看   --move a+11(4) to b+1(4)   --structer   --text table   --unicode   at first . [sum]... endat--loop的第一条   at new f字段之前的任何一个字段与上一个之不一样的时候执行   at end of   at last 最后一条完毕之后         2006.3.16 21:58 作者:boxman2000 收藏 | 评论:0   网上笔记下载   分类:ABAP学习   回来后同事说我买对了书!哈当时真是感觉如获至宝,于是开始翻阅起里面的内容.这几天在笔记里我记下了这么几点.可能比较乱.呵呵大家凑合着看.前面差不多一个月的日记都是从那本书上摘录的.   1,Object Navigator是ABAP工作平台上众中开发工具的中心入口,事务代码为:se80,其中还有几个经常会用到的T-CODE: SE38, SE24, SE37.   2,在ABAP Editor中有一个Excute with variant 按钮,代表通过变量运行(变式与选择屏幕相关).   3,Editor Pretty Printer ON/OFF的设置: 菜单项: Utilites->settings有相关项,选中Indent,Convert upper/lowercase同Keyword Uppercase.   4,ABAP有三种类型的处理块:Event blocks, Dialog Modules,Procedures只有后一种可拥有自己的局部变量,而且程序语句是内部调用,前两者处理块之间实行外部调用.   5,应用程序类型, 可执行的:以Report关键字引导,不能定义功能模块但可以调用.模块池的:以Program关键字引导,必须通过事务代码运行.   6,语句链 Write: text1, text2. 等同于: Write text1. Write text2.   7,在一个Program中,处于Form和Endform之间的是Subroutines. 该程序由Program引导,不能直接运行,需被调用,不能包含自定义的用户屏幕.   8,数据内部定义: types type(len) Type type [decimal dec]   data data(len) Type type [decimal dec] [value var]   Decimal 附加项只适用于指定P类型的小数位.   9,两个结构体进行赋值操作,如果 Source与Destination的组件结构不完全相同,则用   Move-corresponding, eg: move-corresponding source-data to destination-data.   10.在ABAP数据表达式中,关键字前后必须有空格,eg: Fault: (a=b+c) true:: a = b + c .   11.在用户主记录里可以设置日期的显示分隔符,小数点字符和千位分隔符,在system->userprofile->owndata 或T-code: su01.   12,内表是一种大批量数据管理形式,用于在程序运行期间存储多行结构相同的数据,程序对内表的行操作不能直接进行,必须通过一种接口来传输,这个接口就是工作区.   13,ABAP的两种动态数据对象: Field symbols 与 Data reference.   14,内表有三种形式: standard table , sorted table , hashed table后一种不能进行索引查找,只能通过关键字搜索.   15,子程序的定义和调用分别用Form/Endform和perform来实现,如果想生成子程序的代码框架,则在prefom add处双击即可.         1,package的命名规则: begin with A-S or U-X是SAP standard object, begin with Y or Z are customer objects, begin with T are private test package, begin with $ are local package.   2.在数据字典中,每创建一个TABLE,都将生成一个同名的结构化数据类型,其中的组件字段与实际物理数据库表完全一致.   3,在select查询中如果要指定多个数据对象,则需要将这些对象放在括号内,并用逗号隔开,eg: select * from spfli into (a, b).   4.Function Module是最为常用的复用组件,它是独立的R/3仓库对象,也是一种过程模块,在不同的系统间可以通过RFC(Remote function call)技术进行功能模块的调用.   5,几个有用的系统函数: sy-uname, sy-host, sy-datum, sy-uzedit, sy-subrc, sy-bdcnt,sy-index, sy-tabix,sy-dynnr.   6,可用于交互式报表的列表事件有: at line-selection, at user-command 前者为选择某行时触发,后者由某个GUI触发.   7,在可执行程序中,只要在程序代码中使用parametes或select-options语句,则在程序运行后就会产生用户的选择屏幕.            1, LDB(逻辑库)节点在程序访问之前需用Nodes语句声明,在旧版本中则使用Tables声明. 两种中止语句 Reject与check(有条件中止).   2, 由系统自动调用的子程序称回调线程,-----call back routine,利用此程序可以实现许多高级屏幕功能.   3, 在OO设计中对象的识别和寻址是通过对象引用来实现的.   4, 在二种对象运算访问符中->与=>,对于类中的静态组件是通过类名称加=>直接对类进行操作的.eg: class=>comp.   5,对象的自身引用可使用变量ME,是一个局部变量来的.                  --------------------------------2005-09-08------------------------------------   1, Append与Insert r的区别: append wa to itab; insert wa into table itab   前者不能用于Hashed表, 后者不能用于Sorted表的non-unique.   2.修改内表语法: modify itab from wa transporting col2 where….. 表明根据where条件来更新COL2字段值,表类型为SORTED或HASHED.   3,删除内表语法: Delete table itab: from wa, with table key col = 1. 三个标点不可少,with后的为条件关键字.如果用条件的则为: DELETE ITAB WHERE (COL > 17 AND COL < 4 )   4,在LOOP AT…ENDLOOP内有一个 AT ,<…>,ENDAT循环. 其中的包括: FRIST, LAST, NEW , END OF.这些可以用来进行内表中按某个字段进行分组统计.   5,几条记录作一次取用:PACKAGE SIZE N eg: select * from spfli into corresponding fields of table itab package size 3.   6.接口成员只能为类的公有成员,接口没有自己的实例,一个接口可以被任意多个不同的类实现,接口中定义的成员集在各类中名称要相同.   7, 在程序中使用逻辑数据库有两种方法:通常是通过GET事件或者功能模块进行调用.如: NODES node.   8, 在程序代码中输入NEW-PAGE PRINT ON ,将生成的列表直接发送走到SPOOL系统进行打印,不在屏幕上显示.         --------------------------------2005-09-11------------------------------------   1,将一组选择屏幕组合在一个区域,可以使用Begin of block…..eg:   Selection-screen begin of block blocka [with frame [title tit] ]   [no intervals]-只选单值不出现TO.   Selection-screen end of block.   2, 屏幕流逻辑分为两个最基本的处理块: PBO与PAI, 前者是在向用户显示屏幕GUI之前触发,后者是在用户进行某些屏幕行为后并回车时触发.流逻辑模块是在语句MODULE/ENDMODULE之间定义.这里的语法不属于ABAP系列.   3,屏幕中的OK字段其作用是:返回在屏幕和GUI状态中用户触发的功能代码:一般情况字段命名为:OK_CODE,数据类型与SY-UCOMM相同.   4,通过SE93可以为程序创建自定义的事务代码.   5,GUI中的交互元素包括菜单条,标准工具按扭,APPLICATION TOOLBAR,FUNCTIONKEYS共四种,在作屏幕事务设计时这些都要分配具体的功能代码与之对应.            --------------------------------2005-09-12------------------------------------   1,在定义EXPORTING、IMPORTING与CHANGING的时候,前两者分别为基本输入与输出参数,而CHANGING可用于前两者功能。   2,在处理商务文档时需用到SAPSCRIPTION与SMARTFORMS工具,两者都可以进行布局设计与输出控制。企业中的PO,SO等报表都要用到此类工具。      ---------------------2005-09-13到2005-09-17----------------------   这几天香港那边来的顾问对我们几个新手进行了培训,主要是讲ABAP这方面的知识,因为那老师讲的都是白话,加上速度很快,所以这段时间笔记写的比较乱。我要花点时间整理下。         ---------------------2005-09-13到2005-09-17----------------------   这几天香港那边来的顾问对我们几个新手进行了培训,主要是讲ABAP这方面的知识,因为那老师讲的都是白话,加上速度很快,所以这段时间笔记写的比较乱。   1,ABOUT XX SAP,本公司要上的功能模块:PM,FI/CO,PP,MM,SD,BASIS。   2,实话阶段:计划前准备:项目管理-正式实话会议-议程-系统配置-企业动作架构-主业务流程。 商业蓝图:业务流程-工作物资-报表清单-批核概念。      3,项目标准:确定项目成员,LOGO制定,确定小组合作形式,帐套管理策略。。。   4,ABAP communicator service: J2EE engine module (using local tcp/ip network)   5,Payroll: ABAP dictionary containing data as well meta data.   6, Model object connot be created in a local package (only create the object after consulting sap,create the object in an sap package).   7,the lock objects deal with the problem which some users synchronize access to the same data.   8,different fields having the same technical type can be combined in domains.   呵呵上面这些偶也不知道是记了些什么东东。不过下面这些也好不到哪去。   9,Basis administrator: clients management, transports, data archiving, system monitoring, perform….   10,some useful transaction code:AL06, AL08, AL10 , AL11.   11,NEW-LINE = write: / eg: write: / xxx. The same to, new line. Write xxx.   12,在EDITOR界面的GOTO-》ATTRIBUTE-》可改TITLE的属性。   13,在Report xxx后可跟LINE-SIZE WIDTH, LINE-COUNT, PAGE LINES等属性,这些选项可以用来控制列表输出的页格式。   14,插入断点: BREAK-POINT, BREAK-USERNAME,也可以在程序激活的状态下按下STOP BUTTON。   15,用PROGRAM中的DOCUMENT可同步显示提示帮助。同时也可以在此处编辑。   16,可以用INCLUDE去包含一个数据类型 eg: include type xxx. 其中XXX为已经定义的数据类型。 这种方法在定义游标的时候会用到。   17,几个字符串操作函数:split…at…into.., shift ….right…., add-corresponding, divide-coresponding, move-corresponding, abs, concatename, condense.   18,刷新的时候对于基表用“refresh”, 内表用clear,free.   19,读数据集:READ DATASET DSS INTO RECORDE。   20,批处理工具,LSMW,BDC, CATT,ECATT。   21,如果要让个选择屏幕浮在SCREEN 1000的上面,则使用调用语句:   CALL SELECTION-SCREEN 100 STRATING AT 10 10 END AT 50 50。         ---------------------2005-09-18到2005-09-20----------------------      1 ,从一个正在运行的程序调用另一个可执行程序: 可用SUBMIT命令来完成.通过事务代码调用程序的语句为:LEAVE TO TRANSCATION 或 CALL TRANSCATION.   2 ,用SELECT把多行选择到内表: SELECT …..INTO/APPENDING TABLE ITAB. 如果希望不覆盖原来的内表数据,则使用APPENDING.   3 ,SAP应用服务器文件及目录可以通过事务代码:AL11进行浏览.      4 ,要显示END-OF-PAGE事件的页脚内容,需在LINE-COUNT LENGTH后加上[(FOOTER-LENGTH)], 指定预留的页脚行数,eg: line-count 12(3).      5 , 想让一个选择屏幕的条件字段自动调用一个表的字段值信息:   Select-options so-air for spfli-carrid.      6, 做一个SAP QUERY涉及到的步骤:一首先建立一个用户组,二建立一个功能组选择表数据,SQ02,SQ03.三在SQ01下建立一个如果是第一次建QUERY,则在QUERY中输入名称.               ---------------------2005-09-21到2005-09-23----------------------      1 , 如果想把一个屏幕的某字段设为必需输入的值,则可执行以下操作.   At selection-screen. 此为一个屏幕事件.   If carrid is initial.   Message e888( hints ) with ‘xxxx’.   Endif.   2, 在sapscript中如果要对main window的顶部打印指定的文本行,可使用TOP/ENDTOP 来控制,底部类似: BOTTON/ENDBOTTON.   3, 在一个指定的地方画一个框,要用到三条指令:   /: positon window 代表窗口的左上角.   /: postion xorigin ‘1.2’ cm yorigin 8 cm 系统原点进行位移.   /: box height ‘0.5’ cm width 19 cm intensity 50.   **************从这个时候开始做企业的定制报表,后面我会陆续讲到这方面的东西.刚开始我们也是用SAPSCRIPT来做,后来的几个报表用了SMARTFOMRS.就目前我这点水平来说,感觉两者各有千秋,希望新手不要刻意去掌握其中的一种,因为SAP在标准报表中有时用的是前者,有时用的却是后者.如果按它提供的标准报表进行维护还是方便了很多,前提是你要了解这种报表制作方法******************                           ---------------------2005-09-29到2005-09-30---------------------      1, 把一个SAPSCRIPT报表从CLIENT300 移到 CLIENT400, 使用SAP的标准程序:RSTXSCRP, 先在CLIENT300中进行EXPORT,然后到CLIENT400中进行IMPORT.在这里操作要注意的是: 在做IMPORT的时候OBJECT NAME 要与原来EXPORT 的一样.      2, 在MOVE RESOURCE TO DESTINATION 中如果RESOURCE是一个变量字段,很有可能在操作中得不到数据字段赋过来的值, 这时可以在操作过程中定义一个变量来转换解决这个现像.: move resource to var1. move var1 to destination.               ---------------------2005-10-03到2005-10-04---------------------   1, 在ABAP的PERFORM程序中,如果使用了两个变量 USING A. USING B. 要读INTAB中B的值,则使用: READ TABLE ITAB INDEX 2.      2, 在一个查询语句中,如果WHERE语句后加入了CLIENT SPECIFIED 关键字,则查询所有集团(CLIENT)的数据.      3,在销售流程中可能用到的定制报表: 创建询价单(VA11)->创建报价单(VA21)->创建交货单(VL10)->发货过帐->出具发票->客户余额查询->收款. 不同的报表在IMG中都有不同的对应配置信息.比如SO单对应的T-CODE为: V/40.            ---------------------下面整理一个关于SAPSCRIPT涉及到的信息集很浅的--------------------      1, 在CHANGE一个FORM时,可以进行多语言的维护,前提是在进入修改之前选中编辑的语言类别.      2, 在报表的制作过程中应尽可能多地定义PARAGRAPH FORMAT少定义WINDOW,这样有利于日后的维护.      3, 在没有ACTIVE的情况下少用RESET,这样会丢失你之前修改的所有信息,即使你对报表进行的保存操作.      4, 对于一个表要查看其所对应的数据字段: /va02->sale->header->sales 然后把光标放在某一个字段内按F1查看: Technical information.      5, 如果经常用到一个图标进行打印,可在/NSE78 下IMPORT GRAPHIC下选中RESIDER IN THE PRINTER MEMORY.      6, 插入一个BMP,先在/NSE78下建好,然后在FORM的LAYOUT下点击右键: CREATE GRAPHIC进行相应的操作,在这里要注意色体的选择.      7, CREATING GRAPHIC OBJECTS AND IDS: 先在/NSE75下设置,然后点击/NSE78查看.      8, 在页脚插入一个公司商标信息: / INCLUDE &TVKO-TXNAM_FUS& OBJECT TEXT ID ADRS LANGUAGE &VBDKA-SPRAS_VKO&.      9, 使用STANDARD TEXT, 先通过/NSO10定义一个标准文档,然后在FORM里插入命令: INCLUDE I_ADRS_HEADER OBJECT TTEXT IDXXX.      10,打印数据涉及到三方: 销售单->PRINT PROGRAM->PRINTFORM. 在销售单下有一个OUTPUT是在 /NV/40里进行配置.   11, 如果把一段标题设置成在每一页都打印,则使用: TOP…ENDTOP来实现.   12, 在用FORMPAGES 进行总页数统计时,如果不显示则在后加 (ZE).            ------------------------------------------------2005-10-05--------------------------------------------------   1, 在做LSMW时TRANSFER GL DATA 用到的标准程序为: RFBISA00.      2. 在创建LSMW时: PROJECT->传输项目的名称(可分配多个子项目),SUBPROJECT->子项目可有无限个子项目, OBJECT->对象名称对应业务名称. 对象分配到子项目中.      3, 使用SAP标准程序:RMDATIND可直接输入物料主数据.      4, 在维护STRUCTURE的时候都有两个或一个属性,为表头结构与行项结构.      5, 在SPECIFYFIELS的时候,FILE一定是.TXT形式的扁平文件格式.      6,如果导入的数据没有值则进行以下CODEING: IF NOT ITEM-MWSKZ IS INITIAL.   BBSEG-MWSKZ = ITEM-MWSKZ. ENDIF.         ------------------------------------------------2005-10-06-------------------------------------------------      1, 使用EXCEL创建一个扁平形文件格式 (ASCIIFILE) --àa flat file of leguacy data. 打开EXCEL,另存为时选扩展名为: TEXT(TAB DELIMITED).      2, 如果要改动一个TABLE,可以先复制出来,然后对其进行修改,可以对新表进行结构修改.      3, 传输采购定单用到: RM06EEI1, FI的为: RFBIBL00. MM的为: RMDATIND, SD的为: RVAFSS00. AM的为: RAALTD11. CO-PA的为: RKEVEXTO. 维护这些程序用RBMVSHOW或/NBMV0.      4, 用/NSHD0可以为原本的SAP事务代码进行定制,如MM01,VA01等等.类似/NSE93.         ---------------------------------------------几个用到的T-CODE说明---------------------------------------   1, ST05 TRACE SQL.   2, CS01 CREATE BOM   3, XK01 CREATE VENDOR   4, FILE CONFIGURE LOCAL PATH   5, SARA DELETE DATA USING BATCH METHOD   6, AL08 DISPLAY USE WHO ON LINE   7, SE09 DISPLAY TREE STRUCTURE CHART.   8, OPK8 CONFIGURE PP IN IMG   9, V/40 CONFIGURE SO IN IMG   10,VV21->VL01N->VL71 PRINT DELIVER NOTE   11, ME2L display po which have been released   12, SPAD DEPLOY FONT SET FOR PRINTER   13, M706 CONFIGURE GI IN IMG   14, MBST CANCEL MATERIAL DOCUMENT   15, SE93,SHD0 TRANSACTION VARIANTS   16, XD01 CREATE CUSTOMER   17, SE32 EDIT TEXT FOR ABAP   18, MM50,MM17 SOME USEFUL TCODE FOR MAINTAINING MM   19, V/30 CONFIGURE SO /INVOICE IN IMG   20,DB02,DB12 DISPLAY INFORMATION OF DB   21, COO1 CREATE PRODUCT ORDER   22, VF02 CHANGE INVOICE’S OUTPUT   23, COOIS,COO5N RELEASE PRODUCT ORDER   24, V/34 CONFIGURE DELIVERY NOTE   25, SHDB SE35 UPLOAD BDC   26, SALE IMG FOR ALE/IDOC   27, ME21N->ME22->ME28->MIGO->MB03 GI PROCESS   28, OMBR DEPLOY BARCODE FOR GI   29, MMAM 改变物料类型   30,WE02 查看现有的IDOS   31,SCC4 CLIENTR的定义   32,WEDI 显示IDOC的工具菜单界面   33,PFCG ROLE 角色的定义   34,SCCL CLIENT的COPY         下面列出几个生产流程的事务代码,其实作为ABAPER也应该对流程有所了解.根据下面这些TCODE你可以完整地走一遍整个生产流程.   PP流程:   35, MM01->CS01(BOM)->CR01(WORKCENTERY)->CA01(ROUTING)->MD11(PLANNED ORDER)->COO1(PRODUCTION ORDERS)也可通过CO41/CO40转换计划单得来.   36, COMAC(对生产订单进行可用性检查)   37,COHVOMPRINT(打印订单)   38,MB31(通过订单号收货)      SD流程   39,VK11(PRICECONDITION)->VA21(QUOTATIONORDER)->VA01(CREATE SO)->VA41(CREATE CONTRACT)   40,V.02(检查不完整性定单)   41,VA14L(为交货冻结凭证)   42,VKM1(解除冻结的SO)   43,VB01(创建一个排斥)      MRP流程   44, MD61(独立物料计划)->MD01(MRP总计划)->MD03(单项单层计划)->MD05(显示MRP物料清单)->MD14/MD15(生产计划单转采购需求)->ME57(处理采购申请分配VENDOR)->ME59N(采购申请自动生成采购定单)   物料成本   45,CK11N(创建物料成本估算)   46,KKPAN(不用数量创建估算)   47,CK24(价格更新标记标准价格)   48, CK40N(编辑成本核算)   发票(BILLING)   49,VF01(创建出具发票凭证)->VF04(维护发票到期清单)->VF05(出具发票凭证清单)->VF11(取消出具发票凭证).      成本控制(COSTING)   50, KA01(创建成本要素)   51,KS01(创建成本中心)   52,KSH1(创建成本中心组)   53,KSU1(创建实际分配周期)   54,KK01(创建统计关键指标)   55,KL01(生成作业类型)   56,KSV7(建立计划分配循环)   57,KSVB(执行计划分配)   58,KSU1(创建实际分配周期)   59,KS13(显示成本中心数据)   60,KOK5(内部定单的主数据)      仓库管理几个相关操作   61,COOIS(生产订单信息系统)   62,MB52/MMBE(查看库存)   63,VL02N(向外发货)   64,MB1B(在分包商处的库存)   65,MIGO(收发货)   66,MD04/MD40L->相关MRP      ------------------------------------------------2005-10-07-------------------------------------------------   1, LSMW大体的执行次序: COMPANY CODE->plants->other organization->material types->unites of measure->mm data->vendor/customer->po/so.      2, In the flat file not only include the data you want to transfer, but also sap-specific data such as transaction codes.      3, 把目前SAP的资料存入本地文件:使用SAP标准程序: RMDATGEN.      4, 如果在MASTER TABLE中增加一个新字段: APPEND TO BMMH1---此表为从MARA拷贝过来. 那么要运行RMDATING->GENERATE CODE FOR FGROUP MGAD.         ------------------2005-10-10到2005-10-21-----------------------------------------   *******这段时间可能一直在做SAPSCRIPT的报表,没有什么记录.   1, 可以通过SE32来维护ABAP中那些与选择屏幕相关的TEXT.      2, 通过语句BOX XPOS ‘7’CM WIDTH 0 TW HEIGHT ‘11’ CM FRAME 10 TW 可在指定位置画一条竖线.      3, 用TRANSLATE TEXT TO UPPER/LOWER可以进行大小写转换.         ------------------------------------------------2005-10-24-------------------------------------------------   1, 用LSWM导PO数据的时候分成二步录制,在HEAD中录HEADER和ITEM的第一条记录, 然后再录ITEM的时候用事务代码ME22录,进入CHANGE界面后点菜单的EDIT中ENTRY LINES录制ITEM的第二条记录.注意这里: BSTPO_02的值与EBELP的值一样.      2, 在做SO的ITEM时也是同PO一样,按CREATE ITEM来新建一个ITEM,然后录入所需的数据(开始界面所有值都填).      3, 做BOM的时候,BOM USAGE为生产且只能创建一次,不能重复创建(这个可能是对特定公司来说的),在CHANGE的时候忽略BOMGROUP,且要注意的是在录制ITEM时一定要有单位字段.         ------------------2005-10-25到2005-10-26-----------------------------------------      1, 用VK11进入条件设置界面, 把PROO输到CONDITION TYPE中可进去设置产品的价格,----V/LD确认物料价格.      2, 通过MM01在COPY FROM中输入要修改的物料号,可以为指定的物料设定销售组织和分销渠道.      3, 用SM12可以在系统不正常退出后,结束某个进程.      4, 在用SAPSCRIPT画图时,如果要在每一页都显示则不要把它的语句放在MAIN中,应放在MAIN TYPE 为CONST或VAR的窗口.            ----------------------------------------2005-10-28到2005-10-31-----------------------------------------   1, 在PARAMETERS定义的参数如果要有个默认值,则格式为:   parameters: amount type I default 20.      2. 对于PO单的EBELN,如果用SELECT-OPTIONS XXX LIKE EKKO-EBELN则会X前加IBT,为避免这种情况用PARAMTERS与BETWEEN来解决.      3, 在SAPSCRIPT中如果在对某个字段进行右对齐,一般通过命令R来设置没什么效果,最好是通过TAB中的ALIGNMENT来进行设置.            ----------------------------------------2005-11-02到2005-11-03-----------------------------------------   1, 在做PAI的时候如果要读取动态程序值要用到的 FUNCTION: DYNP_VALUE_READ.      2, 通过程序SHOWICON可以查看到所有的SAP ICONS.      3, 在INCLUDE中也可以用变量如: /: INCLUDE &SCUSTOM-NAME& TEXTID ST.这样的话PO单的REMARKS可用多种语言,写好后可动态调用.      4,修改内表的某一行: create table itab with key person = ‘123’ binaray search.   Itab-name = ‘xx’. Itab-age = ‘28’.   Modify itab index sy-tabix.         ----------------------------------------2005-11-07 -----------------------------------------   1, 如果要在一个表头部分用边框分割开,最好的方法是在每一个WINDOW中写入   /: BOX FRAME 10 TW.      2, 在一个报表中加入一张图片,如果只能在源语言环境下显示,则可做几次语言转换,最好第一次用ZH或ZF.      3, 一个功能模块如READ_TEXT 要看有几个输入输出函数,可在显示状态下查看IMPORT和EXPORT. 查看功能模块T-CODE: SE37.         ----------------------------------------2005-11-08到2005-11-09-----------------------------------------      1, 发票单对应的SMARTFORM设置是,PROGRAM: RLB_INVOICE SMARTFORM: LB_BIL_INVOICE. 对应的SAPSCRIPT是, PROGRAM: RVADDN01 SMARTFORM: RVDELNOTE.      2, 要在工单中打印条码, 在OPK8中选中SPOOL PRARMETES FOR USER 改OUTPUTDEVICE为BARCODE(为自己设定的条码打印机), PRINTER SPECIFICATION 的OUTPUTDEVICE也为BARCODE->PRINT CONTROL FOR USER. 做以上这些事的前提是要先安装TBARCODE_SAPLPD-----打印驱动.      3, 设置打印机的字体集用T-CODE: SPAD.         ----------------------------------------2005-11-14到2005-11-21-----------------------------------------   1, 要查看指定用户建立或修改的文档, 用SE80进入OBJECT NAVIGATOR界面,选择TRANSPORT ORGANIZER ,选定查看的用户.此功能等同于: SE09.      2, 定义内表与工作区最方便的方法.起先: DATA: ITAB TYPE TABLE OF MARA.   然后: DATA: WA LIKE LINE OF ITAB.   3, QUICKVIEWER所生成的报表是用户自定义的报表,只能由此用户自己使用与维护,无法利用用户组和功能区域统一管理.            --------------------------------------- 2005-11-22-----------------------------------------   1, 在做QUERY查询的时候,如果要对两个现有字段进行相应算术运算,可通过增加一个本地字段来实现.前提是要对打算处理的两字段设置SHORT NAME,然后在FORMULA中引用即可.      2. 在提取物料资料的文本信息时,如果一个物料的几种语言描述都不相同,那么即使采购单只有一个ITEM也会对应出几个文本信息记录行,可通过SPRAS来过滤.      3, 在SPAD中安装BARCODE时,驱动程序用: SAPLPD/SAPWIN DRIVE3.0.            ----------------------------------------2005-11-23到2005-11-30-----------------------------------------   1, 在用GROUP BY做统计的时候,对于用了算术运算的字段就不能出现在GROUP BY中.      2, 如果要对MARA中某个字段进行隐藏,则到IMG->LOGISTICS GENERAL->MATERIAL MASTER-> FIELD SELECTION下进行ASSIGN与MAINTAIN的设置.      3, 表TNAPR可查看相关输出报表对应的打印程序与相应报表名.      4, 在装条码打印机的时候,先安装条码驱动程序到SAP安装目录SPALD下,在SPAD下选中UTILITIES->FOR DEVICE TYPES->COPY DEVICE TYPE 用SWIN,然后新建一个OUTPUTDEVICE,在ACCESS METHJOD下选HOSTPOOL为F: 前台打印输出. 打印条码的下载地址: WWW.TEC-IT.CO.AT/            ----------------------------------------2005-12-05到2005-12-14-----------------------------------------      1, 函数SY-REPID显示的内容为当前程序名.      2, 用T-CODE:OAER进入调用文档界面, 在CLASSNAME中输入PICTURES,CLASSTYPE为OT,进入后在CREATE下可创建与具体文档相关的链接.      3, 对于要在ALV在显示下钻表,一般情况都要自定义几个相关的用户屏幕,具体做法可参照SAP标准示例程序: BCALV_GIRD_05.         ---------------------下面整理一个关于SMARTFROMS涉及到的信息集--------------------   1, 对于一个FORM要指定一个STYLE则在FORM ATTRIBUTE的STYLE中设置.      2, 在FORM中做多语言维护,用LOGO LANGUAGE进行维护就OK.如果要与COMMAND中的CODE对应,需要条件中输入CODE中相同的判断.      3, 在TEMPLE中要显示几行文本就用几个TEXT来控制, 动态显示ITEM的情况用TABLE和LOOP来进行控制.      4, 在TABLE中画线,可通过与表的SELECT PATTERN结合实现.      5, 要调用一个表或结构的字段,需先在GLOBAL DEFINITIONS中进行,变量名称的定义,然后引用字典中定义的表或结构.(其实最后都要通过ABAP程序的内表进行传输)      6, 在一个TABLE中加字段循环,首先要为变量设置一行,而这一行的值在TABLE中建一个循环,然后在循环下建一新行,此行的类型就是为它留的那行,之后为每个列建立一个文本,此文本的值可直接从表接口拖过来. 还有点需注意的是LOOP下的INTERAL TABLE等同于TABLE中的INTERNAL TABLE.      7, 用ABAP调用SMARTFORM用到的功能模块是: SSF_FUNCTION_MODULE_NAME之后调用IMPORTING中从FM_NAME传过来的FUNCTION FM_NAME.      8, 如果在ITAB中引用的是一个DDIC定义的TABLE或STRUCTRUE则TYPE ASSIGNMENT用LIKE, TYPE 无效.      9, 字段内容一定要放在TABLE的MAIN AREA中进行LOOP循环才得以显示.      10, 为了避免重复显示内表记录的问题,在TABLE DATA 中把ROW设成功1到1 .      11, 在用ABAP调用SMARTFORM时,TABLE下的参数内表是FORM中定义的内表名.   注意这里的名称一定要相同,不然会报RUNTIME的错误.            ----------------------------------------2005-12-15到2005-12-22-----------------------------------------   1, 如果在用LSMW导SO的时候出现选择销售范围的情况,这和具体的售达方有关系,还有在EXCEL中表示的日期格式去掉特殊符号eg: 24.11.2005写成 24112005.      2, 在用LSWM录制SO的ITEM时输入物料号和数量后不按回车,直接点击保存按扭.      3, 对内表某个字段进行填值操作(此字段初始值为空): ITAB-NUMBER = COUNTER.   MODIFY ITAB. COUNTER = COUNTER + 1.      4, 如果要在屏幕1000的基础上自建一个101SCREEN则定义为:   selection-screen begin of screen 101.   Select-options: matnr for mara-matnr.   Selection-screen end of screen 101.   最后调用它: CALL SELECTION-SCREEN ‘0101’ STARTING AT 10 10.         ----------------------------------------2005-12-15到2005-12-22-----------------------------------------   1, 如果在用LSMW导SO的时候出现选择销售范围的情况,这和具体的售达方有关系,还有在EXCEL中表示的日期格式去掉特殊符号eg: 24.11.2005写成 24112005.      2, 在用LSWM录制SO的ITEM时输入物料号和数量后不按回车,直接点击保存按扭.      3, 对内表某个字段进行填值操作(此字段初始值为空): ITAB-NUMBER = COUNTER.   MODIFY ITAB. COUNTER = COUNTER + 1.      4, 如果要在屏幕1000的基础上自建一个101SCREEN则定义为:   selection-screen begin of screen 101.   Select-options: matnr for mara-matnr.   Selection-screen end of screen 101.   最后调用它: CALL SELECTION-SCREEN ‘0101’ STARTING AT 10 10.            ----------------------------------------2006-01-17到2005-01-20-----------------------------------------   1, EDI的处理流程: OUTBOUNDPROCESS->从SAP传到操作系统并转换成FILE TEXT格式->通过VAN传到合作伙伴方->OS到SAP->用SAP的EDI创建APPLICATION DOCUMENT->生成相应的文档(PO,SO,PP)      2, 处理某事件后弹出一个信息提示窗口: call function ‘popup_to_inform’ exporting title1= ‘xx’ txt1 = ‘xxx’. 另一种不弹出的则为: MESSAGE SY-REPID TYPE ‘I’.      3, 要在一个类未定义之前引用此类: CLASS A DEFINITION DEFERRED.      4, 获取一个内表共有多少行,使用函数 LINES( ITAB ) .      5, 要想调用一个CLASS中定义为PROTECT的方法,需继承过来用PUBLIC的方法进行CALL METHOD.(其实有很多种方法)      6.参数选项在EVENT中定义为哪种类型如EXPORTING则在RAISE EVENT时如果用到参数也用 EXPORTING VALUE = ‘XXX’.            这一段不知以前发过没,不过加了两个很实用的新TCODE.   ---------------------------------------------几个用到的T-CODE说明---------------------------------------   1, ST05 TRACE SQL.   2, CS01 CREATE BOM   3, XK01 CREATE VENDOR   4, FILE CONFIGURE LOCAL PATH   5, SARA DELETE DATA USING BATCH METHOD   6, AL08 DISPLAY USE WHO ON LINE   7, SE09 DISPLAY TREE STRUCTURE CHART.   8, OPK8 CONFIGURE PP IN IMG   9, V/40 CONFIGURE SO IN IMG   10,VV21->VL01N->VL71 PRINT DELIVER NOTE   11, ME2L display po which have been released   12, SPAD DEPLOY FOND SET FOR PRINTER   13, M706 CONFIGURE GI IN IMG   14, MBST CANCEL MATERIAL DOCUMENT   15, SE93,SHD0 TRANSACTION VARIANTS   16, XD01 CREATE CUSTOMER   17, SE32 EDIT TEXT FOR ABAP   18, MM50,MM17 SOME USEFUL TCODE FOR MAINTAINING MM   19, V/30 CONFIGURE SO /INVOICE IN IMG   20,DB02,DB12 DISPLAY INFORMATION OF DB   21, COO1 CREATE PRODUCT ORDER   22, VF02 CHANGE INVOICE’S OUTPUT   23, COOIS,COO5N RELEASE PRODUCT ORDER   24, V/34 CONFIGURE DELIVERY NOTE   25, SHDB SE35 UPLOAD BDC   26, SALE IMG FOR ALE/IDOC   27, ME21N->ME22->ME28->MIGO->MB03 GI PROCESS   28, OMBR DEPLOY BARCODE FOR GI   29, MMAM 改变物料类型   30,WE02 查看现有的IDOCS   31,SCC4 CLIENTR的定义   32,WEDI 显示IDOC的工具菜单界面   33,PFCG ROLE 角色的定义   34,SCCL CLIENT的COPY      下面列出几个生产流程的事务代码,其实作为ABAPER也应该对流程有所了解.根据下面这些TCODE你可以完整地走一遍整个生产流程.   PP流程:   35, MM01->CS01(BOM)->CR01(WORKCENTERY)->CA01(ROUTING)->MD11(PLANNED ORDER)->COO1(PRODUCTION ORDERS)也可通过CO41/CO40转换计划单得来.   36, COMAC(对生产订单进行可用性检查)   37,COHVOMPRINT(打印订单)   38,MB31(通过订单号收货)      SD流程   39,VK11(PRICECONDITION)->VA21(QUOTATIONORDER)->VA01(CREATE SO)->VA41(CREATE CONTRACT)   40,V.02(检查不完整性定单)   41,VA14L(为交货冻结凭证)   42,VKM1(解除冻结的SO)   43,VB01(创建一个排斥)      MRP流程   44, MD61(独立物料计划)->MD01(MRP总计划)->MD03(单项单层计划)->MD05(显示MRP物料清单)->MD14/MD15(生产计划单转采购需求)->ME57(处理采购申请分配VENDOR)->ME59N(采购申请自动生成采购定单)   物料成本   45,CK11N(创建物料成本估算)   46,KKPAN(不用数量创建估算)   47,CK24(价格更新标记标准价格)   48, CK40N(编辑成本核算)   发票(BILLING)   49,VF01(创建出具发票凭证)->VF04(维护发票到期清单)->VF05(出具发票凭证清单)->VF11(取消出具发票凭证).      成本控制(COSTING)   50, KA01(创建成本要素)   51,KS01(创建成本中心)   52,KSH1(创建成本中心组)   53,KSU1(创建实际分配周期)   54,KK01(创建统计关键指标)   55,KL01(生成作业类型)   56,KSV7(建立计划分配循环)   57,KSVB(执行计划分配)   58,KSU1(创建实际分配周期)   59,KS13(显示成本中心数据)   60,KOK5(内部定单的主数据)      仓库管理几个相关操作   61,COOIS(生产订单信息系统)   62,MB52/MMBE(查看库存)   63,VL02N(向外发货)   64,MB1B(在分包商处的库存)   65,MIGO(收发货)   66,MD04/MD40L->相关MRP   67, SE10->RELEASE A REQUESTWHICH NEED TO TRANSFER CROSS SERVER   68, STMS->接收67 RELEASE 后的REQUEST.                  -----------------------------------------本人经常用到的几个表----------------------------------------------   1,Master data table:   CEPC->PROFIT CENTER MASTER DATA TABLE.   CSKS->COST CENTER DATA TABLE   KNA1->CUSTOMER MASTER.   LFA1->VENDOR MASTER DATA TABLE   MARA->MATERIAL MASTER DATA   SKB1->G/L ACCOUNT MASTER DATA   T001W->PLANTS/BRANCHS   T001->COMPANY CODE DATA TALBE      2,与生产相关的几个表:   Demand Management   PBED->Independent Requirements Data   PBIM->Independent Requirements by Material   Repetitive Manufacturing   SAFK->RS Header Master Data   S025->LIS -- Run Schedule Quantities   S026->LIS -- Material Usage   S028->LIS -- Reporting Point Statistics   CEZP->Reporting Point Document Logs   CPZP->Reporting Points - Periodic Totals   MRP Records   MDKP->MRP Document Header Data   PLSC->Planning Scenario (Long-term Planning)   MDFD->MRP Firming Dates   MDVM->Planning File Entries   S094->LIS Stock/Requirements Analysis   Reservations   RESB->Reservations/Dependent Requirements   Planned Orders   PLAF->Planned Orders   Discrete Production   AFKO->Order Header   AFPO->Order Item Detail   AFVC->Order Operations Detail   AFFL->Order Sequence Details   AFFH->Order PRT Assignment   AFBP->Order Batch Print Requests   AFRU->Order Completion Confirmations   AFFW->Confirmations -- Goods Movements with Errors   AFRC->Confirmations -- Incorrect Cost Calculations   AFRD->Confirmations -- Defaults for Collective Confirmation   AFRH->Confirmations -- Header Info for Confirmation Pool   AFRV->Confirmation Pool   AFWI->Confirmations -- Subsequently Posted Goods Movements      3,销售相关的几个表:   KUAGV->售达方客户主记录总览.   VBDKA->询价,报价订单的凭证打印标题.   VBDPA->询价报价床单的项目明细.   BEST->末来库存   TVK0->销售组织(组织数据)   VBAP/VBAK->销售订单主从数据表   KOMVD->打印的价格确定通讯条件记录      4,采购相关的几个表.   EKKO/EKPO->采购订单主从数据表   T024E->采购组织(组织数据)   SADR->地址管理,公司数据   T166U->采购凭证打印输出的标题   EKET->计划协议计划行   EKKN->采购凭证中的帐户设置.   T166K->采购凭证打印输出中的标题文本,IMG下的DEFINE TEXT FOR PO关联   MSEG->凭证段物料   RM06P->采购凭证打印输出的辅助字段      5;总分类帐几个相关表.   SKA1->科目表   SKB1->公司代码   SKAT->科目表说明   SKAS->会计科目代码清单      6,物料分类相关几个表.   KLAH->Class Detail   CABN->Characteristic Detail   AUSP->Characteristic Values   CAWN->Characteristic Values   CAWNT->Characteristic Value Texts   KSML->Characteristic Allocation to Class   KSSK->Material Allocation to Class      7,几个用到的系统表.   DD03L->TABLE FIELDS OF ALL SAP   TBTCO->查看JOB STATUS/OVERVIEW TABLE.   T247->月份对照表.   DDO2L->ALL SAP TABLES   TNAPR->所有相关的OUTPUT报表信息程序,子程序,报表   TSTC->SAP ALL TRANSCATION CODE   USR02->保存PASSWORD的表   TRDIR->ABAP程序列表                           ------------------------------------------------------------------------------------------------------------------   下面列出平时本人遇到的一些问题,因为当时只有我在做ABAP,所以问题不是一出来就有人帮我解答,为此我都做了笔录,以备日后慢慢来回答这些问题,以下这些问题大部分都已经得到解答,如果谁有同样的问题我们可以交流我也很乐意交流.   --------------------------------------------------------------------------------------------------------------------   ******************这里要特别说明的是在刚开始接触ABAP那段时间,由于我们的顾问只给我ABAP方面大的方向,这个东西应该在哪里配置,互相之间的关联.至于具体怎么做都要我自己慢慢去摸.还好他当时介绍了一位内地做ABAP的兄弟给我,也就是ITPUB里ID为NIUCHAO的兄弟,真的很感谢NIUCHAO兄一直来的帮忙***************************      1, SAP在于QUERY在起初选择的功能组能否自己增加.   2, 既然在调用功能模块时无需功能组,为何在创建时要指定功能组.   3, 如何使用复杂的选择屏幕进行条件的过滤.   4, 要SAP QUERY中创建一个报表总报: 不能在一个命名空间的包里创建对象.   5, SY-DATUM + 6( 2 ) . 这里的6(2)指何意.   6, 怎样用WRITE语句输出空格.   7, 在两个内表结构相同的情况下如何将一个表的内容添加到另一个表中去.   8, 在用WRITE输出一个报表的时候,如何在一个内表中设置一个打印表头(字段名).   9, 在OBJECTEDITOR中如何对一段代码进行注解.   10, 在什么情况下会用到LOOPAT下层的AT ENDAT等内循环.   11, REPORT: DEMO_DATA_PROCESS_READ的作用与效用.   12,在一个列表输出时如何自动增加一个续列号.   13, 如何在WHERE子句后动态加条件,实现用户交互的过滤.以及如何做到模糊查询,比如: WHERE CARRID LIKE ‘%’ + ‘XX’ + ‘%’ 是行不通的.   14, 如何进行打印纸张字体等属性的调整以及页面设置.   15, 定制的套找报表如何生成(难)------呵呵当时还不知道有SAPSCRIPT与SMARTFORM.   16, 如何锁住自己的程序不让其它人修改.   17, QUERY中在表中设置HEADER为何意.浏览的时候又看不到.   18, READ TABLE在何时用到,作用是什么, 一次读多少条记录能否进行控制,读出的数据存储在哪?   19, 为何在400中做的TEXT-SYMBOLS不能在300中显示.   20. 如何在一个FORM中定义段落和字符格式.   21, 要SAPSCRIPT中WINDOW TYPE为CONST的与VAR的有何区别.   22, 在PC EDITOR中用到了自定义段落格式,则不能进行CHANGE EDIT.   23, 如何启动CTS( CHANGE AND TRANSPORT SYSTEM ).   24, 要SAPSCRIPT中HEADERDATA与ITEMDTA如何区分.   25, 在FORMEDIT中如何显示已经定义的段落与字格式.   26, 在SAPSCRIPT中一共有多少页如何去浏览(当时没有和具体的单据连接)   27, IMG->CUSTOMIZING:EXECUTE PROJECT设定后如何显示效果.   28,在SAPSCRITP中如何把设定好的STYLE应用到WINDOW中去.   29, 在SAPQUERY中HEADER与FOOTER如何显示并显示出来.   30, 如何在WINDOW MAIN中定义文本元素.   31, 系统缺少一个屏幕布局设计界面则报错: NO FIND SAPGUIGNEUX.EXE.   32, 用SELECT-OPTIONS定义的选择说明如何换成其它可说明性的文字.   33, 如何跟踪一个退出事件,如ABOUTALV中退出时有一个询问对话框.   34, 如何在一个字符串下加下划线.   35, 如何在SO,PO中调用原PRINT PROGRAM中没有的字段.   36, 如何控制哪些信息需要要第二页打印.   37, INCLUDE后中的脚本注解为何与用SELECT找出的不一样.   38, 采购订单的排版是通过哪个程序来做的.   39,在DDIC的TABLE中,有CLIENT字段和没有此字段的区别在哪.   40. 如何使&PAGE&标准函数在SAPSCRITP的FORM中生效.   41, 在采购订单中一个供应商地址,如果不用ADDRESS函数则显示为数字,用了则为具体值,如何执行.   42, 在销售定单中如何更换输出模式的语言类型.   43, 如何在ABAP报表中加权限进行控制.   44, 如何在SAPSCRIPT报表中加权限进行控制.   45, 在LSMW中定义SOURCEFIELDS时,FIELD的值是否与FLATFILE中的相同.   46, 如MM的主资料只有一个HEAD没有对应的ITEM在STRUCTURE RELATIONSHIP中如何设置.   47, 什么是LSMW的项目,在做导入之前,如何导入此项目到SAP系统中.   48. 是否针对每种类型的LEGACY数据都有针对的程序进行转换.   49, 知道一个STRUTURC怎么去找它对应的TABLE.   50, 在做LSMW的时候,如果有几个字段在OLDSYSTEM里放在一个字段里,在SAP要分开,另外字段名也不同. UNIT->MEINS OLD里用A,对应SAP中用B.   51, 对于一个MATERIAL MASTER 如何区别哪些是MASTER DATA哪些ADDITIONALDATA.   52, 因为FLAT FILE是WITH FIEXED LENGTH FIELDS当与SAP长度不匹配时如何处理.   53, 如何对ALV的报表进行分页控制,即每页打几行.   54, 如何将任何一个操作屏幕的布局保存下来.   55, 屏幕事务OK_CODE为何得不到TRAN_CODE传出的值.   56, 如何调用STYLE设计的格式.   57, 如何在SAPSCRIPT中进行分页统计(难)----现在感觉还是难.   58, 如何在SAPSCRIPT中进行语言的自动跟踪.   59, 生产订单有没一个调OUTPUT设置的地方.   60, 在SMARFORM中一个文本如&TXNAM_ADR&具体对应哪里.   61, 在SMARTFORM中建一个TEMPLATE时,为何都要在之前建一个COMMAND.   62, 在SMARTFORM中引用的内表在哪定义,为何不能直接用DDIC中的TABLE.   63, 如何通过ABAP PROGRAM向SMARTFORM传数据.   64, 如何在ALV中实现DRILL DOWN功能.   65, 如何在QUICKVIEW中进行选择字段的过滤.   66, 如何在一个CLIENT加一个BARCODE打印机.   67, 从ALV中导资料到EXCEL,如果是中文的则显示乱码.   68, 在ALV中如何按关键字进行分类汇总,类似TCODE: ME80N.   69, 如何用SEARCH STRINGS FOR STR中字符’*’.   70, 在用AL LINE-SELECION控制的交互列表中如何获取双击某个字段后的值.   71, 为何把一个报表通过后台打印处理后,自动分配的行数不合理.   72, 在SMARFORM中LOOP循环的次数如何控制.   73, 用SFSY-PAGE/SFSY-FORMPAGES在前面几页显示总页数,后面的则用*代替了.   74, 哪个表存储了所有功能码信息. 对应SY-UCOMM.   75, 如何把一个带有SCREEN的PROGRAM从测试服务器传到生产服务器上.   76, 如何进行ABAP中多语言的文本元素维护.   77, 如何通过条件字段用不同的颜色来显示ALVGRID.   78, 如何使F3,CALCEL标准菜单上的这些按扭在自定义的SCREEN中起作用.   79, 表簇类型的DDIC结构有何不同于TABLE.比如: CDCLS.   80, 如何实现多个字段的模糊查询, 还有POOLED TB,CLUSTER TAB不能用JOIN命令.   81, 表TPARA字段PARAMID是如何与具体的TRAN_CODE对应.   82, 能否定义一个表的字段为IDENTIFY类型(可自动增加).   83, 有没一个通用的STRUCTURE,所有的定义都可引用它.   84, 运行一个信息查询系统,如何得出是哪个程序在运行它.   85, LSMW导不了特性资料.CT04.   86, 怎样把ACCESS与报表关联,并能实时获取报表数据.   87, 能否给出一个USER_EXIT的实际用例.   88, 能否定义一个自定义屏幕和一个全局类相对应.                        ------------------------------------------2006-01-26------------------------------------------------   今天香港那位ABAP老师过来帮我们解决了几个问题,也随手记了笔记.      1, DATAELEMENT和DOMAIN都可以在SE11中自定义.   2, 一个表的字段约束可在DOMAIN中实现(RANG).   3, 一个表的字段描述可以在DATAELEMENT中实现.   4, 功能模块DD_FKEYS_GET可以查找某个表中的外键设置情况.   5, 把一个程序从一个服务器拷到另一个服务器用到的几个TCODE: SE10(查找要传输的包),SE01(RELEASE), STMS(IMPORT QUEUE).                  ---------------------------------2006-01-27----2006-02-07----------------------------------   这段时间花时间看了些ALE和IDOC方面的资料感觉收获不大,可能是没实践操作的原因.   1, BAPIs Must not contain call transaction or submit report.   2, BAPI structure must not use includes.   3, BAPIs should not use dialogs.   4, Asynchronous BAPIs use the ALE interface in this way:   .Creates an IDOC from the BAPI data   .Sends the IDOC to the target system   .Receives the IDOC in the target system, create the BAPIs data from the IDOC and the BAPI.   .An ALE interface for a BAPIs is created in transaction BDBG.   5, Programming a BAPI consists of follow major tasks:   .Defining BAPI data structrues in se11.   .Program a RFC enabled BAPI function module for each method.   .Create a Business object for the BAPI in the BOR.   .Documentation the BAPI.   .Generate ALE interface for asychronous BAPIS.   .Generate and release.   6, Each BAPI must have its own fuction group. we would create related BAPIs in the same fuction pool. so they will by abele to share global data.      7, Step by step to create BAPI.   .Define a structure for the BAPI.   .Write Function Moudle   .create the API Method Using the BAPI wizard.   .Final steps.   .Release the BAPI function module(in the function builder).   .Release the business object type(in the BOR objecttype->implemented).   .Release the BAPI as a mehtod in the BOR.   .For potential write BAPIS: Release the IDOC and its segments.                  ------------------------------------------2006-02--08------------------------------------------------   1, 公司代码控制支付处理事务, 工厂控制生产计划各控制流程,销售组织控制销售流程.   2, 在IMG的SAPNETWEAVER->GENERAL SETTING->SET COUNTRY->SET COUNTRIES-SPECIFIC CHECKS 可对客户资料中的邮政编码设置约束条件.   3, Messages are single texts, stored in table T100, that you can maintain in transaction SE91 or by forward navigation in the ABAP workbench.                        ------------------------------------------2006-02--10------------------------------------------------   1, 在LOOP AT 后也可加WHERE 条件, eg: LOOP AT TAB WHERE K=XX.   2, 两个内表相拷可用表达式: ITABA[] = ITABB[].   3, 为了提高程序的运行速度: Uesing ABAP sort clause instead of order by.            ------------------------------------------2006-02--13-----------------------------------------------   1, 用LSMW标准的程序导数据时: 当头文件和行文件放在一个源文件中, 那么在LSMW建字段的时候为每一个STRUCTUR都建立一个IDENTITY FIELD. 并设置值为1和2, 以此类推.   2, 想删除原来的PROJECT NAME可在初始的LSMW界面点GOTO->ADMINISTRATOR.                                                                     2006.3.16 21:57 作者:boxman2000 收藏 | 评论:0   ABAP_学习笔记_韩国教学(20060316日晚更新)   分类:ABAP学习   1.ABAP Workbench Tools(Abap_01_01.gdb~Abap_01_02.gdb)   1.1 Overview of Workbench   menu path:Tools-->ABAP Workbench   T-Code:S001   1.2 Information and Navigation   --Repository Brower   menu path:Workbench-->Overview-->Repository Brower   T-Code:SE80   --Data Browser   menu path:Workbench-->Overview-->Data Browser   T-Code:SE16   1.3 ABAP Editor   menu path: Development -->ABAP Editor   T-Code:SE38   1.4 Screen Painter   menu path:Development -->User Interface-->Screen Painter   T-Code :SE51   1.5 Menu Painter   menu path:Development -->User Interface-->Menu Painter   T-Code:SE41   1.6 Function Builder   menu path:Development -->Function Builder   T-Code :SE37   --Abap Test Tool   1.7 SQL Trace   Menu Path:Test -->SQL Trace   T-Code:ST05   1.8 Runtime Analysis   menu path:Test-->Runtime Analysis   T-Code:SE30   2.Registeration and Development Class--p01   2.1 Registering a Development User   Logon OSS   Menu Path :System -->Services-->Sap Service   T-Code:OSS1   2.2 Registering an Object --p06   2.3 Creating Development Class--p07   Table :TDEVC   @Creating Development Class in Repository Browser   2.4 Workbench Organizer   menu path:Workbench-->Overview-->Workbench Organizer   T-Code:SE09   3.Opening &Creating a Program   3.1 Opening Programs   In ABAP Editor   In Repository Browser   Naming Convention   3.2 Creating Program   --Report (最多40个字)   Yxxxxxxxx   Zxxxxxxxx   --Module Pool(最多40字)   SAPMYxxx   SAPMZxxx   --禁用字符   Perido,Comma,Space,Parentheses,Inverted Comma('),   Quotation Mark,Equals sign,Asterisk,   Percentage Sign(%).   3.3 Creating Transaction Code   menu path:Development-->Other Tools-->Transactions   T-Code:SE93   4.Relation Between Development An Objects   Chap2.ABAP Dictionary--Abap_02_01.gdb   1.Overview of ABAP Dictionary   menu path:Development -->Dictionary   T-Code:SE11   2.1 Data Elements & Domains 的关系   --Table Field:字段   --Data Element:内容属性(Plant,Customer等)   --Domain:技术性属性( 长度,类型Char(10) ),包含于Data Element。   2.2 Data Element的产生   menu path:ABAP Dictionary--Create   Documentation(按F1的时候出来的文档)   menu path:Utilites -->Documentation   T-Code:SE61   2.3 Domain的产生--p09   3.Tables--Abap_02_02.gdb   3.1 Table 的产生   T-Code: SE11   ZLI01   四要素:   --Short Text   --Delivery Class指定    CBO table 只需要2种A ,C   --Table Mainternance指定   --Field名字和Data Element指定   3.2 Technical Setting   --Data Class(一般选择userx)   --Size Category   3.3 Datbase Utility--p07   --DataBase 中直接对tabel进行生成,修改,删除,(table 和database 里的table 不一致的时候)   --修改前一定要在Active and Change database中选择save data   3.4 Index   Index Creation   menu path:Goto-->Indexes...   T-Code:SE11   3.5 Foreign Keys的产生   menu path:Goto-->Fordign keys   Foreign key table-->参考-->check table,   dependent tabel referenced table   比较全面的ALV Function方式的   [日期:2007-01-05] 来源: 作者:sapsky [字体:大 中 小]      *----------------------------------------------------------------------   * Program: ZZ_ALV_REPORT_STUB   * Author : Clayton Mergen   * Date :   *   * Purpose: Report using ALV function   *   * Notes:   * 1) Logos & wallpapers can be found in table BDS_CONN05   * with class = PICTURES   *   * 2) Transaction OAER can be used to create PICTURES.   * Run transaction OAER with class name = PICTURES, Class type = OT,   * and Object key with whatever name you want to create. In the   * next screen, right clicking on screen and import   *   *----------------------------------------------------------------------   * Revisions   *----------------------------------------------------------------------   * Name :   * Date :   * Comments:   *----------------------------------------------------------------------   report zz_alv_report_stub    no standard page heading    line-size 200    line-count 65    message-id zz.      *--------------------------------   * Tables   *--------------------------------   tables:    ekpo,    trdir.      *--------------------------------   * Global Types   *--------------------------------   type-pools: slis.      *--------------------------------   * Global Internal Tables   *--------------------------------   data:    i_fieldcat_alv type slis_t_fieldcat_alv,    i_events type slis_t_event,    i_event_exit type slis_t_event_exit,    i_list_comments type slis_t_listheader,    i_excluding type slis_t_extab.      * Display data   data: begin of i_data occurs 0,    name like trdir-name,    clas like trdir-clas,    subc like trdir-subc,    cnam like trdir-cnam,    cdat like trdir-cdat,    myfield(1) type c,    end of i_data.      *--------------------------------   * Global Variables   *--------------------------------   data:    w_variant like disvariant,    wx_variant like disvariant,    w_variant_save(1) type c,    w_exit(1) type c,    w_repid like sy-repid,    w_user_specific(1) type c,    w_callback_ucomm type slis_formname,    w_print type slis_print_alv,    w_layout type slis_layout_alv,    w_html_top_of_page type slis_formname,    w_fieldcat_alv like line of i_fieldcat_alv,    w_excluding like line of i_excluding,    w_events like line of i_events,    w_event_exit like line of i_event_exit,    w_list_comments like line of i_list_comments.      *--------------------------------   * Global Constants   *--------------------------------   *constants:      *--------------------------------   * Selection Screen   *--------------------------------   selection-screen begin of block blk_criteria with frame title text-f01.   select-options:    s_name for trdir-name.   selection-screen end of block blk_criteria.      selection-screen begin of block blk_params with frame title text-f02.   parameters:    p_vari like disvariant-variant.   selection-screen skip 1.   parameters:    p_grid radiobutton group rb01 default 'X',    p_html as checkbox.   selection-screen skip 1.   parameters:    p_list radiobutton group rb01.   selection-screen end of block blk_params.      *--------------------------------   * Initialization   *--------------------------------   initialization.    perform init_variant.    perform variant_default using p_vari.       clear: s_name[].    s_name-sign = 'I'.    s_name-option = 'CP'.    s_name-low = 'Z*'.    append s_name.      *--------------------------------   * At Selection Screen PBO   *--------------------------------   at selection-screen output.      *----------------------------------   * At Selection Screen Value Request   *----------------------------------   at selection-screen on value-request for p_vari.    perform variant_f4 using p_vari.      *--------------------------------   * At Selection Screen   *--------------------------------   at selection-screen.    perform variant_fill.      *--------------------------------   * Start of Selection   *--------------------------------   start-of-selection.    perform get_data.      end-of-selection.    perform fieldcat_build.    perform event_build.    perform event_exit_build.    perform exclude_build.    perform print_build.    perform layout_build.    perform display_data.      *--------------------------------   * Top of Page   *--------------------------------   top-of-page.      *--------------------------------   * Top of Page During Line Sel   *--------------------------------   top-of-page during line-selection.      *--------------------------------   * At User Command   *--------------------------------   at user-command.      *--------------------------------   * At Line Selection   *--------------------------------   at line-selection.      *--------------------------------   * Macros   *--------------------------------    define skip_1.    write: /001 sy-vline,    at sy-linsz sy-vline.    end-of-definition.      *----------------------------------------------------------------------   * Forms   *----------------------------------------------------------------------   *&---------------------------------------------------------------------*   *& Form variant_f4   *&---------------------------------------------------------------------*   form variant_f4 using p_variant.       call function 'LVC_VARIANT_F4'    exporting    is_variant = w_variant    i_save = w_variant_save    importing    e_exit = w_exit    es_variant = wx_variant    exceptions    not_found = 1    program_error = 2    others = 3.       if sy-subrc <> 0.    message i000(zz) with text-g01.    endif.       if w_exit is initial.    w_variant-variant = wx_variant-variant.    p_variant = wx_variant-variant.    endif.      endform.   *&---------------------------------------------------------------------*   *& Form init_variant   *&---------------------------------------------------------------------*   form init_variant.       clear: w_variant.    w_repid = sy-repid.    w_variant-report = w_repid.    w_variant-username = sy-uname.    w_variant_save = 'A'. "All types      endform.   *&---------------------------------------------------------------------*   *& Form variant_default   *&---------------------------------------------------------------------*   form variant_default using p_variant.       wx_variant = w_variant.       if not p_variant is initial.    wx_variant-variant = p_variant.    endif.       call function 'LVC_VARIANT_DEFAULT_GET'    exporting    i_save = w_variant_save    changing    cs_variant = wx_variant    exceptions    wrong_input = 1    not_found = 2    program_error = 3    others = 4.       case sy-subrc.    when 0.    p_variant = wx_variant-variant.    when 2.    clear: p_variant.    endcase.      endform.   *&---------------------------------------------------------------------*   *& Form variant_fill   *&---------------------------------------------------------------------*   form variant_fill.       clear: w_variant.       if p_vari is initial.    w_variant-variant = 'STANDARD'.    w_variant-report = w_repid.    else.       w_variant-variant = p_vari.    w_variant-report = w_repid.       call function 'LVC_VARIANT_EXISTENCE_CHECK'    exporting    i_save = w_variant_save    changing    cs_variant = w_variant    exceptions    others = 01.    if sy-subrc ne 0.    message i000(zz) with text-g02.    endif.    endif.      endform.   *&---------------------------------------------------------------------*   *& Form fieldcat_build   *&---------------------------------------------------------------------*   form fieldcat_build.       call function 'REUSE_ALV_FIELDCATALOG_MERGE'    exporting    i_program_name = w_repid   * i_structure_name = 'TRDIR'    i_internal_tabname = 'I_DATA'    i_inclname = w_repid    changing    ct_fieldcat = i_fieldcat_alv.      * Modify displayed fields    loop at i_fieldcat_alv into w_fieldcat_alv.    case w_fieldcat_alv-fieldname.    when 'NAME'.    w_fieldcat_alv-hotspot = 'X'.    when 'MYFIELD'.    w_fieldcat_alv-checkbox = 'X'.    w_fieldcat_alv-seltext_s = 'MyChkBox'.    when others.    endcase.       modify i_fieldcat_alv from w_fieldcat_alv.    endloop.      endform.   *&---------------------------------------------------------------------*   *& Form display_data   *&---------------------------------------------------------------------*   form display_data.       w_callback_ucomm = 'CALLBACK_UCOMM'.       case 'X'.    when p_grid.    if p_html = 'X'.    w_html_top_of_page = 'HTML_TOP_OF_PAGE'.    endif.       call function 'REUSE_ALV_GRID_DISPLAY'    exporting   * i_background_id = 'SIWB_WALLPAPER'    i_background_id = 'SIWB_WALLPAPER'    i_callback_program = w_repid    i_callback_html_top_of_page = w_html_top_of_page   * i_structure_name = 'TRDIR'    i_default = 'X'    i_save = 'A'    is_variant = w_variant    is_layout = w_layout    i_callback_user_command = w_callback_ucomm    it_fieldcat = i_fieldcat_alv    it_events = i_events    it_event_exit = i_event_exit    it_excluding = i_excluding    is_print = w_print   * i_screen_start_column = 1   * i_screen_start_line = 1   * i_screen_end_column = 70   * i_screen_end_line = 30    tables    t_outtab = i_data.       when p_list.    call function 'REUSE_ALV_LIST_DISPLAY'    exporting    i_background_id = 'ALV_BACKGROUND'    i_callback_program = w_repid    i_default = 'X'    i_save = 'A'    is_variant = w_variant    is_layout = w_layout    i_callback_user_command = w_callback_ucomm    it_fieldcat = i_fieldcat_alv    it_events = i_events    it_event_exit = i_event_exit    is_print = w_print    tables    t_outtab = i_data.    endcase.      endform.   *---------------------------------------------------------------------*   * FORM user_command *   *---------------------------------------------------------------------*   form callback_ucomm using r_ucomm like sy-ucomm    rs_selfield type slis_selfield.       message i000(zz) with r_ucomm.       case r_ucomm.    when '&IC1'.    set parameter id 'RID' field rs_selfield-value.    call transaction 'SE38'.    when others.    endcase.      endform.   *&---------------------------------------------------------------------*   *& Form get_data   *&---------------------------------------------------------------------*   form get_data.       select * up to 15 rows from trdir    into corresponding fields of table i_data    where name in s_name.      endform.   *---------------------------------------------------------------------*   * FORM ALV_TOP_OF_PAGE *   *---------------------------------------------------------------------*   form alv_top_of_page.       clear: i_list_comments[].       w_list_comments-typ = 'H'. "H=Header, S=Selection, A=Action    w_list_comments-key = ''.    w_list_comments-info = 'Info 1'.    append w_list_comments to i_list_comments.       w_list_comments-typ = 'A'. " H = Header, S = Selection, A = Action    w_list_comments-key = ''.    w_list_comments-info = 'Begin of list'.    append w_list_comments to i_list_comments.       call function 'REUSE_ALV_COMMENTARY_WRITE'    exporting    i_logo = 'ENJOYSAP_LOGO'    it_list_commentary = i_list_comments.      endform.   *&---------------------------------------------------------------------*   *& Form event_build   *&---------------------------------------------------------------------*   form event_build.       call function 'REUSE_ALV_EVENTS_GET'    exporting    i_list_type = 0    importing    et_events = i_events.       read table i_events    with key name = slis_ev_top_of_page    into w_events.    if sy-subrc = 0.    move 'ALV_TOP_OF_PAGE' to w_events-form.    modify i_events from w_events index sy-tabix.    endif.       read table i_events    with key name = slis_ev_end_of_list    into w_events.    if sy-subrc = 0.    move 'ALV_END_OF_LIST' to w_events-form.    modify i_events from w_events index sy-tabix.    endif.       read table i_events    with key name = slis_ev_end_of_page    into w_events.    if sy-subrc = 0.    move 'ALV_END_OF_PAGE' to w_events-form.    modify i_events from w_events index sy-tabix.    endif.      endform.   *---------------------------------------------------------------------*   * FORM alv_end_of_list *   *---------------------------------------------------------------------*   form alv_end_of_list.       clear: i_list_comments[].       w_list_comments-typ = 'A'. "H = Header, S = Selection, A = Action    w_list_comments-key = ''.    w_list_comments-info = 'End of list'.    append w_list_comments to i_list_comments.       call function 'REUSE_ALV_COMMENTARY_WRITE'    exporting    it_list_commentary = i_list_comments    i_logo = 'ZMYOBJECTKEY'    i_end_of_list_grid = 'X'.      endform.   *---------------------------------------------------------------------*   * FORM alv_end_of_page *   *---------------------------------------------------------------------*   form alv_end_of_page.      endform.   *&---------------------------------------------------------------------*   *& Form print_build   *&---------------------------------------------------------------------*   form print_build.       w_print-no_print_listinfos = 'X'.      endform.   *&---------------------------------------------------------------------*   *& Form layout_build   *&---------------------------------------------------------------------*   form layout_build.       w_layout-zebra = 'X'.    w_layout-no_vline = 'X'.    w_layout-colwidth_optimize = 'X'.    w_layout-detail_popup = 'X'.    w_layout-detail_initial_lines = 'X'.    w_layout-detail_titlebar = 'Detail Title Bar'.      endform.   *&---------------------------------------------------------------------*   *& Form event_exit_build   *&---------------------------------------------------------------------*   form event_exit_build.       clear: i_event_exit[].      * Pick    w_event_exit-ucomm = '&ETA'.    w_event_exit-before = ' '.    w_event_exit-after = 'X'.    append w_event_exit to i_event_exit.      endform.   *---------------------------------------------------------------------*   * FORM HTML_TOP_OF_PAGE *   *---------------------------------------------------------------------*   form html_top_of_page using r_top type ref to cl_dd_document.       data:    text type sdydo_text_element,    s_table type ref to cl_dd_table_element,    col_key type ref to cl_dd_area,    col_info type ref to cl_dd_area,    a_logo type ref to cl_dd_area.      * Split TOP-Document    call method r_top->vertical_split    exporting split_area = r_top    split_width = '30%'    importing right_area = a_logo.      * Fill TOP-Document    call method r_top->add_text    exporting text = 'Example of a Heading'    sap_style = 'HEADING'.       call method r_top->new_line.    call method r_top->new_line.    call method r_top->add_table    exporting no_of_columns = 2    with_heading = ' '    border = '1'    importing table = s_table.       call method s_table->add_column importing column = col_key.    call method s_table->add_column importing column = col_info.       text = 'A key value marked'.    call method col_key->add_text    exporting text = text    sap_emphasis = 'Strong'.       call method col_info->add_gap exporting width = 6.       text = '600' .    call method col_info->add_text    exporting text = text    sap_style = 'Key'.       call method col_info->add_gap exporting width = 3.       text = 'Block brick units'.    call method col_info->add_text exporting text = text.       call method s_table->new_row.       text = 'Storage Bin'.    call method col_key->add_text    exporting text = text    sap_emphasis = 'Strong'.       call method col_info->add_gap exporting width = 7.       text = 'C-A-004'.    call method col_info->add_text exporting text = text.       call method s_table->new_row.       text = 'Warehouse number' .    call method col_key->add_text    exporting text = text    sap_emphasis = 'Strong'.       call method col_info->add_gap exporting width = 6.       text = '200' .    call method col_info->add_text    exporting text = text    sap_style = 'Success'.       call method col_info->add_gap exporting width = 3.       text = 'marked success'.    call method col_info->add_text exporting text = text.       call method s_table->new_row.       call method r_top->new_line.    text = 'This last line is a comment in italics.'.    call method r_top->add_text    exporting text = text    sap_emphasis = 'EMPHASIS'.       call method r_top->new_line.    call method a_logo->add_picture   * exporting picture_id = 'ZZTESTBMP'.    exporting picture_id = 'ENJOYSAP_LOGO'.      endform.   *&---------------------------------------------------------------------*   *& Form exclude_build   *&---------------------------------------------------------------------*   form exclude_build.       w_excluding = '&GRAPH'. "Graphic    append w_excluding to i_excluding.      endform. " exclude_build   GR/IR 的绝妙应用   [日期:2006-11-05] 来源:sapsky 作者:sapsky [字体:大 中 小]      1,采购的an incoming invoice当被过帐时,必须参照(refer to)    (1). a purchase order    (2). a good receipt(没收货就没有the good receipt)   2,invoice verification被过账的结果    发票校验时:Dr:GR/IR科目 (在途物资, 收到某张订单的发票)    Cr:应付帐款 (the vendor account is credited.)   3,goods receipt被过账的结果    收货时: Dr:存货 (存货暂估入账)    Cr:GR/IR科目 (应付暂估, 收到某张订单的货物)   4,当一个订单的货物和发票都结算完毕时,该订单的GR/IR科目余额应为零。   5,GR/IR是个过渡性科目,用于记录在途物资和应付暂估,为什么要如此做呢,是为了出财务报表。    因为GR/IR非资产也非负债科目(期末出报表时必清零,下一期初转回).    通常定义两个也可一个科目(在途物资-到资产,对那写BNG(Billing No Goods)的,    应付暂估-到负债,对那些GNB(Goods No Billing)的),SAP会自动产生会计凭证并通常是月结后第一天又冲回来.    而且通常GR/IR科目会做open item management, 自己慢慢体会吧.      6,月结时,如果某张订单的GR/IR科目有借方余额,转入在途物资,只是月结用,月结后又要转回来的    本月末 月结时:Dr:在途物资(资产类)    Cr:GR/IR科目    次月初 转回时:Dr:GR/IR科目    Cr:在途物资   7,月结时,如果某张订单的GR/IR科目有贷方余额,转入应付暂估,只是月结用,月结后又要转回来的    本月末 月结时:Dr:GR/IR科目    Cr:应付暂估(负债类)    次月初 转回时:Dr:应付暂估    Cr:GR/IR科目   月结时,做在途物资和应付暂估。   计算同一GR/IR科目,同一应付帐款统驭科目数据的合计结果:   借方余额计算值(票到货未到) = 同一订单中的借方合计 - 同一订单中可清帐的行项目余额   贷方余额计算值(货到票未到) = 同一订单中的贷方合计 - 同一订单中可清帐的行项目余额   本月底记帐   借方余额计算值:    Dr:在途物资    Cr:GR/IR换算调整   贷方余额计算值    Dr:GR/IR换算调整    Cr:应付暂估      下月初冲销   借方余额计算值    Dr:GR/IR换算调整    Cr:在途物资   贷方余额计算值    Dr:应付暂估    Cr:GR/IR换算调整   8,SAP FI/CO在途物资,应付暂估的例子:    一般企业不应做BNG(Billing no goods),然而在SAP中是先做BNG时回自动对应到GR/IR的,等你收货后会自动清掉.    比如PO qty 100, price 10 total 1000,不同的企业配置可能不同.    1.如是新PO, 没做任何收货,一般你是先MIRO不了(如果vendor主数据是GR based inv. verification)的,    因没有reference doc, 如此Po的相关Item已经收货了,可先做发票校验. 各企业可能会有所不同.    2.如果以前收了10个, 比如MIGO产生的mat doc是4500000111.    dr: material 100 +    cr:Gr/IR 100 -    miro时你对reference doc 为4500000111的校验, 比如发票上是100.    将qty change 成100, amount 1000.    产生的会计凭证是:    dr: GR/IR 1000 +(自动产生GR/IR 1000)    Cr:AP 1000-    等你再收90的时候.    MIGO:    Dr:material 900    Cr:GR/IR 900    不就自动清了吗?       SAP FICO在途物资,应付暂估   1.OBYP: BNG, GNB   2.设置几个会计科目: GR/IR adjustment,在途物资,应付暂估    对GNB( goods receive but no billing-invoicing),资产(材料)增加了但未付款,其实是应付暂估    对BNG(通常企业MIRO要求vendor invoice, vendor 送货单和我们的收货单对照-通常就是打印MIGO产生的material document    统一才确定AP,当然PO price change且已经 MIGO,会不统一,所以BNG -billing no goods receive不大会出现),    将是你的在途物资(确定了AP但没到货).为什么要这样?因为GR/IR是一个中间科目,    对GNB其实是将来的负债,对BNG是潜在资产,做balance sheet不能将GR/IR带去,所以有这样的做法.    Auto clear GR/IR .根据OBYP设置的会计科目自动产生凭证,月结后下月开帐后立即自动调整回来用户出口   [日期:2006-11-07] 来源:network 作者:sapsky [字体:大 中 小]      用户出口就是SAP中的Customer Exits或者User Exits      什么叫用户出口呢?打个比方说吧,SAP软件就象一根晾衣服的绳子,上面有数不清的衣架,多数衣架上已经挂上了衣服,就些衣服就SAP的标准程序,还有些衣架是空着的,这些就是“用户出口”,你可以把自己做的衣服(比如程序代码)挂到这些衣架上去--如果你觉得SAP给你准备的衣服不够穿或者不合身的话。   使用用户出口可以:   -不影响标准SAP源代码   -不影响软件升级   SAP有四种基本用户出口的类型:   1.菜单出口-Menu Exits    定义自己的菜单   2.屏幕出口-Screen Exits    定义自己的屏幕   3.功能模块出口-Function Module Exits    在SAP应用程序中添加功能   4.关键字出口-Keyword Exits    在ABAP/4字典中的关键字数据元素添加文档。结果是你在使用这些数据元素的字段处按F1后会出现你自定义的说明文档   使用的方法是:首先定义(T-Code:CMOD)一个项目Project(以管理你的增强,这里的项目和PS模块的项目可是两回事),把你要使用的系统增加Enhancement分配给这个项目,编辑系统增强中的用户出口对象。   SAP的用户出口和其它模块不太一样,其他模块基本采用上面说到的系统增强方法,SD的子模块则是罗列了一大堆已经定义好的子程序(Include)--说实话,我比较喜欢这种方式,你可以直接在SE38中修改这些子程序,然后激活就可以了。   要编辑用户出口,你必须有开发的权限,另外,除了关键字出口外,其他的出口都需要你有一定的ABAP/4编程能力。   ABAP中有关BAPI的介绍   1.BAPI – business application programming interface   2.它实际上是一种特殊的Remote Function Modules (RFC)是为了提供使用外部程序来进行交易活动   3.它提供的基于企业目标(Business Object) 技术的接口应用界面   4.SAP采用了Object-oriented技术,逻辑定义了SAP R/3系统的所有功能目标,并且将所有的目标(Objects) 和BAPIs存储于企业目标库BOR(Business Objects Repository).   5.SAP R/3 企业目标的目标类型(Object Type) 相当于目标设计语言中类(Class) 的概念,其定义结构由以下几部分组成:基本数据,接口界面,键(Key Fields),方法(Methods),特征(Attributes),事件(Events)      --如何创建BAPI程序   1.定义BAPI Structure (Structure不能在BAPI中重复使用,因为一旦BAPI被释放,其Structure被冻结)   2.创建FUNCTION MODULE   每个BAPI必须有自己的Function Group,Function Group属性必须为RFC   3.创建Business Object   4.使用BAPI WIZARD创建API Method   这样BAPI可以被外部程序调用   5.Function Module符合BOR Method   4.释放BAPI Function Module,   释放Business Object Type,   释放BAPI作为BOR的一种Method      关键字:AUTHORITY-CHECK      用法:      AUTHORITY-CHECK OBJECT 'ZSD_VKB'   ID 'ZVKBUR' FIELD INPUT1 "OR S_VKBUR-LOW   ID 'ACTVT' FIELD '01'. "OR 61   IF SY-SUBRC = 0.   .   .   ELSE.   MESSAGE S019.   ENDIF.      前提:   授权对象:ZSD_VKB      SAP系统中,到处可见层级结构。在授权相关的项目中也是如此。当建立需要的权限对象时,需要在系统中维护下面的层级结构:   @ AUTHORIZATION FIELD: ZVKBUR   事务代码:SU20   在创建AUTHORIZATION FIELDS 时,你会发现,里面还有层级结构。它包含了一个data element,存在于ABAP 字典里,同时,还要指定与之关联的search help的表。      例:      AUTHORIZATION FIELDS: ZVKBUR      Field name: ZVKBUR   Data element: ZVKBUR   Table name: ZTVKBT      这里,data elemnt 还存在层级结构,它可以包含一个field,在SAP中,这种field可以看做是最底层结构了,有时间另说。   @ OBJECT CLASS      class 在sap中屡见不鲜,最大的我们常用的开发类,物料评估时会遇到评估类等等。要创建object class,事务代码是su21。      object class可以包含几个 authorization object。      例:      object class: zsd      authorization object:zsd_vkb   !!一个 object可以包含多个field   在建好了field、object、class之后,一个授权对象就完成了      接下来,是角色 role,事务代码是PFCG。在角色当中,重点注意的是menu与authorization。正是通过role,把程序跟授权对象关联在一起,我们才可以完成授权检查。      role定义之后,还要为其分配user。当终端用户用user登录并执行我们在role的menu中指定好的程序的tcode,授权检查才真正开始。      。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值