ERP俱乐部
ERP爱好者、ERP从业者互相交流、互相学习的乐园;我们的愿景是成为全球一流的中文ERP(Enterprise Resource Planning)交流平台
网站首页 论坛首页 搜索 用户列表 FAQ 注册 登录  
ERP俱乐部 -> SAP专栏 -> ABAP -> 请教一下 如何对内表明细数据汇总
  请教一下 如何对内表明细数据汇总
帖子发起人: 皮皮熊   发起时间: 2008-05-26 04:44 下午   回复数: 6
? 上一主题 下一主题 ?
楼主
  2008-05-26, 04:44 下午
皮皮熊 离线,最后访问时间: 2008/11/11 18:03:38 皮皮熊

发帖数前500位

30级
等级: 30级
注册: 2008年5月10日
经验: 84
积分: 84
精华: 0
发贴: 70
排名: 309
Site Registered Users
请教一下 如何对内表明细数据汇总
 

达人:
请教一下
目标:将数据表中的结果存入到内表A中,
同时也对查询出来的明细汇总也存入到内表A中,然后一起输出到EXCEL模板中.

说明:如下这段代码
我将数据表中的数据查询出来存到内表中ITAB_OK
同时要对查询出来的结果根据A~AUART "销售凭证类型
  B~MATNR "物料号
         B~POSNR "销售凭证项目
对  B~KWMENG "订单数
C~MENGE  "数量 
汇总也存入ITAB_OK中然后然后一起输出到EXCEL模板中

请问如何做.

另多个表关联我采用了连续INNER JOIN  听说这种写法性能性不高.
请问有什么更好的解决方法吗?
谢谢



 SELECT
         A~AUART "销售凭证类型
         B~ERDAT "建立纪录日期
         B~VSTEL "接收点
         B~LGORT "库存地点
         B~KWMENG "订单数
         B~MATNR "物料号
         B~POSNR "销售凭证项目
         B~VBELN "销售凭证
         A~KUNNR "售达方
         A~VSBED "装运条件
         A~VKBUR "销售办事处
         A~VKGRP "销售组
         A~SPART "产品组
         A~VTWEG "分销渠道
         A~VKORG "销售组织
         A~AUGRU "订购原因
         A~XBLNR "参考凭证号
         C~DMBTR "按本位币计的金额
         C~MENGE  "数量
         C~BWART "移动类型
         C~MBLNR "物料凭证编号
         D~BUDAT "凭证中的记帐日期
      INTO CORRESPONDING FIELDS OF TABLE   ITAB_OK
           FROM VBAK AS A INNER JOIN VBAP AS B ON A~VBELN = B~VBELN
           INNER JOIN MSEG AS C ON B~MATNR = C~MATNR AND B~VBELN = C~KDAUF
   AND B~POSNR = C~KDPOS
           INNER JOIN MKPF AS D ON C~MBLNR = D~MBLNR AND C~MJAHR = D~MJAHR
         WHERE A~AUART = 'ZFD' AND A~KUNNR IN P_KUNNR AND A~VKORG IN
  P_VKORG AND A~VKBUR IN P_VKBUR AND A~VTWEG IN P_VTWEG AND B~MATNR IN
  P_MATNR AND B~ERDAT IN P_ERDAT AND A~ERNAM IN P_ERNAM AND D~BUDAT IN
  P_BUDAT AND B~VBELN IN P_VBELN  AND C~BWART = '903'

 


分享按钮 IP 地址: 已登录   来自: 已登录    返回顶部
第 2 楼
  2008-05-27, 09:12 上午
香蕉 离线,最后访问时间: 2008/12/22 17:37:25 香蕉

无等级

20级
等级: 20级
注册: 2008年5月16日
经验: 30
积分: 30
精华: 0
发贴: 20
排名: 932
Site Registered Users
Re: 请教一下 如何对内表明细数据汇总
 
大哥.你这代码能跑得出来吗?这么多个表JOIN,数据量大了之后你一点执行,你就可以去打场球再回来看结果了
IP 地址: 已登录   来自: 已登录    返回顶部
第 3 楼
  2008-05-27, 11:31 上午
皮皮熊 离线,最后访问时间: 2008/11/11 18:03:38 皮皮熊

发帖数前500位

30级
等级: 30级
注册: 2008年5月10日
经验: 84
积分: 84
精华: 0
发贴: 70
排名: 309
Site Registered Users
Re: 请教一下 如何对内表明细数据汇总
 
就是啊
如何优化它啊
分享按钮 IP 地址: 已登录   来自: 已登录    返回顶部
第 4 楼
  2008-05-27, 03:01 下午
