ABAP点滴记录

合集下载

SAP-ABAP批量查询SAP标准日志(更改历史記錄)

SAP-ABAP批量查询SAP标准日志(更改历史記錄)

描述OBJECTCLAS對象物料主数据变更查询(MM03)MATERIAL采购信息记录变更查询(ME1L)INFOSATZ采购申请(PR)BANF采购订单变更查询(PO)EINKBELEG销售凭证(含合同、订单等)VERKBELEG客户DEBI供应商KRED信⽤(FD32)KLIMCDHDR -抬头表OBJECTCLAS对象类OBJECTID对象值CHANGENR⽂档更改编号CHANGE_IND U 更新I 插⼊E 删除 (单字段⽂档) D 删除J 插⼊ (单字段⽂档)SAP-ABAP批量查询SAP标准⽇志(更改历史記錄)常⽤對象名:如何查找对象1.对象表:TCDOBTCDOBT(SE11,根據表查詢對象)/SCDO(根據對象查詢表)2.⽤单号,编码模糊查询3.限定时间与⽤户进⾏测试批量查询标准⽇志⽅法⼀:事务代码(SE38):RSSCD100 / (RC1CD100\RSSCD1TS)⽅法⼆:后台表(SE11):CDHDR 和 CDPOSCDPOS-项⽬表OBJECTCLAS对象类OBJECTID对象值CHANGENR⽂档更改编号TABNAME表名TABKEY已更改的表记录码FNAME字段名CHNGIND修改类型 (U, I, E, D)TEXT_CASE标识:X=⽂本更改UNIT_OLD更改⽂档,参照的单位UNIT_NEW更改⽂档,参照的单位CUKY_OLD更改⽂档,参照货币CUKY_NEW更改⽂档,参照货币VALUE_NEW更改字段的新内容VALUE_OLD更改字段的新内容*&---------------------------------------------------------------------**& Report ZCDHDR_CDPOS*&*&---------------------------------------------------------------------**&*& 标准程序:RSSCD100*&---------------------------------------------------------------------*REPORT zcdhdr_cdpos NO STANDARD PAGE HEADING .TYPE-POOLS: slis.TABLES: cdhdr,cdred,tcdob.DATA: fldct TYPE slis_t_fieldcat_alv,slayt TYPE slis_layout_alv ,varnt LIKE disvariant,repid LIKE sy-repid .DATA: itab TYPE TABLE OF cdred WITH HEADER LINE.DATA: it_cdhdr TYPE TABLE OF cdhdr WITH HEADER LINE.DATA: it_cdred TYPE TABLE OF cdred WITH HEADER LINE.SELECT-OPTIONS :s_clas FOR tcdob-object OBLIGATORY ,s_objtid FOR cdhdr-objectid,s_usrnam FOR cdhdr-username ,s_udate FOR cdhdr-udate DEFAULT sy-datum,s_time FOR cdhdr-utime,s_tcode FOR cdhdr-tcode,s_tab FOR cdred-tabname,s_fname FOR cdred-fname,s_tabkey FOR cdred-tabkey .AT SELECTION-SCREEN OUTPUT.%_s_clas_%_app_%-text = '对象类'.%_s_objtid_%_app_%-text = '对象值'.%_s_usrnam_%_app_%-text = '⽤户名'.%_s_udate_%_app_%-text = '⽇期'.%_s_time_%_app_%-text = '时间'.%_s_tcode_%_app_%-text = '事务码'.%_s_tab_%_app_%-text = '修改的表名'.%_s_fname_%_app_%-text = '字段名'.%_s_tabkey_%_app_%-text = 'KEY值'.START-OF-SELECTION.PERFORM getdata.PERFORM outdata.*&---------------------------------------------------------------------**& Form getdata*&---------------------------------------------------------------------* FORM getdata.CLEAR: itab,itab[],it_cdhdr,it_cdhdr[].SELECT * INTO TABLE it_cdhdrFROM cdhdrWHERE objectclas IN s_clas ANDobjectid IN s_objtid ANDusername IN s_usrnam ANDudate IN s_udate ANDutime IN s_time ANDtcode IN s_tcode .LOOP AT it_cdhdr.CLEAR: it_cdred,it_cdred[].CALL FUNCTION'CHANGEDOCUMENT_READ'EXPORTINGchangenumber = it_cdhdr-changenrobjectclass = it_cdhdr-objectclasobjectid = it_cdhdr-objectidTABLESeditpos = it_cdredEXCEPTIONSno_position_found = 1wrong_access_to_archive = 2time_zone_conversion_error = 3OTHERS = 4.IF sy-subrc = 0.LOOP AT it_cdred WHERE fname IN s_fname AND tabname IN s_tab ANDtabkey IN s_tabkey .APPEND it_cdred TO itab.ENDLOOP.ENDIF.ENDLOOP.ENDFORM. "getdata*&---------------------------------------------------------------------**& Form outdata*&---------------------------------------------------------------------* FORM outdata.DATA lines(10).slayt-colwidth_optimize = 'X'.slayt-zebra = 'X'.slayt-detail_initial_lines = 'X'. "&ETA 空单元格也显⽰ repid = sy-repid.CALL FUNCTION'REUSE_ALV_GRID_DISPLAY' EXPORTINGi_callback_program = repidi_structure_name = 'CDRED'i_save = 'A'is_layout = slayti_callback_user_command = 'USER_COMMAND' TABLESt_outtab = itabEXCEPTIONSprogram_error = 1OTHERS = 2.ENDFORM. "outdata*&--------------------------------------------------------------------**& Form user_command*&--------------------------------------------------------------------* FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfld TYPE slis_selfield.CASE r_ucomm.WHEN '&IC1'.READ TABLE itab INDEX rs_selfld-tabindex.CHECK sy-subrc = 0.WHEN 'REFRESH'.PERFORM getdata.ENDCASE.rs_selfld-row_stable = 'X'.rs_selfld-col_stable = 'X'.rs_selfld-refresh = 'X'.ENDFORM. "user_command*&--------------------------------------------------------------------**& Form set_status*&--------------------------------------------------------------------* FORM set_status USING rt_extab TYPE slis_t_extab. SET PF-STATUS'STANDARD' EXCLUDING rt_extab . ENDFORM. "set_statusZCDHDR_CDPOS。

ABAP之SQL操作(select、insert、update、delete、modify)

ABAP之SQL操作(select、insert、update、delete、modify)

ABAP之SQL操作(select、insert、update、delete、modify)⼀、SELECT 语句SELECT <lines>[DISTINCT]<columns>[AS<alias>]INTO|APPEND [CORRESPONDING FIELDS OF]<wa> TABLE<itab>[PACKAGE SIZE<n>]..FROM <dbtab>[AS <alias>]<options> UP TO <n> ROWS...[INNER]JOIN <dbtab> [AS <alias>] ON <cond><options>...WHERE <s> <opertor> <f> ...GROUP BY <f1> <f2>..HIVING <condition>.ORDER BY PRIMARY KEY.lines:single读取⼀条数据:.SELECT SINGLE <cols> ... WHERE注意:限制好where条件,否则返回任意⼀条数据,与预期结果不同.DISTINCT :删除重复值。

SELECT [DISTINCT]<cols>...WHERE当INTO 为字段或者结构体时,结尾必须加上ENDSELECT;如果是内表则不需要。

AS<alias>:别名SELECT <cols> [AS <cols>]..INTO语句:1. [CORRESPONDING FIELDS OF]<wa>:⾃动给相同字段名匹配赋值。

wa为结构体,变量,查询⼀条数据时,常⽤语loop循环中。

SAP ABAP开发开启表日志记录

SAP ABAP开发开启表日志记录

一、目标
为记录部分业务表的修改记录,需要开启系统的表日志记录功能二、用到的事物代码
SE11、RZ10 、SCU3
三、操作步骤(截图) :
1、在命令行中输入SE11
2、输入表名,并点击“修改”按钮
3、进入界面后点选工具栏的“技术设置”按钮
4、勾选“日志数据修改”选项,然后“保存”并“激活”。

5、命令行输入事物代码“RZ10” .
6、在“编辑参数文件”子页面选择“扩展维护”选项
7、在“参数文件”栏位选择“子系统参数文件”
8、点击“修改”进入下一页面
9、点击“参数”按钮添加新的参数
10、在“参数名称”栏位填入“rec/client’, 在“参数值”栏位填入自身的client。

然后点击“复制”按钮。

点击“后退”按钮回到上一界面。

11、点击“复制”按钮并退回上一界面
12、点击“保存”。

13、点击按钮“是”。

14、点击‘’
15、继续点击‘’
16、退出系统并重启服务器,使配置参数生效。

17、查看前面所设置的表的修改日志,在命令行中输入事物代码“SCU3”
18、点击按钮“Evaluate log”
19、在“定制对象或表”栏位输入表名
在“限制”子页面输入需要查询的时间段
在“评估为“子页面选择“表”
在“output options”勾选“ALV Grid display”选项
然后点击执行按钮“”
下一界面将列出在此段时间内各种业务对该表所作的修改。

机密:第 11 页共 11页。

BW点滴笔记

BW点滴笔记

1 同一个变量名的UID可能有多个,记得注意2 在查找时要注意技术名称还是名称,因为查询时会在两个中进行,模糊查询时要细心,FV与V都可以查到3 复制的时候注意长度,过长的会不能显示4 开着Query不能删除5 se01 Transport Organizer6 行列只是用来放特征和关键值7 行和列都是死的是固定报表,行和列都是灵活的是灵活报表,行或列有一个是死的,有一个是灵活的是半灵活报表8 SAP portal增量链接的时候别忘记打开目的地,不然不会显示菜单的9 P采购 purchasing,I库存 inventory10 传输请求的时候,DSO传输过,转换会变灰,就是说底层变,上层会有问题11 M版本不等于A版本,可能是修改以后没有激活12 SID -- Surrogate-ID13 YTD,QTD,PTD 年初至今,季初至今,期初至今14 BOM 物料清单15 报表和BEx请求要进ZBW_LYHG包,其余的都进ZBW包16 请求出错,到英文系统看明细日志17 mb51,收+,发-18 312为测试系统,300-302,200-22219 收集转换的时候要收集例程,收集DTP的时候要带信息包20 se03 显示/更改命名空间,可以看到类似于/BIO/ /BIC/的文本描述/BI0/ 业务信息仓库:SAP 命名空间 SAP AG Walldorf/BIC/ 业务信息仓库:客户命名空间客户名称空间21 有时候,结果行的显示会有错误,可以再Query里将计算结果改为合计22 主链修改后需要计划之,即执行23 做完报表要传Portal的24 用户出口:SD,绑定给一个,不能重用;客户出口,ALL;BTE业务交易事件,FI;BADI业务附加(NEW),用户出口与BTE的结合25 RRM_SV_VAR_WHERE_USED_LIST_GET26 01交易数据,02主数据,03层次,04空27 压缩:F事实表压缩至E事实表,压缩之后F表清空,直接从E表取数,加快速度。

ABAP学习笔记

ABAP学习笔记

ABAP学习笔记一、ABAP语法简介:ABAP(Advanced business application program),是一种高级企业应用编程语言,它支持封装性和继承性,封装性是面向对象的基础,而继承性是建立在封装性基础上的重要特性。

它适合生成报表,支持对数据库的操作,如:Sqlserver,Oracle,DB2等主流数据库系统。

主要的语法有:数据类型、控制流程、文本摘要、输出格式、程序调试1、数据类型:(八种基本数据类型)D :日期类型,格式为YYYYMMDD,长度为8T :时间类型,格式为HHMMSS,长度为6I :整数类型,默认长度为4,初始值为0F :浮点类型,默认长度为8,初始值为0,常用于计算C :字符串类型,定义变量时指定字符个数N :数字字符串类型,定义变量时指定数值字符个数X :字节序列类型,定义变量时指定字节数P(压缩号) :允许的长度为1 到16 个字节,系统会指定默认值8 个字节(也就是15 位数字)和0 个小数位常用:大小,长度,重量,货币等单位的场合.2、输出格式:WRITE 'First line.'.WRITE 'Still first line.'WRITE / 'Second line.'WRITE /13 'Third line’.3、控制流程:使用IF的条件分支IF <条件表达式1>.< statement block >ELSEIF <条件表达式2>.< statement block >ELSEIF <条件表达式3>.< statement block >.....ELSE.< statement block >ENDIF.使用CASE的条件分支CASE <f>.WHEN <F1>.<statement block>WHEN <F2>.<statement block>WHEN <F3>.<statement block>WHEN .........WHEN OTHERS.<statement block>ENDCASE.二、ABAP的语法特点:1、由各自独立的语句构成。

ABAP开发笔记(原创)

ABAP开发笔记(原创)

如何设置字段串和使用字段串?DATA: BEGIN OF ADDRESS,NAME(20) TYPE C,STREET(20) TYPE C,NUMBER TYPE P,POSTCODE(5) TYPE N,CITY(20) TYPE C,END OF ADDRESS.该示例定义了一个长度为73的字段串ADDRESS。

可以通过ADDRESS-NAME、ADDRESS-STREET等定址组件。

可以将长字段串的声明收集在包括程序中。

但是,如果频繁使用该数据结构,则最好将它们保存在ABAP/4词典中。

13.LIKE参数,语法如下:DATA LIKE .利用LIKE参数,可以将已定义数据对象的数据类型分配给变量。

LIKE参数常用于附属字段以临时保存数据库字段的内容。

如果更改数据库字段的属性,则系统自动改写备份字段的属性。

可将任何数据对象用于。

利用LIKE参数,可以引用在ABAP/4词典中声明的数据对象的数据类型。

如: DATA NUMBER_1 TYPE P.DATA NUMBER_2 LIKE NUMBER_1.DATA MYNAME LIKE SY-UNAME.14.STATICS 语句:如果要在过程的运行时间之外仍保留某变量的数值,可以在该过程中利用STATICS语句定义该变量。

STATICS语句是DATA语句的变异。

语法如下: STATICS [] [] [].要在过程中将字段串定义为静态有效,请写:STATICS: BEGIN OF ,,..............END OF .15.TABLES语句:TABLES利用TABLES语句,可以创建称为表工作区的数据对象。

表工作区是参考ABAP/4词典对象的字段串。

