viernes, 26 de abril de 2013

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.




No hay comentarios: