壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1730|回复: 14

[ABAP资料区] [分享知识 提升自我]SAP加油站—ABAP语法集锦,欢迎大家支持我,支持越多更新越快

[复制链接]
发表于 2013/7/15 11:01:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
Data Type (数据类型)


  • C: 字符(串), 长度为1, 最大有65535 BYTES, 初始值为: space,例: ‘M’;
  • D: 日期,  格式为YYYYMMDD, 最大是’9999/12/31’ ,例:’1999/12/03’.
  • F: 浮点数,   长度为8, 例如: 4.285714285714286E-01
  • I: 整数      范围 :-2^31 ~ 2^31-1
  • N: 数值组成的字符串: 011, ‘302’.
  • P: packed 数,用于小数点数值,例如: 12.00542;
  • T: 时间, 格式为HHMMSS,例如: ’14:03:00’, ’21:30:39’.
  • X: 16进制数, 例如 ‘1A03’.

点评

所有的联系方式,请放到签名档  发表于 2013/7/15 12:22

本帖被以下淘专辑推荐:

 楼主| 发表于 2013/7/16 10:06:40 | 显示全部楼层
变量宣告

变量宣告包含name, length, type, structure等,语法如下:
DATA  <F> [<length>] <type> [<value>] [<decimals>]
其中: <f> :变量名称,最长30个字符,不可含有 + , . , : ( )         等字符;
   <length><type>:变量类型及长度;
   <value>:初值
   <decimals>:小数位数
Example 1:
DATA: COUNTER TYPE P DECIMALS 3,
       NAME (10) TYPE C VALUE ‘Delta’,
       S_DATE   TYPE D VALUE ‘19991203’.
Example 2:
DATA: BEGIN OF PERSON,
          NAME(10) TYPE C,
          AGE      TYPE I,
          WEIGHT  TYPE P DECIMALS 2,
       END OF PERSON.
另外,有关DATA宣告的指令还有: CONSTANTS(宣告常数)、STATICS(临时变量宣告).
 楼主| 发表于 2013/7/17 10:13:56 | 显示全部楼层
ABAP语法集锦—系统专用变量说明

系统内部专门创建了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:  画横线



附注:
1. SAP的全称是: System Application Products in Data Processing;
2. ABAP/4的全称是:Advanced Business Application Programming;
3. ABAP/4的路径为:Tools à ABAP/4 WorkBenchàABPA/4 Editor ;
4. ABAP/4每条语句以句号结束;
5. ABAP/4中象= ,>, <,+,-,*,/等符号左右都需要有至少一个空格;
6. 整行注释用’*’号, 注释本行后面部分用’”’号;


 楼主| 发表于 2013/7/18 09:36:56 | 显示全部楼层
ABAP语法集锦—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 .
 楼主| 发表于 2013/7/19 10:26:43 | 显示全部楼层
ABAP语法集锦—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.
 楼主| 发表于 2013/7/22 10:16:52 | 显示全部楼层
ABAP语法集锦—COLLECT LINE

COLLECT 指令也是将元素加入Internal table中,与APPEND 的区别是: COLLECT指令在非数值字段相同的情况下,将数值字段汇总.
格式:  COLLECT [ INTO ]
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
 楼主| 发表于 2013/7/24 10:11:09 | 显示全部楼层
ABAP语法集锦—INSERT LINE

将元素插入在指定的internal table位置之前.
格式: INSERT [ INTO] [INITIAL LINE INTO ]  [INDEX ]
或者: INSERT LINES OF  [FROM  TO ] INTO  INDEX
其中: 即work area,工作区中的元素.
[INITIAL LINE INTO] :插入一笔初始化的记录.
: internal table
[INDEX ]: internal table 的记录号.(新加入的元素放在此记录前面)

 楼主| 发表于 2013/7/25 10:18:19 | 显示全部楼层
ABAP语法集锦—读取internal table

格式一:
LOOP AT  [INTO ][FROM  TO ][WHERE ]
      
ENDLOOP.
格式二:
READ TABLE  [INTO ] [INDEX  / WITH KEY ]
举例. (格式二)
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.
 楼主| 发表于 2013/7/26 09:52:06 | 显示全部楼层
