viernes, 26 de abril de 2013

Z_SET_BEX_USER_TEMPLATE


Z_SET_BEX_USER_TEMPLATE


*&---------------------------------------------------------------------*
*& Report  Z_SET_BEX_USER_TEMPLATE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  Z_SET_BEX_USER_TEMPLATE.

**************************************************************************
* Type Pools
**************************************************************************
type-pools:
  rs, rsr, rspar, rssg.
**************************************************************************

selection-screen begin of block rad2 with frame title text-001.
parameters:
            p_usr    like usr01-BNAME,
            wbid     like rsrwbindex-workbookid,
            version(2)  type c,
            p_vers   as checkbox default rs_c_true.
selection-screen end of block rad2.

tables: rsrwbtemplate, usr01.
select * from usr01
where bname = p_usr.
rsrwbtemplate-templateuser = usr01-bname.
rsrwbtemplate-workbookid = wbid.
if p_vers = rs_c_true.
  rsrwbtemplate-LEAST_BEX_VERSIO = version.
endif.
update rsrwbtemplate.
if sy-subrc <> 0. insert rsrwbtemplate. endif.
endselect.

Valor TAM y Aculumado: Variables e valor para Update Rules

**************Variables*****************************************

ACUMULADO

Clear:  mes_ini, mes_fin, year_ini, year_fin, mes_year_ini, mes_year_fin.

mes_fin  =   COMM_STRUCTURE-CALMONTH+4(2).
year_fin =   COMM_STRUCTURE-CALMONTH(4).

mes_ini  =   '01'.
year_ini =   COMM_STRUCTURE-CALMONTH(4).

concatenate  year_ini mes_ini into mes_year_ini.
concatenate  year_fin mes_fin into mes_year_fin.

    SELECT SUM( /BIC/ZHIG_080 )
    FROM /BIC/AZOHIG_0100
    INTO RESULT
    WHERE COMP_CODE = COMM_STRUCTURE-COMP_CODE
    AND ( CALMONTH => mes_year_ini and CALMONTH =< mes_year_fin ).



TAM

Clear:  mes_ini, mes_fin, year_ini, year_fin, mes_year_ini, mes_year_fin.
mes_fin  =   COMM_STRUCTURE-CALMONTH+4(2).
year_fin =   COMM_STRUCTURE-CALMONTH(4).

mes_ini  =   mes_fin + 1.
year_ini =   year_fin - 1.

concatenate  year_ini mes_ini into mes_year_ini.
concatenate  year_fin mes_fin into mes_year_fin.
 if mes_fin eq 13.
 concatenate year_ini '01' into mes_year_fin.
 endif.


    SELECT SUM( /BIC/ZHIG_080 )
    FROM /BIC/AZOHIG_0100
    INTO RESULT
    WHERE COMP_CODE = COMM_STRUCTURE-COMP_CODE
    AND ( CALMONTH => mes_year_ini and CALMONTH =< mes_year_fin ).



*****************************************************************************

R3: EXIT_SAPLRSAP_004: 4R_SAKNR_0000_HIER


* In this example, Sets are extracted for DataSource 4R_SAKNR_0000_HIER
* they are compounded by a value of 'TEST' (for compound 0CHRT_ACCTS)
* The exit is called for any hierarchy extracted from OLTP to BW,
* therefore we have to make sure only desired FI-SL-Sets are modified.
* This information is available in I_DATASOURCE and I_S_HIEBAS.
*
IF I_DATASOURCE = '4R_SAKNR_0000_HIER'   "<--- datasource="" o:p="" your="">
   AND I_S_HIEBAS-HCLASS = '0000'.       "Hierarchy class of FI-SL-Sets

* Add compound value to hierarchy leaves
  LOOP AT C_T_HIENODE WHERE IOBJNM <> '0HIER_NODE'.
*   Shift nodename right to get space for compound characteristic
    SHIFT C_T_HIENODE-NODENAME RIGHT BY 4 PLACES.
