【ABAP】如何找到表1中有表2中没有的记录进行处理(合并内表)

合集下载

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。

ABAPSELECT小技巧

ABAPSELECT小技巧

ABAPSELECT小技巧在ABAP编程中,使用SELECT语句是非常常见的操作。

SELECT语句用于从数据库表中检索数据。

在本文中,我将分享一些ABAPSELECT语句的技巧,以帮助您更好地利用这个强大的功能。

1.使用SELECTSINGLE代替SELECT语句:在一些情况下,我们只需要检索一条记录。

在这种情况下,使用SELECTSINGLE代替SELECT语句可以提高性能。

SELECTSINGLE只返回满足查询条件的第一条记录,而不是检索整个结果集。

这在处理大型数据集时特别有用。

2.使用WHERE子句过滤结果集:使用WHERE子句可以通过添加条件来过滤结果集。

这可以提高查询性能并减少内存消耗。

在WHERE子句中使用索引字段可以更快地检索到满足条件的记录。

3.使用FORALLENTRIES:FORALLENTRIES是一个非常有用的选项,可以在SELECT语句中使用。

它允许我们使用一个内部表的值列表来过滤结果集。

这样可以减少数据库传输的数据量,同时提高查询性能。

4.使用ORDERBY:使用ORDERBY子句按照特定的字段对结果集进行排序。

这可以在查询结果中直接获得按特定顺序排列的数据。

在排序大型数据集时,可以使用数据库索引来提高查询性能。

5.使用GROUPBY和HAVING:使用GROUPBY子句将结果集分组,并使用HAVING子句对各个组施加条件。

这在需要对查询结果进行聚合操作时非常有用。

例如,您可以使用SUM函数计算每个组的总和,并使用HAVING子句过滤结果。

6.使用JOINS连接多个表:在SELECT语句中使用INNERJOIN、LEFTJOIN和RIGHTJOIN等连接操作,可以将多个表关联起来,并联合检索它们的数据。

这在需要从多个相关表中检索相关信息时非常有用。

7.使用SELECTOPTIONS过滤输入参数:SELECTOPTIONS是一种用于在SELECT语句中处理多个输入参数的方法。

abap给内表设定关键字的方法

abap给内表设定关键字的方法

abap给内表设定关键字的方法ABAP是一种面向对象的编程语言,用于在SAP系统中开发和定制业务应用程序。

在ABAP中,内表是一种用于存储和处理数据的重要数据结构。

关键字是一种用于定义和操作内表的特殊语法元素。

本文将介绍如何使用ABAP给内表设定关键字。

在ABAP中,可以使用关键字TABLES来定义内表。

通过TABLES 关键字,可以将内表与数据库表或其他内表进行关联,从而实现数据的读取和处理。

具体的语法如下:TABLES:表名。

在这里,表名可以是数据库表或其他内表的名称。

通过这种方式,可以在程序中直接使用表名来访问和操作内表中的数据。

除了使用TABLES关键字,还可以使用关键字TYPES来定义内表的数据类型。

内表的数据类型可以是基本数据类型,也可以是结构体或其他内表。

具体的语法如下:TYPES:BEGIN OF 表类型,字段1 TYPE 数据类型,字段2 TYPE 数据类型,...END OF 表类型.在这里,表类型是自定义的类型名称,字段1、字段2等是内表中的字段名称,数据类型是字段的数据类型。

通过这种方式,可以在程序中使用表类型来定义内表的变量,并对其进行赋值和操作。

除了使用TABLES和TYPES关键字,还可以使用关键字DATA来定义内表的变量。

具体的语法如下:DATA:内表变量名 TYPE 表类型.在这里,内表变量名是自定义的变量名称,表类型是之前定义的表类型名称。

通过这种方式,可以在程序中声明和使用内表变量,并对其进行赋值和操作。

在ABAP中,内表的关键字还包括APPEND、INSERT、MODIFY、DELETE、READ TABLE等。

这些关键字用于在内表中插入、修改、删除和读取数据。

具体的语法和使用方法如下:1. APPEND关键字用于在内表的末尾插入一条新的数据记录。