是ABAP/4词典对象的名称,同时也是创建的表工作区的名称。

表工作区组件的顺序和名称与在ABAP/4词典中声明的对象相同。

要在ABAP/4词典中创建对象,步骤:Tools->ABAP Workbench->Development->ABAP Dictionary。

ABAP新语法记录(一)

ABAP新语法记录(一)

ABAP新语法记录(⼀)原⽂链接:主要内容内联声明构造表达式内表操作Open SQL其他本⽂列出了ABAP新语法的⼀些使⽤⽅式,供⼤家学习参考。

内联声明代码实现:*&----------------------------------------------------------------------* 主题⼀:内联声明* 语法:DATA(...) ,FILED-SYMBOL(…)* 1. 定义变量* 2. 定义结构* 3. 定义内表* 4. 定义指针*&---------------------------------------------------------------------** 记录时间:23.03.2019 记录⼈: YALUOO*&---------------------------------------------------------------------**&*********取数"客户的标签信息表SELECT *FROM ztcust_tagINTO TABLE @DATA(gt_data)UP TO 5 ROWS.cl_demo_output=>write( gt_data ).*&*********定义变量DATA(lv_card_no) = '1000023312'. "会员号cl_demo_output=>write( lv_card_no ).*&*********定义结构READ TABLE gt_data INTO DATA(gs_data) INDEX 1.IF sy-subrc EQ 0.DATA(ls_data) = gs_data.cl_demo_output=>write( ls_data ).ENDIF.*&*********定义内表DATA(lt_data) = gt_data.cl_demo_output=>write( lt_data ).*&*********定义指针LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<fs_data>) WHERE card_no EQ lv_card_no.<fs_data>-create_user = 'YALUOO'. "修改创建⼈ENDLOOP.cl_demo_output=>write( lt_data ).cl_demo_output=>display( ).运⾏结果:构造表达式代码实现:*&----------------------------------------------------------------------* 主题⼆:构造表达式* 1. 实现构造: NWE -创建数据对象或类的实现* 1.1 构造单值* 1.2 构造结构* 1.3 构造内表* 1.4 构造类* 2. 值构造: VALUE - 创建⼀个类型为dypee的数据* 2.1 构造结构* 语法: ... VALUE dtype | #( [BASE dobj] comp1 = dobj1 comp2 = dobj2 ... ) ...* 2.2 构造内表:* 语法: ... VALUE dtype | #( [BASE itab] ( (line1-com1 = dobj1) ( line2 ..) ... ) ...* note: dytpe可接具体类型或者# ,接#数据类型必须确定* 可以嵌套使⽤;* 内表赋值不能带表头;* 3. 组件构造: CORRESPONDING* 语法:... CORRESPONDING dtype | #( [BASE dobj] comp1 = dobj1 comp2 = dobj2 ... ) ... *&---------------------------------------------------------------------** 记录时间:23.03.2019 记录⼈: YALUOO*&---------------------------------------------------------------------*" ⾃定义类型TYPES: BEGIN OF ty_man,name TYPE char10, " 姓名sex TYPE char1, " 性别age TYPE p DECIMALS 2," 年龄school TYPE char20, " 学校END OF ty_man.DATA: gt_man TYPE TABLE OF ty_man.*&*********结构赋值DATA(gs_man) = VALUE ty_man( name = 'Tom' sex = 'B' ).cl_demo_output=>write( gs_man )."附加年龄信息gs_man = VALUE #( name = 'Tom' sex = 'B' age = 18 ).*DATA(gs_man_02) = VALUE #( name = 'Tom' sex = 'B' age = 18 ) . "错误,未明确类型cl_demo_output=>write( gs_man )."附加学校信息gs_man = VALUE ty_man( BASE gs_man school = 'A SCHOOL' ).cl_demo_output=>write( gs_man )."调整学校信息gs_man = VALUE #( BASE gs_man school = 'B SCHOOL' ).cl_demo_output=>write( gs_man ).*&*********内表赋值gt_man = VALUE #( ( name = 'Anna' sex = 'G' age = 17 ) ( name = 'Ann' sex = 'G' age = 16 ) ).cl_demo_output=>write( gt_man )."内表基础上附加额外数据gt_man = VALUE #( BASE gt_man ( name = 'Xiaohong' sex = 'G' age = 20 school = 'C SCHOOL' ) ( name = 'Xiaoming' sex = 'B' age = 21 school = 'D SCHOOL' ) ).cl_demo_output=>write( gt_man ).cl_demo_output=>display( ).&*********Range 表赋值DATA: r_data TYPE RANGE OF ztcust_tag-data_type. "内表不带表头RANGES: r_data_01 FOR ztcust_tag-data_type. "内表带表头-不⽀持"逐步往下填充内表数据r_data = VALUE #( sign = 'I' option = 'BT' ( low = 10 high = 20 )( low = 100 high = 150 )option = 'GT' ( low = 180 )option = 'LT' ( low = 200 )option = 'EQ' ( low = 8 )sign = 'E' option = 'BT' ( low = 15 high = 18 )).cl_demo_output=>write( r_data ).cl_demo_output=>display( ).运⾏结果:代码实现:TYPES: BEGIN OF ty_data.INCLUDE TYPE ztcust_tag.TYPES: flag TYPE char1,END OF ty_data.TYPES: BEGIN OF ty_data_t.INCLUDE TYPE ztcust_tag.TYPES: flag_t TYPE char1,END OF ty_data_t.DATA: gs_data_02 TYPE ty_data,gs_data_03 TYPE ty_data_t.*&*********取数SELECT SINGLE *FROM ztcust_tagINTO @DATA(gs_data).*&*********对应字段赋值gs_data_02 = CORRESPONDING #( gs_data ).cl_demo_output=>write( gs_data_02 ).gs_data_03-flag_t = abap_true.gs_data_03 = CORRESPONDING #( BASE ( gs_data_03 ) gs_data_02 )."不指定BASE 初始值会丢失 cl_demo_output=>write( gs_data_03 ).gs_data_03 = CORRESPONDING #( gs_data_02 )."初始值丢失cl_demo_output=>write( gs_data_03 ).cl_demo_output=>display( ).运⾏结果:内表操作代码实现:*&----------------------------------------------------------------------* 主题三:内表操作* 1. 内表表达式- 相当于READ TABLE* 语法:… itab[ … ] …* note: 如果未找到对应的记录就会抛出CX_SY_ITAB_LINE_NOT_FOUND异常,SY-SUBRC不会记录* 可以通过line_exists预定义函数改进* 2. 內表预定义函数* 2.1 line_exists( ) - 判断记录是否存在* 2.2 line_index( ) - 获取符合记录的索引值* 3. 內表推导 - FOR 理解为LOOP,是对实现操作符 NEW 和值操作符VALUE的⼀种增强,作⽤是构造內表内容* 语法1 : …FOR i = ... [THEN expr] UNTIL | WHILE log_exp ...* 语法2 : …FOR wa|<fs> IN itab [INDEX INTO idx][cond][let_exp]...* 4. 內表筛选-FILTER -筛选内表中的数据* 语法: FILTER type( itab [EXCEPT] [IN ftab] [USING KEY keyname ]* WHERE c1 op f1 [AND c2 op f2 [...] ] ) ...* note: WHERE对应过滤的条件,是必须要指定的,注意有些操作符是不能在WHERE中使⽤的,如:OR , NOT 等* EXCEPT如果不指定则表⽰满⾜条件的找出来,如果指定则表⽰不满⾜条件的找出来* 5. 內表缩减* 语法: ... REDUCE type(* [let_exp]* INIT {x1 = rhs1}|{<x1> = wrexpr1}|{x1|<x1> TYPE dtype1}* {x2 = rhs2}|{<x2> = wrexpr2}|{x2|<x2> TYPE dtype2}* ...* FOR for_exp1* FOR for_exp2* ...* NEXT ...* {x1 = rhs1}|{<x1> = wrexpr1}* {x2 = rhs2}|{<x2> = wrexpr2}* ... ) ...* 6. 内表分组*&---------------------------------------------------------------------** 记录时间:23.03.2019 记录⼈: YALUOO*&---------------------------------------------------------------------**&*********取数SELECT *FROM ztcust_tagINTO TABLE @DATA(gt_data)UP TO 5 ROWS.*&*********定义变量DATA(lv_card_no) = '1000023312'. "会员号cl_demo_output=>write( gt_data )."通过索引值判断某⼀⾏记录是否存在,也可通过条件判断IF line_exists( gt_data[ 4 ] )."获取第4⾏记录DATA(ls_data) = gt_data[ 4 ]."获取第4⾏记录中的标签类型DATA(lv_classify) = gt_data[ 4 ]-classify."标签类型cl_demo_output=>write( ls_data ).cl_demo_output=>write( lv_classify ).ENDIF."获取符合条件的索引值,未找到LV_INDEX为0DATA(lv_index) = line_index( gt_data[ card_no = lv_card_no classify = lv_classify ] ).IF lv_index NE 0 AND line_exists( gt_data[ lv_index + 1 ] ) .CLEAR ls_data."获取下⼀⾏记录ls_data = gt_data[ lv_index + 1 ].cl_demo_output=>write( ls_data ).ENDIF.cl_demo_output=>display( ).运⾏结果:代码实现:TYPES: BEGIN OF ty_line,col1 TYPE i,col2 TYPE i,col3 TYPE i,END OF ty_line, "结构体ty_tab TYPE STANDARD TABLE OF ty_line WITH EMPTY KEY.*&*********通过语法1给新內表赋值 - 类似于JAVA中的FOR循环"for每次遍历⼀次都将结果,通过value赋值给内表gt_itabDATA(gt_itab) = VALUE ty_tab( FOR j = 11 THEN j + 10 UNTIL j > 40 "初始值,递增量,结束条件" 结构中的字段赋值-参考类型ty_tab( col1 = j col2 = j + 1 col3 = j + 2 )"11 12 13 - value 到 gt_itab"21 22 23 - value 到 gt_itab"31 32 33 - value 到 gt_itab"41 - 结束循环).cl_demo_output=>display( gt_itab ).运⾏结果:代码实现:*&*********同过语法2给新內表赋值*&*********取数"客户标签信息SELECT *FROM ztcust_tagINTO TABLE @DATA(gt_data)UP TO 5 ROWS.IF gt_data IS NOT INITIAL."标签⽇期⽇志表SELECT *FROM ztcust_tag_logINTO TABLE @DATA(gt_data_t)FOR ALL ENTRIES IN @gt_dataWHERE tag_id = @gt_data-tag_id.SORT gt_data_t BY tag_id.DELETE ADJACENT DUPLICATES FROM gt_data_t COMPARING tag_id.ENDIF.cl_demo_output=>write( gt_data ).cl_demo_output=>write( gt_data_t ).TYPES: BEGIN OF ty_tag_line,"标签表tag_id TYPE ztcust_tag-tag_id, "标签IDcard_no TYPE ztcust_tag-card_no, "会员号tag_name TYPE ztcust_tag-tag_name, "标签值"⽇志表sernumber TYPE ztcust_tag_log-sernumber, "流⽔号uname TYPE ztcust_tag_log-uname, "⽤户名log_date TYPE ztcust_tag_log-log_date, "备份⽇期log_time TYPE ztcust_tag_log-log_time, "备份时间message_type TYPE ztcust_tag_log-message_type,"消息类型message TYPE ztcust_tag_log-message, "消息⽂本END OF ty_tag_line,ty_tag_tab TYPE STANDARD TABLE OF ty_tag_line WITH EMPTY KEY.*&*********将标签表和⽇志表的数据整合在⼀起,构建新的内表DATA(gt_itab) = VALUE ty_tag_tab( FOR ls_itab IN gt_data WHERE ( classify = 'brands' )"遍历标签类型为brands; ls_itab 为隐形声明或者<fs> (tag_id = ls_itab-tag_idcard_no = ls_itab-card_notag_name = ls_itab-tag_namesernumber = VALUE #( gt_data_t[ tag_id = ls_itab-tag_id ]-sernumber ) "通过VALUE语句和内表表达式赋值uname = VALUE #( gt_data_t[ tag_id = ls_itab-tag_id ]-uname )log_date = VALUE #( gt_data_t[ tag_id = ls_itab-tag_id ]-log_date )log_time = VALUE #( gt_data_t[ tag_id = ls_itab-tag_id ]-log_time )message_type = VALUE #( gt_data_t[ tag_id = ls_itab-tag_id ]-message_type )message = VALUE #( gt_data_t[ tag_id = ls_itab-tag_id ]-message ))).cl_demo_output=>write( gt_itab ).*&*********使⽤操作符FILTER过滤DATA: gt_filter TYPE HASHED TABLE OF ty_tag_lineWITH UNIQUE KEY uname.***INitialize filter Tablegt_filter = VALUE #( ( uname = 'XUWENPAN' ) )."找出满⾜条件的数据DATA(gt_out) = FILTER #( gt_itab IN gt_filter WHERE uname = uname ) .cl_demo_output=>write( gt_out )."找出不满⾜条件的数据DATA(gt_out_t) = FILTER #( gt_itab EXCEPT IN gt_filter WHERE uname = uname ) .cl_demo_output=>write( gt_out_t ).cl_demo_output=>display( ).运⾏结果:代码实现:*&*********取数TYPES: BEGIN OF ty_man,name TYPE char10, " 姓名sex TYPE char1, " 性别age TYPE p DECIMALS 2," 年龄school TYPE char20, " 学校END OF ty_man.DATA: gt_man TYPE TABLE OF ty_man.gt_man = VALUE #( ( name = 'Anna' sex = 'G' age = 17 )( name = 'Ann' sex = 'G' age = 16 ) ).cl_demo_output=>write( gt_man )."内表基础上附加额外数据gt_man = VALUE #( BASE gt_man ( name = 'Xiaohong' sex = 'G' age = 20 school = 'C SCHOOL' )( name = 'Xiaoming' sex = 'B' age = 21 school = 'D SCHOOL' ) ).cl_demo_output=>write( gt_man )."内表⾏数DATA(lv_lines) = lines( gt_man )."内表中符合条件的数据有⼏条DATA(lv_lines_g) = REDUCE i( INIT x = 0FOR ls_man IN gt_man WHERE ( sex = 'G' )NEXT x = x + 1 ).cl_demo_output=>write( lv_lines ).cl_demo_output=>write( lv_lines_g )."累计内表中符合条件的年龄之和TYPES: ty_age TYPE p DECIMALS 2.DATA(lv_sum_age) = REDUCE ty_age( INIT dage = VALUE ty_age( )FOR wa IN gt_man WHERE ( sex = 'G' )NEXT dage = dage + wa-age ).cl_demo_output=>write( lv_sum_age )."综合例⼦TYPES:BEGIN OF ty_result,sum TYPE p DECIMALS 2, "总和max TYPE p DECIMALS 2, "最⼤值avg TYPE p DECIMALS 2, "平均cunt TYPE i, "记录数END OF ty_result.DATA(ls_result) = REDUCE ty_result( INIT res = VALUE ty_result( ) "可以默认值:ty_result( min = 0 max = 0 ) FOR <fs_man> IN gt_man WHERE ( sex = 'G' ) "性别为GNEXT res-sum = res-sum + <fs_man>-age "年龄总和res-max = nmax( val1 = res-max val2 = <fs_man>-age )"最⼤年龄res-cunt = res-cunt + 1 "满⾜条件的条⽬数).ls_result-avg = ls_result-sum / ls_result-cunt. "平均值cl_demo_output=>write( ls_result ).cl_demo_output=>display( ).运⾏结果:Open SQL代码实现:*&----------------------------------------------------------------------* 主题四:Open SQL**&---------------------------------------------------------------------** 记录时间:23.03.2019 记录⼈: YALUOO*&---------------------------------------------------------------------*DATA(lv_card_no) = '1000023083'.SELECT a~tag_id, "标签IDcard_no, "会员号tag_name, "会员值sernumber, "流⽔号uname, "⽤户名log_date, "备份⽇期log_time, "备份时间message_type, "消息类型message "消息⽂本FROM ztcust_tag AS aINNER JOIN ztcust_tag_log AS bON a~tag_id = b~tag_idINTO TABLE @DATA(gt_tag)WHERE a~card_no = '1000023312' OR a~card_no = @lv_card_no AND classify = 'brands' .cl_demo_output=>display( gt_tag ).运⾏结果:。