*   Put chart of accounts into first 4 places
    C_T_HIENODE-NODENAME(4) = 'TEST'.      "<-- compound="" o:p="" value="" your="">
    MODIFY C_T_HIENODE.
  ENDLOOP.

* Add compound value to intervals in the same fashion
  LOOP AT C_T_HIEINTV.
    SHIFT C_T_HIEINTV-LEAFFROM RIGHT BY 4 PLACES.
    C_T_HIEINTV-LEAFFROM(4) = 'TEST'.      "<-- compound="" o:p="" value="" your="">
    SHIFT C_T_HIEINTV-LEAFTO RIGHT BY 4 PLACES.
    C_T_HIEINTV-LEAFTO(4) = 'TEST'.        "<-- compound="" o:p="" value="" your="">
    MODIFY C_T_HIEINTV.
  ENDLOOP.

ENDIF.

Codigo para poner un link del MIME



      Glosario 

Carga en masa de fotos


REPORT ZHR_BDC_UPLOADPIC

     NO STANDARD PAGE HEADING LINE-SIZE 255.



INCLUDE
INCLUDE BDCRECX1.

I N T E R N A L T A B L E S
DATA : BEGIN OF IT_DATA OCCURS 0,

        RP50G-PERNR(8), " LIKE RP50G-PERNR,
        RLGRAP-FILENAME(128),
     END OF IT_DATA.
S T A R T - O F - S E L E C T I O N
START-OF-SELECTION.

PERFORM OPEN_GROUP.
CALL FUNCTION 'UPLOAD'
     EXPORTING
          FILENAME                = 'C:\PICTURE.TXT'
          FILETYPE                = 'DAT'
     TABLES
          DATA_TAB                = IT_DATA
     EXCEPTIONS
          CONVERSION_ERROR        = 1
          INVALID_TABLE_WIDTH     = 2
          INVALID_TYPE            = 3
          NO_BATCH                = 4
          UNKNOWN_ERROR           = 5
          GUI_REFUSE_FILETRANSFER = 6
          OTHERS                  = 7.
IF SY-SUBRC NE 0.
  WRITE : / 'Unable to upload data'.
  STOP.
ENDIF.
LOOP AT IT_DATA.
  PERFORM BDC_DYNPRO      USING 'OANEWCON' '0100'.
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                'TOAOM-AR_OBJECT'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '=NEW'.
  PERFORM BDC_FIELD       USING 'TOAOM-SAP_OBJECT'
                                'PREL'.
  PERFORM BDC_FIELD       USING 'TOAOM-AR_OBJECT'
                                'HRICOLFOTO'.
  PERFORM BDC_DYNPRO      USING 'SAPLSJ01' '0200'.
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                'FIELD_VALUES-INPUT(02)'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '=OK'.
  PERFORM BDC_FIELD       USING 'FIELD_VALUES-INPUT(01)'
                            IT_DATA-RP50G-PERNR.       "'10002'.
  PERFORM BDC_FIELD       USING 'FIELD_VALUES-INPUT(02)'
                                '0002'.
  PERFORM BDC_DYNPRO      USING 'SAPLOPTM' '0105'.
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                'SAPB-SAPPOOLINF'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                '=OKAY'.
  PERFORM BDC_FIELD       USING 'SAPB-SAPPOOLINF'
                            IT_DATA-RLGRAP-FILENAME.      "JPG'.
  PERFORM BDC_TRANSACTION USING 'OAOH'.
  clear IT_DATA-RLGRAP-FILENAME.
  ENDLOOP.
  PERFORM CLOSE_GROUP.

Infopaquete ABAP ejemplos


**********30 dias hacia atras**************************************+
program conversion_routine.
* Type pools used by conversion program
type-pools: rsarc, rsarr, rssm.
tables: rssdlrange.
* Global code used by conversion rules
*$*$ begin of global - insert your declaration only below this line  *-*
* TABLES: ...
* DATA:   ...
*$*$ end of global - insert your declaration only before this line   *-*
* -------------------------------------------------------------------
*     InfoObject      = Z_BUDAT
*     Fieldname       = BUDAT
*     data type       = DATS
*     length          = 000008
*     convexit        =
* -------------------------------------------------------------------
form compute_BUDAT
  tables l_t_range structure rssdlrange
  changing p_subrc like sy-subrc.