具体的语法如下:APPEND 行数据 TO 内表变量名.在这里,行数据是要插入的数据记录,内表变量名是目标内表的变量名称。

ABAP培训课程-SAP找表方法

ABAP培训课程-SAP找表方法

SAP 找表方法总述:下面依次介绍了六种在R/3和CRM中找表及相应字段的方法。

但每种方法都有一定的局限性,所以要根据情况灵活使用。

1.方法(一):用F1找表要查字段‘FUND’所在的系统表,按F1;在下表中可以先点击‘Field Name’(字段名称),若是结构,可以查看他的‘ENTRY HELP’中的‘CHECK TABLE’是否有相应的表名;若没有‘CHECK TABLE’,就要双击‘Data Element’单击‘Where_user list’:勾选‘TABLE FIELDS’后:橘黄色的都是表名,这些表中都会含有字段‘FUND’。

2.方法(二):用F4找表只适用于主数据字段的查找,在弹出的选择框中再利用F1的方法即可;并且此方法是在F1查到的是结构的情况下才有用处;3.方法(三):Editor单击屏幕上方‘SYSTEM’中的‘STA TUS’;双击下面屏幕中的‘PROGRAME’;最后三个字母‘TOP’代表程序的起始段,双击进入;可以逐个查看TABLE中是否含有‘FUND’字段;如下图可知,在‘RESBN’中可以找到所要字段。

在所要查找的屏幕处键入‘/H’,两次回车进入调试状态;调出‘FIND’对话框,可键入‘SELECT/INSERT/UPDATE’等与数据库交互的命令字段,从而找到对应的TABLE。

但如果此界面没有与数据库进行交互时此方法无效。

5.方法(五):SCREEN单击屏幕上方‘SYSTEM’中的‘STA TUS’;双击下面屏幕中的‘Screen number’;再单击右上角的‘LAYOUT’;双击对应字段,可得到该字段所在TABLE或STRUCTURE。

单击屏幕上方‘SYSTEM’中的‘STA TUS’;双击下面屏幕中的‘TRANSACTION’;得到屏幕左上方第二行的‘PACKAGE’打开另一个界面,键入事物代码‘SE80’,并将上面的‘PACKAGE NAME’填入并显示;如下图所示,子文件夹‘DA TABASE TABLE’下面列出的是该事物有关的所有TABLES。

ABAP之内表定义、insert、read、update、delete

ABAP之内表定义、insert、read、update、delete

ABAP之内表定义、insert、read、update、delete ⼀、内表定义.1.1参照表类型创建内表——先定义类型,参照类型定义内表.TYPES:BEGIN OF s_type,no(6) TYPE c,name(10) TYPE c,part(16) TYPE c,END OF s_type.DATA:gt_itab TYPE STANDARD TABLE OF s_type with NON-UNIQUE KEY no WITH HEADER LINE.参照结构体创建内表DATA:BEGIN OF s_type,no(6) TYPE c,name(10) TYPE c,part(16) TYPE c,END OF s_type.DATA:gt_itab LIKE STANDARD TABLE OF s_type with NON-UNIQUE KEY no WITH HEADER LINE.1.2 参照表定义内表语法: DATA:itab TYPE <t_itab> WITH {UNIQUE|NON-UNIQUE} KEY <keys> [INITIAL SIZE <n>][WITH HEADER LINE]. DATA gt_itab TYPE SORTED TABLE OF scarr WITH UNIQUE KEY carrid.DATA gs_str LIKE LINE OF gt_itab.⼆、内表操作2.1.内表赋值."内表带表头的话,下⾯语句只赋值表头。

MOVE itab1 TO itab2."同于 itab2 = itab1."赋值表体数据MOVE itab1[] TO itab2[]. "同于 itab2[] = itab1[]."表类型不同时或者字段顺序不同时。

MOVE-CORRESPONDING itab1 TO itab2.2.2.内表初始化CLEAR、REFRESH、FREE.1).CLEAR .CLEAR itab.--返回内存空间.--itab如果带表头,只清楚表头,如果不带表头,清除表体数据。