SAPABAPRFC接口通用日志工具:abapfmlogger

SAPABAPRFC接口通用日志工具:abapfmlogger

SAPABAPRFC接⼝通⽤⽇志⼯具:abapfmlogger很早之前就想写个能记录函数模块⽇志的通⽤⼯具,最早尝试时,没有想清楚插⼊代码的体积过⼤问题的解决⽅案。

在⼀些群友的提醒下,了解到可以⽤特殊办法来处理这⼀问题。

不过当时⽐较忙,没有动笔,后来也渐渐忘记。

最近⼜想起这件事,花了2天完成了⼀个初步的实现。

介绍给⼤家,希望能有参考价值。

本⽂链接:原创内容,转载请注明2020.10.20 前些天发现了⼀些bug,之前下载过的话请更新到。

简介⽬标本⼯具有⼏个⽬标:把⽇志数据存储到⼀个统⼀⽇志表中,避免为每个接⼝创建⽇志表,从⽽减少重复⼯作量。

⽤⼀段通⽤代码实现⽇志存储,可以通过配置表来开关功能。

以JSON格式存储⽇志,并提供⼀定的索引查询功能。

允许根据⽇志的唯⼀ID来重处理数据(类似事务代码WE19)。

⽬前⽬标1, 2已经实现,3, 4部分实现,还在完善中。

原理基本原理是使⽤⼀些动态编程技术,在函数运⾏时获取参数值,转换为JSON数据存储到表中。

⽇志使⽤唯⼀ID作为主键。

重处理时,根据⽇志记录,动态⽣成ABAP变量,并从JSON中获取值,赋值给变量,再动态地调⽤⽇志中记录的FM。

代码量⽬前还很⽐较少,只有⼏百⾏,可以阅读包含⽂件ZAFL_MACROS和类ZCL_AFL_UTILITIES以了解更多细节。

关于ABAP动态编程,如果有不懂的地⽅,可以参考:这⼀系列⽂章:项⽬地址项⽬名:abap fm loggerGithub地址:请使⽤安装,如果你觉得有帮助的话,欢迎Star.使⽤介绍abap fm logger的⽤法,包含代码、配置、报表等。

报表⽇志存储在表ZAFL_LOG中,报表程序ZAFL_VIEWER可以⽤于查询/重处理⽇志点击JSON字段可以查看参数详情。

选中⽇志⾏,点击⼯具栏的“Process Selected Item”,则程序会尝试使⽤选中的⽇志的参数记录重新调⽤相应接⼝。

⽇志存储只需要2个复制粘贴就能完成代码部分,⾮常简单:1, 添加包含⽂件ZAFL_MACROS到需要记录⽇志的FM的函数组中,FUNCTION-POOL zzxxxx.INCLUDE zafl_macros.2, 在函数中调⽤相应的宏,FUNCTION z_fm.**初始化logger,需要在FM的开头部分调⽤/afl/log_init.**可选,最多指定3个⽤于搜索的字段(⽐如公司代码、物料号等)/afl/set_custom_fields 'cust field1''cust field2''cust field3'.**可选,记录状态码,如S/E等,最多2位/afl/set_status 'S''message'.**保存⽇志,必须在FM的结尾处/afl/save.ENDFUNCTION.这⾥, /afl/log_init 和 /afl/save 是必选的,⽽ /afl/set_custom_fields 和 /afl/set_status 提供了⼀些灵活功能,可以按需选择是否调⽤。

SAP ABAP基本语法介绍

SAP ABAP基本语法介绍
包含了接口。类和接口池 (程序类型为 J) 接口都在类制作器中管理,事务码 SE24。
类池 (程序类型为 K)
包含了类。类和接口都在类制作器中管理,事务码 SE24
7
数据类型和数据对象
形式上的变量描述叫做数据类型,由数据类型具体定义 的变量叫做数据对象 数据类型
标准数据类型(预定义数据类型)、本地数据类型、全 局数据类型
如果可能的话,尽量减少使用文字,而多用常数,这样 可以给程序维护带来很大的便利。
14
基本ABAP语句:赋值
程序开始时,程序内容被读到应用服务器的内存区,程 序中定义的数据对象也分配了相应的内存空间。 可以使用MOVE 关键字来赋值。
MOVE var1 TO var2. var2 = var1. 如果var1 和var2 的数据类型不同,就存在类型冲突的可能性,这 时候如果存在转换规则 ,则会进行自动类型转换 。
明 用内表是一个处理大量结构化数据的简单办法
19
内表类型 标准表
系统内建维护了表的行号(即索引),索引和键访问都是允许的。 当经常用索引访问表的时候就选择标准表。
排序表
数据记录在表内自动以升序进行排列,索引是系统自动维护的,索 引和键访问都可以用。如果经常使用键来访 问数据,或者希望数据 能够自动排序时,就用排序表。
定义数据类型用关键字TYPES 定义数据对象用关键字DATA
8
数据类型:预定义类型
它是SAP内置的基本数据类型,所有其他数据元素和域都是由这 些基本数据类型组合而成的。它可以分为完整的和非完整的。
完整的数据类型指它包含了与类型相关的固定长度的信息
D :日期类型,格式为YYYYMMDD,长度为8 T :时间类型,格式为HHMMSS,长度为6 I :整数类型,长度为4字节 F :浮点类型,长度为8 STRING:变长字符串类型 XSTRING:变长字节序列类型

ABAPSAP接口通用日志存储,以及查看

ABAPSAP接口通用日志存储,以及查看

ABAPSAP接⼝通⽤⽇志存储,以及查看 在外部调⽤接⼝时,通常会需要保存外部的调⽤记录,期间会⽤到表,这⾥将传⼊的表转换成json格式(也可以转换成XML),并存⼊通⽤⽇志表中。

1.SE11,新建通⽤的LOG表,表结构参考下图:2.在接⼝中,如果需要保存记录,则调⽤下⾯代码。