*       Insert source code to current selection field
*$*$ begin of routine - insert your code only below this line        *-*
data: l_idx like sy-tabix, l_budat_low like sy-datum.

  read table l_t_range with key fieldname = 'BUDAT'.
  l_idx = sy-tabix.

* Se calcula la fecha de dos día hacia atras
*  clear l_budat_low.
  l_budat_low = sy-datum.
  l_budat_low = (  l_budat_low - 29 ).

* Se pone la fecha de dos días hacia atras como límite inferior del
* rango de fechas, el límite superior la fecha que venía y el
* signo de igual se pasa a between.
*  clear l_t_range-high.
  l_t_range-high   = sy-datum.
  l_t_range-low    = l_budat_low.
  l_t_range-option = 'BT'.
  l_t_range-sign   = 'I'.
  modify l_t_range index l_idx.

  p_subrc = 0.

*$*$ end of routine - insert your code only before this line         *-*
endform.

*****************************************************************+
*********ultimo dia del mes******************************************
data: l_idx like sy-tabix.
read table l_t_range with key
     fieldname = 'STIDA'.
l_idx = sy-tabix.
*....
data: u_fecha like sy-datum.
* Se calcula la fecha
  u_fecha = sy-datum.
* Ultimo dia do mes
      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.
* rango de fechas
  l_t_range-high   = u_fecha.
  l_t_range-low    = u_fecha.
  l_t_range-option = 'BT'.
  l_t_range-sign   = 'I'.
  modify l_t_range index l_idx.

TEVEN: infotipo IT2011


Detallo un poco mas como tratar el Infotipo 2011.

Los registros del IT2011 no se almacenan en una tabla tipo PANNNN, con NNNN = Nº Infotipo, sino en la tabla TEVEN, por lo que funciones como HR_READ_INFOTYPE, no sirven para leer los datos del IT2011, entonces un ejemplo de lectura del IT2011 es como el siguiente:


Código:
     SELECT * FROM teven APPENDING TABLE it_teven
             WHERE pernr EQ gt_pernr-pernr
               AND ldate EQ gf_fecha
               AND stokz EQ space.


A su vez, para borrar un registro es aconsejable hacerlo de la siguiente manera:


Código:
   IF teven-stokz EQ space.
     teven-stokz = 'X'.
     teven-uname = sy-uname.
     teven-aedtm = sy-datum.
     UPDATE teven.
   ENDIF.


BAPI_CC1_UPLOAD_TIMEEVENT.

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.

Template for the Adhoc Web Application




         

         

         

         

         DATA_PROVIDER:             DP





         

         

         

         

         

         TEMPLATE PROPERTIES 








</p> <p> <img src="//img2.blogblog.com/img/video_object.png" style="background-color: #b2b2b2; " class="BLOGGER-object-element tr_noresize tr_placeholder" id="BLOGGER_object_22" data-original-id="BLOGGER_object_22" /></p> <p>




DesconectarDesconectar   

         

         

         

         

         

         

         

         ITEM:            Header




















alt="" src="/sap/bw/Mime/BEx/Icons/pixel.gif" border=0 >




href="



href="



href="