ABAP培训第四章内表操作【91ABAP SAP实战中心】

ABAP培训第四章内表操作【91ABAP SAP实战中心】

2
SAP培训: SAP知道:
1.1 定义内表
用自定义的结构类型来定义内表.实例: TYPES: BEGIN OF TY_LINE, “定义数组类型 COL1 TYPE I, COL2 TYPE I, END OF TY_LINE. DATA: IT_TAB TYPE STANDARD TABLE OF TY_LINE.
在程序运行过程中迚入调试模式
29
SAP培训: SAP知道:
单步跟踪程序执行不内存变量的状态变化
30
SAP培训: SAP知道:
为代码行设置断点
31
SAP培训: SAP知道:
6
SAP培训: SAP知道:
2.2 内表的操作APPEND
APPEND指令 (续) 把内表工作区(表头)中的内容追加到内表中 IT_TAB-COL1 = 11. IT_TAB-COL2 = 12. APPEND IT_TAB. “内表和工作区名称相同
7
SAP培训: SAP知道:
2.4 内表的操作COLLECT
使用COLLECT指令向内表添加数据
规则:非数值字段的值如果相等,则数值字段进行汇总。 语法: COLLECT [<wa> INTO] <itab>
以汇总的方式添加数据到内表
3.1 子程序
函数不过程在ABAP中统称为子程序 语法 FORM <subr> [<pass>]. <Statement block>. ENDFORM.调用方式 1、内部调用 PERFORM <subr> [<pass>].
21
SAP培训: SAP知道:
丌能不包含程序迚行显示数据传递, 因为包含程序的目的是模块化源代码。 如果想不模块迚行数据传递,使用子程序或功能模块。

ABAP内表详解

ABAP内表详解

ABAP内表详解内表⽼式的内表类型定义⽼式内表只有标准内表⼀种,使⽤OCCURS选项来定义了标准内表,这是ABAP3.0之前的定义内表的做法了,在新版的ABAP不建议使⽤,因为在新的版本中有三种内表类型(标准、排序、哈希)。

TYPES <t><type> OCCURS <n>.内表中⾏的数据类型在<type>中指定。

要指定⾏的数据类型,可以使⽤ TYPE 或 LIKE 参数。

基于基本类型内表类型"如果去掉了 OCCURS 则表⽰是普通类型⽽不是内表类型了vector TYPE i OCCURS 10."如果要带隐藏表头则⼀定要加上WITH HEADER LINE,否则默认没有,⽽且只能在声明内表变量时加,⽽不能在上⾯定义内表类型时加DATA vector TYPE vector WITH HEADER LINE.vector = 1.APPEND vector.上⾯的TYPES与下⾯语句等效:TYPES vector TYPE STANDARD TABLE OF iWITH NON-UNIQUE DEFAULT KEYINITIAL SIZE 10.本⽰例创建内表数据类型 vector,其⾏包含基本类型 I 字段。

注:WITH HEADER LINE只能与DATA关键字⼀起使⽤,⽽不能与TYPES⼀起使⽤,这也就是说,只有在分配了存储空间时才有隐藏⼯作区这⼀说,在定义内表类型时是没有的。

下⾯这样也可以:vector TYPE i.DATA vector TYPE vector OCCURS 0 WITH HEADER LINE.vector = 1.APPEND vector.基于结构体类型内表类型"由于没有加 occurs 选项,所以定义的是⼀结构类型TYPES: BEGIN OF line,column1 TYPE i,column2 TYPE i,column3 TYPE i,END OF line."定义⼀内表类型⽽不是普通类型TYPES itab TYPE line OCCURS 10.本⽰例创建内表数据类型itab,其⾏与字段串line结构相同。

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来访问查询到的数据字段,并进行输出操作。

abap join 用法

abap join 用法

abap join 用法在ABAP中,JOIN用于在两个或多个表之间建立连接,以便同时从这些表中检索数据。

使用JOIN时,只要两个表有关联条件,就可以将它们连接在一起。

以下是ABAP中JOIN的用法:1. 内连接(INNER JOIN):内连接是最常见的一种连接类型,它也被称为普通连接。

