计划功能公式仅读取multiprovider中的一个infoprovider

2020-09-21 20:52发布

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

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


专家们,

我正在创建一个计划应用程序,以计算用于产生客户折扣的费率。 目标费率基于几种费率,其中一些是衍生的,而其他则是手动输入的。 由于数据来自多个源,因此我创建了一个聚合级别,该聚合级别从包含源DSO的多提供程序中读取。

ZCOP_O14 是计划DSO,其中包含产品,客户和费率历史记录。 此DSO还将包含我们在公式中设置的目标费率。

ZCOP_O02 是一个计划DSO,其中包含由我们的用户上传的客户价格数据。

我需要从ZCOP_O14中读取数据并从ZCOP_O02中获取记录,以计算定价目标,并将其存储在ZCOP_O14中的KF中。 我以为我在另一篇文章中找到了一种解决方案,但是只能从一个DSO中读取。

我尝试了几种过滤器策略以及代码的多次迭代。 如何从两个DSO读取此公式?

这是我现在的状态:


数据CH_TAR类型0DISTR_CHAN。
数据CH_REF类型0DISTR_CHAN。
数据CG_TAR类型ZCG_SOLD2。
数据CG_REF类型ZCG_SOLD2。
数据AG_TAR类型0PRODH2。
数据AG_REF TYPE 0 。
数据VER_TAR类型ZVERSION1。
数据VER_REF类型ZVERSION1。
数据量类型F.
数据IP_TAR类型0INFOPROV。
数据IP_REF类型0INFOPROV。

IP_TAR =' ZCOP_O14'。
IP_REF ='ZCOP_O02'。

* BREAK-POINT。

FOREACH CH_TAR,IP_TAR,AG_TAR,CG_TAR,VER_TAR。
* BREAK-POINT。
> FOREACH CH_REF,IP_REF,AG_REF,CG_REF,VER_REF IN REFDATA。
* BREAK-POINT。
如果CH_TAR = CH_REF并且AG_TAR = AG_REF和CG_TAR = CG_REF并且VER_TAR = VER_REF。
{ZPRPOL,CH_TAR, ZCOP_O14,AG_TAR,CG_TAR,VER_TAR} =
{ZBASERATE,CH_TAR,ZCOP_O14,AG_TAR,CG_TAR,VER_TAR} +
{ZRA_SBL01,CH_REF,ZCOP_O02,AG_REF,CG_REF,VER_REF_REF_CAM +
,ZCOP_O02,AG_REF,CG_REF,VER_REF} +
{ZRA_CMA01,CH_REF,ZCOP_O02,AG_REF,CG_REF,VER_REF}。
ENDIF。
E NDFOR。
ENDFOR。

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

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


专家们,

我正在创建一个计划应用程序,以计算用于产生客户折扣的费率。 目标费率基于几种费率,其中一些是衍生的,而其他则是手动输入的。 由于数据来自多个源,因此我创建了一个聚合级别,该聚合级别从包含源DSO的多提供程序中读取。

ZCOP_O14 是计划DSO,其中包含产品,客户和费率历史记录。 此DSO还将包含我们在公式中设置的目标费率。

ZCOP_O02 是一个计划DSO,其中包含由我们的用户上传的客户价格数据。

我需要从ZCOP_O14中读取数据并从ZCOP_O02中获取记录,以计算定价目标,并将其存储在ZCOP_O14中的KF中。 我以为我在另一篇文章中找到了一种解决方案,但是只能从一个DSO中读取。

我尝试了几种过滤器策略以及代码的多次迭代。 如何从两个DSO读取此公式?

这是我现在的状态:


数据CH_TAR类型0DISTR_CHAN。
数据CH_REF类型0DISTR_CHAN。
数据CG_TAR类型ZCG_SOLD2。
数据CG_REF类型ZCG_SOLD2。
数据AG_TAR类型0PRODH2。
数据AG_REF TYPE 0 。
数据VER_TAR类型ZVERSION1。
数据VER_REF类型ZVERSION1。
数据量类型F.
数据IP_TAR类型0INFOPROV。
数据IP_REF类型0INFOPROV。

IP_TAR =' ZCOP_O14'。
IP_REF ='ZCOP_O02'。

* BREAK-POINT。

FOREACH CH_TAR,IP_TAR,AG_TAR,CG_TAR,VER_TAR。
* BREAK-POINT。
> FOREACH CH_REF,IP_REF,AG_REF,CG_REF,VER_REF IN REFDATA。
* BREAK-POINT。
如果CH_TAR = CH_REF并且AG_TAR = AG_REF和CG_TAR = CG_REF并且VER_TAR = VER_REF。
{ZPRPOL,CH_TAR, ZCOP_O14,AG_TAR,CG_TAR,VER_TAR} =
{ZBASERATE,CH_TAR,ZCOP_O14,AG_TAR,CG_TAR,VER_TAR} +
{ZRA_SBL01,CH_REF,ZCOP_O02,AG_REF,CG_REF,VER_REF_REF_CAM +
,ZCOP_O02,AG_REF,CG_REF,VER_REF} +
{ZRA_CMA01,CH_REF,ZCOP_O02,AG_REF,CG_REF,VER_REF}。
ENDIF。
E NDFOR。
ENDFOR。

付费偷看设置
发送
3条回答
渐行渐远_HoldOn
1楼 · 2020-09-21 21:26.采纳回答

请参阅我对Cornelia的答复,了解我申请的解决方案。

我是小鹏鹏啊
2楼-- · 2020-09-21 21:10

谢谢Cornelia。 此聚合级别中的每个信息提供者都有数据。 我还是很迷惑。

我最终找到了返回该循环帮助的方式,并发现了" FOREACH ... IN INFOPROVIDER"。 还有一个仅基于我所需的信息提供者的聚合级别。 我添加了以下声明:

INFOPROVIDER ZCOP_AL02。

现在我的内循环显示为:

FOREACH CH_REF,AG_REF,CG_REF,VER_REF在ZCOP_AL02中。
如果CH_TAR = CH_REF和AG_TAR = AG_REF并且CG_TAR = CG_REF和VER_TAR = VER_REF。
{ZPRPOL,CH_TAR,AG_TAR,CG_TAR, {ZBASERATE,CH_TAR,AG_TAR,CG_TAR,VER_TAR} +
ZCOP_AL02。{ZRA_SBL01,CH_REF,AG_REF,CG_REF,VER_REF} +
ZCOP_AL02。{ZRA_CAM01,CH_REF,AG_REF,CG_REF,VER_TAR > ZCOP_AL02。{ZRA_CMA01,CH_REF,AG_REF,CG_REF,VER_REF}。
ENDIF。
ENDFOR。

再次感谢。

最好的问候

Eric

lukcy2020
3楼-- · 2020-09-21 21:07

嗨,Eric,

在启动功能之前,您是否已有数据记录?结果集是否为空?

因为如果没有可供读取的数据记录,则该函数永远不会到达" ... refdata"循环。

如果结果集中已经有记录,并且refdata中有记录,

输入此命令

FOREACH CH_REF,IP_REF,AG_REF,CG_REF,VER_REF IN REFDATA。

和其他

IF {来自refdata的一个关键人物元组将可用} <> 0。

然后输入您的代码...

ENDIF。

致谢

Cornelia

一周热门 更多>