ABAP中的"|"語法的應用——手寫代碼計算日期

額,鴿了好久好久沒發(fā)了……

疫情期間大家還好吧……都復工了嗎?

在這里祝大家工作順利,新年發(fā)財咯!

正文


計算某日期的前置或者后推日期時,筆者不喜歡調用函數(shù)來計算,更傾向于自己手寫代碼來計算,而且盡量用一行代碼來實現(xiàn),現(xiàn)分享給大家。

前提


使用SAP的"|"語法和":"語法。

筆者試了下,在SAP_ABA版本702及以上測試可用,700上不可用。

代碼


  • DATA:?l_dateTYPE?d.

"前推一天

l_date=?sy-datum-?1.??"遇到月底年底會自動處理,無須擔心

"當前月份第一天

l_date=?sy-datum(6)?&&'01'.

l_date=?|{?sy-datum(6)?}01|.

"上月最后一天

l_date=:?sy-datum(6)?&&'01',?l_date-?1.

l_date=:?|{?sy-datum(6)?}01|,?l_date-?1.

"當前月份最后一天

l_date=:?sy-datum(6)?&&'01',?l_date?+31,?l_date(6)?&&'01',?l_date-?1.

l_date=:?|{?sy-datum(6)?}01|,?l_date?+31,?|{?l_date(6)?}01|,?l_date-?1.

"當年第一天

l_date=?sy-datum(4)?&&'0101'.

l_date=?|{?sy-datum(4)?}0101|.

"去年的今天

l_date=?|{?sy-datum(4)?-?1?}{?sy-datum+4?}|.

"前推X個月的第一天(X大于0,且X小于當前月+12)。如當前日期是20200318,X應大于0且小于15

"比如前推6個月

DATA:?l_monthsTYPE?i?VALUE?6.

IF?sy-datum+4(2)?>?l_months.

l_date=?|{?sy-datum(6)?-?l_months?}01|.

ELSEIF?sy-datum+4(2)?+12?-?l_months?>=10.

l_date=?|{?sy-datum(4)?-?1?}{?sy-datum+4(2)?+12?-?l_months?}01|.

ELSE.

l_date=?|{?sy-datum(4)?-?1?}0{?sy-datum+4(2)?+12?-?l_months?}01|.?"sy-datum+4(2)?+?12?-?l_months得到的是個位數(shù)時,需要補0

ENDIF.

解釋說明


冒號:

重復調用前面的命令。比如我們常用的

perform: forma,formb,formc.

marco_build_fcat: '' '' '', '' '' ''.

豎線|

使用方法

|文本|,等于'文本'

|{ sy-datum - 1 }|,注意左大括號后面和右大括號前面要有空格。如果豎線和大括號之間有空格,表示是一個空格文本,是不會被忽視的哦。大括號中間的內容,是一個可以運算出結果的表達式。

更復雜一點,如下例:

DATA:?l_strTYPE?stringValue?'HE'.

l_str=?|{?l_str?&&'LL'?}O|.

WRITE?l_str.

運算結果是HELLO。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容