它返回两个表中关联键匹配的行。

语法如下:```sqlSELECT * FROM table1 INNER JOIN table2 ON table1.key = table2.key;```2. 左外连接(LEFT OUTER JOIN):左外连接返回左表中的所有行,以及右表中与左表关联键匹配的行。

如果右表中没有匹配的行,则返回NULL值。

语法如下:```sqlSELECT * FROM table1 LEFT JOIN table2 ON table1.key = table2.key;```3. 右外连接(RIGHT JOIN):右外连接返回右表中的所有行,以及左表中与右表关联键匹配的行。

如果左表中没有匹配的行,则返回NULL值。

语法如下:```sqlSELECT * FROM table1 RIGHT JOIN table2 ON table1.key = table2.key;```在上述语法中,"table1"和"table2"是表的名称,"key"是用于关联两个表的列名。

你可以根据具体的表结构和需求,使用不同的JOIN类型和条件。

4. 全外连接(FULL OUTER JOIN):全外连接返回左表和右表中的所有行,如果某个表中没有匹配的行,则返回NULL值。

语法如下:```sqlSELECT * FROM table1 FULL OUTER JOIN table2 ON table1.key = table2.key;```除了以上几种JOIN类型,ABAP还支持交叉连接(CROSS JOIN)和自连接(SELF JOIN)。

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编程中经常使用的命令,在实际编程中,需要根据具体情况选择合适的命令进行操作。

SAPABAPINNERJOIN多个表详解及代码

SAPABAPINNERJOIN多个表详解及代码