ABAP语法集锦—修改internal table 中的值

格式: MODIFY  [FROM ][INDEX ][TRANSPORTING …][WHERE ]
举例一. 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’.
 楼主| 发表于 2013/7/29 10:11:27 | 显示全部楼层
【SAP加油站】ABAP语法集锦—改变条件输入格式

1. DEFAULT    TO  
设定开始结束范围输入默认值
     Example:
             SELECT-OPTIONS  AIRLINE  FOR  SPFLI-CONNID
                 DEFAULT  ‘2042’  TO  ‘4555’.
2. NO-EXTENSION
设定不要Multi-Option输入画面
3. NO  INTERVALS
设定不要区间范围输入画面
4. LOWER CASE
输入转换成大写
5. OBLIGATORY
强制要求输入
 楼主| 发表于 2013/7/30 10:05:05 | 显示全部楼层
ABAP语法集锦—配合SELECT 命令

条件输入完后要将符合条件的数据筛选出来, 可配合使用 SELECT 指令
   1.使用WHERE <条件式>
Example:
         SELECT-OPTIONS  AIRLINE  FOR  SPFLI-CONNID.
         SELECT  *  FROM  SPFLI  WHERE  CONNID  IN  AIRLINE.
            WRITE: / CONNID,FROMCITY,TOCITY.
             ENDSELECT.
2.使用CHECK参数
Example:
         SELECT-OPTIONS  AIRLINE  FOR  SPFLI-CONNID.
         SELECT  *  FROM  SPFLI.
            CHECK  AIRLINE.
            WRITE: / CONNID,FROMCITY,TOCITY.
             ENDSELECT.
   3.使用 IF … IN 叙述
     Example:
         SELECT-OPTIONS  AIRLINE  FOR  SPFLI-CONNID.
         SELECT  *  FROM  SPFLI.
            IF  SPFLI-CONNID  IN  AIRLINE.
              WRITE: / CONNID,FROMCITY,TOCITY.
                ENDIF
             ENDSELECT.
 楼主| 发表于 2013/7/31 10:13:43 | 显示全部楼层
ABAP语法集锦—SELECTION-SCREEN

1.产生空白列
语法:
      SELECTION-SCREEN  SKIP  []
          Example:
                   SELECTION-SCREEN  SKIP  2.
                   产生两列空白列
2.产生底线
语法:
      SELECTION-SCREEN  ULINE  / (length)
          Example:
                   SELECTION-SCREEN  ULINE  /10(30).
                   自第10格开始产生长度30的底线
3.印出备注说明
     语法:
      SELECTION-SCREEN  COMMENT  / (length)  
          Example:
                   REMARK = ‘Pls enter your name’.
                   SELECTION-SCREEN  COMMENT  /10(30)  REMARK.
4. 同一列中输入数个数据项
语法:
      SELECTION-SCREEN  BEGIN  OF  LINE.
         ……
      SELECTION-SCREEN  END  OF  LINE.
      Example:
              SELECTION-SCREEN  BEGIN  OF  LINE.
                  SELECTION-SCREEN  POSITION 20.
                  PARAMETERS  NAME(10).
                  SELECTION-SCREEN  POSITION 40.
                  PARAMETERS  BIRTH  TYPE  D.
              SELECTION-SCREEN  END  OF  LINE.
              在20格输入NAME内容, 40格输入 BIRTH的内容

