比较选择选项与范围

2020-09-04 00:49发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我有一个要求,希望排除所有不在0010000000和0069999999之间的合作伙伴编号。一种简单的方法是填写范围并比较Select-Options中的所有值:

将初始行追加到lr_range ASSIGNING  -sign ='I'。
    -option ='NB'。
    -low ='0010000000'。
    -high ='0069999999'。

   如果s_partnr不是INITIAL。
     在s_partnr []处分配。


       如果 -low不是初始值并且
          -低IN lr_range []。
         pi_error = abap_true。
         出口。
       万一。


       如果 -high不是初始值,并且
          -高IN lr_range []。
         pi_error = abap_true。
         出口。
       万一。


     结局。
   万一。
 

(" -low is NOT INITIAL"是为了避免将空值与范围进行比较)。

但是这种方式并没有利用范围背后的所有逻辑,这意味着如果用户在Select-Options中输入" sign = I option = GT low = 0010000008 high = empty",则要求 不会实现,因为它将包含高于0069999999的值。

我尝试了以下操作:

 LOOP AT s_partnr []分配。

       IF  IN lr_range []。  "带或不带括号
         pi_error = abap_true。
         出口。
       万一。

     结局。
 

没有工作。 我认为,以这种方式可以将Select-Option值视为一个范围,但是正在比较的值是整个工作区(例如:IBT0000000009999999999)。

你能帮我吗?

提前谢谢!

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我有一个要求,希望排除所有不在0010000000和0069999999之间的合作伙伴编号。一种简单的方法是填写范围并比较Select-Options中的所有值:

将初始行追加到lr_range ASSIGNING  -sign ='I'。
    -option ='NB'。
    -low ='0010000000'。
    -high ='0069999999'。

   如果s_partnr不是INITIAL。
     在s_partnr []处分配。


       如果 -low不是初始值并且
          -低IN lr_range []。
         pi_error = abap_true。
         出口。
       万一。


       如果 -high不是初始值,并且
          -高IN lr_range []。
         pi_error = abap_true。
         出口。
       万一。


     结局。
   万一。
 

(" -low is NOT INITIAL"是为了避免将空值与范围进行比较)。

但是这种方式并没有利用范围背后的所有逻辑,这意味着如果用户在Select-Options中输入" sign = I option = GT low = 0010000008 high = empty",则要求 不会实现,因为它将包含高于0069999999的值。

我尝试了以下操作:

 LOOP AT s_partnr []分配。

       IF  IN lr_range []。  "带或不带括号
         pi_error = abap_true。
         出口。
       万一。

     结局。
 

没有工作。 我认为,以这种方式可以将Select-Option值视为一个范围,但是正在比较的值是整个工作区(例如:IBT0000000009999999999)。

你能帮我吗?

提前谢谢!

付费偷看设置
发送
4条回答
亦是此间程序员
1楼 · 2020-09-04 01:22.采纳回答

通常,在您要使用S_PARTNR时(在SELECT或条件语句中),并添加其他范围,即可达到此要求:

 SELECT COUNT(*)FROM ...  
合作伙伴IN s_partnr
和合作伙伴IN lr_range ...
如果sy-subrc = 0。 信息"错误,您的选择是错误的" TYPEE。 ENDIF。

请注意,您的示例不需要范围,可以使用运算符BETWEEN编写:

 SELECT COUNT(*)FROM ...
            s_partnr中的合作伙伴
              和合作伙伴'0010000000'和'0069999999'之间... 
2楼-- · 2020-09-04 01:21

为什么我的提案无法"在他们点击Execute时立即显示错误消息"?

否 ,这不是唯一的解决方案,而是最简单的解决方案。

haha101010
3楼-- · 2020-09-04 01:28

请检查是否符合您的要求

数据gv_partner类型bu_partner。
 SELECT-OPTIONS:gv_partner的lr_range。
 数据lt_range类似于lr_range的表。
 选择开始。
 在lt_range ASSIGNING FIELD-SYMBOL()后面加上首行。
    -sign ='I'。
    -option ='NB'。
    -low ='0010000000'。
    -high ='0069999999'。

   从but000 SELECT伙伴到表@data(lt_partner)
     @lr_range中的伙伴和@lt_range中的伙伴。
 
太Q了
4楼-- · 2020-09-04 01:44

或此

数据gv_partner类型bu_partner。
 数据lt_range类似于lr_range的表。
 数据lt_partner2 bu_partner的类型表。
 SELECT-OPTIONS:gv_partner的lr_range。
 选择开始。
 在lt_range ASSIGNING FIELD-SYMBOL()后面加上首行。
    -sign ='I'。
    -option ='NB'。
    -low ='0010000000'。
    -high ='0069999999'。

   从but000 SELECT伙伴到表@data(lt_partner)
     @lr_range中的伙伴。

 循环至lt_partner INTO DATA(ls_partner),其中lt_range中的伙伴。
 将ls_partner-partner附加到lt_partner2。
 结局。
 

一周热门 更多>