点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
您好BPC专家,
以下脚本按预期工作,如果我选择一个月(Ex 01.2018)时间段并运行该程序包,则基于上一年同月(Ex 01.2017)的汇率进行汇率转换。 结果是错误的,如果我一次选择了12个蛾月周期(例如,从01.2018到12.2018)并执行该程序包,则货币转换将在12个月后的周期(例如,Ex 01.2017)进行。 要求是即使每个用户选择多个月,也要检查每个期间前12个月的转换因子。 例如:如果用户选择三个月01.2018、02.2018、03.2018,则汇率转换应基于01.2017、02.2017、03.2017。 我是脚本逻辑的新手,不知道如何在以下脚本中声明和引入FOR循环以实现所需的结果。
版本为BPC 10 Netweaver
请帮助我。
克里希纳
* SELECT(%VERSION_LIST%,FX_SOURCE_CATEGORY,VERSION,ID =%VERSION_SET%) *查询率 * DIM TIME = TMVL(-12,%TIME_SET%) * DIM R_ENTITY =" GLOBAL" * DIM VERSION =%VERSION_LIST% * DIM R_ACCT = summary_ACCOUNT.RATETYPE * DIM LKPLC:INPUTCURRENCY = E_ENTITY.CURRENCY * DIM LKPSUB:INPUTCURRENCY = E_ENTITY.SUBMISSION_CURRENCY * ENDLOOKUP * XDIM_MEMBERSET E_ENTITY = BAS(%E_ENTITY_SET%) * XDIM_MEMBERSET TIME = BAS(%TIME_SET%) *当RPTCURRENCY * IS Subm *当E_ENTITY.SUBMISSION_CURRENCY * IS <>"" *当summary_ACCOUNT.RATETYPE时 * IS <>"" * REC(EXPRESSION =%VALUE%* LOOKUP(LKPSUB),RPTCURRENCY = USD) *其他 * REC(FACTOR = 1,RPTCURRENCY = USD) *结束 *结束 *结束
您的问题通常与TMVL功能和LOOKUP有关...
多个月中包含%TIME_SET%的TMVL将导致TMVL(-12,<%TIME_SET%中的最低月份>)
例如:%TIME_SET%= 01.2018、02.2018、03.2018
然后:TMVL(-12,%TIME_SET%)= 01.2017
从帮助中获得: https://help.sap.com /viewer/a2049170bfeb4178ace32222842c3ec1/10.1/zh-CN/c8d961d0dbfd4745af4b667279573702.html
"变量,例如%TIME_SET%
TIME_SET的第一个周期用作负偏移量的基础周期,而TIME_SET的最后一个周期用作正偏移量的基础周期。"
要在%TIME_SET%中使用多个月,您必须在TIME维度中创建一个属性,例如PREVYEARMONTH并填充它:
01.2018-01.2017
02.2018-02.2017
...
然后您可以使用:
将根据该属性选择LOOKUP的时间成员。
"因此,LOOKUP不应在FOR/NEXT循环中使用"-不正确,FOR/NEXT可以在LOOKUP内部使用,
您的脚本通常是正确的,但此行不正确:
错误的行,请阅读帮助!
p>
其余的就可以了!
此代码:
可以!
LOOKUP/ENDLOOKUP-是一个定义,而不是直接执行的代码。
LOOKUP将在WHEN/的每次迭代中执行 ENDWHEN循环,并将WHEN/ENDWHEN循环的当前成员传递给LOOKUP。
在这种情况下,我们可以查看E_ENTITY和TIME
如果WHEN/ENDWHEN中TIME的当前成员是2019.02,则 LOOKUP将从存储在2019.02的PREVYEARMONTH属性中的2018.02开始获取数据
希望很清楚!
尝试在UJKT中执行脚本
PS 与E_ENTITY
P.S相同。 尝试了解LOOKUP正在使用WHEN/ENDWHEN循环中的当前TIME成员。
此行将根据WHEN的当前成员获取上一年的成员/ENDWHEN
嗨Vadim Kalinin,
我的意图是在FOR/NEXT循环中不应该使用LOOKUP。 而且FOR/NEXT可以在LOOKUP内使用,但这无助于解决我的问题。
您错误地提到了以下行。
* XDIM_MEMBERSET TIME = TIME.PREVYEARMONTH
我更改为以下内容(TIME是从提示中选择用户的12个月)
* XDIM_MEMBERSET TIME = BAS(%TIME_SET%)
我已经更新了完整的代码,请确认。
我不清楚您的陈述"尝试了解LOOKUP正在使用WHEN/ENDWHEN循环中的当前TIME成员。"
以前我了解-LOOKUP块将首先执行,结果将传递到WHEN/ENDWHEN循环。 在您的语句之后,将首先执行WHEN/ENDWHEN循环,而在WHEN循环中,LOOKUP关键字将调用LOOKUP/ENDLOOKUP块。
如果我误会了,请纠正我。
另一种实现不使用新属性的相同逻辑的方法是在LOOKUP和WHEN/ENWHEN中对时间使用FOR/NEXT循环。 但这很慢,不建议使用!
PS 而下一个问题的答案-我们可以使用标准的* RUN_PROGRAM CURR_CONVERSION吗?
否,您不能!
标准程序只能转换LC(本地货币),并且您要 转换" Subm"
一周热门 更多>