query 中出口变量的增强

来源:互联网 发布:国产手机推荐 知乎 编辑:程序博客网 时间:2024/04/29 04:48

QUERY中特征限制处加入变量(新建),再定义变量,选择用户出口,然后在SAP-CMOD增强RSR00001中加入代码


 *&---------------------------------------------------------------------*

*& Include           ZXRSRU01

*&---------------------------------------------------------------------*

 

  DATA: L_S_RANGE TYPE RSR_S_RANGESID.

  data: l_s_range_v like line of I_T_VAR_RANGE ,

        tmp_date type d,

        tmp_month(2) type n.

 

  DATA: l_year(4)      TYPE C,

     l_month(2)     TYPE C,

 

     l_zzhgs(4) type n,

     l_txtsh type RSTXTSH,

     l_nd(4) type c,

     l_zqlx(1) type c,

    result type i.

   CASEI_VNAM.  " Variablenname

    when 'ZVAR_DQKJND'."当前会计年度

      IF i_step = 2.

        l_s_range-low = sy-datum+0(4).

        l_s_range-high = l_s_range-low.

        l_s_range-opt = 'EQ'.

        l_s_range-sign = 'I'.

        INSERT l_s_range INTO TABLE e_t_range.

      endif.

    when 'ZV_KJNDQJTB'. "会计年度期间同比

      IF i_step = 2.

        READ TABLE i_t_var_range INTO l_s_range_v

          WITH KEY vnam = 'ZV_KJNDQJ1'.

        clear tmp_date.

        l_s_range-low+0(4) = l_s_range_v-low+0(4) - 1.

        l_s_range-low+4(3) = l_s_range_v-low+4(3).

         l_s_range-opt = 'EQ'.

        l_s_range-sign = 'I'.

        INSERT l_s_range INTO TABLE e_t_range.

      endif.

    when 'ZV_PD_BEG'."期初日期

      IF i_step = 2.

        READ TABLE i_t_var_range INTO l_s_range_v

*          WITH KEY vnam = '0I_CALMO'.

            WITH KEY vnam = 'ZVAR_RLNYFW1'.

        clear tmp_date.

        if not l_s_range_v-LOW is initial.

          tmp_date+0(6) = l_s_range_v-LOW.

          tmp_date+6(2) = '01'.

          tmp_date = tmp_date - 1.

          l_s_range-sign = 'I'.

          l_s_range-opt  = 'BT'.

          l_s_range-high = tmp_date.

          INSERT l_s_range INTO TABLE e_t_range.

        else.

          l_s_range-sign = 'I'.

          l_s_range-opt  = 'BT'.

          l_s_range-high = '19000101'.

           INSERT l_s_range INTO TABLE e_t_range.

        endif.

      endif.

    when 'ZV_PD_END'."期末日期

      IF i_step = 2.

        READ TABLE i_t_var_range INTO l_s_range_v

