1

我有一个带有以下示例代码的 ABAP 程序,它应该根据日期列从 SAP 表中选择数据。

INITIALIZATION. 
select-OPTIONS: so_date FOR sy-datum.  
START-OF-SELECTION. 
so_date-sign = 'I'. 
so_date-option = 'BT'. 
so_date-low = sy-datum. 
so_date-high = '99991231'. 
APPEND so_date.

我选择的 stmt 是:

select c1,c2,c3 
from <sap_table>
where <date_column> in so_date.

我想知道设置 so_date-high = '99991231' 的目的以及它的行为方式。

4

2 回答 2

4

BT之间的意思。99991231是内部格式 YYYYMMDD(年-月-日)的日期,它是 9999 年 12 月 31 日。您对选择选项的设置会命中介于今天和未来某个日期之间的任何日期。

TheG 已经提到:它应该更好INITIALIZATION,因此您的选择已经在选择屏幕上可见,并且可以根据需要进行修改。

select-OPTIONS: so_date FOR sy-datum.  
INITIALIZATION. 
  so_date-sign = 'I'. 
  so_date-option = 'BT'. 
  so_date-low = sy-datum. 
  so_date-high = '99991231'. 
  APPEND so_date.

备注:此预设仅在对话中有效,在批处理中无效(但是当您批量调用时,您可以在批处理作业的变体中设置默认值)。

但是对于这个简单的默认值,您应该使用default-option select-options

SELECT-OPTIONS: so_date FOR sy-datum DEFAULT sy-datum to '99991231'.

或者说“未来的一切”:

SELECT-OPTIONS: so_date FOR sy-datum DEFAULT sy-datum OPTION GE.

GE意味着更大的平等。

于 2013-11-17T19:40:47.390 回答
0

如果我是你,我会将 so_date-high = '99991231' 放在初始化部分下,以便它反映在选择屏幕上。如果用户想要更改日期范围,那么它为他们在选择屏幕中的更改提供了更大的灵活性。这样,用户就可以知道 select 语句所影响的日期范围。确保最终用户知道工作中的日期范围而无需查看代码来查找硬编码信息是一种很好的做法。

从 so_date 中的表中选择 c1、c2、c3。

上面的选择会选择 c1、c3 和 c3 字段并将其放入满足条件 GE so_date-low 和 LE so_date-high 的表中。(LE - 小于或等于;GE - 大于或等于)

于 2013-11-17T07:36:15.607 回答