SAPABAPINNERJOIN多个表详解及代码inner join(等值连接) 只返回两个表中联结字段相等的行left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录INNER JOIN 语法:INNER JOIN 连接两个数据表的用法:SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号INNER JOIN 连接三个数据表的用法:SELECT * FROM (表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号INNER JOIN 连接四个数据表的用法:SELECT * FROM ((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号INNER JOIN 连接五个数据表的用法:SELECT * FROM (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号) INNER JOIN 表5 ON Member.字段号=表5.字段号连接六个数据表的用法:略,与上述联接方法类似,大家举一反三吧:)注意事项:在输入字母过程中,一定要用英文半角标点符号,单词之间留一半角空格;在建立数据表时,如果一个表与多个表联接,那么这一个表中的字段必须是“数字”数据类型,而多个表中的相同字段必须是主键,而且是“自动编号”数据类型。

否则,很难联接成功。

代码嵌套快速方法:如,想连接五个表,则只要在连接四个表的代码上加一个前后括号(前括号加在FROM的后面,后括号加在代码的末尾即可),然后在后括号后面继续添加“INNER JOIN 表名X ON 表1.字段号=表X.字段号”代码即可,这样就可以无限联接数据表了:。

表格中相同数据查询abap代码

表格中相同数据查询abap代码

表格中相同数据查询abap代码
代码是:VLOOKUP
VLOOKUP函数是Excel中的一个纵向查找函数,它与LOOKUP函数和HLOOKUP函数属于一类函数,在工作中都有广泛应用,例如可以用来核对数据,多个表格之间快速导入数据等函数功能。

功能是按列查找,最终返回该列所需查询序列所对应的值;与之对应的HLOOKUP 是按行查找的。

在需要输入的数据的地方输入vlookup函数
sheet2选中你需要匹配的源数据,选中后输入逗号,(英文输入法)选中sheet1中的数据表(包含查找和被查找)
选中被匹配后需要输入内容的单元格(其实直接下拉选择第二行就行)选中精准匹配,最后回车,你会得到这个数据。

abap range表用法

abap range表用法

abap range表用法
ABAP中的Range表是一种数据结构,用于存储和处理一定范围内的数值或字符。

它通常用于条件选择或过滤数据。

在ABAP中,可以使用Range表来定义范围,然后使用该Range表对数据进行过滤、匹配或比较。

具体的用法如下:
1. 定义Range表:
```
DATA range_tab TYPE RANGE OF type.
```
这里的"type"是指数据的数据类型,例如整数类型INT、字符类型CHAR等。

可以根据需要选择合适的数据类型。

2. 初始化Range表:
```
range_tab[] = VALUE #( ( low = value1 high = value2 ) ( low = value3 high = value4 ) ).
```
这里的"value1、value2、value3、value4"表示定义的范围的边界值。

3. 使用Range表进行匹配或比较:
```
IF variable IN range_tab.
" 匹配成功的处理逻辑
ELSEIF variable BETWEEN range_tab[1] AND range_tab[2]. " 在范围内的处理逻辑
ENDIF.
```
这里的"variable"是要进行匹配或比较的变量。

Range表还支持其他常用操作,如添加范围值、合并范围等。

具体的操作可以通过调用Range表的方法来实现。

ABAP删除内表记录

ABAP删除内表记录
DATA:MAN1 Like HASHED TABLE OF man WITH UNIQUE key NAME.
man-name = 'Joy'. man-high = '1.79'. man-weight = 140. insert man INTO TABLE man1.
man-name = 'Tom'. man-high t = 160. insert man INTO TABLE man1.
man-name = 'alex'. man-high = '1.9'. man-weight = 150. insert man INTO TABLE man1.
Loop at man1 into man. write:/ man-name,man-high,man-weight. ENDLOOP.
DELETE man1 WHERE NAME = 'Tom'. uline. LOOP AT man1 INTO man.
WRITE:/ man-name,man-high,man-weight. ENDLOOP.
此博客中凡无特别说明verysky原创字样的文章均来源于互联网本人只是作为收藏学习之用其版权为原作者所有可能由于本人疏忽未注明来源如本博客转载文章涉及作品内容版权等问题原作者有疑义或者认为侵犯了版权的请尽快联系本人
ABAP删 除 内 表 记 录
DATA:BEGIN OF man, NAME(20) TYPE c, HIGH TYPE P DECIMALS 2, WEIGHT TYPE P DECIMALS 2, END OF man.

ABAP两种多表查询的性能比较

ABAP两种多表查询的性能比较

ABAP两种多表查询的性能比较在ABAP程序设计中,代码的优化非常重要,当数据量比较大的时候(例如上万或十万条记录),如果所需要的数据不在同一张表中,查询时需要对多表进行内连接。

这时要注意一个问题,连接的表不能太多,否则会出现数据重复或是数据丢失的情况,而且查询的效率也会降低。

比较推荐的方法是:先建立内表,用来存放数据库中的数据先将少量表连接,将部分数据插入到内表中去建立一个存放剩余数据的小内表使用(for all entries in [大内表] where [数据库字段] = 内表字段)将大表已经存在的数据作为条件,把数据库中所需的剩余数据填充到小内表中循环大内表,read 小内表,将小内表的数据modify 到大内表中。

这种查询方法很大程度的减少了多表连接时出现的BUG (重复数据,数据丢失)。

以下是测试的两个DEMO,由于数据量没有足够大,第一种查询的效率要高于第二种查询,主要是因为前者与数据库只交互了一次,而后者交互了两次,但在真实项目中,数据量往往很大,所以第二种是比较推荐的方法。

数据库表ZTALV_SZ 包含了所需字段###################################################################################### ########## Demo 1 #### ######################################################### ######################################### REPORT z_scott_join .TABLES: vbap,vbep,vbak,kna1,ztalv_sz.PARAMETERS p LIKE vbap-vbeln VALUE CHECK.DATA: BEGIN OF itab OCCURS 0.INCLUDE STRUCTURE ztalv_sz.DATA: END OF itab.*************************************************************** ********* Event Start-of-selection*************************************************************** ********START-OF-SELECTION.SELECT ap~vbeln ap~posnr ep~wmeng ap~netwr ap~waerk ep~edatu k~name1INTO CORRESPONDING FIELDS OF TABLE itabFROM vbap AS apINNER JOIN vbep AS ep ON ap~vbeln = ep~vbelnAND ap~posnr = ep~posnrINNER JOIN vbak AS ak ON ak~vbeln = ap~vbelnINNER JOIN kna1 AS k ON k~kunnr = ak~kunnrWHERE ap~vbeln = p.LOOP AT itab.WRITE: / itab-vbeln,itab-posnr,itab-wmeng,itab-netwr,itab-waerk,itab-edatu,itab-name1.ENDLOOP.############################################# ######################################### ########## Demo 2 ############################################################# #########################################REPORT z_scott_join2 .TABLES: vbap,vbep,vbak,kna1,ztalv_sz.PARAMETERS p LIKE vbap-vbeln VALUE CHECK.DATA: BEGIN OF itab OCCURS 0.INCLUDE STRUCTURE ztalv_sz.DATA: END OF itab.DATA: BEGIN OF sub_itab OCCURS 0,vbeln LIKE vbak-vbeln,name1 LIKE kna1-name1,END OF sub_itab.***********************************************************Event start-of-selection**********************************************************START-OF-SELECTION.SELECT ap~vbeln ap~posnr ep~wmeng ap~netwr ap~waerk ep~edatuINTO CORRESPONDING FIELDS OF TABLE itabFROM vbap AS apINNER JOIN vbep AS ep ON ap~vbeln = ep~vbelnAND ap~posnr = ep~posnrWHERE ap~vbeln = p.SELECT ak~vbeln k~name1INTO TABLE sub_itabFROM vbak AS akINNER JOIN kna1 AS k ON ak~kunnr = k~kunnrFOR ALL ENTRIES IN itab WHERE ak~vbeln = itab-vbeln.LOOP AT itab.READ TABLE sub_itab WITH KEY vbeln = itab-vbeln. itab-name1 = sub_itab-name1.MODIFY itab.CLEAR itab.CLEAR sub_itab.ENDLOOP.LOOP AT itab.WRITE: / itab-vbeln,itab-posnr,itab-wmeng,itab-netwr,itab-waerk,itab-edatu,itab-name1.ENDLOOP.。

ABAP 解析内表、工作区、表头行的区别

ABAP 解析内表、工作区、表头行的区别

ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介- [SAP]先是用TYPES关键字定义一个行(row)的类型.如下:TYPES: BEGIN OF line,field1 TYPE i,field2 TYPE i,END OF line.这里的line,就相当于一个自定义的类型,表示一行(row)的字段(field).这里一行有两个字段field1和field2.然后是声明一个work area:DATA wa TYPE line.我用C++(还是对cpp最有好感^^)的概念理解就是,line是一个class,而wa是一个object.接着是声明一个每一行的类型是line的internal table:DATA itab TYPE line OCCURS 0.我在暂时把OCCURS作为了区别工作区和内表的标志.OCCURS应该有更深层次的意义,但我目前只能领悟至此...当我们用以上这个方法来声明一个iternal table时,可以选择是否有无header line.上面这句就是没有header line的.改成如下就有了:DATA itab TYPE line OCCURS 0 WITH HEADER LINE.有无header line的区别就是,header line可以当作一个work area来使用(参照我之前的一个日志). 有一下两种方式操作itab:1).wa-field1 = 1.wa-field2 = 2.2).itab-field1 = 1.itab-field2 = 2.APPEND itab.这里wa就是上面那个已经定义的work area.有header line的时候,这两种都可以.无header line的时候,只能用第1种.第2种里,itab的意义是一个header line,而不是内表.因为"DATA itab TYPE line OCCURS 0 WITH HEADER LINE."这样的声明,已经隐式声明了一个与内表同名的header line.所以OCCURS用来声明内表可能造成二义性(ambiguous).于是,OCCURS被认为是old的东西,采用一下方式声明一个内表比较好:DATA itab TYPE STANDARD TABLE OF line.还有一种声明内表的方法:DATA: BEGIN OF itab OCCURS 0,field1 TYPE i,field2 TYPE i,END OF itab.这样的itab就自动有了一个同名的header line.好像不会有WITHOUT HEADER LINE 或者NOT WITH HEADER LINE 这样的用法... 如果没有OCCURS 0,比如这样:DATA: BEGIN OF itab,field1 TYPE i,field2 TYPE i,那么这个itab就不是内表咯,只是一个structure,可以作为itab的work area.写到这里发现,归根到底就是TYPES和DATA这两个关键字的区别嘛.还有有无OCCURS的区别.1、首先,我们应该先了解下:内表(internal table) 标题行(header line) 工作区(work area) 这三个不同概念(具体定义请自行查找,这里只讲思路)。

