在VBAK上选择DATE和TIME

2020-09-29 18:23发布

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

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


专家您好,

我需要编写一个接口来从VBAK表中检索数据。 该界面作为后台作业运行。 根据日期(ERDATE)和时间(ERZET)从VBAK提取数据。 这是我的SELECT语句。

--------------------------------------------------- ------------------------------------

从vbak中选择vbeln erdat kunnr bstnk audat bstdk auart
在表i_vbak
中,其中s_vbeln中的vbeln和s_date中的
erdat以及s_time中的
erzet和s_auart中的
auart
。 >

--------------------------------------------------- ------------------------------------

我们从选择屏幕的s_date和s_time(除了s_auart-订单类型)的选择选项中检索详细信息,以在上面的SELECT中使用。

在较低日期范围内,我们从自定义表中检索值,该表存储了上次运行日期(此界面每小时运行一次)。 在日期的上限范围内,我们传递系统日期(sy-datum)。

--------------------------------------------------- -------------------------------------
s_date-low = gv_date。 " gv_date具有自定义表中的值

s_date-high = sy-datum。
s_date-sign = c_i。
s_date-option ='BT'。
附加s_date。

--------------------------------------------------- -------------------------------------

同样,在较短的时间范围内,我们从自定义表中检索值,该表存储了上次运行时间(此接口每小时运行一次),在较大的时间范围内具有系统时间(sy-uzeit)。

--------------------------------------------------- -------------------------------------

s_time-low = gv_time。" gv_time具有自定义表中的值

s_time-high = sy-uzeit。
s_time-sign = c_i。
s_time-option ='BT'。
追加s_time。

--------------------------------------------------- -------------------------------------

以上解决方案可以正常工作,直到最后一份工作在当天23:00:00运行为止。 但是,当第一个作业在00:00:01开始并且日期更改时,SELECT将失败。 这是因为日期和时间都已更改。 更糟糕的是,随着时间的流逝,"下限变得大于上限"。

类似这样的东西。

s_date-low = 2017/02/01(上次运行日期,来自自定义表)

s_date-high = 2017/02/02(sy-datum(新日期/更改日期))

s_time-low = 23:00:00(上次运行时间,来自自定义表)

s_time-high = 00:00:02(Sy-uzeit(新的/更改的时间))

现在我想知道什么是解决上述情况的最佳解决方案?

非常感谢。

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

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


专家您好,

我需要编写一个接口来从VBAK表中检索数据。 该界面作为后台作业运行。 根据日期(ERDATE)和时间(ERZET)从VBAK提取数据。 这是我的SELECT语句。

--------------------------------------------------- ------------------------------------

从vbak中选择vbeln erdat kunnr bstnk audat bstdk auart
在表i_vbak
中,其中s_vbeln中的vbeln和s_date中的
erdat以及s_time中的
erzet和s_auart中的
auart
。 >

--------------------------------------------------- ------------------------------------

我们从选择屏幕的s_date和s_time(除了s_auart-订单类型)的选择选项中检索详细信息,以在上面的SELECT中使用。

在较低日期范围内,我们从自定义表中检索值,该表存储了上次运行日期(此界面每小时运行一次)。 在日期的上限范围内,我们传递系统日期(sy-datum)。

--------------------------------------------------- -------------------------------------
s_date-low = gv_date。 " gv_date具有自定义表中的值

s_date-high = sy-datum。
s_date-sign = c_i。
s_date-option ='BT'。
附加s_date。

--------------------------------------------------- -------------------------------------

同样,在较短的时间范围内,我们从自定义表中检索值,该表存储了上次运行时间(此接口每小时运行一次),在较大的时间范围内具有系统时间(sy-uzeit)。

--------------------------------------------------- -------------------------------------

s_time-low = gv_time。" gv_time具有自定义表中的值

s_time-high = sy-uzeit。
s_time-sign = c_i。
s_time-option ='BT'。
追加s_time。

--------------------------------------------------- -------------------------------------

以上解决方案可以正常工作,直到最后一份工作在当天23:00:00运行为止。 但是,当第一个作业在00:00:01开始并且日期更改时,SELECT将失败。 这是因为日期和时间都已更改。 更糟糕的是,随着时间的流逝,"下限变得大于上限"。

类似这样的东西。

s_date-low = 2017/02/01(上次运行日期,来自自定义表)

s_date-high = 2017/02/02(sy-datum(新日期/更改日期))

s_time-low = 23:00:00(上次运行时间,来自自定义表)

s_time-high = 00:00:02(Sy-uzeit(新的/更改的时间))

现在我想知道什么是解决上述情况的最佳解决方案?

非常感谢。

付费偷看设置
发送
2条回答
哎,真难
1楼 · 2020-09-29 19:04.采纳回答

你好

您应该分3个步骤进行操作:

-> 1从日期中选择

选择vbeln erdat kunnr bstnk audat bstdk auart
 从vbak
 到表i_vbak
 s_vbeln中的vbeln
 和s_date中的erdat
 和s_auart中的auart。

-> 2按时间过滤(过去)

删除表i_vbak,其中erdat = gv_date和erzet 
 

->按时间3个过滤器(将来)

删除表i_vbak,其中erdat> = gv_today和erzet> gv_now 

在程序开始时使用gv_today和gv_now包含sy-datum和sy-uzeit(无论执行多长时间,它们在执行期间均保持不变)。

最诚挚的问候,

Bertrand

奄奄一息的小鱼
2楼-- · 2020-09-29 19:16

@ BertrandDelvallée

非常感谢您的宝贵意见。 将修改我的代码以尝试您的建议。

一周热门 更多>