SAP ABAP 跪求指导
我是ABAP 新手 请各位高手指点下下面这道题 帮忙改错和优化 谢谢REPORT Z_PP.
TYPES:BEGIN OF TY_DATA,
MATNR TYPE MARA-MATNR,
MAKTX TYPE MAKT-MAKTX,
END OF TY_DATA.
DATA IT_DATA TYPE STANDARD TABLE OF TY_DATA.
DATA IS_DATA TYPE TY_DATA.
DATA IT_MARA TYPE STANDARD TABLE OF MARA.
DATA IS_MARA TYPE MARA.
DATA IT_MAKT TYPE STANDARD TABLE OF MAKT.
DATA IS_MAKT TYPE MAKT.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE IT_MARA
FROM MARA.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE IT_MAKT
FROM MAKT.
LOOP AT IT_MARA INTO IS_MARA.
READ TABLE IT_MAKT INTO IS_MAKT WITH KEY MATNR = IS_MARA-MATNR
BINARY SEARCH.
IS_DATA-MATNR = IS_MAKT-MATNR.
IS_DATA-MAKTX = IS_MAKT-MAKTX.
APPEND IS_DATA TO IT_DATA.
WRITE: / IS_MAKT-MATNR,
IS_MAKT-MAKTX,
IS_DATA-MATNR,
IS_DATA-MAKTX.
ENDLOOP. --------------------编程问答-------------------- 晕,这点东西还指导啥呀,就是代码懒了点 --------------------编程问答-------------------- --------------------编程问答-------------------- 蛮好的呀,怎么啦? --------------------编程问答-------------------- 跪求,严重了吧, --------------------编程问答-------------------- http://www.cnblogs.com/mengxin523/
一起进步 --------------------编程问答-------------------- 挺难在,还要不会 --------------------编程问答-------------------- --------------------编程问答-------------------- 1、在SELECT语句中尽量写出你需要选择的字段,减少数据检索量,你这两个选择语句可以合并成一条,至于是left join还是inner join 就要看你的需要了。left join , inner join 在一次select中最好不要超过三个表
2、就算按你这个写法,选取makt的时候,可以用for all entries IT_MARA
3、在使用BINARY SEARCH Read Table时,先对内表按条件进行排序 --------------------编程问答-------------------- 还是要自己多动手,不过河,怎么知道水的深浅? --------------------编程问答-------------------- 1.可以表连接,合并两次DB操作为一次。速度会大大提升,请用se30性能分析验证。
2.二分查找之前请对内表排序。
3.read table之后,编辑数据之前请判断sy-subrc。
4.在循环里面使用工作区后请clear。 --------------------编程问答-------------------- 没有看有什么问题!! --------------------编程问答-------------------- SQL查数据,可以使用join关键字,还有最好不要使用这样的SELECT * FROM TABLE 的语句。 --------------------编程问答-------------------- MARA表太大了,最好先用for all entrise in --------------------编程问答-------------------- 使用BINARY SEARCH Read Table时,先对内表按条件进行排序 --------------------编程问答-------------------- 用SAP标准的功能MM60或自己学习一下SAP query,这个代码写得可行不可取,除非sap basis是你家亲戚。 --------------------编程问答-------------------- 1、SELECT语句写出你需要选择的字段;
2、就算按你这个写法,先查询MAKT到IT_MAKT中,可以用for all entries :
selct。。。。。。from MARA
for all entries in it_makt
where mara~matnr = it_makt-matnr.
3、在使用BINARY SEARCH Read Table时,先对内表按条件进行排序:
SORT it_mara by matnr --------------------编程问答-------------------- data: begin of IT_DATA occurs 0,
matnr like mara-matnr,
maktx like makt-maktx,
end of IT_DATA.
你这个功能直接从MAKT中取数就行了,不用MARA表。
select matnr maktx INTO CORRESPONDING FIELDS OF TABLE IT_DATA
from makt .
如果一定要从MARA关联,可以使用JOIN
select a~matnr b~maktx INTO CORRESPONDING FIELDS OF TABLE IT_DATA
from mara as a
inner join makt as b on a~matnr eq b~matnr and b~langu = sy-langu.
loop at it_data.
"write:.......
endloop.
--------------------编程问答-------------------- 一般少用模糊查询 --------------------编程问答-------------------- 条件设置范围太大 --------------------编程问答--------------------
+1 --------------------编程问答-------------------- 整体思路和语法没有问题,就是你写的select 语句有问题,在查询物料主数据和对应物料名称时,可以写做左连接查询(left join)这样速度会大幅提升的。 --------------------编程问答-------------------- 哥们, 你 READ TABLE IT_MAKT INTO IS_MAKT WITH KEY MATNR = IS_MARA-MATNR
BINARY SEARCH. READ 之前不排序? --------------------编程问答-------------------- 是要取物料號及其對應的描述吧?
不知以下代易做图效率如何,你可以參考下。
SELECT a~matnr b~maktx
INTO CORRESPONDING FIELDS OF TABLE IT_data
FROM MARA as a
inner join makt as b on b~matnr = a~matnr
where b~spras = sy-langu.
补充:企业软件 , ERP/CRM