如何解决为什么我在 ABAP 中的 IF BETWEEN 语句不起作用?
我的 IF
IF wa_ini-vbelv BETWEEN '1700000000' AND '1789999999'.
我的代码完全忽略了这部分。对于数字“1780000000”,我认为应该属于该语句,它完全跳过了我的 IF。 我没有为该 IF 添加任何代码,而是尝试简单地为每个满足该 IF 要求的值分配一个严格的值 '0000000000' - 它不起作用。 IF 每次都被忽略。
也许以上内容足以解决我的问题。如果没有 -> 请参阅下面有关我正在尝试执行的操作和我的代码的具体描述。我认为可能很多 - 所以提前谢谢你。
我的代码的想法是从 VBFA 中为提供的文档编号提取发票编号。 VBFA“包含”文档流——这里有两列对我很重要:
- vbelv -> 与提供的文档相关的前一个文档,
- vbeln -> 与提供的文档相关的下一个文档。
这意味着对于看起来像'1 - 2 - 3 - 4'的文档流,提供'4'并想要显示'2',我需要首先选择VBELV,其中VBELN = 4(保存'3 ' 到一个变量),然后选择 VBELV 其中 VBELN = my_variable_holding_3 然后我最终得到我想要的 '2'。这解释了我的代码应该做什么。
我还要提到一个 VBELV 可以有多个 VBELN……下一个文档从前一个文档分支出来。它基本上是遍历一棵有很多分支的树。这就是为什么我需要指定要达到的 VBELV 或 VBELV 值的范围。
这个想法只是找到以 1* 开头的文档的发票,然后返回,但以 17* 开头的发票除外,我需要更深入地查找并找到文档 18*(因为 17* 意味着还有另一个我需要获得的发票类型)。
我还为上下文添加了一部分代码。也许需要检查我的问题。我没有添加所有内容,因为我认为它与问题无关。此外,除了 17* 的问题之外的所有内容都可以正常工作。 NRFAKTURYDOWZ 是我在其中显示输出的列的名称(这是 SQ02 中的查询)。
TABLES: vbfa.
TYPES: BEGIN OF ty_vbf,vbelv TYPE vbfa-vbelv,END OF ty_vbf.
TYPES: BEGIN OF ty2_vbf,vbeln TYPE vbfa-vbeln,END OF ty2_vbf.
*These are used throughout the code,including the part I did not include in this section.
DATA: wa_ini TYPE ty_vbf,wa_prev TYPE ty_vbf,wa_next TYPE ty2_vbf,wa_v178 TYPE ty_vbf,wa_n178 TYPE ty2_vbf.
*Selecting the first 'previous document' where vbeln = provided number.
SELECT SINGLE vbelv
FROM vbfa
INTO wa_ini
WHERE vbeln = BKPF-XBLNR
AND vbeln >= '1000000000'
AND vbeln <= '9999999999'.
*Selecting the 'next document' of the previously selected vbelv.
SELECT SINGLE vbeln
FROM vbfa
INTO wa_next
WHERE vbelv = wa_ini-vbelv.
*Making sure the initially selected VBELV is within the proper range.
IF wa_ini-vbelv BETWEEN '1000000000' AND '2999999999'.
*Here is the guy that won't work and won't stop driving me nuts.
IF wa_ini-vbelv BETWEEN '1700000000' AND '1789999999'.
SELECT SINGLE vbelv
FROM vbfa
INTO wa_v178
WHERE vbeln = wa_ini-vbelv.
SELECT SINGLE vbeln
FROM vbfa
INTO wa_n178
WHERE vbelv = wa_v178-vbelv
AND vbeln BETWEEN '1880000000' AND '1889999999'.
IF NOT wa_n178 IS INITIAL.
NRFAKTURYDOWZ = wa_n178-vbeln.
ELSE.
NRFAKTURYDOWZ = ''.
ENDIF.
ENDIF.
NRFAKTURYDOWZ = wa_ini-vbelv.
ELSEIF.<br><mooooooreeeee coooooodeeeee>
如果你做到了,请允许我表示最诚挚的谢意。我完全知道这有很多东西,你的时间很宝贵。我真的很感激,并祝你有美好的一天。
干杯, 巴特克
解决方法
我解决了。
如果您查看我的代码,您会在我的“外部”IF 语句底部看到“NRFAKTURYDOWZ = wa_ini-vbelv”。部分没有包含在 ELSE 部分......这意味着它总是覆盖我之前管理的任何值。这给人的印象是我的“内部” IF 语句被完全忽略了……因为无论它做了什么,我命令我的代码无论如何都要覆盖该值。 :-/
我以后可能会删除这个问题。我不确定将来是否会对任何人有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。