href="
alt="" src="/sap/bw/Mime/BEx/Icons/pixel.gif" border=0 >







         

         

         

         

         

         

         

         

         

         

         

         

         ITEM:            QueryName


                tabIndex="0">

         

         

         

         

         

         

         

         

         

         

         ITEM:            Actuality






         

         

         

         

         

         

         

         ITEM:            GR1Toolbar



         

         

         

         

         

         

         

         ITEM:            GR2Toolbar



         

         

         

         

         

         

         

         ITEM:            GR3Toolbar




         

         

         

         

         

         

         

         ITEM:            GR6_COND_TEMPLATE




         

         

         

         

         

         

         

         

         ITEM:            GR1NavBlock







         

         

         

         

         

         

         

         

         ITEM:            GR1Table




         

         

         

         

         

         

         

         

         

         

         ITEM:            GR2Chart




         

         

         

         

         

         

         

         

         

         

         

         

         

         

         

         

         

         

         

         

         

         

         

         ITEM:            GR3TECommon




         

         

         

         

         

         

         

         

         

         

         

         ITEM:            GR3TEFilter



         

         

         

         

         

         

         

         

         

         ITEM:            GR3DFilter



         

         

         

         

         

         

         

         

         

         

         

         ITEM:            GR3TEVariables




         

         

         

         

         

         

         

         

         

         

         ITEM:            GR3FORQUERYDOC




         

         

         

         

         

         

         

         

         ITEM:            GR4Broadcaster












alt="" src="/sap/bw/Mime/BEx/Icons/pixel.gif" border=0 >




         

         

         

         

         

         

         ITEM:            Footer






Code para transacción para lanzar cadenas


&---------------------------------------------------------------------*
*& Report  ZBWPR00
*&
*

REPORT  ZBWPR00.

************************************************************************
* VARIABLES
************************************************************************
CONSTANTS:  c_co(13) TYPE C VALUE 'ZPC_IG_TRAN03', "Comercial
            c_lo(13) TYPE C VALUE 'ZPC_IG_TRAN04', "Logística
            c_cg(13) TYPE C VALUE 'ZPC_IG_TRAN05', "Control de Gestión
            c_pr(13) TYPE C VALUE 'ZPC_IG_TRAN02', "Producción
            c_ca(13) TYPE C VALUE 'ZPC_IG_TRAN06', "Calidad
            c_fi(13) TYPE C VALUE 'ZPC_IG_TRAN07', "Finanzas
            c_rh(13) TYPE C VALUE 'ZPC_IG_TRAN01'. "Recursos Humanos

DATA: V_CHAIN TYPE RSPC_CHAIN. "Cadena de proceso


************************************************************************
* PANTALLA SELECCIÓN
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.

PARAMETERS:
            cb_co   AS CHECKBOX, "Comercial
            cb_lo   AS CHECKBOX, "Logística
            cb_cg   AS CHECKBOX, "Control de Gestión
            cb_pr   AS CHECKBOX, "Producción
            cb_ca   AS CHECKBOX, "Calidad
            cb_fi   AS CHECKBOX, "Finanzas
            cb_rh   AS CHECKBOX. "Recursos Humanos

SELECTION-SCREEN END OF BLOCK b1.

************************************************************************
* START-OF-SELECTION
************************************************************************
START-OF-SELECTION.


   MESSAGE I000(zbw).

   IF cb_co IS NOT INITIAL.

         CLEAR V_CHAIN.
         V_CHAIN = c_co.
         PERFORM F_CHAIN_START USING V_CHAIN.

   ENDIF.

   IF cb_lo IS NOT INITIAL.

         CLEAR V_CHAIN.
         V_CHAIN = c_lo.
         PERFORM F_CHAIN_START USING V_CHAIN.

   ENDIF.

   IF cb_cg IS NOT INITIAL.

         CLEAR V_CHAIN.
         V_CHAIN = c_cg.
         PERFORM F_CHAIN_START USING V_CHAIN.

   ENDIF.

   IF cb_pr IS NOT INITIAL.

         CLEAR V_CHAIN.
         V_CHAIN = c_pr.
         PERFORM F_CHAIN_START USING V_CHAIN.

   ENDIF.


   IF cb_ca IS NOT INITIAL.

         CLEAR V_CHAIN.
         V_CHAIN = c_ca.
         PERFORM F_CHAIN_START USING V_CHAIN.

   ENDIF.


   IF cb_fi IS NOT INITIAL.

         CLEAR V_CHAIN.
         V_CHAIN = c_fi.
         PERFORM F_CHAIN_START USING V_CHAIN.

   ENDIF.

   IF cb_rh IS NOT INITIAL.

         CLEAR V_CHAIN.
         V_CHAIN = c_rh.
         PERFORM F_CHAIN_START USING V_CHAIN.

   ENDIF.