DATA: json_ser TYPE REF TO cl_trex_json_serializer,json_des TYPE REF TO cl_trex_json_deserializer.DATA: jsonstr TYPE string.CREATE OBJECT json_serEXPORTINGdata = it_plm007[].CALL METHOD json_ser->serialize.CALL METHOD json_ser->get_dataRECEIVINGrval = jsonstr.ls_zrfc_logs-funcname = 'Z_RFC_PLM_007'.ls_zrfc_logs-zsystem = p_system.ls_zrfc_logs-uname = p_uname.ls_zrfc_logs-zname1 = p_name1.ls_zrfc_logs-erdat = sy-datum.ls_zrfc_logs-uzeit = sy-uzeit.* ls_zrfc_logs-ep_type = ep_type.* ls_zrfc_logs-ep_message = ep_message.ls_zrfc_logs-jsonstr1 = jsonstr.MODIFY zrfc_logs FROM ls_zrfc_logs.IF sy-subrc EQ0.COMMIT WORK AND WAIT.ELSE.ROLLBACK WORK.ENDIF.View Code3.写个查看⽇志的报表效果如下图所⽰附上代码:主程序:*&---------------------------------------------------------------------**& Report ZIT0010*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*REPORT zit0010.INCLUDE zit0010_head.INCLUDE zit0010_screen.INCLUDE zit0010_form.START-OF-SELECTION.PERFORM frm_get_data. "动态创建内表 <dyn_table>,并⽣成lt_alv_cat PERFORM frm_get_data2.END-OF-SELECTION.PERFORM f_display_data.View Code包含⽂件ZIT0010_HEAD*&---------------------------------------------------------------------**& 包含 ZIT0010_HEAD*&---------------------------------------------------------------------*TABLES:tftit.DATA: d_ref TYPE REF TO data,d_ref2 TYPE REF TO data,lt_alv_cat TYPE TABLE OF lvc_s_fcat,ls_alv_cat LIKE LINE OF lt_alv_cat.DATA: lt_table LIKE TABLE OF dntab.DATA: ls_table TYPE dntab.DATA: dyn_table TYPE REF TO data.DATA: dyn_wa TYPE REF TO data.FIELD-SYMBOLS :<dyn_table> TYPE table,<dyn_wa> TYPE any,<dyn_field> TYPE any,<fs_str> TYPE any.DATA: dyn_table2 TYPE REF TO data.DATA: dyn_wa2 TYPE REF TO data.FIELD-SYMBOLS :<dyn_table2> TYPE table,<dyn_wa2> TYPE any,<dyn_field2> TYPE any,<fs_str2> TYPE any.DATA: go_excel TYPE ole2_object,go_workbook TYPE ole2_object,go_sheet TYPE ole2_object.DATA: gs_layout TYPE lvc_s_layo,gt_fieldcat TYPE lvc_t_fcat.TYPES: BEGIN OF sy_output,funcname TYPE zrfc_logs-funcname,zsystem TYPE zrfc_logs-zsystem,uname TYPE zrfc_logs-uname,zname1 TYPE zrfc_logs-zname1,erdat TYPE zrfc_logs-erdat,uzeit TYPE zrfc_logs-uzeit,posnr TYPE zrfc_logs-posnr,p_str1 TYPE zrfc_logs-p_str1,p_str2 TYPE zrfc_logs-p_str2,p_str3 TYPE zrfc_logs-p_str3,p_str4 TYPE zrfc_logs-p_str4,p_str5 TYPE zrfc_logs-p_str5,ep_type TYPE zrfc_logs-ep_type,ep_message TYPE zrfc_logs-ep_message,jsonstr1 TYPE zrfc_logs-jsonstr1,jsonstr2 TYPE zrfc_logs-jsonstr2,jsonstr3 TYPE zrfc_logs-jsonstr3,jsonstr4 TYPE zrfc_logs-jsonstr4,jsonstr5 TYPE zrfc_logs-jsonstr5,structure TYPE fupararef-structure.TYPES: zcolor(4),message TYPE char200, "cellcolor TYPE lvc_t_scol,slbox,END OF sy_output.DATA: gt_output TYPE TABLE OF sy_output,gs_output TYPE sy_output.DATA: gt_fupararef LIKE TABLE OF fupararef,gs_fupararef LIKE fupararef.DATA: gt_events TYPE slis_t_event,gs_events LIKE LINE OF gt_events.DATA: g_grid TYPE REF TO cl_gui_alv_grid.DATA: gt_bad_cells TYPE lvc_t_modi.*data: gt_fieldcat type lvc_t_fcat.DATA: g_row_id TYPE lvc_s_roid-row_id.FIELD-SYMBOLS: <gs_outtab> TYPE any.CLASS lcl_event_receiver DEFINITION DEFERRED.DATA:go_grid TYPE REF TO cl_gui_alv_grid,go_event_receiver TYPE REF TO lcl_event_receiver.*----------------------------------------------------------------------** CLASS lcl_event_receiver DEFINITION*----------------------------------------------------------------------*CLASS lcl_event_receiver DEFINITION.PUBLIC SECTION.CLASS-METHODS:on_f4 FOR EVENT onf4 OF cl_gui_alv_gridIMPORTING sendere_fieldnamee_fieldvaluees_row_noer_event_dataet_bad_cellse_display,on_data_changed FOR EVENT data_changed OF cl_gui_alv_gridIMPORTING e_onf4e_onf4_beforee_onf4_afterer_data_changede_ucommsender.* PRIVATE SECTION.* TYPES: ddshretval_table TYPE TABLE OF ddshretval.* CLASS-METHODS: my_f4* IMPORTING sender TYPE REF TO cl_gui_alv_grid* et_bad_cells TYPE lvc_t_modi* es_row_no TYPE lvc_s_roid* er_event_data TYPE REF TO cl_alv_event_data* e_display TYPE c* e_fieldname TYPE lvc_fname* EXPORTING im_lt_f4 TYPE ddshretval_table.ENDCLASS. "lcl_event_receiver DEFINITION*----------------------------------------------------------------------** CLASS lcl_event_receiver IMPLEMENTATION*----------------------------------------------------------------------*CLASS lcl_event_receiver IMPLEMENTATION.METHOD on_f4.* FIELD-SYMBOLS:<fs_alv> TYPE gs_output.CASE e_fieldname.WHEN 'STRUCTURE'.READ TABLE gt_output ASSIGNING FIELD-SYMBOL(<fs_alv>) INDEX es_row_no-row_id.IF sy-subrc = 0.PERFORM frm_get_sturct_f4 USING <fs_alv>-funcname CHANGING <fs_alv>-structure.LOOP AT gt_output ASSIGNING FIELD-SYMBOL(<ls_output>) WHERE funcname EQ <fs_alv>-funcname. <ls_output>-structure = <fs_alv>-structure.ENDLOOP.ENDIF.* WHEN .WHEN OTHERS.ENDCASE.PERFORM f_refresh_alv.* CALL METHOD go_grid->refresh_table_display.* DATA: ls_f4 TYPE ddshretval,* lt_f4 TYPE TABLE OF ddshretval.* FIELD-SYMBOLS: <itab> TYPE lvc_t_modi.* DATA: ls_modi TYPE lvc_s_modi.* CALL METHOD my_f4* EXPORTING* sender = sender* es_row_no = es_row_no* er_event_data = er_event_data* et_bad_cells = et_bad_cells* e_display = e_display* e_fieldname = e_fieldname* IMPORTING* im_lt_f4 = lt_f4.* ASSIGN er_event_data->m_data->* TO <itab>.* read table lt_f4 into ls_f4 with key fieldname = 'STRUCTURE'.* if not ls_f4 is initial.* ls_modi-row_id = es_row_no-row_id.* ls_modi-fieldname = 'STRUCTURE'.* ls_modi-value = ls_f4-fieldval.* append ls_modi to <itab>.* ls_modi-row_id = es_row_no-row_id.* ls_modi-fieldname = 'VALUE'.* if ls_f4-fieldval < 'D'.* ls_modi-value = 100.* elseif ls_f4-fieldval < 'R'.* ls_modi-value = 1000.* else.* ls_modi-value = 10000.* endif.* append ls_modi to <itab>.* endif.* READ TABLE lt_f4 INTO ls_f4 WITH KEY fieldname = 'STRUCTURE'.* IF NOT ls_f4 IS INITIAL.* ls_modi-row_id = es_row_no-row_id.* ls_modi-fieldname = 'STRUCTURE'.* ls_modi-value = ls_f4-fieldval.* APPEND ls_modi TO <itab>.* ENDIF.* er_event_data->m_event_handled = 'X'.ENDMETHOD.METHOD on_data_changed.ENDMETHOD. "on_data_changed* METHOD my_f4.* DATA: lw_tab LIKE LINE OF gt_output,* lt_fcat TYPE lvc_t_fcat,* ls_fieldcat TYPE lvc_s_fcat,* l_tabname TYPE dd03v-tabname,* l_fieldname TYPE dd03v-fieldname,* l_help_valu TYPE help_info-fldvalue,* lt_bad_cell TYPE lvc_t_modi,* lp_wa TYPE REF TO data.* FIELD-SYMBOLS: <l_field_value> TYPE any,* <ls_wa> TYPE any.* CALL METHOD sender->get_frontend_fieldcatalog* IMPORTING* et_fieldcatalog = lt_fcat.* READ TABLE gt_output INDEX es_row_no-row_id INTO lw_tab.* CREATE DATA lp_wa LIKE LINE OF gt_output.* ASSIGN lp_wa->* TO <ls_wa>.* <ls_wa> = lw_tab.* READ TABLE lt_fcat WITH KEY fieldname = e_fieldname INTO ls_fieldcat.* MOVE ls_fieldcat-ref_table TO l_tabname.* MOVE ls_fieldcat-fieldname TO l_fieldname.* ASSIGN COMPONENT ls_fieldcat-fieldname OF STRUCTURE lw_tab TO <l_field_value>. * WRITE <l_field_value> TO l_help_valu.* PERFORM f4_set USING sender* lt_fcat* lt_bad_cell* es_row_no-row_id* <ls_wa>.* CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'* EXPORTING* tabname = l_tabname* fieldname = l_fieldname* display = e_display* value = l_help_valu* callback_program = 'STRUCTURE' "'ZTEST7'* callback_form = 'F4'* TABLES* return_tab = im_lt_f4* EXCEPTIONS* parameter_error = 1* no_values_found = 2* OTHERS = 3.* ENDMETHOD. "my_f4ENDCLASS. "lcl_event_receiver*FORM f4_set USING r_grid TYPE REF TO cl_gui_alv_grid* rt_fieldcat TYPE lvc_t_fcat* rt_bad_cells TYPE lvc_t_modi* r_row_id TYPE lvc_s_roid-row_id* rs_outtab.* g_grid = r_grid.* gt_fieldcat = rt_fieldcat.* gt_bad_cells = rt_bad_cells.* g_row_id = r_row_id.* ASSIGN rs_outtab TO <gs_outtab>.*ENDFORM. "f4_setView Code包含⽂件ZIT0010_SCREEN*&---------------------------------------------------------------------**& 包含 ZIT0010_SCREEN*&---------------------------------------------------------------------*SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-001. SELECT-OPTIONS: s_fname FOR tftit-funcname,s_uname FOR sy-uname,s_erdat FOR sy-datum.SELECTION-SCREEN: END OF BLOCK b01.View Code包含⽂件ZIT0010_FORM*&---------------------------------------------------------------------**& 包含 ZIT0010_FORM*&---------------------------------------------------------------------**&---------------------------------------------------------------------**& Form FRM_GET_DATA*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& --> p1 text*& <-- p2 text*&---------------------------------------------------------------------*FORM frm_get_data .*取出表结构的字段⽬录CALL FUNCTION'NAMETAB_GET'EXPORTINGlangu = sy-langutabname = 'ZRFC_LOGS'TABLESnametab = lt_tableEXCEPTIONSno_texts_found = 1.*根据取出的字段⽬录⽣成参考字段⽬录CLEAR lt_alv_cat.LOOP AT lt_table INTO ls_table.* IF LS_TABLE-FIELDNAME NE 'MANDT'.ls_alv_cat-fieldname = ls_table-fieldname.ls_alv_cat-ref_table = 'ZRFC_LOGS'.ls_alv_cat-ref_field = ls_table-fieldname.IF ls_table-fieldname EQ'MEINS'.ls_alv_cat-no_convext = 'X'.* CLEAR: ls_alv_cat-ref_field,ls_alv_cat-ref_table.ENDIF.ls_alv_cat-seltext = ls_table-fieldtext.ls_alv_cat-scrtext_l = ls_table-fieldtext.ls_alv_cat-scrtext_m = ls_table-fieldtext.ls_alv_cat-scrtext_s = ls_table-fieldtext.APPEND ls_alv_cat TO lt_alv_cat.* ENDIF.CLEAR ls_alv_cat.ENDLOOP.*内表创建CALL METHOD cl_alv_table_create=>create_dynamic_tableEXPORTINGit_fieldcatalog = lt_alv_catIMPORTINGep_table = d_ref.*指定⽣成的内表到字段符号* ASSIGN d_ref->* TO <dyn_table>.***创建动态⼯作区结构* CREATE DATA dyn_wa LIKE LINE OF <dyn_table>.*创建动态⼯作区* ASSIGN dyn_wa->* TO <dyn_wa>.* zcolorDELETE lt_alv_cat[] WHERE fieldname EQ'MANDT'.* ls_alv_cat-fieldname = 'ZCOLOR'.** ls_alv_cat-ref_table = 'ZFICOS025'.** ls_alv_cat-ref_field = 'ZCOLOR'.* ls_alv_cat-seltext = '更新结果'.* ls_alv_cat-scrtext_l = '更新结果'.* ls_alv_cat-scrtext_m = '更新结果'.* ls_alv_cat-scrtext_s = '更新结果'.* APPEND ls_alv_cat TO lt_alv_cat.* ls_alv_cat-fieldname = 'MESSAGE'.** ls_alv_cat-ref_table = 'ZFICOS025'.** ls_alv_cat-ref_field = 'MESSAGE'.* ls_alv_cat-seltext = '更新信息'.* ls_alv_cat-scrtext_l = '更新信息'.* ls_alv_cat-scrtext_m = '更新信息'.* ls_alv_cat-scrtext_s = '更新信息'.* APPEND ls_alv_cat TO lt_alv_cat.ls_alv_cat-fieldname = 'STRUCTURE'.* ls_alv_cat-ref_table = 'FUPARAREF'.* ls_alv_cat-ref_field = 'STRUCTURE'.ls_alv_cat-seltext = 'JSON转换结构'.ls_alv_cat-scrtext_l = 'JSON转换结构'.ls_alv_cat-scrtext_m = 'JSON转换结构'.ls_alv_cat-scrtext_s = 'JSON转换结构'.ls_alv_cat-edit = 'X'.ls_alv_cat-f4availabl = 'X'.APPEND ls_alv_cat TO lt_alv_cat.CLEAR: ls_alv_cat.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_GET_DATA2*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& --> p1 text*& <-- p2 text*&---------------------------------------------------------------------*FORM frm_get_data2 .SELECT *INTO CORRESPONDING FIELDS OF TABLE @gt_outputFROM zrfc_logsWHERE funcname IN @s_fnameAND uname in @s_unameAND erdat IN @s_erdat.SELECT *INTO TABLE @gt_fupararefFROM fupararefWHERE funcname IN @s_fnameAND paramtype EQ'T'.LOOP AT gt_output INTO gs_output.READ TABLE gt_fupararef INTO gs_fupararef WITH KEY funcname = gs_output-funcname. IF sy-subrc EQ0.ENDIF.CLEAR: gs_output.ENDLOOP.ENDFORM.*&---------------------------------------------------------------------**& Form F_DISPLAY_DATA*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& --> p1 text*& <-- p2 text*&---------------------------------------------------------------------*FORM f_display_data .PERFORM f_set_layout.* PERFORM F_SET_FIELDCAT.PERFORM f_set_event.PERFORM f_alv_display TABLES gt_output.ENDFORM.FORM f_set_event.gs_events-name = 'CALLER_EXIT'.gs_events-form = 'CALLER_EXIT'.APPEND gs_events TO gt_events[].ENDFORM.FORM f_set_layout.CLEAR: gs_layout.gs_layout-box_fname = 'SLBOX'.gs_layout-zebra = 'X'.gs_layout-cwidth_opt = 'X'.gs_layout-ctab_fname = 'CELLCOLOR'.ENDFORM.*FORM F_SET_FIELDCAT.* CLEAR: GT_FIELDCAT[].* DATA: LS_FIELDCAT TYPE LVC_S_FCAT.* DEFINE SET_FIELDCAT.* CLEAR: LS_FIELDCAT.* LS_FIELDCAT-FIELDNAME = &1.* LS_FIELDCAT-REF_FIELD = &2.* LS_FIELDCAT-REF_TABLE = &3.* LS_FIELDCAT-CONVEXIT = &4.* LS_FIELDCAT-DO_SUM = &5.* LS_FIELDCAT-SELTEXT = &6.* LS_FIELDCAT-SCRTEXT_L = &6.* LS_FIELDCAT-SCRTEXT_M = &6.* LS_FIELDCAT-SCRTEXT_S = &6.* LS_FIELDCAT-COLTEXT = &6.* APPEND LS_FIELDCAT TO GT_FIELDCAT.* END-OF-DEFINITION.**显⽰内容* SET_FIELDCAT 'RBUKRS' 'RBUKRS' 'ACDOCA' '' '' '公司代码'.* SET_FIELDCAT 'GJAHR' 'GJAHR' 'ACDOCA' '' '' '会计年度'.* SET_FIELDCAT 'BUDAT' 'BUDAT' 'ACDOCA' '' '' '过账⽇期'.*ENDFORM.FORM f_alv_display TABLES it_table.CALL FUNCTION'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program = sy-repidi_callback_pf_status_set = 'F_SET_PF_STATUS'i_callback_user_command = 'F_USER_COMMAND'is_layout_lvc = gs_layoutit_events = gt_eventsit_fieldcat_lvc = lt_alv_cati_save = 'U'TABLESt_outtab = it_tableEXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.ENDIF.ENDFORM.*-----------------------------------------------------------------------* **-----------------------------------------------------------------------*FORM f_set_pf_status USING rt_extab TYPE slis_t_extab.SET PF-STATUS'STD'.ENDFORM.*-----------------------------------------------------------------------* **-----------------------------------------------------------------------*FORM f_user_command USING r_ucomm LIKE sy-ucommrs_selfield TYPE slis_selfield.PERFORM f_check_change_data.CASE r_ucomm.WHEN 'ZCHANGE'.* PERFORM frm_save_zchange. "保存资产更改数据WHEN '&IC1'."双击事件READ TABLE gt_output INTO gs_output INDEX rs_selfield-tabindex.IF sy-subrc EQ0.* BREAK it0003.IF gs_output-structure IS INITIAL.MESSAGE'请选择结构名'TYPE'S' DISPLAY LIKE'E'.ENDIF.CHECK NOT gs_output-structure IS INITIAL.IF rs_selfield-fieldname+0(7) EQ'JSONSTR'.PERFORM frm_get_lvcs.PERFORM frm_change_json USING rs_selfield-fieldname.PERFORM frm_display_alv2.ENDIF.ENDIF.ENDCASE.PERFORM f_refresh_alv.ENDFORM.*-----------------------------------------------------------------------* **-----------------------------------------------------------------------*FORM f_check_change_data.DATA: lo_grid TYPE REF TO cl_gui_alv_grid.CALL FUNCTION'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTINGe_grid = lo_grid.lo_grid->check_changed_data( ).ENDFORM.*-----------------------------------------------------------------------* **-----------------------------------------------------------------------*FORM f_refresh_alv.DATA: lo_grid TYPE REF TO cl_gui_alv_grid,ls_is_stable TYPE lvc_s_stbl.CALL FUNCTION'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTINGe_grid = lo_grid.ls_is_stable-col = 'X'.ls_is_stable-row = 'X'.lo_grid->refresh_table_display(EXPORTINGis_stable = ls_is_stableEXCEPTIONSfinished = 1OTHERS = 2 ).IF sy-subrc <> 0.ENDIF.ENDFORM.FORM frm_get_sturct_f4 USING pc_func TYPE fupararef-funcname CHANGING pc_struc TYPE fupararef-structure. DATA:lt_ret_tab TYPE TABLE OF ddshretval WITH HEADER LINE. DATA: lt_fupararef LIKE TABLE OF fupararef.lt_fupararef[] = gt_fupararef[].DELETE lt_fupararef[] WHERE funcname NE pc_func.* BREAK it0003.CALL FUNCTION'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTINGretfield = 'STRUCTURE'value_org = 'S'TABLESvalue_tab = lt_fupararefreturn_tab = lt_ret_tabEXCEPTIONSparameter_error = 1no_values_found = 2OTHERS = 3.IF sy-subrc = 0.READ TABLE lt_ret_tab INDEX 1.IF sy-subrc = 0AND lt_ret_tab-fieldval IS NOT INITIAL.pc_struc = lt_ret_tab-fieldval.ENDIF.ENDIF.ENDFORM. " FRM_GET_ARKTX_F4FORM caller_exit USING ls_data TYPE slis_data_caller_exit.BREAK it0003.* DATA: call_f4 TYPE REF TO lcl_event_receiver.* CREATE OBJECT call_f4.* CALL METHOD call_f4->HANDLE_F4_HELP.DATA: l_ref_alv TYPE REF TO cl_gui_alv_grid.DATA: lt_wa_f4 TYPE lvc_s_f4,lt_f4 TYPE lvc_t_f4.CALL FUNCTION'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = l_ref_alv.SET HANDLER lcl_event_receiver=>on_f4 FOR l_ref_alv.SET HANDLER lcl_event_receiver=>on_data_changed FOR l_ref_alv.lt_wa_f4-fieldname = 'STRUCTURE'.lt_wa_f4-register = 'X'.lt_wa_f4-getbefore = 'X'.lt_wa_f4-chngeafter = 'X'.* lt_wa_f4-internal = 'X'.APPEND lt_wa_f4 TO lt_f4.CALL METHOD l_ref_alv->register_f4_for_fieldsEXPORTINGit_f4 = lt_f4.* CASE e_fieldname.* WHEN 'STRUCTURE'.* READ TABLE gt_output ASSIGNING FIELD-SYMBOL(<fs_alv>) INDEX es_row_no-row_id.* IF sy-subrc = 0.* PERFORM frm_get_sturct_f4 USING <fs_alv>-funcname CHANGING <fs_alv>-structure.* LOOP AT gt_output ASSIGNING FIELD-SYMBOL(<ls_output>) WHERE funcname EQ <fs_alv>-funcname. * <ls_output>-structure = <fs_alv>-structure.* ENDLOOP.* ENDIF.** WHEN .* WHEN OTHERS.* ENDCASE.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_GET_LVCS*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------** -->P_RS_SELFIELD_FIELDNAME text*&---------------------------------------------------------------------*FORM frm_get_lvcs.FIELD-SYMBOLS :<fs_filed> TYPE any.ASSIGN COMPONENT'STRUCTURE'OF STRUCTURE gs_output TO <fs_filed>.CLEAR: lt_table[].DATA: lv_tabname TYPE dntab-tabname.lv_tabname = <fs_filed>.*取出表结构的字段⽬录CALL FUNCTION'NAMETAB_GET'EXPORTINGlangu = sy-langutabname = lv_tabnameTABLESnametab = lt_tableEXCEPTIONSno_texts_found = 1.*根据取出的字段⽬录⽣成参考字段⽬录CLEAR lt_alv_cat.LOOP AT lt_table INTO ls_table.* IF LS_TABLE-FIELDNAME NE 'MANDT'.ls_alv_cat-fieldname = ls_table-fieldname.ls_alv_cat-ref_table = <fs_filed>.ls_alv_cat-ref_field = ls_table-fieldname.IF ls_table-fieldname EQ'MEINS'.ls_alv_cat-no_convext = 'X'.* CLEAR: ls_alv_cat-ref_field,ls_alv_cat-ref_table.ENDIF.ls_alv_cat-seltext = ls_table-fieldtext.ls_alv_cat-scrtext_l = ls_table-fieldtext.ls_alv_cat-scrtext_m = ls_table-fieldtext.ls_alv_cat-scrtext_s = ls_table-fieldtext.APPEND ls_alv_cat TO lt_alv_cat.* ENDIF.CLEAR ls_alv_cat.ENDLOOP.*内表创建CALL METHOD cl_alv_table_create=>create_dynamic_tableEXPORTINGit_fieldcatalog = lt_alv_catIMPORTINGep_table = d_ref.*指定⽣成的内表到字段符号ASSIGN d_ref->* TO <dyn_table>.*创建动态⼯作区结构CREATE DATA dyn_wa LIKE LINE OF <dyn_table>.*创建动态⼯作区ASSIGN dyn_wa->* TO <dyn_wa>.* zcolor* DELETE lt_alv_cat[] WHERE fieldname EQ 'MANDT'.* ls_alv_cat-fieldname = 'ZCOLOR'.** ls_alv_cat-ref_table = 'ZFICOS025'.** ls_alv_cat-ref_field = 'ZCOLOR'.* ls_alv_cat-seltext = '更新结果'.* ls_alv_cat-scrtext_l = '更新结果'.* ls_alv_cat-scrtext_m = '更新结果'.* ls_alv_cat-scrtext_s = '更新结果'.* APPEND ls_alv_cat TO lt_alv_cat.* ls_alv_cat-fieldname = 'MESSAGE'.** ls_alv_cat-ref_table = 'ZFICOS025'.** ls_alv_cat-ref_field = 'MESSAGE'.* ls_alv_cat-seltext = '更新信息'.* ls_alv_cat-scrtext_l = '更新信息'.* ls_alv_cat-scrtext_m = '更新信息'.* ls_alv_cat-scrtext_s = '更新信息'.* APPEND ls_alv_cat TO lt_alv_cat.* BREAK it0003.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_CHANGE_JSON*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& --> p1 text*& <-- p2 text*&---------------------------------------------------------------------*FORM frm_change_json USING p_rs_selfield_fieldname.DATA : json_ser TYPE REF TO cl_trex_json_serializer,json_des TYPE REF TO cl_trex_json_deserializer.FIELD-SYMBOLS :<fs_filed> TYPE any.ASSIGN COMPONENT p_rs_selfield_fieldname OF STRUCTURE gs_output TO <fs_filed>. DATA: lv_json TYPE string.lv_json = <fs_filed>.* FIELD-SYMBOLS :<fs_filed2> TYPE any.* ASSIGN COMPONENT 'STRUCTURE' OF STRUCTURE gs_output TO <fs_filed2>.* DATA: lv_tabname TYPE tabname.* lv_tabname = <fs_filed2>.DATA: ls_zbpms011 LIKE zbpms011.DATA : jsonstr TYPE string.CREATE OBJECT json_des.IF lv_json+0(1) EQ'['. "表结构CALL METHOD json_des->deserializeEXPORTINGjson = lv_jsonIMPORTINGabap = <dyn_table>. "<dyn_table>.ELSE.CALL METHOD json_des->deserializeEXPORTINGjson = lv_jsonIMPORTINGabap = <dyn_wa>. "<dyn_table>.APPEND <dyn_wa> TO <dyn_table>.ENDIF.* BREAK it0003.ENDFORM.*&---------------------------------------------------------------------**& Form FRM_DISPLAY_ALV2*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& --> p1 text*& <-- p2 text*&---------------------------------------------------------------------*FORM frm_display_alv2 .PERFORM f_set_layout2.* PERFORM F_SET_FIELDCAT.* PERFORM f_set_event.PERFORM f_alv_display TABLES <dyn_table>.ENDFORM.*&---------------------------------------------------------------------**& Form F_SET_LAYOUT2*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& --> p1 text*& <-- p2 text*&---------------------------------------------------------------------*FORM f_set_layout2 .CLEAR: gs_layout.* gs_layout-box_fname = 'SLBOX'.gs_layout-zebra = 'X'.gs_layout-cwidth_opt = 'X'.* gs_layout-ctab_fname = 'CELLCOLOR'.ENDFORM.View Code。

