zoukankan      html  css  js  c++  java
  • ABAP基础语法

    1.数据类型及属性

    类型

    说明

    C

     

    N

    0到9之间字符组成的数字字符串

    D

    日期格式必须为 YYYYMMDD

    T

    格式为 24-hour的 HHMMSS

    I

    -2.147.483.648 to +2.147.483.647

    F

    小数位最大可以到17位,即可精确到小数点后17位

    P

    两个数字位压缩后才占一个字节,由于0-9的数字只需要4Bit位,所以一个字节实质上允许存储二位数字,这就是P数据类型为压缩数据类型的由来。并借用半个字节来存储小数点位置、正号、负号相关信息

    X

    十六进制字符 0-9, A-F具体的范围为:00~FF

    类型X是十六进制类型,可表示内存字节实际内容,使用两个十六制字符表示一个字节中所存储的内容。但直接打印输出时,输出的还是赋值时字面意义上的值,而不是Unicode解码后的字符

    如果未在 DATA 语句中指定参数<length>,则创建长度为 1

    注:如果值是字母,则一定要大写

    语法示例:

    DATA: number(16) TYPE p DECIMALS 14 VALUE '12345678901234567.89012345678901'.

    "16 * 2 = 32表示了整个字面意义上允许的最大字面个数,而14表示的是字面上小数点后面允许的最大小数位,而不是指14个字节,只有这里定义时的16才表示16个字节

     

    predefined ABAP types

    Type

    Length

    Standard length

    Description

    b

    1 Byte

     

    1 byte integer (internal)

    c

    1 to 65,535 characters

    1 character

    Text field

    cursor

    as i

    as i

    Database cursor

    d

    8 characters

     

    Date field

    f

    8 bytes

     

    Floating point number

    i

    4 bytes

     

    4 byte integer

    n

    1 to 65,535 characters

    1 character

    Numeric text

    p

    1 to 16 bytes

    8 bytes

    Packed number

    string

    variable

     

    Text string

    s

    2 bytes

     

    2 byte integer (internal)

    t

    6 characters

     

    Time field

    x

    1 to 65,535 bytes

    1 byte

    Byte field(hexadecimal)

    xstring

    variable

     

    Byte string

     

    数据字典预置类型与ABAP类型对应关系。

    数据字典预置类型

    ABAP类型

    运行长度

    说明

    ACCP

    N(6)

    6

    会计计算周期

    CHAR

    C(n)

    1-255

    字符

    CLNT

    C(3)

    3

    集团,数据区域代码

    CUKY

    C(5)

    5

    货币代码

    CURR(n,m)

    P((n+1)/2)DECIMALm

    42736

    货币金额

    DATS

    D(8)

    8

    日期

    DEC n,m

    P((n+1)/2)DECIMALm

    n(1-31)m(1-17)

    数值计算

    FLTP

    F(8)

    18

    浮点数

    INT1

    X(1)(类型b)

    3

    单字节整形数

    INT2

    X(2)(类型s)

    5

    双字节整形数

    INT4

    X(4)(类型i)

    10

    四字节整形数

    LANG

    C(1)

    内部1位外部2位

    语言代码

    LCHR

    C(n)

    256-最大值

    长字符

    LRAW

    X(n)

    256-最大值

    长位字串

    NUMC n

    N(n)

    1-255

    数值文字

    PREC

    X(2)

    16

    精确度

    QUAN n,m

    P((n+1)/2)DECIMALm

    42736

    数量

    RAW n

    X(n)

    1-255

    位字串

    TIMS

    T(6)

    6

    时间

    VARC n

    C(n)

    255-最大值

    长字符(仅3.0前可用)

    STRING

    STRING

    1-最大值

    字符串

    RAWSTRING

    XSTRING

    1-最大值

    位字符串

    UNIT

    C(n)

    2~3

    单位

    SAP系统变量

    SY-SUBRC: 系统执行某指令后,表示执行成功与否的变量,’0’ 表示成功

    SY-DBCNT: 在open SQL语句中,表示执行影响到的数据条数 
    SY-DBLNT: 被处理过的记录的笔数 
    SY-UNAME: 当前使用者登入SAP的USERNAME;
    SY-DATUM: 当前系统日期;
    SY-UZEIT: 当前系统时间;
    SY-TCODE: 当前执行程序的Transaction code
    SY-INDEX :
    SY-TABIX:
    SY-TMAXL: Internal table的总笔数
    SY-SROWS: 屏幕总行数;
    SY-SCOLS: 屏幕总列数;
    SY-MANDT: 當前系統編號(CLIENT NUMBER)
    SY-VLINE: 画竖线
    SY-ULINE: 画横线
    SY-PAGNO: 当前页号
    SY-LINSZ: 当前报表宽度
    SY-LINCT: 当前报表长度
    SPACE: 空字符串
    SY-LSIND: 列表索引页
    SY-LISTI: 上一个列表的索引
    SY-LILLI: 绝对列表中选定行的行号
    SY-CUROW: 屏幕上的行
    SY-CUCOL: 光标列
    SY-CPAGE: 列表的当前显示页
    SY-STARO:真实行号
    SY-LISEL: 选择行的内容,长度为255
    SY-LINNO: 当前行

    q  系统内部有一个专门存放系统变量的结构SYST,其中最常用的系统变量有:
    SY-SUBRC: 系统执行某指令后,表示执行成功与否的变量,’0’ 表示成功
    SY-UNAME: 当前使用者登入SAP的USERNAME;
    SY-DATUM: 当前系统日期;    

    SY-DATAR:如果屏幕上至少有一个输入字段的值被用户或其他数据传输所更改, 值为X。但如果没有修改,回车后的值是空。
    SY-UZEIT: 当前系统时间;
    SY-TCODE: 当前执行程序的Transaction code
    SY-REPID: ABAP 程式名,目前的主程式
    SY-DYNNR: 画面号

    SY-CPROG: ABAP 程式名
    SY-SYSID: R/3 系統,R/3 系統名稱
    SY-UCOMM: PAI 驱动的功能代码,一般用来参照定义变量
    SY-INDEX(DO) : 当前LOOP循环过的次数
    SY-TABIX(LOOP READ): 当前处理的是internal table 的第几笔

    sy-langu:记录登陆系统的语言。

     

     

    2.数据与变量声明

    l  变量以字母作为首字符,长度不超过30字节(SPACE是预定义字段constant with C)。

    l  如果没有指定类型,默认使用类型C。

    l  LIKE参数,既可以参照内部字段,也可以参照数据库中的字段。只要在程序的一个地方中数据属性发生改变,其他使用LIKE参数定义的数据也发生改变。

    l  透明表(还有其它数据词典中的类型,如结构)即可看作是一种类型,也可看作是对象,所以即可使用TYPE,也可以使用LIKE

    TYPES:定义数据类型

    -       数据类型是纯粹的说明。

    -       没有与数据类型相关联的内存。

    -       数据类型描述数据对象的技术属性。

    -       数据类型是数据对象的属性并与数据对象联系紧密。

    DATA:声明数据对象(变量、常量)

    -       数据对象是程序在运行时使用的物理单元。

    -       每个数据对象都有分配给它的特定数据类型。

    -       每个数据对象占据一些内存空间。

    -       ABAP/4 根据数据对象的数据类型处理数据对象。

    l  TABLES: spfli.

    DATA spfli TYPE spfli.

    以上两个语句等价。即在定义内存变量时,可以将透明表当做结构体来使用

    l  CONSTANTS 利用<value>参数指定的初始值,在程序的执行期间不能更改。

    DATA 语句

    用于创建变量

    CONSTANTS 语句

    用于创建常量(必须赋值),数字常量有数据类型P与I,文本常量有C与N。

    STATICS语句

    用于创建变量,这些变量在程序运行期间一直存在,但仅在过程中可见

    TABLES语句

    用于创建表工作区

    TYPES 语句

    用于创建用户定义的数据类型

    语法示例:

    DATA : BEGIN OF address2,
      street(20) TYPE c,
      city(20) TYPE c,
      END OF address2.
    DATA obj4 TYPE STANDARD TABLE OF address2."这里使用的实质上是词典中的类型address2
    DATA obj5 LIKE STANDARD TABLE OF address2."这里使用是的上面定义的变量address2

    3.数据赋值

    l  Value参数赋予字段相应的初始值。

    WRITE {source|(source_name)} TO destination.

    The data objects source_name and destination must be character type and flat.

    语法示例:

    DATA: date_short TYPE c LENGTH 8,
          date_long  TYPE c LENGTH 10,
          date_mask  TYPE c LENGTH 8.
    WRITE sy-datum TO: date_short,
                       date_long,
                       date_mask DD/MM/YY.

    WRITE ICON_OKAY AS ICON TO PUBU2. "给PUBU2按钮添加图标,并且在给按钮赋值之前,否则将会把文字替换。

    MOVE source {TO|?TO} destination.

    destination1 = destination2 = ... = destination = source.

    MOVE-CORRESPONDING struc1 TO struc2.

    UNPACK source TO destination.

    For source, the data type p of length 16 without decimal places is expected. The data type of destination must be character-type and flat.

    READ LINE line_num FIELD VALUE num.

    4.数据清除.

    CLEAR dobj [ {WITH val [IN {BYTE|CHARACTER} MODE] } 所有的space被var替代
               | {WITH NULL} ].
    如果使用有表头行的内表,CLEAR 仅清除表格工作区域,CLEAR dobj[] 都清除

    REFRESH itab.清除内表所有行

    FREE  dobj.”内存释放

    5.字符串处理

    CONCATENATE

    {dobj1 dobj2 ...}|{LINES OF itab}
    INTO result
    [IN {BYTE|CHARACTER} MODE]
    [SEPARATED BY sep] ”用sep分割

    SPLIT dobj AT sep INTO
          { {result1 result2 ...} | {TABLE result_tab} }
          [IN {BYTE|CHARACTER} MODE].


    [RESPECTING BLANKS].“对于c, d, n, t类型的字符串有一个RESPECTING BLANKS选项可使用,表示尾部空格也会保留。

    FIND [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF]  pattern
    IN [section_of] dobj     
    pattern:{[SUBSTRING] sub_string} | {REGEX regex}” sub_string in pattern is an empty string or is of type c, d, n, or t and only contains empty characters,  regex in pattern contains a regular expression that is the same as the empty character string,
    [IN {BYTE|CHARACTER} MODE]
    [{RESPECTING|IGNORING} CASE]
    [MATCH COUNT  mcnt]
    “成功匹配次数
    { {[MATCH OFFSET moff] [MATCH LENGTH mlen]} ”
    最后一次整体匹配到的串(整体串,最外层分组,而不是指正则式最内最后一个分组)起始位置与长度
    |[RESULTS result_tab|result_wa]}
    result_tab接收所有匹配结果,result_wa只能接收最后一次匹配结果
    [SUBMATCHES s1 s2 ...].
    通常与前面的MATCH OFFSET/ LENGTH一起使用。只会接收使用括号进行分组的子组。如果变量s1 s2 ...比分组的数量多,则多余的变量被initial;如果变量s1 s2 ...比分组的数量少,则多余的分组将被忽略;且只存储第一次或最后一次匹配到的结果

    REPLACE [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] pattern
    IN [section_of] dobj WITH new
    [IN {BYTE|CHARACTER} MODE]
    [{RESPECTING|IGNORING} CASE]
    [REPLACEMENT COUNT rcnt]
    { {[REPLACEMENT OFFSET roff] [REPLACEMENT LENGTH rlen]}
    | [RESULTS result_tab|result_wa] }.

    l   SHIFT dobj {BY num PLACES} | {UP TO sub_string} “sub_string开始

    [LEFT|RIGHT][CIRCULAR]  ” CIRCULAR:将移出的字符串放在左边或者左边

    { {LEFT DELETING LEADING}|{RIGHT DELETING TRAILING} } pattern

    执行结果返回给系统变量SY-SUBRC,若执行成功时,返回值为"0",倘若子串与原字符串不匹配,返回值为"4"。

    l   CONDENSE text [NO-GAPS]. 如果是C类型只去掉前面的空格(因为是定长,即使后面空格去掉了,左对齐时后面会补上空格),如果是String类型,则后面空格也会被去掉;字符串中间的多个连续的空格使用一个空格替换(String类型也是这样);NO-GAPS:字符串中间的所有空格都也都会去除(String类型也是这样);空格去掉后会左对

    l   CONVERT TEXT text INTO SORTABLE CODE hex. 数据对象文本(X)的内容被转换为可排序的字节序列,结果被分配给变量hex;数据对象文本保持不变,若hexxstring类型,则其长度将自动调整。

    l   TRANSLATE text {TO {UPPER|LOWER} CASE}
                 | {USING pattern}.

    l   SEARCH <c> FOR <str>.

    语法示例:

    DATA text TYPE string.
    text = `Barbcbdbarb`.
    TRANSLATE text USING 'rVcX'. ”BaVbXbdbaVb
    TRANSLATE text TO UPPER CASE. ”BABVXBDBAVB
    WRITE:/ text.

    6.PARAMETERS语句

    PARAMETERS {para[(len)]}|{para [LENGTH len]}
               [
    type_options]
               [
    screen_options]
               [
    value_options]
               [
    ldb_options].

    l  type_options:

    { TYPE type [DECIMALS dec] } | { LIKE dobj } |{ LIKE (name)}.

     TYPE type:参照某一类型对象定义PARAMETERS。
     ...DECIMALS dec:定义小数位,对输入参数自动格式化,该语法只对P类型有效(参数某一类型定义关键字TYPE)。
     ...LIKE dobj:參照某一字典对象定义PARAMETERS。

    l  screen_options:

    { {[OBLIGATORY|NO-DISPLAY] [VISIBLE LENGTH vlen]}
        | {AS CHECKBOX [USER-COMMAND fcode]}
        | {RADIOBUTTON GROUP group [USER-COMMAND fcode]}
        | {AS LISTBOX VISIBLE LENGTH vlen [USER-COMMAND fcode]
                                          [OBLIGATORY]} }
        [MODIF ID modid].

     ...MEMORY ID pi:将PARAMETERS存储在SAP内存,参数名长度不能超过三位 ...NO-DISPLAY:将PARAMETERS设置为隐藏,不会的屏幕上输出。
     ...OBLIGATORY:限制该PARAMETERS为必填,否则会提示输入。...AS CHECKBOX:创建CHECKBOX对象。

    ...RADIO BUTTON GROUP radi:创建(RADIO)单选框。...VISIBLE LENGTH vlen:定义显示长度。
     ...USER-COMMAND ucom:为创建对象分配对象名,该值保存在内表中可供其它对象操作。 ...AS LISTBOX VISIBLE LENGTH vlen:创建一个下拉框,并指定长度.

    l   value_options

    ... [DEFAULT val]
        [LOWER CASE]
        [MATCHCODE OBJECT search_help]
        [MEMORY ID pid]
        [VALUE CHECK] ... .若要使值表检查生效,则首先需要将此 Domain 引用到表字段,再对此表字段通过 按钮进行外键分配,并且外键一定是来自的值表的主键,最后使用 PARAMETERS 定义屏幕参数时要参照此表字段,

    AS CHECKBOX, RADIOBUTTON, or NO-DISPLAY 不能同时使用...DEFAULT f:定义默认值。 ...LOWER CASE:输入值中不允许输入小写字符,否则会自动转换为大写。

    l   ldb_options

    ... FOR {TABLE|NODE} node
        [HELP-REQUEST]
        [VALUE-REQUEST]
        [AS SEARCH PATTERN] ... .

    ... ON <field>:该语法用于控制屏幕元素输入时的遇错处理,检查具体输入字段(SELECTION-OPTIONS或PARAMETERS)是否完整或正确,若输入有错或不满足条件,其它屏幕元素会变成灰色,不接受输入直到该字段输入正确为止。
          ...ON VALUE-REQUEST FOR <field low/high>:SELECT-OPTIONS按选择帮助<F4>键时触发该事件。
          ...ON HELP-REQUEST FOR <field low/high>:SELECTION-OPTIONS按选择帮助<F1>键时键发该事件。

    LISTBOX下拉列表

       FUNCTION ”F4IF_INT_TABLE_VALUE_REQUEST”

       FUNCTION ”VRM_SET_VALUES”.

    语法示例:

    PARAMETERS:          P1 RADIOBUTTON GROUP GRP1 DEFAULT 'X',
                                 P2 RADIOBUTTON GROUP GRP1.

    7.字段符号

    FIELD-SYMBOLS <fs> { typing | STRUCTURE struc DEFAULT dobj }.

    l   FIELD-SYMBOLS:<fs>.

    l   FIELD-SYMBOLS <fs> TYPE itab."将<fs>定义成了具体限定类型

    8.字段的动态分配

    ASSIGN ... TO <fs>:将某个内存区域分配给字段符号,这样字段符号就代表了该内存区域

    l   ASSIGN name TO <fs>."结果是<fs>与name变量等同"静态分配:编译时就知道要分配的对象

    l   ASSIGN (name) TO <fs>."结果是是<fs>的值为str变量值 "通过变量名动态访问变量

    l   UNASSIGN:该语句是初始化<FS>字段符号,执行后字段符号将不再引用内存区域

    l    CLEAR:与UNASSIGN不同的是,只有一个作用就是初始化它所指向的内存区域,而不是解除分

    语法示例:

    DATA: BEGIN OF line,
      col1 TYPE i VALUE '11',
      col2 TYPE i VALUE '22',
      col3 TYPE i VALUE '33',
    END OF line.
    DATA comp(5) VALUE 'COL3'.
    FIELD-SYMBOLS: <f1>, <f2>, <f3>.
    ASSIGN line TO <f1>.
    ASSIGN comp TO <f2>.

    "还可以直接使用以下的语法访问其他程序中的变量
    ASSIGN ('(ZJDEMO)SBOOK-FLDATE') TO <fs>.

    "通过索引动态的访问结构成员
    ASSIGN COMPONENT sy-index OF STRUCTURE <f1> TO <f3>.

    "通过字段名动态的访问结构成员
    ASSIGN COMPONENT <f2>OF STRUCTURE <f1> TO <f3>.

    9.预置函数

    ... func( arg ) ...

    l   数值运算及算术运算函数

    ADD 10 to int.

    SUBSTRACT 10 from int.

    MULTIPLY int by 10.

    DIVIDE int by 10.

    语法示例:

    DATA: i1 TYPE I,i2 TYPE I,i3 TYPE I,
          f1 TYPE p DECIMALS 1, f2 TYPE p VALUE '2.3' DECIMALS 1,f3 TYPE p DECIMALS 1,
    word1 TYPE string VALUE 'ABCD',word2 TYPE string VALUE 'EFG',xstr TYPE XSTRING.
     f1 = ( i1 + EXP( f2 ) ) * i2 / SIN( 3 - i3 ).
        COMPUTE f3 = SQRT( SQRT( ( i1 + 12 ) * i3 ) + f2 ).”注意符号间间距
         i1 = STRLEN( word1 ) + STRLEN( word2 ).
    WRITE:/ i1,i2,i3,f1,f2,f3.

    10. DESCRIBE

    DESCRIBE TABLE itab[KIND knd][LINES lin][OCCURS n].

    KIND knd :T 时代表标准表,为S时代表排序表,为H时代表哈希表

     LINES lin  内表表行数量

     OCCURS n在内表用选项initial size 或者老式的选项ocurs创建期间决定内表所需要的初始化内存大小

    DESCRIBE DISTANCE

    DESCRIBE DISTANCE BETWEEN dobj1 AND dobj2 INTO dst
                              IN {BYTE|CHARACTER} MODE.

    dobj1 and dobj2两个变量地址起始位置的距离

  • 相关阅读:
    sql server实现主从复制
    sql server 常用语法
    超像素、语义分割、实例分割、全景分割 傻傻分不清?
    什么是多模态机器学习?
    SLAM领域牛人、牛实验室、牛研究成果梳理
    从零开始一起学习SLAM | 给点云加个滤网
    原来CNN是这样提取图像特征的。。。
    从零开始一起学习SLAM | 你好,点云
    2019年度【计算机视觉&机器学习&人工智能】国际重要会议汇总
    从零开始一起学习SLAM | 神奇的单应矩阵
  • 原文地址:https://www.cnblogs.com/xj159/p/11947371.html
Copyright © 2011-2022 走看看