ABAP if语句

时间:2016-01-18 20:20:15

标签: abap

我是APD中ABAP编码的新手。我如何在ABAP代码中编写这样的语句?

if ((ls_source-VHMODEL == 'M1' OR ls_source-VHMODEL == 'M2') AND (ls_source-CREATE_DATE <= '2016-01-01' AND ls_source-CREATE_DATE >= '2014-01-01'))
{
// do stuff
}
else if ((ls_source-VHMODEL == 'H1' OR ls_source-VHMODEL == 'C3') AND (ls_source-CREATE_DATE <= '2015-01-01' AND ls_source-CREATE_DATE >= '2014-02-01'))
{
// do stuff
}

我试过了:

  if ( ( ls_source-VHMODEL EQ 'M1' OR ls_source-VHMODEL EQ 'M2')  AND
(ls_source-CREATE_DATE > '20120122' AND ls_source-CREATE_DATE < '20120922')).
    MOVE 'Segment 2' TO ls_target-SEGMENT.
  else.
    MOVE 'Other' TO ls_target-SEGMENT.
  endif.

但那给了我错误

  

语法错误:不允许列出占用多行的元素。

4 个答案:

答案 0 :(得分:3)

试试这个:

if (  ( ls_source-vhmodel eq 'M1' or ls_source-vhmodel eq 'M2' ) and
      ( ls_source-create_date le '20160101' and ls_source-create_date ge '20140101' )
   ).
* Do something
elseif (
          ( ls_source-vhmodel eq 'H1' or ls_source-vhmodel eq 'C3' ) and
          ( ls_source-create_date le '20150101' and ls_source-create_date ge '20140201' )
       ).
*Do something
endif.

请注意括号中它们在代码中的分隔方式。

希望它有所帮助。

答案 1 :(得分:2)

你能检查你的括号前面和后面是空格吗?

ABAP编译器对于这类事情是众所周知的,因为括号可能意味着其他东西(即数据中的偏移量)。

答案 2 :(得分:1)

您的问题是括号,也是()之前和之后的间距。

此代码编译:

if ( ls_source-vhmodel eq 'M1' or ls_source-vhmodel eq 'M2' )  and
  ( ls_source-create_date > '20120122' and ls_source-create_date < '20120922' ).
  move 'Segment 2' to ls_target-segment.
else.
  move 'Other' to ls_target-segment.
endif.

答案 3 :(得分:1)

问题是你没有在括号之间留下空格。与其他语言不同,ABAP在括号和语句的其余部分之间需要一个空格。

(ls_source-CREATE_DATE > '20120122' AND ls_source-CREATE_DATE < '20120922')).
^^^                                                                       ^^^