ABAP记录

ABAP记录

ABAP重点记录:透明表:在数据库服务器上物理的存储数据记录, 可以被ABAP程序访问,是所有控制字段的集合A 应用表 (主数据和业务数据)C 定制表, 仅由消费者维护, 非SAP输入L 存储当前数据表,传送空闲G 定制表, 不受 SAP 更新影响, 只 INS 全部E 控制表,SAP和用户有分开的关键字范围S 系统表, 只被SAP维护, 修改=调整W 系统表,内容可运输通过各个TR对象视图:是一组透明表在特定关系下的映射,可以被SQL程序访问,是事先已经运行过的SQL 的结果,无真实存储物理表,物化视图是提前执行SQL,真实存储在物理表中库:在表中抽取一部分,建立一个个性化的库数据元素:用二维表格形式来表示事物及其之间的关系,字段名、字段的数据类型合起来称为数据元素结构:是数据类型的定义在数据库服务器上没有物理的存储空间,也不能被ABAP程序访问内表多行,结构一行,簇表不能做内联接关键字是一组在表中可以唯一确定这条记录的字段,不能为空Database views :和数据库的视图形同,连接条件是必须自定义. Projection views: 用于屏蔽一些字段(一般用于保护数据时使用). Help views: 该类视图可以用搜索帮助的"selection method"中使用,参与连接表必须存在外键. Maintenance views:允许你进行对几个表的数据进行修改,参与连接表必须存在外键,他们的连接条件是不能自定义的;Append Views:这种视图主要用于增强;在四种类型视图只有Database views是通过inner join来建立.其他类型的视图使用的outer join 语句建立的ABAP改一个程序要用一个用户,不同用户改相同程序会生成不同的请求号内表关键字可以重复,内表做运算,是暂存表配置和程序跨CLIENT,业务数据不跨CLIENT语言代码ZH数据库中保存的1,要用1数据超过100万条不能用selectSLICENSE - Administer SAP Licenses 使用SAP Keygen算号GS01 - 创建集GS02 - 更改集GS03 - 显示集GS04 - 删除集SE81 - 应用层次SE30 - ABAP 对象运行时间分析SM50 - 工作进程概述SM36-定义后台jobSM37 - 作业选择概览SM38 - 队列维护事务SE93 - 维护事务代码(根据描述查事务码)/H调试权限SMARTFORMS - SAP Smart FormsSE54 - 生成表格视图SM31 - 调用诸如 SM30 的视图维护SE84根据结构查表或者ST05进行跟踪SE85根据字段查表SM58 - 异步 RFC 错误日志SCEM - CATT - EMSE80 - 对象浏览器(可建开发类)SM59 - RFC 目的(显示/维护)SE43 - 可用Tcode层次树SE09 -释放本地产生的传输请求SE91 - 消息维护CT04 - 特性管理CL02 - 分类管理ST22查看转储错误分析(短存储)OSS1-连接SAP OSSSPRO_ADMIN -定制项目管理SEARCH_SAP_MENU 在 SAP 菜单中查找SQ01 - SAP 查询: 维护查询用SQ01名称ZFIAP003创建,建立功能区选表LFA1供应商一般数据表格,msert table建立关联,LFA1、LFB1、LFBK、BAKA,用户组分配ZFISLOF,环境-查询,设计表格显示内容,ZFIAP004,点创建,显示功能区,调用功能区ZFIAP003。

abap日志(转)

abap日志(转)

