初学ABAP的一点教程(1)

 

在SAP中,每一个功能基本上都对应了一个事务代码,你可以输入相应的事务代码来执行相应的功能,事务代码在SAP MENU下面的输入框中输入。
第一个程序,HELLO WORLD:
1.       用ABAP REPORT来实现:
很简单:(1.进入SAP系统—〉SE38 。
        (2.输入程序名z_hello,选择Create 。
注意:自己开发的程序一定要用Z或者Y开头,这是因为SAP在升级的时候不会覆盖这些程序。
               (3.这时会弹出一个对话框,输入TITLE,选择Type为Executable program 。
               (4.然后又会弹出一个对话框,让你选择开发类(Package),如果你有自己的开发类的话,输入就可以,没有直接点下面的Local Object 。
               (5.ABAP编辑器出现了,输入代码:
                  “WRITE: 'HELLO,WORLD!' .” 。
               (6.按Ctrl+F2:语法检查;Ctrl+F3:激活;F8:执行。
到这里,ABAP的第一个程序就写出来了,好简单!!!
2. 用 ABAP DIALOG来实现:
比较麻烦,在这里详细的介绍怎么建立SCREEN,以后就不介绍了
1. 建立一个DIALOG程序,步骤同上,只不过在Type里选择Module pool,
假设程序名为:Z_SCREEN
2. 执行SE51,在Program里输入程序名称:Z_SCREEN;
在screen number里输入屏幕的号码:9000
然后点Create
3. 在short description中输入你的描述:hello world screen
4. 点layout,调出屏幕编辑器,建立一个标签,输入hello world
5. 点激活,或者Ctrl+F3
6. 执行SE93:建立事务代码:输入z_hello,点Create,会出现对话框,输入short text,选择Program and screen,然后输入你建立的程序名以及屏幕号,
这里是Z_SCREEN,9000
7. 点保存,然后会出现对话框,选择LOCAL Object
   好了,执行z_hello,看到了吧,不过这个程序还没有退出的功能,后面会慢慢加上去的。
 
ABAP基础知识学习
SAP ABAP / 4 基础知识学习  
数据类型
C :字符串
D :日期型格式为 YYYYMMDD  例:'1999/12/03'
F : 浮点数长度为8
I :整数
N :数值组成的字符串 如:011,'302'
P : PACKED数用于小数点数值  如:12.00542
T : 时间格式为:HHMMSS 如:'14:03:00'
X : 16进制数 如:'1A03'
*-------------------------------------------------------------------------------------*
变量声明
DATA <F> [<Length>] <type> [<value>][decimals]   小数点右边的位数decimals
     <F> 变量名称
     <length><type> 变量类型及长度
     <value> 初值
     <decimals> 小数位数
    
exp:
   DATA : COUNTER  TYPE P DECIMALS 3,
          NAME(10) TYPE C VALUE 'DELTA',
          S_DATE   TYPE D VALUE '19991203'.
exp:
   DATA : BEGIN OF PERSON,
            NAME(10) TYPE C,
            AGE      TYPE I,
            WEIGHT   TYPE P DECIMALS 2,
          END OF PERSON.
另外,有关DATA声明的指令还有: CONSTANTS(声明常数)、STATICS(临时变量声明).
exp:
CONSTANTS  PI  TYPE  P  DECIMALS  5  VALUE  '3.14159'.
STATICS 关键字
声明的变量仅在目前的程序中使用, 结束后会自动释放
语法: 
        STATICS <c> [<length>] <type> [<value>] [<decimals>]
系统专用变量说明
   系统内部专门创建了SYST这个STRUCTURE,里面的栏位存放系统变量,常用的系统变量有:
   SY-SUBRC:  系统执行某指令后,表示执行成功与否的变量,'0'表示成功
   SY-UNAME:  当前使用者登入SAP的USERNAME;
   SY-DATUM:  当前系统日期;
   SY-UZEIT:  当前系统时间;
   SY-TCODE:  当前执行程序的Transaction code
   SY-INDEX:  当前LOOP循环过的次数
   SY-TABIX:  当前处理的是internal table 的第几笔
   SY-TMAXL:  Internal table的总笔数
   SY-SROWS:  屏幕总行数;
   SY-SCOLS:  屏幕总列数;
   SY-MANDT:  CLIENT NUMBER
   SY-VLINE:  画竖线
   SY-ULINE:  画横线
  
TYPE 关键字
  用来指定资料型态或声明自定资料型态
  Example:
        TYPES:  BEGIN  OF  MYLIST,
                   NAME(10)  TYPE  C,
                   NUMBER   TYPE  I,
                END  OF  MYLIST.
        DATA  LIST  TYPE  MYLIST.
LIKE 关键字
   跟TYPE关键字使用格式相同, 如
   DATA  TRANSCODE  LIKE  SY-TCODE.
   不同的是 LIKE 用在已有值的资料项, 如系统变量, 而TYPE关键字则是用在指定资料型态。
TABLES 关键字
用来声明 Table Work Area 的数据, 对应至 ABAP/4 资料文件(Dictionary Object), 由SQL 指令加载所需数据
语法:
TABLES <dbtab>
Example:
TABLES: SPFL.
SELECT * FROM SPFL.
WRITE: SPFL-MANDT, SPFL-CARRID,SPFL-CONNECTION.
ENDSELECT.
从ABAP/4 Dictionary 的 SPFL 档载入MANDT,CARRID,CONNECTION 三个字段至SPFL 此Table Work Area
  
*-------------------------------------------------------------------------------------*
输出
一. WRITE 语句
ABAP/4用来在屏幕上输出资料的指令是WRITE指令,例如:
     WRITE: 'USER NAME IS:', SY-UNAME.
二. 指定屏幕输出位置
指定输出位置的语句格式为:
      WRITE: [AT] [ / ] [<pos>] [(<len>)] 资料项 [<par>]
其中: / : 在下一行输出
<pos>: 指定输出的行号;
(<len>):指定输出位数(长度)
<par>: 指定显示格式参数,参数有:
          LEFT-JUSTIFIED  资料*左对齐
          CENTERED        资料*中间对齐
          RIGHT-JUSTIFIED 资料*右对齐
          UNDER <g>       正对在资料项<g>的下面显示
          NO-GAP          紧接着显示,不留空格
          USING EDIT MASK <m>: 使用内嵌子元显示, 如 12:03:20
          USING NO EDIT MASK: 不使用内嵌子元
          NO-ZER          数字前面 0 的部分不显示
          NO-SIGN:        不显示正负号
          DECIMALS <d>:   显示 <d> 位小数
          EXPOENT <e>:    F(浮点数)指数的值
          ROUND <r>:      四舍五入至小数点后<r>位
          CURRENCY <c>:   币别显示
          DD/MM/YY :      日期显示格式
          MM/DD/YY:      
          YY/MM/DD:
          YY/DD/MM
          MM/DD/YYYY:
          DD/MM/YYYY
          YYYY/MM/DD:
          YYYY/DD/MM:
例如1: WRITE: /10(6) 'ABCDEFGHIJK'.
输出结果为:        ABCDEF
例如2: DATA: X TYPE I VALUE '11:20:30',
             A(5)  TYPE C VALUE 'AB  CDE'.
      WRITE: / X USING EDIT MASK '__:__:__'.
      WRITE: / X USING EDIT MASK '$___,___'.
      WRITE: / Y NO-GAP.
输出结果为:
        11:20:30
        $112,030
        ABCDEF
例如3: DATA: LEN TYPE I VALUE 10,
       POS TYPE I VALUE 11,
       TEXT(10)   VALUE '1234567890'
       WRITE 'The text ------------ appears in the text.'.
       WRITE AT POS(LEN) TEXT.
WRITE TO 语句的基本 形式
要将值(文字)或源字段内容写入目标字段,可以使用 WRITE TO 语句:
语法
WRITE <F1> TO <F2> [<option>].
DATA: NUMBER TYPE F VALUE '4.3',
      TEXT(10),
      FLOAT TYPE F,
      PACK  TYPE P DECIMALS 1.
WRITE NUMBER.
WRITE NUMBER TO TEXT EXPONENT 2.
WRITE / TEXT.
WRITE NUMBER TO FLOAT.
WRITE / FLOAT.
WRITE NUMBER TO PACK.
WRITE / PACK.
MOVE NUMBER TO PACK.
WRITE / PACK.
exp:
DATA: NAME(10)   VALUE 'SOURCE',
      SOURCE(10) VALUE 'Antony',
      TARGET(10).
...
WRITE (NAME) TO TARGET.
WRITE: TARGET.
exp :
DATA: COUNTER TYPE I.
COMPUTE COUNTER = COUNTER + 1.
COUNTER = COUNTER + 1.
ADD 1 TO COUNTER.
在此,三条运算语句进行相同算术运算
输出屏幕上的线和空行
用下列语法,可以在输出屏幕上生成水平线:
语法
ULINE [AT [/][<pos>][(<len>)]].
它等同于
WRITE [AT [/][<pos>][(<len>)]] SY-ULINE.
AT 后的格式规范,与在在屏幕上定位 WRITE 输出(页 28)中为 WRITE 语句说明的格式规范完全一样。
如果没有格式规范,系统则开始新的一行,并用水平线填充该行。否则,只按指定输出水平线。
生成水平线的另一种方法,是在 WRITE 语句中键入恰当数量的连字符,如下所示:
WRITE [AT [/][<pos>][(<len>)]] '-----...'.
垂直线
用下列语法 ,可以在输出屏幕上生成垂直线:
语法
WRITE [AT [/][<pos>]] SY-VLINE.

WRITE [AT [/][<pos>]] '|'.
空行
用下列语法 ,可以在输出屏幕上生成空行:
语法
SKIP [<n>].
该语句从当前行开始,在输出屏幕上生成 <n> 个空行。如果没有指定 <n> 的值,就输出一个空行 。
要将输出定位在屏幕的指定行上,请使用:
语法
SKIP TO LINE <n>.
该语句允许将输出位置向上或向下移动。
       
四. 显示图示:
语法: WRITE: <symbol-name> AS SYMBOL.
     WRITE: <icon-name>  AS ICON.
例如: INCLUDE  <SYMBOL>.
     INCLUDE  <ICON>.
WRITE: / 'Phone symbol:', SYM_PHONE AS SYMBOL.
WRITE: / 'Alarm Icon:', ICON_VOICE_OUTPUT AS ICON.
要查看系统所提供有那些符号及图示,可选择'EDIT'下的'Insert Statement',选择'Write',接下来选择要查看的群组,如SYMBOL 或ICON, 接下来按'Display'即可
.
*-------------------------------------------------------------------------------------*
一. Internal Table 的声明
ABAP/4中的Internal Table是一种Data Structure,类似于其他语言中的STRUTURE,它可以由几个不同类型的栏位(field)组成,用来表示具有不同属性的某一事物,
单独一笔资料表示某个事物,多笔资料表示具有相同属性的多个事物.
Internal table 的定义有以下几种格式:
格式一.   DATA: BEGIN OF <internal table>  OCCURS  <n>,
                   <field 1>  TYPE <type1>,
                  [<field 2>  TYPE <type 2>,
                   <field 3>  TYPE <type 3>,
                    …                  ]
                END OF  <internal table>.
     语法:
           DATA  <f>  <type>  OCCURS  <n>  [WITH  HEADER  LINE]
           Example:
                   DATA  VECTOR  TYPE  I  OCCURS  10  WITH  HEADER  LINE.
                  
格式二.   TYPES: BEGIN OF <work area>,
                     <field 1>  TYPE <type1>,
                    [<field 2>  TYPE <type 2>,
                     <field 3>  TYPE <type 3>,
                    …                  ]
                 END OF <work area>.
          TYPES <internal table> TYPE <work area> OCCURS <n>.
         
格式三.   DATA: BEGIN OF <work area>.
                  INCLUDE STRUCTURE <table name>.
          DATA: END OF <work area>.
          DATA: <internal table> LIKE <work area> OCCURS <n>.
exp:
         
TYPES VECTOR TYPE I OCCURS 10.
TYPES: BEGIN OF LINE,
         COLUMN1 TYPE I,
         COLUMN2 TYPE I,
         COLUMN3 TYPE I,
       END OF LINE.
TYPES ITAB TYPE LINE OCCURS 10.
TYPES: BEGIN OF DEEPLINE,
          TABLE1 TYPE VECTOR,
          TABLE2 TYPE ITAB,
       END OF DEEPLINE.
TYPES DEEPTABLE TYPE DEEPLINE OCCURS 10.
本示例创建与上例相同的内表数据类型(VECTOR 和 ITAB)。然后创建数据类型 DEEPLINE 作为字段串,包含这些内表作为组件。通过该字段串,数据类型
DEEPTABLE 被创建为内表。因此该内表的元素本身就是内表。
exp :
TYPES: BEGIN OF LINE,
         COLUMN1 TYPE I,
         COLUMN2 TYPE I,
         COLUMN3 TYPE I,
       END OF LINE.
TYPES ITAB TYPE LINE OCCURS 10.
DATA TAB1 TYPE ITAB.
DATA TAB2 LIKE TAB1 WITH HEADER LINE.
同创建内表数据类型(页 99)中所示,该示例创建数据类型 ITAB 作为内表。通过使用 DATA 语句的 TYPE 参数引用 ITAB,使数据对象 TAB1 与 ITAB 结构相同
。通过使用 DATA 语句的 LIKE 参数引用 TAB1,使数据对象 TAB2 结构相同。创建的 TAB2 带表头行。因此,可以在程序中使用 TAB2-COLUMN1、TAB2-COLUMN2
和 TAB2-COLUMN3 等定位表格工作区域 TAB2。
exp :
DATA FLIGHT_TAB LIKE SFLIGHT OCCURS 10.
本示例创建数据对象 FLIGHT_TAB, 其结构与数据库表格 SFLIGHT 相同。
本示例介绍 如何采用两种不同的步骤创建同一内表。
TYPES VECTOR_TYPE TYPE I OCCURS 10.
DATA VECTOR TYPE VECTOR_TYPE WITH HEADER LINE.
在此创建一个内表数据类型 VECTOR_TYPE,其行包含首先创建的基本类型 I 字段。然后,通过引用 VECTOR_TYPE 创建数据对象 VECTOR。通过使用 WITH HEADER
LINE 选项还创建表格工作区域 VECTOR。在这种情况下,表格工作区域包含一种类型 I 字段,可以通过名称 VECTOR 定位。
DATA VECTOR TYPE I OCCURS 10 WITH HEADER LINE.
在这种情况下,通过直接在 DATA 语句中使用 OCCURS 选项创建完全一样的数据类型 VECTOR。
*-------------------------------------------------------------------------------------*
1. TYPES type.
2. TYPES type(len).
3. TYPES: BEGIN OF structype  ...
          END OF structype.
4. TYPES itabtype {TYPE tabkind OF linetype LIKE tabkind OF lineobj}
         [WITH [UNIQUE|NON-UNIQUE] keydef] [INITIAL SIZE n].
5. TYPES itabtype TYPE RANGE OF type.
   TYPES itabtype LIKE RANGE OF f.
6. TYPES itabtype {TYPE linetype|LIKE lineobj} OCCURS n.
*-------------------------------------------------------------------------------------*
         
APPEND LINE
格式:APPEND <work area> TO <internal table>
举例一:(使用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.
举例二 (不使用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.
exp:
DATA: BEGIN OF ITAB OCCURS 10,
        COL1 TYPE C,
        COL2 TYPE I,
      END OF ITAB.
DO 3 TIMES.
  APPEND INITIAL LINE TO ITAB.
  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 <itab1> [FROM <n1> ] [TO <n2>] TO <itab2>.
       将<itab1>的元素加入至<itab2>中,可选取自<n1>至<n2>的范围.
       APPEND LINES OF ITAB TO JTAB.
COLLECT LINE
COLLECT 指令也是将元素加入Internal table中,与APPEND 的区别是: COLLECT指令在非数值栏位相同的情况下,将数值栏位汇总.
格式:  COLLECT [<work area> INTO ] <itab>
DATA: BEGIN OF ITAB OCCURS 3,
             COL1(3)  TYPE C,
             COL2     TYPE I,
       END OF ITAB.
       ITAB-COL1 = 'ABC'.    ITAB-COL2 = 10.
       COLLECT  ITAB.
       ITAB-COL1 = 'XYZ'.    ITAB-COL2 = 20.
       COLLECT  ITAB.
       ITAB-COL1 = 'ABC'.    ITAB-COL2 = 80.
       COLLECT  ITAB.
此时, internal table中放的是2笔数据, 分别为:
       ITAB-COL1        ITAB-COL2
        'ABC'               90
        'XYZ'               20
*-------------------------------------------------------------------------------------*
INSERT LINE
将元素插入在指定的internal table位置之前.
格式: INSERT [<wa> INTO] [INITIAL LINE INTO ] <itab> [INDEX <idx>]
或者: INSERT LINES OF <itab1> [FROM <n1> TO <n2>] INTO <itab2> INDEX <idx>
其中: <wa>即work area,工作区中的元素.
[INITIAL LINE INTO] :插入一笔初始化的记录.
<itab>: internal table
[INDEX <idx>]: internal table 的记录号.(新加入的元素放在此记录前面)
         Example:
                  DATA:  BEGIN  OF  LINE,
                           COL1  TYPE  I,
                           COL2  TYPE  I,
                           END  OF  LINE.
                  DATA  ITAB  LIKE  LINE  OCCURS  10.
                  DO  3  TIMES.
                     LINE-COL1 = SY-INDEX *10.
                     LINE-COL2 = SY-INDEX *20.
                     APPEND  LINE  INTO  ITAB.
                  ENDDO.
                  LINE-COL1=100.
                  LINE-COL2=200.
                  INSERT  LINE  INTO  ITAB  INDEX  2.  "插入在位置2之前
                  LOOP  AT  ITAB  INTO  LINE.
                    WRITE:  /  SY-TABIX,LINE-COL1,LINE-COL2. "SY-TABIX为Table位置
                 ENDLOOP.
                 执行结果:
                            1        10       20
                            2       100      200  "插入的元素
                            3        20       40
                            4        30       60
插入另一Internal Table元素
   语法:
         INSERT  LINES  OF  <itab1>  [FROM <n1> TO <n2>]  TO  <itab2>  INDEX <idx>
        将<itab1>的元素插入至<itab2>中, 位置在 <idx>之前, 可选取自<n1>至<n2>的范围
         Example:
                  APPEND  LINES  OF  ITAB  TO  JTAB  INDEX  3.
                  将ITAB所有元素插入JTAB中, 位置在第三个元素之前
*-------------------------------------------------------------------------------------*爱ERP网  www.loveerp.com
读取internal table
格式一:
LOOP AT <itab> [INTO <wa>][FROM <n1> TO <n2>][WHERE <conditions>]
       <statement>
ENDLOOP.
         Example:
                  LOOP  AT  ITAB  INTO  LINE  WHERE  COL1 &gt;100.
                     WRITE:  /  SY-TABIX,LINE-COL1.
                  ENDLOOP.
                  仅读取 COL1 &gt; 100 的元素
格式二:
READ TABLE <itab> [INTO <wa>] [INDEX <idx> / WITH KEY <conditions>]
举例. (格式二)
DATA: BEGIN OF ITAB OCCURS 10,
             COL1 TYPE I,
             COL2 TYPE I,
      END OF ITAB.
      DO 10 TIMES.
          ITAB-COL1 = SY-INDEX.
          ITAB-COL2 = SY-INDEX * 2.
          APPEND ITAB.
ENDDO.
READ TABLE ITAB INDEX 3.
(或者: READ TABLE  ITAB WITH KEY COL1 = 3.)
WRITE: / 'ITAB-COL1 = ', ITAB-COL1, 'ITAB-COL2 = ', ITAB-COL2.
执行结果同样是:
ITAB-COL1 = 3
ITAB-COL2 = 6.
         Example:
                   READ  TABLE  ITAB  INTO  LINE  INDEX  5
                   读取 ITAB的第5个元素资料, 放入 LINE的栏位中
根据栏位内容寻找
   语法:
          READ  TABLE  <itab>  INTO  <wa>
          Example:
                  ITAB-COL1 = 'ABC'.
                  READ  TABLE  ITAB  INTO  LINE.
                  找出ITAB 中 COL1 栏位内容是 ABC 的元素, 找到的值放入 LINE 中
                  若找到 SY-SUBRC传回0, 找不到则传回 4, <itab>必须声明有 work area
*-------------------------------------------------------------------------------------*
修改internal table 中的值
格式: MODIFY <itab> [FROM <wa>][INDEX <idx>][TRANSPORTING <f1><f2>…][WHERE <conditions>]
举例一. READ TABLE ITAB INDEX 3.
       LINE-COL1 = 29.
       MODIFY ITAB FROM LINE TRANSPORTING COL1.
       将第三笔记录的COL1栏位的值修改为29.
举例二. T_SALARY - salary = 50.
       MODIFY T_SALARY TRANSPORTING salary WHERE birthday = '1999/12/06'.
      
DELETE internal table中的栏位
格式: DELETE <itab> INDEX <idx>.
或:   DELETE <itab>[FROM <n1> TO <n2>] [WHERE <conditions>]
Internal table 排序 
SORT <itab> [<order way>][BY <f1><f2>…]
其中:<order way> 有DESCENDING 和ASCENDING, Default 为ASCENDING.
     <f1>: 为指定排序的栏位.
        Example:
                 SORT  ITAB  DESCENDING  BY  COL2.
                 将 ITAB 根据 COL2栏位递减排序
*-------------------------------------------------------------------------------------*
确定内表属性
如果在处理过程中想知道内表一共包含多少行,或者想知道定义的 OCCURS 参数的大小,请使用 DESCRIBE 语句,用法如下:
语法
DESCRIBE TABLE <itab> [LINES <lin>] [OCCURS <occ>].
如果使用 LINES 参数,则将填充行的数量写入变量 <lin>。如果使用 OCCURS 参数,则将行的初始号写入变量 <occ>。
DATA: BEGIN OF LINE,
         COL1 TYPE I,
         COL2 TYPE I,
      END OF LINE.
DATA ITAB LIKE LINE OCCURS 10.
DATA: LIN TYPE I, OCC TYPE I.
DESCRIBE TABLE ITAB LINES LIN OCCURS OCC.
WRITE: / LIN, OCC.
DO 1000 TIMES.
   LINE-COL1 = SY-INDEX.
   LINE-COL2 = SY-INDEX ** 2.
   APPEND LINE TO ITAB.
ENDDO.
DESCRIBE TABLE ITAB LINES LIN OCCURS OCC.
WRITE: / LIN, OCC.
其输出为:
         0         10
     1.000         10
在此创建内表 ITAB。在填充表格前后执行 DESCRIBE 语句。更改当前行号,但无法更改初始行号。
*-------------------------------------------------------------------------------------*
加总
SUM.
总和计算存放与work area中,但只能在LOOP 中使用.
例: LOOP AT ITAB INTO LINE.
         SUM.
   ENDLOOP.
   WRITE: / LINE-COL1, LINE-COL2.
   LINE-COL1 和 LINE-COL2 存数值总和初始化internal table
REFRESH <itab>.  清空<itab>中的值.使用在没有 HEADER LINE 的 Internal Table中, 清除所有元素
CLEAR   <itab>.  清空<itab>的Header Line.使用在有 HEADER LINE 的 Internal Table中, 清除所有元素
FREE    <itab>.  释放内存空间.释放(Release) Internal Table所占的内存空间, 用在 REFRESH和 CLEAR指令之后
将值重置为 默认值
可以用 CLEAR 语句重置任何数据对象值,如下所示:
语法
CLEAR <f>.
exp:
DATA NUMBER TYPE I VALUE '10'.
WRITE NUMBER.
CLEAR NUMBER.
WRITE / NUMBER.
输出为:
        10
         0
CLEAR 语句将字段 NUMBER 的内容从10 重置为默认值 0。
*-------------------------------------------------------------------------------------*
   添加字段顺序并将结果赋给另一个字段
语法
ADD <n1> THEN <n2> UNTIL <nz> GIVING <m>.
如果 <n1>、 <n2>、 ... 、 <nz> 是在内存中相同类型和长度的等距字段序列,则进行求和计算并将结果赋给 <m>
   添加字段顺序并将结果添加到另一个字段的内容中
语法
ADD <n1> THEN <n2> UNTIL <nz> TO <m>.
该语句除了将字段总和添加到 <m> 的旧内容中之外,与上面语句的工作方式相同 。
有关其它相似变体的信息,参见有关 ADD 语句的关键字文档。
DATA: BEGIN OF SERIES,
         N1 TYPE I VALUE 10,
         N2 TYPE I VALUE 20,
         N3 TYPE I VALUE 30,
         N4 TYPE I VALUE 40,
         N5 TYPE I VALUE 50,
         N6 TYPE I VALUE 60,
      END OF SERIES.
DATA SUM TYPE I.
ADD SERIES-N1 THEN SERIES-N2 UNTIL SERIES-N5 GIVING SUM.
WRITE SUM.
ADD SERIES-N2 THEN SERIES-N3 UNTIL SERIES-N6 TO SUM.
WRITE / SUM.
输出如下:
       150
       350
在此,将 N1 到 N5 组件内容求和并将其值赋给字段 SUM。然后,将 N2 到 N6 组件求和并将其添加到 SUM 的值中。

转载于:https://www.cnblogs.com/yxbsmx/articles/1342811.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
30天学会ABAP程序 学习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层看到的透明表就和具体数据库无关),各种网络系统.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值