abap 查询二分法

abap 查询二分法

abap 查询二分法ABAP是一种用于SAP系统开发的编程语言,通常用于在SAP环境中开发企业级应用程序。

在ABAP中,二分法通常用于对有序表进行快速查找。

以下是在ABAP中实现二分法查找的基本步骤:1.确定查找范围:首先,需要确定要在哪个有序表中进行查找,并确定查找范围的起始位置和结束位置。

2.计算中间位置:通过起始位置和结束位置计算出中间位置。

3.比较中间值:将要查找的值与中间位置的值进行比较。

4.调整查找范围:根据比较结果调整查找范围,缩小范围并继续查找。

5.重复步骤2-4,直到找到目标值或者确定目标值不存在。

下面是一个在ABAP中实现二分法查找的示例程序:ABAPREPORT Z_BINARY_SEARCH.DATA: BEGIN OF itab OCCURS 10,value TYPE I,END OF itab.DATA: target_value TYPE I VALUE 5,start_index TYPE I,end_index TYPE I,mid_index TYPE I,found TYPE ABAP_BOOL,result_index TYPE I.* 填充有序表数据itab-value = 1.APPEND itab.itab-value = 2.APPEND itab.itab-value = 3.APPEND itab.itab-value = 4.APPEND itab.itab-value = 5.APPEND itab.itab-value = 6.APPEND itab.itab-value = 7.APPEND itab.itab-value = 8.APPEND itab.itab-value = 9.APPEND itab.itab-value = 10.APPEND itab.* 确定查找范围start_index = 1.end_index = lines( itab ).* 初始化标记found = abap_false.result_index = 0.* 二分法查找WHILE start_index <= end_index AND found = abap_false. mid_index = ( start_index + end_index ) / 2.IF itab[ mid_index ]-value EQ target_value.found = abap_true.result_index = mid_index.ELSEIF itab[ mid_index ]-value LT target_value.start_index = mid_index + 1.ELSE.end_index = mid_index - 1.ENDIF.ENDWHILE.* 输出查找结果IF found = abap_true.WRITE: / '找到目标值 ', target_value, ' 在索引 ', result _index.ELSE.WRITE: / '未找到目标值 ', target_value.ENDIF.在上面的示例程序中,我们首先创建了一个有序表itab,然后确定了查找范围的起始位置和结束位置。

