Mostrando entradas con la etiqueta Exit Variables BW. Mostrar todas las entradas
Mostrando entradas con la etiqueta Exit Variables BW. Mostrar todas las entradas

viernes, 28 de junio de 2013

Exit SAP Variables BW

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

*& Include ZXRSRU01
*&---------------------------------------------------------------------*
*I_STEP = 1 Call takes place directly before variable entry
*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.

DATA: L_S_RANGE TYPE RSR_S_RANGESID.
DATA: L_S_VAR_RANGE TYPE RRRANGEEXIT.
*******************************
if I_STEP = 0.
* CASE I_VNAM.
* WHEN......
* ENDCASE.
******************************

elseif I_STEP = 1.
* CASE I_VNAM.
* WHEN......
* ENDCASE.
******************************
elseif I_STEP = 2.
CASE I_VNAM.
WHEN 'ZV_CALDAY_TODAY'.
CLEAR L_S_RANGE.
L_S_RANGE-LOW = SY-DATUM.
L_S_RANGE-SIGN = 'I'.
L_S_RANGE-OPT = 'EQ'.
APPEND L_S_RANGE TO E_T_RANGE.
ENDCASE.
******************************
elseif I_STEP = 3.
* CASE I_VNAM.
* WHEN......
* ENDCASE.
******************************

ENDIF.

jueves, 9 de mayo de 2013

INFOPROVIDER_VARIABLE


*** Enhancement: MultiProvider using InfoProvider Variable
include YBW_INFOPROVIDER_VARIABLE.
*&---------------------------------------------------------------------*
*& Include YBW_INFOPROVIDER_VARIABLE *
*&---------------------------------------------------------------------*
DATA:
ls_var TYPE rrs0_s_var_range,
ls_range TYPE rsr_s_rangesid,
l_contained TYPE c,
ls_mapping TYPE ybw_mapping,
lt_mapping TYPE TABLE OF ybw_mapping.


* Called after variable popup
IF i_step = 2 AND i_vnam = 'INFOPROV'.
* Read mapping table

REFRESH lt_mapping.
SELECT * FROM ybw_mapping INTO TABLE lt_mapping.
* Process all selection for country variable
REFRESH e_t_range.
LOOP AT i_t_var_range INTO ls_var WHERE vnam = 'S_COUNT'.
* Process all mapping rules
LOOP AT lt_mapping INTO ls_mapping.
* Always fill LOW and HIGH, Otherwise logic below will not work
IF ls_mapping-high IS INITIAL.
ls_mapping-high = ls_mapping-low.
ENDIF.
* Check if selection is contained in the defined InfoProvider
CLEAR l_contained.
CASE ls_var-opt.
WHEN 'EQ'.
IF ls_var-low BETWEEN ls_mapping-low AND ls_mapping-high.
l_contained = 'X'.
ENDIF.
WHEN 'BT'.
IF ls_var-low <= ls_mapping-high AND
ls_var-high => ls_mapping-low.
l_contained = 'X'.
ENDIF.
ENDCASE.
* Add InfoProvider to return table
* Note: Use COLLECT to avoid duplicates
IF l_contained = 'X'.
CLEAR ls_range.
ls_range-sign = 'I'.
ls_range-opt = 'EQ'.
ls_range-low = ls_mapping-infoprov.
COLLECT ls_range INTO e_t_range.
ENDIF.
ENDLOOP. " lt_mapping
ENDLOOP. " i_t_var_range
EXIT.
ENDIF.

viernes, 26 de abril de 2013

2 - Exit Variables (step_2): ultimo dia del mes


*======================================================================
** A partir de la referencia 1 obtiene el intervalo mes/año 1
*====================================================================

    WHEN 'V_CFPA'.
      CLEAR L_S_RANGE.
      CLEAR: L_MONTH_LOW, L_MONTH_HIGH, L_YEAR_LOW, L_YEAR_HIGH.
      LOOP AT i_t_var_range INTO loc_var_range WHERE vnam = '0P_FPER'.

        L_MONTH_LOW = '001'.
