ABAP学习基本知识重点总结ABAP学习知识总结2015-1-1事务码:ST22 查看报错信息2015-1-14abap基本语法语法特点关键字不区分大小写内表:可变长度的数据对象OPEN SQL代码type-pools:slis 类型组用于需要用ABAP已经预定义好的类型组(结构)occurs l 结构体后面老式定义类表的方法DATA:gt_fieldcat type 类表参照类表生成类表xx2 like line of xx1 参照参照XX1创建工作区XX2gt_fieldcat type 结构参照结构生成工作区(结构)statrt -of-selectionperform frm_get_data 调用方法end statrt -of-selectionform frm_get_data.方法申明form frm_1.//做什么作用form frm_2.endform.into correspoding fields of tables_bukergt_ek[]表示类表binary search;二分查找办法sy-subrc=0 0:成功4:错误8:数据太多2015-1-15报表开发自定义程序Y或者Z开始Z_SD_RPT_0001 销售模块报表corresesponding fields of 取出的数据自动匹配内表里面的属性赋值if 内表is not nullMESSAGE '输入的条件错误' type 'E' E表示ERRORleave list processing 自动退出到输入频幕exit.查询数据的时候加入条件设置fieldscat 标题avl函数i_callback_program =sy-repid 调用系统当前的执行程序_PF_STATUS:工具栏USER_command:工具栏按钮操作指令类似于事件TOP:写入表头html以HTML样式写入表头IS_LAYOUT:布局IT_FIELDCAT:刚刚定义的内表抬头显示字段的名称IT_EXCL```:排除不需要用的表头I_SAVE:布局IT_EVENTS:时间IS_PRINT:调用打印*IT_ALV_GRAPHIS:图形资料,展示图形TABLEST_OUTTAB:需要展示的数据内表频幕ppo pAi 循环2015-1-16SE18:查看se19:实现SE24:查找BODY增强CL_1i3ui12uiiSMOD:SAP增强增强:增加标准程序所有现在无法满足的功能四代增强1、直接修改标准程序缺点:问题不可控,工作量相当大2、SAP预留可写代码的包含文件标准程序调用优势:SAP提供预留接口,不会对其他模块造成影响,缺点:无法重用3、bodi增强面向对象继承4、面向对象全部自定义ALV_SWITCH_···每次都要调用的BODI 不能实例化其他都能实例化MCHB~MATNRMAKT~MAKTXMCHB~LGORTMARA~MEINSMCHB~CHARGMCHB~ERSDAMCHB~ERNAMMCHB~CLABSMCHB~CINSMINTO CORRESPONDING FIELDS OF GT_STOCKWHERE MCHB~WERKS IN S_WERKSAND MCHB-MATNR IN S_MATNRAND MAKT-MAKTX LIKE S_MAKTX.2015-7-15"设置MBLNR的帮助按钮AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_MBLNR."权限对象检查AUTHORITY-CHECK OBJECT 'M_MSEG_WWA'ID 'WERKS' FIELD P_WERKSID 'ACTVT' FIELD '01'.PERFORM FRM_HELP_MBLNR USING P_MBLNR.2015-7-16选择屏幕开发.选择屏幕分类:ABAP用户通过屏幕操作来实现与SAP数据的交互, 而SAP 的屏幕开发一般分为两种:第一种是通过SAP ABAP 语法创建屏幕元素, 称之为选择屏幕.第二种是通过SAP的屏幕编辑器开发.1. 屏幕元素创建的语法.SELECT-OPTIONS: 对象名称FOR 参考对象.PARAMETERS: 对象名TYPE/LIKE 参考对象.例如:TABLES: mara.SELECT-OPTIONS: s_matnr for mara-matnr.PARAMETERS: s_matnr like mara-matnr.PARAMETERS: s_matnr type matnr.SELECT-OPTIONS 在程序中生成一个含有四个组件的内表---选择表, 该表具体格式如下:DATA: BEGIN OF seltab OCCURS 0,SING(1),OPTION(2),LOW LIKE f,HIGH LIKE F,ENND OF seltab.SIGN 是标志位, 允许值为I 和E, 其意义为确定储存在字段OPTION 中的运算符是否需要取反, I 表示"包含", E 表示"排除", 等于在逻辑表达式中加一个NOT.OPTION 包含选择运算符. 如果HIGH 字段为空, 则可以填充EQ(=), NE(<>), GT(>), GE(>=), LT(<), LE(<=), CP, NP. 其中CP 和NP 只有当在输入字段中使用了通配符("*"或"+")时它们才有效.如果HIGH 字段不为空, 则可以使用BT (位于) 和NB(不位于), 其功能相当于BETWEEN 和NOT BETWEEN.选择表可以进行多行选择标准的设定.基本规则是: 如果选择表为空, 则选择所有的数据; 如果选择表有多行, 则将所有的SIGN 为"I" 数据选出后, 再排除掉其中所有的满足标志为"E" 的数据行.具体规则如下:如果选择表为空, 即用户未输入任何数据, 则条件 f IN seltab 恒为真.如果选择表中只包含SIGN 为I 的行"i1" ... , "in", 则相当于条件( i1 OR ... OR in ) 的组合.如果选择表中只包含SIGN 为 E 的行"e1" ... , "em", 则相当于条件( NOT e1 ) AND ... AND ( NOT em) 的组合.如果选择表中即包含SIGN 为I 的行"i1" ... , "in", 又包含SIGN 为E 的行"e1" ..., "em" ,则相当于条件(i1 OR ... OR in ) AND ( NOT e1 )AND ... AND ( NOT em) 的组合.动态定义输入域的参考对象.DATA: name TYPE string.SELECT-OPTIONS: s_name for (name).AT SELECTION-SCREEN OUTPUT.name = 'MARA-MATNR'.2. 屏幕输入域显示参数控制.OBLIGATORY 必输项控制.NO-DISPLAY 显示控制.VISIBLE LENGTH vlen 显示长度控制.NO-EXTENSION 多行输入控制. 限制SELECT-OPTIONS 多行输入.NO-INTERVALS. 输入范围控制.MODIFY ID modid 编辑组控制. 该参数可以将所定义的屏幕对象进行分组, 以方便在程序运行中对分组的对象属性进行统一修改及控制.VALUE CHECK 进行值检查. 如果参数字段参照数据字典中的类型定义, 可以使用该选项检查用户输入值是否符合该字段的约束表中的数据或者是否属于数据字典中定义的值列表, 否则系统将给出错误消息.MEMORY ID pid.AS CHECKBOX. 创建复选框.RADIOBUTTON GROUP radi. 创建单选按钮组.PARAMETERS <对象名> AS LISTBOX VISIBLE LENGTH vlen. 创建下拉列表.SELECT-OPTIONS: p1 FOR mara-matnr MODIF ID g1,p2 FOR mara-matnr MODIF ID g1,p3 FOR mara-matnr MODIF ID g2,p4 FOR mara-matnr MODIF ID g2.AT SELECTION-SCREEN OUTPUT.LOOP AT SCREEN.IF NOT screen-group1 IS INITIAL.IF screen-group1 = 'G2'.screen-input = 0.screen-invisible = 0.MODIFY SCREEN.ENDIF.ENDIF.ENDLOOP.******************************************下拉列表.PARAMETER: p_lang(20) AS LISTBOX VISIBLE LENGTH 22.AT SELECTION-SCREEN OUTPUT.PERFORM setlist.FORM setlist .TYPE-POOLS vrm.DATA values TYPE vrm_values WITH HEADER LINE.values-key = 'CHINESE'.values-text = '中国人'.APPEND values.values-key = 'AMERICAN'.values-text = '美国人'.APPEND values.CALL FUNCTION 'VRM_SET_VALUES'EXPORTINGid = 'P_LANG'values = values[]EXCEPTIONSid_illegal_name = 1OTHERS = 2.ENDFORM.3. 输入值的控制.控制输入默认值. SELECT-OPTIONS, Default val1 [TO val2] [OPTION opt] [SIGN sgn].DEFAULT val1. 控制PARAMETER 对象输入的默认值.LOWER CASE 容许输入小写字母. SAP 所有屏幕字段输入后都会将字母默认转换为大写, 加上该参数后允许输入小写字母.MATCHCODE OBJECT search_help. 为屏幕对象加上指定的F4 帮助.MEMORY ID pid 定义SELECT-OPTIONS 内存参数. 可以将屏幕对象输入的值保存到指定的内在参数中, 通过GET parameter 方法可以直接从内存读取该对象的值.DATA: s_date TYPE d.SELECT-OPTIONS: d1 FOR sy-datum MEMORY ID m1 NO INTERVALS.START-OF-SELECTION.GET PARAMETER ID 'M1' FIELD s_date.WRITE s_date.4. 其它选择屏幕元素.SELECTION-SCREEN SKIP [n]. 产生空行.SELECTION-SCREEN ULINE [[/]jpos(len)]. 在选择屏幕中给一行或几行中的一部分加下划线. 其中"/" 用于换行控制.SELECTION-SCREEN COMMENT [/]pos(len) comm [ FOR FIELD f]. 如果使用FOR FIELD f. 则该注释分配给参数或选择标准f. 如果用户在该元素f的注释上请求帮助(F1), 则系统显示分配给字段f的帮助文本. SELECTION-SCREEN COMMENT /1(20) text-t01. ?组合选择屏幕元素. SELECTION-SCREEN BEGIN OFLINE. ..........SELECTION-SCREEN END OF LINE.这些元素将出现在屏幕的同一行中.SELECTION-SCREEN BEGIN OF BLOCK block [WITH FRAME [TITLE title]] [NOINTERVALS]. .........SELECTION-SCREEN END OF BLOCK block.5. 屏幕对象的F1/F4输入帮助功能.1). HELP-REQUEST [ FOR LOW|HIGH ]. 字段的F1 帮助功能.当在SAP选择屏幕的字段中按下F1 键时, 可以调用自定义的程序或系统帮助文件. F1 帮助可以通过ABAP 事件AT SELECTION-SCREEN 来控制, 在自定义程序中, 可以通过调用系统标准函数HELP_OBJECT_SHOW 或HELP_OBJECT_SHOW_FOR_FIELD 来实现.SELECT-OPTIONS: s_date FOR sy-datum.AT SELECTION-SCREEN ON HELP-REQUEST FOR s_date-low.PERFORM show_f1.FORM show_f1 .DATA: t_link LIKE STANDARD TABLE OF tline WITH HEADER LINE.CALL FUNCTION 'HELP_OBJECT_SHOW'EXPORTINGdokclass = 'DE'doklangu = sy-langudokname = 'SYDATUM'TABLESlinks = t_link .ENDFORM.2). VALUE-REQUEST [ FOR LOW|HIGH ]. 字段的F4 键帮助.在指定的字段按F4 键时, 可以调用自定义的程序或系统帮助数据. 也是通过AT SELECTION-SCREEN来调用. 与F1 不同的是, F1 是进行信息提示, 而F4 是显示填充值的列表. 可以调用F4IF_FIELD_VALUE_REQUEST 参照某一个具体表字段来维护F4 帮助.AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_date-low.PERFORM show_f4.FORM show_f4 .CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'EXPORTINGtabname = 'SYST' "参照表fieldname = 'DATUM' "参照字段dynpprog = sy-repiddynpnr = sy-dynnrdynprofield = 'S_DATE'. "解发事件的屏幕对象名称.IF sy-subrc <> 0.* Implement suitable error handling hereENDIF.ENDFORM.AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_file1.PERFORM get_file_name USING s_file1 'O'.FORM get_file_name USING p_path LIKE rlgrap-filename mode TYPE c.DATA tmp_filename LIKE rlgrap-filename.CALL FUNCTION 'WS_FILENAME_GET'EXPORTINGdef_path = 'D:\ 'mask = ',*.*,*.*.'mode = modeIMPORTINGfilename = tmp_filenameEXCEPTIONSinv_winsys = 1no_batch = 2selection_cancel = 3selection_error = 4OTHERS = 5.IF sy-subrc = 0.p_path = tmp_filename.ENDIF.ENDFORM.6. 在屏幕上输出自定义文本及图标.TYPE-POOLS: icon.SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN COMMENT (12) mytext.PARAMETER: name LIKE sy-uname.SELECTION-SCREEN END OF LINE.INITIALIZATION.CONCATENATE icon_manager '输入人员编号' INTO mytext.在文本元素中加入图标.每个图标都由一个两位长度的代码进行标识, 在字符前面加上"@"符号表示对该图标进行引用. 可以通过数据字典查看TYPE Group: ICON, 通过ICON NAME 寻找对应的ID 列. 或通过程序RSTXICON 来查看SAP中所有图标及代码的对应关系列表.7. 在屏幕中实现按钮效果.TYPE-POOLS: icon.TABLES: sscrfields. " 引用屏幕字段属性" 创建屏幕按钮对象SELECTION-SCREEN: PUSHBUTTON 2(10) but1 USER-COMMAND cli1,PUSHBUTTON 20(30) but2 USER-COMMAND cli2 VISIBLE LENGTH 10. INITIALIZATION.CONCATENATE icon_message_information '按钮1' INTO but1.CONCATENATE icon_message_information '按钮2' INTO but2.AT SELECTION-SCREEN.CASE sscrfields. " 捕捉按钮功能代码, 也可以用SY-UCOMM.WHEN 'CLI1'.MESSAGE '按钮1事件' TYPE 'I'.WHEN 'CLI2'.MESSAGE '按钮2事件' TYPE 'I'.ENDCASE.8. 子屏幕的创建.子屏幕分为两种, 一种为Include Screen, 可以通过Report 端程序直接调用; 一种为SubScreen, 需要通过Screen Painter 所创建屏幕引用.Include Screen 相关语法如下:PARAMETERS: type as CHECKBOX.CALL SELECTION-SCREEN 123 STARTING AT 10 10 ENDING AT 80 10.SELECTION-SCREEN BEGIN OF SCREEN 123 as WINDOW TITLE text-t01.PARAMETERS: matnr LIKE mara-matnr.PARAMETERS: werks like marc-werks.SELECTION-SCREEN END OF SCREEN 123.9. 在工具栏上新增功能按钮.按钮的定义保存在结构体SSCRFIELDS 中, n 为一个整数类型的序号, 例如当n 等于1时, 按钮的描述保存在字段SSCRFIELDS-FUNCTXT_01 中, 按钮的功能代码将默认赋值为"FC01", 保存在字段SSCRFIELDS-UCOMM 中.TABLES: sscrfields.PARAMETERS: parm LIKE mara-matnr.SELECTION-SCREEN FUNCTION KEY 1.SELECTION-SCREEN FUNCTION KEY 2.INITIALIZATION.MOVE 'BUTTON1' TO sscrfields-functxt_01.MOVE 'BUTTON2' TO sscrfields-functxt_02.AT SELECTION-SCREEN.IF SSCRFIELDS-UCOMM = 'FC01'.MESSAGE '按钮1事件' TYPE 'I'.ELSEIF SSCRFIELDS-UCOMM = 'FC02'.MESSAGE '按钮2事件' TYPE 'I'.ENDIF.10. 在屏幕上创建页签.SELECTION-SCREEN BEGIN OF TABBED BLOCK FOR n lines.每个页签都是由一个单独的子屏幕控制, n 代表分页控件的高度, 屏幕载入进必须先通过INITIALIZATION 事件对其属性初始化.TABLES: mara." 定义子屏幕100SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE text-t01.SELECT-OPTIONS: mat1 FOR mara-matnr NO INTERVALS.SELECTION-SCREEN SKIP 1.PARAMETERS: chk1 AS CHECKBOX DEFAULT 'X'.SELECTION-SCREEN END OF BLOCK bk1.SELECTION-SCREEN END OF SCREEN 100." 定义子屏幕200SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.PARAMETERS: mat2 LIKE mara-matnr.SELECTION-SCREEN END OF SCREEN 200." 定义一个TAB空间, 取名为MYTAB, 控件高为5, 共有两个页签." 两个页签的功能代码分别为PUSH1, PUSH2.SELECTION-SCREEN: BEGIN OF TABBED BLOCK mytab FOR 5 LINES,TAB (20) button1 USER-COMMAND push1,TAB (20) button2 USER-COMMAND push2,END OF BLOCK mytab." 为TAB控件分配初始化值.INITIALIZATION.button1 = text-010.button2 = text-020.mytab-prog = sy-repid.mytab-dynnr = 100.AT SELECTION-SCREEN.CASE sy-ucomm.WHEN 'PUSH1'.mytab-dynnr = 100.mytab-activetab = 'BUTTON1'.WHEN 'PUSH2'.mytab-dynnr = 200.mytab-activetab = 'BUTTON2'.ENDCASE.屏幕元素属性的控制.屏幕中所有的对象都有独立的属性, 在SAP程序执行中, 可以通过系统变量SCREEN来读取每个屏幕对象的具体属性, SCREEN是一个标准的结构体, 其常用属性及参数如下:NAME: 屏幕对象的名称.INPUT: 设置屏幕输入域对象不否允许输入值( 0: 不可输入, 1: 可输入), 默认值为 1. ?INVISIBLE: 设置对象在输出到屏幕后时是否可见, ( 0: 可见, 1: 不可见).PARAMETERS: mat1 like mara-matnr.INITIALIZATION.LOOP AT SCREEN.IF screen-name = 'MAT1'.screen-input = '0'.screen-invisible = '0'.ENDIF.MODIFY SCREEN.ENDLOOP.选择屏幕事件.选择屏幕的处理也是通过事件驱动的, 这些事件是一些预定义的ABAP代码块. 选择屏幕中不存在任何由程序员设定的流逻辑(普通屏幕的行为由流逻辑进行控制),取而代之的是在程序中定义一系列相关的事件块, 由运行环境在处理选择屏幕的过程中触发. 选择屏幕中各个事件在程序中出现的位置是任意的, 与其调用顺序无关. 选择屏幕事件将出现在INITIALIZATION 事件和START-OF-SELECTION 事件中间; 对于使用CALL SELECTION-SCREEN 调用的自定义选择屏幕, 这些选择屏幕将出现在当前处理块中.所有的选择屏幕事件都使用AT SELECTION SCREEN 语句引导.INITIALIZATION 事件.该事件在屏幕未显示之前执行, 对程序设置值及屏幕元素进行初始化赋值.TOP-OF-PAGE.创建新的Write List 时触发.TOP-OF-PAGE DURING LINE-SELECTION.An event block is triggered for the corresponding events during the creation of details lists.You have to use system fields like sy-lsind to distinguish between the individual details lists.START-OF-SELECTION 事件.该事件由程序单击执行按钮时触发.END-OF-SELECTION 事件.该事件应用于所有数据处理完成, 即START-OF-SELECTION相关事件执行完成,但输出屏幕还未显示之前.在实际开发中主要用于一些执行结果的检验等, 其输出数据叠加于同一输出屏幕中.AT SELECTION-SCREEN OUTPUT事件.选择屏幕的PBO事件, 在每次选择屏幕被调用之前触发, 可以在其中进行选择屏幕输出之前的准备工作, 比如在程序中动态地对选择屏幕元素的输出属性进行修改.AT SELECTION-SCREEN 事件.是选择屏幕的PAI事件, 在用户输入的所有数据都被传输到程序中之后被触发, 也是选择屏幕中最后被触发的事件. 在选择屏幕中, 用户回车, 选择某GUI按钮,功能键或者菜单键之后, 如果系统检查无误, 将触发该事件.AT SELECTION-SCREEN ON field 事件.是针对选择屏幕中某字段输入的PAI事件, 当该字段值被传递给程序时被触发, 可以应用于该字段本身的正确性检查, 如果系统提示错误, 则可以在该字段中重新输入, 此时其它字段元素呈灰色, 不接受输入.AT SELECTION-SCREEN ON BLOCK block 事件.是针对选择屏幕某元素区域输入的PAI事件, 当该区域内的所有字段的值被传递给程序时被触发, 可以应用于该区域元素整体的正确性检查.AT SELECTION-SCREEN ON RADIOBUTTON GROUP rad1.作为单选按钮, 必须整体进行输入检查, 不能单独使用ON field选项进行.AT SELECTION-SCREEN ON seltab.AT SELECTION-SCREEN ON END OF seltab.这两个事件只有在使用多行选择对话框时才可能被触发, 其中ON seltab 用于用户逐行输入后的正确性检查, 而ON END OF seltab 用于整个选择表输入结束后各行的检查.AT SELECTION-SCREEN ON HELP-REQUEST FOR field.AT SELECTION-SCREEN ON VALUE-REQUEST FOR field.选择屏幕中的POH和POV事件, 当光标位于某屏幕字段时, 用户按下F1和F4键, 将触发ONHELP-REQUEST 和ON VLAUE-REQUEST事件.AT LINE-SELECTION.在Write List 中双击某行触发.屏幕事件的中止.EXIT: 中止当前事件模块.STOP: 强制中止所有事件.REJECT: 应用于读取逻辑数据库的程序.* 设置MBLNR的帮助按钮调用MB51来作为选择屏幕上的物料凭证的搜索帮助FORM FRM_HELP_MBLNR USING P_P_MBLNR.CALL TRANSACTION 'MB51'.GET PARAMETER ID 'MBN' FIELD P_MBLNR.ENDFORM.ABAP中使用for all entries in小结ABAP开发中,使用for all entries in语句将不能使用join的聚集表(例如BSEG)或者需要使用select的内表与内表串联。