为什么我在 ABAP 中的 IF BETWEEN 语句不起作用?



My IF <之间&>和& lt; given_number>不能处理它应该处理的数字。这是我的代码不能工作的部分:

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>
如果你来了,请允许我表达我最诚挚的感谢。我很清楚要做的事情很多,你的时间很宝贵。我真的很感激你,祝你度过美好的一天。

欢呼,Bartek

我解决了。

如果你看一下我的代码,你会看到在我的"outer"IF语句,'NRFAKTURYDOWZ = wa_ini-vbelv. ''部分没有包装在ELSE部分…这意味着它总是覆盖我以前提取的任何值。这给人的印象是,我的"内心"IF语句完全被忽略了,因为无论它做什么,我都命令我的代码覆盖该值。: -/

我以后可能会删除这个问题。我不确定它将来是否会对任何人有帮助。

最新更新