*L_MONTH_HIGH = LOC_VAR_RANGE-LOW+24(2).

        L_YEAR_LOW = LOC_VAR_RANGE-LOW+3(4).
*L_YEAR_HIGH = LOC_VAR_RANGE-LOW+20(4).

        CONCATENATE L_YEAR_LOW L_MONTH_LOW INTO L_S_RANGE-LOW.
*CONCATENATE L_YEAR_HIGH '0' L_MONTH_HIGH INTO L_S_RANGE-HIGH.
        L_S_RANGE-SIGN = 'I'.
        L_S_RANGE-OPT = 'E'.
        APPEND L_S_RANGE TO E_T_RANGE.
        EXIT.

      ENDLOOP.


    WHEN 'ZV_DUM'.
      CLEAR L_S_RANGE.

      data u_fecha type dats.

      LOOP AT i_t_var_range INTO loc_var_range WHERE vnam = '0PCALMON'.
        concatenate loc_var_range-low '01' into u_fecha.
      ENDLOOP.


      CALL FUNCTION 'SLS_MISC_GET_LAST_DAY_OF_MONTH'
        EXPORTING
          DAY_IN            = u_fecha
        IMPORTING
          LAST_DAY_OF_MONTH = u_fecha
        EXCEPTIONS
          DAY_IN_NOT_VALID  = 1
          OTHERS            = 2.


      L_S_RANGE-SIGN = 'I'.
      L_S_RANGE-OPT = 'EQ'.
      L_S_RANGE-LOW = u_fecha.
      APPEND L_S_RANGE TO E_T_RANGE.

3 - Exit variables BW (Step 3): ejemplo


ELSEIF i_step = 3.
* Formula variable for Unit

  LOOP AT i_t_var_range INTO loc_var_range WHERE vnam = 'P_UCONV1'.
    perform f_check_p_uconv1 using    loc_var_range
                             changing l_subrc.

    if l_subrc <> 0.
      raise entry_again.
    endif.
  ENDLOOP.
 ENDIF.

2 - Exit variables (Step_2): ejemplos para text variables


* Text variables
*====================================================================
*  Rellena el texto del año anterior
*====================================================================
      WHEN 'TFYEAR1'.
        PERFORM f_fill_tfyear1 USING loc_var_range
                               CHANGING l_s_range.
        APPEND L_S_RANGE TO E_T_RANGE.

*====================================================================
*  Rellena el periodo a partir del valor de periodo introducido
*====================================================================
      WHEN 'tP_PER3'.
        CLEAR L_S_RANGE.
        LOOP AT i_t_var_range INTO loc_var_range WHERE vnam = 'ZV_PER3'.
          PERFORM f_fill_tP_PER3 USING loc_var_range
                                 CHANGING l_s_range.
          APPEND L_S_RANGE TO E_T_RANGE.
          EXIT.

        ENDLOOP.

*====================================================================
*  Rellena el periodo a partir del valor de periodo acumulado
*====================================================================
      WHEN 'tZ_PERAC'.
        CLEAR L_S_RANGE.
        LOOP AT i_t_var_range INTO loc_var_range WHERE vnam = 'Z_PERAC'.
          PERFORM f_fill_tZ_PERAC USING loc_var_range
                                 CHANGING l_s_range.
          APPEND L_S_RANGE TO E_T_RANGE.
          EXIT.

        ENDLOOP.
      WHEN OTHERS.
    ENDCASE.

1- Exit Variables BW (Step 1): ejemplos




2 - Exit Variables BW (Step 2): Ejemplos


 DATA: l_s_range TYPE rsr_s_rangesid.
 
DATA: l_s_var_range LIKE rrrangeexit,
        l_ano         
TYPE i,
        l_mes         
TYPE i,
        aux           