abap日志(转)于这次是专门做SAP方面的工作,所以其实方面如果有问题公司还是会另派人过来解决.所以接下来的我的工作目标非常明确,就是要在顾问指导下做好相关SAP方面的工作.几天下来对自己的工作环境有了个大概的了解,这里有一个专门的SAP实施团队,加上偶共六人,其中五个是香港那边过来的,六人中也就我一个大陆仔. 也就这个时候我才N后悔以前没把白话学好,他们虽然都会点中文,但在这样一个以讲白话为主的环境下使我一下很难融入到其中. 为了使自己尽快适应这种环境,偶不得不开始学白话. 其实对于一个本来就不会的人学一种新语言,不管怎样还是要一个相当长的过程. 不管怎样我的重点还是在SAP上(当时还不知道有ABAP这个概念)------汗!头几天让我先从内部的SAP网了解个大概,上面主要是介绍这家公司要实施的一些阶段性方案, 如业务蓝图之类的.对SAP的概念几乎没有介绍,由于当时我的电脑又上不了网,所以几天下来对SAP一个大概念都异常模糊.这中间回了次深圳公司(客户在横岗),第一件事就是去购书中心看有没相关的SAP资料.资料的确少的可怜,不过还是看到几本,其中就有一本黄佳编的<>,当时我也是感觉会和程序设计打交道,所以就买了这本.后来发现其实这本书对我入门ABAP还是有比较大的帮助.回来后同事说我买对了书!哈当时真是感觉如获至宝,于是开始翻阅起里面的内容.这几天在笔记里我记下了这么几点.可能比较乱.呵呵大家凑合着看.前面差不多一个月的日记都是从那本书上摘录的.1.Object Navigator是ABAP工作平台上众中开发工具的中心入口,事务代码为:se80,其中还有几个经常会用到的T-CODE: SE38, SE24, SE37.2.在ABAP Editor中有一个Excute with variant 按钮,代表通过变量运行(变式与选择屏幕相关).3.Editor Pretty Printer ON/OFF的设置: 菜单项: Utilites->settings有相关项,选中Indent,Convert upper/lowercase同Keyword Uppercase.4.ABAP有三种类型的处理块:Event blocks, Dialog Modules,Procedures只有后一种可拥有自己的局部变量,而且程序语句是内部调用,前两者处理块之间实行外部调用.5.应用程序类型, 可执行的:以Report关键字引导,不能定义功能模块但可以调用.模块池的:以Program关键字引导,必须通过事务代码运行.6.语句链 Write: text1, text2. 等同于: Write text1. Write text2.7,在一个Program中,处于Form和Endform之间的是Subroutines. 该程序由Program引导,不能直接运行,需被调用,不能包含自定义的用户屏幕.8.数据内部定义: types type(len) Type type [decimal dec]data data(len) Type type [decimal dec] [value var]Decimal 附加项只适用于指定P类型的小数位.9.两个结构体进行赋值操作,如果 Source与Destination的组件结构不完全相同,则用Move-corresponding, eg: move-corresponding source-data to destination-data.10.在ABAP数据表达式中,关键字前后必须有空格,eg: Fault: (a=b+c) true:: a = b + c .11.在用户主记录里可以设置日期的显示分隔符,小数点字符和千位分隔符,在system->userprofile->owndata 或T-code: su01.12.内表是一种大批量数据管理形式,用于在程序运行期间存储多行结构相同的数据,程序对内表的行操作不能直接进行,必须通过一种接口来传输,这个接口就是工作区.13.ABAP的两种动态数据对象: Field symbols 与 Data reference.14.内表有三种形式: standard table , sorted table , hashed table后一种不能进行索引查找,只能通过关键字搜索.15.子程序的定义和调用分别用Form/Endform和perform来实现,如果想生成子程序的代码框架,则在prefom add处双击即可.-----------------------2005-09-06----------------1,package的命名规则: begin with A-S or U-X是SAP standard object, begin with Y or Z are customer objects, begin with T are private test package, begin with $ are local package.2.在数据字典中,每创建一个TABLE,都将生成一个同名的结构化数据类型,其中的组件字段与实际物理数据库表完全一致.3,在select查询中如果要指定多个数据对象,则需要将这些对象放在括号内,并用逗号隔开,eg: select * from spfli into (a, b).4.Function Module是最为常用的复用组件,它是独立的R/3仓库对象,也是一种过程模块,在不同的系统间可以通过RFC(Remote function call)技术进行功能模块的调用.5,几个有用的系统函数: sy-uname, sy-host, sy-datum, sy-uzedit, sy-subrc, sy-bdcnt,sy-index, sy-tabix,sy-dynnr.6,可用于交互式报表的列表事件有: at line-selection, at user-command 前者为选择某行时触发,后者由某个GUI触发.7,在可执行程序中,只要在程序代码中使用parametes或select-options语句,则在程序运行后就会产生用户的选择屏幕.---------------2005-09-07----------------------------1, LDB(逻辑库)节点在程序访问之前需用Nodes语句声明,在旧版本中则使用Tables声明. 两种中止语句 Reject与check(有条件中止).2, 由系统自动调用的子程序称回调线程,-----call back routine,利用此程序可以实现许多高级屏幕功能.3, 在OO设计中对象的识别和寻址是通过对象引用来实现的.4, 在二种对象运算访问符中->与=>,对于类中的静态组件是通过类名称加=>直接对类进行操作的.eg: class=>comp.5,对象的自身引用可使用变量ME,是一个局部变量来的.-------------------------------2005-09-08------------------------------1, Append与Insert r的区别: append wa to itab; insert wa into table itab前者不能用于Hashed表, 后者不能用于Sorted表的non-unique.2.修改内表语法: modify itab from wa transporting col2 where….. 表明根据where条件来更新COL2字段值,表类型为SORTED 或HASHED.3,删除内表语法: Delete table itab: from wa, with table key col = 1. 三个标点不可少,with后的为条件关键字.如果用条件的则为: DELETE ITAB WHERE (COL > 17 AND COL < 4 )4,在LOOP AT…ENDLOOP内有一个AT ,<…>,ENDAT循环. 其中的包括: FRIST, LAST, NEW , END OF.这些可以用来进行内表中按某个字段进行分组统计.5,几条记录作一次取用:PACKAGE SIZE N eg: select * from spfli into corresponding fields of table itab package size 3.6.接口成员只能为类的公有成员,接口没有自己的实例,一个接口可以被任意多个不同的类实现,接口中定义的成员集在各类中名称要相同.7, 在程序中使用逻辑数据库有两种方法:通常是通过GET事件或者功能模块进行调用.如: NODES node.8, 在程序代码中输入NEW-PAGE PRINT ON ,将生成的列表直接发送走到SPOOL系统进行打印,不在屏幕上显示.--------------------------------2005-09-11------------------------------------1,将一组选择屏幕组合在一个区域,可以使用Begin of block…..eg: Selection-screen begin of block blocka [with frame [title tit] ] [no intervals]—只选单值不出现TO.Selection-screen end of block.2, 屏幕流逻辑分为两个最基本的处理块: PBO与PAI, 前者是在向用户显示屏幕GUI之前触发,后者是在用户进行某些屏幕行为后并回车时触发.流逻辑模块是在语句MODULE/ENDMODULE之间定义.这里的语法不属于ABAP系列.3,屏幕中的OK字段其作用是:返回在屏幕和GUI状态中用户触发的功能代码:一般情况字段命名为:OK_CODE,数据类型与SY-UCOMM相同.4,通过SE93可以为程序创建自定义的事务代码.5,GUI中的交互元素包括菜单条,标准工具按扭,APPLICATION TOOLBAR,FUNCTIONKEYS共四种,在作屏幕事务设计时这些都要分配具体的功能代码与之对应.--------------------------------2005-09-12------------------------------------1,在定义EXPORTING、IMPORTING与CHANGING的时候,前两者分别为基本输入与输出参数,而CHANGING可用于前两者功能。

abap常用命令

abap常用命令

ABAP是SAP Business Suite的基础编程语言,其源程序由注释和ABAP语句组成,每个语句都以关键字开头,以句点结尾。

ABAP语言的常用命令包括但不限于:1. SELECT命令:用于从表中选择数据,具有特定的格式。

该命令通常被用来从一个名为CURSOR的临时数据结构中提取数据,然后将这些数据以结构的形式进行处理。

2. MODIFY命令:用于修改表中的数据,使用SELECT命令可以从表中选择数据,然后使用MODIFY命令对这些数据进行修改。

3. INSERT命令:用于插入新记录到表中。

4. DELETE命令:用于删除表中的记录。

5. UPDATE命令:用于更新表中的记录。

6. BINARY命令:用于二进制文件的处理。

7. BREAK命令:用于跳出循环。

8. CONTINUE命令:用于跳过循环中当前的迭代。

9. ENDSELECT命令:用于结束SELECT循环。

10. ELSE命令:用于条件判断语句的分支之一。

11. IF命令:用于条件判断语句的开始。

12. ON ERROR语句:用于捕获和处理错误。

13. RANGE命令:用于范围查询。

14. TRY语句:用于捕获和处理错误,与ON ERROR语句配合使用。

15. USING语句:用于指定使用的数据对象。

16. WHERE语句:用于指定查询条件。

17. VALUE命令:用于定义全局或局部变量。

18. JOIN语句:用于连接多个表中的数据。

19. GROUP BY语句:用于对数据进行分组操作。

20. SORT语句:用于对数据进行排序。

21. ABM点式编程:用于在程序中运行ABAP程序块的块式编程。

22. OTHERS语句:用于处理除IF、ELSE、ENDIF以外的其他异常情况。

23. START-OF-SELECTION语句:用于表示程序开始执行。

24. END-OF-SELECTION语句:用于表示程序结束执行。

以上命令是ABAP编程中经常使用的命令,在实际编程中,需要根据具体情况选择合适的命令进行操作。

ABAP开发笔记二

ABAP开发笔记二

ABAP开发笔记⼆ABAP是事件驱动的语⾔,程序的运⾏由事件引导由过程块组成程序架构1.ABAP分类2.命名规范3.报表过程块事件关键字之间或事件关键字与form关键字之间的语句形成⼀个过程块⼦程序form和endform之间的语句形成⼀个⼦程序,⼦程序在过程块中被调⽤没有紧跟着事件关键字或FORM-ENDFORM 块的语句⾃动成为默认事件START-OF-SELECTION过程块的⼀部分主要事件块INITIALIZATION 在选择屏幕显⽰前,对变量进⾏初始化赋值AT SELECTION-SCREEN 对选择屏幕的数据输⼊进⾏检查START-OF-SELECTION 选择屏幕处理完后,数据的处理(缺省事件块)TOP-OF-PAGE 列表显⽰启动新页,页头的输出END-OF-PAGE ⼀页结束时,页尾的处理AT LINE-SELECTION ⽤户双击选中某⾏触发该事件AT PF 设置⾃定义的菜单AT USER-COMMAND 当⽤户功能健时,触发该事件跳出事件:exit,check,stop事件跳过事件在所有事件中:check离开当前事件并继续进⾏下⼀个事件处理;stop离开当前事件并直接跳到end-of-selection事件。

在Start-of-selection之前的事件,exit,check都是离开当前事件继续处理下⼀个事件。

在start-of-selection之后的事件,exit⽴即镜像输出显⽰,check离开当前事件并继续处理下⼀个事件。

4.基本语法数据类型系统变量结构data begin of 结构名.data f1[(l)] [type t] [decimals d] [value 'xxx'].data f2[(l)] [type t] [decimals d] [value 'xxx']....[include structure 另⼀个结构.]data end of 结构名.注意这⾥定义的⽅法和⼀般的结构不同。

ABAP_培训教程

ABAP_培训教程

ABAP_培训教程ABAP 培训教程ABAP(Advanced Business Application Programming),即高级业务应用程序编程,是一种用于在 SAP 系统中进行开发的编程语言。

如果你对 ABAP 编程感兴趣,或者想要在 SAP 领域深入发展,那么参加ABAP 培训是一个不错的选择。

接下来,就让我们一起走进 ABAP 培训的世界。

一、ABAP 基础在 ABAP 培训的初始阶段,您将接触到 ABAP 的基础知识。

这包括对 ABAP 语言的语法、数据类型、变量和常量的理解。

语法是编程的规则,就像我们日常交流中的语言规则一样。

ABAP 有其特定的语法结构,例如语句的书写方式、关键字的使用等。

数据类型则决定了数据的存储方式和可以进行的操作。

比如整数型、字符型、浮点型等。

变量就像是一个容器,用来存放不同类型的数据,而常量则是固定不变的值。

掌握这些基础知识是后续学习的基石,只有在这个基础上,才能搭建起更复杂的程序结构。

二、数据处理数据处理是 ABAP 编程中的重要环节。

培训中会涵盖数据的读取、写入、修改和筛选等操作。

读取数据通常是从数据库表中获取所需信息。

这需要了解如何使用SQL 语句在 ABAP 中与数据库进行交互。

写入和修改数据则要确保数据的准确性和完整性。

数据筛选则是根据特定的条件从大量数据中提取出有用的部分。

这需要掌握条件判断语句,如 IF 语句、CASE 语句等,以便根据不同的情况对数据进行处理。

三、程序结构在 ABAP 培训中,您还将学习不同的程序结构,如顺序结构、循环结构和分支结构。

顺序结构是最简单的,按照代码的书写顺序依次执行。

循环结构则用于重复执行一段代码,比如 FOR 循环、WHILE 循环等。

分支结构可以根据不同的条件选择执行不同的代码块,让程序更加灵活和智能。

合理运用这些程序结构,可以使程序的逻辑更加清晰,提高程序的效率和可读性。

四、函数和子程序函数和子程序是 ABAP 中实现代码复用的重要手段。

abap 标准增强记录表

abap 标准增强记录表

abap标准增强记录表
在ABAP中,标准增强是对SAP系统标准程序的修改和扩展。

这些增强点允许开发人员在不修改标准SAP程序代码的情况下添加自定义逻辑。

增强点可能是隐式的,也可能是显式的。

增强点记录表用于记录这些增强点的位置和内容,其中包括:
1.表名:增强点记录表可能包含了标准SAP程序的表名或对象名。

2.增强类型:描述增强点的类型,例如,是隐式增强点、显示增强点还是其他
类型。

3.增强位置:指示在标准程序中的哪个位置可以进行增强。

4.增强描述:对增强点的描述,可能包括了需要添加的逻辑或变更的目的。

5.其他属性:可能还包括一些其他属性,如开发者信息、变更记录等。

这些表的命名规范可能因组织或项目而异。

在SAP系统中,有一些标准表或数据元素被用于记录这些增强信息,例如:ENHACCESS、ENHOBJECT、ENHRESLOG 等。

这些表可用于存储增强点的位置和描述,方便开发者对系统进行扩展和修改,同时保持了SAP系统的原始结构和稳定性。

SAP ABAP BDC录屏操作步骤

SAP ABAP BDC录屏操作步骤

SAP ABAP BDC录屏操作步骤1.BDC简介首先, 解释BDC这三个英文的意思, 普遍都认同是(Batch Data Communication). 然后下面是一些相关的术语解释:Batch Input:批输入, 用于大批量, 非实时性( 对速度要求比较低) 的数据传输使用BDC_OPEN_GROUP,BDC_INSERT_GROUP, BDC_CLOSE_GROUP这几个function实现批输入会话的操作. 然后通过批输入会话将数据传输到SAP.Call Transaction:调用事务, 与批输入的差异主要是在于数据传输过程不生成批输入会话, 数据在程序运行过程中直接通过调用CALL TRANSACTION USING BDC表传输至SAP.Direct Input:直接输入, 其主要优点是速度最快, 不生成会话, 数据被直接输入至SAP. 不存在事务屏幕处理过程(批输入和调用事务中均包含该过程),直接输入的效率较高, 系统负载较小. 使用TCODEBMV0.但是我们不该把BDC技术只局限于录屏幕, 批输入和调用事务上, 其实以下技术都可以实现BDC, 比如BAPI, IDOC.BAPI:业务应用程序接口, SAP作为一个完善的系统, 每个应用中都有包含标准的数据传输接口.IDOC: 中间文档, ALE和EDI属于系统间数据传输的接口, IDOC中包含数据结构的定义和数据的处理逻辑, 是传输的介质.这个图参照了黄佳写的<<SAP业务数据传输指南>>. 下面我来详细举例一下事务录屏技术.2.实例操作下面是“录”操作的过程,在命令栏里输入T-code :SHDB,进入如下屏幕:点Newrecodring,出现如下屏幕:其中Recording 的名字是任意给的。

SE16是需要录的事务代码。

其他的默认就可以了。

按下“Start Recording”,就会进入“数据浏览的界面”,这时,以下的操作对于用户来说是一次普通修改物料描述操作,尽管系统在记录所有的操作。

关于SAPABAP字符变量和字符串变量字符个数的一个知识点,和一个血案

关于SAPABAP字符变量和字符串变量字符个数的一个知识点,和一个血案

关于SAPABAP字符变量和字符串变量字符个数的一个知识点,和一个血案这是Jerry 2020年的第51篇文章,也是汪子熙公众号总共第234篇原创文章。

今天是2020年5月2日,五一国际劳动节小长假的第二天。

让我们继续劳动起来。