香蕉 离线,最后访问时间: 2008/12/22 17:37:25 香蕉

无等级

20级
等级: 20级
注册: 2008年5月16日
经验: 30
积分: 30
精华: 0
发贴: 20
排名: 932
Site Registered Users
Re: 请教一下 如何对内表明细数据汇总
 
一般JOIN不要超过2张表,而且数据量大的表不要JOIN,比如MSEG这个表.
IP 地址: 已登录   来自: 已登录    返回顶部
第 5 楼
  2008-05-27, 05:05 下午
香蕉 离线,最后访问时间: 2008/12/22 17:37:25 香蕉

无等级

20级
等级: 20级
注册: 2008年5月16日
经验: 30
积分: 30
精华: 0
发贴: 20
排名: 932
Site Registered Users
Re: 请教一下 如何对内表明细数据汇总
 
data: begin of itab_ok OCCURS 0,
AUART like VBAK-auart,"销售凭证类型
ERDAT like VBAP-erdat,"建立纪录日期
VSTEL like VBAP-vstel,"接收点
LGORT like VBAP-lgort,"库存地点
KWMENG like VBAP-kwmeng,"订单数
MATNR like vbap-matnr,"物料号
POSNR like VBAP-posnr,"销售凭证项目
VBELN like VBAP-vbeln,"销售凭证
KUNNR like VBAK-kunnr,"售达方
VSBED like VBAK-vsbed,"装运条件
VKBUR like VBAK-vkbur,"销售办事处
VKGRP like VBAK-vkgrp,"销售组
SPART like VBAK-spart,"产品组
VTWEG like VBAK-vtweg,"分销渠道
VKORG like VBAK-vkorg,"销售组织
AUGRU like VBAK-augru,"订购原因
XBLNR like VBAK-xblnr,"参考凭证号
DMBTR like MSEG-dmbtr,"按本位币计的金额
MENGE like MSEG-menge, "数量
BWART like MSEG-bwart,"移动类型
MBLNR like mseg-mblnr,"物料凭证编号
budat like mkpf-budat,
mjahr like mseg-mjahr,
end of itab_ok.
select A~AUART "销售凭证类型
B~ERDAT "建立纪录日期
B~VSTEL "接收点
B~LGORT "库存地点
B~KWMENG "订单数
B~MATNR "物料号
B~POSNR "销售凭证项目
B~VBELN "销售凭证
A~KUNNR "售达方
A~VSBED "装运条件
A~VKBUR "销售办事处
A~VKGRP "销售组
A~SPART "产品组
A~VTWEG "分销渠道
A~VKORG "销售组织
A~AUGRU "订购原因
A~XBLNR "参考凭证号
INTO CORRESPONDING FIELDS OF TABLE ITAB_OK
FROM VBAK AS A INNER JOIN VBAP AS B ON A~VBELN = B~VBELN
WHERE A~AUART = 'ZFD'
AND A~KUNNR IN P_KUNNR
AND A~VKORG IN P_VKORG
AND A~VKBUR IN P_VKBUR
AND A~VTWEG IN P_VTWEG
AND B~MATNR IN P_MATNR
AND B~ERDAT IN P_ERDAT
AND A~ERNAM IN P_ERNAM
* AND D~BUDAT IN P_BUDAT
AND B~VBELN IN P_VBELN.
* AND C~BWART = '903'.
loop at itab_ok.
select single DMBTR "按本位币计的金额
MENGE "数量
BWART "移动类型
MBLNR "物料凭证编号
mjahr
into (itab_ok-dmbtr,itab_ok-menge,itab_ok-bwart,itab_ok-mblnr,itab_ok-mjahr)
from mseg
where matnr = itab_ok-matnr
and kdauf = itab_ok-vbeln
and kdpos = itab_ok-posnr
and bwart = '903'.

select single BUDAT
into itab_ok-budat
from mkpf
WHERE mblnr = itab_ok-mblnr
and mjahr = itab_ok-mjahr
AND BUDAT IN P_BUDAT.

modify itab_ok.

endloop.
改成这样可能会好一点.试试吧.
分享按钮 IP 地址: 已登录   来自: 已登录    返回顶部
第 6 楼
  2008-05-29, 11:02 上午
testoop 离线,最后访问时间: 2009/6/12 16:06:20 testoop

无等级

20级
等级: 20级
注册: 2007年11月22日
区域: 南京
经验: 27
积分: 27
精华: 0
发贴: 24
排名: 1,065
Site Registered Users
Re: 请教一下 如何对内表明细数据汇总
 
