ABAP中的"|"语法的应用——手写代码计算日期

额,鸽了好久好久没发了……

疫情期间大家还好吧……都复工了吗?

在这里祝大家工作顺利,新年发财咯!

正文


计算某日期的前置或者后推日期时,笔者不喜欢调用函数来计算,更倾向于自己手写代码来计算,而且尽量用一行代码来实现,现分享给大家。

前提


使用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得到的是个位数时,需要补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。

你可能感兴趣的:(ABAP中的"|"语法的应用——手写代码计算日期)