Как вернуть значение, если поля не совпадают в SAP Infoset
У меня есть основная таблица EKPO, соединенная с таблицами MLGN и MLGT в качестве внешних объединений.
Я создал дополнительное поле BINALOC
в информационном наборе и хотите, чтобы он возвращал значение из таблицы MLGT при определенных условиях:
- Если поля MLGN-LTKZE и MLGT-LGTYP совпадают, верните соответствующее поле MLGT-LGPLA.
- Если MLGN-LTKZE = 'R1', тогда возвращать только соответствующий MLGT-LGPLA, где MLGT-LGTYP = '006'.
- Если 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.
Я хочу, чтобы поле возвращалось пустым, когда поля, о которых я упоминал ранее, не совпадают.
В настоящее время он возвращает копию поля над ним.
2 ответа
Этот ?
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.
Прежде всего, трудно ответить, потому что 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 не очищается и поэтому сохраняет значение, вычисленное во время обработки предыдущей строки.