当SAP Infoset中的字段不匹配时如何返回值

时间:2019-03-29 12:03:19

标签: if-statement select sap abap infoset

我将主表EKPO作为外部联接连接到表MLGN和MLGT。

我在信息集中创建了一个额外的字段BINALOC,并希望它在某些情况下从表MLGT返回一个值:

  1. 如果字段MLGN-LTKZE和MLGT-LGTYP匹配,则返回关联的MLGT-LGPLA字段。
  2. 如果MLGN-LTKZE ='R1',则仅返回相关的MLGT-LGPLA,其中MLGT-LGTYP ='006'。
  3. 如果MLGN-LTKZE <> MLGT-LGTYP返回空白。

当前,我可以执行前2个条件,但由于与数字2冲突,因此无法适合第3个条件。

我尝试了各种IF语句和IF条件的各种顺序以及不同的联接类型。

这是我在额外字段BINALOC编码部分中拥有的当前代码:

IF MLGN-LTKZE = 'R1'.
  select LGPLA as LGPLA
   from *MLGT into BINALOC
   where *MLGT~LGTYP eq '006'.
  ENDSELECT.    
else.
  select LGPLA as LGPLA
    from *MLGT into BINALOC
    where *MLGT~LGTYP eq MLGN-LTKZE.
  endselect.
endif.

当我之前提到的字段不匹配时,我希望该字段返回空白。

当前,它返回其上方字段的副本。

2 个答案:

答案 0 :(得分:0)

这个?

IF MLGN-LTKZE = 'R1'.
  select LGPLA as LGPLA
    from *MLGT into BINALOC
    where *MLGT~LGTYP eq '006'.
  ENDSELECT.
else.
  select LGPLA as LGPLA
    from *MLGT into BINALOC
    where *MLGT~LGTYP eq MLGN-LTKZE.
  endselect.
  if sy-subrc ne 0.
    select LGPLA as LGPLA
      from *MLGT into BINALOC
      where *MLGT~LGTYP ne MLGN-LTKZE.
    endselect.
  endif.
endif.

答案 1 :(得分:0)

首先,很难回答,因为这三个功能规则具有重叠条件,因此需要解释。

如果它们与此真值表相对应:

MLGN-LTKZE  Exists MLGN-LTKZE/MLGT-LGTYP  BINALOC
----------  ----------------------------  -------------------------------
=R1         true or false                 MLGT-LGPLA for LGTYP='006'
<>R1        true                          MLGT-LGPLA for LGTYP=MLGN-LTKZE
<>R1        false                         blank

然后程序应如下所示:

if MLGN-LTKZE = 'R1'.
  select LGPLA as LGPLA
    from *MLGT into BINALOC
    where *MLGT~LGTYP eq '006'.
  endselect.
else.
  select LGPLA as LGPLA
    from *MLGT into BINALOC
    where *MLGT~LGTYP eq MLGN-LTKZE.
  endselect.
  if sy-subrc ne 0.
    clear BINALOC.
  endif.
endif.

您遇到的问题可能是,如果一行符合第三个条件,则BINALOC不会被清除,因此将在处理前一行时计算出的值保持不变。