*          WITH KEY vnam = '0I_CALMO'.

           WITH KEY vnam = 'ZVAR_RLNYFW1'.

        clear tmp_date.

        clear tmp_month.

        if not l_s_range_v-high is initial.

          tmp_month = l_s_range_v-high+4(2).

          if tmp_month = '12'.

            tmp_date+0(4) = l_s_range_v-high+0(4) + 1.

            tmp_date+4(2) = '01'.

          else.

            tmp_date+0(4) = l_s_range_v-high+0(4).

            tmp_date+4(2) = l_s_range_v-high+4(2) + 1.

          endif.

          tmp_date+6(2) = '01'.

          tmp_date = tmp_date - 1.

          l_s_range-sign = 'I'.

          l_s_range-opt  = 'BT'.

          l_s_range-high = tmp_date.

          INSERT l_s_range INTO TABLE e_t_range.

        else.

          tmp_date+6(2) = '01'.

          tmp_date = tmp_date - 1.

          l_s_range-sign = 'I'.

          l_s_range-opt  = 'BT'.

          l_s_range-high = '20991231'.

          INSERT l_s_range INTO TABLE e_t_range.

        endif.

      endif.

 

    when 'ZV_ZLFX_QCRQ'."账龄分析-基线日期-期初日期

      if i_step = 2.

        READ TABLE i_t_var_range INTO l_s_range_v

            WITH KEY vnam = '0P_DYOPT'.

        clear tmp_date.

        tmp_date+0(6) = l_s_range_v-low+0(6).

        tmp_date+6(2) = '01'.

        l_s_range-sign = 'I'.

        l_s_range-opt = 'BT'.

        l_s_range-low = '19000101'.

        l_s_range-high = tmp_date.

        insert l_s_range into table e_t_range.

      endif.

 

    when 'ZV_ZLFX_QMRQ'."账龄分析-基线日期-期末日期

      if i_step = 2.

        READ TABLE i_t_var_range INTO l_s_range_v

            WITH KEY vnam = '0P_DYOPT'.

        clear tmp_date.

        tmp_date+0(4) = l_s_range_v-low+0(4).

        tmp_date+4(2) = l_s_range_v-low+4(2).

        if tmp_date+4(2) = '12'.

          tmp_date+6(2) = '31'.

        Else.

          tmp_date+4(2) = l_s_range_v-low+4(2) + 1.

          tmp_date+6(2) = '01'.

          tmp_date = tmp_date - 1.

        endif.

        l_s_range-sign = 'I'.

        l_s_range-opt = 'BT'.

        l_s_range-low = '19000101'.

         l_s_range-high = tmp_date.

        insert l_s_range into table e_t_range.

      endif.

 

    when 'ZV_ZLFX_YNYN'."账龄分析-基线日期_一年以内

      if i_step = 2.

        READ TABLE i_t_var_range INTO l_s_range_v

            WITH KEY vnam = '0P_DYOPT'.

         clear tmp_date.

        l_s_range-sign = 'I'.

        l_s_range-opt = 'BT'.

        tmp_date+0(4) = l_s_range_v-low+0(4).

        tmp_date+4(4) = l_s_range_v-low+4(4).

        tmp_date = tmp_date + 1.

        tmp_date+0(4) = tmp_date+0(4) - 1.

        l_s_range-low = tmp_date.

        l_s_range-high = l_s_range_v-low.

 

        insert l_s_range into table e_t_range.

      endif.

 

    when 'ZV_ZLFX_2N'."账龄分析-基线日期_1-2年

      if i_step = 2.

        read table i_t_var_range into l_s_range_v

             with key vnam = '0P_DYOPT'.

        clear tmp_date.

        l_s_range-sign = 'I'.

        l_s_range-opt = 'BT'.

        tmp_date = l_s_range_v-low.

         tmp_date = tmp_date + 1.

        tmp_date+0(4) = tmp_date+0(4) - 2.

        l_s_range-low = tmp_date.

        clear tmp_date.

        tmp_date = l_s_range_v-low.

        tmp_date = tmp_date + 1. "在闰年的解决情况,

        tmp_date+0(4) = tmp_date+0(4) - 1.

        tmp_date = tmp_date - 1. "在闰年的解决情况

        l_s_range-high = tmp_date.

        insert l_s_range into table e_t_range.

      endif.

 

    when 'ZV_ZLFX_3N'."账龄分析-基线日期_2-3年

      if i_step = 2.

        read table i_t_var_range into l_s_range_v

             with key vnam = '0P_DYOPT'.

        clear tmp_date.

        l_s_range-sign = 'I'.

        l_s_range-opt = 'BT'.

        tmp_date = l_s_range_v-low.

        tmp_date = tmp_date + 1.

        tmp_date+0(4) = tmp_date+0(4) - 3.

         l_s_range-low = tmp_date.

        clear tmp_date.

        tmp_date = l_s_range_v-low.

        tmp_date = tmp_date + 1.

        tmp_date+0(4) = tmp_date+0(4) - 2.

        tmp_date = tmp_date - 1.

        l_s_range-high = tmp_date.

        insert l_s_range into table e_t_range.

      endif.

 

    when 'ZV_ZLFX_4N'."账龄分析-基线日期_3-4年

      if i_step = 2.

        read table i_t_var_range into l_s_range_v

             with key vnam = '0P_DYOPT'.

        clear tmp_date.

        l_s_range-sign = 'I'.

         l_s_range-opt = 'BT'.

        tmp_date = l_s_range_v-low.

        tmp_date = tmp_date + 1.

        tmp_date+0(4) = tmp_date+0(4) - 4.

        l_s_range-low = tmp_date.

        clear tmp_date.

        tmp_date = l_s_range_v-low.

        tmp_date = tmp_date + 1.

        tmp_date+0(4) = tmp_date+0(4) - 3.

        tmp_date = tmp_date - 1.

        l_s_range-high = tmp_date.

        insert l_s_range into table e_t_range.

      endif.

 

    when 'ZV_ZLFX_5N'."账龄分析-基线日期_4-5年

      if i_step = 2.

        read table i_t_var_range into l_s_range_v

             with key vnam = '0P_DYOPT'.

        clear tmp_date.

        l_s_range-sign = 'I'.

        l_s_range-opt = 'BT'.

        tmp_date = l_s_range_v-low.

         tmp_date = tmp_date + 1.

        tmp_date+0(4) = tmp_date+0(4) - 5.

        l_s_range-low = tmp_date.

        clear tmp_date.

        tmp_date = l_s_range_v-low.

        tmp_date = tmp_date + 1.

        tmp_date+0(4) = tmp_date+0(4) - 4.

         tmp_date = tmp_date - 1.

        l_s_range-high = tmp_date.

        insert l_s_range into table e_t_range.

      endif.

 

    when 'ZV_ZLFX_5NYS'."账龄分析-基线日期_5年以上

      if i_step = 2.

        read table i_t_var_range into l_s_range_v

             with key vnam = '0P_DYOPT'.

        clear tmp_date.

        l_s_range-sign = 'I'.

        l_s_range-opt = 'BT'.

        tmp_date = l_s_range_v-low.

         tmp_date = tmp_date + 1.

        tmp_date+0(4) = tmp_date+0(4) - 5.

        tmp_date = tmp_date - 1.

        l_s_range-low = '19000101'.

        l_s_range-high = tmp_date.

        insert l_s_range into table e_t_range.

      endif.

 

 

 

 

     WHEN'C4YEAR01'."当前年(进度管理)--wangxq

      IF i_step = 1.

        IF  sy-datum+4(2) = '01'.

          l_s_range-sign = 'I'.

          l_s_range-opt  = 'EQ'.

          l_s_range-LOW+0(4)  =sy-datum+0(4) - 1.

          INSERT l_s_range INTO TABLE e_t_range.

        ELSEIF sy-datum+4(2) = '02'.

          l_s_range-sign = 'I'.

          l_s_range-opt  = 'EQ'.

          l_s_range-LOW+0(4)  =sy-datum+0(4) - 1.

          INSERT l_s_range INTO TABLE e_t_range.

        ELSEIF sy-datum+4(2) = '03'.

          l_s_range-sign = 'I'.

          l_s_range-opt  = 'EQ'.

          l_s_range-LOW+0(4)  =sy-datum+0(4) - 1.

          INSERT l_s_range INTO TABLE e_t_range.

        ELSE.

          l_s_range-sign = 'I'.

          l_s_range-opt  = 'EQ'.

          l_s_range-LOW+0(4)  =sy-datum+0(4).

          INSERT l_s_range INTO TABLE e_t_range.

 

        ENDIF.

      ENDIF.

    WHEN 'C4MONTH01'."当前月(进度管理)--wangxq

      IF i_step = 1.

        IF sy-datum+4(2) = '01'.

          l_s_range-sign = 'I'.

          l_s_range-opt  = 'EQ'.

          l_s_range-LOW+0(4)  =sy-datum+0(4) - 1.

          l_s_range-LOW+4(2)  = '11'.

          INSERT l_s_range INTO TABLE e_t_range.

        ELSEIF  sy-datum+4(2) = '02'.

          l_s_range-sign = 'I'.

          l_s_range-opt  = 'EQ'.

          l_s_range-LOW+0(4)  =sy-datum+0(4) - 1.

          l_s_range-LOW+4(2)  = '11'.

          INSERT l_s_range INTO TABLE e_t_range.

        ELSEIF sy-datum+4(2) = '03'.

          l_s_range-sign = 'I'.

          l_s_range-opt  = 'EQ'.

          l_s_range-LOW+0(4)  = sy-datum+0(4) - 1.

          l_s_range-LOW+4(2)  = '11'.

          INSERT l_s_range INTO TABLE e_t_range.

        ELSE.

          l_s_range-sign = 'I'.

          l_s_range-opt  = 'EQ'.

          l_s_range-LOW+0(4)  = sy-datum+0(4).

          l_s_range-LOW+4(2)  =sy-datum+4(2) - 1.

 

          IF l_s_range-LOW+4(2) < 10.

            CONCATENATE '0' l_s_range-LOW+4(2) INTO l_s_range-LOW+4(2).

          endif.

          INSERT l_s_range INTO TABLE e_t_range.

        ENDIF.

       ENDIF.

 

    when 'ZHRRLN02'. "输入的日历年

      IF i_step = 2.

        READ TABLE i_t_var_range INTO l_s_range_v

          WITH KEY vnam = 'ZHRRLN01'.

        clear tmp_date.

        l_s_range-low+0(4) = l_s_range_v-low+0(4).

        l_s_range-low+4(4) = '0101'.

        l_s_range-HIGH+0(4) = l_s_range_v-LOW+0(4).

        l_s_range-HIGH+4(4) = '1231'.

        l_s_range-opt = 'BT'.

        l_s_range-sign = 'I'.

        INSERT l_s_range INTO TABLE e_t_range.

      endif.

 

    when 'ZHRRLN03'. "输入的日历年的上一年

      IF i_step = 2.

        READ TABLE i_t_var_range INTO l_s_range_v

          WITH KEY vnam = 'ZHRRLN01'.

        clear tmp_date.

        l_s_range-low+0(4) = l_s_range_v-low+0(4) - 1.

        l_s_range-low+4(4) = '0101'.

        l_s_range-HIGH+0(4) = l_s_range_v-LOW+0(4) - 1.

        l_s_range-HIGH+4(4) = '1231'.

        l_s_range-opt = 'BT'.

        l_s_range-sign = 'I'.

        INSERT l_s_range INTO TABLE e_t_range.

      endif.

 

    when 'ZHR_DATE01'. "将当前系统查询时间设置为当前年的1月1日到系统当前时间.

       IF i_step = 1.

        l_s_range-low+0(4) = sy-datum+0(4).

        l_s_range-low+4(4) = '0101'.

        l_s_range-high = sy-datum.

        l_s_range-opt = 'BT'.

        l_s_range-sign = 'I'.

        INSERT l_s_range INTO TABLE e_t_range.

       endif.

 

    when 'ZHR_ENDDATE01'. "将当前系统查询截止日期设置为系统当前时间.

       IF i_step = 1.

        l_s_range-low = sy-datum.

        l_s_range-high = sy-datum.

        l_s_range-opt = 'EQ'.

        l_s_range-sign = 'I'.

        INSERT l_s_range INTO TABLE e_t_range.

      endif.

 

      when 'ZHR_PAYMENT01'. "将当前系统薪酬查询时间设置为当前年的1月到系统当前月.

       IF i_step = 1.

        l_s_range-low+0(4) = sy-datum+0(4).

        l_s_range-low+4(2) = '01'.

        l_s_range-high+0(6) = sy-datum.

        l_s_range-opt = 'BT'.

        l_s_range-sign = 'I'.

        INSERT l_s_range INTO TABLE e_t_range.

      endif.

 

      when 'ZVAR_KJND'.

       IFi_step = 1.

        l_s_range-low = sy-datum(4).

        l_s_range-high = l_s_range-low.

        l_s_range-opt = 'EQ'.

         l_s_range-sign = 'I'.

        INSERT l_s_range INTO TABLE e_t_range.

      endif.

 

       when 'ZVAR_KJNDQJ3'. "将当前查询时间设置为当前年月(会计年度/期间).

       IF i_step = 1.

        l_s_range-low+0(4) = sy-datum+0(4).

        concatenate '0' sy-datum+4(2) into l_s_range-low+4(3).

        l_s_range-opt = 'EQ'.

        l_s_range-sign = 'I'.

        INSERT l_s_range INTO TABLE e_t_range.

      endif.

 

 

       when 'ZVAR_KJND1'. "将当前查询时间设置为当前年(会计年度).

       IF i_step = 1.

        l_s_range-low = sy-datum+0(4).

        l_s_range-opt = 'EQ'.

        l_s_range-sign = 'I'.

        INSERT l_s_range INTO TABLE e_t_range.

      endif.

 

        when 'ZVAR_JZQJ1'. "将当前查询时间设置为当前月(记账期间).

       IF i_step = 1.

        data lc_low(3) type c.

        l_s_range-low = sy-datum+4(2).

        CALL 'CONVERSION_EXIT_ALPHA_INPUT' ID 'INPUT'  FIELD l_s_range-low

                                             ID 'OUTPUT' FIELD lc_low.

 

        l_s_range-low = lc_low.

        l_s_range-opt = 'EQ'.

        l_s_range-sign = 'I'.

        INSERT l_s_range INTO TABLE e_t_range.

      endif.

 

        when 'ZVAR_JZQJFW1'. "将记账期间查询范围设置为当前年的1月到系统当前月

          IF i_step = 1.

         l_s_range-low = '001'.

         l_s_range-high = sy-datum+4(2).

 

         CALL 'CONVERSION_EXIT_ALPHA_INPUT' ID 'INPUT'  FIELD l_s_range-high

                                             ID'OUTPUT' FIELD lc_low.

 

         l_s_range-high = lc_low.

        l_s_range-opt = 'BT'.

        l_s_range-sign = 'I'.

        INSERT l_s_range INTO TABLE e_t_range.

         Endif.

 

         when 'ZVAR_RLNYFW1'."将日历年/月范围设置为当年前的1月到系统当前月

         if i_step = 1.

         l_s_range-low+0(4) = sy-datum+0(4).

         l_s_range-low+4(2) = '01'.

         l_s_range-high+0(6) = sy-datum+0(6).

         l_s_range-opt = 'BT'.

         l_s_range-sign = 'I'.

         insert l_s_range into table e_t_range.

         endif.

 

          when 'ZVAR_KJNDQJFW1'."将会计年度/记账期间范围设置为当年前的1月到系统当前月

            if i_step = 1.

           l_s_range-low+0(4) = sy-datum+0(4).

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

           l_s_range-high+0(4) = sy-datum+0(4).

           data lc_high(3) type C.

            l_s_range-high+4(2) = sy-datum+4(2).

            CALL 'CONVERSION_EXIT_ALPHA_INPUT' ID 'INPUT'  FIELDl_s_range-high+4(2)

                                             ID'OUTPUT' FIELD lc_high.

           l_s_range-high+4(3) = lc_high.

           l_s_range-opt = 'BT'.

           l_s_range-sign = 'I'.

           insert l_s_range into table e_t_range.

          endif.

 

  ENDCASE.

 


0 0