額,鴿了好久好久沒發(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。