LIKE rrrangeexit-low,
        aux_ano
(4),
        aux_mes
(2).

   
IF i_step '2'.
   
WHEN 'ZVAR_MES_ANT'.
   
READ TABLE i_t_var_range WITH KEY vnam '0DAT' INTO l_s_var_range.

          l_ano 
l_s_var_range-low(4).
          l_mes 
l_s_var_range-low+4(2).

          
if l_mes > 1.
           l_mes 
l_mes 1.
          
elseif l_mes 1.
           
l_mes 12.
           l_ano 
l_ano 1.
          
endif.

          
clear: aux, aux_mes, aux_ano.
          
aux_mes l_mes.
          
if aux_mes <= 9.
           
concatenate '0' aux_mes into aux_mes.
          
endif.
          aux_ano 
l_ano.
          
concatenate aux_ano aux_mes into aux.

          
MOVE aux TO l_s_range-low.
          
CONDENSE l_s_range-low.
          l_s_range
-sign 'I'.
          l_s_range
-opt  'EQ'.
          
APPEND l_s_range TO e_t_range.
  
ENDCASE.
  
ENDIF.



*=======================================================================
*  Determines current month
*                       *=======================================================================
DATA: L_DATUM LIKE SY-DATUM.

WHEN 'ZCMONTH'.
               CLEAR L_S_RANGE.
               L_S_RANGE-LOW  =  SY-DATUM(6).
               L_S_RANGE-SIGN =  'I'.
               L_S_RANGE-OPT  =  'EQ'.
               APPEND L_S_RANGE TO E_T_RANGE.

*=====================================================================
* SCY_CP CHARACTERISTIC - CALENDAR YEAR OF THE CALENDAR PERIOD ENTERED
*=====================================================================

WHEN 'ZCY_CP'.
    CLEAR L_S_RANGE.
    LOOP AT I_T_VAR_RANGE INTO LOC_VAR_RANGE WHERE VNAM = 'ZCPUSR1'.

       L_S_RANGE-LOW = LOC_VAR_RANGE-LOW+0(4).
       L_S_RANGE-OPT = 'EQ'.
       APPEND L_S_RANGE TO E_T_RANGE.
    ENDLOOP.


*=====================================================================
* SCY_1_CP CHARACTERISTIC - CALENDAR YEAR - 1 OF THE CAL PERIOD ENTERED
*=====================================================================

WHEN 'ZCY_1_CP'.
    CLEAR L_S_RANGE.
    LOOP AT I_T_VAR_RANGE INTO LOC_VAR_RANGE WHERE VNAM = 'ZCPUSR1'.

       ZYEAR         = LOC_VAR_RANGE-LOW+0(4).
       L_S_RANGE-LOW = ZYEAR - 1.
       L_S_RANGE-OPT = 'EQ'.
       APPEND L_S_RANGE TO E_T_RANGE.
    ENDLOOP.


*=====================================================================
* SFY_2_FP CHARACTERISTIC - CALENDAR YEAR - 2 OF THE CAL PERIOD ENTERED
*=====================================================================

WHEN 'ZCY_2_CP'.
    CLEAR L_S_RANGE.
    LOOP AT I_T_VAR_RANGE INTO LOC_VAR_RANGE WHERE VNAM = 'ZCPUSR1'.

       ZYEAR         = LOC_VAR_RANGE-LOW+0(4).
       L_S_RANGE-LOW = ZYEAR - 2.
       L_S_RANGE-OPT = 'EQ'.
       APPEND L_S_RANGE TO E_T_RANGE.
    ENDLOOP.



*=====================================================================
*=====================================================================


*Variable 1: Variable del año actual
      
when 'ZCYEAR'.
        
clear l_s_range.
        l_s_range-low      = sy-datum(
4).
        l_s_range-
sign     = 'I'.
        l_s_range-opt      = 
'EQ'.
        
append l_s_range to e_t_range.
        
