zoukankan      html  css  js  c++  java
  • BW中的变量增强

    BW的query的变量需要进行增强才能正确地满足实际需要,如query中需要查询本年年初的关键值,你必须指定到今年的000期间才行,这时候就需要用到增强功能。

    要点:

    1、只有放在BWquery中的自由特性的对象才能够进行即时分析。

    2、由于BW的数据一般无法进行当天的数据查询,所以经常需要在当前日期上-1.

    3、会计年度的值采用了一种约定:10日以前认为是查询上月的数据。当然这是在step=1时采用的。选择后的值是不一样的。

    4、 l_s_range-sign     = 'I'.I代表包含在内,而E的意义相反。

          l_s_range-opt      = 'BT'. 是关系运算式。BT=between,EQ = equal,其他略。

    5、文本变量的方式是采用搜索数据表来得到的。如何才能查到需要的文本值,顾问的意思是st02等跟踪工具来跟踪得到。

    6、许多的变量是依附于其他的选择变量的,所以在query中一定要把你依附的变量放在其中才能采用。

         WHEN 'ZI_LNDSN'."这个变量就是依附于变量zs_calday的。

         IF i_step = 2 .

           READ TABLE i_t_var_range INTO loc_var_range

              WITH KEY vnam ='ZS_CALDAY'.

           IF sy-subrc EQ 0 .

    7、主要财务的会计期间与正常的日期之间的差别。如"2008001"与“20080101”的区别。在运算中大量用到转换。

    8、典型的日期变量:

         WHEN 'ZI_BNLJ12'.

         IF i_step = 2 .

           READ TABLE i_t_var_range INTO loc_var_range

              WITH KEY vnam ='ZI_FISCPERJG_NEW'.

           IF sy-subrc EQ 0 .

             CLEAR l_s_range.

             l_year = loc_var_range-high(4).

     

     

             l_s_range-high+0(4) = l_year.

             l_s_range-high+4(3) = '012'.

     

             l_s_range-low+0(4) = l_year.

             l_s_range-low+4(3) = '000'.

     

             l_s_range-sign     = 'I'.

             l_s_range-opt      = 'BT'.

             INSERT l_s_range INTO TABLE e_t_range.

           ENDIF.

         ENDIF.

    9、典型的文本变量:

         WHEN 'ZT_COMPCODE'.

         IF i_step = 2.

    *BREAK-POINT.

           READ TABLE i_t_var_range INTO loc_var_range

           WITH KEY vnam = 'ZH_COMPCODE'.

           IF sy-subrc EQ 0 .

             IF sy-sysid = 'DB1'.

               SELECT SINGLE txtmd INTO i_txtmd

               FROM rsthiernode

               WHERE nodename = loc_var_range-low

               AND   hieid = 'D3Z0Q0YD326Y3R99FPLZTWQ7J'

               AND   objvers = 'A'

               AND   langu = sy-langu.

               IF sy-subrc NE 0 .

                 SELECT SINGLE txtmd INTO i_txtmd

                 FROM /bi0/tcomp_code

                 WHERE comp_code = loc_var_range-low+0(4)

                     AND langu = sy-langu.

                 .

               ENDIF.

             ELSE.

               SELECT SINGLE txtmd INTO i_txtmd

                      FROM rsthiernode

                      WHERE nodename = loc_var_range-low

                      AND   hieid = 'D48Z1PEX0M4J4MTDKBKKEBPNK'

                      AND   objvers = 'A'

                      AND   langu = sy-langu.

               IF sy-subrc NE 0 .

                 SELECT SINGLE txtmd INTO i_txtmd

                 FROM /bi0/tcomp_code

                 WHERE comp_code = loc_var_range-low+0(4)

                   AND langu = sy-langu

                .

               ENDIF.

             ENDIF.

             l_s_range-low = i_txtmd.

           ENDIF.

           l_s_range-sign     = 'I'.

           l_s_range-opt      = 'EQ'.

           INSERT l_s_range INTO TABLE e_t_range.

         ENDIF.

     

     

     

     

     

    The enhancement RSR00001 (BW: Enhancements for Global Variables in Reporting) is called up several times during execution of the report. Here, the parameter I_STEP specifies when the enhancement is called. 

    I_STEP = 1 

    Call takes place directly before variable entry. Can be used to pre populate selection variables 

    I_STEP = 2 

    Call takes place directly after variable entry. This step is only started up when the same variable is not input ready and could not be filled at I_STEP=1. 

    I_STEP = 3 

    In this call, you can check the values of the variables. Triggering an exception (RAISE) causes the variable screen to appear once more. Afterwards, I_STEP=2 is also called again. 

    I_STEP = 0 

    The enhancement is not called from the variable screen. The call can come from the authorization check or from the Monitor. This is where you want to put the mod for populating the authorization object.

     

     

     

     

     

     

     

     

     

    变量增强实例代码说明:

     

    case i_vnam.
      WHEN 'ZGMGRANT'.  "Query field name
        if i_step = 0.
          BREAK-POINT.
          clear wa_ETRANGE.

    *     Gets all grants a user is able to see from ZTable,
    *     which is populated elsewhere 
          select grant_nbr
            from ZGMUSERGRANTS
            into corresponding fields of table it_ZGMUSERGRANTS
           where UNAME eq sy-uname.

    *     Populate Authorisation Object. In i_step 0
    *     E_T_RANGE is used to populate the authorisation object
          loop at it_ZGMUSERGRANTS into wa_ZGMUSERGRANTS.
            wa_ETRANGE-sign = 'I'.
            wa_ETRANGE-opt = 'EQ'.
            CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
              EXPORTING
                INPUT         = wa_ZGMUSERGRANTS-grant_nbr
             IMPORTING
               OUTPUT        = wa_ZGMUSERGRANTS-grant_nbr.
            wa_ETRANGE-low  = wa_ZGMUSERGRANTS-grant_nbr.
            append wa_ETRANGE to E_T_RANGE.
          endloop.
        endif.
      ENDCASE.

  • 相关阅读:
    第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京)K Co-prime Permutation
    2020 CCPC绵阳站赛后回忆+总结
    CF 1473D Program
    Educational Codeforces Round 100 (Rated for Div. 2) 补题情况
    Codeforces Round #690 (Div. 3) (补题情况)
    这个博客停用,新博客地址:www.baccano.fun
    炫酷路径(牛客)
    洛谷 P1123 取数游戏
    洛谷P2802 回家
    cf上分的失落->高兴->更失落
  • 原文地址:https://www.cnblogs.com/hanmos/p/2597988.html
Copyright © 2011-2022 走看看