在SAP里面编程有时不如SQL Server方便的,他的SQL 链接不怎么方便。我们需要写更多的代码来实现一个SQL语句实现的功能。
楼上兄弟的做法是一种很好的思路。
一不小心混到SAP圈子里面了,希望向大家多学习

愿意与大家共享资料

MSN:cqu6729@163.com

QQ:229492884


IP 地址: 已登录   来自: 已登录    返回顶部
第 7 楼
  2008-05-29, 11:19 上午
皮皮熊 离线,最后访问时间: 2008/11/11 18:03:38 皮皮熊

发帖数前500位

30级
等级: 30级
注册: 2008年5月10日
经验: 84
积分: 84
精华: 0
发贴: 70
排名: 309
Site Registered Users
Re: 请教一下 如何对内表明细数据汇总
 
 香蕉 wrote:
data: begin of itab_ok OCCURS 0,
AUART like VBAK-auart,"销售凭证类型
ERDAT like VBAP-erdat,"建立纪录日期
VSTEL like VBAP-vstel,"接收点
LGORT like VBAP-lgort,"库存地点
KWMENG like VBAP-kwmeng,"订单数
MATNR like vbap-matnr,"物料号
POSNR like VBAP-posnr,"销售凭证项目
VBELN like VBAP-vbeln,"销售凭证
KUNNR like VBAK-kunnr,"售达方
VSBED like VBAK-vsbed,"装运条件
VKBUR like VBAK-vkbur,"销售办事处
VKGRP like VBAK-vkgrp,"销售组
SPART like VBAK-spart,"产品组
VTWEG like VBAK-vtweg,"分销渠道
VKORG like VBAK-vkorg,"销售组织
AUGRU like VBAK-augru,"订购原因
XBLNR like VBAK-xblnr,"参考凭证号
DMBTR like MSEG-dmbtr,"按本位币计的金额
MENGE like MSEG-menge, "数量
BWART like MSEG-bwart,"移动类型
MBLNR like mseg-mblnr,"物料凭证编号
budat like mkpf-budat,
mjahr like mseg-mjahr,
end of itab_ok.
select A~AUART "销售凭证类型
B~ERDAT "建立纪录日期
B~VSTEL "接收点
B~LGORT "库存地点
B~KWMENG "订单数
B~MATNR "物料号
B~POSNR "销售凭证项目
B~VBELN "销售凭证
A~KUNNR "售达方
A~VSBED "装运条件
A~VKBUR "销售办事处
A~VKGRP "销售组
A~SPART "产品组
A~VTWEG "分销渠道
A~VKORG "销售组织
A~AUGRU "订购原因
A~XBLNR "参考凭证号
INTO CORRESPONDING FIELDS OF TABLE ITAB_OK
FROM VBAK AS A INNER JOIN VBAP AS B ON A~VBELN = B~VBELN
WHERE A~AUART = 'ZFD'
AND A~KUNNR IN P_KUNNR
AND A~VKORG IN P_VKORG
AND A~VKBUR IN P_VKBUR
AND A~VTWEG IN P_VTWEG
AND B~MATNR IN P_MATNR
AND B~ERDAT IN P_ERDAT
AND A~ERNAM IN P_ERNAM
* AND D~BUDAT IN P_BUDAT
AND B~VBELN IN P_VBELN.
* AND C~BWART = '903'.
loop at itab_ok.
select single DMBTR "按本位币计的金额
MENGE "数量
BWART "移动类型
MBLNR "物料凭证编号
mjahr
into (itab_ok-dmbtr,itab_ok-menge,itab_ok-bwart,itab_ok-mblnr,itab_ok-mjahr)
from mseg
where matnr = itab_ok-matnr
and kdauf = itab_ok-vbeln
and kdpos = itab_ok-posnr
and bwart = '903'.

select single BUDAT
into itab_ok-budat
from mkpf
WHERE mblnr = itab_ok-mblnr
and mjahr = itab_ok-mjahr
AND BUDAT IN P_BUDAT.

modify itab_ok.

endloop.
改成这样可能会好一点.试试吧.



谢谢
分享按钮 IP 地址: 已登录   来自: 已登录    返回顶部
 第 1 页 总共 1 页 [共有 7 条记录]
ERP俱乐部 -> SAP专栏 -> ABAP -> 请教一下 如何对内表明细数据汇总
(C)Copyright 2005-2020 www.erpclub.org All Rights Reserved.
Tel:+86-755-26444630
Email:webmaster@yok.com.cn