clear: l_s_range.
*Variable: Variable del ejercicio actual
      
when 'ZV_FISCYEAR'.
        
clear l_s_range.
        l_s_range-low      = sy-datum(
4).  
        l_s_range-
sign     = 'I'.
        l_s_range-opt      = 
'EQ'.
        
append l_s_range to e_t_range.
        
clear: l_s_range.
*Variable: variable dia hoy
      
when 'ZV_SYDATUM'.
        
clear l_s_range.
        
l_s_range-low      = sy-datum.   
        l_s_range-
sign     = 'I'.
        l_s_range-opt      = 
'EQ'.
        
append l_s_range to e_t_range.
        
clear: l_s_range.





** Variável para obter o mês.ano da variável 0P_KEYDT

      
when 'ZV_CMKEYDT'.            loop at i_t_var_range into loc_var_range
                    
where vnam = '0P_KEYDT'.
            
clear l_s_range.
            
clear: aux_year_n0, mm.
            aux_year_n0 = loc_var_range-low(
4).
            mm = loc_var_range-low+
4(2).

            
concatenate aux_year_n0 mm into l_s_range-low.
            l_s_range-
sign = 'I'.
            l_s_range-opt = 
'EQ'.
            
append l_s_range to e_t_range.
            
exit.
          
endloop.
        
endif.




Variables para o relatorio de FI 1.3. a partir de dadta de vencimento
**** obtem a data de lançamento para n-0, n-1 e n-2. e meses homologos.

      
when 'ZV_KEYDT_N2'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = '0P_KEYDT'.
          
clear l_s_range.
          
clear: aux_year_n2, aux_year_n1, aux_year_n0, mm, dd.
          
aux_year_n2 = loc_var_range-low(4) - 2.
          
aux_year_n1 = loc_var_range-low(4) - 1.
          aux_year_n0 = loc_var_range-low(
4) - 0.
          mm = loc_var_range-low+
4(2).
          dd = loc_var_range-low+
6(2).

          
concatenate aux_year_n2 '01' '01'  into l_s_range-low.
          
concatenate aux_year_n2  mm   dd   into l_s_range-high.
          l_s_range-
sign = 'I'.
          l_s_range-opt = 
'BT'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.

      
when 'ZV_KEYDT_N1'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = '0P_KEYDT'.
          
clear l_s_range.
          
clear: aux_year_n2, aux_year_n1, aux_year_n0, mm, dd.
          
aux_year_n2 = loc_var_range-low(4) - 2.
          
aux_year_n1 = loc_var_range-low(4) - 1.
          aux_year_n0 = loc_var_range-low(
4) - 0.
          mm = loc_var_range-low+
4(2).
          dd = loc_var_range-low+
6(2).

          
concatenate aux_year_n1 '01' '01'  into l_s_range-low.
          
concatenate aux_year_n1  mm   dd  into l_s_range-high.
          l_s_range-
sign = 'I'.
          l_s_range-opt = 
'BT'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.

      
when 'ZV_KEYDT_N0'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = '0P_KEYDT'.
          
clear l_s_range.
          
clear: aux_year_n2, aux_year_n1, aux_year_n0, mm, dd.
          
aux_year_n2 = loc_var_range-low(4) - 2.
          
aux_year_n1 = loc_var_range-low(4) - 1.
          aux_year_n0 = loc_var_range-low(
4) - 0.
          mm = loc_var_range-low+
4(2).
          dd = loc_var_range-low+
6(2).

          
concatenate aux_year_n0 '01' '01'  into l_s_range-low.
          
concatenate aux_year_n0  mm   dd   into l_s_range-high.
          l_s_range-
sign = 'I'.
          l_s_range-opt = 
'BT'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.


      
when 'ZV_KEYDT_M'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = '0P_KEYDT'.
          
clear l_s_range.
          l_s_range-low      = loc_var_range-low+
