改善体重改变-ABAP例行查找

2020-08-27 21:29发布

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

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


大家好!

我有一个要求,我需要从2LIS_02_SCL中加载ADSO数据,并从TCURR表中加载货币汇率。 我的挑战是将2_LIS的过帐日期与TCURR的货币日期相结合(以获取汇率),因为我可以在非工作日使用MIRO/MIGO,而TCURR表仅具有工作日的汇率(就我而言)

然后,我开始开发自己的例程,但不幸的是,我对ABAP的了解不足以创造更好的性能。

在我的启动例程中,我编写了以下代码,并且工作正常:

$ * $全局开始-仅在此行下方插入声明*-*
..."在此处插入代码

类型:
BEGIN OF TY_TCURR,
< br> *字段:KURST汇率类型
KURST TYPE C长度4,
*字段:FCURR来自货币
FCURR TYPE FCURR_CURR,
*字段:TCURR到货币
TCURR TYPE TCURR_CURR,
*字段:汇率生效的GDATU日期
GDATU类型GDATU_INV,
*字段:UKURS汇率
UKURS类型UKURS_CURR,
*字段:ZDATE转换日期
ZDATE TYPE C长度8,
TY_TCURR的结尾。

数据:TI_TCURR TY_TCURR的类型表,
WA_TCURR TYPE TY_TCURR的表。

* $ * $全局结尾-插入 您的声明仅在此行之前*-*

****************************************

* $ * $例程的开头-仅在此行下方插入代码*-*
..."在此处插入代码
*-用结构" MONITOR_REC"的值填充表" MONITOR"
*-创建监视器条目
..."取消更新过程
*引发异常类型CX_RSROUT_ABORT。

如果SOURCE_PACKAGE []不初始化。

SELECT

KURST
FCURR
TCURR
GDATU
UKURS

从TCURR
到表ti_TCURR
中,用于源_包中的所有条目 KURST ='M'AND
FCURR = SOURCE_PACKAGE-ORDER_CURR AND
TCURR = SOURCE_PACKAGE-LOC_CURRCY。

FIELD-SYMBOLS 类型ty_TCURR。
数据:vl_data类型char10。
>在ti_TCURR处分配循环。 +6(4)vl_data + 3(2)vl_data(2)
放入 -zdate


endloop。

如果sy-subrc是INITIAL。< br> KURST FCURR T的SORT ti_TCURR CURR ZDATE。
ENDIF。
ENDIF。

* $ * $例程结尾-仅在此行之前插入代码*-*

但是我认为我的性能问题在一个野外例程中:

数据:VL_DATA_AUX类型SY-DATUM。
VL_DATA_AUX = SOURCE_FIELDS-PSTNG_DATE。

在哪里
KURST ='M'AND
FCURR = SOURCE_FIELDS-ORDER_CURR AND
TCURR = SOURCE_FIELDS-LOC_CURRCY。

如果IF
-ZDATE> VL_DATA_AUX。
继续。
ELSE。
结果= -UKURS。
退出。
ENDIF。
ENDLOOP。

我在做什么错? 我该如何改善这个常规? 处理DTP需要很长时间。

提前谢谢!

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

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


大家好!

我有一个要求,我需要从2LIS_02_SCL中加载ADSO数据,并从TCURR表中加载货币汇率。 我的挑战是将2_LIS的过帐日期与TCURR的货币日期相结合(以获取汇率),因为我可以在非工作日使用MIRO/MIGO,而TCURR表仅具有工作日的汇率(就我而言)

然后,我开始开发自己的例程,但不幸的是,我对ABAP的了解不足以创造更好的性能。

在我的启动例程中,我编写了以下代码,并且工作正常:

$ * $全局开始-仅在此行下方插入声明*-*
..."在此处插入代码

类型:
BEGIN OF TY_TCURR,
< br> *字段:KURST汇率类型
KURST TYPE C长度4,
*字段:FCURR来自货币
FCURR TYPE FCURR_CURR,
*字段:TCURR到货币
TCURR TYPE TCURR_CURR,
*字段:汇率生效的GDATU日期
GDATU类型GDATU_INV,
*字段:UKURS汇率
UKURS类型UKURS_CURR,
*字段:ZDATE转换日期
ZDATE TYPE C长度8,
TY_TCURR的结尾。

数据:TI_TCURR TY_TCURR的类型表,
WA_TCURR TYPE TY_TCURR的表。

* $ * $全局结尾-插入 您的声明仅在此行之前*-*

****************************************

* $ * $例程的开头-仅在此行下方插入代码*-*
..."在此处插入代码
*-用结构" MONITOR_REC"的值填充表" MONITOR"
*-创建监视器条目
..."取消更新过程
*引发异常类型CX_RSROUT_ABORT。

如果SOURCE_PACKAGE []不初始化。

SELECT

KURST
FCURR
TCURR
GDATU
UKURS

从TCURR
到表ti_TCURR
中,用于源_包中的所有条目 KURST ='M'AND
FCURR = SOURCE_PACKAGE-ORDER_CURR AND
TCURR = SOURCE_PACKAGE-LOC_CURRCY。

FIELD-SYMBOLS 类型ty_TCURR。
数据:vl_data类型char10。
>在ti_TCURR处分配循环。 +6(4)vl_data + 3(2)vl_data(2)
放入 -zdate


endloop。

如果sy-subrc是INITIAL。< br> KURST FCURR T的SORT ti_TCURR CURR ZDATE。
ENDIF。
ENDIF。

* $ * $例程结尾-仅在此行之前插入代码*-*

但是我认为我的性能问题在一个野外例程中:

数据:VL_DATA_AUX类型SY-DATUM。
VL_DATA_AUX = SOURCE_FIELDS-PSTNG_DATE。

在哪里
KURST ='M'AND
FCURR = SOURCE_FIELDS-ORDER_CURR AND
TCURR = SOURCE_FIELDS-LOC_CURRCY。

如果IF
-ZDATE> VL_DATA_AUX。
继续。
ELSE。
结果= -UKURS。
退出。
ENDIF。
ENDLOOP。

我在做什么错? 我该如何改善这个常规? 处理DTP需要很长时间。

提前谢谢!

付费偷看设置
发送
3条回答
宇峰Kouji
1楼-- · 2020-08-27 21:44

@ Alex Moreira

启动例程: 将ti_TCURR声明为SORTED TABLE,避免显式排序。

字段例程: 尝试如下

数据:VL_DATA_AUX TYPE SY-DATUM。
 VL_DATA_AUX = SOURCE_FIELDS-PSTNG_DATE。

 删除ti_curr,在其中kurst <>'M'或FCURR <> SOURCE_FIELDS-ORDER_CURR或TCURR <> SOURCE_FIELDS-LOC_CURRCY或ZDATE> vl_data_aux。

 结果=值#(ti_curr [1] -ukurs可选)。
三十六小时_GS
2楼-- · 2020-08-27 21:52

您要维护BW本身的货币汇率还是从ERP加载货币汇率? 恕我直言,您可以创建一个ADSO来保存汇率,在该汇率中,您可以将上一个汇率从工作日转换为周末,也可以根据需要更改任何逻辑。 然后在主转换的转换中创建从数据存储对象读取的规则类型。

槿木_熙
3楼-- · 2020-08-27 21:47

@ Alex Moreira

在OPTIONAL之后留一个空格,然后关闭方括号。

 RESULT = VALUE#(ti_curr [1] -ukurs OPTIONAL)。

一周热门 更多>