2013-02-22 73 views
2
DATA: l_str TYPE string, 
    l_dat TYPE d. 

l_dat = sy-datum. 
l_str = l_dat. 
WRITE:/ l_str. 

l_dat = (sy-datum + 1). 
l_str = l_dat. 
WRITE:/ l_str. 
l_dat = sy-datum. 

l_dat = (l_dat + 1). 
l_str = l_dat. 
WRITE:/ l_str. 

l_dat = sy-datum. 
l_str = (l_dat + 1). 
WRITE:/ l_str. 

導致輸出(特別是最後一行):日期爲字符串增量發行

20130222 
    20130223 
    20130223 
    734909 

什麼是做到這一點,而不是,以便始終得到預期值的最佳方法?

+1

這看起來不正確,似乎不符合官方在線文檔。如果我遇到了這個問題,我可能會發出SAPnet消息,並要求SAP解決或解釋此行爲。 – vwegert 2013-02-22 08:29:53

回答

2

可靠地增加/減少日期的一種方法是使用功能模塊,例如, RP_CALC_DATE_IN_INTERVAL

有一個在SAP維基一個代碼示例在這裏:

否則,你應該總是做你的修改日期型字段,然後將數據複製到一個字符串字段,一旦你完成了你的計算,如果需要。

我必須同意你所顯示的行爲不合邏輯,我已經在我們的系統中重複了它,並得到相同的結果。

2

我懷疑在賦值發生之前,左邊的賦值(字符串)會導致添加的結果轉換爲整數。

編輯對不起,我意識到你是在你的其他測試中這樣做,所以我刪除了我的例子,只是留下解釋。

考慮從ABAP關鍵字文檔以下從訪問字符,如日期字段和時間字段的數值上

數字訪問字符,如日期字段和時間字段利用 的事實轉換類型d和t到數值 產生整數天或秒。這適用於 ,尤其是在 數字計算中使用類似字符的日期字段和時間字段時,這些字段將轉換爲相應計算類型的 。

由於系統執行隱式類型轉換,可以想象由於添加涉及整數,因此生成的類型在賦值之前轉換爲整數。

在您的其他示例中,賦值不是加法的結果,而是顯式變量。