abap基本语法汇总(汇编)
ABAP基本语法
*简单内表操作
• • • • • • • • • • DATA: BEGIN OF line, "work area num TYPE i, sqr TYPE i, END OF line, "internal itab LIKE STANDARD TABLE OF line WITH KEY table_line. DO 5 TIMES . line-num = sy-index. line-sqr = sy-index ** 2. APPEND line TO itab.
语法概述
• • • • • • • ABAP基本语法特点 由各自独立的语句构成。 每个语句的第一个单词必须是ABAP关键字。 单词之间至少要用一个空格分隔。 每个语句结束必须要用句号。 支持分块缩进,便于阅读。 一个语句可以跨多个行,只要不遇到句号,就 认为是一个延续的语句。 • 可以把多个语句放在一行。
基本数据操作
包括:赋值,计算,输出 • 数据赋值用 move 和 = 两个等价 • clear数据还原 • describe语句得到这些属性长度 • data: source type i value 123,destination type i. • move source to destination. • write destination. 结构体的赋值 • 两个相同的结构体数据进行赋值操作 • move-corresponding source_struct to destination_struct. 算数运算+ ,—,*,/整除,取余,乘方 compute 计算 是abap中的关键字 • add y to x. • subtract y from x. • multiply x by y. • divide x by y.
ABAP语法完整版
SAP ABAP / 4 基础知识学习数据类型C :字符串D :日期型格式为YYYYMMDD 例:'1999/12/03'F : 浮点数长度为8I :整数N :数值组成的字符串如:011,'302'P : PACKED数用于小数点数值如:12.00542T : 时间格式为:HHMMSS 如:'14:03:00'X : 16进制数如:'1A03'*-------------------------------------------------------------------------------------* 变量声明DATA <F> [<Length>] <type> [<value>][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 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 codeSY-INDEX: 当前LOOP循环过的次数SY-TABIX: 当前处理的是internal table 的第几笔SY-TMAXL: Internal table的总笔数SY-SROWS: 屏幕总行数;SY-SCOLS: 屏幕总列数;SY-MANDT: CLIENT NUMBERSY-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关键字则是用在指定资料型态。
一些ABAP编程的知识点整理
一些ABAP编程的知识点整理【设置SAP打印机SET_PRINT_PARAMETERS】根据画面输入的打印机名称,在打印窗口弹出后,把打印设备自动设置为打印机名称参数对应的打印设备*&---------------------------------------------------------------------**& Form FRM_SET_PRINT_PARAMETERS*&---------------------------------------------------------------------** 報嶞偺僷儔儊乕僞偺愝掕*----------------------------------------------------------------------*FORM. FRM_SET_PRINT_PARAMETERS.DATA: LC_PDEST TYPE PRI_PARAMS-PDEST,LSTR_TSP03L TYPE TSP03L.* 在TSP03L设备表中找到打印机名称画面参数P_PRTID对应的打印设备PADEST* SELECT SINGLE ** INTO LSTR_TSP03L* FROM TSP03L* WHERE LNAME = P_PRTID.* IF SY-SUBRC EQ 0.* LC_PDEST = LSTR_TSP03L-PADEST.* ENDIF.* 把取道的打印设备PADEST设置到打印窗口项目中CALL FUNCTION 'SET_PRINT_PARAMETERS'EXPORTINGDESTINATION = LC_PDESTIMMEDIATELY = CNS_X.ENDFORM. "FRM_SET_PRINT_PARAMETERS【把内表以CSV文件格式输出】* 通过文件保存对话框得到需要保存文件的全路径LC_FULLPATH CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG* EXPORTINGCHANGINGFILENAME = LC_FILENAMEPATH = LC_PATHFULLPATH = LC_FULLPATHEXCEPTIONSCNTL_ERROR = 1ERROR_NO_GUI = 2NOT_SUPPORTED_BY_GUI = 3others = 4.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.IF LC_FILENAME IS NOT INITIAL.* 这个function是关键所在,可以把一个内表的一行的所有字段用‘;’分割,然后整合成一个string放到目标内表中LITAB_CON_LIST3CALL FUNCTION 'SAP_CONVERT_TO_CSV_FORMAT'EXPORTINGI_FIELD_SEPERATOR = CNS_COMMATABLESI_TAB_SAP_DATA = GITAB_LIST3CHANGINGI_TAB_CONVERTED_DATA = LITAB_CON_LIST3EXCEPTIONSCONVERSION_FAILED = 1OTHERS = 2.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.* 可在此目标内表的头部加上必要的headerCONCATENATE TEXT-009 "姩掕壢栚TEXT-010 "姩掕壢栚柤TEXT-011 "婡擻椞堟柤TEXT-012 "慜寧孞墇TEXT-013 "庁曽嬥妟TEXT-014 "戄曽嬥妟TEXT-015 "梻寧孞墇INTO LC_HEADERSEPARATED BY CNS_COMMA.INSERT LC_HEADER INTO LITAB_CON_LIST3 INDEX 1.* 拿到全路径之后,直接download就okCALL FUNCTION 'GUI_DOWNLOAD'EXPORTINGFILENAME = LC_FULLPATHTABLESDATA_TAB = LITAB_CON_LIST3.ENDFORM. " FRM_FILE_DOWNLOAD【如何动态指派数字字段名assign】比如有12个字段,HSL01,HSL02,HSL03,HSL04,HSL05一直到HSL12如果我在选择画面上指定要累加04~08之间的字段,那assign就可以派上用场了由于和指针的作用类同,所以下面就叫它指针1.定义指针FIELD-SYMBOLS TYPE FAGLFLEXT-HSL01.2.使用方法:定义另一个lc_p指针数据,通过do循环的sy-index 进行一条条遍历这里比较重要的是要严格控制好选择画面上low值和high值对lc_p指针的界限DO.IF S_MONAT-HIGH IS NOT INITIAL.LC_P = S_MONAT-LOW + SY-INDEX - 1.IF LC_P > S_MONAT-HIGH.EXIT.ENDIF.ELSE.LC_P = S_MONAT-LOW.IF SY-INDEX = 2.EXIT.ENDIF.ENDIF.WRITE LC_P TO LC_NUM.PERFORM. FRM_CONVERT_ALPHA_INPUT CHANGING LC_NUM.CONCATENATE LC_NAME LC_NUM INTO LC_FIELD.ASSIGN (LC_FIELD) TO .IF LSTR_DATA3-DRCRK = CNS_S.LC_SSUM = LC_SSUM + .IF LSTR_DATA3-DRCRK = CNS_H.= * ( -1 ) .LC_HSUM = LC_HSUM + .ENDIF.CLEAR LC_FIELD.ENDDO.【range table 的最新定义方法】跟旧版本的ECC的range定义方法不同,现在改用如下的定义方法:R_RACCT2 TYPE RANGE OF CHAR2,R_RACCT3 TYPE RANGE OF CHAR3,R_RACCT31 TYPE RANGE OF CHAR3,LSTR_RACCT2 LIKE LINE OF R_RACCT2,LSTR_RACCT3 LIKE LINE OF R_RACCT3,LSTR_RACCT31 LIKE LINE OF R_RACCT31.* 儗儞僕42乣49LSTR_RACCT2-SIGN = CNS_I.LSTR_RACCT2-OPTION = CNS_BT.LSTR_RACCT2-LOW = CNS_42.LSTR_RACCT2-HIGH = CNS_49.APPEND LSTR_RACCT2 TO R_RACCT2.* 儗儞僕000乣512LSTR_RACCT3-SIGN = CNS_I.LSTR_RACCT3-OPTION = CNS_BT.LSTR_RACCT3-LOW = CNS_000.LSTR_RACCT3-HIGH = CNS_512.APPEND LSTR_RACCT3 TO R_RACCT3.* 儗儞僕522乣999LSTR_RACCT31-SIGN = CNS_I.LSTR_RACCT31-OPTION = CNS_BT.LSTR_RACCT31-LOW = CNS_522.LSTR_RACCT31-HIGH = CNS_999.APPEND LSTR_RACCT31 TO R_RACCT31.【如何在标准一览画面上加上自己的系统按钮】可以在top-of-page或者start-of-selection事件中定义:SET PF-STATUS 'ZS01'.这里的'ZS01'是自己定义的,双击它进去后就别有洞天了,可以自己定义系统按钮已经各种快捷键如果要选择标准的一览出力画面,首先进入菜单:補足->テンプレート调整在弹出的窗口中选择“一览ステータス”基本的关于一览的系统按钮都有了然后自己添加需要的按钮,在GUI模块中,找一个空白的输入框中输入该按钮的parameter ID,这个ID是在程序中用到的。
SAP ABAP基本语法介绍
C :字符串类型,定义变量时指定字符个数 N :数字字符串类型,定义变量时指定数值字符个数 X :字节序列类型,定义变量时指定字节数 P :组合数值类型,定义变量时指定长度和小数点后位数
9
数据类型:本地数据类型 可以使用这些基本类型来定义更完整和更复杂的本地数据 类型,但是它们只能作为当前程序的增强,这些定义可以 用TYPES 语句来实现。
22
OPEN SQL 它数据库无关并且保证了程序与数据库引擎无关
使用Open SQL 可以在不同的数据库系统上兼容或者可以更换不同 的数据库系统
完全集成在工作台中,并且提供了对SQL 语句的语法检 查 还允许R/3 系统使用数据缓冲区
23
OPEN SQL的目标数量及返回码 所有Open SQL 命令都提供了关于数据库操作执行成功还 是失败的返回消息。这个消息传输一个返回码给系统字段 sy-subrc。返回码‘0’ 通常意味着操作成功完成。所有其他 值意味着发生了错误。 系统字段sy-dbcnt 显示了刚才的数据库操作实际执行所影 响的记录数量。
哈希表
利用主键的哈希排序对数据记录进行快速访问,哈希表需要唯一主 键,而且只能使用键访问。如果内表非常大 而且希望用主键访问, 就用哈希表
20
创建内表
创建内表时,可以决定是想先用TYPES 语句创建内表数 据类型 ,然后再根据类型创建对应的数据对象(内表), 还可以直接使用 DATA 语句创建内表数据对象 。既可以 创建带表头行的内表数据对象,又可创建不带表头行的内 表数据对象。
操作内表22需要一个与内表行结构相同的工作区来处理内表append处理单条记录相同往内表的最后追加一条记录只能用于标准表insert向内表插入一条记录read把表的指定行拷贝到结构中loop遍历内表modify使用结构的内容重写表的指定行e删除表的指定行collect把结构中的内容累加到内表具有相同键的行上只有非键字段才执行累加并且只有非键字段都是数值的时候才能执行这个语句opensql23它数据库无关并且保证了程序与数据库引擎无关使用opensql可以在不同的数据库系统上兼容或者可以更换不同的数据库系统完全集成在工作台中并且提供了对sql语句的语法检还允许r3系统使用数据缓冲区opensql的目标数量及返回码24所有opensql命令都提供了关于数据库操作执行成功还是失败的返回消息
abap基本语法汇总
一数据类型和对象在ABAP中,可以使用与标准数据声明相似的语法处理数据类型,而与数据对象无关。
在程序中必须声明要使用的全部数据对象。
声明过程中,必须给数据对象分配属性,其中最重要的属性就是数据类型。
对算术运算的非整型结果(如分数)进行四舍五入,而不是截断。
类型 P 数据允许在小数点后有数字。
有效大小可以是从 1 到 16 字节的任何值。
将两个十进制数字压缩到一个字节,而最后一个字节包含一个数字和符号。
在小数点后最多允许 14 个数字。
1.3 确定数据对象的属性如果要查明数据对象的数据类型,或者要在程序的运行期间使用其属性,可使用DESCRI BE 语句。
语法如下:DESCRI BE FIELD<f> [LENGTH <l>] [TYPE <t> [COMPON ENTS<n>]][OUTPUT-LENGTH <o>] [DECIMA LS <d>][EDIT MASK <m>].将由语句的参数指定的数据对象<f>的属性写入参数后的变量。
DESCRI1.3.1 确定字段长度要确定数据对象的长度,利用DESCRIBEFIELD语句使用 LENGTH参数,如下所示:DESCRI BE FIELD<f> LENGTH <l>.系统读取字段<f>的长度,并将值写入字段<l>。
1.3.2确定数据类型要确定字段的数据类型,利用DESCRIBEFIELD语句使用 TYPE 参数,如下所示:DESCRI BE FIELD<f> TYPE <t> [COMPON ENTS<n>].系统读取字段<f>的数据类型,然后将值写入字段<t>。
abap 语法手册
abap 语法手册ABAP语法手册ABAP(Advanced Business Application Programming)是一种用于SAP软件开发的编程语言。
这份手册将介绍ABAP语言的基本语法和常用用法,为开发人员提供一个参考指南。
1. 数据类型和变量声明:ABAP支持多种数据类型,例如整数(INT),浮点数(FLOAT),字符串(STRING)和日期(DATE)。
变量声明可以通过关键字DATA进行,例如:DATA: my_integer TYPE i.DATA: my_string TYPE string.2. 控制结构:ABAP支持常见的控制结构,如条件语句(IF...ELSE...ENDIF)和循环语句(DO...ENDDO,WHILE...ENDWHILE)。
例如:IF my_integer > 10.WRITE: 'The value is greater than 10'.ELSE.WRITE: 'The value is less than or equal to 10'.ENDIF.3. 函数和方法:ABAP允许定义函数和方法来实现特定的功能。
函数可以通过关键字FUNCTION和ENDFUNCTION来定义,而方法可以通过关键字METHOD和ENDMETHOD来定义。
例如:FUNCTION my_function.WRITE: 'Hello, world!'.ENDFUNCTION.4. 数据表和内表:ABAP中的数据表可以通过关键字DATA和TABLE来声明,内表可以通过关键字INTERNAL TABLE和TYPES来声明。
例如:DATA: my_table TYPE TABLE OF my_structure.DATA: my_internal_table TYPE TABLE OF my_structure.5. 数据访问:ABAP提供了方便的数据访问方法,例如通过SELECT语句从数据库中检索数据,或者通过READ TABLE语句从内表中检索数据。
ABAP基本语法
ABAP基本语法目录1.表声明12.定义变量13.常用算术操作符:14.常用比较操作:15.赋值语句26.IF语句27.CASE语句28.DO语句29.WHILE语句210.从数据库中取数据集211.取出单行记录212.WRITE语句213.ULINE语句314.SKIP语句315.定义常量316.定义结构317.TYPES语句418.LIKE语句419.输入参数520.分块语句521.定义内表522.往内表中添加记录623.用LOOP读取内表数据624.用READ读取内表数据625.把数据库的记录读入内表626.CLEAR清空表头和表记录627.DELETE删除内表记录628.REFRESH删除内表记录629.FREE删除内表记录730.在内表中插入记录731.修改内表记录732.对内表进行排序733.内表的控制语句734.循环跳转语句735.常用系统变量836.子程序的定义837.子程序的调用838.子程序的参数传递839.常用事件840.跳出事件的方法9ABAP/4:Advanced Business Application Programming1.表声明Tables: 表名[,表名]. 声明多个表时可用逗号分隔当你声明了一个数据表的同时,系统也同时自动生成了一个和数据表同名的结构,结构的变量集等于数据表里面的字段。
2.定义变量Data: v1[(l)] [type t] [decimals d] [value 'xxx'].v1 是变量名。
(l) 是变量的长度。
t 是数据类型。
d 是小数位。
'xxx'是缺省值。
如:data num(10) type p decimals 3 value '1.12'.3.常用算术操作符:5.赋值语句total = 10.mess = 'this is a test!'.如果字符串中包括 ' 号,用 '' 进行付值,如:mess = 'this is a ''test''! '.6.IF语句if i = 2.write 'i 等于 2'.[else.write 'i 不等于 2'.]endif.7.CASE语句case i. 类似于VFP中的DO CASE语句when 1. write 'i = 1'.when 2. write 'i = 2'.[when others. write 'i <> 1 and i <> 2'.]endcase.8.DO语句do [n] times. 类似于VFP中的FOR语句[执行代码]enddo.9.WHILE语句while [条件]. 类似于VFP中的DO WHILE语句[执行语句]endwhile.10.从数据库中取数据集select * from 数据表 [where 条件].[操作语句]endselect.如:select * from t000 [where mandt < 200].write: / t000-mandt,t000-mtext.endselect.11.取出单行记录select single * from 数据表 [where 条件]. 注:仅取出符合条件的第一行记录select single 字段 from 数据表 into 变量 [where 条件].12.WRITE语句write: [/][定位][数据1][,[定位] [数据2]]……[/] 为插入一行空行,注意单独write一个[/]和在其它数据之前加 [/] 的效果是不一样的,单独的write[/]在插入空行后光标定位在空行的下面,在其它数据前加[/]在插入空行后光标定位于所插的空行。
abap基本语法汇总
一数据类型与对象在ABAP中,可以使用与标准数据声明相似得语法处理数据类型,而与数据对象无关。
在程序中必须声明要使用得全部数据对象。
声明过程中,必须给数据对象分配属性,其中最重要得属性就就是数据类型。
1、1 基本数据类型对算术运算得非整型结果(如分数)进行四舍五入,而不就是截断。
类型 P 数据允许在小数点后有数字。
有效大小可以就是从 1 到 16 字节得任何值。
将两个十进制数字压缩到一个字节,而最后一个字节包含一个数字与符号。
在小数点后最多允许 14 个数字。
1、2 系统定义得数据对象1、3 确定数据对象得属性如果要查明数据对象得数据类型,或者要在程序得运行期间使用其属性,可使用DESCRIBE 语句。
语法如下:DESCRIBE FIELD <f> [LENGTH <l>] [TYPE <t> [COMPONENTS <n>]][OUTPUT-LENGTH <o>] [DECIMALS <d>][EDIT MASK <m>]、将由语句得参数指定得数据对象<f>得属性写入参数后得变量。
DESCRIBE FIELDS 语句具有下列参数:1、3、1 确定字段长度要确定数据对象得长度,利用DESCRIBE FIELD 语句使用 LENGTH 参数,如下所示:DESCRIBE FIELD <f> LENGTH <l>、系统读取字段<f>得长度,并将值写入字段<l>。
1、3、2确定数据类型要确定字段得数据类型,利用DESCRIBE FIELD 语句使用 TYPE 参数,如下所示:DESCRIBE FIELD <f> TYPE <t> [COMPONENTS <n>]、系统读取字段<f>得数据类型,然后将值写入字段<t>。
ABAP语句整理
ABAP语句整理ADD:ADD v1 FROM v2 TO v3 GIVING v4ADD v1 THEN v2 UNTIL v3 GIVING mADD v1 THEN v2 UNTIL v3 TO mADD v1 THEN v2 UNTIL v3ADD v1 TO v2ADD-CORRESPONDING rec1 TO rec2APPEND:APPEND tablaAPPEND area1 TO tabla2APPEND INITIAL LINE TO tabla1APPEND tabla SORTED BY v3APPEND area1 TO tabla2 SORTED BY v3APPEND LINES OF tabla1 TO tabla 2APPEND LINES OF tabla1 FROM ix1 TO tabla2APPEND LINES OF tabla1 FROM ix1 TO ix2 TO tabla2ASSIGN:ASSIGN v1 TO DECIMALS dec TYPE tipoASSIGN f+off(len) TO DECIMALS dec TYPE tipoASSIGN (f) TO TYPE tipo DECIMALS decASSIGN +off(len) TO DECIMALS dec TYPE tipoASSIGN TABLE FIELD v1 TOASSIGN TABLE FIELD (f) TOASSIGN COMPONENT n OF STRUCTURE rec TO DECIMALS dec TYPE tipo ASSIGN COMPONENT name OF STRUCTURE rec TO DECIMALS dec TYPE tipo ASSIGN LOCAL COPY OF v1 TO ASSIGN LOCAL COPY OF MAIN TABLE FIELD (f) TOASSIGN LOCAL COPY OF INITAL LINE tabla TO*--------------------------------------------------------------------------AT:AT END OF v1AT NEW v1AT FIRSTAT LASTAT fg WITH fg1AT LINE-SELECTIONAT USER-COMMANDAT PFxAT SELECTION-SCREENON ps1ON END OF s1ON VALUE-REQUEST FOR ps1ON HELP-REQUEST FOR ps1ON RADIOBUTTON GROUP radi1ON BLOCK blk1OUTPUT*-------------------------------------------------------------------------- AUTHORITY-CHECK:AUTHORITY-CHECK OBJECT object ID name1 FIELD f1*-------------------------------------------------------------------------- BACK:BACK*-------------------------------------------------------------------------- BREAK-POINT:BREAK-POINT lit1*-------------------------------------------------------------------------- CALL:CALL FUNCTION {AutoInsertFunctionCall}CALL FUNCTION fnc1EXPORTING p1 = v1IMPORTING p1 = v1TABLES p1 = tabla1CHANGING p1 = v1EXCEPTIONS exc1 = retc1CALL FUNCTION fnc1 STARTING NEW TASK tskname2 DESTINATION dest1DESTINATION IN GROUP grp1DESTINATION IN GROUP DEFAULT PERFORMING form1 ON END OF TASK EXPORTING p1 = v1TABLES p1 = tabla1EXCEPTIONS exc1 = retc2 MESSAGE msg2CALL FUNCTION fnc1 IN UPDATE TASK EXPORTING p1 = v1TABLES p1 = tabla1CALL FUNCTION fnc1 DESTINATION dest1 EXPORTING p1 = v1IMPORTING p1 = v1TABLES p1 = tabla1CHANGING p1 = v1EXCEPTIONS exc1 = retc2EXCEPTIONS exc1 = retc2 MESSAGE messCALL FUNCTION fnc1 IN BACKGROUND TASKAS SEPARATE UNITDESTINATION desti1EXPORTING p1 = v1TABLES p1 = tabla1CALL CUSTOMER-FUNCTION fnc1 EXPORTING p1 = v2 IMPORTING p1 = v2TABLES p1 = tabla1 CHANGING p1 = v2 EXCEPTIONS exc2 = retc1CALL SCREEN scr1STARTING AT x1 y1ENDING AT x2 y2CALL TRANSACTION tran1AND SKIP FIRST SCREEN USING tabla1MODE m1UPDATE upd1MESSAGES INTO msg1CALL DIALOG dlog1USING tablaMODE mode1AND SKIP FIRST SCREEN EXPORTING v1 FROM v2 IMPORTING v1 TO v2CALL METHOD met1 ( EXPORTING p1 = v1 IMPORTING p1 = v1 CHANGING p1 = v1 )CALL METHOD met1 EXPORTING p1 = v1 IMPORTING p1 = v1 CHANGING p1 = v1 RECEIVING p1 = v1EXCEPTIONS ex = idxCALL cfunc1ID id1 FIELD v1 ... ID id1 FIELD v2*-------------------------------------------------------------------------- CASE:CASE v1WHEN bed1stm1WHEN bed2stm2WHEN bedxWHEN OTHERSstm3ENDCASE*-------------------------------------------------------------------------- CHECK:CHECK SELECT-OPTIONSCHECK logexp1CHECK s1*-------------------------------------------------------------------------- CLEAR:CLEAR v1WITH lit1WITH NULLCLOSE:CLOSE CURSOR curs1CLOSE DATASET dsn1COLLECT:COLLECT tabla1COLLECT wrk1 INTO tabla2*-------------------------------------------------------------------------- COMMIT:COMMIT WORKAND WAIT*-------------------------------------------------------------------------- COMMUNICATION:COMMUNICATION INIT DESTINATION desti1 ID ident1 COMMUNICATION ALLOCATE ID iden1COMMUNICATION ACCEPT ID ident1COMMUNICATION SEND ID ident 1 BUFFER b1COMMUNICATION RECEIVE ID ident1BUFFER b1DATAINFO datn1STATUSINFO stat1COMMUNICATION DEALLOCATE ID ident1*-------------------------------------------------------------------------- CONCATENATE:CONCATENATE v1 v2 ... vx INTO f2SEPARATED BY f3*-------------------------------------------------------------------------- COMPUTE:COMPUTE v1 = arithexp*-------------------------------------------------------------------------- CONDENSE:CONDENSE r1NO-GAPSCONDENSE v1*-------------------------------------------------------------------------- CONSTANTS:CONSTANTS con1 ... VALUE valu1CONSTANTS con1 ... VALUE IS INITIALCONSTANTS con1(len2) ... VALUE valu1CONSTANTS con1(len2) ... VALUE IS INITIALCONSTANTS: BEGIN OF conr1,CONSTANTS: END OF conr1*--------------------------------------------------------------------------CONTINUE:CONTINUECONTROLS:CONTROLS contrl TYPE TABLEVIEW USING SCREEN*-------------------------------------------------------------------------- CONVERT:CONVERT DATE v1 INTO INVERTED-DATE v2CONVERT INVERTED-DATE v1 INTO DATE v2CONVERT TEXT text1 INTO SORTABLE CODE cod2*-------------------------------------------------------------------------- CREATE:CREATE OBJECT obj1 class2LANGUAGE lang1*--------------------------------------------------------------------------DATA:DATA: BEGIN OF tabla1INCLUDE STRUCTURE struc1DATA: END OF tabla1DATA: BEGIN OF COMMON PART cp1DATA: END OF COMMON PARTDATA: BEGIN OF tabla1 OCCURS n2VALID BETWEEN v1 AND v2DATA: END OF tabla1DATA: BEGIN OF rec1DATA: END OF rec1DATA: v1TYPE typ1LIKE v1TYPE typ1 OCCURS n2LIKE v1 OCCURS n2TYPE LINE OF ityp1LIKE LINE OF tabla1VALUE lit1DECIMALS n1WITH HEADER LINEDATA: v1(len1)TYPE tipoTYPE typ1 OCCURS n2TYPE LINE OF ityp1VALUE lit1DECIMALS n1WITH HEADER LINE*-------------------------------------------------------------------------- DEFINE:DEFINE name1stm1stm2END-OF-DEFINITION*-------------------------------------------------------------------------- DELETE:DELETE tabla1DELETE tabla1 INDEX ix2DELETE tabla1 FROM ix2 TO ix3DELETE tabla1 WHERE cond2FROM ix1TO ix2DELETE ADJACENT DUPLICATES FROM tabla1COMPARING v1 v2 ...COMPARING ALL FIELDSDELETE etab1DELETE *etab1DELETE FROM etab1 WHERE cond2CLIENT SPECIFIEDDELETE FROM (name_etab1) WHERE cond2CLIENT SPECIFIEDDELETE (name_etab1)FROM area1CLIENT SPECIFIEDDELETE etab FROM TABLE tabla2DELETE (name_etab1) FROM TABLE tablaCLIENT SPECIFIEDDELETE etab1 VERSION ver2DELETE *etab1 VERSION ver2DELETE DATASET name1DELETE FROM DATABASE etab1(ar) ID key2CLIENT v1DELETE REPORT name1DELETE TEXTPOOL name1 LANGUAGE lan2DELETE DYNPRO v1DELETE FROM SHARED BUFFER etab1(ar) ... ID*-------------------------------------------------------------------------- DESCRIBE:DESCRIBE DISTANCE BETWEEN v1 AND v2 INTO v2DESCRIBE FIELD v1DECIMALS n1EDIT MASK msk1LENGTH n1OUTPUT-LENGTH n1TYPE t1 COMPONENTS n2TYPE t1DESCRIBE LISTNUMBER OF LINES ln1INDEX ix1NUMBER OF PAGES n1INDEX ix1LINE lin PAGE pn1INDEX ix1DESCRIBE LIST PAGE pag1INDEX ix1LINE-SIZE col1LINE-COUNT lin1LINES lin1FIRST-LINE lin1TOP-LINES lin1TITLE-LINES lin1HEAD-LINES lin1END-LINES lin1DESCRIBE TABLE tabla1LINES n1OCCURS n1*-------------------------------------------------------------------------- DETAIL:DETAILDIVIDE:DIVIDE v1 BY v2DIVIDE-CORRESPONDING r1 BY r2*-------------------------------------------------------------------------- DO:DODO v1 TIMESDO n1 TIMESVARYING v1 FROM v2 NEXT v3DO n1 TIMESVARYING v1 FROM v2 NEXT v3ENDDODO 254 TIMES.MOVE '#' TO SY-ULINE+SY-INDEX(1).ENDDO*-------------------------------------------------------------------------- EDITOR-CALL:EDITOR-CALL FOR tablaTITLE textDISPLAY-MODEEDITOR-CALL FOR REPORT nameDISPLAY-MODE*-------------------------------------------------------------------------- ELSE:ELSEELSEIF logop1*-------------------------------------------------------------------------- END:END-OF-DEFINITIONEND-OF-PAGEEND-OF-SELECTIONENDATENDCASEENDDOENDEXECENDFORMENDFUNCTIONENDIFENDLOOPENDMODULEENDONENDPROVIDEENDSELECTENDWHILEEXEC SQL:EXEC SQLPERFORMING formENDEXEC*-------------------------------------------------------------------------- EXIT:EXITEXIT FROM SQLEXIT FROM STEP-LOOP*-------------------------------------------------------------------------- EXPORT:EXPORT objn1 ... objn2 TO MEMORYFROM v1 ...ID key1EXPORT objn1 ... objn2 TO DATABASE etab3(ar4) ID key5FROM v1CLIENT c1USING form_nameEXPORT obj1 ... objn2 TO DATASET dsn3(ar4) ID key5EXPORT obj1 ... objn2 TO SHARED BUFFER etab3(ar4) ID key5 FROM v1 ...CLIENT c1EXPORT DYNPRO head1 fields2 order3 match4 ID id4 EXPORT NAMETAB h f ID idEXTRACT:EXTRACT r1FETCH:FETCH NEXT CURSOR c1 INTO work2FIELD-GROUPS:FIELD-GROUPS: fgr1, fgr2 ...FIELD-SYMBOLS:FIELD-SYMBOLSSTRUCTURE stru1 DEFAULT work2TYPE typ1TYPE LINE OF typ1LIKE s1LIKE LINE OF s1FIELDS:FIELDS v1FORM:FORM pp1USING p2 p3 ...ENDFORM.FORM form_name1USING p1 p2 ...USING VALUE(p1) VALUE(p2) ... CHANGING p1 p2 ... CHANGING VALUE(p1) VALUE(p2) ... TABLES tabla1 tabla2 ... STRUCTURE name1FORMAT:FORMATCOLOR n1INTENSIFIEDINVERSEHOTSPOTINPUTRESETFREE:FREE v1FREE MEMORYID key1FREE OBJECT objname1FREE tabla1FROM:FROM etab1CLIENT SPECIFIEDBYPASSING BUFFERUP TO n ROWSFROM (etab_name1) FUNCTION:FUNCTION name1 ENDFUNCTIONFUNCTION-POOLMESSAGE-ID id1GENERATE:GENERATE REPORT progMESSAGE v1INCLUDE v1LINE v1WORD v1OFFSET v1TRACE-FILE v1DIRECTORY ENTRY v1WITHOUT SELECTION-SCREENGENERATE SUBROUTINE POOL tabla1 NAME name2 MESSAGE v1INCLUDE v2LINE v3WORD v4OFFSET v5TRACE-FILE v6GENERATE DYNPRO head1 fields2 order3 match4 ID id4 OFFSET v1TRACE-FILE v1GET:GET etab1LATEFIELDS v1 ...GET CURSOR FIELD fOFFSET v1LINE v1VALUE v1LENGTH v1GET CURSOR LINE linOFFSET v1VALUE v1LENGTH v1GET TIMEGET RUN TIMEGET RUN TIME FIELD v1GET PARAMETER ID key1 FIELD v1 GET PROPERTY OF name1 attrib2 = v3 NO FLUSHGROUP-BY:GROUP BY v1 v2 ...GROUP BY (tabla1)HIDE:HIDE lin_v1IF:IF v1 EQ v2stm1ELSEstm2ENDIFIF v1 EQ v2IF v1 LT v2IF v1 GT v2IF v1 IS INITIALIF v1 IS REQUESTEDIF v1 logexp1IF v1 logexp2IF exp1 AND exp2 ...IF exp1 OR exp2 ...IF exp1 NOT exp2 ...IF v1 CA v2IF v1 NA v2IF v1 CO v2IF v1 CN v2IF v1 CP v2IF v1 NP v2IF v1 CS v2IF v1 NS v2IF v1 MIF v1 OIF v1 ZIMPORT:IMPORT v1 tabla2 ... FROM DATABASE etab3(ar4) ID key5TO v6 ...MAJOR-ID maj1 ...MAJOR-ID maj1 MINOR-ID min2CLIENT hUSING form_name1IMPORT DIRECTORY INTO tabla1 FROM DATABASE etab2(ar3) ID key4 CLIENT cl1IMPORT v1 tabla2 ... FROM LOGFILE ID key3TO v4IMPORT DYNPRO head1 tabla2 logik3 matchc4 ID id5IMPORT v1 tabla2 ... FROM MEMORYTO v3 ...ID keyIMPORT v1 tabla2 ... FROM SHARED BUFFER etab3(ar4) ID key5TO v6CLIENT cl6INCLUDE:INCLUDE STRUCTURE rec1 INCLUDE TYPE typename1 INCLUDE pname1 INFOTYPES:INFOTYPES: n1NAME v1OCCURS n1MODE m1VALID FROM begdt1 TO enddt2 INITIALIZATION: INITIALIZATIONINPUTINSERT etab1CLIENT SPECIFIEDINSERT etab1 FROM work2 INSERT etab1 FROM TABLE tabla1 ACCEPTING DUPLICATE KEYS INSERT INTO etab1CLIENT SPECIFIEDVALUES wb2INSERT (etab)CLIENT SPECIFIEDINSERT (etab) FROM work2 INSERT (etab) FROM TABLE tabla1 ACCEPTING DUPLICATE KEYS INSERT INTO (etab1)CLIENT SPECIFIEDVALUES wb2INSERT tabla1INSERT tabla1 INDEX ix2INSERT work1 INTO tabla2INSERT work1 INTO tabla2 INDEX ix3INSERT INITIAL LINE INTO tabla2INSERT LINES OF tabla1 INTO tabla2INSERT LINES OF tabla1 FROM ix1 INTO tabla2INSERT LINES OF tabla1 FROM ix1 TO ix2 INTO tabla2INSERT LINES OF tabla1 FROM ix1 TO ix2 INTO tabla2 INDEX ix3 INSERT REPORT name FROM tablaINSERT TEXTPOOL name FROM tabla LANGUAGE l1INSERT Field groupsINSERT v1 v2 ... INTO fgroup3INTO:INTO area1INTO CORRESPONDING FIELDS OF area1INTO (v1, v2, ...)INTO TABLE tabla1PACKAGE SIZE n1INTO CORRESPONDING FIELDS OF TABLE tabla1PACKAGE SIZE n1APPENDING TABLE tabla1PACKAGE SIZE n1APPENDING CORRESPONDING FIELDS OF TABLE tabla1PACKAGE SIZE n1LEAVELEAVE PROGRAMLEAVE TO TRANSACTION tac1AND SKIP FIRST SCREENLEAVE TO SCREEN dynp1LEAVE SCREENLEAVE TO LIST-PROCESSINGAND RETURN TO SCREEN dynp1LEAVE LIST-PROCESSINGLOAD:LOAD REPORT pnam1 PART 'HEAD' INTO tabla2 LOAD REPORT pnam1 PART 'TRIG' INTO tabla2LOAD REPORT pnam1 PART 'CONT' INTO tabla2 LOAD REPORT pnam1 PART 'DATA' INTO tabla2LOAD REPORT pnam1 PART 'DDNM' INTO tabla2 LOAD REPORT pnam1 PART 'DATV' INTO tabla2 LOAD REPORT pnam1 PART 'SELC' INTO tabla2LOAD REPORT pnam1 PART 'STOR' INTO tabla2 LOAD REPORT pnam1 PART 'LITL' INTO tabla2LOAD REPORT pnam1 PART 'SYMB' INTO tabla2 LOAD REPORT pnam1 PART 'LREF' INTO tabla2LOAD REPORT pnam1 PART 'SSCR' INTO tabla2LOAD REPORT pnam1 PART 'BASE' INTO tabla2LOAD REPORT pnam1 PART 'INIT' INTO tabla2LOAD REPORT pnam1 PART 'DATP' INTO tabla2LOAD REPORT pnam1 PART 'TXID' INTO tabla2LOAD REPORT pnam1 PART 'COMP' INTO tabla2LOCAL:LOCAL v1LOOP:LOOP AT tabla1WRITE: /1 tabla1-f1ENDLOOPLOOP AT tablaFROM n1TO n2WHERE logexp1TRANSPORTING NO FIELDSLOOP AT tabla INTO waFROM n1TO n2WHERE logexp1TRANSPORTING NO FIELDSLOOP AT SCREENMESSAGE:MESSAGE msgnr1WITH v1 v2 ...RAISING exc1MESSAGE ID id1 TYPE mtyp2 NUMBER mnr3 WITH v1 v2 ...MODIFY:MODIFY etabMODIFY *etabMODIFY (etab_name1)FROM area1CLIENT SPECIFIEDMODIFY etab1 FROM TABLEMODIFY etab1 FROM TABLE tabla2 MODIFY (etab-name1) FROM TABLE tabla2 CLIENT SPECIFIEDMODIFY tabla1INDEX ix3TRANSPORTING v4 v5 ...WHERE logexp6MODIFY tabla1 FROM wk2MODIFY LINE n1INDEX ix1LINE FORMAT lfmt1 lfmt2 ...FIELD VALUEFIELD FORMATMODIFY LINE n1 OF CURRENT PAGELINE FORMAT lfmt1 lfmt2 ...FIELD VALUEFIELD FORMATMODIFY LINE n1 OF PAGE m2LINE FORMAT lfmt1 lfmt2 ...FIELD VALUEFIELD FORMATMODIFY CURRENT LINELINE FORMAT lfmt1 lfmt2 ...FIELD VALUEFIELD FORMATMODIFY SCREENMODULE:MODULE mname1stm1ENDMODULEMODULE mname1OUTPUTINPUTMOVE:MOVE v1 TO v2MOVE v1+off1(len1) TO v2+off2(len2) MOVE v1 TO v2 PERCENTAGE v3RIGHTLEFTRIGHTMOVE-CORRESPONDING rec1 TO rec2 MULTIPLY:MULTIPLY v1 BY v2MULTIPLY-CORRESPONDING r1 BY r2 NEW-LINE:NEW-LINENO-SCROLLINGSCROLLINGNEW-PAGE:NEW-PAGE PRINT ONARCHIVE MODE armodeARCHIVE PARAMETERS arparams ARCHIVE PARAMETERS arparams COPIES n1COVER TEXT litDATASET EXPIRATION days DEPARTMENT name1 DESTINATION dest1 IMMEDIATELY flagKEEP IN SPOOL flagLAYOUT layer1LINE-COUNT l1LINE-SIZE c1LIST AUTHORITY auth1LIST DATASET dsnameLIST NAME nameNEW LIST IDENTIFICATION flag NEW-SECTIONNEW-SECTIONNO DIALOGNO DIALOG PARAMETERS para1 RECEIVER r1SAP COVER PAGE m1 NEW-PAGELINE-COUNT lin1 LINE-SIZE c1NO-HEADINGNO-TITLEWITH-HEADING WITH-TITLEPRINT ON ...PRINT OFFON:ON CHANGE OF v1 stm1ENDONON CHANGE OF v1 OR v1 ...OPEN DATASET: OPEN DATASET name1 AT POSITION pos1 FILTER bsFOR APPENDING FOR INPUTFOR OUTPUTIN BINARY MODEIN TEXT MODE MESSAGE msg1TYPE t1OPEN CURSOR:OPEN CURSOR c1 FOR SELECT WITH HOLDORDER-BY:ORDER BY PRIMARY KEY ORDER BY v1 v2 ...ORDER BY (tabla) OVERLAY:OVERLAY v1 WITH v2ONLY v3PACK:PACK v1 TO v2 PARAMETERS: PARAMETERS p1AS CHECKBOXDEFAULT valueFOR TABLE etab1LIKE v1LOWER CASE MATCHCODE OBJECT objname1 MEMORY ID mid1MODIF ID key1NO-DISPLAY OBLIGATORYTYPE typ1DECIMALS n1 RADIOBUTTON GROUP radbut1 FOR TABLE etab1AS MATCHCODE STRUCTUREVALUE-REQUESTHELP-REQUESTPERFORM:PERFORM form IN PROGRAM prog CHANGING p1 p2 p3 ...IF FOUNDTABLES tabla1 tabla2 ...。
ABAP语句整理
ADD:ADD v1 FROM v2 TO v3 GIVING v4ADD v1 THEN v2 UNTIL v3 GIVING mADD v1 THEN v2 UNTIL v3 TO mADD v1 THEN v2 UNTIL v3ADD v1 TO v2ADD-CORRESPONDING rec1 TO rec2APPEND:APPEND tablaAPPEND area1 TO tabla2APPEND INITIAL LINE TO tabla1APPEND tabla SORTED BY v3APPEND area1 TO tabla2 SORTED BY v3APPEND LINES OF tabla1 TO tabla 2APPEND LINES OF tabla1 FROM ix1 TO tabla2APPEND LINES OF tabla1 FROM ix1 TO ix2 TO tabla2ASSIGN:ASSIGN v1 TO <fs1> DECIMALS dec TYPE tipoASSIGN f+off(len) TO <fs> DECIMALS dec TYPE tipoASSIGN (f) TO <fs> TYPE tipo DECIMALS decASSIGN <fs1>+off(len) TO <fs2> DECIMALS dec TYPE tipoASSIGN TABLE FIELD v1 TO <fs>ASSIGN TABLE FIELD (f) TO <fs>ASSIGN COMPONENT n OF STRUCTURE rec TO <fs> DECIMALS dec TYPE tipo ASSIGN COMPONENT name OF STRUCTURE rec TO <fs> DECIMALS dec TYPE tipo ASSIGN LOCAL COPY OF v1 TO <f>ASSIGN LOCAL COPY OF MAIN TABLE FIELD (f) TO <f>ASSIGN LOCAL COPY OF INITAL LINE tabla TO <f>*--------------------------------------------------------------------------AT:AT END OF v1AT NEW v1AT FIRSTAT LASTAT fg WITH fg1AT LINE-SELECTIONAT USER-COMMANDAT PFxAT SELECTION-SCREENON ps1ON END OF s1ON VALUE-REQUEST FOR ps1ON HELP-REQUEST FOR ps1ON RADIOBUTTON GROUP radi1ON BLOCK blk1OUTPUT*-------------------------------------------------------------------------- AUTHORITY-CHECK:AUTHORITY-CHECK OBJECT object ID name1 FIELD f1*-------------------------------------------------------------------------- BACK:BACK*-------------------------------------------------------------------------- BREAK-POINT:BREAK-POINT lit1*-------------------------------------------------------------------------- CALL:CALL FUNCTION {AutoInsertFunctionCall}CALL FUNCTION fnc1EXPORTING p1 = v1IMPORTING p1 = v1TABLES p1 = tabla1CHANGING p1 = v1EXCEPTIONS exc1 = retc1CALL FUNCTION fnc1 STARTING NEW TASK tskname2DESTINATION dest1DESTINATION IN GROUP grp1DESTINATION IN GROUP DEFAULTPERFORMING form1 ON END OF TASKEXPORTING p1 = v1TABLES p1 = tabla1EXCEPTIONS exc1 = retc2 MESSAGE msg2CALL FUNCTION fnc1 IN UPDATE TASKEXPORTING p1 = v1TABLES p1 = tabla1CALL FUNCTION fnc1 DESTINATION dest1EXPORTING p1 = v1IMPORTING p1 = v1TABLES p1 = tabla1CHANGING p1 = v1EXCEPTIONS exc1 = retc2EXCEPTIONS exc1 = retc2 MESSAGE messCALL FUNCTION fnc1 IN BACKGROUND TASKAS SEPARATE UNITDESTINATION desti1EXPORTING p1 = v1TABLES p1 = tabla1CALL CUSTOMER-FUNCTION fnc1EXPORTING p1 = v2IMPORTING p1 = v2TABLES p1 = tabla1CHANGING p1 = v2EXCEPTIONS exc2 = retc1CALL SCREEN scr1STARTING AT x1 y1ENDING AT x2 y2CALL TRANSACTION tran1AND SKIP FIRST SCREENUSING tabla1MODE m1UPDATE upd1MESSAGES INTO msg1CALL DIALOG dlog1USING tablaMODE mode1AND SKIP FIRST SCREENEXPORTING v1 FROM v2IMPORTING v1 TO v2CALL METHOD met1 (EXPORTING p1 = v1IMPORTING p1 = v1CHANGING p1 = v1 )CALL METHOD met1EXPORTING p1 = v1IMPORTING p1 = v1CHANGING p1 = v1RECEIVING p1 = v1EXCEPTIONS ex = idxCALL cfunc1ID id1 FIELD v1 ... ID id1 FIELD v2*-------------------------------------------------------------------------- CASE:CASE v1WHEN bed1stm1WHEN bed2stm2WHEN bedxWHEN OTHERSstm3ENDCASE*-------------------------------------------------------------------------- CHECK:CHECK SELECT-OPTIONSCHECK logexp1CHECK s1*-------------------------------------------------------------------------- CLEAR:CLEAR v1WITH lit1WITH NULLCLOSE:CLOSE CURSOR curs1CLOSE DATASET dsn1COLLECT:COLLECT tabla1COLLECT wrk1 INTO tabla2*-------------------------------------------------------------------------- COMMIT:COMMIT WORKAND WAIT*-------------------------------------------------------------------------- COMMUNICATION:COMMUNICATION INIT DESTINATION desti1 ID ident1 COMMUNICATION ALLOCATE ID iden1COMMUNICATION ACCEPT ID ident1COMMUNICATION SEND ID ident 1 BUFFER b1COMMUNICATION RECEIVE ID ident1BUFFER b1DATAINFO datn1STATUSINFO stat1COMMUNICATION DEALLOCATE ID ident1*-------------------------------------------------------------------------- CONCATENATE:CONCATENATE v1 v2 ... vx INTO f2SEPARATED BY f3*-------------------------------------------------------------------------- COMPUTE:COMPUTE v1 = arithexp*-------------------------------------------------------------------------- CONDENSE:CONDENSE r1NO-GAPSCONDENSE v1*-------------------------------------------------------------------------- CONSTANTS:CONSTANTS con1 ... VALUE valu1CONSTANTS con1 ... VALUE IS INITIALCONSTANTS con1(len2) ... VALUE valu1CONSTANTS con1(len2) ... VALUE IS INITIALCONSTANTS: BEGIN OF conr1,CONSTANTS: END OF conr1*--------------------------------------------------------------------------CONTINUE:CONTINUECONTROLS:CONTROLS contrl TYPE TABLEVIEW USING SCREEN*-------------------------------------------------------------------------- CONVERT:CONVERT DATE v1 INTO INVERTED-DATE v2CONVERT INVERTED-DATE v1 INTO DATE v2CONVERT TEXT text1 INTO SORTABLE CODE cod2*-------------------------------------------------------------------------- CREATE:CREATE OBJECT obj1 class2LANGUAGE lang1*--------------------------------------------------------------------------DATA:DATA: BEGIN OF tabla1INCLUDE STRUCTURE struc1DATA: END OF tabla1DATA: BEGIN OF COMMON PART cp1DATA: END OF COMMON PARTDATA: BEGIN OF tabla1 OCCURS n2VALID BETWEEN v1 AND v2DATA: END OF tabla1DATA: BEGIN OF rec1DATA: END OF rec1DATA: v1TYPE typ1LIKE v1TYPE typ1 OCCURS n2LIKE v1 OCCURS n2TYPE LINE OF ityp1LIKE LINE OF tabla1VALUE lit1DECIMALS n1WITH HEADER LINEDATA: v1(len1)TYPE tipoTYPE typ1 OCCURS n2TYPE LINE OF ityp1VALUE lit1DECIMALS n1WITH HEADER LINE*-------------------------------------------------------------------------- DEFINE:DEFINE name1stm1stm2END-OF-DEFINITION*-------------------------------------------------------------------------- DELETE:DELETE tabla1DELETE tabla1 INDEX ix2DELETE tabla1 FROM ix2 TO ix3DELETE tabla1 WHERE cond2FROM ix1TO ix2DELETE ADJACENT DUPLICATES FROM tabla1COMPARING v1 v2 ...COMPARING ALL FIELDSDELETE etab1DELETE *etab1DELETE FROM etab1 WHERE cond2CLIENT SPECIFIEDDELETE FROM (name_etab1) WHERE cond2CLIENT SPECIFIEDDELETE (name_etab1)FROM area1CLIENT SPECIFIEDDELETE etab FROM TABLE tabla2DELETE (name_etab1) FROM TABLE tablaCLIENT SPECIFIEDDELETE etab1 VERSION ver2DELETE *etab1 VERSION ver2DELETE DATASET name1DELETE FROM DATABASE etab1(ar) ID key2CLIENT v1DELETE REPORT name1DELETE TEXTPOOL name1 LANGUAGE lan2DELETE DYNPRO v1DELETE FROM SHARED BUFFER etab1(ar) ... ID*-------------------------------------------------------------------------- DESCRIBE:DESCRIBE DISTANCE BETWEEN v1 AND v2 INTO v2DESCRIBE FIELD v1DECIMALS n1EDIT MASK msk1LENGTH n1OUTPUT-LENGTH n1TYPE t1 COMPONENTS n2TYPE t1DESCRIBE LISTNUMBER OF LINES ln1INDEX ix1NUMBER OF PAGES n1INDEX ix1LINE lin PAGE pn1INDEX ix1DESCRIBE LIST PAGE pag1INDEX ix1LINE-SIZE col1LINE-COUNT lin1LINES lin1FIRST-LINE lin1TOP-LINES lin1TITLE-LINES lin1HEAD-LINES lin1END-LINES lin1DESCRIBE TABLE tabla1LINES n1OCCURS n1*-------------------------------------------------------------------------- DETAIL:DETAILDIVIDE:DIVIDE v1 BY v2DIVIDE-CORRESPONDING r1 BY r2*-------------------------------------------------------------------------- DO:DODO v1 TIMESDO n1 TIMESVARYING v1 FROM v2 NEXT v3DO n1 TIMESVARYING v1 FROM v2 NEXT v3ENDDODO 254 TIMES.MOVE '#' TO SY-ULINE+SY-INDEX(1).ENDDO*-------------------------------------------------------------------------- EDITOR-CALL:EDITOR-CALL FOR tablaTITLE textDISPLAY-MODEEDITOR-CALL FOR REPORT nameDISPLAY-MODE*-------------------------------------------------------------------------- ELSE:ELSEELSEIF logop1*-------------------------------------------------------------------------- END:END-OF-DEFINITIONEND-OF-PAGEEND-OF-SELECTIONENDATENDCASEENDDOENDEXECENDFORMENDFUNCTIONENDIFENDLOOPENDMODULEENDONENDPROVIDEENDSELECTENDWHILEEXEC SQL:EXEC SQLPERFORMING formENDEXEC*-------------------------------------------------------------------------- EXIT:EXITEXIT FROM SQLEXIT FROM STEP-LOOP*-------------------------------------------------------------------------- EXPORT:EXPORT objn1 ... objn2 TO MEMORYFROM v1 ...ID key1EXPORT objn1 ... objn2 TO DATABASE etab3(ar4) ID key5FROM v1CLIENT c1USING form_nameEXPORT obj1 ... objn2 TO DATASET dsn3(ar4) ID key5EXPORT obj1 ... objn2 TO SHARED BUFFER etab3(ar4) ID key5 FROM v1 ...CLIENT c1EXPORT DYNPRO head1 fields2 order3 match4 ID id4 EXPORT NAMETAB h f ID idEXTRACT:EXTRACT r1FETCH:FETCH NEXT CURSOR c1 INTO work2FIELD-GROUPS:FIELD-GROUPS: fgr1, fgr2 ...FIELD-SYMBOLS:FIELD-SYMBOLS <fs1>STRUCTURE stru1 DEFAULT work2TYPE typ1TYPE LINE OF typ1LIKE s1LIKE LINE OF s1FIELDS:FIELDS v1FORM:FORM pp1USING p2 p3 ...ENDFORM.FORM form_name1USING p1 p2 ...USING VALUE(p1) VALUE(p2) ...CHANGING p1 p2 ...CHANGING VALUE(p1) VALUE(p2) ...TABLES tabla1 tabla2 ...STRUCTURE name1FORMAT:FORMATCOLOR n1INTENSIFIEDINVERSEHOTSPOTINPUTRESETFREE:FREE v1FREE MEMORYID key1FREE OBJECT objname1FREE tabla1FROM:FROM etab1CLIENT SPECIFIEDBYPASSING BUFFERUP TO n ROWSFROM (etab_name1)FUNCTION:FUNCTION name1ENDFUNCTIONFUNCTION-POOLMESSAGE-ID id1GENERATE:GENERATE REPORT progMESSAGE v1INCLUDE v1LINE v1WORD v1OFFSET v1TRACE-FILE v1DIRECTORY ENTRY v1WITHOUT SELECTION-SCREENGENERATE SUBROUTINE POOL tabla1 NAME name2MESSAGE v1INCLUDE v2LINE v3WORD v4OFFSET v5TRACE-FILE v6GENERATE DYNPRO head1 fields2 order3 match4 ID id4OFFSET v1TRACE-FILE v1GET:GET etab1LATEFIELDS v1 ...GET CURSOR FIELD fOFFSET v1LINE v1VALUE v1LENGTH v1GET CURSOR LINE linOFFSET v1VALUE v1LENGTH v1GET TIMEGET RUN TIMEGET RUN TIME FIELD v1GET PARAMETER ID key1 FIELD v1GET PROPERTY OF name1 attrib2 = v3NO FLUSHGROUP-BY:GROUP BY v1 v2 ...GROUP BY (tabla1)HIDE:HIDE lin_v1IF:IF v1 EQ v2stm1ELSEstm2ENDIFIF v1 EQ v2IF v1 LT v2IF v1 GT v2IF v1 IS INITIALIF v1 IS REQUESTEDIF v1 logexp1IF v1 logexp2IF exp1 AND exp2 ...IF exp1 OR exp2 ...IF exp1 NOT exp2 ...IF v1 CA v2IF v1 NA v2IF v1 CO v2IF v1 CN v2IF v1 CP v2IF v1 NP v2IF v1 CS v2IF v1 NS v2IF v1 MIF v1 OIF v1 ZIMPORT:IMPORT v1 tabla2 ... FROM DATABASE etab3(ar4) ID key5TO v6 ...MAJOR-ID maj1 ...MAJOR-ID maj1 MINOR-ID min2CLIENT hUSING form_name1IMPORT DIRECTORY INTO tabla1 FROM DATABASE etab2(ar3) ID key4 CLIENT cl1IMPORT v1 tabla2 ... FROM LOGFILE ID key3TO v4IMPORT DYNPRO head1 tabla2 logik3 matchc4 ID id5IMPORT v1 tabla2 ... FROM MEMORYTO v3 ...ID keyIMPORT v1 tabla2 ... FROM SHARED BUFFER etab3(ar4) ID key5TO v6CLIENT cl6INCLUDE:INCLUDE STRUCTURE rec1INCLUDE TYPE typename1INCLUDE pname1INFOTYPES:INFOTYPES: n1NAME v1OCCURS n1MODE m1VALID FROM begdt1 TO enddt2INITIALIZATION:INITIALIZATIONINPUTINSERT etab1CLIENT SPECIFIEDINSERT etab1 FROM work2INSERT etab1 FROM TABLE tabla1ACCEPTING DUPLICATE KEYSINSERT INTO etab1CLIENT SPECIFIEDVALUES wb2INSERT (etab)CLIENT SPECIFIEDINSERT (etab) FROM work2INSERT (etab) FROM TABLE tabla1ACCEPTING DUPLICATE KEYSINSERT INTO (etab1)CLIENT SPECIFIEDVALUES wb2INSERT tabla1INSERT tabla1 INDEX ix2INSERT work1 INTO tabla2INSERT work1 INTO tabla2 INDEX ix3INSERT INITIAL LINE INTO tabla2INSERT LINES OF tabla1 INTO tabla2INSERT LINES OF tabla1 FROM ix1 INTO tabla2INSERT LINES OF tabla1 FROM ix1 TO ix2 INTO tabla2INSERT LINES OF tabla1 FROM ix1 TO ix2 INTO tabla2 INDEX ix3 INSERT REPORT name FROM tablaINSERT TEXTPOOL name FROM tabla LANGUAGE l1INSERT Field groupsINSERT v1 v2 ... INTO fgroup3INTO:INTO area1INTO CORRESPONDING FIELDS OF area1INTO (v1, v2, ...)INTO TABLE tabla1PACKAGE SIZE n1INTO CORRESPONDING FIELDS OF TABLE tabla1PACKAGE SIZE n1APPENDING TABLE tabla1PACKAGE SIZE n1APPENDING CORRESPONDING FIELDS OF TABLE tabla1PACKAGE SIZE n1LEAVELEAVE PROGRAMLEAVE TO TRANSACTION tac1AND SKIP FIRST SCREENLEAVE TO SCREEN dynp1LEAVE SCREENLEAVE TO LIST-PROCESSINGAND RETURN TO SCREEN dynp1LEAVE LIST-PROCESSINGLOAD:LOAD REPORT pnam1 PART 'HEAD' INTO tabla2 LOAD REPORT pnam1 PART 'TRIG' INTO tabla2LOAD REPORT pnam1 PART 'CONT' INTO tabla2 LOAD REPORT pnam1 PART 'DATA' INTO tabla2LOAD REPORT pnam1 PART 'DDNM' INTO tabla2 LOAD REPORT pnam1 PART 'DATV' INTO tabla2 LOAD REPORT pnam1 PART 'SELC' INTO tabla2LOAD REPORT pnam1 PART 'STOR' INTO tabla2 LOAD REPORT pnam1 PART 'LITL' INTO tabla2LOAD REPORT pnam1 PART 'SYMB' INTO tabla2 LOAD REPORT pnam1 PART 'LREF' INTO tabla2LOAD REPORT pnam1 PART 'SSCR' INTO tabla2LOAD REPORT pnam1 PART 'BASE' INTO tabla2LOAD REPORT pnam1 PART 'INIT' INTO tabla2LOAD REPORT pnam1 PART 'DATP' INTO tabla2LOAD REPORT pnam1 PART 'TXID' INTO tabla2LOAD REPORT pnam1 PART 'COMP' INTO tabla2LOCAL:LOCAL v1LOOP:LOOP AT tabla1WRITE: /1 tabla1-f1ENDLOOPLOOP AT tablaFROM n1TO n2WHERE logexp1TRANSPORTING NO FIELDSLOOP AT tabla INTO waFROM n1TO n2WHERE logexp1TRANSPORTING NO FIELDSLOOP AT SCREENMESSAGE:MESSAGE msgnr1WITH v1 v2 ...RAISING exc1MESSAGE ID id1 TYPE mtyp2 NUMBER mnr3WITH v1 v2 ...MODIFY:MODIFY etabMODIFY *etabMODIFY (etab_name1)FROM area1CLIENT SPECIFIEDMODIFY etab1 FROM TABLEMODIFY etab1 FROM TABLE tabla2MODIFY (etab-name1) FROM TABLE tabla2CLIENT SPECIFIEDMODIFY tabla1INDEX ix3TRANSPORTING v4 v5 ...WHERE logexp6MODIFY tabla1 FROM wk2MODIFY LINE n1INDEX ix1LINE FORMAT lfmt1 lfmt2 ...FIELD VALUEFIELD FORMATMODIFY LINE n1 OF CURRENT PAGELINE FORMAT lfmt1 lfmt2 ...FIELD VALUEFIELD FORMATMODIFY LINE n1 OF PAGE m2LINE FORMAT lfmt1 lfmt2 ...FIELD VALUEFIELD FORMATMODIFY CURRENT LINELINE FORMAT lfmt1 lfmt2 ...FIELD VALUEFIELD FORMATMODIFY SCREENMODULE:MODULE mname1stm1ENDMODULEMODULE mname1OUTPUTINPUTMOVE:MOVE v1 TO v2MOVE v1+off1(len1) TO v2+off2(len2) MOVE v1 TO v2 PERCENTAGE v3RIGHTLEFTRIGHTMOVE-CORRESPONDING rec1 TO rec2MULTIPLY:MULTIPLY v1 BY v2MULTIPLY-CORRESPONDING r1 BY r2NEW-LINE:NEW-LINENO-SCROLLINGSCROLLINGNEW-PAGE:NEW-PAGE PRINT ONARCHIVE MODE armodeARCHIVE PARAMETERS arparamsARCHIVE PARAMETERS arparamsCOPIES n1COVER TEXT litDATASET EXPIRATION daysDEPARTMENT name1DESTINATION dest1IMMEDIATELY flagKEEP IN SPOOL flagLAYOUT layer1LINE-COUNT l1LINE-SIZE c1LIST AUTHORITY auth1LIST DATASET dsnameLIST NAME nameNEW LIST IDENTIFICATION flagNEW-SECTIONNEW-SECTIONNO DIALOGNO DIALOGPARAMETERS para1RECEIVER r1SAP COVER PAGE m1NEW-PAGELINE-COUNT lin1LINE-SIZE c1NO-HEADINGNO-TITLEWITH-HEADINGWITH-TITLEPRINT ON ...PRINT OFFON:ON CHANGE OF v1stm1ENDONON CHANGE OF v1OR v1 ...OPEN DATASET:OPEN DATASET name1AT POSITION pos1FILTER bsFOR APPENDINGFOR INPUTFOR OUTPUTIN BINARY MODEIN TEXT MODEMESSAGE msg1TYPE t1OPEN CURSOR:OPEN CURSOR c1 FOR SELECTWITH HOLDORDER-BY:ORDER BY PRIMARY KEYORDER BY v1 v2 ...ORDER BY (tabla)OVERLAY:OVERLAY v1 WITH v2ONLY v3PACK:PACK v1 TO v2PARAMETERS:PARAMETERS p1AS CHECKBOXDEFAULT valueFOR TABLE etab1LIKE v1LOWER CASEMATCHCODE OBJECT objname1MEMORY ID mid1MODIF ID key1NO-DISPLAYOBLIGATORYTYPE typ1DECIMALS n1RADIOBUTTON GROUP radbut1FOR TABLE etab1AS MATCHCODE STRUCTUREVALUE-REQUESTHELP-REQUESTPERFORM:PERFORM form IN PROGRAM progCHANGING p1 p2 p3 ...IF FOUNDTABLES tabla1 tabla2 ...USING p1 p2 p3 ...PERFORM form1(prog2)CHANGING p1 p2 p3 ...IF FOUNDTABLES tabla1 tabla2 ...USING p1 p2 p3 ...PERFORM form1USING p1 p2 p3 ...CHANGING p1 p2 p3 ...TABLES tabla1 tabla2 ...PERFORM n OF form1 form2 form3 ...PERFORM n ON COMMITLEVEL v1POSITION:POSITION colPRINT-CONTROL:PRINT-CONTROLCPI cpi1LPI lpi1SIZE size1COLORBLACKREDBLUEGREENYELLOWPINKLEFT MARGIN col1FONT font1FUNCTION v1LINE linPOSITION colPRINT-CONTROL INDEX-LINE fPROGRAM:PROGRAMPROVIDE:PROVIDE v1 v2 FROM itab3v4 v5 FROM itab6BETWEEN v7 AND v8ENDPROVIDEPUT:PUT etab1RAISE:RAISE expt1RANGES:RANGES sel FOR fOCCURS occ*-------------------------------------------------------------------------- READ:READ LINE l1FIELD VALUE v1 INTO v2INDEX ixREAD LINE lin OF CURRENT PAGEREAD LINE lin OF PAGE pagREAD CURRENT LINEREAD TABLE etab. " (-> old)READ TABLE tabla1BINARY SEARCHCOMPARING ALL FIELDSCOMPARING v1 v2 ...INDEX ix1TRANSPORTING NO FIELDSTRANSPORTING v1 v2 ...WITH KEY keyWITH KEY key BINARY SEARCHWITH KEYWITH KEY = value1READ TABLE tabla INTO area1BINARY SEARCHCOMPARING ALL FIELDSCOMPARING v1 v2 ...INDEX ix1TRANSPORTING NO FIELDSTRANSPORTING v1 v2 ...WITH KEY keyWITH KEY key BINARY SEARCHWITH KEYWITH KEY = value1READ REPORT prog INTO tabla1READ TEXTPOOL prog INTO tabla LANGUAGE l1READ DATASET dsnname1 INTO wk2LENGTH lenRECEIVE:RECEIVE RESULTS FROM FUNCTION funcIMPORTINGTABLESEXCEPTIONSREFRESH:REFRESH tabla1 FROM SELECT-OPTIONSREFRESH tabla1 FROM TABLE etab2 "-> oldREFRESH tabla1REFRESH CONTROL ctrl FROM SCREEN dynpr2REJECT:REJECT etab1REPLACE:REPLACE v1 WITH v2 INTO v3LENGTH len1*-------------------------------------------------------------------------- REPORT:REPORT repname1NO STANDARD PAGE HEADINGLINE-SIZE colLINE-COUNT lin(n)MESSAGE-ID xxDEFINING DATABASE ldb*-------------------------------------------------------------------------- RESERVE:RESERVE n LINES*-------------------------------------------------------------------------- ROLLBACK:ROLLBACK WORK*-------------------------------------------------------------------------- SCAN:SCAN ABAP-SOURCE tabla1 ... TOKENS INTO tabla2 ...FROM v1TO v1KEYWORDS FROM tabla1LEVELS INTO tabla1OVERFLOW INTO tabla1WITH ANALYSISWITH COMMENTSWITH INCLUDESWITHOUT TRMACPROGRAM FROM v1INCLUDE INTO v1MESSAGE INTO v1WORD INTO v1LINE INTO v1OFFSET INTO v1*-------------------------------------------------------------------------- SCROLL:SCROLL LIST TO FIRST PAGEINDEX ix1LINE lin1SCROLL LIST TO LAST PAGEINDEX ix1LINE lin1SCROLL LIST TO PAGE pagINDEX ix1LINE lin1SCROLL LIST TO COLUMN colINDEX ix1LINE lin1SCROLL LIST FORWARDINDEX ix1n1 PAGESSCROLL LIST BACKWARDINDEX ix1n1 PAGESSCROLL LIST LEFTINDEX ix1BY n1 PLACESSCROLL LIST RIGHTINDEX ix1BY n1 PLACESSEARCH:SEARCH v1 FOR v2ABBREVIATEDSTARTING AT n1ENDING AT n2AND MARKSEARCH tabla1 FOR v2ABBREVIATEDSTARTING AT n1ENDING AT n2AND MARK*-------------------------------------------------------------------------- SELECT:SELECT {AutoSelect}SELECT * FROM etabWHERE etab_v1 EQ v2AND etab_v3 EQ v4ENDSELECTSELECT etab_v1 etab_v2etab_v3 etab_v3FROM etabWHERE etab_v1 EQ v2AND etab_v3 EQ v4ENDSELECTSELECT * INTO wrk1FROM etabWHERE etab_v1 EQ v2AND etab_v3 EQ v4ENDSELECTSELECT * FROM etab1WHERE etab_v1 EQ v2AND etab_v3 EQ v4ORDER BY PRIMARY KEYENDSELECTSELECT * FROM etab1CLIENT SPECIFIEDBYPASSING BUFFERUP TO n5 ROWSWHERE etab_v1 EQ v2AND etab_v3 EQ v4ENDSELECTSELECT SINGLE * FROM etabWHERE etab_v1 EQ v2AND etab_v3 EQ v4SELECT *SELECT SINGLE *SELECT SINGLE FOR UPDATE *SELECT DISTINCT *SELECT etab_v1 ...SELECT SINGLE etab_v1 ...SELECT SINGLE FOR UPDATE etab_v1 ...SELECT DISTINCT etab_v1 ...SELECT (tabla1)SELECT SINGLE (tabla)SELECT SINGLE FOR UPDATE (tabla)SELECT DISTINCT (tabla)*-------------------------------------------------------------------------- INTO de SELECT:INTO wrk1INTO CORRESPONDING FIELDS OF wrk1INTO (v1, v2 ...)INTO TABLE tabla1PACKAGAE SIZEINTO CORRESPONDING FIELDS OF TABLE tablaPACKAGAE SIZEINTO APPENDING TABLE tablaPACKAGAE SIZEINTO APPENDING CORRESPONDING FIELDS OF TABLE tabla PACKAGAE SIZE*-------------------------------------------------------------------------- FROM de SELECT:FROM etab1CLIENT SPECIFIEDBYPASSING BUFFERUP TO n1 ROWSFROM (etab1)CLIENT SPECIFIEDBYPASSING BUFFERUP TO n1 ROWS*--------------------------------------------------------------------------WHERE de SELECT:WHERE where_conditionWHERE NOT where_conditionWHERE wherebedinung AND where_conditionWHERE wherebedinung OR where_conditionFOR ALL ENTRIES IN tabla1 WHERE where_conditionFOR ALL ENTRIES IN tabla1 WHERE NOT where_conditionFOR ALL ENTRIES IN tabla1 WHERE where_condition AND where_condition FOR ALL ENTRIES IN tabla1 WHERE where_condition OR where_conditionSELECT ... where_condici?FOR ALL ENTRIES IN tabla1WHERE f1 = v1WHERE f1 EQ v1WHERE f1 NE v1WHERE f1 <> v1WHERE f1 >< v1WHERE f1 LT v1WHERE f1 < v1WHERE f1 LE v1WHERE f1 <= v1WHERE f1 =< v1WHERE f1 GT v1WHERE f1 > v1WHERE f1 GE v1WHERE f1 >= v1WHERE f1 => v1WHERE f1BETWEEN v1 AND v2LIKE v1IN tabla1IN (v2, v3, ...)WHERE f1 NOTBETWEEN v1 AND v2LIKE v1IN tabla1IN (v2, v3, ...)WHERE f1 IS NULLWHERE f1 IS NOT NULLGROUP-BY de SELECT:GROUP BY v1 v2 ...HAVING wherecondGROUP BY (tabla)HAVING wherecond*-------------------------------------------------------------------------- ORDER-BY de SELECT:ORDER BY PRIMARY KEYORDER BY v1 v2 ...ORDER BY (tabla1)*-------------------------------------------------------------------------- SELECT-OPTIONS:SELECT-OPTIONS sel1 FOR v2DEFAULT lit1DEFAULT lit1 ... OPTION op2 ... SIGN ie3DEFAULT lit1 TO lit2DEFAULT lit1 TO lit1 OPTION op2 ... SIGN ie3MEMORY ID spa1MATCHCODE OBJECT mtch1MODIF ID scrg1NO-DISPLAYLOWER CASEOBLIGATORYNO-EXTENSIONNO INTERVALSNO DATABASE SELECTIONVALUE-REQUESTVALUE-REQUEST FOR LOW/HIGHHELP-REQUESTHELP-REQUEST FOR LOW/HIGH*-------------------------------------------------------------------------- SELECTION-SCREEN:SELECTION-SCREEN BEGIN OF LINESELECTION-SCREEN END OF LINESELECTION-SCREEN SKIP n1FOR TABLE etab1ID id1SELECTION-SCREEN ULINEpos1FOR TABLE etab1MODIF ID scr1ID id1SELECTION-SCREEN POSITION pos1FOR TABLE etab1SELECTION-SCREEN COMMENT fmt nameFOR TABLE etab1FOR FIELD v1MODIF ID scr1ID id1SELECTION-SCREEN PUSHBUTTON fmt name USER-COMMAND ucom FOR TABLE etab1MODIF ID scr1ID id1SELECTION-SCREEN BEGIN OF BLOCK blck1WITH FRAMETITLE titl1NO INTERVALSSELECTION-SCREEN END OF BLOCK blck1SELECTION-SCREEN FUNCTION KEY n1_5FOR TABLE etab1ID id1SELECTION-SCREEN BEGIN OF VERSION ver TEXT-xxxSELECTION-SCREEN END OF VERSION verSELECTION-SCREEN EXCLUDE ...PARAMETERS parSELECT-OPTIONS selRADIOBUTTON GROUPS radiBLOCKS blockIDS idSELECTION-SCREEN DYNAMIC SELECTIONS FOR TABLE dbtabSELECTION-SCREEN FIELD SELECTION FOR TABLE dbtab*--------------------------------------------------------------------------SET:SET BLANK LINES ONSET BLANK LINES OFFSET COUNTRY count1SET CURSOR FIELD v1OFFSET off1LINE lin1SET CURSOR LINE lin1OFFSET off1SET CURSOR col1 lin2SET EXTENDED CHECKSET LANGUAGE langu1SET LOCALE LANGUAGE lgCOUNTRY cout1MODIFIER m1SET MARGIN vcol1 vlin2SET PARAMETER ID pid1 FIELD v2SET PF-STATUS pf1EXCLUDINGIMMEDIATELYSET PROPERTY OF obj1 attrb2 = v3NO FLUSHSET RUN TIME ANALYZER ONSET RUN TIME ANALYZER OFFSET SCREEN dynnr1SET LEFT SCROLL-BOUNDARYCOLUMN col1SET TITLEBAR titl1WITH &1 &2 ...SET UPDATE TASK LOCALSET USER-COMMAND lit1*-------------------------------------------------------------------------- SHIFT:SHIFT v1CIRCULARLEFTRIGHTSHIFT r1 BY n PLACESCIRCULARLEFTRIGHTSHIFT r1 UP TO r2CIRCULARLEFTRIGHTSHIFT v1 LEFT DELETING LEADING c1SHIFT v1 RIGHT DELETING TRAILING c1*-------------------------------------------------------------------------- SKIP:SKIP TO LINE l1SKIP n*-------------------------------------------------------------------------- SORT:SORTBY v1 v2 ...ASCENDINGDESCENDINGAS TEXTSORT tabla1BY v1 v2 ...ASCENDINGDESCENDINGAS TEXT*-------------------------------------------------------------------------- SPLIT:SPLIT v1 AT v2 INTO targ1 targ2SPLIT f AT g INTO TABLE tabla*-------------------------------------------------------------------------- START-OF-SELECTION:START-OF-SELECTION*-------------------------------------------------------------------------- STATICS:STATICS v1STATICS v1(len2)STATICS: BEGIN OF rec,STATICS: END OF rec,STATICS: BEGIN OF tabla OCCURS n,STATICS: END OF tabla*-------------------------------------------------------------------------- STOP:STOP*-------------------------------------------------------------------------- SUBMIT:SUBMIT repname1SUBMIT (repname1)LINE-SIZE col1LINE-COUNT lin1VIA SELECTION-SCREENAND RETURNEXPORTING LIST TO MEMORYUSER user1 VIA JOB job2 NUMBER n3TO SAP-SPOOLDESTINATION dest1COPIES num1LIST NAME name1LIST DATASET dsname1COVER TEXT text1LIST AUTHORITY auth1IMMEDIATELY x1KEEP IN SPOOL x1NEW LIST IDENTIFICATION x1DATASET EXPIRATION days1LINE-COUNT lin1LINE-SIZE col1LAYOUT layer1SAP COVER PAGE mode1COVER PAGE x1RECEIVER rec1DEPARTMENT name1ARCHIVE MODE mode1ARCHIVE PARAMETERS para1WITHOUT SPOOL DYNPROUSING SELECTION-SETS OF PROGRAM pname1WITH SELECTION-SET v1WITH p1 logop2 v3 SIGN ie4WITH p1 BETWEEN v2 AND v3 SIGN ie4WITH p1 NOT BETWEEN v2 AND v3 SIGN ie4WITH p1 IN sel_tabla1WITH SELECTION-TABLE sel_tabla1WITH FREE SELECTIONS rsds_tabla1*-------------------------------------------------------------------------- SUBTRACT:SUBTRACT v1 FROM v2SUBTRACT-CORRESPONDING rec1 FROM rec2*-------------------------------------------------------------------------- SUM:SUM*-------------------------------------------------------------------------- SUMMARY:SUMMARY。
abap常见语句
abap常见语句ABAP是一种商业程序语言,主要用于企业软件开发。
它是一种高级语言,允许开发人员以模块化的方式编写企业范围的应用程序。
在这篇文章中,我们将探讨一些常见的ABAP语句,这些语句有助于开发人员提高程序开发的效率和质量。
1. 数据定义语句数据定义语句用于定义变量、常量和数据类型。
在ABAP中,可以用以下语句定义可变变量:DATA:<变量名> TYPE <数据类型>。
其中,“<变量名>”是变量的名称,“<数据类型>”是变量的类型。
以下是一些常见的数据定义语句:DATA:age TYPE I。
//定义一个整型变量“age”DATA:name TYPE CHAR10。
//定义一个字符型变量“name”DATA:salary TYPE P DECIMALS 2。
//定义一个数值型变量“salary”,并指定小数位数为22. 控制结构语句控制结构语句用于控制程序的执行流程。
在ABAP中,可以使用以下语句:IF <条件>。
//执行某些代码ENDIF。
其中,“<条件>”是一个逻辑条件,如果为真,则执行if和endif之间的代码。
以下是一些常见的控制结构语句:IF age > 18。
WRITE: / '成年人'。
//如果age大于18,则输出“成年人”ENDIF。
CASE <变量>。
WHEN <值1>。
//执行某些代码1WHEN <值2>。
//执行某些代码2...ENDCASE。
其中,“<变量>”是一个变量名称,用于比较。
如果变量等于<值1>,则执行“执行某些代码1”,如果变量等于<值2>,则执行“执行某些代码2”,以此类推。
以下是一个简单的例子:CASE gender。
WHEN 'M'。
WRITE: / '男性'。
ABAP学习总结
ABAP学习总结1.ABAP语法ULINE. ----画一条横线SY-VLINE 画竖线SKIP. 跳一行系统变量如下:Internal table(内表)内表数据类型: Structure , 数据库表, 用户自定义数据类型.定义内表:Structure : DATA ITAB TYPE (STANDARD) TABLE OF YTEST_TAB.数据库表: DATA ITAB TYPE TABLE OF SFLIGHT.自定义数据类型: TYPES: BEGIN OF 1_TYPE,NAME(50) TYPE C,AGE TYPE I,END OF 1_TYPE.DATA ITAB TYPE TABLE OF 1_TYPE.表头行:在定义内表的时候,后面加上”WITH HEADER LINE”,则同时定义了该内表的同名工作区,该定义被称作表头行,例如:注: APPEND 与INSERT 区别: APPEND插入内表最后一行, INSERT 可以插入指定位置.数据字典:数据字段(TABLE FIELD), 域(DOMAIN), 数据元素(DATA ELEMENT).数据字段:数据表中的字段.域: 描述一个字段类型和长度等信息.数据元素: 描述一个字段的用途.数据字段→域→数据元素. ()收索帮助)SELECT :对数据结构: 当从数据库表中查询出的数据,放入数据结构中时,要有ENDSELECT, 例如: SELECT * FROM SPFLI UP TO 5 ROWS INTO A_SPFLI.WRITE : / A_SPFLI-CONNID,A_SPFLI-CARRID,A_SPFLI-CITYFROM, A_SPFLI-CITYTO.ENDSELECT.对内表 : 当从数据库表中查询出的数据, 放入内表中时,可有可无 ENDSELECT,例如:SELECT * FROM SPFLI UP TO 5 ROWS INTO TABLE TA_SPFLI.*从数据库表中读数据到内表中,直接从内表输出*如果TA_SPFLI没有定义HEADER LINE,这儿会报错的LOOP AT TA_SPFLI.WRITE : / TA_SPFLI-CONNID,TA_SPFLI-CARRID,TA_SPFLI-CITYFROM,TA_SPFLI-CITYTO.ENDLOOP.UP TO 5 ROWS : 读取前5行,不再继续往下读PACKAGE SIZE 5 : 以5行为一组,继续往下读.例如:*以每次读取5条记录,直到读取完所有数据SELECT * INTO TABLE WA_SPFLI FROM SPFLI PACKAGE SIZE 5.*输出内表内的数据LOOP AT WA_SPFLI.WRITE : / WA_SPFLI-CARRID,WA_SPFLI-CITYFROM,WA_SPFLI-CITYTO.ENDLOOP.*输出5条后输出一条线ULINE.ENDSELECT.(内链接)ULINE.WRITE / '内连接'.ULINE.*定义结构DATA : BEGIN OF ARCD,CARRID TYPE SPFLI-CARRID,CONNID TYPE SPFLI-CONNID,FLDATE TYPE SFLIGHT-FLDATE,END OF ARCD.*定义工作区DATA ARCD1 LIKE ARCD.*关联数据表,读取前10条记录,写入工作区,并输出SELECT SPFLI~CARRID SPFLI~CONNID SFLIGHT~FLDATE INTO ARCD1 FROM SPFLI INNER JOIN SFLIGHT ON SPFLI~CARRID = SFLIGHT~CARRID AND SPFLI~CONNID = SFLIGHT~CONNID UP TO 20 ROWS.WRITE : / ARCD1-CARRID,ARCD1-CONNID,ARCD1-FLDATE.ENDSELECT.列表颜色设置:例如:*----------标准列表输出SKIP.ULINE.FORMAT COLOR COL_GROUP.WRITE / '前景和背景颜色设置'.FORMAT COLOR OFF.*数据库表SPFLI相关TABLES SPFLI.SKIP.*输出表头,背景灰绿FORMAT COLOR COL_HEADING.ULINE AT /(91).WRITE : / SY-VLINE,(15) '航线承办人',SY-VLINE,(15) '航班连接',SY-VLINE, (15) '国家代码',SY-VLINE,(15) '起飞城市',SY-VLINE,(15) '起飞机场',SY-VLINE.ULINE AT /(91).FORMAT COLOR OFF.*SY-VLINE是画竖线,ULINE是画横线*输出内容,关键字为'DL'红色SELECT * FROM SPFLI UP TO 10 ROWS.IF SPFLI-CARRID = 'DL'.FORMAT COLOR COL_NEGATIVE INVERSE OFF."背景色,红色ELSEIF SPFLI-CARRID = 'AZ'.FORMAT COLOR COL_NEGATIVE INVERSE ON."前景色,红色ELSE.FORMAT COLOR OFF INVERSE OFF.ENDIF.WRITE : / SY-VLINE,(15) SPFLI-CARRID,SY-VLINE,(15) SPFLI-CONNID,SY-VLINE,(15) SPFLI-COUNTRYTO,SY-VLINE,(15)SPFLI-CITYFROM,SY-VLINE,(15)SPFLI-AIRPFROM,SY-VLINE.ULINE AT /(91).ENDSELECT.从服务器上下载指定人的源码: se38 - >Z_DOWNLOAD_DOC -> 执行- > 输入要下载人的用户名和保存路径- > 执行即可将指定人的所有源码下载下来SAP: System , Applications and Products in Data Processing . 即数据处理的系统应用和产品.ERP巨人: --- SAP公司创立于1972 年, 其总部设在德国南部的小城walldorf.ERP(Enterprise Resource Planning , 企业资源计划) 是建立在现代企业的先进管理思想基础之上, 利用信息技术为企业提供决策, 计划, 控制和业务评估的全方位的系统的解决平台.企业流: 物流, 资金流, 信息流.SAP基本结构: 数据库, 应用层和显示层.R/3 ( R 意为实时处理, Realtime).SAP模块:生产计划控制(PP) , 物料管理(MM) , 销售与分销(SD) , 财务会计(FI), 管理会计(CO), 人力资源(HR), 设备管理(PM), 项目管理(PS), 固定资产管理(AM), 资料管理(BW) , 售后服务管理(SM), 工作流管理(WF), 质量管理(QM), 基本系统组件(BC). . .SAP系统开发人员主要接触对象:Basis系统和开发平台及ABAP系统设计语言.ABAP(Advanced Business Application Programming).处理块(Processing Blocks) 是ABAP程序的主要结构单元, 定义了程序在不同状态下执行的具体功能, 在程序编译运行过程中, 每一个块都是一个独立的实体.数据(包括选择屏幕元素)定义和声明语句是独立于任何处理块的, 其他所有语句则都必须隶属于某个处理块.程序类型数据元素: 是构成结构和表等复杂类型的基本组件. 域: 则定义数据元素的技术属性, 具有包括数据字典中的基本内置数据类型,长度和小数位.所有数据元素都必须属于一个域.内表排序使用SORT语句.确定数据对象属性:DATA: text(8) TYPE c VALUE ‘abcdefgh’ , len TYPE i.DESCRIBE FIELD text LENGTH len.WRITE: text , ‘has length’ , len .其输出为: abcdefgh has length 8.MOVE 字段TO 字段=> 赋值.MOVE source TO destination. destination = source.可以使用MOVE-CORRESPONDING 语句在两个结构体中所有同名组件赋值, 而目标结构体中其他字段的值不变.MOVE-CORRESPONDING add_company TO company .字段符号:系统不直接为字段符号本身保留内存空间, 而是将其指向一个数据对象.声明字段符号: FIELD-SYMBOLS <fs> TYPE D.分配数据对象: 静态分配: ASSIGN f TO <fs> .动态分配: ASSIGN (f) TO <fs> .动态分配不是将字段f分配给字段符号<fs> , 而是先找到字段f 的内容, 再将该内容作为一个新的数据对象名称分配给<fs> . 例:FIELD-SYMBOLS: <fs> .DATA: str(20) TYPE c VALUE ‘Output String’ .Name(20) TYPE c VALUE ‘str’ .*Static assignmentASSIGN name TO<fs> .WRITE: / <fs>.*Dynamic assignmentASSIGH (name) TO <fs> .WRITE: / <fs>.输出结果为:StrOutput StringREAD语句只能应用于内表数据对象.静态数据对象: STATICS , 与DATA , TYPES 格式一样.宏的定义: DEFINE name .<statement>.END-OF-DEFINITION.SE24 -> 定义全局类SE37 -> 定义FUNCTION .访问类成员: oref -> attr . 属性或方法.Oref => attr . 静态属性或方法.继承: CLASS c1 DEFINITION INHERITING FROM ……………………ENDCLASS. <类的定义>CLASS c1 IMPLEMENTATION.………ENDCLASS. <类的实现>抽象类: CLASS c1 DEFINITION ABSTRACT.……….ENDCLASS.最终类; CLASS c1 DEFINITION FINAL .……….ENDCLASS.接口: INTERFACE intf .DATA …..CLASS-DATA……(静态属性).METHOD……ENDINTERFACE.实现接口:CLASS class DEFINITION . <类定义>PUBLIC SECTION.…….INTERFACES: intf1, intf2……ENDCLASS.CLASS class IMPLEMENTATION.……METHOD intf1~imeth1. (实现接口方法)…….ENDMETHOD.…….ENDCLASS.DATA object TYPE REF TO class.创建对象:CREATE OBJECT object .通过内表将多条数据插入数据库表:INSERT dbtab FROM TABLE itab ACCEPTING DUPLICATE KEYS.其中accepting duplicate keys 选项的效果是: 如果出现关键字相同条目, 系统将SY-SUBRC返回4 , 并跳过该条目, 并更新所有其他条目.UPDATE:单行: UPDATE dbtab FROM wa . (工作区).多行: UPDATE target FROM TABLE itab . (内表).MODIFY: 相当于INSERT 和UPDATE 语句结合.添加或更新单行: MODIFY dbtab FROM wa.添加或更新多行: MODIFY dbtab FROM TABLE itab.DELETE:单行: DELETE dbtab FROM wa.多行: DELETE dbtab FROM TABLE itab.SY-DBCNT 返回实际已删除的行数.一般性的报表时间触发过程如下:1.LOAD-OF-PROGRAM.2.INITIALIZATION.3.AT SELECTION-SCREEN OUTPUT. AT SELECTION-SCREEN. 4.START-OF-SELECTION5.GET 和GET LATE6.END-OF-SELECTION7.TOP-OF-PAGE END-OF-PAGE8.AT LINE-SELECTION AT-USER-COMMANDRFC: (Remote Function Call , 远程功能调用).RFM: 可以提供给其他系统进行远程调用的程序模块是支持RFC 的功能模块, 即RFM(Remote-Enabled Function Module). 支持远程调用的功能模块.RFC模式:1.同步RFC2.异步RFC3.事务性RFC4.队列RFC5.并行RFC模块条件调用:单字段: FIELD field MODULE mod ON INPUT/REQUEST. INPUT: 当field中包含非初始值时, 才调用ABAP模块mod; 如果用户将字段值由其他改回初始值, 也不能触发mod. REQUEST: 只有用户在该字段中输入值时(包括空值和原值) , 才调用ABAP模块mod.组合字段:CHAIN.FIELD: f1 , f2 , …MODULE mod1 ON CHAIN-INPUT/CHAIN-REQUEST.FIELD: g1 , g2 , ……MODULE mod2 ON CHAIN-INPUT/CHAIN-REQUEST.……ENDCHAIN.当fi 之一满足条件时, mod1被调用, 当fi或gi满足条件时, mod2被调用.锁:问题一:锁对象(Lock Object)和 FM(Function Module),激活Lock Object时,产生的 FM 的名字是什么?答案:首先要在 ABAP 字典中创建锁对象,然后才能在 ABAP 程序中设锁。
sap abap基础语法
sap abap基础语法
SAP ABAP的基础语法包括:
1.关键字:每个语句的第一个单词必须是ABAP关键字,且单词之间至少要
用一个空格分隔。
2.句点符号:每个语句结束必须要用句号,标志着语句的完成。
3.大小写:ABAP不区分大小写,一般关键字大写,操作数小写。
4.命名规则:使用至少1个但不超过8个字符,且ABAP语言的数据类型包
括八种基本数据类型。
5.链语句方式:连续多行的第一个关键字相同,可使用链语句方式减少输入。
6.结构化编程:包括顺序、选择和循环结构,分别由IF、CASE和LOOP等
关键字实现。
abap基本语法汇总
一数据类型和对象在ABAP中,可以使用与标准数据声明相似的语法处理数据类型,而与数据对象无关。
在程序中必须声明要使用的全部数据对象。
声明过程中,必须给数据对象分配属性,其中最重要的属性就是数据类型。
1.1 基本数据类型对算术运算的非整型结果(如分数)进行四舍五入,而不是截断。
类型 P 数据允许在小数点后有数字。
有效大小可以是从 1 到 16 字节的任何值。
将两个十进制数字压缩到一个字节,而最后一个字节包含一个数字和符号。
在小数点后最多允许14 个数字。
1.2 系统定义的数据对象1.3 确定数据对象的属性如果要查明数据对象的数据类型,或者要在程序的运行期间使用其属性,可使用DESCRIBE 语句。
语法如下:DESCRIBE FIELD <f> [LENGTH <l>] [TYPE <t> [COMPONENTS <n>]][OUTPUT-LENGTH <o>] [DECIMALS <d>][EDIT MASK <m>].将由语句的参数指定的数据对象<f>的属性写入参数后的变量。
DESCRIBE FIELDS 语句具有下列参数:1.3.1 确定字段长度要确定数据对象的长度,利用DESCRIBE FIELD 语句使用 LENGTH 参数,如下所示:DESCRIBE FIELD <f> LENGTH <l>.系统读取字段<f>的长度,并将值写入字段<l>。
1.3.2确定数据类型要确定字段的数据类型,利用DESCRIBE FIELD 语句使用 TYPE 参数,如下所示:DESCRIBE FIELD <f> TYPE <t> [COMPONENTS <n>].系统读取字段<f>的数据类型,然后将值写入字段<t>。
ABAP学习(1):基本语法介绍
ABAP学习(1):基本语法介绍ABAP学习ABAP学习基本资料整理。
ABAP基本语法ABAP中不区分⼤⼩写,例如:Type 和type表⽰⼀个意思。
1基本数据类型ABAP基本数据类型:I : 整形数据;C:字符型数据;N:只包含数字的字符串;P:包装数据类型;F:浮点类型;D:⽇期类型;T:时间类型;X:⼗六进制数据。
F和P类型都保存浮点数,P的精度⽐F更⾼,⼀般使⽤P类型。
⽰例:"整型DATA:num1 type I."字符型DATA:num2(3) type C."数字字符型DATA:num3(4) type N."包装类型,decimals指定⼩数位数,只有P类型可⽤DATA:num4(10) type P DECIMALS 4."浮点型DATA:num5 type F."⽇期型DATA:num6 type D."时间型DATA:num7 type T."16进制型DATA:num8(10) type X."字符串DATA:num9 type string."C,N,X,P可以使⽤length定义长度DATA:num10 TYPE C LENGTH 14."赋值操作"move to 语句"MOVE 1333 TO num1.num1 = 1234567890.num2 = 'abc'.num3 = '0010'.num4 = '1.23456789'.num5 = '12.3456789'.num6 = sy-datum.num7 = sy-uzeit.num8 = 1234567890.write :/ 'num1=',num1,'num2=',num2,'num3=',num3,'num4=',num4,'num5=',num5,'num6=',num6,'num7=',num7,'num8=',num8."字符串转I,"不能有汉字,不能是科学计数法"num9 = '1.23300000E+2'.num9 = '12.33334'.num1 = num9.WRITE:/ 'num1',num1."字符串转Cnum9 = '中'.num2 = num9.WRITE:/ 'num2',num2."字符串转N,会将⼩数点去掉num9 = '22.33'.num3 = num9.WRITE:/ 'num3',num3."字符串转P,num9 = '12.3456'.num4 = num9.WRITE:/ 'num4',num4."字符串转F,会变成科学计数法显⽰num9 = '12.34567'.num5 = num9.WRITE:/ 'num5',num5."字符串转D,MMDDYYYY"输出:09302018num9 = '20180930'.num6 = num9.WRITE:/ 'num6',num6."字符串转T,hhmmssnum9 = '014423'.num7 = num9.WRITE:/ 'num7',num7."字符串转X,长度超过20位,截取前20字符num9 = '123456789012345678901234'.num8 = num9.WRITE:/ 'num8',num8."科学计数法转换DATA:str TYPE char25 VALUE '4.3999999999999997E-2'. DATA:m_str LIKE CHA_CLASS_DATA-SOLLWERT. DATA:c_str(16) TYPE C.DATA:c_num(16) TYPE P DECIMALS 3.MOVE str to m_str."科学计数法字符串转换成数字CALL FUNCTION'QSS0_FLTP_TO_CHAR_CONVERSION' EXPORTINGI_NUMBER_OF_DIGITS = 3I_FLTP_VALUE = m_strI_VALUE_NOT_INITIAL_FLAG = 'X'I_SCREEN_FIELDLENGTH = 16 IMPORTINGE_CHAR_FIELD = c_str.IF sy-subrc = 0.WRITE:/ c_str.c_num = c_str.WRITE:/ c_num.ENDIF."不⽤function转换,QSOLLWERTE作为中间数据"将科学计数法字符串转换为其他数据DATA:mid_str TYPE QSOLLWERTE.mid_str = str.c_num = mid_str.View Code2 type定义数据类型语法结构:Types :<类型名> type <数据类型>Types :<类型名> like <数据对象或数据类型>定义结构体Types: begin of <结构名>,<资料名> type <数据类型>,…………end of <结构名>.Data: begin of <结构名>,<资料名> type <数据类型>,…………end of <结构名>."******************************************************************"type定义数据类型"******************************************************************TYPES: length TYPE I.TYPES: str(20) TYPE C.TYPES: BEGIN OF person,Name(10) type C,Age type I,END OF person.3变量声明相关语法:data: <变量名> type <数据类型> [value <值>] 。
abap基础语法
abap基础语法ABAP基础语法ABAP(Advanced Business Application Programming)是一种高级业务应用编程语言,主要用于SAP系统开发。
它由SAP公司开发并广泛应用于企业资源计划(ERP)系统中。
ABAP基础语法是学习ABAP编程的第一步,掌握基础语法对于编写高效、可维护的ABAP程序至关重要。
本文将介绍ABAP基础语法的一些重要概念和常用语句。
1. 数据类型在ABAP中,我们可以声明各种不同的数据类型,如整数型(INT)、字符型(CHAR)、浮点型(FLOAT)等。
声明变量时需要指定变量的数据类型,并可以为其赋初值。
2. 变量和常量ABAP中可以通过“DATA”关键字声明变量,并使用“CONSTANTS”关键字声明常量。
变量和常量用于存储和操作数据,在程序中起到关键的作用。
3. 运算符ABAP支持各种算术、比较和逻辑运算符,用于进行数值计算、条件判断和逻辑操作。
例如,加法运算符(+)、等于运算符(=)和逻辑与运算符(AND)等。
4. 控制语句ABAP提供了多种控制语句,用于根据条件执行不同的代码块。
常用的控制语句包括IF语句、CASE语句和LOOP语句等。
这些语句可以帮助我们实现程序的流程控制和逻辑判断。
5. 函数和方法ABAP中可以定义函数和方法,用于封装一段可重用的代码。
函数是一段独立的代码,可以接受输入参数并返回一个结果。
方法是与对象相关联的代码,可以访问对象的属性和方法。
6. 内部表内部表是ABAP中一种重要的数据结构,类似于其他编程语言中的数组或列表。
内部表用于存储一组有序的数据,并可以通过索引或关键字访问。
我们可以使用内部表来处理和操作数据。
7. 结构体ABAP中的结构体是一种复合数据类型,可以包含多个字段。
结构体用于组织和存储相关的数据,并可以通过字段名访问各个字段的值。
8. 类和对象ABAP是一种面向对象的编程语言,支持类和对象的概念。
SAP-ABAP语法整理
1、ST05是用于在开发ABAP程序时,对应事务码取得的字段是“数据结构”而不是“透明表”的时候,通过ST05的“SQL跟踪”来获得相关“Select”的语句;一般查看“REC”列耗时比较多的“Select”语句;2、跟踪时如果有涉及到“数量”这类有对数据表进行更新或插入操作的,则直接去查Update 和Insert的SQL语句;3、在跟踪后,直接双击“对象名”列的名称,点选“表格”转到“SE11”的表字段表;4、ABAP程序开头的Tables:“数据表名”,只有在屏幕中有用到的表,才需要声明;在程序中用到的表则不需要进行在Tables内声名;5、抓SAP“文本”字段的数据,要先自定义变量,然后通过SE37的函数“FUNCTION ‟ZREAD_TEXT‟”取回文本数据;6、新建的ABAP程序,在测试运行的时候要先进行“激活”,才能测试运行;7、SE93:把ABAP写好的程序指定一个事务码执行;8、abap引号内的字符‟‟必须要是大写;9、ABAP select 里面的语句,不能像mssql有那么丰富的函数使用,需要导到内表后再对数据进行操作;10、‟EQ‟是单个数据值,‟BT‟是between区间的意思。
11、在写select inner join 里面,要注意是否需要加上销售组织的条件;on 条件1 and 销售组织条件。
12、SELECTION-SCREEN,里面有两个子项,PARAMETERS和select-options。
PARAMETERS 一般是用于必输项的屏幕参数设置,如果这个参数不是必输项的,就要用select-options。
在select ...where条件里,用PARAMETERS的条件语法是“数据字段= 屏幕字段”;而select-options的条件语法是“数据字段in 屏幕字段”。
13、在where判断一个日期型数据是空,不是DEAKT = ‟‟,也不是DEAKT is initial,而应该写成DEAKT = ‟00000000‟ (8个0)。
ABAP总结-转载,好全啊
ABAP总结-转载,好全啊事件流(6个):INITIALIZATION(初始化)AT SELECTION-SCREEN(屏幕跳出前)START-OF-SELECTION(取数据)END-OF-SELECTION(展示数据)TOP-OF-PAGE(普通报表输出页头)END-OF-PAGE(普通报表输出页尾)(来自互联网)1. 引用类型z_ref数据对象myref在程序中的声明方式:DATA myref TYPE z_ref.CREATE DATA myref TYPE z_ref.2. 参照数据字典中的表类型生成内表对象或结构体:DATA mytable TYPE z_table,”数据字典表类型,声明内表.myline TYPE LINE OF z_table.”表类型的行结构,声明结构体.3. 取系统日期:SY-DATUM,4. 取系统时间:SY-UZEIT.05. 系统字段定位:SY-FDPOS.字符比较结果为真时,此字段将给出偏移量信息.6. 系统字段SY-FDPOS给出字符的位置信息.(P109)7. 系统字段SY-INDEX记录循环语句中的循环次数8. 操作内表行结束后系统字段SY-TABIX返回该行索引.对于所有行操作,如果操作成功,系统变量SY-SUBRC返回0,否则返回非0值.9. 系统用户名:SY-UNAME.10. SY-HOST?屏幕序号:sy-dynnr.11. OK代码:SY-UCOMM或SYST-UCOMM12. 屏幕组ID:SY-DYNGR.13. 常量声明:CONSTANT const(len) TYPE type|LIKE dobj [DECIMALS dec] [VALUE val].14. 确定数据对象属性:DESCRIBE FIELD f [LENGTH l] [TYPE t [CONPONENTS n]] [OUTPUT-LENGTH o] [DECIMALS d] [EDIT MASK m] [HELP-ID h].15. 数据赋值:MOVE source TO destination.或destination = source.16. 设定初始值:CLEAR F.17. 检查字段是否为初始值:f IS INITIAL….18. 检查字段是否被分配:fs IS ASSIGNED…..19. 检查过程中的参数是否被实参填充:p IS [SUPPLIED|REQUESTED]….20. 检查数据对象的值是否属于某范围之间:f1 BETWEEN f2 AND f3…..21. 检查数据对象f的内容是否遵从某个选择表的逻辑条件:f in seltab….22. WRITE: /10 g,”在10个空格后输出变量g/(8) time using edit mask ‘__:__:__’.”输出的变量time保持8位的长度.23. 将光标移动到下一行:SKIP.24. 强制结束循环:EXIT,STOP或REJECT.25. 循环的中止:CONTINUE无条件中止当前循环并开始下一轮循环,CHECK条件为真时循环,为假时结束本次循环并开始下一轮循环,EXIT无条件中止并退出整个循环.26. 将字符串左移:SHIFT string.27. 连接字符串:CONCATENATE s1 s2 …..sn INTO s_dest [SEPARATED BY sep].如果结果出现被截断的情况,将SY-SUBRC返回4,否则返回0.符号&用于在字字符串换行时的连接.28. 根据分隔符sep拆分字符串:SPLIT s_source AT sep INTO s1 s2 ……sn.使用内表操作可以避免被截断的情况:SPLIT s_source AT sep INTO TABLE itab.此语句根据子串数目生成n行的内表.29. 循环输出内表的每一行数据:LOOP AT itab INTO text.ENDLOOP.30. 替换字段内容:REPLACE str1 WITH str2 INTO s_dest [LENGTH len]. 字段SY-SUBRC的返回值为0时表示己成功替换.31. 确定字段长度:[COMPUTE] n = STRLEN( str ).32. 删除字符串中的多余空格:CONDENSE33. 字符转换,如将ABC转换为abc:TRANSLATE34. 创建一个可以排序的格式:CONVERT TEXT.35. 用一个字符串覆盖另一个字符串:OVERLAY36. WRITE TO赋值时将忽略数据对象的类型,而将其视为字符类型数据.37. 字符串比较中的换码字符:#,用于转换比较时使用的通配符:*或+.及进行区分大小写,空格的比较,如#A表示比较大写的A.38. 定位操作子串:strName[+0][(1)].39. 字段符号,数据引用:动态数据对象.40. 子过程定义:FORM subroutine_name USING parameters1 parameters2…. ….ENDFORM.41. 子程序调用:PERFORM subroutine_name USING actual_parameters1 p2…. (其中USING可换成CHANGING)42. ULINE.输出下划线.43. 错误查看:ST2244. 程序打包release:SE01:找到对应的程序,点开后点上面小汽车,再选中上面的后再点小汽车.点check.程序修改后需要重新打包.45. 制作T-CODE:SE93,TCODE应按顺序编号:ZMF+流水号,我的程序名46. 创建table:t-code:se11,attributes:Delivery class:C.开发类别:ZFI,当自定义Field type时,名称需为Z+…..格式.->设置技术属性(Technical Setting):Logical storage parameters中Data class:APPL1,Size category:4à创建function group:SE80,创建好后将创建的TABLE挂接到function grouph上去:用se11查出table,点utilites->table maintenance generator:Authorization groups:&NC&,Function group中填刚才创建的功能组名称->one step->overview screen中必须填未使用的number,此处screen number与table是一一对应的关系,也可让点系统上面的按钮:find screen number来自动搜索适合的scr. Number.->create,成功后,找到对应的function group中的screen number双击即可看到生成的代码.需要修改域名可在function group中的element list或layout 中.-->se93创建t-code,start object选transaction withparameters(parameter transaction)->default values for->transantion:SM30->Default Values->name of screen field:viewname\update,value:table name\X.47. field-sign:,field—option:,field-low:表示选择条件中起始值48. 在where子句中如果只有一个表的话,可以不用指定表名.49. 获取用户IP地址及用户名:call function 'TH_USER_INFO' " Get user IP,hostnameimportinghostaddr = iporg”转化前的IP地址terminal = host”计算机名exceptionsothers = 1."Conv.IP addr to format 'xxx.xxx.xxx.xxx'call function 'ZGJ_IPADR2STRING' "Conv.IP addrexportingipadr = iporg”转化前的IP地址importingstring = ipdec.”转化后的最终需要的IP地址50.删除内表中数据完全相同的行,只保留一行: delete adjacent duplicates from itab1 COMPARING <f1> <f2> / COMPARING ALL FIELDS.51. spro:后台设定52. 输出选择框write:/ itab1-flag as checkboxl ...fs IS ASSIGNED...:检查字段符号是否被分配.l ...p IS [SUPPLIED|REQUESTED]...:检查过程中的参数是否被实参填充.4.BETWEEN操作符l ...f1 BETWEEN f2 AND f3...:检查数据对象的值是否属于特定范围之间.5.IN操作符(P110)l ...f IN seltab...:检查一个数据对象的内容是否遵从某个选择表的逻辑条件.6.组合逻辑表达式l AND:与.l OR:或.l NOT:非.注:括号与操作数间至少要有一个空格,如:IF ( c > n ) AND ( c < f ).4.4结构控制程序代码分三种结构:l 顺序结构:语句逐行执行.l 分支结构:根据不同的条件执行不同语句块.l 循环结构:反复执行某个语句.4.4.1分支控制1.IF/ENDIF结构:IF <condition1>.<statement block>ELSEIF <condition2>.<statement block>......ELSE.<statement block>ENDIF.注:可嵌套.2.CASE/ENDCASE结构:CASE f.WHEN f11 [OR f12 OR ...].<statement block>......[WHEN OTHERS.]<statement block>ENDCASE.其中,f为变量,f ij可以是变量或者固定值.4.4.2循环控制1.无条件循环DO [n TIMES].<statement block>ENDDO.说明:n为循环次数,可以是文字或变量,如果没有限定n值,则必须用EXIT,STOP或REJECT等语句强制结束循环.DO循环可嵌套,SY-INDEX 为当前循环次数.2.条件循环WHILE <condition>.<statement block>ENDWHILE.注:可嵌套,其它同上.3.循环中止l CONTINUE:无条件中止当前本轮循环,开始下一轮循环.l CHECK:条件中止当前本轮循环(条件为假时), 开始下一轮循环.l EXIT:无条件完全中止当前循环,继续循环结束语句(ENDDO,ENDWHILE等)后面的代码,如果在嵌套循环中,系统仅退出当前循环.4.5处理字符数据4.5.1字符数据1.连接字符串CONCATENATE s1 s2 ... sn INTO s_dest [SEPARATED BY sep].注:所有字符串操作将忽略s1....sn中的尾部空格(如需保留空格,可使用指定偏移量).如果出现截断情况,将SY-SUBRC设为4,否则返回0.2.拆分字符串SPLIT s_source AT sep INTO s1 s2 ... sn.如果所有子串足够长且不必截断任何部分,则将SY-SUBRC设为0,否则返回4,如果源字符串能够拆分的子串多过指定的数目,则源子串最后的剩余部分包括其后的分隔符都将写入最后一个子串,要避免这种情况,需要使用内表进行操作:SPLIT s_source AT sep INTO TABLE itab.在该形式中,根据子串数目生成n行的内表.例如:DATA:text type string,itab TYPE TABLE OF string.text = ‘ABAP is a programming language’.SPLIT text AT space INTO TABLE itab.LOOP AT itab INTO text.WRITE / text.ENDLOOP.3.查找子串模式SEARCH c FOR str.在字段c中查找字符串str.如果找到,则将SY-SUBRC返回0,SY-FDPOS返回字段c中该字符串的位置(从左算起的字节偏移量),否则SY-SUBRC返回4,查找模式有以下几种: l str 搜索str并忽略尾部空格.l .str. 搜索str,但不忽略尾部空格.l *str 搜索以str结尾的单词.l str* 搜索以str开始的单词.REPORT z_string_search.DATA string(30) TYPE c VALUE 'This is a testing sentence.'.WRITE: / 'searched','sy-subrc','sy-fdpos'.SEARCH string FOR 'X'.WRITE: / 'X', sy-subrc UNDER 'sy-subrc',sy-fdpos UNDER 'sy-fdpos'.SEARCH string FOR 'itt '.WRITE: / 'itt ', sy-subrc UNDER 'sy-subrc',sy-fdpos UNDER 'sy-fdpos'.SEARCH string FOR '.e .'.WRITE: / '.e .', sy-subrc UNDER 'sy-subrc',sy-fdpos UNDER 'sy-fdpos'.SEARCH string FOR '*e '.WRITE: / '*e ', sy-subrc UNDER 'sy-subrc',sy-fdpos UNDER 'sy-fdpos'.SEARCH string FOR 's* '.WRITE: / 's* ', sy-subrc UNDER 'sy-subrc',sy-fdpos UNDER 'sy-fdpos'.输出结果如下:searched sy-subrc sy-fdposX 4 0itt 4 0.e . 4 0*e 0 18s* 0 184.替换字段内容.REPLACE str1 WITH str2 INTO s_dest [LENGTH len].搜索s_dest中前len个字符中的子串str1,用str2来替换它,如果成功,SY-SUBRC返回0,否则还回非0值.REPORT z_replace.DATA name TYPE string.l 通配符”*”(输入#*),将其转回原义.l 通配符”+”(输入#+),将其转回原义.l 换码符本身”#”(输入##),将其转回原义.l 字符串结尾空格(输入#__),指定比较结尾空格.4.5.3定位操作子串str[+position][(len)].从字符串str中的position位开始取出长度为len的子串.可动态指定偏移量及长度的情况(即position及len可为变量):l 用MOVE语句或赋值运算符给字段赋值时.l 用WRITE TO语句向字段写入值时.l 用ASSIGN将字段分配给字段符号时.l 用PERFORM将数据传送给子程序时.off = 6.len = 2.date+off(len) = ‘01’.4.6使用内表types定义的并不是结构体对象,只是结构类型,不能作为工作区,当定义的内表没有表头行(工作区)时,必须为其定义一个结构体作为工作区,否则无法使用此内表.如果没有给内表定义工作区,则在定义内表时必须声明表头行(with header line).DATA:BEGIN OF line, "work area(structure)结构类型且结构体对象num TYPE i,sqr TYPE i,END OF line,"无表头行内表,内表定义都使用data关键词.itab TYPE(LIKE) STANDARD TABLE OF line WITH KEY table_line.DATA DIRTAB LIKE CDIR OCCURS 10 WITH HEADER LINE.定义标准内表DO 5 TIMES.line-num = sy-index.line-sqr = sy-index ** 2.APPEND line TO itab.ENDDO.LOOP AT itab INTO line.WRITE:/ line-num,line-sqr.ENDLOOP.CLEAR itab.注:1.TYPES与DATA区别:TYPES是用来定义某种类(型)的,需(用DATA语句)实例化以后才可以使用,而DATA是用来定义数据对象(实例变量)的,对于用DATA直接定义的结构体对象(不参照其它结构类型),其同时也是一个结构类型.2.TYPE与LIKE区别:TYPE后面跟随的只能是某种类(型),而LIKE后面可以跟随类型或实例对象,参照结构体对象生成内表时只能用LIKE,不能用TYPE,因为结构体对象不是类型,只是一种实例对象,参照结构类型生成内表时可以用LIKE也可以用TYPE.其中通过LIKE定义的内表直接拥有参照结构类型的元素结构,而通过TYPE定义的内表只能间接拥有被参照结构类型的元素结构,结构类型不能作为内表的工作区,只有结构体对象才可以.内表定义语法:1.标准表:可指定或不指定关键词,可重复.逻辑索引,操作数据时数据内存位置不峦,系统只重排数据行的索引值.DATA itab TYPE|LIKE [STANDARD] TABLE OF structure [WITH KEY comp1 ... compn(DEFAULT KEY) WITH HEADER LINE INITIAL SIZE n].2.排序表:可指定唯一或不唯一的关键词,也可不指定,逻辑索引,按关键词升序存储.DATA itab TYPE|LIKE SORTED TABLE OF structure [WITH句对于标准表来说与append效果相同,对于排序表来说,插入的行不可以打乱按照关键词排序的顺序,否则插入不成功,对于哈希表来说,插入过程中系统按照关键词对行进行定位.INITIAL关键词是用于向内表中插入结构中各类型的初始值的.l INSERT LINES OF itab1 [FROM n1] [TO n2] INTO [TABLE] itab2 [INDEX idx].将内表中部分或全部数据行整体插入到另一内表中,指定行数时itab1,itab2必须为索引表,指定TABLE关键词时,itab2可以是任意内表.此方式比其它方式快20倍左右.5.附加行—APPEND(只能操作索引表)APPEND [structure TO|INITIAL LINE TO] itab.APPEND LINES OF itab1 [FORM n1] [TO n2] TO itab2.6.聚集附加—COLLECTCOLLECT line INTO itab.对于需要附加的数据,如果在内表中存在关键词内容与其相同的数据行,则此语句将需要附加的数据累加到内表中的这一行上,而不会另外再添加一行,操作成功后,SY-TABIX返回被处理过的行的索引.注:关键词以外的所有字段必须是数字类型7.读取行—READ(可用于任何类型内表)l READ TABLE itab [INTO wa|ASSIGNING <fs>] INDEX idx.通过索引读取内表中的单行数据. ASSIGNING表表示指派给字段符号.l READ TABLE itab FROM structure [INTO wa|ASSIGNING <fs>].读取与结构相同的工作区中的关键词内容全部相同的内表数据.l READ TABLE itab WITH TABLE KEY field1 = v1 ... field2 = v2 [INTO wa|ASSIGNING <fs>].指定所有关键词值,并读取相等时内表行.l READ TABLE itab WITH KEY field1 = v1 ... field2 = v2 [INTO wa|ASSIGNING <fs>].读取内表中字段fieldn(不一定是表关键词段)与值vn相同时的内表行.8.修改行—MODIFYl MODIFY itab [FROM wa] [INDEX idx] [TRANSPORTING f1 f2 ...].如果内表包含的行数少于idx,则不更改任何行.l MODIFY TABLE itab FROM wa [TRANSPORTING f1 f2 ...].根据工作区wa中关键词修改内表行, TRANSPORTING表示修改指定字段值.l MODIFY itab FROM wa TRANSPORTING f1 f2 ... WHERE condition.修改符合WHERE子句中条件的内表中的指定字段值.9.删除行—DELETEl DELETE itab INDEX idx.根据索引删除内表行.l DELETE TABLE itab FROM wa.根据工作区关键词删除行.l DELETE TABLE itab WITH TABLE KEY field1 = v1 ... field2 = v2.根据指定关键词值删除行.l DELETE itab [FROM n1] [TO n2] [WHERE <condition>].10.循环处理--LOOPLOOP AT itab [INTO wa] [FROM n1] [TO n2] [WHERE condition].<statement block>.ENDLOOP.4.6.3操作整个内表1.排序SORT itab [ASCENDING|DESCENDING] [AS TEXT] [STABLE] [BY f1 [ASCENDING|DESCENDING] [AS TEXT]......f1 [ASCENDING|DESCENDING] [AS TEXT]]说明:l ASCENDING|DESCENDING:升序或降序.默认升序.l AS TEXT:根据当前语言按字母顺序排序字符字段,否则按字符平台相关内部编码进行排序.l STABLE:保持排序前后不需要改变的数据行的相对顺序.2.控制级操作(用于总计,缩进,格式控制等)AT FIRST|LAST|NEW f|END OF f.<statement block>ENDAT.说明:l FIRST:当循环为内表的第一行时,执行语句块中语句.在工作区中,系统用*填充所有关键词内容.l LAST: 当循环为内表的最后一行时,执行语句块中语句. 在工作区中,系统用*填充所有关键词内容.l NEW f:字段f前面(即左边)的全部字段内容之一不同于上一行时, 执行语句块中语句.在工作区中,系统用*填充f后面所有关键词内容.l END OF f:如果下一行行组中的任何字段内容不同于上一行, 执行语句块中语句.在工作区中,系统用*填充f后面所有关键词内容.注:在控制级操作期间,在工作区中,对于非标准关键词段,将全部进行初始化,在执行完控制操作后(即ENDAT语句后)工作区中的数据将全部还原到进入控制级操作语句前(即进入AT前)状态.3.初始化内表l CLEAR itab.:带表头行时只清空表头行,不带表头行时清空整个内表.l CLEAR itab[].:只清空整个内表对象数据.不清空表头行.l REFRESH itab或REFRESH itab[].:只清空整个内表对象数据.不清空表头行.l FREE itab.或FREE itab[].:只清空整个内表对象数据.不清空表头行,同时释放内存.l ......itab IS INITIAL....:检查内表是否为空.4.整体复制内表l MOVE itab1 TO itab2.:如果两表都存在表头行,则此语句只复制了表头行.l MOVE itab1[] TO itab2[].:指定表体复制.l MOVE itab1[] TO itab2.:表itab2无表头行时才成立.l itab2 = itab1.同上1l itab2[] = itab1[].同上2l itab2 = itab1[].同上35.比较内表大小... itab1 <operator> itab2...:其中<operator>可以为=,<>,><,>=,<=,>,<等.4.6.4Extract Datasetsl FIELD-GROUP fg.行结构分配.l INSERT f1 f2 ... INTO fg.生成字段组fg的具体字段结构.l EXTRACT fg.将字段组填充给EXTRACT.l SORT.排序.l LOOP. <statement block> ENDLOOP.循环输出EXTRACT.4.7动态数据对象4.7.1字段符号l FIELD-SYMBOLS <fs> [TYPE type|LIKE dobj].声明字段符号.l ASSIGN f TO <fs>.静态分配数据对象给字段符号.l ASSIGN f[+i] [(j)] TO <fs>.指定偏移量和长度.l ASSIGN (f) TO <fs>.动态分配,先找到字段f的内容,然后将该内容分配给<fs>.4.7.2数据引用TYPES t_dref TYPE REF TO DATA.DATA dref TYPE REF TO DATA.4.8模块化技术4.8.2子程序1.定义:FORM subr [[USING [VALUE(p1)]... ] [TYPE t|LIKE f]...] [TYPE ANY][CHANGING [VALUE(p1)] ... ] [TYPE t|LIKE f]...] [TYPE ANY].<subr codes>ENDFORM.注:l VALUE参数表未示值传递,此方式在子程序调用后实参的值不会被改变.l 无VALUE参数时表示引用传递,会改变实参的值.l USING与CHANGING无任何区别.l 位于两个子程序间的代码不属于任何事件块.l 参数传递时不存在类型转换,要求必须兼容.2.调用:PERFORM subr [USING p1 ... pn] [CHANGING pi ... pj].4.8.3功能模块(p153)4.8.5源代码复用1.包含程序包含程序是单纯的代码复用,不是可执行程序,不能单独运行,必须被其它程序调用,包含程序不能调用自身.INCLUDE incl.包含程序调用,此语句必须独占一行.2.宏:(语句块中最多只能包含9个占位符&1...&9).例:DATA:result TYPE i,int1 TYPE i VALUE 1,int2 TYPE i VALUE 2.DEFINE operation.result = &1 &2 &3.output &1 &2 &3 result.END-OF-DEFINITION.DEFINE output.write: / 'The result of &1 &2 &3 is',&4.END-OF-DEFINITION.operation 1 + 2.operation int2 - int1.4.9.1静态错误检查1.语法检查:用Check键.2.扩展语法检查(SLIN):在ABAP初台界面输出程序名后,选择Program->Check->Extended Syntax Check.àStandard.4.9.2运行时错误控制1.可捕捉的错误CATCH SYSTEM-EXCEPTIONS exc1 = rc1 ... excn = rcn....ENDCATCH.其中exci表示一个单一可捕捉错误或者一个ERROR类,rci则代表一个数字.如果其中错误之一在CATCH和ENDCATCH语句之间出现,程序就不会中止,而是直接跳至ENDCATCH后,把系统指定的错误代码rci赋给字段SY-SUBRC.此语句可嵌套.例如:DATA:result1 TYPE p DECIMALS 3,number TYPE i VALUE 11.CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.DO.number = number - 1.result1 = 1 / number.WRITE: / number,result1.ENDDO.ENDCATCH.IF sy-subrc = 5.WRITE / 'division by zero!'.ENDIF.2.不可捕捉的错误(通过ST22查看,在SAP系统中保存14天,可通过Keep功能保存更长时间).第六章数据库操作6.2.1表字段在数据字典中,每创建一个数据库表后,都将同时生成一个同名的结构化数据类型.6.2.2外部关键词外部关键词内容必须在其对应的约束表(check table)中存在,否则无法插入.6.2.3技术设定1.数据类型(data class):l APPL0(Master data),较少需要被修改的系统数据表,如员工个人信息.l APPL1(Transaction data),需要经常被修改的数据表,如产品库存量表.l APPL2(Organization and customizing),系统定制数据表,在系统安装后很少需要修改,如国家代码等.2.数量级别:0 0 to 6,6001 6,600 to 26,0002 26,000 to 100,0003 100,000 to 420,0004 420,000 to 34,000,0003.缓冲(Buffering)机制如果在缓冲设定中选择了Buffering switched on项,则需要设定其缓冲类型(有Full,Single-record和Generic三种).缓冲机制的意义在于首次查询时将数据表中的数据放入应用服务器缓冲区,以提高后续查询效率,要注意最好不要对经常需要的数据库表设置该机制,对于经常读取但很少更新或者通常只有在60秒后才可能被其他应用服务器程序修改的数据库表,开启缓冲机制可以上百倍地提高效率.4.Log data changes用于设定表中的数据修改时是否在系统日志中记录.6.2.4索引一个数据库表可以包含一个主索引(Primary Index)和多个附属索引(Secondary Indexes).主索引只包含表关键词和指向整个数据条目的指针,由系统自动生成并在添加数据库条目时进行维护.索引中的数据已经排序.6.3.1SELECT语句SELECT <result> FROM <source> INTO <target>[WHERE <condition>] [GROUP BY <fields>][HAVING <cond>] [ORDER BY <fields>].l HAVING子句用于限定ORDER BY子句中数据条目组的选择条件1.选择单行数据:l SELECT SINGLE * FROM tab INTO wa_tab WHERE <condition>.选择单行全部数据.l SELECT SINGLE field1 ... fieldn FROM tab INTO (wa_field1,...,wa_fieldn) WHERE <condition>.选择单行指定字段数据到指定工作区字段.l SELECT SINGLE *|field1 ... fieldn FROM tab INTO CORRESPONDING FIELDS OF wa_tab WHERE <condition>.将选择的值放入工作区中对应的字段中.6.3.3选择多行数据1.循环选择(DISTINCT去掉结果重复的行):SELECT [DISTINCT] ... .<statement block>ENDSELET.系统字段SY-DBCNT给读取的行计数.2.选择至内表:SELECT ... INTO|APPENDING [CORRESPONDING FIELDS OF] TABLE itab.其中INTO选项将复盖itab中的数据,如果不想复盖只想追加则用APPENDING.3.指定选择包大小(一次选择到内表的行数):SELECT * FROM tab INTO|APPENDING TABLE wa_tab PACKAGE SIZE n.<statement block>ENDSELET.6.3.4指定查询条件1.比较运算符:=,<,>,<>,<=,>=.2.范围限定运算符:WHERE ... f [NOT] BETWEEN g1 AND g2 ....3.字符比较运算符:WHERE ... f [NOT] LIKE g [ESCAPE h]...其中g 中通配符”_”用于替代单个字符,”%”用于替代任意字符串. ESCAPE 选项举例如下:SELECT ... WHERE city LIKE ‘edit#_%’ ESCAPE ‘#’.选择所有以”edit_”开始的城市.4.检查列表值:WHERE ... f [NOT] IN (g1,...gn)...5.检查空值: WHERE ... f IS [NOT] NULL...注:这里的NULL值不等同于初始值INITIAL6.检查选择表.l WHERE ... f [NOT] IN seltab...其中seltab为选择表,如选择屏幕中用户填充数据.l SELECT ... WHERE ( code = ‘01’ OR code = ‘02’ ) AND NOT (country = ‘usa’ ).:AND,OR,NOT可以按照任意顺序组合.l SELECT ... WHERE <condition> AND (itab).内表itab仅包含一个类型为C的字段,且最大长度为72.字段中内容不能使用变量.这种方式查询效率很低.6.3.5多表结合查询1.SELECT语句嵌套DATA:wa_carrid TYPE spfli-carrid,wa_connid TYPE spfli-connid,wa_carrname TYPE scarr-carrname.SELECT carrid connidFROM spfliINTO (wa_carrid,wa_connid)WHERE cityfrom = 'BOSTON'.SELECT carrnameFROM scarrINTO wa_carrnameWHERE carrid = wa_carrid.WRITE:/ wa_carrname.ENDSELECT.ENDSELECT.2.FOR ALL ENTRIES选项(比上面的嵌套要快)DATA: BEGIN OF wa_carrid,carrid TYPE spfli-carrid,END OF wa_carrid.DATA:wa_carrid_tab LIKE TABLE OF wa_carrid.DATA:BEGIN OF wa_carrname,carrid TYPE scarr-carrid,carrname TYPE scarr-carrname,END OF wa_carrname.SELECT carridFROM spfliINTO TABLE wa_carrid_tabWHERE cityfrom = 'BOSTON'.SELECT carrid carrnameFROM scarrINTO wa_carrnameFOR ALL ENTRIES IN wa_carrid_tab”相当于循环输出内表在WHERE子句中出现的WHERE carrid = wa_carrid_tab-carrid.”字段的值WRITE:/ wa_carrname-carrid, wa_carrname-carrname.ENDSELECT.注:此子句中不能使用LIKE,BETWEEN,IN,ORDER BY.3.使用视图:可先用SE11创建视图然后查询,效率更高.4.结合查询SELECT ... FROM table [INNER] JOIN jointab1 [AS alias1] ON <cond> <options>..[INNER] JOIN jointab2 [AS alias2] ON <cond> <options>...WHERE <cond>...内连接,条件间只能用AND连接,也可放入WHERE子句.SELECT ... FROM table LEFT [OUTER] JOIN jointab1 [AS alias1] ON <cond> <options>..左连接,在ON附加项中,只能使用”=”操作符.不能在WHERE子句中对结合数据表中的字段进行条件限定.5.子查询(没有INTO子句,不能结合ON同时出现,可嵌套)l SELECT ... FROM scar INTOWHERE EXIST ( SELECT * FROM spfliWHERE carrid = scarr-carridAND cityfrom = ‘BOSTON’ ).l ...WHERE city IN ( SELECT cityfrom FROM spfli WHERE ...只返回单个字段.l ...WHERE city = ( SELECT cityfrom FROM spfli WHERE ...单行返回结果.l ... WHERE city > ALL|ANY|SOME ( SELECT cityfrom FROM spfli WHERE ...多行返回值.6.3.6组合查询结果1.总计功能SELECT MAX|MIN|SUM|AVG|COUNT( [DISTINCT] f1 ) [AS a1]...其中DISTINCT选项将在统计之前先排除相同的选择结果.2.分组总计SELECT f1 [AS a1] ... MAX|MIN|SUM|AVG|COUNT( [DISTINCT] fm ) [AS am] ...INTO (s1,...,sm...)|CORRESPONDING FIELDS OF itab...GROUP BY f1...注:分组总计必须指定查询字段或使用INTO CORRESPONDING FIELDS OF附加项,使用后者时需要通过AS后面的别名将总计结果存放在与别名同名的字段中.3.指定分组条件SELECT f1 [AS a1] ... MAX|MIN|SUM|AVG|COUNT( [DISTINCT] fm ) [AS am] ...INTO (s1,...,sm...)|CORRESPONDING FIELDS OF itab...GROUP BY f1...HAVING <cond>.用于对分组总计选出的数据进行二次筛选.4.排序(SQL Trace工具查看数据库索引)l ...ORDER BY PRIMARY KEY.系统将按主关键词升序排序.l ...ORDER BY f1 [ASCENDING|DESCENDING] ...指定字段,默认升序.6.3.7其它格式说明l TABLSE dbtab.声明与数据库表同名同结构的工作区,是一种结构体对象,不是内表.l dbname = ‘EKBE’.SELECT f1... FROM (dbname) INTO (s1,...)...动态指定数据库表,注意数据库表名必须大写.l SELECT|UPDATE ... FROM dbtab CLIENT SPECIFIED WHERE mandt BETWEEN ‘100’ AND ‘103’.用CLIENT SPECIFIED选项取消系统自动处理当前集团数据表功能,同时就可以在WHERE子句中指定需要读取的集团.l SELECT ... FROM dbtab BYPASSING BUFFER...取消TABLE技术设定中设定的缓冲机制,另,DISTINCT附加项与结合选择,总计选择,IS NULL条件,子查询,以及GROUP BY和ORDER BY同时使用时,也将自动忽略缓冲设定.l SELECT ... FROM dbtab UP TO n ROWS...只选取满足条件的n行数据,如果n为0,则选取所有满足条件的数据,如果同时使用ORDER BY子句,则系统首先先出所有满足条件的数据并排序,然后将头n行作为选择结果.l GET RUN TIME FIELD f.系统返回从程序开始后的毫秒数,其中f 为I类型数据.6.3.8使用光标(多个光标可指向同一个选择)DATA: cur TYPE cursor.OPEN CURSOR cur FOR SELECT carrid FROM spfli WHERE cityfrom = 'BOSTON'.打开光标.DO.FETCH NEXT CURSOR cur INTO (wa_carrid_tab-carrid).相当于循环读取OPEN CURSOR语句生成的结果集中的下一行数据.APPEND wa_carrid_tab.或者FETCH NEXT CURSOR cur INTO TABLE wa_carrid_tab.整体读取放放内表.IF sy-subrc <> 0.如果FETCH语句没有读取任何行, sy-subrc返回4,否则返回0.CLOSE CURSOR cur.关闭光标.EXIT.ENDIF.ENDDO.在SELECT语句中,数据从数据库中以大小为32KB的数据包传递至应用服务器,并通过INTO子句传至ABAP程序.6.4更新数据数据库操作结束后通过SY-SUBRC返回标识代码,如果操作成功,返回0,另SY-DBCUT还将返回实际操作的数据行数.6.4.1 INSERT语句(数据库表必须是可维护状态)l INSERT INTO dbtab|view VALUES wa.插入单行,视图数据必须来自同一个表.l INSERT INTO dbtab|view FROM wa. 插入单行,视图数据必须来自同一个表.l INSERT dbtab FROM TABLE itab.当有一条数据插入失败,系统不更新任何数据.l INSERT dbtab FROM TABLE itab ACCEPTING DUPLICATE KEYS.如果出现关键词字相同条目,SY-SUBRC返回4,并跳过该条目,并更新其它条目.6.4.2 UPDATE语句l UPDATE dbtab SET f1 = g1 ... fn = gn WHERE <fix_key>.只能更新非关键词. 只要更新一行,SY-SUBRC返回0.l UPDATE dbtab FROM wa.根据工作区中的关键词更新对应的条目.l UPDATE dbtab FROM TABLE itab.根据内表关键词批量更新数据.6.4.3 MODIFY语句l MODIFY dbtab FROM wa.添加或更新单行.l MODIFY dbtab FROM TABLE itab.添加或更新多行.6.4.5 DELETE语句l DELETE FROM dbtab WHERE <cond>.只要删除一行,SY-SUBRC返回0.l DELETE dbtab FROM wa.l DELETE dbtab [CLIENT SPECIFIED] FROM TABLE itab.如果有一行不能删除,系统继续处理下一行,成功删除内表中所有行时,SY-SUBRC返回0.如果内表为空,会删除所有数据,且SY-SUBRC和SY-DBCNT都返回0.6.5数据一致性6.5.1 SAP LUW与DB LUW1.LUW概念:在SAP系统中,两个数据一致状态中的时间间隔为LUW(Logical Unit of Work),每一个LUW都需要以一个提交(COMMIT)或者返回(ROLLBACK)作为结束标志.如果以提交操作结束则进行所有更新操作,而返回操作则取消所有数据库表的更改.2.数据库LUW:这是底层数据库自身提供的保持数据一致性的机制,与SAP系统无关,对于ABAP程序来说,主要的问题在于如何确定数据库的LUW的触发时机,一个工作过程总是在下述情况下结束一个数据库LUW并隐式地进行数据库提交:l 当一个对话步骤(Dialog step)结束,即显示一个新屏幕给用户时.l 在另一个工作过程继续程序的执行,这一般出现在RFC(远程功能模块)的调用或返回过程中.相应地,下列情况将使数据库隐式地进行返回操作:l 当前ABAP程序出现运行错误.l 一个ABAP程序因类型A或X的消息而导致中止.3.SAP LUW:一个SAP LUW可以包含多个对话步骤,即多个数据库LUW,但一个OPEN SQL语句不能被分隔为几个对话步骤,即通过SAP LUW可以将多个数据库LUW进行捆绑,并保存整体初始状态,不进行真正的数据库修改,当SAP LUW中的最后一个数据库LUW结束时,再进行整体修改,或者整体取消操作.SAP LUW提供两种具体数据库LUW捆绑机制:l 在定义FUNCTION时将其定义为Update module,同时在调用时用如下方式:CALL FUNCTION ...IN UPDATE TASK.则该模块不是马上被执行,而是被放置于应用服务器中的一个特殊的更新工作过程(Update work process)中,因此可以将多个分布在不同对话过程中的类似模块捆扎在一起,当SAP LUW结束时,确保所有模块被同时成功执行或整体放弃,因此可通过该方式封装分布在不同对话过程中的所有数据库更新操作.一个SAP LUW显式提交方式:COMMIT WORT [AND WAIT].该语句结束SAP LUW并触发更新工作过程,该过程在同一个数据库LUW中进行更新操作,因而数据库LUW此时可以替代SAP开始进行一致性控制.这些进行更新工作的FUNCTION可以被设为同步(加AND WAIT)或异步模式.即是否要等到更新任务完成后才继续执行后续语句.l PERFORM ... ON COMMIT [LEVEL n].效果与上面相同,此方法更高效,但此时子程序不能传递参数. LEVEL表示优先级,n取整数.n越小越先执行.l ROLLBACK WORK.控制SAP LUW整体返回,在实现SAP LUW。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一数据类型和对象在ABAP中,可以使用与标准数据声明相似的语法处理数据类型,而与数据对象无关。
在程序中必须声明要使用的全部数据对象。
声明过程中,必须给数据对象分配属性,其中最重要的属性就是数据类型。
1.1 基本数据类型对算术运算的非整型结果(如分数)进行四舍五入,而不是截断。
类型 P 数据允许在小数点后有数字。
有效大小可以是从 1 到 16 字节的任何值。
将两个十进制数字压缩到一个字节,而最后一个字节包含一个数字和符号。
在小数点后最多允许14 个数字。
1.2 系统定义的数据对象1.3 确定数据对象的属性如果要查明数据对象的数据类型,或者要在程序的运行期间使用其属性,可使用DESCRIBE 语句。
语法如下:DESCRIBE FIELD <f> [LENGTH <l>] [TYPE <t> [COMPONENTS <n>]][OUTPUT-LENGTH <o>] [DECIMALS <d>][EDIT MASK <m>].将由语句的参数指定的数据对象<f>的属性写入参数后的变量。
DESCRIBE FIELDS 语句具有下列参数:1.3.1 确定字段长度要确定数据对象的长度,利用DESCRIBE FIELD 语句使用 LENGTH 参数,如下所示:DESCRIBE FIELD <f> LENGTH <l>.系统读取字段<f>的长度,并将值写入字段<l>。
1.3.2确定数据类型要确定字段的数据类型,利用DESCRIBE FIELD 语句使用 TYPE 参数,如下所示:DESCRIBE FIELD <f> TYPE <t> [COMPONENTS <n>].系统读取字段<f>的数据类型,然后将值写入字段<t>。
除返回预定义数据类型 C、D、F、I、N、P、T 和 X 外,该语句还返回2 s 对于带前导符号的两字节整型2 b 对于无前导符号的一字节整型2 h 对于内表2 C 对于组件中没有嵌套结构的结构2 C 对于组件中至少有一个嵌套结构的结构1.3.3确定输出长度要确定字段的输出长度,利用 DESCRIBE FIELD 语句使用 OUTPUT-LENGTH 参数,如下所示:DESCRIBE FIELD <f> OUTPUT-LENGTH <o>.系统读取字段<f>的输出长度,并将值写入字段<o>。
1.3.4确定小数位若要确定类型P字段的小数位的个数,利用 DESCRIBE FIELD语句使用 DECIMALS参数,如下所示:DESCRIBE FIELD <f> DECIMALS <d>.系统读取字段<f>的小数个数,并将值写入字段<d>。
1.3.5 确定转换例程要确定 ABAP/4 词典中某字段的转换例程是否存在,如果存在,名称是什么,利用DESCRIBE FIELD 语句使用 EDIT MASK 参数,如下所示:DESCRIBE FIELD <f> EDIT MASK <m>.如果 ABAP/4 词典中字段<f>的转换例程存在,则系统将其写入字段<m>,然后将系统字段 SY-SUBRC 中的返回代码设为 0。
可以像下面所显示的那样,在 WRITE 语句中将字段<m>直接用作格式模板:WRITE <f> USING EDIT MASK <m>.如果字段<f>没有转换例程,则系统将返回代码设为 4。
二数据输出到屏幕2.1 在屏幕上定位Write输出通过制定字段名称前面的格式规范,可以在屏幕上定位 WRITE 语句的输出:WRITE AT [/][<pos>][(<len>)] <f>.此处3 斜线‘/’表示新的一行3 <pos>是最长为三位数字的数字或变量,表示在屏幕上的位置3 <len>是最长为三位数字的数字或变量,表示输出长度如果格式规范只包含直接值(即,不是变量),可以忽略关键字 AT。
2.2 格式化选项对 WRITE 语句,可以使用不同的格式化选项。
WRITE ....<f><选项>.(1)所有数据类型的格式化选项:(2)数字字段的格式化选项:(3)日期字段的格式化选项:2.3输出符号和图标使用下列语法,可以在屏幕上输出符号和 R/3 图标:WRITE <symbol-name> AS SYMBOL.WRITE <icon-name> AS ICON.符号和图标的名称(<符号名>和<图标名>)是定义系统的常量,这些常量在包含程序<SYMBOL>和<ICON>(尖括号是名称的一部分)中指定。
这些包含程序也包含符号和图标的简短说明。
输出符号和图标最简单的方法是使用语句结构。
要使符号和图标对程序可用,必须在程序中输入恰当的包含程序或更易理解的包含程序<LIST>。
2.4 输出线和空行(1)水平线用下列语法,可以在输出屏幕上生成水平线:ULINE [AT [/][<pos>][(<len>)]].它等同于WRITE [AT [/][<pos>][(<len>)]] SY-ULINE.AT 后的格式规范,与在屏幕上定位 WRITE 输出中为 WRITE 语句说明的格式规范完全一样。
如果没有格式规范,系统则开始新的一行,并用水平线填充该行。
否则,只按指定输出水平线。
生成水平线的另一种方法,是在 WRITE 语句中键入恰当数量的连字符,如下所示:WRITE [AT [/][<pos>][(<len>)]] '-----...'.(2)垂直线用下列语法,可以在输出屏幕上生成垂直线:WRITE [AT [/][<pos>]] SY-VLINE.或WRITE [AT [/][<pos>]] '|'.(3)空行用下列语法,可以在输出屏幕上生成空行:SKIP [<n>].该语句从当前行开始,在输出屏幕上生成<n>个空行。
如果没有指定<n>的值,就输出一个空行。
(4)要将输出定位在屏幕的指定行上,使用:SKIP TO LINE <n>.该语句允许将输出位置向上或向下移动。
2.5 将字段内容作为复选框输出使用下列语法,可以将字段的第一个字符,作为复选框输出到输出屏幕上:WRITE <f> AS CHECKBOX.如果字段<f>的第一个字符是一个“ X”,就显示复选框已填充。
如果字段<f>的第一个字符是 SPACE,就显示复选框为空。
该语句创建的复选框,默认状态是可输入的。
就是说,用户可以通过单击鼠标来填充它们或使其为空。
三赋值在 ABAP/4 中,可以在声明语句和操作语句中给数据对象赋值。
在声明语句中,将初始值赋给声明的数据对象。
为此,可以在 DATA、常量或 STATICS 语句中使用 VALUE 参数。
要在操作语句中给数据对象赋值,可以使用:6 MOVE 语句和 WRITE TO 语句,对应于赋值运算符(=)3.1用MOVE 赋值3.1.1 基本赋值操作要将值(文字)或源字段的内容赋给目标字段,可以使用 MOVE语句或赋值运算符(=)。
MOVE 语句的语法如下所示:MOVE <f1> TO <f2>.MOVE 语句将源字段<f1>的内容传送给目标字段<f2>。
<f1>可以是任何数据对象。
<f2>必须是变量,不能是文字或常量。
传送后,<f1>的内容保持不变。
赋值运算符(=)的语法如下所示:<f2> = <f1>.MOVE 语句和赋值运算符功能相同。
3.1.2 用指定偏移量赋值可以在每条 ABAP/4 语句中为基本数据类型指定偏移量和长度。
在这种情况下,MOVE 语句语法如下:MOVE <f1>[+<o1>][(<l1>)] TO <f2>[+<o2>][(<l2>)].将字段<f1>从<o1>+1 位置开始且长度为<l1>的段内容赋给字段<f2>,覆盖从<o2>+1 位置开始且长度为<l2>的段。
在 MOVE 语句中,所有偏移量和长度指定都可为变量。
3.1.3 在字符串组件之间赋值描述的 MOVE 语句赋值方法适用于基本数据对象和结构化数据对象。
另外,还有一种MOVE 语句变体,允许将源字段串组件内容复制到目标字段串组件中。
语法如下:MOVE-CORRESPONDING <string1> TO <string2>.该语句将字段串<string1>组件的内容赋给有相同名称的字段串<string2>组件。
对于每对名称,系统都执行 MOVE 语句,如下所示:MOVE STRING1-<component> TO STRING2-<component>.系统分别执行所有必要类型转换。
该处理不同于包括整个字段串的赋值。
在这种情况下,应用不兼容的字段串和基本字段所述的转换规则。
3.2 用WRITE TO 赋值要将值(文字)或源字段内容写入目标字段,可以使用 WRITE TO 语句:WRITE <f1> TO <f2> [<option>].WRITE TO 语句将源字段<f1>内容写入目标字段<f2>。
<f1>可以是任何数据对象,<f2>必须是变量,不能是文字或常量。
写入后,<f1>内容保持不变。
对于<option>,可以使用 WRITE 语句的所有格式化选项(UNDER 和 NO-GAP 除外)。
WRITE TO 语句总是检查用户主记录中的设置。
例如,这些设置指定是将小数点显示为句号(.),还是逗号(,)。
WRITE TO 语句并不遵循类型转换中所述的转换规则。
目标字段解释为类型 C 字段。