5. 绘出BLOCK PANEL
语法:
SELECTION-SCREEN  BEGIN  OF  BLOCK  
                      [WITH  FRAME  [TITLE  
          …….
SELECTION-SCREEN  END  OF  BLOCK  .
Example:
SELECTION-SCREEN  BEGIN  OF  BLOCK  RADIO                          WITH  FRAME .
                  PARAMETER  R1  RADIOBUTTON  GROUP  GR1.
                  PARAMETER  R2  RADIOBUTTON  GROUP  GR1.
                  PARAMETER  R3  RADIOBUTTON  GROUP  GR1.
               SELECTION-SCREEN  END  OF  BLOCK  RADIO.
 楼主| 发表于 2013/8/1 15:14:11 | 显示全部楼层
ABAP语法集锦—OPEN SQL


SELECT语句
语法格式:
SELECT [INTO ] [FROM ] [WHERE ]
               [GROUP BY ] [ORDER BY ]
其中: 指定要抓取的字段
      将读取的记录存放在work area中
      指定从那个TABLE中读取数据
      抓取资料的条件
      指定按那些字段分组
      排序的字段及方式
相关的系统变量:
     SY-SUBRC = 0  表示读取数据成功
               <> 0 表示未找到符合条件的记录
     SY-DBLNT: 被处理过的记录的笔数.
相关的命令:
     EXIT. 退出循环.
     CHECK .如果逻辑表达式成立,则继续执行,否则,开始下一次循环.
.利用循环方式读取所有记录
SELECT ….ENDSELECT.是循环方式读取记录的.
     例如:
TABLES MARD.
SELECT [DISTINCT] * FROM MARD WHERE MATNR = ‘3520421700’.
    .
ENDSELECT.
(从MARD中抓取所有料号=3520421700的数据)
◆读取一笔数据
TABLES MARD.
SELECT SINGLE * FROM MARD WHERE MATNR = ‘3520421700’.
(从MARA中抓取一笔料号=3520421700的资料)
将读取的记录放在work area中,并且加入Internal table 中.
格式有:
   ... INTO
   ... INTO CORRESPONDING FIELDS OF
   ... INTO (f1, ..., fn) 变量组.
   ... INTO TABLE
   ... INTO CORRESPONDING FIELDS OF TABLE
   ... APPENDING TABLE
   ... APPENDING CORRESPONDING FIELDS OF TABLE
举例一:
TABLES MARD.
DATA:  BEGIN OF ITAB OCCURS 10,
              MATNR LIKE MARD-MATNR,
              WERKS LIKE MARD-WERKS,
              LGORT LIKE MARD-LGORT,
              LABST LIKE MARD-LABST,
        END OF ITAB.
SELECT MATNR WERKS LGORT LABST  
              INTO CORRESPONDING FIELDS OF ITAB
              FROM MARD
              WHERE MATNR = ‘3520421700’.
       APPEND ITAB.
       CLEAR ITAB.
ENDSELECT.
(将读取的结果放在Internal table ITAB中)
举例二.
TABLES MARD.
SELECT MATNR  MTART  MAKTX  INTO (t_matnr, t_mtart, maktx)
               FROM MARD
               WHERE MATNR = ‘3520421700’.
       .
ENDSELECT.
(从MARD中抓取料号=3520421700的料号、类型和描述,放在变量t_matnr, t_mtart, maktx中)。
◆按指定的字段排序
TABLES SBOOK.
SELECT * FROM SBOOK   WHERE CARRID = ‘LH’ AND
                                 CONNID = ‘0400’ AND
                                 FLDATE = ‘19950228’
            ORDER BY BOOKID [ASCENDING/DESCENDING].
   WRITE: / SBOOK-BOOKID,   SBOOK-CUSTOMID,
           SBOOK-CUSTTYPE,  SBOOK-SMOKER,
           SBOOK-LUGGWEIGHT, SBOOK-WUNIT,
           SBOOK-INVOICE.
ENDSELECT.
(利用参数ORDER BY所指定的字段排序)
抓取数据的条件叙述
BETWEEN  AND  
例如:  WHERE YEAR BETWEEN 1995 AND 2000.
LIKE
例如:  WHERE NAME LIKE ‘MIKE%’.
(‘%’是通配符号)
IN (…)
是…里面的任意一个值即可.
例如: WHERE PLANT IN (‘CHUNGLI’, ‘TAOYUAN’,’LIUTU’).
   (表示PLANT 只要是’CHUNGLI’或’TAOYUAN’或’LIUTU’都可以).

点评

很有价值;宝贵的总结;  发表于 2013/8/14 06:45
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/28 23:32 , Processed in 0.028458 second(s), 24 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表