美文网首页
005. 语法se38

005. 语法se38

作者: 我很胖吗 | 来源:发表于2021-05-13 08:47 被阅读0次

    系统变量查看

    T-CODE: se11
    结构: syst
    使用:SY-名称

    数据类型

    • 数据对象的技术特性的定义
    • 本身不占用内存空间
    • 可以是系统预定义或者用户自定义

    数据对象

    • 内存变量
    • 指定为某一特定数据类型

    常用预定义数据类型

    类型缩写 类型 默认长度 允许长度 初始值 描述
    C 文本型 1 - Space 字符串数据,如'Program'
    D 日期型 8 8 '00000000' 日期数据,格式为YYYYMMDD
    F 浮点型 8 8 0 浮点数
    I 整数 4 10 0 带正负符号的整数
    N 数值型 1 31 ‘000...0’ 数值所组成的字符串
    P 压缩型 8 16 0 将两个 十进制数字压缩到一个字节
    T 时间型 6 6 ‘000000’ 时间

    1.默认的定义数据类型是CHAR。
    2.取值的时候C型默认从左取,N型从右取,超过定义长度则截断。
    3.C类型,可以赋值数值,也可以赋值字符,还可以混合,不过取值时如果是数值类型靠右取值。
    4.日期和时间类型的变量可进行加减乘除运算。
    5.P类型.小数点要使用DECIMAL声明

    定义数据类型——TYPES

    • 在程序中用types声明局部数据类型
    • 语法格式与变量类似
    • 用Types定义的类型在程序中用于声明常量或者变量
    • Types定义的是类型,不是变量,所以不能直接赋值
    • ABAP数据类型可以是预定义数据类型,可以是数据字典里的全局数据类型,或者用户在程序中自定义的数据类型。

    运算符

    +-*/ 可以使用
    div 取整,mod 取余数

    比较运算符

    = EQ, <>或><或者NE, <LT, >GT, <=LE, >=GE,

    逻辑运算符:

    AND,OR,NOT

    运算函数

    image.png

    变量定义包含name, length, type等,语法如下:

    DATA <name> [<length>] type <type>[ value <value>] [ decimal <decimals>]
    其中: [] 里的内容表示可选项。<>表示名称
    <name>: 变量名称, 最长30个字符, 不可含有 + . , : ( ) 等字符
    <length>长度,要用圆括号括起来 如 LINE(20) TYPE C.
    <type>:数据类型
    <value>: 初始值
    <decimals>: 小数位

    DATA:C1 TYPE C,
                  INT1 TYPE I VALUE 1,
                 TEMP TYPE P DECIMAL 2.
    

    关键字TYPE和LIKE
    变量定义也可以用关键字LIKE
    DATA <name> [<length>] like<object>|<type>[ value <value>] [ decimal <decimals>]
    TYPE 与LIKE的区别:
    LIKE 用在已有值的数据类型, 如系统变量, 而TYPE则是用在 定义数据类型。

    DATA: MYDATA LIKE SY-DATUM.
    DATA:TRANSCODE LIKE SY-TCODE.
    

    常量定义使用 CONSTANTS

    CONSTANTS<常量名>[<长度> ] TYPE <数据类型> VALUE <默认值>
    常量值一旦被定义,即被长期保存在内存,其值无法改变

    CONSTANTS  PI  TYPE  P  DECIMALS  5  VALUE  '3.14159'.
    " 系统常量"
    SY-SUBRC :  系统执行某指令后,表示执行成功与否的变量,'0' 表示成功
    SY-UNAME:   当前使用者登入SAP的USERNAME;
    SY-DATUM:   当前系统日期;    
    SY-UZEIT:   当前系统时间;     
    SY-TCODE:   当前执行程序的Transaction code    
    SY-INDEX :  当前LOOP循环过的次数  
    SY-TABIX:   当前处理的是internal table 的第几笔    
    SY-MANDT:   CLIENT(客户端编号) NUMBER      
    SY-VLINE:    画竖线
    SY-ULINE:   画横线
    

    结构体定义:

    有结构的变量
    程序中用DATA定义的局部变量
    DATA: BEGIN OF <name>
    <field1>……
    <field2>……
    END OF<name>.

    DATA:BEGIN OF USERINF,
          SID(10) TYPE C,
          NAME(20) TYPE C,
          TEL(20) TYPE C,
        END OF USERINF.
    
    DATA USER2 TYPE USERINF.
    
    结构体赋值:
    1. 可对结构体直接赋值
    2. 相同结构体之间可以使用等号来实现数据的复制
    3. WRITE Structure Name可输出所有字段,或使用<Structure>-<field name>输出指定字段
    4. 相同结构体之间使用Move……To……进行赋值;
      有差异的结构体,可使用MOVE-CORRESSPONDING匹配及赋值相同的字段
    USERINF-SID='A00001'.
    USERINF-NAME='JERY'.
    USERINF-TEL='010-12345678'.
    USER2=USERINF.
    WRITE:USER2, / USERINF-SID.
    
    DATA:BEGIN OF USERDETAIL,
          SID(10) TYPE C,
          NAME(20) TYPE C,
          BIRDATE TYPE D,
          ADD(50) TYPE C,
        END OF USERDETAIL.
    MOVE-CORRESSPONDING USERINF TO USERDETAIL.
    

    结构体继承:

    参考已存在的结构体创建一个属性相同的新结构体
    可在新结构体中增加字段
    定义语句:INCLUDE STRUCTURE

    DATA:BEGIN OF EMPLOYEE,
          INCLUDE STRUCTURE USERINF,
    DATA:BIRTHDATE TYPE D,
          ADD(50) TYPE C,
        END OF EMPLOYEE.
    
    MOVE-CORRESSPONDING USERINF TO USERDETAIL.
    

    数据的赋值是程序的常用操作

    1. MOVE <F1> TO <F2>
      将F1的值存至变量 F2 中,F1与F2可以是不同类型的变量,但有一定限制。
    DATA:  m_gendle(4) TYPE c.
    MOVE 'MALE' TO m_gendle.
    WRITE: m_gendle.
    
    1. WRITE <value> TO <field>.带有格式的赋值
      这里的WRITE用于赋值,不是用于输出
    DATA: NAME(20)  VALUE  'SOURCE',
    SOURCE(10)  VALUE  'LILY',
    TARGET(10).
    WRITE  (NAME)  TO  TARGET.�WRITE  /  TARGET. 
    
    DATA: gv_char1(20) TYPE c,
    gv_char2(20) TYPE c,
     dec1(10) TYPE p DECIMALS 2 VALUE '22345.89'.
    * date *
    WRITE:/ 'date variable'.
    WRITE sy-datum TO gv_char1.
    WRITE:/ 'write to', gv_char1.
    MOVE sy-datum TO gv_char2.
    WRITE:/ 'move to', 
    gv_char2.
    SKIP 1.
    * decimal *
    WRITE:/ 'decimal variable'.
    WRITE dec1 TO gv_char1.
    WRITE:/ 'write to', gv_char1.
    MOVE dec1 TO gv_char2.
    WRITE:/'move to', gv_char2. 
    
    1. 在源字段中取偏移量赋值给目标变量:
      MOVE <f1>[+<偏移量>][(<取数位>)] TO <f2>[+<偏移量>][(<取数位>)
      WRITE <f1>[+<偏移量>][(<取数位>)] TO <f2>[+<偏移量>][(<取数位>)
      <f2>[+<偏移量>][(<取数位>) = <F1>+ [+<偏移量>][(<取数位>)]
    DATA: F1(10)  VALUE  'ABCDEFGHIJ',
          F2(5).
    F2 = F1+3(5).
    WRITE: F1, / F2.
    
    1. 用于结构体的赋值,将Strings1中的field组件的数据复制至String2中, 仅复制相同名称的字段:
    MOVE –CORRESPONDING  <Strings1>  TO  <String2>.
    
    1. 指针对象,通过语句FIELD-SYMBOLS加上将括号“<>”来定义。
      FIELD-SYMBOLS <fs>.
      ASSIGN <value> TO <field>.
      可以不指定参考类型,用语句ASSIGN来分配给它变量.
      <FS>并不是变量,存放的是变量的地址,而非变量本身。
      如果修改了field symbol的值,则相应的变量的值也随之更改。
    DATA NUM TYPE I VALUE 12.
    FIELD-SYMBOLS: <F1>,
                  <F2> TYPE I,
                  <F3> LIKE NUM.
    ASSIGN: NUM TO <F1>,
            NUM TO <F2>,
            NUM TO <F3>.
    WRITE: / NUM, <F1>,<F2>,<F3>.
    <F2> = 25.
    WRITE: / NUM, <F1>,<F2>,<F3>.
    

    类型转换

    1. 在不同类型的数据对象之间赋值,会自动进行类型的转换;
    2. 转换过程遵照固定的规则,如C类型数据赋值给N类型,只有数字字符被传递,其他忽略;
    3. C不能直接赋值给I,需要C>N>I;
    4. 可以使用MOVE TO或WRITE TO语句。
    DATA:TEXT(10) TYPE C VALUE 'ABC1234567',
                NUM(10) TYPE N,
                INT TYPE I.
    NUM = TEXT.
    INT = NUM.
    WRITE: NUM, INT.
    
    DATA: CHR TYPE C.
    FIELD-SYMBOLS:<FS> TYPE X,
                 <FC> TYPE C.
    CHR = 'A'.
    ASSIGN CHR TO <FS> CASTING.
    WRITE: CHR, <FS>.
    <FS> = <FS>+1.
    ASSIGN <FS> TO <FC> CASTING.
    MOVE <FC> TO CHR.
    WRITE:/ CHR, <FS>, <FC>. 
    

    日期处理

    DATA: ULTIMO TYPE D.
    ULTIMO = SY-DATUM. “如果传回20050928
    ULTIMO+6(2) = ‘01’. “ 则为20050901
    ULTIMO = ULTIMO - 1. “ 为20050831
    

    相关文章

      网友评论

          本文标题:005. 语法se38

          本文链接:https://www.haomeiwen.com/subject/kxmurltx.html