当前位置:编程学习 > 网站相关 >>

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.
--------------------编程问答-------------------- 一般少用模糊查询 --------------------编程问答-------------------- 条件设置范围太大 --------------------编程问答--------------------
引用 19 楼 u011527422 的回复:
条件设置范围太大

+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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,