4(2).    "low value e.g.200001
          l_s_range-
sign     = 'I'.
          l_s_range-opt      = 
'EQ'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.


      
when 'ZV_KEYDT'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = '0P_KEYDT'.
          
clear l_s_range.
          l_s_range-low      = loc_var_range-low.    
"low value e.g.200001
          l_s_range-
sign     = 'I'.
          l_s_range-opt      = 
'EQ'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.



* Conta o nº de meses para os relatorios de RH

      
when 'ZV_COUNTM'.
        
clear: l_s_range, aux_data_h, aux_data_l, l_s_diff_period .
        
loop at i_t_var_range into loc_var_range where vnam = 'ZP_CALMO'.
          
concatenate  loc_var_range-low '01' into aux_data_l.
          
concatenate  loc_var_range-high '01' into aux_data_h.
          
call function 'MONTHS_BETWEEN_TWO_DATES'
            
exporting
              i_datum_bis         = aux_data_h
              i_datum_von         = aux_data_l
*     I_KZ_INCL_BIS       = ' '
     
importing
             e_monate            =  l_s_diff_period.
          
add 1 to l_s_diff_period.
          l_s_range-low  = l_s_diff_period.
          l_s_range-
sign = 'I'.
          l_s_range-opt  = 
'EQ'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.





* Variável para o relatórios de RH que vai permitir incluir na data o último dia do mês para recolher os dados do cadastro.

      
when 'ZV_AUXDATA'.
        
clear: l_s_range, aux_data.
        
loop at i_t_var_range into loc_var_range where vnam = 'ZP_CALMO'.
          
concatenate loc_var_range-high '01' into aux_data.
          
call function 'SLS_MISC_GET_LAST_DAY_OF_MONTH'
            
EXPORTING
              day_in            = aux_data
            
IMPORTING
              last_day_of_month = aux_data
            
EXCEPTIONS
              day_in_not_valid  = 
1
              
others            = 2.
          l_s_range-
sign = 'I'.
          l_s_range-opt = 
'EQ'.
          l_s_range-low = aux_data.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.

* Variables que obteñen o día, o mes e o año.(formato fiscal 001.2011)
      
when 'ZP_DAY'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = 'CAL_DAY'.
          
clear l_s_range.
          l_s_range-low      = loc_var_range-low+
6(2) .
          l_s_range-
sign     = 'I'.
          l_s_range-opt      = 
'EQ'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.
      
when 'ZP_PERIO'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = 'CAL_DAY'.
          
clear l_s_range.
          l_s_range-low      = loc_var_range-low+
4(2).    "low value e.g.200001
          
concatenate '0' l_s_range-low into l_s_range-low.
          l_s_range-
sign     = 'I'.
          l_s_range-opt      = 
'EQ'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.
      
when 'ZP_YEAR'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = 'CAL_DAY'.
          
clear l_s_range.
          l_s_range-low      = loc_var_range-low(
4).    "low value e.g.200001
          l_s_range-
sign     = 'I'.
          l_s_range-opt      = 
'EQ'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.





Variable3: Variables que obteñen o día, o mes e o año.(formato CAL 01.2011)
      
when 'ZV_CALDAY'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = 'ZV_DAY'.
          
clear l_s_range.
          l_s_range-low      = loc_var_range-low+
6(2).    "low value e.g.200001
          l_s_range-
sign     = 'I'.
          l_s_range-opt      = 
'EQ'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.

      
when 'ZV_CALMO'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = 'ZV_DAY'.
          
clear l_s_range.
          l_s_range-low      = loc_var_range-low+
4(2).    "low value e.g.200001
          l_s_range-
sign     = 'I'.
          l_s_range-opt      = 
'EQ'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.
      
when 'ZV_CALYE'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = 'ZV_DAY'.
          
clear l_s_range.
          l_s_range-low      = loc_var_range-low(
4).    "low value e.g.200001
          l_s_range-
