在标准表(VBFA:销售单据流)中传递Vbrp的输入以提供转储

2020-09-16 23:30发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) vbfa-1.jpg ...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


vbfa-1.jpg vbfa-3.jpg vbfa-4.jpg

亲爱的所有人,

实际上我有一个与销售有关的ZReport。

在该特定报告中,我正在做一些优化,以使该报告可以执行1年。

在优化之前,如果对所有工厂,所有分销渠道和所有部门执行为期1年(2014年4月1日至2015年3月31日)的报告,则将给出转储。

因此,使用上述输入,报告将进行转储。

现在,我在此zreport中做了一些优化,以便可以改善运行时间。

我所做的是,我将循环内的select单个查询替换为循环外所有条目select。

因此,除了VBFA上的选择查询外,所有查询都工作正常。它正在执行很多时间,最后导致转储。

下面是我的选择查询:-

选择VBELN
FKART
WAERK
VKORG
VTWEG
KNUMV
FKDAT
NETWR VTWEG
XBLNR从VBRK到表IT_VBRK

VBELN IN S_VBELN "发票编号

AND FKART IN S_FKART "发票类型

不加入FKART('ZG2','ZL2','ZF5','ZRE','F8')

AND VKORG = P_VKORG "销售组织

和VTWEG IN P_VTWEG "分销渠道

AND FKDAT IN S_DATE "发票日期

与S_KUNAG中的KUNAG和

KUNRG IN S_KUNRG "运送至派对

AND SFAKN EQ SPACE "已取消的发票具有此处的参考单据
和FKSTO NE'X'"以排除已取消的发票

和S_BLAND和MRNKZ NE'X'的区域。


如果SY-SUBRC NE 0。

消息"未找到数据"类型" I"。请进行列表处理。

ENDIF。


选择VBELN
POSNR
FKIMG
VRKME
VGBEL
AUBEL
MATNR
ARKTX
充电
WERKS
KONDM VKAUS FROM 对于IT_VBRK中所有条目的VBRP到表IT_VBRP中,其中VBELN = S_MAT中的IT_VBRK-VBELN和MATNR和P_SPART中的SPART以及S_CHARG中的CHARG和P_WERKS中的WERKS和S_MATNR中的KONDM。

如果SY-SUBRC NE 0。

消息"未找到数据"类型" I"。请进行列表处理。

ENDIF。

选择

VBELN

PARVW

KUNNR

ADRNR

将VBPA放入表IT_VBPA中,用于IT_VBRK中的所有条目

VBELN = IT_VBRK-VBELN和Parvw输入('WE','RE','RG')。


SELECT

KUNNR

NAME1

NAME2

STCD3

区域

将KNA1从IT_VBPA中的所有条目插入表IT_KNA1_TEMP

KUNNR = IT_VBPA-KUNNR。



SELECT

ADDRNUMBER

STR_SUPPL1

STR_SUPPL2

街道

CITY1

从ADRC到表IT_ADRC的CITY2,用于IT_VBPA中的所有条目,其中ADDRNUMBER = IT_VBPA-ADRNR。

如果IT_VBRP []不初始。

选择

MATNR

WERKS

STEUC

从MARC到表IT_MARC中IT_VBRP的所有条目,其中MATNR = IT_VBRP-MATNR和WERKS = IT_VBRP-WERKS。

选择

RDOC

EXPIND

状态

从J_1IEXCHDR到表IT_J_1IEXCHDR中IT_VBRP中的所有条目,其中RDOC = IT_VBRP-VBELN且STATUS ='C'。

选择

VBELV

VBELN

POSNN

VBTYP_N

VBTYP_V

从VBFA到IT_VBRP中所有条目的表IT_VBFA,其中VBELN = IT_VBRP-AUBEL AND
POSNN = IT_VBRP-POSNR和

VBTYP_N ='C'。


删除IT_VBFA,其中VBTYP_V <>'G'。

ENDIF。

因此,我用。中的所有条目替换了所有选择单个查询。

我的问题是,只有该查询以粗体突出显示会占用大量时间,因此导致转储。 超过了时间限制。

请指导我如何解决此问题。

第二,如果我手动输入SE11 VBFA表的内部表IT_VBRP TO Standard表VBFA中获得的值,则手动检查对VBFA的选择查询为何给出转储。

然后,标准表也在提供转储。

所以我无法找到问题所在。

vbfa-1.jpg vbfa-3.jpg

标准表正在提供转储。 我已经附上了转储日志。 我不明白为什么标准表:VBFA会进行转储。

关于 zsales-report-1.jpg zsales-report-2.jpg

vbfa-1.jpg (97.6 kB)
5条回答
葫芦娃快救爷爷
2020-09-17 00:18

HI,

我认为你误解了我。 我说过您可以加入vbrk和vbrp表以在单个表中获取数据。 为了获取大量数据,将其拆分为我上面提到的可管理的数据大小。 这样即使有延迟也不会放弃。

据我了解,您正在从表格中计算发票金额。 为此,您可以加入vbrk和vbrp以获取我上面提到的数据(提到了包大小),然后在其中进行konv选择。

对于KONV表,您需要根据定价条件KSCHL添加,否则如果更改定价条件(价格,税金,折扣,附加费,总金额和含税金额等所有内容都在KONV中)直接添加,则会有随机数据 。 因此,您可以将read用于定价条件。

或者,如果您想避免嵌套循环,可以尝试在konv循环并读取相关数据。 我会这样。

从vbrk中选择数据加入vbrp。
 如果找到数据{
             <或任何其他需要的数据>
              从konv中为vbrk-vbrp中的所有条目选择数据
 }
 在konv循环{
        读取主表中的相关vbrk-vbrp数据并分配给字段符号。
       如果找不到{
        追加新行并分配给字段符号。
       }
       <执行主数据所需的其他作业>
 }
 

这是与如何避免循环内循环

如上述问题中的 Thomas Zloch 所述,请加入表格。 我已经举了一个例子,请做一些研究。

一周热门 更多>