Как вернуть значение, если поля не совпадают в SAP Infoset - PullRequest
0 голосов
/ 29 марта 2019

У меня есть главная таблица 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.

Я пробовал различные операторы 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 голосов
/ 30 марта 2019

Прежде всего, трудно ответить, потому что 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.

Проблема, с которой вы столкнулись, возможно, заключалась в том, что если одна строка соответствовала 3-му условию, то BINALOC не очищался и поэтому сохранял значение, вычисленное во время обработки предыдущей строки.

0 голосов
/ 29 марта 2019

это?

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.
...