当 SAP Infoset 中的字段不匹配时如何 return 一个值
How to return a value when the fields don't match in SAP Infoset
我有主要的 table EKPO 作为外连接连接到 tables MLGN 和 MLGT。
我在信息集中创建了一个额外字段 BINALOC
,并希望它在某些条件下 return 来自 table MLGT 的值:
- 如果字段 MLGN-LTKZE 和 MLGT-LGTYP 匹配,则 return 关联的 MLGT-LGPLA 字段。
- 如果 MLGN-LTKZE = 'R1',则只有 return 相关的 MLGT-LGPLA,其中 MLGT-LGTYP = '006'。
- 如果 MLGN-LTKZE <> MLGT-LGTYP return 空白。
目前我可以满足前两个条件,但无法满足第三个条件,因为它与数字 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.
当我之前提到的字段不匹配时,我希望该字段 return 空白。
目前它return是其上方字段的副本。
这个?
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 个功能规则有重叠条件,因此需要解释。
如果符合这个道理table:
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 未被清除,因此保留了前一行处理期间计算的值。
我有主要的 table EKPO 作为外连接连接到 tables MLGN 和 MLGT。
我在信息集中创建了一个额外字段 BINALOC
,并希望它在某些条件下 return 来自 table MLGT 的值:
- 如果字段 MLGN-LTKZE 和 MLGT-LGTYP 匹配,则 return 关联的 MLGT-LGPLA 字段。
- 如果 MLGN-LTKZE = 'R1',则只有 return 相关的 MLGT-LGPLA,其中 MLGT-LGTYP = '006'。
- 如果 MLGN-LTKZE <> MLGT-LGTYP return 空白。
目前我可以满足前两个条件,但无法满足第三个条件,因为它与数字 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.
当我之前提到的字段不匹配时,我希望该字段 return 空白。
目前它return是其上方字段的副本。
这个?
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 个功能规则有重叠条件,因此需要解释。
如果符合这个道理table:
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 未被清除,因此保留了前一行处理期间计算的值。