REPORT Y_JUNE_04.
TABLES :EKPO , MAKT.
*定义内表
DATA: BEGIN OF ITABLE OCCURS 0,
EBELN LIKE EKPO-EBELN,"采购订单
MATNR LIKE EKPO-MATNR,"物料号
BUKRS LIKE EKPO-BUKRS,"公司代码
LGORT LIKE EKPO-LGORT,"库存地点
MAKTX LIKE MAKT-MAKTX,"第二张表的字段
END OF ITABLE.
*定义屏幕字段
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001."
SELECT-OPTIONS:S_EBELN FOR EKPO-EBELN."
SELECTION-SCREEN END OF BLOCK B1.
*开始取数
SELECT EBELN MATNR BUKRS LGORT "取第一个表中的数据到内表中区
INTO CORRESPONDING FIELDS OF TABLE ITABLE "这里就有TABLE
FROM EKPO
WHERE EBELN IN S_EBELN.
LOOP AT ITABLE."在读取内表的时候把字段描述添加进去
SELECT SINGLE MAKTX "取物料描述到内表对应字段
INTO ITABLE-MAKTX
FROM MAKT
WHERE MATNR = ITABLE-MATNR .
MODIFY ITABLE."修改数据,应为前面用了TABLE
CLEAR ITABLE.
Endloop.
上面这个程序应该怎么修改啊 报错显示工作区字段比所选字段多。非得删除 itable中关键字吗
哦,原来是这样啊,那想请问如果是2张表又没有on 后面的等式关系,该怎么办呢?
追答你就按照我给你的程序改嘛,多简单,为什么硬要分两张表,只要两张表里面有相同的关联字段,就可以用 inner join on
你那EKPO 和 MAKT不是可以通过MATNR关联的嘛。
如果你真的想分开两次查询就把第一个查询语句改成这样
*开始取数
SELECT EBELN MATNR BUKRS LGORT "取第一个表中的数据到内表中区
INTO
(ITABLE -EBELN,ITABLE-MATNR,ITABLE-BUKRS,ITABLE-LGORT)
FROM EKPO
WHERE EBELN IN S_EBELN.
剩下就可以按照你的方式继续往表内插入物料描述了
abap工作区字段比所选字段多
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001."SELECT-OPTIONS:S_EBELN FOR EKPO-EBELN."SELECTION-SCREEN END OF BLOCK B1.开始取数 SELECT EBELN MATNR BUKRS LGORT "取第一个表中的数据到内表中区 INTO CORRESPONDING FIELDS OF TABLE ITABLE "这里就有TABLE FROM EKPO...
abap 指针 和工作区 哪个 效率高
abap 的 字段符合(即指针)的效率比工作区高,它是指向地址的,以loop循环更改内表为例,使用字段符合,在更改后无需使用modify,即每次处理都减少了这步骤,那效率是明显要高的。例:字段符合 loop at tab1 assigning <fs>."这样就可以对内表完成更改 <fs>-field1 = 'xxx'.endloop.工作区 l...
ABAP对内表操作要通过工作区域进行的疑问
因为在ABAP中常用的SQL是SAP自带的OPEN SQL,它与NATIVE SQL不同,还要多一层解析的过程。因此,在ABAP中使用多表JOIN(>3)的效率远小于将数据存储到内表后,再对内表进行后续的操作。而内表,实际上就是一个临时存储空间,有效的范围是当前程序;而工作区,实际上就是一个结构,它与内表的区别就...
ABAP代码的问题,请进。
TYPES后面定义的是工作区,ITAB1是内表。with header line的意思就是工作区和内表是一个变量。data ITAB1 like table of qwe with header line.ITAB1既是工作区也是内表,但对初学者来讲,在程序中让两者混乱,比较麻烦。
请教,一个abap问题,
).LOOP AT l_descr_ref->components ASSIGNING . -name :字段名ENDLOOP.describe l_descr_ref->componentslenths len.就可以了。还有个问题:在方法中,我用table 作为参数。但是在方法里面,如何接受到table的数据呀。好象创建不了工作区。用loop at i_tab assigning 可以。其他的就不知道了。
请问ABAP中internal table和work area的区别是什么?
internal table 中文叫做内表,本质是一个多行的容器,类似C#里一个结构的数组。work area 中文叫做工作区,它是内表的一个行,类似C#里的一个结构。之所以经常给内表定义工作区,是为了操作内表数据方便,因为虽然内表有多行数据,但是你一次只能针对一条数据来处理,这条数据就放在工作区。
SAP abap开发现在有一张内表ITAB里面有两个字段A和B数据如下:
l_times = l_times + 1."循环次数加1 IF l_times = 1."第一次循环,Wa2-zhsj1为空 Concatenate Wa-B '\/' into Wa2-zhsj1.ELSEIF l_times = l_lines."如果当前循环的次数等于内表ITAB的记录数 Concatenate Wa2-zhsj1 Wa-B into Wa2-zhsj1."则不需要加‘\/’ELSE.Concatenate Wa2-...
帮忙看一下这段Abap的程序,请写一下注释,有点看不明白
carrid和connid是spfli表的两个字段,分别是航班号和飞行连接数,是 德语的缩写。将符合条件的字段取出来放入work area工作区中。carrname是航班名称 SELECT carrid connid FROM spfli INTO (wa_carrid, wa_connid)WHERE cityfrom = p_cityfr.SELECT carrname FROM scarr INTO wa_carrname WHERE ...
abap中,怎么样用read获得内表中某一特定的字段值,而不是整条数据...
ABAP没有类似于二维数组[m][n]寻址的功能, 不像C或者C++,必须先得到整条数据,然后在获取某个字段.
ABAP TYPE 声明
后面的都是定义在系统中的类型,包括系统本身自带和用户自定义的,如果你定义的是变量或者常量,后面就是字段类型,如果你定义的是工作区或者结构体,后面就是结构类型,如果你定义的是内表,后面就是表类型,在ABAP编译器中是可以直接双击查看这个类型的 参考资料:自己的脑袋 ...