-2

我将主表 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 个条件,但无法适应第 3 个条件,因为它与数字 2 冲突。

我尝试了各种 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.

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

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

4

2 回答 2

0

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

如果它们对应于这个真值表:

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 未被清除,因此保留了在处理前一行期间计算的值。

于 2019-03-30T20:35:20.840 回答
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.
于 2019-03-29T12:45:15.530 回答