文章分类 -  ABAP-Internal Table

摘要:读取内表的字段名一个可以读取内表的字段名的程序。1,系统表字段与内文。DD03L --> 表格欄位DD03T --> 欄位內文DD03V --> 表格視圖DD04L --> 資料元素DD04T --> 元素內文DD04V --> 元素視圖2,读取表字段名类。************************************************************************* 本程序实现的功能是读取结构的字段名。************************************************************* 阅读全文
posted @ 2013-04-11 12:15 VerySky 阅读(1706) 评论(0) 推荐(0)
摘要:动态内表怎样排序动态内表要排序时,因为不知道内表中的字段名字,所以不能直接用SORT table BY field1 field2...可以使用下面的方法来实现:SORT table BY (sorttable)表类型: ABAP_SORTORDER_TAB结构类型: ABAP_SORTORDER代码示例: DATA:W_IT_FIELDTYPEABAP_SORTORDER_TAB,W_STR_FIELDTYPEABAP_SORTORDER.W_STR_FIELD-NAME='NAME1'.W_STR_FIELD-DESCENDING=''.APPENDW_ST 阅读全文
posted @ 2013-03-28 10:54 VerySky 阅读(785) 评论(0) 推荐(0)
摘要:ABAP 动态内表 取表结构信息 (转自老白的ABAP博客)REPORT z_barry_test .TYPE-POOLS : abap.FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE, <dyn_wa>, <dyn_field>.DATA: dy_table TYPE REF TO data, dy_line TYPE REF TO data, xfc TYPE lvc_s_fcat, ifc TYPE lvc_t_fcat.SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRA 阅读全文
posted @ 2012-05-23 11:02 VerySky 阅读(4369) 评论(0) 推荐(0)
摘要:ABAP 动态生成内表的几种方法(Several Methods of Dynamic Internal Table Creation)最近要写个程序,既有更新的,也有删除的,需要涉及到很多系统表,如果一个表一个表进行更新或者删除太慢了,于是就想通过创建动态内表来实现这些功能,在网上找了一些资料,经过多次尝试,终于测试成功了。网上讲述的创建动态内表的方法大致有两种。我做了一下测试,源代码附后。在这里提醒大家一点,在做动态更新程序的时候,要注意两点:1.使用modify (p_tabname) from <dyn_wa>. 的时候,一定要确定要更新的字段是不是系统表的关键字段,如果是 阅读全文
posted @ 2012-05-23 11:01 VerySky 阅读(13040) 评论(1) 推荐(0)
摘要:ABAP内表有关的系统变量SY-TABIX– 内表当前行的索引号。SY-TABIX 的值可以被以下命令修改,但是只适用于索引表(index table)。对于哈希表(Hashed table),这个系统变量的值为空或0。APPEND 将 SY-TABIX 的值置为表最后一行的索引号,也就是说它将等于内表的行数。COLLECT 将 SY-TABIX 的值置为现有或刚刚插入的行的索引号。如果内表为哈希(hashed table)表的话,SY-TABIX 被置为0。LOOP AT 将 SY-TABIX 的值置为每一次循环开始时的当前行索引号,在整个循环的结束时 SY-TABIX 被恢复为它在进入循环 阅读全文
posted @ 2012-05-08 16:06 VerySky 阅读(564) 评论(0) 推荐(0)
摘要:动态内表的创建和使用主要有以下几点:1.动态内表的创建,首先要定义动态结构,然后再根据定义的动态结构利用系统一个标准的method:”cl_alv_table_create=>create_dynamic_table“生成动态内表。2.动态内表的赋值,遍历动态结构,获取指定的字段,然后给指定的字段赋值。3.动态内表的读取显示,与赋值相似,遍历动态结构,获取指定的字段,然后读取对应字段的值。具体实现方法如下所示:定义:FIELD-SYMBOLS:<dyn_table> TYPE STANDARD TABLE,<dyn_wa> TYPE ANY,<dyn_fie 阅读全文
posted @ 2012-03-26 16:39 VerySky 阅读(495) 评论(0) 推荐(0)
摘要:一对多的内表处理比较笨,一开始没转过弯来=。=select之后append的位置~A表列是已根据条件选出的记录,关联B表后字段即列数增多,A对B有可能是1对多关系,即要求扩展行。B又对C是1对多关系,最后行数是A*B*C。在purchase report里,request date/qty在EEKO里取出来之后,在EKES里添加promised dlvy date/qty,然后在ekbe表中添加actually date/qty.如果B,C表为空,仍然要保持A表记录行,BC标列为空。B=0,行数就是A*C.LOOPATgt_ekpo1."已取出需求数量时间的记录MOVE-CORRES 阅读全文
posted @ 2012-02-28 22:55 VerySky 阅读(504) 评论(0) 推荐(0)
摘要:提取两个内表交集提取两个内表交集 我有注意到,SAP自带的函数:CTVB_COMPARE_TABLES和BKK_COMPARE_TABLES;似乎可以比较两个内表,得出第二个内表不同于第一个内表的部分(新增/删除了那些部分)但是,具体的使用,还请有经验的朋友不吝赐教啊!因为,我在测试数据时,发现这两个函数的效果不那么简单。如果上述函数确实可以,提取两个内表不同部分,则我可以据此做两次比较,得到两个内表的交集。所以,我先用另外一种方式解决了-自己写了一个提取两个内表交集的函数,供大家检阅:*" IMPORTING*" VALUE(ITAB1) TYPE INDEX TABLE 阅读全文
posted @ 2011-10-09 22:35 VerySky 阅读(741) 评论(0) 推荐(0)
摘要:这个问题碰到过好几次了,感觉也蛮常见的。solution虽然有,但是感觉繁琐,而且效率比较低下。今天好好考虑了下,总结出了一个相对聪明点的。代码如下:REPORT ZTESTSQ.TYPES: BEGIN OF t_itab1, f1 type char1, f2 type char1, END OF t_itab1.DATA: itab1 type STANDARD TABLE OF t_itab1 WITH HEADER LINE, wa_itab1 type t_itab1, wa_itab2 type t_itab1.DATA: v_flag type c... 阅读全文
posted @ 2011-10-09 18:00 VerySky 阅读(2392) 评论(0) 推荐(0)
摘要:定义内表与工作区最方便的方法*定义 名为 ITAB 的内表, 内表结构 参照表 TABLE 。DATA: ITAB TYPE TABLE OF TABLE. *定义 名为 WA 的工作区, 其 行结构与 内表 ITAB 相同 。DATA: WA LIKE LINE OF ITAB.----------------------------------------------------------------1.使用occurs 0,定义的不再是对象,而是internal table 2.使用with header line后缀,定义为internal table的同时也定义了一个同名对象,因此 阅读全文
posted @ 2011-10-09 15:37 VerySky 阅读(504) 评论(0) 推荐(0)
摘要:[转载]SAPABAPInternalTable一些事原文地址:SAPABAPInternalTable一些事作者:SAP立志一. Internal Table 的宣告ABAP/4中的Internal Table是一种Data Structure,类似于其它语言中的STRUTURE,它可以由几个不同类型的字段(field)组成,用来表示具有不同属性的某一事物,单独一笔数据表示某个事物,多笔数据表示具有相同属性的多个事物.例如:为了存取或记录某班的同学资料,我们创建如下的internal table:DATA: BEGIN OF STUDENT OCCURS 20,STD_IDTYPE N,NA 阅读全文
posted @ 2011-10-05 04:04 VerySky 阅读(4570) 评论(0) 推荐(0)
摘要:ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介1. Difference between Work Area and Header Line在对内表进行一些操作的时候,比如增加或者取回一条记录.我们必须暂时保存这条记录.这条记录就保存在内表的工作区里(work area).内表的工作区必须和内表有相同的结构.内表由主体(body)和一个可选的标题行(head line)组成.标题行是一个隐式的(implicit)工作区.在内表声明的时候,可以选择有无标题行.e.g.data: begin of itab occurs 10, 阅读全文
posted @ 2011-08-21 23:27 VerySky 阅读(483) 评论(0) 推荐(0)
摘要:内部表行数统计方法: 1.LOOP AT itab. n = n + 1. ENDLOOP. 该方法是通过循环内部表自己累加行数。 2.DESCRIBE TABLE itab LINES n. 该语句通过获得内部表的属性,将内部表行数赋值给n,n为I型变量。 3.n = lines( itab ). 使用函数来计算内部表行数。此函数由三部分构成。 1)函数名和左括号(其间没有空格); 2)处理对象内部表(与左右括号之间有空格); 3)右括号。 以上三种方法中,第一种方法不推荐使用,推荐使用后两种方法。 阅读全文
posted @ 2011-08-21 23:26 VerySky 阅读(727) 评论(0) 推荐(0)
摘要:初始化内表的作用是清空内表所有的数据行,将内表恢复到填充或赋值之前的状态。初始化内表过程中需要注意之处仍然是初始化无 表头行内表和有表头行内表的区别,以及初始化内表和表头行的区别。 概述如下(1)CLEAR ITAB[]. 同时清空表头和行内表的值 (2)CLEAR ITAB. 只清空内表本身的值,保留表头行的值。 (3)REFRESH ITAB 只清空内表本身的值,保留表头行的值。 (4)FREE ITAB.只清空内表本身的值,保留表头行的值。 ----------------------------------详细描述------------------------------------ 阅读全文
posted @ 2011-08-21 23:22 VerySky 阅读(4206) 评论(0) 推荐(1)
摘要:内表和工作区的区别在于工作区就相当于表头,只有一行。在定义内表需要OCCURS,工作区则不需要。 如: 定义一个内表 DATA: BEGIN OF itab OCCURS 0, ...... END OF itab. 定义一个工作区: DATA: BEGIN OF itab, ...... END OF itab. OCCURS是分配数据缓冲区,当你知道可能每次用SELECT命令中或交换的记录数时,可以OCCURS+具体数值。如果用OCCURS 0声明时,Buffers由系统自动分配。先是用TYPES关键字定义一个行(row)的类型.如下:TYPES: BEGIN OF line, fi... 阅读全文
posted @ 2011-08-21 23:14 VerySky 阅读(2628) 评论(0) 推荐(0)
摘要:WRITE: (18) itab-matnrNO-GAP INPUT ON. 输出时,这个字段是可以修改输入的状态。下面是将有变动的数据读入内表.DO.CLEAR tcheck.READ LINE sy-index OF CURRENT PAGE FIELD VALUEcheckINTO tcheck itab-matnrINTO itab2-matnr .IF sy-subrc <> 0.EXIT.ENDIF.itab2-matnr = itab-matnr.IF tcheck = 'X'.APPEND itab2. CLEAR itab2.endif.enddo 阅读全文
posted @ 2011-08-21 23:09 VerySky 阅读(270) 评论(0) 推荐(0)
摘要:删除重复记录,sort itab by lifnr bankn.delete adjacent duplicates from itab.先按字段排序,让后删除完全相同的记录,也可以by某些相同的字段删除,比如按如下2个字段删除相同的记录用:COMPARINGsort itab by lifnr bankn.delete adjacent duplicates from itab comparing lifnr bankn. 阅读全文
posted @ 2011-08-21 23:07 VerySky 阅读(1125) 评论(0) 推荐(0)
摘要:DATA:BEGIN OF man, NAME(20) TYPE c, HIGH TYPE P DECIMALS 2, WEIGHT TYPE P DECIMALS 2,END OF man.DATA:MAN1 Like TABLE OF man.man-name = 'Joy'.man-high = '1.79'.man-weight = 140.insert man INTO TABLE man1.man-name = 'Tom'.man-high = '1.99'.man-weight = 160.insert man IN 阅读全文
posted @ 2011-08-21 23:04 VerySky 阅读(1577) 评论(0) 推荐(0)
摘要:DATA:BEGIN OF man, NAME(20) TYPE c, HIGH TYPE P DECIMALS 2, WEIGHT TYPE P DECIMALS 2,END OF man.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 = '1.99'.ma 阅读全文
posted @ 2011-08-21 23:03 VerySky 阅读(1734) 评论(0) 推荐(0)
摘要:DATA:BEGIN OF man, NAME(20) TYPE c, HIGH TYPE P DECIMALS 2, WEIGHT TYPE P DECIMALS 2,END OF man.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 = '1.99'.ma 阅读全文
posted @ 2011-08-21 23:03 VerySky 阅读(3063) 评论(0) 推荐(0)