上一年的第一期到当前期的0fiscper客户退出

2020-09-01 20:10发布

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

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


大家好,

我需要以bex的形式获取当前期间的第一个期间(用户可以提供当前期间或上一个或任何期间)。

ex:如果用户输入009.2019,则实际数字应该从001.2018到009.2019。

计划关键值的值应从010.2019到012.2020。

为实际键图中的变量编写的代码。

" ZFISCPER_PYFP"时。

IF i_step =2。"在弹出窗口之后

读取表i_t_var_range并使用KEY vnam ='ZFISCPER_PYFP'进入ls_var_range。

如果sy-subrc =0。lv_year = ls_var_range-low(4)-1。

lv_fischar = lv_year。

SHIFT lv_fischar左侧删除领先空间。

将lv_fischar(4)'001'连接到lv_firstPeriod中。

将lv_fischar ls_var_range-low + 4(3)合并为lv_ofper。

ls_range-low = lv_firstPeriod。 "上一年的第一期

ls_range-high = lv_ofper。 "当前年份日期的用户输入期间

ls_range-sign ='I'。

ls_range-opt ='BT'。

附加ls_range至c_t_range。

ENDIF。

ENDIF。

,但这没有提供所需的输出。 相反,我们从多维数据集获取所有数据。

此致

拉奇

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

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


大家好,

我需要以bex的形式获取当前期间的第一个期间(用户可以提供当前期间或上一个或任何期间)。

ex:如果用户输入009.2019,则实际数字应该从001.2018到009.2019。

计划关键值的值应从010.2019到012.2020。

为实际键图中的变量编写的代码。

" ZFISCPER_PYFP"时。

IF i_step =2。"在弹出窗口之后

读取表i_t_var_range并使用KEY vnam ='ZFISCPER_PYFP'进入ls_var_range。

如果sy-subrc =0。lv_year = ls_var_range-low(4)-1。

lv_fischar = lv_year。

SHIFT lv_fischar左侧删除领先空间。

将lv_fischar(4)'001'连接到lv_firstPeriod中。

将lv_fischar ls_var_range-low + 4(3)合并为lv_ofper。

ls_range-low = lv_firstPeriod。 "上一年的第一期

ls_range-high = lv_ofper。 "当前年份日期的用户输入期间

ls_range-sign ='I'。

ls_range-opt ='BT'。

附加ls_range至c_t_range。

ENDIF。

ENDIF。

,但这没有提供所需的输出。 相反,我们从多维数据集获取所有数据。

此致

拉奇

付费偷看设置
发送
4条回答
hongfeng1314
1楼 · 2020-09-01 20:44.采纳回答

通常通过使用自定义退出变量类型" Not input ready"(限制输入变量)来限制操作键图形来解决。

Cmod/Badi出口中相同代码:

数据:lv_year1类型i。

数据:lv_fiscalper1类型poper。

数据:lv_fiscalyear1类型bdatj。

数据:lv_ofper1类型/bi0/oiofper。

数据:lv_curdate1类似于sy-datum。

数据:lv_fischar1(8)C型。

数据:lv_firstPeriod1 TYPE/bi0/oiofper。

数据:lv_fiscalper1_prev类型弹出器。

数据:lv_fiscalyear1_prev类型bdatj。

数据:lv_ofper1_prev类型/bi0/oiofper。

当" ZFISCper_actual"时。 "上一年度迄今为止会计期间

IF i_step =2。"在弹出窗口之前

如果sy-subrc =0。lv_curdate1 = sy-datum。

调用函数" DATE_TO_PERIOD_CONVERT"

导出i_date = lv_curdate1

i_periv ='K4'导入

e_buper = lv_fiscalper1

e_gjahr = lv_fiscalyear1

EXCEPTIONS input_false = 1

t009_notfound = 2

t009b_notfound = 3

其他=4。

连接lv_fiscalyear1 lv_fiscalper1 INTO lv_ofper1。

ENDIF。

IF sy-subrc <> 0。

消息ID sy-msgid类型sy-msgty编号sy-msgno与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。

退出。

ENDIF。

lv_fiscalyear1_prev = lv_fiscalyear1-1-

lv_fiscalper1_prev ='001'。

将lv_fiscalyear1_prev lv_fiscalper1_prev连接到lv_ofper1_prev。

IF(lv_ofper1 IS INITIAL)。

引发例外类型cx_rs_error。

ELSE。

清除ls_range。

ls_range-low = lv_ofper1_prev。

ls_range-high = lv_ofper1。

ls_range-sign ='I'。

ls_range-opt ='EQ'。

附加ls_range到c_t_range。

ENDIF。

ENDIF。

创建一个CKF/RKF并将实际的关键指标和0fiscper拖入其中,并使用上面提到的cust exit变量限制0fiscper。 每当用户执行此报告时,他都会看到过去几年的第一个月到当前期间的实际关键数据。 如果您想为用户提供输入提示,只需创建一个称为" Actual"等的虚拟按键图,并使其以间隔/单个输入即可准备好,然后隐藏按键图。 因此,用户只需输入输入内容,但仅根据退出情况,所有操作都会进行。 输入只是为了让用户满意(在我们的案例中,他希望输入提示不惜一切代价:))。

注意:如果要查看从当前期间+1到下个月的下一年的数据,可以为Plan keyfiure创建相同的内容。 但是逻辑基本相同,几乎不需要更改

此致

raki

落灬小鱼
2楼-- · 2020-09-01 20:42

您可以在调试中检查,检查内部表中的值是什么,然后查看输入的值是否与表中的值匹配。

葫芦娃快救爷爷
3楼-- · 2020-09-01 20:57

感谢您的有效回复。 除了上面的FM,上面的代码是否有任何错误? 读取语句未执行。 我认为i_t_varrange没有填充。 我们在提示中将输入作为009.2019。

hongfeng1314
4楼-- · 2020-09-01 20:31

实际上i_t_varrange是导入参数。 如果用户在输入提示中提供009.2019,则此值将存储在i_t_var_range中。 但是在上面的代码中,用户输入未存储在此参数中。 因此读取表无法正常工作。请检查我的代码onc

一周热门 更多>