sign     = 'I'.
          l_s_range-opt      = 
'EQ'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.* fin VARIABLE
*basado en la misma variable de dia, variables del dia 01.01.YYYY hasta DD.MM.YYYY para los anhos n, n-1 y n-2.
      
when 'ZV_DAY1_N2'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = 'ZV_DAY'.
          
clear l_s_range.
          
clear: aux_year_n2, aux_year_n1, aux_year_n0, mm, dd.
          
aux_year_n2 = loc_var_range-low(4) - 2.
          
aux_year_n1 = loc_var_range-low(4) - 1.
          aux_year_n0 = loc_var_range-low(
4) - 0.
          mm = loc_var_range-low+
4(2).
          dd = loc_var_range-low+
6(2).
          
if mm eq '02' and dd eq '29'.
            dd = 
'28'.
          
endif.
          
concatenate aux_year_n2 '01' '01'  into l_s_range-low.
          
concatenate aux_year_n2  mm   dd   into l_s_range-high.
          l_s_range-
sign = 'I'.
          l_s_range-opt = 
'BT'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.

      
when 'ZV_DAY1_N1'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = 'ZV_DAY'.
          
clear l_s_range.
          
clear: aux_year_n2, aux_year_n1, aux_year_n0, mm, dd.
          
aux_year_n2 = loc_var_range-low(4) - 2.
          
aux_year_n1 = loc_var_range-low(4) - 1.
          aux_year_n0 = loc_var_range-low(
4) - 0.
          mm = loc_var_range-low+
4(2).
          dd = loc_var_range-low+
6(2).
          
if mm eq '02' and dd eq '29'.
            dd = 
'28'.
          
endif.

          
concatenate aux_year_n1 '01' '01'  into l_s_range-low.
          
concatenate aux_year_n1  mm   dd  into l_s_range-high.
          l_s_range-
sign = 'I'.
          l_s_range-opt = 
'BT'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.

      
when 'ZV_DAY1_N0'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = 'ZV_DAY'.
          
clear l_s_range.
          
clear: aux_year_n2, aux_year_n1, aux_year_n0, mm, dd.
          
aux_year_n2 = loc_var_range-low(4) - 2.
          
aux_year_n1 = loc_var_range-low(4) - 1.
          aux_year_n0 = loc_var_range-low(
4) - 0.
          mm = loc_var_range-low+
4(2).
          dd = loc_var_range-low+
6(2).

          
concatenate aux_year_n0 '01' '01'  into l_s_range-low.
          
concatenate aux_year_n0  mm   dd   into l_s_range-high.
          l_s_range-
sign = 'I'.
          l_s_range-opt = 
'BT'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.* fin VARIABLE
*basado en la misma variable de dia, variables del dia 01.01.YYYY hasta DD.MM.YYYY para los anhos n, n-1 y n-2.
      
when 'ZV_MM1_N2'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = 'ZV_CALMONTH'.
          
clear l_s_range.
          
clear: aux_year_n2, aux_year_n1, aux_year_n0.
          aux_year_n2 = loc_var_range-low(
4) - 2.
          aux_year_n1 = loc_var_range-low(
4) - 1.
          aux_year_n0 = loc_var_range-low(
4) - 0.
          mm = loc_var_range-low+
4(2).

          
concatenate aux_year_n2 '01'  into l_s_range-low.
          
concatenate aux_year_n2  mm   into l_s_range-high.
          l_s_range-
sign = 'I'.
          l_s_range-opt = 
'BT'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.

      
when 'ZV_MM1_N1'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = 'ZV_CALMONTH'.
          
clear l_s_range.
          
clear: aux_year_n2, aux_year_n1, aux_year_n0, mm.
          
aux_year_n2 = loc_var_range-low(4) - 2.
          
aux_year_n1 = loc_var_range-low(4) - 1.
          aux_year_n0 = loc_var_range-low(
4) - 0.
          mm = loc_var_range-low+