*****************************************************************
* RUTINAS
*****************************************************************

*&---------------------------------------------------------------------*
*&      Form  F_CHAIN_START
*&---------------------------------------------------------------------*
*    Ejecutar cadena de procesos
*----------------------------------------------------------------------*
*      -->Pe_CHAIN  text
*----------------------------------------------------------------------*
FORM F_CHAIN_START  USING  Pe_CHAIN.

  CALL FUNCTION 'RSPC_CHAIN_START' IN BACKGROUND TASK
*                     [AS SEPARATE UNIT]
*                     [DESTINATION dest]
     EXPORTING
          i_chain             = Pe_CHAIN
          i_synchronous       = 'X'.
.
COMMIT WORK.


*   CALL FUNCTION 'RSPC_CHAIN_START'
*     EXPORTING
*          i_chain             = Pe_CHAIN
*          i_synchronous       = 'X'.

ENDFORM.                    " F_CHAIN_START

Coger el ultimo valor de un CHAR


opción 1

data: str_aux type string.
str_aux =
data: length type i.
length = strlen( str_aux ).
if not length is initial.
= str_aux+
perdon
length = lenght - 1.
= str_aux+length(1).
endif.


opcion 2
data: str_aux type string.
str_aux = .
shift str_aux by 1 places RIGHT CIRCULAR.
if not str_aux is initial.
= str_aux(1).
endif.

borrado con patron


  DELETE DATA_PACKAGE WHERE  COMP_CODE = 'YYYY'
  AND ( MATERIAL NP 'K*'
       AND MATERIAL NP 'W*'
       AND MATERIAL NP 'H*'
       AND MATERIAL NP 'L*').

Rutina: Año Bisiesto // Fisper-->Calmonth


data: year type /BI0/OICALYEAR,
      tri  type /BI0/OICALQUART1,
      dia  type c LENGTH 2,
      mes  type /BI0/OICALMONTH2,
      yearmes  type /BI0/OICALMONTH.

INCLUDE rs_bct_hr_update_rules_general.



***********
  clear: mes, year, dia, yearmes.
  year = COMM_STRUCTURE-CALMONTH(4).
  year = year + 1.
  mes  = COMM_STRUCTURE-CALMONTH+4(2).
  dia  = COMM_STRUCTURE-CALDAY+6(2).

  if mes eq '02'.
    concatenate year mes into yearmes.
    PERFORM CALCULATE_ULTIMO
        USING yearmes
               RECORD_NO
               RECORD_ALL
               SOURCE_SYSTEM
        CHANGING RESULT
                 RETURNCODE.
 else.
  concatenate year mes dia into RESULT.
endif.




************************************************************+
************************************************************

data: year type /BI0/OICALYEAR,
      tri  type /BI0/OICALQUART1,
      dia  type c LENGTH 2,
      mes  type /BI0/OICALMONTH2.

clear: mes, year.
  year = COMM_STRUCTURE-CALMONTH(4).
  year = year + 1.
  mes  = COMM_STRUCTURE-CALMONTH+4(2).
  dia  = COMM_STRUCTURE-CALDAY+6(2).
  if dia eq '29'.
    dia = '28'.
  endif.
  concatenate year mes dia into RESULT.


*************************************************************
*************************************************************

data: mes type /BI0/OICALMONTH2,
      year type /BI0/OICALYEAR.

clear: mes, year.

year = TRAN_STRUCTURE-FISCPER(4) .
mes = TRAN_STRUCTURE-FISCPER+5(2) .

if mes > 12.
mes = 12.
endif.

if mes = 00.
mes = 01.
endif.

concatenate year mes into RESULT.

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.