使用ABAP strlen函数计算下列这4个字符和字符串变量中包含的字符个数。

大家先别急着滑动屏幕,先试着自己计算一下,看和标准答案是否有出入。

也许大家觉得这些小的知识点没什么用,但Jerry马上会分享一个我实际处理过的客户incident,正是由于类似这种看似不起眼的小知识点没有留意,最后影响了项目进展。

正确答案,依次是:•2•1•19•7逐一解释。

strlen( lv_s ) = 2整型变量的值,整数1,赋给字符串变量lv_s, 这里发生一个隐式类型转换。

SAP帮助文档里声明,整型变量赋给字符串变量时,如果整数为负数,则字符串变量末尾为"-";如果整数为正数,则字符串变量末尾为空白字符。

换言之,当整型变量到字符串变量的隐式类型转换发生时,字符串变量末尾会多出一位,代表赋值源头的整型数的符号位。

lv_s多出来的这个空白字符在调试器里看得很清楚,2000正是空白字符的16进制编码。

同时调试器里也能看到lv_s的字符串个数为2.strlen( lv_s2 ) = 1和前一例相比,lv_s2的复制操作没有出现隐式类型转换,而是直接被赋以了一个字符常量,故字符个数为1.strlen( lv_ss) = 19lv_ss的类型为SSTRING,实际就是一个CHAR20:在调试器里,lv_ss有18个前导空白(leading blank)字符,字符"1"和1个尾部空白(trailing blank)字符组成,总共20个字符,调试器里的T echnical Type显示为C(20).那为什么strlen(lv_ss)不等于20,而等于19?SAP帮助文档里给出了答案——SSTRING即CHAR20这种变量,属于固定长度(fixed length)类型变量。

ABAP[采购信息记录查询]绝对好例子

ABAP[采购信息记录查询]绝对好例子

1.先看下运行的界面:2.选择条件,点击运行按钮,结果如下图所示:3.相应示例代码如下:*&---------------------------------------------------------------------* *& Report ZTEST_ALV2*&*&---------------------------------------------------------------------* *&*&*&---------------------------------------------------------------------*REPORT ytest0206.*定义所需要的报表tables : EINE,LFA1,EKPO,eina.*for alvtype-pools: slis.data:i_fieldcat_alv type slis_t_fieldcat_alv, "定义列标题(属性/信息) i_layout type slis_layout_alv, "alv格式i_fieldcat type slis_fieldcat_alv, "i_events type slis_t_event, "alv事件w_events like line of i_events,i_list_comments type slis_t_listheader, "alv表单标题区域设置w_list_comments like line of i_list_comments,w_repid like sy-repid. "当前程序*定义内表字段*1.选择屏幕data:begin of hd_itab occurs 0,infnr like eine-infnr, "采购信息记录ekorg like eine-ekorg, "采购组织matnr like eina-matnr, "物料号码lifnr like eina-lifnr, "供应商erdat like eine-erdat, "记录建立时间loekz like eine-loekz, "删除标记urznr like eina-urznr, "批准号color(4) type c, "颜色*2.显示屏幕aplfz like eine-aplfz, "计划交货时间netpr like eine-netpr, "净价peinh like eine-peinh, "价格单位dwjj like eine-netpr, "单位净价bprme like eine-bprme, "计量单位MAKTX like MAKT-MAKTX, "物料名称name1 like lfa1-name1, "供应商名称end of hd_itab.*定义选择屏幕selection-screen begin of block b1 with frame title t1.select-options:s_infnr for eine-infnr memory id INF. "信息记录号码PARAMETERS: PR_LOEKZ TYPE C AS CHECKBOX DEFAULT ' '. "显示有删除标记的信息记录select-options:s_ekorg for eine-ekorg memory id EKO. "采购组织select-options:s_matnr for eina-matnr memory id MAT. "物料号码select-options:s_lifnr for eina-lifnr memory id LIF. "供应商号码select-options:s_erdat for eine-erdat memory id s_erdat. "创建日期select-options:s_urznr for eina-urznr memory id s_urznr. "批准号selection-screen end of block b1.*程序初始化initialization.t1 = '采购查询'.*数据选择start-of-selection.perform getdata. "读取数据perform events_build. "alv事件perform layout_build. "定义alv格式属性perform fields_build. "定义列标题信息perform display_data. "显示数据end-of-selection.data:pagenum type i value 1. "报表页码end-of-page.pagenum = pagenum + 1.*行项目双击事件at line-selection.*&--------------------------------------------------------------------**& Form getdata*&--------------------------------------------------------------------** 获取数据从数据库表中选择相应字段*---------------------------------------------------------------------*form getdata.clear hd_itab.clear hd_itab[].*hd_itab表if PR_LOEKZ = ' '.select * from eineinner join eina on eine~infnr = eina~infnrinto corresponding fields of hd_itabwhere eine~infnr in s_infnrand eine~ekorg in s_ekorgand eina~matnr in s_matnrand eina~lifnr in s_lifnrand eina~loekz <> 'X'and eine~erdat in s_erdatand eina~urznr in s_urznrorder by eine~infnr descending.select single MAKTX from MAKTinto corresponding fields of hd_itabwhere matnr = hd_itab-matnr.select single name1 from lfa1into corresponding fields of hd_itabwhere lifnr = hd_itab-lifnr.append hd_itab.clear hd_itab.endselect.else.select * from eineinner join eina on eine~infnr = eina~infnrinto corresponding fields of hd_itabwhere eine~infnr in s_infnrand eine~ekorg in s_ekorgand eina~matnr in s_matnrand eina~lifnr in s_lifnrand eine~erdat in s_erdatand eina~urznr in s_urznrorder by eine~infnr descending.select single MAKTX from MAKTinto corresponding fields of hd_itabwhere matnr = hd_itab-matnr.select single name1 from lfa1into corresponding fields of hd_itabwhere lifnr = hd_itab-lifnr.append hd_itab.clear hd_itab.endselect.endif.loop at hd_itab.if hd_itab-loekz = 'X'.hd_itab-color = 'C610'. "如果此采购信息记录被删除,则显示红色endif.hd_itab-dwjj = hd_itab-netpr / hd_itab-peinh.modify hd_itab.clear hd_itab.endloop.endform. "getdata**&--------------------------------------------------------------------**& Form layout_build*&--------------------------------------------------------------------** 定义ALV格式属性*---------------------------------------------------------------------*form layout_build .i_layout-zebra = 'X'.* i_layout-detail_popup = 'X'.i_layout-no_vline = ' '.* i_layout-colwidth_optimize = 'X'.* i_layout-detail_initial_lines = 'X'.* i_layout-detail_titlebar = '详细内容'.* i_layout-box_fieldname = 'LINE'.* i_layout-f2code = '&ETA'.* i_layout-f2code = '&IC1'.i_layout-info_fieldname = 'COLOR'. "颜色值i_layout-no_colhead = ' '.w_repid = sy-repid.endform. " layout_build*&--------------------------------------------------------------------**& Form fields_build*&--------------------------------------------------------------------** 设置报表显示列属性信息*---------------------------------------------------------------------*form fields_build .refresh i_fieldcat_alv.clear i_fieldcat.data colnum type i value 1.i_fieldcat-col_pos = colnum.* "i_fieldcat-tabname = 'hd_itab'.* i_fieldcat-ref_tabname = 'zorder_purchase'. * i_fieldcat-outputlen ='14'.i_fieldcat-fieldname = 'INFNR'.i_fieldcat-seltext_s = '采购信息记录号'.i_fieldcat-seltext_m = '采购信息记录号'.i_fieldcat-seltext_l = '采购信息记录号'.i_fieldcat-reptext_ddic = '采购信息记录号'. i_fieldcat-lzero = 'X'.i_fieldcat-key = 'X'.i_fieldcat-hotspot = 'X'.* i_fieldcat-emphasize = 'X'.* i_fieldcat-tech = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.*i_fieldcat-ref_tabname = 'zorder_purchase'. i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'LIFNR'.i_fieldcat-seltext_s = '供应商号码'.i_fieldcat-seltext_m = '供应商号码'.i_fieldcat-seltext_l = '供应商号码'.i_fieldcat-reptext_ddic = '供应商号码'.i_fieldcat-lzero = 'X'.i_fieldcat-key = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.*i_fieldcat-ref_tabname = 'zorder_purchase'. i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'NAME1'.i_fieldcat-seltext_s = '供应商名称'.i_fieldcat-seltext_m = '供应商名称'.i_fieldcat-seltext_l = '供应商名称'.i_fieldcat-reptext_ddic = '供应商名称'.i_fieldcat-lzero = 'X'.i_fieldcat-key = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'MATNR'.* i_fieldcat-ref_tabname = 'zorder_purchase'. i_fieldcat-seltext_s = '物料代码'.i_fieldcat-seltext_m = '物料代码'.i_fieldcat-seltext_l = '物料代码'.i_fieldcat-reptext_ddic = '物料代码'.i_fieldcat-lzero = 'X'.* i_fieldcat-key = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1.* "i_fieldcat-tabname = 'hd_itab'.*i_fieldcat-ref_tabname = 'zorder_purchase'. i_fieldcat-col_pos = colnum.i_fieldcat-outputlen ='30'.i_fieldcat-fieldname = 'MAKTX'.i_fieldcat-seltext_s = '物料名称'.i_fieldcat-seltext_m = '物料名称'.i_fieldcat-seltext_l = '物料名称'.i_fieldcat-reptext_ddic = '物料名称'.i_fieldcat-lzero = 'X'.* i_fieldcat-key = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.* i_fieldcat-outputlen ='30'.i_fieldcat-fieldname = 'NETPR'.i_fieldcat-seltext_s = '净价'.i_fieldcat-seltext_m = '净价'.i_fieldcat-seltext_l = '净价'.i_fieldcat-reptext_ddic = '净价'.* i_fieldcat-no_sum = 'X'.* i_fieldcat-icon = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'PEINH'.i_fieldcat-seltext_s = '价格单位'.i_fieldcat-seltext_m = '价格单位'.i_fieldcat-seltext_l = '价格单位'.i_fieldcat-reptext_ddic = '价格单位'. * i_fieldcat-no_sum = 'X'.* i_fieldcat-icon = 'X'.append i_fieldcat to i_fieldcat_alv. clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'DWJJ'.i_fieldcat-seltext_s = '单位净价'.i_fieldcat-seltext_m = '单位净价'.i_fieldcat-seltext_l = '单位净价'.i_fieldcat-reptext_ddic = '单位净价'. * i_fieldcat-no_sum = 'X'.* i_fieldcat-icon = 'X'.append i_fieldcat to i_fieldcat_alv. clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'BPRME'.i_fieldcat-seltext_s = '计量单位'.i_fieldcat-seltext_m = '计量单位'.i_fieldcat-seltext_l = '计量单位'.i_fieldcat-reptext_ddic = '计量单位'. * i_fieldcat-no_sum = 'X'.* i_fieldcat-icon = 'X'.append i_fieldcat to i_fieldcat_alv. clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.i_fieldcat-seltext_s = '采购组织'.i_fieldcat-seltext_m = '采购组织'.i_fieldcat-seltext_l = '采购组织'.i_fieldcat-reptext_ddic = '采购组织'.i_fieldcat-Emphasize = 'X'.* i_fieldcat-do_sum = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'APLFZ'.i_fieldcat-seltext_s = '计划交货时间'.i_fieldcat-seltext_m = '计划交货时间'.i_fieldcat-seltext_l = '计划交货时间'.i_fieldcat-reptext_ddic = '计划交货时间'.* i_fieldcat-do_sum = 'X'.i_fieldcat-Emphasize = 'C211'.* i_fieldcat-do_sum = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'ERDAT'.i_fieldcat-seltext_s = '信息记录创建日期'.i_fieldcat-seltext_m = '信息记录创建日期'.i_fieldcat-seltext_l = '信息记录创建日期'.i_fieldcat-reptext_ddic = '信息记录创建日期'. * i_fieldcat-do_sum = 'X'.i_fieldcat-Emphasize = 'C211'.* i_fieldcat-do_sum = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'LOEKZ'.i_fieldcat-seltext_s = '删除标记'.i_fieldcat-seltext_m = '删除标记'.i_fieldcat-reptext_ddic = '删除标记'.* i_fieldcat-do_sum = 'X'.i_fieldcat-Emphasize = 'C211'.* i_fieldcat-do_sum = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'URZNR'.i_fieldcat-seltext_s = '批准标记'.i_fieldcat-seltext_m = '批准标记'.i_fieldcat-seltext_l = '批准标记'.i_fieldcat-reptext_ddic = '批准标记'.* i_fieldcat-do_sum = 'X'.i_fieldcat-Emphasize = 'C211'.* i_fieldcat-do_sum = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.endform. " fields_build*&--------------------------------------------------------------------**& Form display_data*&--------------------------------------------------------------------** 显示报表内容*---------------------------------------------------------------------*form display_data .call function 'REUSE_ALV_GRID_DISPLAY'exportingi_callback_program = w_repidis_layout = i_layoutit_fieldcat = i_fieldcat_alv[]it_events = i_events[]i_grid_title = ' 采购信息记录汇总查询表'i_callback_user_command = 'USER_COMMAND'* i_save = 'A'tablest_outtab = hd_itab.if sy-subrc <> 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.endif.endform. " display_data*---------------------------------------------------------------------** FORM USER_COMMAND **---------------------------------------------------------------------*FORM user_command USING i_ucomm LIKE sy-ucommis_selfield TYPE slis_selfield. "#EC CALLEDCASE i_ucomm.WHEN '&IC1'. " PickREAD TABLE hd_itab INDEX is_selfield-tabindex.IF sy-subrc EQ 0.SET PARAMETER ID 'INF' FIELD hd_itab-infnr.SET PARAMETER ID 'MAT' FIELD hd_itab-matnr.SET PARAMETER ID 'LIF' FIELD hd_itab-lifnr.SET PARAMETER ID 'EKO' FIELD hd_itab-ekorg.CALL TRANSACTION 'ME13' AND SKIP FIRST SCREEN.ENDIF.ENDCASE.ENDFORM. " USER_COMMAND*&--------------------------------------------------------------------**& Form whole_toolbar*&--------------------------------------------------------------------** text*---------------------------------------------------------------------** -->EXTAB text*---------------------------------------------------------------------*form whole_toolbar using extab type slis_t_extab. "#EC CALLED set pf-status 'WHOLE_TOOLBAR' excluding extab.endform. "whole_toolbar*&--------------------------------------------------------------------**& Form alv_top_of_page*&--------------------------------------------------------------------** 页头格式设置*---------------------------------------------------------------------*form alv_top_of_page.clear: i_list_comments.w_list_comments-typ = 'H'.w_list_comments-key = ''.w_list_comments-info = '采购信息记录查询报表'.append w_list_comments to i_list_comments.clear w_list_comments.data: data_temp(16).write sy-datum to: data_temp mm/dd/yyyy.concatenate '日期: ' data_temp into data_temp.concatenate data_temp ' IT部' into data_temp. w_list_comments-typ = 'S'.w_list_comments-key = ''.w_list_comments-info = data_temp.append w_list_comments to i_list_comments.clear w_list_comments.call function 'REUSE_ALV_COMMENTARY_WRITE'exportingit_list_commentary = i_list_commentsI_LOGO = 'ENJOYSAP_LOGO' "标题图标.i_end_of_list_grid = 'X'.* i_logo = 'ENJOYSAP_LOGO'. "标题图标endform. "alv_top_of_page*&--------------------------------------------------------------------**& Form alv_end_of_list*&--------------------------------------------------------------------** text*---------------------------------------------------------------------*form alv_end_of_list.clear: i_list_comments.w_list_comments-typ = 'S'.w_list_comments-info = '制作单:IT部'.append w_list_comments to i_list_comments.clear w_list_comments.call function 'REUSE_ALV_COMMENTARY_WRITE'exportingit_list_commentary = i_list_commentsi_end_of_list_grid = 'X'. "I_LOGO = 'ENJOYSAP_LOGO' "标题图标CLEAR: i_list_comments.w_list_comments-typ = 'S'.w_list_comments-info = '确认: ______________ 采购申请分配员: ______________ '. APPEND w_list_comments TO i_list_comments.CLEAR w_list_comments.w_list_comments-typ = 'S'.w_list_comments-info = '制表单位: IT部'.APPEND w_list_comments TO i_list_comments.CLEAR w_list_comments.* CLEAR data_temp.* CONCATENATE '打印者:' sy-uname INTO data_temp.w_list_comments-typ = 'S'.* w_list_comments-info = data_temp.APPEND w_list_comments TO i_list_comments.CLEAR w_list_comments.CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'EXPORTINGit_list_commentary = i_list_commentsI_LOGO = 'ENJOYSAP_LOGO' "标题图标i_end_of_list_grid = 'X'.endform. "alv_end_of_list**&--------------------------------------------------------------------**& Form events_build*&--------------------------------------------------------------------** 定义ALV事件*---------------------------------------------------------------------*FORM events_build .CALL FUNCTION 'REUSE_ALV_EVENTS_GET'EXPORTINGi_list_type = 0IMPORTINGet_events = i_events.READ TABLE i_events WITH KEY name = 'TOP_OF_PAGE'INTO w_events.IF sy-subrc = 0.MOVE 'ALV_TOP_OF_PAGE' TO w_events-form.MODIFY i_events FROM w_events INDEX sy-tabix.ENDIF.READ TABLE i_events INTO w_events WITH KEY name = 'USER_COMMAND'.IF sy-subrc EQ 0.w_events-name = 'USER_COMMAND'.MODIFY i_events FROM w_events INDEX sy-tabix.ENDIF.READ TABLE i_events WITH KEY name = 'END_OF_LIST'"slis_ev_end_of_pageINTO w_events.IF sy-subrc = 0.MOVE 'ALV_END_OF_LIST' TO w_events-form.MODIFY i_events FROM w_events INDEX sy-tabix.ENDIF.ENDFORM. " events_build注:不用画屏幕,直接粘贴即可运行。