4(2).


          
concatenate aux_year_n1 '01' into l_s_range-low.
          
concatenate aux_year_n1  mm  into l_s_range-high.
          l_s_range-
sign = 'I'.
          l_s_range-opt = 
'BT'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.

      
when 'ZV_MM1_N0'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = 'ZV_CALMONTH'.
          
clear l_s_range.
          
clear: aux_year_n2, aux_year_n1, aux_year_n0, mm.
          
aux_year_n2 = loc_var_range-low(4) - 2.
          
aux_year_n1 = loc_var_range-low(4) - 1.
          aux_year_n0 = loc_var_range-low(
4) - 0.
          mm = loc_var_range-low+
4(2).

          
concatenate aux_year_n0 '01' into l_s_range-low.
          
concatenate aux_year_n0  mm  into l_s_range-high.
          l_s_range-
sign = 'I'.
          l_s_range-opt = 
'BT'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.*basado en variable de dia, variables del dia DD.MM.YYYY hasta DD.MM.YYYY para os anhos n-1 y n-2.
      
when 'ZV_DAY2_N2'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = 'ZV_DAY2'.
          
clear l_s_range.
          
clear: aux_year_n2, aux_year_n1, aux_year_n0, mm, dd.

          aux_year_n2 = loc_var_range-low(
4) - 2.
          mm = loc_var_range-low+
4(2).
          dd = loc_var_range-low+
6(2).
          
concatenate aux_year_n2  mm   dd   into l_s_range-low.

          aux_year_n2 = loc_var_range-high(
4) - 2.
          mm = loc_var_range-high+
4(2).
          dd = loc_var_range-high+
6(2).
          
concatenate aux_year_n2  mm   dd   into l_s_range-high.

          l_s_range-
sign = 'I'.
          l_s_range-opt = 
'BT'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.

      
when 'ZV_DAY2_N1'.
        
loop at i_t_var_range into loc_var_range
                  
where vnam = 'ZV_DAY2'.
          
clear l_s_range.
          
clear: aux_year_n2, aux_year_n1, aux_year_n0, mm, dd.
          
aux_year_n2 = loc_var_range-low(4) - 1.
          
mm = loc_var_range-low+4(2).
          dd = loc_var_range-low+
6(2).
          
concatenate aux_year_n2  mm   dd   into l_s_range-low.

          aux_year_n2 = loc_var_range-high(
4) - 1.
          mm = loc_var_range-high+
4(2).
          dd = loc_var_range-high+
6(2).
          
concatenate aux_year_n2  mm   dd   into l_s_range-high.

          l_s_range-
sign = 'I'.
          l_s_range-opt = 
'BT'.
          
append l_s_range to e_t_range.
          
exit.
        
endloop.




======================================================================
** A partir del mes/año calcula al acumulado anual hasta ese mes
** incluido
*====================================================================

      WHEN 'ZV_FYPCP'.
        CLEAR L_S_RANGE.
       LOOP AT i_t_var_range INTO loc_var_range WHERE vnam = '0RMA_FIP'.
          PERFORM f_fill_ZV_FYPCP USING loc_var_range
                                  CHANGING l_s_range.
          APPEND L_S_RANGE TO E_T_RANGE.
          EXIT.

        ENDLOOP.

*======================================================================
** A partir del mes introducido calcula al acumulado anual hasta ese mes
** incluido
*====================================================================

      WHEN 'ZV_PER3A'.
        CLEAR L_S_RANGE.
        LOOP AT i_t_var_range INTO loc_var_range WHERE vnam = 'ZV_PER3'.

          l_s_range-low  = '001'.
          l_s_range-high = LOC_VAR_RANGE-LOW.

          L_S_RANGE-SIGN    = 'I'.
          L_S_RANGE-OPT     = 'BT'.
          APPEND L_S_RANGE TO E_T_RANGE.
          EXIT.
        ENDLOOP.