abap union用法

abap union用法

abap union用法
ABAPUnion用法是一种非常重要的技术,可以帮助开发者在SAP 系统中更加高效地处理数据。

具体来说,Union是一种将多个表合并成一个新表的方法,它可以将两个或多个表中的数据行合并成一个结果集,并将结果返回到一个新的表中。

Union方法可以实现多种功能,包括数据的合并、去重、排序和分组等等。

它可以用于处理大量数据,提高数据处理效率,并且可以在SAP系统中实现复杂的查询和分析操作。

同时,Union也可以与其他ABAP函数和操作结合使用,实现更加复杂的功能。

具体使用Union方法进行数据处理时,需要注意以下几点:
1. 合并的表必须具有相同的字段数量和相同的数据类型。

2. Union方法会自动去重,但是需要注意去重的条件。

3. Union方法返回的结果集默认按照第一个表的排序方式进行排序,因此需要注意第一个表的排序方式。

4. Union方法可以用于合并多个表,但是合并的表数量过多会导致性能下降,因此需要合理使用。

总之,ABAP Union用法是一项非常有用的技术,可以帮助开发者更加高效地处理数据,提高SAP系统的数据处理效率。

不过,在使用Union方法时需要注意一些细节,以确保数据的准确性和性能的优化。

- 1 -。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
objkey = objkey
event = event
* CREATOR = ' '
* TAKE_WORKITEM_REQUESTER = ' '
wa_log-objtype = 'BUS2001'.
wa_log-event = 'CREATED'.
wa_log-objkey = wa_item-pspid.
concatenate 'EvtLog Error: evtid ' eventid
endif.
endif.
clear wa_item.
clear wa_item2.
endloop.
endif.
others = 2
.
if sy-subrc <> 0.
message i000(zwf) with 'Call error for SWE_EVENT_CREATE'.
from swfrevtlog
where event_id eq eventid .
if sy-subrc ne 0.
message i000(zwf) with 'Event Log Error'. "rcode = 3.
clear wa_item2.
clear it_item.
clear it_item2.
select pspid post1 erdat
from proj
into table it_item
where erdat = yesterday.
if sy-subrc = 0 .
event type swetypecou-event.
objtype = 'BUS2001'.
event = 'CREATED'.
yesterday = sy-datum - 1 . "获取昨天的日期
*YESTERDAY = SY-DATUM .
clear wa_item.
*& Report ZWF_PS_XMLXQQGL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
report zwf_ps_xmlxqqgl.
tables:zwf_xmqqlog.
types:begin of item,
pspid like proj-pspid,
post1 like proj-post1,
erdat like proj-erdat,
end of item.
data: wa_item type item,
wa_item2 type item,
it_item type item occurs 0 ,
it_item2 type item occurs 0 .
data: yesterday type erdat."昨天的日期
clear : wa_log.
wa_log-datum = sy-datum.
wa_log-uzeit = sy-uzeit.
wa_log-uname = sy-uname.
* NO_LOGGING = ' '
* IDENT =
importing
event_id = eventid
data: wa_xmqqlog type zwf_xmqqlog.
"工ቤተ መጻሕፍቲ ባይዱ流参数定义
data:eventid type swedumevid-evtid,
objtype type swetypecou-objtype,
objkey type sweinstcou-objkey,
else.
data : lw_swfrevtlog type swfrevtlog.
if sy-subrc eq 0.
commit work and wait.
if sy-subrc ne 0.
message i000(zwf) with 'Commit Error'.
* RECEIVER_COUNT =
* TABLES
* EVENT_CONTAINER =
exceptions
objtype_not_found = 1
wa_log-objtype = 'BUS2001'.
wa_log-event = 'CREATED'.
wa_log-objkey = wa_item-pspid.
concatenate 'Commit Error: evtid ' eventid
select proj~pspid proj~post1 proj~erdat
from proj
inner join zwf_xmqqlog on proj~pspid = zwf_xmqqlog~pspid
into table it_item2
where proj~erdat = yesterday.
loop at it_item into wa_item.
if it_item2 is not initial .
read table it_item2 into wa_item2 with key pspid = wa_item-pspid .
endif.
if wa_item2 is initial.
into wa_log-zmemo.
modify zwf_evt_log from wa_log.
else.
"----Commit successfully-------
data : wa_swelcfg type swelcfg.
clear : wa_swelcfg.
select single *
into wa_swelcfg
from swelcfg
where dummy = 'X'.
if wa_swelcfg-evtlog is initial.
data : wa_log type zwf_evt_log.
clear : wa_log.
wa_log-datum = sy-datum.
wa_log-uzeit = sy-uzeit.
wa_log-uname = sy-uname.
into wa_log-zmemo.
modify zwf_evt_log from wa_log.
endif.
endif.
endif.
endif.
其实就是表1记录放入内表A,表1表2共有的记录放入内表B,LOOP内表A,读每条记录看是否在内表B中能够读到,如果读到的为空,就执行操作。详见Code.
*&---------------------------------------------------------------------*
"触发工作流
objkey = wa_item-pspid.
call function 'SWE_EVENT_CREATE'
exporting
objtype = objtype
message i000(zwf) with '当前系统未打开Event Log.' .
else.
wait up to 1 seconds.
select single *
into lw_swfrevtlog
* START_WITH_DELAY = ' '
* START_RECFB_SYNCHRON = ' '
* NO_COMMIT_FOR_QUEUE = ' '
* DEBUG_FLAG = ' '
相关文档
最新文档