abap select single的用法

abap select single的用法

abap select single的用法ABAP中的SELECT SINGLE语句是用于从数据库中获取单个记录的语句。

它可以在SELECT语句后面添加WHERE子句来指定获取记录的条件。

使用SELECT SINGLE语句的一个常见示例是在程序中查找特定条件下的唯一一条记录。

下面我将介绍一些SELECT SINGLE语句的用法。

首先,我们需要定义一个内表或者结构来存储SELECT SINGLE语句查询出来的数据。

例如,我们可以定义一个内表IT_DATA来存储查询到的数据,定义一个结构WA_DATA来定义每一行数据的字段。

```DATA: it_data TYPE TABLE OF wa_data,wa_data TYPE wa_data.```然后,我们可以使用SELECT SINGLE语句来查询数据并将结果存储在内表中。

```SELECT SINGLE * FROM table_name INTO wa_data WHERE condition.```在上面的代码中,table_name是要查询的数据库表名,condition是查询的条件。

*号表示查询所有字段,也可以通过列名来指定查询的字段。

如果查询成功,并且满足条件的记录存在,与目标WA_DATA相对应的行数据将存储在内表IT_DATA中。

接下来,我们可以使用IT_DATA内表中的数据进行进一步的处理,比如输出到屏幕上或者进行其他的业务逻辑操作。

```IF sy-subrc = 0.WRITE: / 'Found record:', it_data-field1, it_data-field2.ELSE.WRITE: / 'No record found.'.ENDIF.```在上述代码中,我们首先判断sy-subrc的值,如果是0,则说明SELECT语句成功找到了记录。

然后我们就可以通过it_data-fieldX来访问查询到的数据字段,并进行输出操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SAP ABAP 点滴记录系统字段篇——STRUCT:SYSTSY-SUBRC:语句执行后的返回值,0表示成功SY-DATUM:当前服务器日期SY-UZEIT:当前服务器时间SY-ULINE:255长度的水平线SY-VLINE:垂直线SY-INDEX:循环说执行的次数SY-TABIX:内表循环的次数SY-DYNNR:当前Screen号SY-MANDT:当前登录的Client号SY-STEPL:返回当前操作的屏幕行号(Table Control)SY-LOOPC:当前表格控件在屏幕中的总行数(Table Control)SY-UCOMM:PAI所出发的功能代码SY-DYNNR:当前屏幕号SY-MSGID:Message ClassSY-MSGNR:Message NumberSY-MSGTY:Message TypeSY-MSGV1~4:Message VariantSY-LINCT:REPROT语句中设定的LINE-COUNTSY-LINSZ:REPROT语句中设定的LINE-SIZESY-SROWS:当前窗口的列表行数SY-SCOLS:当前窗口的列表栏目数SY-PAGNO:当前页的页码SY-LINNO:当前选定行的行号SY-COLNO:当前选定列的列号SY-LSIND:当前列表索引,第一级列表为1SY-LILLI:选择某行时光标行位置SY-CUROW:选择某行时光标列位置********************************************************************* ********************Dynpro篇——SE80********************************************************************* ********************1. 在PAI中,ok_code需要及时赋值给另外一个变量,并立即clear,随后对新的那个变量来case2. 屏幕调用(1) SET SCREEN next_screen_number:指定当前屏幕的后续屏幕,在PAI 中静态指定的后续屏幕将暂时被覆盖(2) CALL SCREEN screen_number:挂起当前屏幕,进入新的屏幕或事务(即插入新的屏幕流)。

CALL TRANSACTION tcode 在新的屏幕中,通过LEAVE SCREEN TO SCREEN 0即可返回挂起的屏幕序列上(3) LEAVE SCREEN:未完成当前屏幕控制流就要转入后续屏幕(4) LEAVE TO SCREEN screen_number:未完成当前屏幕即进入指定的屏幕或事务LEAVE TO TRANSACTION tcode(5) SET SCREEN 0, LEAVE SCREEN或LEAVE TO SCREEN 0:终止当前屏幕3. MODULE module_name AT EXIT-COMMAND:只能在PAI中使用,会由于以"/E"开头或者E型的function而触发(一般就是Back、Exit、Cancel)4. FIELD field_name MODULE module_name:可以对field执行所指定的module5. Table Control的数据源如果来自多张表则可以自定义一个work area6. 要让Table Control能够拥有行选择的能力,可以在导航中指定,需要work area中有一个没有被选择显示的列********************************************************************* ********************报表(1)——系统报表篇********************************************************************* ********************1. 报表类型:SAP核心系统及定制过程中已经存在的报表使用ABAP开发的报表使用其他系统工具(如SQP Query)开发的报表2. Quick Viewer——SQVI:提供形式不固定的Adhoc报表(非日常性的业务报表),是SAP提供给用户的最终系统中的一个简易报表生成工具(1) 每个系统用户只能定义自己的QuickViews,其他系统用户不能共享该列表。

因为它不是SAP传输系统中的一个组件3. SAP Query——SQ01:较为复杂,涉及到用户组和功能区域。

(1) 开始查询后,SAP系统内部将根据Queryies中定义的列表字段自动生成一个内部程序,该程序读取数据源,处理并输出数据(2) SAP Query具有管理功能,主要指数据源和用户组的分配,即设定功能区域和用户组,并将功能区域分配给各个用户组。

其中功能区域代表查询数据源,即数据库表和其中的字段,往往参照逻辑数据库生成;而一个系统用户如果需要创建Queries,则该用户必须隶属于至少某一个由系统管理员预设定的用户组,并可以使用属于该用户组的功能区域。

一个SAP系统用户可以使多个用户组的成员,功能区域和用户组是多对多的关系。

Queries总是隶属于特定的用户组中特定的功能区域生成的,因而只有该用户组内部用户才能访问其中的Queries。

如果某用户被分配置多个用户组,则该用户可以在用户组之间切换。

因为Queries总是与相应的功能区域相关,所以,如果两个用户组都包含同一个功能区域而且某授权用户同时属于这两个用户组,这该用户可以将其中的Queries从一个用户组拷贝至另外一个用户组。

(3) SAP Query可以生成多种类型的列表:基本列表:可以为单行或多行,多行的基本类表还可以进行压缩统计列表、排序列表:要求列表中至少包含一个数值字段,且数据行数可能被压缩局部列表:一个Query中包含多个局部列表,而在打印过程中可以单独打印(4) 不能有用户提供执行设计生成交互式列表,但在列表过程中提供一些标准的交互功能:如将生成列表传递至系统内部或外部的其他工具(Excel、ABC Analysis等),并以图形的形式或者以交互表格的形式显示列表。

4. Quick Viewer和SAP Query的区别(1) SAP Query可以创建基本、统计和排序等格式的列表;而QuckViewer 只能创建基本列表,不包含统计、排序等交互性(2) SAP Query可以被多个用户共享,需要进行用户组和功能区域的设置,并可以在系统间传输;而QuickViewer是具有用户相关性的********************************************************************* ********************报表(2)——报表设计概述篇(2007.10.10)********************************************************************* ********************1. 报表事件:INITIALIZATION:程序初始化,类似于C#中的窗体构造函数START-OF-SELECTION:选择开始事件(默认事件),在选择屏幕的处理结束后触发END-OF-SELECTION:选择结束事件,在所有逻辑数据库处理结束后触发,一般用于输出列表2. 选择屏幕事件(在INITIALIZATION和START-OF-SELECTION之间触发):AT SELECTION-SCREEN OUTPUT:选择屏幕的PBO事件AT SELECTION-SCREEN ... :选择屏幕的PAI事件,有多个附加项3. 逻辑数据库事件(在START-OF-SELECTION事件结束以后触发,用于选择并整理数据):GET node ... 选择逻辑数据库中当前级别数据中的数据GET node LATE 选择逻辑数据库中上一级别数据源中的数据4. 列表事件(在所有报表过程事件和选择屏幕事件结束之后,开始触发列表事件)TOP-OF-PAGE:页眉,每个新页面开始时触发END-OF-PAGE:页脚,当前页面结束前触发AT-LINE-COMMAND:行选择控制,当用户选择某列表行时触发AT-USER-COMMAND:用户交互控制5. 一般报表的触发过程:(1) 1型程序开始时,LOAD-OF-PROGRAM触发,运行时环境将为该程序在应用服务器中分配程序上下文以及相关内存区域存储内表数据对象,接下来的程序流程将由ABAP运行时环境控制(ABAP处理器)(2) INITIALIZATION事件触发(3) 如果有选择屏幕,则在每次屏幕输出之前触发AT SELECTION-SCREEN OUTPUT,运行时环境将选择屏幕发送至显示服务器如果用户在选择屏幕中输入某些值后执行某些功能,系统将触发AT SELECTION-SCREEN事件,为用户提示消息信息等。

整个过程由屏幕处理器和ABAP处理器交互处理,系统自动在其中进行切换(4) 当用户按下Execute按钮后,系统回收对程序的控制,触发START-OF-SELECTION(5) 如果有逻辑数据库,则触发GET和GET LATE。

(6) 最后将触发END-OF-SELECTION事件,此后系统运行时环境将控制交给显示服务器(7) 列表输出过程中将触发TOP-OF-PAGE和END-OF-PAGE。

当用户点击Back 返回选择屏幕时,LOAD-OF-PROGRAM和INITIALIZATION不会触发(8) 如果列表存在交互事件,则会在满足交互条件的时候触发。

6. 事件块的终止(以下语句除STOP外若存在于循环中,则仅跳出该循环)(1) STOP. 终止当前事件块并跳转至END-OF-SELECTION;若在END-OF-SELECTION中有STOP则直接退出。

(2) EXIT. 离开所有事件块并转到列表输出页面(即EXIT之前已经被输出的内容)(3) CHECK. 如果CHECK条件为假,则转到下一个事件块********************************************************************* ********************报表(3)——选择屏幕篇(2007.10.10<!Q!>)*************************************************************1. 屏幕参数(1) INITIALIZATION事件处理之后,屏幕布局将被发送至显示服务器,初始化的值将被传送至同名字段(2) PARAMETERS name TYPE|LIKE type|dobj 参数变量长度不超过8个字符参数格式:DEFAULT value:默认值,INITIALIZATION事件前填充,因此只有在此事件前已经确定的值才能作为默认值OBLIGATORY:设置为必须项LOW CASE:将参数设置为小写进行传递VISIBLE LENGTH len:设置可见显示长度,但可以输入超过所显示的长度的值MATCHCODE OBJECT s_help:分配查询帮助。

相关文档
最新文档