ABAP RANGES 在 RFC 的应用示例

写一个RFC,在VK11下,把条件类型是Z907的一些数据输出。

在IMPORT下入参 定义2个

IT_VKORG LIKEA907-VKORG                    销售组织 
IT_KUNNR LIKE A907-KUNNR                     客户号 


当输入IT_VKOGR 或者 IT_KUNNR 时,或者2个都输入都能获取到数据。 这个看似简单的需求,我确花费了大概1天的时间。

其中卡就卡在:

第一,对ranges基本用法的不理解;

第二,没有进行判断就执行;

第三,对where条件后的 and 和 or 不了解。

下面看看最后正确的做法:

定义ranges

  RANGES : s_vkorg FOR itab-vkorg,
           s_kunnr FOR itab-kunnr.

            IF it_vkorg IS NOT INITIAL.  "一定要判断输入的值是否为空。
              s_vkorg-sign = 'I'.
              s_vkorg-option = 'EQ'. " 如果option='EQ'.后面就不需要HIGH
              s_vkorg-low = it_vkorg.
              APPEND s_vkorg.
            ENDIF.
            IF it_kunnr IS NOT INITIAL.
              s_kunnr-sign = 'I'.
              s_kunnr-option = 'EQ'.
              s_kunnr-low = it_kunnr.
              APPEND s_kunnr.
            ENDIF.


在WHERE 条件下用IN 

  SELECT a~kappl a~kschl a~vkorg  a~kunnr a~knumh a~datab a~datbi b~kbetr b~konwa
     INTO CORRESPONDING FIELDS OF TABLE itab
     FROM a907 AS a JOIN konp AS b ON  a~knumh = b~knumh
     WHERE a~vkorg IN s_vkorg
       AND a~kunnr IN s_kunnr.

ranges知识:

RANGES <seltab> FOR <f>.
该语句创建 选择表 <seltab>, 该表参考数 据库表的列 <f> 或内部字段 <f>。选 择表 <seltab> 必须在程序 中填充。不 必在程序中 再用 TABLES 语句声明数 据库表。
RANGES 语句是下列 语句的短格 式:
DATA: BEGIN OF <seltab> OCCURS 10,
         SIGN(1),
         OPTION(2)
         LOW  LIKE <f>,
         HIGH LIKE <f>,
      END OF <seltab>.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值