query里如何创建变量

来源:互联网 发布:cnc编程薪资 编辑:程序博客网 时间:2024/05/22 10:49

bw里的特性值在sap里有时候找不到我们想要的变量那么必须自己创建,或者在AWB里创建,这个没试过.今天尝试了自己创建变量,并写了增强代码.新建变量还是比较好创建,就是需要对创建的变量进行记录这样可以方便别的同事,他们在创建报表时不用再自己创建了.交给客户时也方便他们维护.创建变量的具体步骤可以在BW305里找到,还有一些参数的设置.注意如果要创建自己可以写增强的变量,必须要选择user exit.如下图:

image 

 

在query designer里创建完了之后,接着会在cmod里编写代码.发挥了我做abap的优势.修改会在function module EXIT_SAPLRRS0_001里进行代码的编写.这里的一些参数不明白具体含义是什么,不过看他们之前写的代码可以基本猜到参数的含义。我创建的变量增强代码如下:

变量的定义:

   ls_range     LIKE LINE OF e_t_range,
     ls_var_range LIKE LINE OF i_t_var_range,
     loc_ls_range LIKE LINE OF e_t_range.

*  会计年度期间变量,在现金流量表里创建,为得到输入会计年度的第一个期间
  WHEN 'ZCASH001'.
    ls_range-opt       = 'EQ'.
    ls_range-sign      = 'I' .
    IF i_step = 2.
*     得到输入会计年度和期间
      READ TABLE i_t_var_range INTO ls_var_range WITH KEY
       vnam = '0RMA_FIP' .
      check sy-subrc = 0.
*      进行计算
      zj_year = ls_var_range-low+0(4).
      zj_mon = '001'.
      CONCATENATE zj_year zj_mon INTO zj_year_mon.
      ls_range-low =  zj_year_mon.

      INSERT ls_range INTO TABLE e_t_range.
    ENDIF.

这段代码的含义是这样的,ls_range使我们自己定义的工作区,确定好了它的值的时候就可以把它传递给系统了。最后一句insert干的就是这个事情。因为变量是一个range所以头两句是一个定义,注意eq,因为我定义的变量是一个单一值。i_step是函数的参数,彦祥给我讲解,目前我对它的理解是i_step=1相当于PBO,等于2的时候相当于PAI。因为我创建这个变量视为了得到输入会计年度的第一个期间,所以我得先得到我输入的会计年度,read 就是干这个的。接着进行赋值,剩下的就很好理解了。在总结下我的代码含义,首先对我的range变量进行定义,然后读出我输入的会计年度,对我的变量进行赋值,在传递给系统。

这段代码还可以对它进行设置断点,断点类型设置为http类型的断点。