reporte al sri

55
REPORTE AL SRI ************************************************************************ * * * ******************************************** * * * Confidential and Proprietary * * * * Copyright 2013, FAMILIA ECUADOR * * * * All Rights Reserved * * * ******************************************** * * * ************************************************************************ * PROYECTO DE IMPLEMENTACION DE HR * ************************************************************************ * NOMBRE DEL PROGRAMA : ZHRECR005 - Formato y Archivo Plano SRI (EC) * DESCRIPCION : Formato y Archivo Plano SRI (EC) * COMPAÑIA : HR SOLUTIONS LTDA. * AUTOR DEL PROGRAMA : Oscar Eugenio Rodas * FECHA : Mayo 01 de 2013 * NUMERO DE VERSION : 1.0. ************************************************************************ * LOG DE MODIFICACIONES ************************************************************************ * FECHA |USUARIO |NRO.ORDEN |DEVELOPER |DESCRIPCION ************************************************************************ * 01/05/2013 OSCARRV DEVK962370 Oscar Rodas Programa inicial ************************************************************************ REPORT zhrecr005 . * Declaracion de Estructuras TABLES : pernr , t512w , t500t , t52bx . * Declaracion de Infotipos INFOTYPES : 0000 , 0001 , 0002 , 0004 , 0006 ,

Upload: independent

Post on 25-Feb-2023

1 views

Category:

Documents


0 download

TRANSCRIPT

REPORTE AL SRI

*************************************************************************                                                                      **            ********************************************              **            *   Confidential and Proprietary           *              **            *   Copyright 2013, FAMILIA ECUADOR        *              **            *   All Rights Reserved                    *              **            ********************************************              **                                                                      **************************************************************************               PROYECTO DE IMPLEMENTACION DE HR                       ************************************************************************** NOMBRE DEL PROGRAMA : ZHRECR005 - Formato y Archivo Plano SRI (EC)* DESCRIPCION         : Formato y Archivo Plano SRI (EC)* COMPAÑIA            : HR SOLUTIONS LTDA.* AUTOR DEL PROGRAMA  : Oscar Eugenio Rodas* FECHA               : Mayo 01 de 2013* NUMERO DE VERSION   : 1.0.************************************************************************* LOG DE MODIFICACIONES************************************************************************* FECHA       |USUARIO      |NRO.ORDEN  |DEVELOPER   |DESCRIPCION************************************************************************* 01/05/2013  OSCARRV       DEVK962370  Oscar Rodas  Programa inicial************************************************************************

REPORT  zhrecr005.

* Declaracion de EstructurasTABLES: pernr,        t512w,        t500t,        t52bx.

* Declaracion de InfotiposINFOTYPES: 0000,           0001,           0002,           0004,           0006,

           0185,           9803,           9804.

TYPE-POOLS: zpec1,            zpyec,            abap.

* Macros* Clases de evaluaciónTYPES tevcl(2)  TYPE c.DATA BEGIN OF xaklas.DATA cleval01 TYPE tevcl.DATA cleval02 TYPE tevcl.DATA cleval03 TYPE tevcl.DATA cleval04 TYPE tevcl.DATA cleval05 TYPE tevcl.DATA cleval06 TYPE tevcl.DATA cleval07 TYPE tevcl.DATA cleval08 TYPE tevcl.DATA cleval09 TYPE tevcl.DATA cleval10 TYPE tevcl.DATA cleval11 TYPE tevcl.DATA cleval12 TYPE tevcl.DATA cleval13 TYPE tevcl.DATA cleval14 TYPE tevcl.DATA cleval15 TYPE tevcl.DATA cleval16 TYPE tevcl.DATA cleval17 TYPE tevcl.DATA cleval18 TYPE tevcl.DATA cleval19 TYPE tevcl.DATA cleval20 TYPE tevcl.DATA END OF xaklas.

DATA: dataemployee     TYPE zpyecs038 OCCURS 0 WITH HEADER LINE,      dataemployee_tmp TYPE zpyecs038 OCCURS 0 WITH HEADER LINE.

DATA: ti_pernr TYPE zpyecs004 OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF izpyect011 OCCURS 0.        INCLUDE STRUCTURE zpyect011.

DATA: END OF izpyect011.

DATA: BEGIN OF ti_zpyect001 OCCURS 0.        INCLUDE STRUCTURE zpyect001.DATA: END OF ti_zpyect001.

DATA: BEGIN OF display_err OCCURS 1.        INCLUDE STRUCTURE hrerror.DATA: END OF display_err.

DATA: BEGIN OF errortexts OCCURS 0,        text(100),      END OF errortexts.

DATA: BEGIN OF fieldnames OCCURS 5,        text(60),        tabname(10),        fieldname(10),        typ,      END OF fieldnames.

DATA: ti_pernr_tmp LIKE ti_pernr  OCCURS 0 WITH HEADER LINE,      ti_cod_hist  TYPE zpyect007 OCCURS 0 WITH HEADER LINE,      ti_sis_sane  TYPE zpyect043 OCCURS 0 WITH HEADER LINE.

* Esta estructura es para el año 2013, para el año 2012 no se solicitaron cambios* y no se tiene la estructura, por lo tanto para el 2012 no generara el archivoTYPES: BEGIN OF ty_xml,         tipidret(1),                    " Tipo de Identificación del Retenido         idret(13),                      " Cédula o Pasaporte  del Retenido         apellidotrab(100),              " Apellidos del Trabajador         nombretrab(100),                " Nombres del Trabajador         anioret(4),                     " Año de Retención         estab(3),                       " Código de Establecimiento         residenciatrab(2),              " Residencia del Trabajador         paisresidencia(3),              " Pais de Residencia del Trabajador         aplicaconvenio(2),              " Aplica convenio para evitar doble imposición         tipotrabajdiscap(2),            " Condición del trabajador respecto a discapacidades         porcentajediscap(3),            " Porcentaje de discapacidad

         tipiddiscap(1),                 " Tipo de identificación de la persona con discapacidad a quien sustituye o representa         iddiscap(13),                   " Número de identificación de la persona con discapacidad a quien sustituye o representa         suelsal(12),                    " Sueldos y salarios         sobsuelcomremu(12),             " Sobresueldos, comisiones y otras remuneraciones         partutil(12),                   " Participación utilidades         intgrabgen(12),                 " Ingresos gravados generados con otros empleadores         imprentempl(12),                " Impuesto a la Renta asumido por este empleador         decimter(12),                   " Décimo tercer sueldo         decimcuar(12),                  " Décimo cuarto sueldo         fondoreserva(12),               " Fondo de Reserva (Informativo)         salariodigno(12),               " Compensación económica Salario Digno (Informativo)         otrosingrengrav(12),            " Otras ingresos en relación de dependencia que no constituyen renta gravada         inggravconesteempl(12),         " Ingresos gravados con este empleador (Informativo)         sissalnet(1),                   " Sistema de salario neto         apoperiess(12),                 " Aporte personal al IESS pagado por el empleado         aporperiessconotrosempls(12),   " Aporte personal IESS con otros empleadores         deducvivienda(12),              " Deducción Gastos Personales - Vivienda         deducsalud(12),                 " Deducción Gastos Personales - Salud         deduceduca(12),                 " Deducción Gastos Personales - Educación         deducaliement(12),              " Deducción Gastos Personales - Alimentación         deducvestim(12),                " Deducción Gastos Personales - Vestimenta         exodiscap(12),                  " Exoneraciones discapacidad         exotered(12),                   " Exoneraciones tercera edad         basimp(12),                     " Base Imponible Gravada         imprentcaus(12),                " Impuesto a la Renta Causado         valretasuotrosempls(12),        " Valor del impuesto retenido y asumido por otros empleadores durante el período declarado         valimpasuesteempl(12),          " Valor del impuesto asumido por este empleador         valret(12),                     " Valor del impuesto retenido al trabajador 

por este empleador       END OF ty_xml.

TYPES: BEGIN OF ty_final_xml,         numruc(13),                    " RUC del Agente de Retención         anio(4),                       " Año presentación         xmlstruct TYPE ty_xml,       END OF ty_final_xml.

DATA: BEGIN OF wa_final_xml,        numruc(13),                    " RUC del Agente de Retención        anio(4),                       " Año presentación        xmlstruct TYPE TABLE OF ty_xml,      END OF wa_final_xml.

DATA: t_xml       TYPE TABLE OF ty_xml,      t_final_xml LIKE TABLE OF wa_final_xml,      t_source    TYPE abap_trans_srcbind_tab.

DATA: ti_hrpy_012_tabd TYPE zpyect007_a OCCURS 0 WITH HEADER LINE,      ti_hrpy_012_tabb TYPE zpyect007_b OCCURS 0 WITH HEADER LINE.

* Esta estructura es para el año 2013, para el año 2012 no se solicitaron cambios* y no se tiene la estructura, por lo tanto para el 2012 no generara el archivo* Archivo Plano DestinoDATA: BEGIN OF ti_arch_plano OCCURS 0,        numruc(13),                     " RUC del Agente de Retención        anio(4),                        " Año presentación        tipidret(1),                    " Tipo de Identificación del Retenido        idret(13),                      " Cédula o Pasaporte  del Retenido        apellidotrab(100),              " Apellidos del Trabajador        nombretrab(100),                " Nombres del Trabajador        anioret(4),                     " Año de Retención        estab(3),                       " Código de Establecimiento        residenciatrab(2),              " Residencia del Trabajador        paisresidencia(3),              " Pais de Residencia del Trabajador        aplicaconvenio(2),              " Aplica convenio para evitar doble imposición        tipotrabajdiscap(2),            " Condición del trabajador respecto a discapacidades        porcentajediscap(3),            " Porcentaje de discapacidad

        tipiddiscap(1),                 " Tipo de identificación de la persona con discapacidad a quien sustituye o representa        iddiscap(13),                   " Número de identificación de la persona con discapacidad a quien sustituye o representa        suelsal(12),                    " Sueldos y salarios        sobsuelcomremu(12),             " Sobresueldos, comisiones y otras remuneraciones        partutil(12),                   " Participación utilidades        intgrabgen(12),                 " Ingresos gravados generados con otros empleadores        imprentempl(12),                " Impuesto a la Renta asumido por este empleador        decimter(12),                   " Décimo tercer sueldo        decimcuar(12),                  " Décimo cuarto sueldo        fondoreserva(12),               " Fondo de Reserva (Informativo)        salariodigno(12),               " Compensación económica Salario Digno (Informativo)        otrosingrengrav(12),            " Otras ingresos en relación de dependencia que no constituyen renta gravada        inggravconesteempl(12),         " Ingresos gravados con este empleador (Informativo)        sissalnet(1),                   " Sistema de salario neto        apoperiess(12),                 " Aporte personal al IESS pagado por el empleado        aporperiessconotrosempls(12),   " Aporte personal IESS con otros empleadores        deducvivienda(12),              " Deducción Gastos Personales - Vivienda        deducsalud(12),                 " Deducción Gastos Personales - Salud        deduceduca(12),                 " Deducción Gastos Personales - Educación        deducaliement(12),              " Deducción Gastos Personales - Alimentación        deducvestim(12),                " Deducción Gastos Personales - Vestimenta        exodiscap(12),                  " Exoneraciones discapacidad        exotered(12),                   " Exoneraciones tercera edad        basimp(12),                     " Base Imponible Gravada        imprentcaus(12),                " Impuesto a la Renta Causado        valretasuotrosempls(12),        " Valor del impuesto retenido y asumido por otros empleadores durante el período declarado        valimpasuesteempl(12),          " Valor del impuesto asumido por este empleador        valret(12),                     " Valor del impuesto retenido al trabajador p

or este empleador      END OF ti_arch_plano.

* Archivo Plano OrigenDATA: BEGIN OF s_arch_origen OCCURS 0,        pernr(8),                 " Numero de Personal        vpaut(12),                " Valor Particion de Utilidades        vimre(12),                " Valor Impuesto a la Renta      END OF s_arch_origen.

DATA: BEGIN OF ti_arch_origen OCCURS 0,        pernr TYPE p_pernr,                 " Numero de Personal        vpaut TYPE zec_vpaut,            " Valor Particion de Utilidades        vimre TYPE zec_vimre,            " Valor Impuesto a la Renta      END OF ti_arch_origen.

DATA: s_archivo LIKE ti_arch_origen.

* Declaracion de Estructuras de TrabajoDATA: wa_zpyect001     LIKE ti_zpyect001,      wa_pernr         LIKE ti_pernr,      wa_dataemployee  LIKE dataemployee,      wa_arch_plano    LIKE ti_arch_plano.

DATA: wa_xml    TYPE ty_xml,      wa_source TYPE abap_trans_srcbind.

* Global Data for XML CreationDATA: g_xml_string  TYPE string,      g_xml_string1 TYPE string.

TYPES: ty_tsrclin(1024) TYPE x,       ty_tsrctab TYPE STANDARD TABLE OF ty_tsrclin.

DATA: g_xsltp          TYPE REF TO cl_xslt_processor,      g_ixml           TYPE REF TO if_ixml,      g_stream_factory TYPE REF TO if_ixml_stream_factory,      g_srcstr         TYPE REF TO if_ixml_istream,      t_srctab         TYPE ty_tsrctab,      g_progname       TYPE cxsltdesc VALUE 'ID',

      g_gen_ex         TYPE REF TO cx_xslt_exception,      g_message        TYPE string.

DATA: g_title    TYPE string,      g_filename TYPE string,      g_path     TYPE string,      g_fullpath TYPE string,      g_len      TYPE i,      wa_valor   LIKE zpyect011-zfraccion,      wa_valor1  LIKE zpyect011-zexceso,      wa_valor2  LIKE zpyect011-zimpuesto,      wa_valor3  LIKE zpyect011-zimpfrac.

DATA: g_file_table    TYPE filetable,      g_rc            TYPE i,      wa_file_table   TYPE file_table.

* Declaracion de VariablesDATA: header1(132)    TYPE c,      header2(132)    TYPE c,      header3(132)    TYPE c,      footnote1(132)  TYPE c,      footnote2(132)  TYPE c,      footnote3(132)  TYPE c,      footnote4(132)  TYPE c,      myreport        LIKE sy-repid,      return_code     LIKE sy-subrc,      datum(10)       TYPE c,      column_type     TYPE c,      lc_cols         TYPE i,      list_level(2)   TYPE c,      gl_ictyp        LIKE p0185-ictyp,      gl_icnum        LIKE p0185-icnum,      wl_kokrs        TYPE kokrs,      wl_regular(1)   TYPE c.

DATA: wl_num_arc      TYPE i.

DATA: wl_begda TYPE begda.

DATA: wl_num_month TYPE p.

DATA: wl_hiredate TYPE begda.

DATA: wl_num_ret TYPE i.

DATA: ti_message TYPE REF TO if_hrpa_message_handler.

DATA: p_titul LIKE sy-title VALUE 'Archivo Plano y Formato Información SRI'.

DATA: func_mod_name      TYPE rs38l_fnam,      output_options     TYPE ssfcompop,      control_parameters TYPE ssfctrlop.

DATA: lc_valida TYPE c.

DATA: wl_decimo_cuarto TYPE zec_vdcsu.

DATA: gl_transform(18) TYPE c VALUE 'ZHRECTR_XML'.

CONSTANTS: cn_form    TYPE tdsfname VALUE 'Z*SRI*'.

DATA: cn_year(4) TYPE c.cn_year = sy-datum(4).

INCLUDE: zhrecinc03,  "Parametros de calculo de nomina         rpcccd09.

SELECTION-SCREEN BEGIN OF BLOCK formnameWITH FRAME TITLE text-001.PARAMETERS: p_form LIKE stxfadm-formname OBLIGATORY. " MATCHCODE OBJECT zsh_stxfadm.SELECTION-SCREEN END OF BLOCK formname.

SELECTION-SCREEN BEGIN OF BLOCK downloadWITH FRAME TITLE text-002.PARAMETERS: p_fentre TYPE datum OBLIGATORY,            p_file   TYPE rlgrap-filename.SELECTION-SCREEN END OF BLOCK download.

SELECTION-SCREEN BEGIN OF BLOCK uploadWITH FRAME TITLE text-003.PARAMETERS: p_fileup TYPE rlgrap-filename MODIF ID new.SELECTION-SCREEN END OF BLOCK upload.

AT SELECTION-SCREEN OUTPUT.  PERFORM modify_screen.

AT SELECTION-SCREEN.  PERFORM validaciones_archivos.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.  PERFORM destino_archivo.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fileup.  PERFORM origen_archivo.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ocrsn.  PERFORM tipos_especiales.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_form.  PERFORM form.

AT SELECTION-SCREEN ON p_payty.  PERFORM valida_payty.

START-OF-SELECTION.

  CLEAR: ti_hrpy_012_tabd, ti_hrpy_012_tabb, ti_arch_origen, ti_sis_sane.  FREE:  ti_hrpy_012_tabd, ti_hrpy_012_tabb, ti_arch_origen, ti_sis_sane.

* Se traen los datos de la(s) sociedad(es)  SELECT *    FROM zpyect001    INTO TABLE ti_zpyect001    WHERE bukrs IN pnpbukrs      AND endda GE pn-begda      AND begda LE pn-endda.

  SORT ti_zpyect001 BY bukrs endda DESCENDING.

* Si es Nomina Especial  IF p_ocrsn IS INITIAL.    CLEAR: p_payty, p_payid, p_bondt.    wl_regular = 'X'.  ELSE.    CLEAR wl_regular.  ENDIF.

* Se traen las equivalencias de las Provincias  SELECT *    FROM zpyect007_a    INTO TABLE ti_hrpy_012_tabd    WHERE spras EQ sy-langu      AND land1 EQ 'EC'.

* Se traen las equivalencias de Cantones  SELECT *    FROM zpyect007_b    INTO TABLE ti_hrpy_012_tabb    WHERE spras EQ sy-langu      AND land1 EQ 'EC'.

* Trae los codigos de agencias  SELECT *    FROM zpyect007    INTO TABLE ti_cod_hist    WHERE endda GE pn-begda      AND begda LE pn-endda.

* Empleados CON Sistema Salario Neto  SELECT *    FROM zpyect043    INTO TABLE ti_sis_sane    WHERE endda GE pn-begda      AND begda LE pn-endda.

GET pernr.

  CHECK pernr-bukrs IN pnpbukrs.  CLEAR ti_pernr.

  CLEAR wl_hiredate.  PERFORM get_hire_date(zhrecp001) USING pernr-pernr                                          pn-begda                                          pn-endda                                 CHANGING wl_hiredate                                          sy-subrc.

  IF sy-subrc EQ 0.    MOVE wl_hiredate TO ti_pernr-ls_hiring_date.  ENDIF.

  IF ti_pernr-ls_hiring_date BETWEEN pn-begda AND pn-endda.    wl_begda = ti_pernr-ls_hiring_date.  ELSE.    wl_begda = pn-begda.  ENDIF.

  CLEAR dataemployee.  FREE  dataemployee.

  CALL FUNCTION 'Z_HREC_READ_CLUSTER_PERIOD'    EXPORTING      payroll_pernr              = pernr-pernr      payroll_begda              = wl_begda      payroll_endda              = pn-endda      payroll_in_view            = 'X'      payroll_payty              = p_payty      payroll_payid              = p_payid      payroll_bondt              = p_bondt      payroll_ocrsn              = 'A'      cd_regular                 = wl_regular    TABLES      datatable                  = dataemployee    EXCEPTIONS      empleado_no_existe         = 1      resultado_nomina_no_existe = 2

      OTHERS                     = 3.

  IF sy-subrc <> 0.  ELSE.

*****    LOOP AT dataemployee WHERE lgart = '9BAR'.*****      ti_pernr-virca = ( ( dataemployee-betrg * dataemployee-betpe ) / 100 + dataemployee-anzhl ).*****    ENDLOOP.

* Se trae la Clase de Evaluacion Numero 20 de cada CC-Nomina* Esta clase de evaluacion es la que permite saber que cc-nomina* hace parte de cada campo del formato SRI    LOOP AT dataemployee.      PERFORM re512w USING dataemployee-molga dataemployee-lgart pn-endda.      MOVE: t512w-aklas     TO xaklas,            xaklas-cleval20 TO dataemployee-gl_evcl20.

      MODIFY dataemployee.    ENDLOOP.

* Borra los registros (cc-nominas) que no tengan clase de evaluacion 20    DELETE dataemployee WHERE gl_evcl20 IS INITIAL.

    DESCRIBE TABLE dataemployee.

    CHECK sy-tfill GT 0.

    READ TABLE dataemployee INDEX 1.    MOVE-CORRESPONDING dataemployee TO ti_pernr.    MOVE dataemployee-amt_curr TO ti_pernr-waers.

* Lectura de las Rebajas Especiales    PERFORM zzread_infotype(zhrecp001) TABLES p9803 USING pernr-pernr                                                           '9803'       "infotipo                                                           pn-begda                                                           pn-endda.

    SORT p9803 BY endda DESCENDING.

    LOOP AT p9803 WHERE begda LE pn-endda                    AND endda GE pn-begda.      MOVE-CORRESPONDING p9803 TO ti_pernr.    " los valores se traen por la clase de evaluacion      EXIT.    ENDLOOP.

* Lectura de Valores Otros Empleadores    PERFORM zzread_infotype(zhrecp001) TABLES p9804 USING pernr-pernr                                                           '9804'       "infotipo                                                           pn-begda                                                           pn-endda.

    SORT p9804 BY endda DESCENDING.

    LOOP AT p9804 WHERE begda LE pn-endda                    AND endda GE pn-begda.      MOVE-CORRESPONDING p9804 TO ti_pernr.    " los valores se traen por la clase de evaluacion      EXIT.    ENDLOOP.

    CLEAR wl_num_month.* Calculo numero de meses trabajados    CALL FUNCTION 'HR_ECM_GET_NUMBER_OF_MONTHS'      EXPORTING        begda           = wl_begda        endda           = pn-endda        days_min        = 01        message_handler = ti_message      IMPORTING        months          = wl_num_month.

    ti_pernr-nmtra = wl_num_month.

*****    ti_pernr-virca = ( ti_pernr-virca / 12 ) *  ti_pernr-nmtra.

* Llena los valores del Formato    CASE pn-endda(4).

      WHEN '2011'.        PERFORM llena_valores_2012.*****      WHEN '2012'.      WHEN OTHERS.        PERFORM llena_valores_2013.    ENDCASE.

    PERFORM llena_valores_especiales.

* Valores de Subtotal y Base Imponible    CASE pn-endda(4).      WHEN '2011'.        PERFORM totales_2012.*****      WHEN '2012'.      WHEN OTHERS.* Solo para el ano 2012 se lee la reparticion de utilidades del 2011 Diciembre Sociedad 1100        PERFORM rep_util_2011.        PERFORM totales_2013.    ENDCASE.

    CLEAR: gl_ictyp, gl_icnum.

* Trae el tipo de documento y el numero del documento de la persona    PERFORM get_ictyp_icnum(zhrecp001) USING pernr-pernr                                              pn-begda                                              pn-endda                                     CHANGING gl_ictyp                                              gl_icnum                                              sy-subrc.

    IF sy-subrc EQ 0.      MOVE gl_ictyp TO ti_pernr-ictyp.      MOVE gl_icnum TO ti_pernr-icnum.    ENDIF.

* Trae el Nombre    CALL FUNCTION 'HR_INITIALIZE_BUFFER'      EXPORTING        tclas = 'A'        pernr = pernr-pernr.

    PERFORM zzread_infotype(zhrecp001) TABLES p0002 USING pernr-pernr                                                           '0002'       "infotipo                                                           pn-begda                                                           pn-endda.

    LOOP AT p0002 WHERE begda LE pn-endda                    AND endda GE pn-begda.      EXIT.    ENDLOOP.

    IF sy-subrc EQ 0.      CONCATENATE p0002-nachn p0002-nach2 p0002-vorna p0002-name2 INTO ti_pernr-cname SEPARATED BY space.    ENDIF.

* Trae la fecha de retiro    CALL FUNCTION 'HR_INITIALIZE_BUFFER'      EXPORTING        tclas = 'A'        pernr = pernr-pernr.

    PERFORM zzread_infotype(zhrecp001) TABLES p0001 USING pernr-pernr                                                           '0001'       "infotipo                                                           pn-begda                                                           pn-endda.

    LOOP AT p0001 WHERE begda LE pn-endda                    AND endda GE pn-begda                    AND persg EQ '5'.      EXIT.    ENDLOOP.

    IF sy-subrc EQ 0.      ti_pernr-ls_firing_date = p0001-begda - 1.    ENDIF.

* Trae la Provincia, Ciudad, Telefono, Direccion Domiciliaria (Calle) y Número    CALL FUNCTION 'HR_INITIALIZE_BUFFER'      EXPORTING

        tclas = 'A'        pernr = pernr-pernr.

    PERFORM zzread_infotype(zhrecp001) TABLES p0006 USING pernr-pernr                                                           '0006'       "infotipo                                                           pn-begda                                                           pn-endda.

    LOOP AT p0006 WHERE begda LE pn-endda                    AND endda GE pn-begda.      EXIT.    ENDLOOP.

    IF sy-subrc EQ 0.      ti_pernr-state = p0006-state.

      SELECT SINGLE bezei        FROM t005u        INTO ti_pernr-bezei        WHERE spras EQ zpyec_langu          AND land1 EQ zpyec_land1          AND bland EQ p0006-state.

      ti_pernr-state       = p0006-state.      ti_pernr-ort01       = p0006-ort01.      ti_pernr-telnr       = p0006-telnr.      ti_pernr-stras       = p0006-stras.      ti_pernr-locat       = p0006-locat.    ENDIF.

* Trae los textos    PERFORM trae_textos.

    APPEND ti_pernr.  ENDIF.

END-OF-SELECTION.

  PERFORM def_header2.

  CASE pn-endda(4).    WHEN '2011'.      PERFORM catal_2012.*****    WHEN '2012'.    WHEN OTHERS.      PERFORM catal_2013.  ENDCASE.

  CALL FUNCTION 'HR_GET_ERROR_LIST'    TABLES      error      = display_err      errortexts = errortexts    EXCEPTIONS      no_errors  = 1      OTHERS     = 2.

  myreport = sy-repid.  list_level = '01'.

  return_code = 1.

  CLEAR wl_num_ret.

  DESCRIBE TABLE ti_pernr.

  wl_num_ret = sy-tfill.

  IF sy-tfill LE 0.    MESSAGE e002(sy) WITH 'No Existen Datos para Mostrar'.  ENDIF.

  WHILE return_code EQ 1 OR return_code EQ 2.

    CLEAR return_code.

    CONCATENATE 'Periodo Reporte SRI:' pn-begda ' - ' pn-endda INTO header3 SEPARATED BY space.

    CALL FUNCTION 'HR_DISPLAY_BASIC_LIST'      EXPORTING

        head_line1           = header2        head_line2           = header3        basic_list_title     = p_titul        file_name            = myreport        current_report       = myreport        list_level           = list_level        lay_out              = 5        dyn_pushbutton_text1 = 'Formato SRI'        dyn_pushbutton_text2 = 'Archivo Plano'      IMPORTING        return_code          = return_code      TABLES        data_tab             = ti_pernr        fieldname_tab        = fieldnames        error_tab            = display_err      EXCEPTIONS        print_problems       = 5        download_problem     = 1        no_data_tab_entries  = 2        OTHERS               = 3.

    CASE return_code.      WHEN 1.        PERFORM imprime_formato.      WHEN 2.        PERFORM crea_archivo_plano.      WHEN OTHERS.    ENDCASE.

  ENDWHILE.

  CASE sy-subrc.    WHEN 0.    WHEN 1.      CALL FUNCTION 'HR_APPEND_ERROR_LIST'        EXPORTING          arbgb = 'PN'          msgty = 'I'          msgno = '173'. "PC - Download nicht möglich.

    WHEN 2.

      CALL FUNCTION 'HR_APPEND_ERROR_LIST'        EXPORTING          arbgb = 'PN'          msgty = 'W'          msgno = '050'. "No existe Informacion.

    WHEN OTHERS.      CALL FUNCTION 'HR_APPEND_ERROR_LIST'        EXPORTING          arbgb = 'PN'          msgty = 'E'          msgno = '800'. "Interner Fehler!

      CALL FUNCTION 'HR_DISPLAY_ERROR_LIST'        EXPORTING          no_popup = ' '          no_print = 'X'          no_img   = ' '        EXCEPTIONS          OTHERS   = 1.  ENDCASE.

*&---------------------------------------------------------------------**&      Form  re512w*&---------------------------------------------------------------------*FORM re512w USING    p_molga    LIKE t500l-molga                     p_lgart    LIKE t512w-lgart                     p_endda    LIKE t512w-endda.

  CHECK p_molga NE t512w-molga OR        p_lgart NE t512w-lgart OR        p_endda NE t512w-endda.

  SELECT SINGLE * FROM t512w WHERE molga EQ p_molga                               AND lgart EQ p_lgart                               AND endda >= p_endda                               AND begda <= p_endda.  CHECK sy-subrc NE 0.

  CLEAR t512w.

ENDFORM.                                                    " re512w

*&---------------------------------------------------------------------**&      Form  llena_valores_2012*&---------------------------------------------------------------------*FORM llena_valores_2012 .

* Sueldo y Salarios Campo 301 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '01' CHANGING ti_pernr-vsysa.

* Sobresueldos, Comisiones, Bonos y otros Ingresos Gravados Campo 303 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '03' CHANGING ti_pernr-vscor.

* Décimo Tercero Sueldo Campo 305 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '05' CHANGING ti_pernr-vdtsu.

* Décimo Cuarto Sueldo Campo 307 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '07' CHANGING ti_pernr-vdcsu.

* Fondo de Reserva Campo 309 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '10' CHANGING ti_pernr-vfore.

* Participación Utilidades Campo 311 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '09' CHANGING ti_pernr-vpaut.

* Desahucio y otras remuneraciones que no constituyen renta gravada Campo 313 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '14' CHANGING ti_pernr-vdesa.

* Aportes Personal al IESS (Unicamente pagado por el empleado) Campo 315 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '11' CHANGING ti_pernr-vapie.

* Impuesto a la Renta Asumido por el Empleador Campo 331 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '17' CHANGING ti_pernr-

virae.

* Valor del Impuesto Retenido Campo 411 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '99' CHANGING ti_pernr-vimre.

ENDFORM.                    " llena_valores_2012

*&---------------------------------------------------------------------**&      Form  llena_valores_2013*&---------------------------------------------------------------------*FORM llena_valores_2013.

* Sueldo y Salarios Campo 301 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '01' CHANGING ti_pernr-vsysa.

* Sobresueldos, Comisiones, Bonos y otros Ingresos Gravados Campo 303 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '03' CHANGING ti_pernr-vscor.

* Participación Utilidades Campo 305 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '09' CHANGING ti_pernr-vpaut.

* Décimo Tercero Sueldo Campo 311 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '05' CHANGING ti_pernr-vdtsu.

* Décimo Cuarto Sueldo Campo 313 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '07' CHANGING ti_pernr-vdcsu.

* Fondo de Reserva Campo 315 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '10' CHANGING ti_pernr-vfore.

* Otros Ingresos en relacion de dependencia que no constituyen renta gravada Campo 317 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '02' CHANGING ti_pernr-voinr.

* Aportes Personal al IESS (Unicamente pagado por el empleado) Campo 351 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '11' CHANGING ti_pernr-vapie.

* Impuesto a la Renta Asumido por el Empleador Campo 381 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '17' CHANGING ti_pernr-virae.

* Valor del Impuesto Retenido Campo 407 Formato SRI  PERFORM trae_valor TABLES dataemployee USING '99' CHANGING ti_pernr-vimre.

* Trae el valor del Salario Digno SOLO para el REDEP 2014  LOOP AT dataemployee INTO wa_dataemployee WHERE lgart EQ '1M78'.    ADD wa_dataemployee-betrg TO ti_pernr-vsadi.  ENDLOOP.

ENDFORM.                    " llena_valores_2013

*&---------------------------------------------------------------------**&      Form  trae_valor*&---------------------------------------------------------------------*FORM trae_valor  TABLES   p_dataemployee TYPE zpyectt038                 USING    value(p_value)                 CHANGING p_campo.

  CLEAR p_campo.

  LOOP AT p_dataemployee INTO wa_dataemployee WHERE gl_evcl20 EQ p_value.    ADD wa_dataemployee-betrg TO p_campo.  ENDLOOP.

ENDFORM.                    " trae_valor

*&---------------------------------------------------------------------**&      Form  llena_valores_especiales*&---------------------------------------------------------------------*FORM llena_valores_especiales .

  CLEAR dataemployee_tmp.

  FREE  dataemployee_tmp.

  CALL FUNCTION 'Z_HREC_READ_CLUSTER_PERIOD'    EXPORTING      payroll_pernr              = pernr-pernr      payroll_begda              = wl_begda           "pn-begda      payroll_endda              = pn-endda      payroll_in_view            = 'X'      payroll_payty              = p_payty      payroll_payid              = p_payid      payroll_bondt              = p_bondt      payroll_ocrsn              = 'ZDCU'      cd_regular                 = ' '    TABLES      datatable                  = dataemployee_tmp    EXCEPTIONS      empleado_no_existe         = 1      resultado_nomina_no_existe = 2      OTHERS                     = 3.

  IF sy-subrc <> 0.    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.  ELSE.* Se trae la Clase de Evaluacion Numero 20 de cada CC-Nomina* Esta clase de evaluacion es la que permite saber que cc-nomina* hace parte de cada campo del formato SRI    LOOP AT dataemployee_tmp.      PERFORM re512w USING dataemployee_tmp-molga dataemployee_tmp-lgart pn-endda.      MOVE: t512w-aklas     TO xaklas,            xaklas-cleval20 TO dataemployee_tmp-gl_evcl20.

      MODIFY dataemployee_tmp.    ENDLOOP.

* Borra los registros (cc-nominas) que no tengan clase de evaluacion 20    DELETE dataemployee_tmp WHERE gl_evcl20 IS INITIAL.

    DESCRIBE TABLE dataemployee_tmp.

    CHECK sy-tfill GT 0.

* Décimo Tercero Sueldo Campo 305 Formato SRI    IF ti_pernr-vdtsu IS INITIAL.      PERFORM trae_valor TABLES dataemployee_tmp USING '05' CHANGING ti_pernr-vdtsu.    ENDIF.

* Décimo Cuarto Sueldo Campo 307 Formato SRI    IF ti_pernr-vdcsu IS INITIAL.      PERFORM trae_valor TABLES dataemployee_tmp USING '07' CHANGING ti_pernr-vdcsu.    ENDIF.

* Participación Utilidades Campo 309 Formato SRI    IF ti_pernr-vpaut IS INITIAL.      PERFORM trae_valor TABLES dataemployee_tmp USING '09' CHANGING ti_pernr-vpaut.    ENDIF.

  ENDIF.

ENDFORM.                    " llena_valores_especiales

*&---------------------------------------------------------------------**&      Form  def_header2*&---------------------------------------------------------------------*FORM def_header2.

  header2 = p_titul.

  CLEAR: header2.  IF pn-begda EQ pn-endda.    header2 = 'Fecha: '.    WRITE pn-begda TO datum DD/MM/YYYY.    CONCATENATE header2 datum INTO header2                                   SEPARATED BY space.  ELSE.    header2 = text-zrm.    WRITE pn-begda TO datum DD/MM/YYYY.    REPLACE '$1' WITH datum INTO header2.

    WRITE pn-endda TO datum DD/MM/YYYY.    REPLACE '$2' WITH datum INTO header2.  ENDIF.

ENDFORM.                               " DEF_HEADER2

*&---------------------------------------------------------------------**&      Form  INIT_FIELDNAMES                     "neu     "XIRK036103*&---------------------------------------------------------------------*FORM init_fieldnames USING field1 field2 field3 field4.

  fieldnames-text = field1.  fieldnames-tabname = field2.  fieldnames-fieldname = field3.  fieldnames-typ = field4.

  APPEND fieldnames. CLEAR fieldnames.

ENDFORM.                               " INIT_FIELDNAMES

*&---------------------------------------------------------------------**&      Form  imprime_formato*&---------------------------------------------------------------------*FORM imprime_formato .

  DATA: wl_cnt        TYPE i,        wl_lee        TYPE i,        wl_imprime    TYPE i,        wl_bukrs      LIKE ti_pernr-bukrs,        wl_btrtl      LIKE ti_pernr-btrtl,        wa_year(4)    TYPE c,        lc_consec(10) TYPE n.

  CLEAR: output_options, control_parameters.  FREE:  output_options, control_parameters.

* find out the name of the generated function module  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'    EXPORTING      formname           = p_form    IMPORTING

      fm_name            = func_mod_name    EXCEPTIONS      no_form            = 1      no_function_module = 2      OTHERS             = 3.  IF sy-subrc <> 0.    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno           WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.  ENDIF.

* set output options (optional)  output_options-tddest        = '    '.  output_options-tdimmed       = 'X'.  output_options-tdnewid       = 'X'.  control_parameters-preview   = 'X'.

  SORT ti_pernr BY bukrs btrtl cname ASCENDING.  CLEAR wa_zpyect001.

  CLEAR lc_consec.

  LOOP AT ti_pernr.

    ADD 1 TO lc_consec.

    IF wa_zpyect001-bukrs NE ti_pernr-bukrs.      CLEAR wa_zpyect001.      LOOP AT ti_zpyect001 INTO wa_zpyect001 WHERE bukrs EQ ti_pernr-bukrs.        EXIT.      ENDLOOP.    ENDIF.

    MOVE-CORRESPONDING ti_pernr TO wa_pernr.

* Si la Base Imponible tiene valor se inserta el registro    CHECK NOT wa_pernr-vbaim IS INITIAL.

* make sure only one spool request is used.    AT FIRST.      control_parameters-no_close = 'X'.

    ENDAT.

    AT LAST.      control_parameters-no_close = space.    ENDAT.

    TRANSLATE: wa_zpyect001-butxt TO UPPER CASE,               wa_zpyect001-adres TO UPPER CASE,               wa_pernr-ictyp  TO UPPER CASE,               wa_pernr-cname  TO UPPER CASE,               wa_pernr-bezei  TO UPPER CASE,               wa_pernr-ort01  TO UPPER CASE,               wa_pernr-stras  TO UPPER CASE.

    wa_year = pn-endda(4).

* call the generated function module    CALL FUNCTION func_mod_name       EXPORTING* The following three parameters belong to the optional* part of the exercise.            control_parameters = control_parameters            output_options     = output_options            user_settings      = space

            wa_t7co01          = wa_zpyect001            wa_pernr           = wa_pernr            wa_year            = wa_year            wa_fentrega        = p_fentre            wa_consec          = lc_consec            color              = 'BCOL'       EXCEPTIONS            formatting_error   = 1            internal_error     = 2            send_error         = 3            user_canceled      = 4            OTHERS             = 5.

    IF sy-subrc <> 0.      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    ENDIF.

* make sure the spool request is re-used    control_parameters-no_open = 'X'.

  ENDLOOP.

ENDFORM.                    " imprime_formato

*&---------------------------------------------------------------------**&      Form  crea_archivo_plano*&---------------------------------------------------------------------*FORM crea_archivo_plano .

* Valida que el archivo XML solo sea a partir del año 2013, ya que para* años anteriores no se tienen especificacion  CHECK pn-endda(4) GE '2012'.

  CLEAR wl_num_arc.

  CLEAR ti_arch_plano.  FREE  ti_arch_plano.

  SORT ti_pernr BY bukrs btrtl cname ASCENDING.

  LOOP AT ti_pernr.    TRANSLATE: ti_pernr-ictyp TO UPPER CASE,               ti_pernr-cname TO UPPER CASE,               ti_pernr-bezei TO UPPER CASE,               ti_pernr-ort01 TO UPPER CASE,               ti_pernr-stras TO UPPER CASE.

* Arma la informacion para el archivo    IF pn-endda(4) LE '2012'.      PERFORM informacion_2013.    ELSEIF pn-endda(4) GE '2013'.      PERFORM informacion_2014.    ENDIF.  ENDLOOP.

  LOOP AT ti_arch_plano.

    MOVE-CORRESPONDING ti_arch_plano TO wa_arch_plano.    AT NEW numruc.      CLEAR: t_xml, wa_final_xml, t_final_xml.      FREE:  t_xml, wa_final_xml, t_final_xml.      CLEAR wa_xml.      wa_final_xml-numruc = wa_arch_plano-numruc.      wa_final_xml-anio   = wa_arch_plano-anio.    ENDAT.    CLEAR wa_xml.    MOVE-CORRESPONDING wa_arch_plano TO wa_xml.    APPEND wa_xml TO t_xml.    AT END OF numruc.      wa_final_xml-xmlstruct[] = t_xml[].      APPEND wa_final_xml TO t_final_xml.

      DESCRIBE TABLE t_final_xml.

      IF sy-tfill GT 0.* Creacion del archivo XML        PERFORM create_xml.

* Imprime el archivo        PERFORM download_file.      ENDIF.    ENDAT.  ENDLOOP.

ENDFORM.                    " crea_archivo_plano

*&---------------------------------------------------------------------**&      Form  trae_textos*&---------------------------------------------------------------------*FORM trae_textos .

  DATA: wl_otype TYPE otype.

* Trae el Nombre de la Sociedad  PERFORM texto_sociedad(zhrecp003)      USING    ti_pernr-bukrs                                            CHANGING ti_pernr-butxt.

* Trae el nombre de la Division de Personal

  PERFORM texto_div_personal(zhrecp003)  USING    ti_pernr-werks '99'                                            CHANGING ti_pernr-name1.

* Identificación de sociedades CO  SELECT SINGLE kokrs    FROM tka02    INTO wl_kokrs    WHERE bukrs EQ ti_pernr-bukrs.

  IF NOT wl_kokrs IS INITIAL.* Trae el nombre del Centro de Costos    PERFORM texto_ccosto(zhrecp003)      USING    sy-langu wl_kokrs ti_pernr-kostl pn-begda pn-endda                                            CHANGING ti_pernr-ktext.  ENDIF.

* Trae el nombre de la Subdivision  PERFORM texto_subdivision(zhrecp003)   USING    ti_pernr-werks ti_pernr-btrtl                                            CHANGING ti_pernr-btext.

* Trae el nombre del Grupo de Personal  PERFORM texto_gr_personal(zhrecp003)   USING    sy-langu ti_pernr-persg                                            CHANGING ti_pernr-ptexg.

* Trae el texto del Area de Personal  PERFORM texto_area_personal(zhrecp003) USING    sy-langu ti_pernr-persk                                            CHANGING ti_pernr-ptext.

* Trae el texto del Area de Nomina  PERFORM texto_area_nomina(zhrecp003)   USING    sy-langu ti_pernr-abkrs                                            CHANGING ti_pernr-atext.

* Trae el texto de la Unidad Organizativa  PERFORM texto_un_organiz(zhrecp003)    USING    sy-langu ti_pernr-orgeh  pn-begda pn-endda                                            CHANGING ti_pernr-orgtx.

* Trae el tipo de Objeto de la Posicion  PERFORM zzread_infotype(zhrecp001) TABLES p0001 USING pernr-pernr                                                         '0001'       "info

tipo                                                         pn-begda                                                         pn-endda.

  LOOP AT p0001 WHERE begda <= pn-endda                  AND endda >= pn-begda.    MOVE p0001-otype TO wl_otype.    EXIT.  ENDLOOP.

* Trae el texto de la Posicion  PERFORM texto_posicion(zhrecp003)      USING    sy-langu wl_otype ti_pernr-plans pn-begda pn-endda                                            CHANGING ti_pernr-plstx.

ENDFORM.                    " trae_textos

*&---------------------------------------------------------------------**&      Form  informacion_2013*&---------------------------------------------------------------------*FORM informacion_2013 .

  DATA: lc_val_ini(4) TYPE c VALUE '0.00'.

  CLEAR wa_zpyect001.

  IF wa_zpyect001-bukrs NE ti_pernr-bukrs.    CLEAR wa_zpyect001.    LOOP AT ti_zpyect001 INTO wa_zpyect001 WHERE bukrs EQ ti_pernr-bukrs.      EXIT.    ENDLOOP.  ENDIF.

  CLEAR ti_arch_plano.

  TRANSLATE: ti_pernr-ictyp  TO UPPER CASE,             ti_pernr-stras  TO UPPER CASE.

  ti_arch_plano-numruc         = wa_zpyect001-nitnr.  ti_arch_plano-anio           = sy-datum(4).

  IF ti_pernr-ictyp EQ 'CC'.    ti_arch_plano-tipidret     = '2'.       " Cédula  ELSE.    ti_arch_plano-tipidret     = '3'.       " Pasaporte  ENDIF.

  CONDENSE ti_pernr-icnum.  ti_pernr-icnum = ti_pernr-icnum(10).  WRITE ti_pernr-icnum TO ti_arch_plano-idret           RIGHT-JUSTIFIED.  OVERLAY ti_arch_plano-idret           WITH '000000000000'.

  IF ti_pernr-ictyp EQ 'CC'.    SHIFT ti_arch_plano-idret BY 3 PLACES LEFT.  ENDIF.

  ti_arch_plano-anioret                  = pn-endda(4).  ti_arch_plano-estab                    = '001'.  ti_arch_plano-suelsal                  = ti_pernr-vsysa.  ti_arch_plano-sobsuelcomremu           = ti_pernr-vscor.  ti_arch_plano-partutil                 = ti_pernr-vpaut.  ti_arch_plano-intgrabgen               = ti_pernr-zigoem.  ti_arch_plano-imprentempl              = ti_pernr-virae.  ti_arch_plano-decimter                 = ti_pernr-vdtsu.  ti_arch_plano-decimcuar                = ti_pernr-vdcsu.  ti_arch_plano-fondoreserva             = ti_pernr-vfore.  ti_arch_plano-salariodigno             = lc_val_ini.  " ti_pernr-.  ti_arch_plano-otrosingrengrav          = lc_val_ini.  " ti_pernr-.  ti_arch_plano-inggravconesteempl       = ti_pernr-vigem.  ti_arch_plano-sissalnet                = '1'.  ti_arch_plano-apoperiess               = ti_pernr-vapie.  ti_arch_plano-aporperiessconotrosempls = ti_pernr-ziessr.  ti_arch_plano-deducvivienda            = ti_pernr-zvivi.  ti_arch_plano-deducsalud               = ti_pernr-zsalu.  ti_arch_plano-deduceduca               = ti_pernr-zeduc.  ti_arch_plano-deducaliement            = ti_pernr-zalim.  ti_arch_plano-deducvestim              = ti_pernr-zvest.  ti_arch_plano-exodiscap                = ti_pernr-zdisc.  ti_arch_plano-exotered                 = ti_pernr-zteed.  ti_arch_plano-basimp                   = ti_pernr-vbaim.  ti_arch_plano-imprentcaus              = ti_pernr-virca.  ti_arch_plano-valretasuotrosempls      = ti_pernr-zviroe.

  ti_arch_plano-valimpasuesteempl        = lc_val_ini.  " ti_pernr-virae.  ti_arch_plano-valret                   = ti_pernr-vimre.

  APPEND ti_arch_plano.

ENDFORM.                    " informacion_2013

*&---------------------------------------------------------------------**&      Form  informacion_2014*&---------------------------------------------------------------------*FORM informacion_2014 .

  DATA: lc_val_ini(4) TYPE c VALUE '0.00'.

  CLEAR wa_zpyect001.

  IF wa_zpyect001-bukrs NE ti_pernr-bukrs.    CLEAR wa_zpyect001.    LOOP AT ti_zpyect001 INTO wa_zpyect001 WHERE bukrs EQ ti_pernr-bukrs.      EXIT.    ENDLOOP.  ENDIF.

  CLEAR ti_arch_plano.

  TRANSLATE: ti_pernr-ictyp  TO UPPER CASE,             ti_pernr-stras  TO UPPER CASE.

  ti_arch_plano-numruc = wa_zpyect001-nitnr.  ti_arch_plano-anio   = pn-endda(4).

  IF ti_pernr-ictyp EQ 'CC' OR ti_pernr-ictyp EQ 'CI'.    ti_arch_plano-tipidret = 'C'.       " Cédula (2)  ELSE.    ti_arch_plano-tipidret = 'P'.       " Pasaporte (3)  ENDIF.

  CONDENSE ti_pernr-icnum.  ti_pernr-icnum = ti_pernr-icnum(10).  WRITE ti_pernr-icnum TO ti_arch_plano-idret           RIGHT-JUSTIFIED.  OVERLAY ti_arch_plano-idret           WITH '0000000000000'.

  IF ti_pernr-ictyp EQ 'CC'.    SHIFT ti_arch_plano-idret BY 3 PLACES LEFT.  ENDIF.

* Nombre y Apellido del empleado  PERFORM zzread_infotype(zhrecp001) TABLES p0002 USING ti_pernr-pernr                                                        '0002'       "infotipo                                                        pn-begda                                                        pn-endda.

  SORT p0002 BY endda DESCENDING.

  LOOP AT p0002 WHERE begda LE pn-endda                  AND endda GE pn-begda.    CONDENSE: p0002-nachn NO-GAPS,              p0002-nach2 NO-GAPS,              p0002-vorna NO-GAPS,              p0002-name2 NO-GAPS.

    CONCATENATE p0002-nachn p0002-nach2 INTO ti_arch_plano-apellidotrab SEPARATED BY space.    CONCATENATE p0002-vorna p0002-name2 INTO ti_arch_plano-nombretrab   SEPARATED BY space.    EXIT.  ENDLOOP.

* Se modifica el nombre quitandoles las tildes  TRANSLATE: ti_arch_plano-apellidotrab USING 'áaéeíióoúu',             ti_arch_plano-apellidotrab USING 'ÁAÉEÍIÓOÚU',             ti_arch_plano-nombretrab   USING 'áaéeíióoúu',             ti_arch_plano-nombretrab   USING 'ÁAÉEÍIÓOÚU'.

* Se quitan las ñ o Ñ  TRANSLATE: ti_arch_plano-apellidotrab  USING 'ñn',             ti_arch_plano-apellidotrab  USING 'ÑN',             ti_arch_plano-nombretrab    USING 'ñn',             ti_arch_plano-nombretrab    USING 'ÑN'.

  ti_arch_plano-anioret                  = pn-endda(4).

  LOOP AT ti_cod_hist WHERE bukrs EQ ti_pernr-bukrs                        AND werks EQ ti_pernr-werks                        AND btrtl EQ ti_pernr-btrtl.    CONDENSE ti_cod_hist-coahl.    ti_arch_plano-estab                  = ti_cod_hist-coahl+1(3).    EXIT.  ENDLOOP.

  ti_arch_plano-residenciatrab                  = '01'.  ti_arch_plano-paisresidencia                  = '593'.  ti_arch_plano-aplicaconvenio                  = 'NA'.  ti_arch_plano-tipotrabajdiscap                = '01'.   " No Aplica  ti_arch_plano-porcentajediscap                = '000'.

* Verifica si el empleado presenta discapacidad  PERFORM zzread_infotype(zhrecp001) TABLES p0004 USING ti_pernr-pernr                                                        '0004'       "infotipo                                                        pn-begda                                                        pn-endda.

  SORT p0004 BY endda DESCENDING.

  LOOP AT p0004 WHERE begda LE pn-endda                  AND endda GE pn-begda.    IF p0004-zz_sustit IS INITIAL.      ti_arch_plano-tipotrabajdiscap = '02'.   " Trabajador con Discapacidad    ELSE.      ti_arch_plano-tipotrabajdiscap = '03'.   " Trabajador que actua en calidad de sustituto    ENDIF.

    IF NOT p0004-sbpro IS INITIAL.      ti_arch_plano-porcentajediscap = p0004-sbpro.    ENDIF.    EXIT.  ENDLOOP.

  ti_arch_plano-tipiddiscap              = 'N'.  ti_arch_plano-iddiscap                 = '999'.

  ti_arch_plano-suelsal                  = ti_pernr-vsysa.  ti_arch_plano-sobsuelcomremu           = ti_pernr-vscor.  ti_arch_plano-partutil                 = ti_pernr-vpaut.  ti_arch_plano-intgrabgen               = ti_pernr-zigoem.  ti_arch_plano-imprentempl              = ti_pernr-virae.  ti_arch_plano-decimter                 = ti_pernr-vdtsu.  ti_arch_plano-decimcuar                = ti_pernr-vdcsu.  ti_arch_plano-fondoreserva             = ti_pernr-vfore.  ti_arch_plano-salariodigno             = ti_pernr-vsadi.  ti_arch_plano-otrosingrengrav          = lc_val_ini.  " ti_pernr-.  ti_arch_plano-inggravconesteempl       = ti_pernr-vigem.  ti_arch_plano-sissalnet                = '1'.

* Verifica si el empleado es CON Sistema Salario Neto  LOOP AT ti_sis_sane WHERE pernr EQ ti_pernr-pernr.    ti_arch_plano-sissalnet              = '2'.    EXIT.  ENDLOOP.

  ti_arch_plano-apoperiess               = ti_pernr-vapie.  ti_arch_plano-aporperiessconotrosempls = ti_pernr-ziessr.  ti_arch_plano-deducvivienda            = ti_pernr-zvivi.  ti_arch_plano-deducsalud               = ti_pernr-zsalu.  ti_arch_plano-deduceduca               = ti_pernr-zeduc.  ti_arch_plano-deducaliement            = ti_pernr-zalim.  ti_arch_plano-deducvestim              = ti_pernr-zvest.  ti_arch_plano-exodiscap                = ti_pernr-zdisc.  ti_arch_plano-exotered                 = ti_pernr-zteed.  ti_arch_plano-basimp                   = ti_pernr-vbaim.  ti_arch_plano-imprentcaus              = ti_pernr-virca.  ti_arch_plano-valretasuotrosempls      = ti_pernr-zviroe.  ti_arch_plano-valimpasuesteempl        = lc_val_ini.  " ti_pernr-virae.  ti_arch_plano-valret                   = ti_pernr-vimre.

  APPEND ti_arch_plano.

ENDFORM.                    " informacion_2014

*&---------------------------------------------------------------------**&      Form  create_xml*&---------------------------------------------------------------------*

FORM create_xml .  DATA: lc_ano(4) TYPE c.

  CLEAR: wa_source, t_source.  FREE:  wa_source, t_source.

* Prepare for Transformation  wa_source-name = 'SRI'.  GET REFERENCE OF t_final_xml INTO wa_source-value.  APPEND wa_source TO t_source.

  CLEAR g_xml_string.*****  lc_ano = pn-endda(4) + 1.

  IF pn-endda(4) LE '2012'.    lc_ano = '2013'.  ELSEIF pn-endda(4) GE '2013'.    lc_ano = '2014'.  ENDIF.

  CONCATENATE gl_transform '_' lc_ano INTO gl_transform.  CALL TRANSFORMATION (gl_transform) SOURCE (t_source) RESULT XML g_xml_string.

  IF sy-subrc <> 0.  ELSE.    g_xml_string1 = g_xml_string.    REPLACE 'utf-16' WITH 'ISO-8859-1' INTO g_xml_string.  ENDIF.ENDFORM.                    " create_xml

*&---------------------------------------------------------------------**& Form DOWNLOAD_FILE*&---------------------------------------------------------------------** Download the XML into a file*----------------------------------------------------------------------*FORM download_file .* Local Data  DATA: wl_file    TYPE string,        wl_pos     TYPE i,        wl_ext(4)  TYPE c VALUE '.XML',

        wl_num(1)  TYPE c.

  ADD 1 TO wl_num_arc.

  CLEAR t_srctab.  FREE  t_srctab.

  TRY.      CREATE OBJECT g_xsltp.    CATCH cx_xslt_exception.  ENDTRY.

  g_ixml = cl_ixml=>create( ).  g_stream_factory = g_ixml->create_stream_factory( ).  g_srcstr = g_stream_factory->create_istream_cstring( string = g_xml_string1 ).

* XML source is specified by stream  CALL METHOD g_xsltp->set_source_stream    EXPORTING      stream = g_srcstr.

  CALL METHOD g_xsltp->set_result_table    EXPORTING      table = t_srctab.

* RUN  TRY.      CALL METHOD g_xsltp->run        EXPORTING          progname = g_progname.

    CATCH cx_xslt_exception INTO g_gen_ex.      g_xml_string = g_gen_ex->get_text( ).  ENDTRY.

  MOVE p_file TO wl_file.

* Prepara la ruta y el nombre de los archivos  FIND ALL OCCURRENCES OF '\' IN wl_file MATCH OFFSET wl_pos.

  ADD 1 TO wl_pos.  wl_file     = wl_file(wl_pos).

  wl_num = wl_num_arc.

  CONCATENATE wl_file 'RDEP' pn-endda(4) '-' wl_num wl_ext INTO wl_file.

  CALL FUNCTION 'GUI_DOWNLOAD'    EXPORTING      filename = wl_file      filetype = 'BIN'    TABLES      data_tab = t_srctab.

  IF sy-subrc EQ 0.    g_message = 'Archivo Creado Exitosamente'(i03).  ELSE.    g_message = 'Error al Crear el Archivo'(i04).  ENDIF.  MESSAGE i000(38) WITH g_message.

ENDFORM. " DOWNLOAD_FILE

*&---------------------------------------------------------------------**&      Form  validaciones_archivos*&---------------------------------------------------------------------*FORM validaciones_archivos .  IF p_file IS INITIAL.    MESSAGE e000(38) WITH 'Favor Digitar la ruta destino del Archivo'.  ENDIF.

  CLEAR lc_valida.  LOOP AT SCREEN.    IF screen-group1 EQ 'NEW' AND screen-active EQ 1.      lc_valida = 'X'.    ENDIF.  ENDLOOP.

  IF p_fileup IS INITIAL AND NOT pn-endda IS INITIAL AND pn-endda(4) LT cn_year AND NOT lc_valida IS INITIAL.    MESSAGE e000(38) WITH 'Favor Digitar la ruta origen del Archivo a Car

gar'.  ENDIF.

  IF NOT p_file IS INITIAL.    TRANSLATE p_file TO UPPER CASE.    g_len = strlen( p_file ) - 4.    IF p_file+g_len(4) NE '.XML'.      MESSAGE e000(38) WITH 'La extension debe ser .XML'.    ENDIF.  ENDIF.

  IF NOT p_fileup IS INITIAL.    TRANSLATE p_fileup TO UPPER CASE.    g_len = strlen( p_fileup ) - 4.    IF p_fileup+g_len(4) NE '.TXT'.      MESSAGE e000(38) WITH 'La extension debe ser .TXT'.    ENDIF.  ENDIF.ENDFORM.                    " validaciones_archivos

*&---------------------------------------------------------------------**&      Form  destino_archivo*&---------------------------------------------------------------------*FORM destino_archivo .  g_title = 'Documentos de Resultados'.  CALL METHOD cl_gui_frontend_services=>file_save_dialog    EXPORTING      window_title = g_title      file_filter  = '*.XML'    CHANGING      filename     = g_filename      path         = g_path      fullpath     = g_fullpath.

  IF sy-subrc EQ 0.    p_file = g_fullpath.  ENDIF.ENDFORM.                    " destino_archivo

*&---------------------------------------------------------------------**&      Form  origen_archivo

*&---------------------------------------------------------------------*FORM origen_archivo .  g_title = 'Archivo Valores Impuesto y Partición Utilidades'.  CALL METHOD cl_gui_frontend_services=>file_open_dialog    EXPORTING      window_title = g_title      file_filter  = '*.TXT'    CHANGING      file_table   = g_file_table      rc           = g_rc.

  IF sy-subrc EQ 0.    READ TABLE g_file_table INTO wa_file_table INDEX 1.    CHECK sy-subrc EQ 0.    p_fileup = wa_file_table-filename.  ENDIF.ENDFORM.                    " origen_archivo

*&---------------------------------------------------------------------**&      Form  tipos_especiales*&---------------------------------------------------------------------*FORM tipos_especiales .  CALL FUNCTION 'HR_OC_F4_POPUP_OCRSN'    EXPORTING      molga = zpyec_molga    IMPORTING      ocrsn = p_ocrsn.ENDFORM.                    " tipos_especiales

*&---------------------------------------------------------------------**&      Form  valida_payty*&---------------------------------------------------------------------*FORM valida_payty .  IF p_payty <> cd_c-regular.    SELECT SINGLE * FROM t52bx WHERE molga = zpyec_molga                               AND   payty = p_payty.    IF sy-subrc <> 0.      SELECT SINGLE * FROM t500t WHERE molga = zpyec_molga                                 AND   spras = sy-langu.      MESSAGE ID '3G' TYPE 'E' NUMBER '800' WITH p_payty t500t-ltext.    ENDIF.

  ENDIF.ENDFORM.                    " valida_payty

*&---------------------------------------------------------------------**&      Form  totales_2012*&---------------------------------------------------------------------*FORM totales_2012 .* Subtotal (301+303+311-315-317-319-321-323-325-327-329+331) Campo 351 Formato SRI  ti_pernr-vsubt = ti_pernr-vsysa + ti_pernr-vscor + ti_pernr-vpaut - ti_pernr-vapie -                   ti_pernr-zvivi - ti_pernr-zsalu - ti_pernr-zeduc - ti_pernr-zalim -                   ti_pernr-zvest - ti_pernr-zdisc - ti_pernr-zteed + ti_pernr-virae.

* Base Imponible (351+401-403-405) Campo 407 Formato SRI  ti_pernr-vbaim = ti_pernr-vsubt + ti_pernr-zigoem - ti_pernr-zdgpoe - ti_pernr-zoroem.ENDFORM.                    " totales_2012

*&---------------------------------------------------------------------**&      Form  totales_2013*&---------------------------------------------------------------------*FORM totales_2013 .* Base Imponible Gravada (301+303+305+307-351-353-361-363-365-367-369-371-373+381) Campo 399 Formato SRI  ti_pernr-vbaim = ti_pernr-vsysa + ti_pernr-vscor + ti_pernr-vpaut + ti_pernr-zigoem - ti_pernr-vapie -                   ti_pernr-ziessr - ti_pernr-zvivi - ti_pernr-zsalu - ti_pernr-zeduc  - ti_pernr-zalim -                   ti_pernr-zvest - ti_pernr-zdisc - ti_pernr-zteed + ti_pernr-virae.

  CLEAR: wa_valor, wa_valor1, wa_valor2, wa_valor3.

  CLEAR izpyect011.  FREE  izpyect011.

* Busca el rango dentro de la tabla para aplicar el descuento.

  SELECT *

    FROM zpyect011    INTO TABLE izpyect011    WHERE endda GE pn-endda    AND   begda LE pn-endda.

  LOOP AT izpyect011 WHERE endda     GE pn-endda                       AND begda     LE pn-endda                       AND zfraccion LT ti_pernr-vbaim                       AND zexceso   GE ti_pernr-vbaim.    wa_valor  = izpyect011-zfraccion.    wa_valor1 = izpyect011-zexceso.    wa_valor2 = izpyect011-zimpuesto.    wa_valor3 = izpyect011-zimpfrac.  ENDLOOP.

  ti_pernr-virca = ( ( ( ti_pernr-vbaim - wa_valor ) * wa_valor3 ) / 100 ) + wa_valor2.

* Ingresos Gravados con este Empleador (301+303+305+381) Campo 349 Formato SRI  ti_pernr-vigem = ti_pernr-vsysa + ti_pernr-vscor + ti_pernr-vpaut + ti_pernr-virae.ENDFORM.                    " totales_2013

*&---------------------------------------------------------------------**&      form  form*&---------------------------------------------------------------------*FORM form .  DATA: BEGIN OF value_tab OCCURS 0,                 name TYPE tdsfname,               END OF value_tab.

  DATA: field_tab LIKE dfies  OCCURS 0 WITH HEADER LINE.  DATA: return_tab LIKE ddshretval OCCURS 0 WITH HEADER LINE.

  DATA: ti_stxfadm  TYPE stxfadm  OCCURS 0 WITH HEADER LINE,        ti_stxfadmt TYPE stxfadmt OCCURS 0 WITH HEADER LINE.

  RANGES: rn_formname FOR stxfadm-formname.

  REFRESH value_tab[].  REFRESH field_tab[].  REFRESH return_tab[].

  rn_formname-sign   = 'I'.  rn_formname-option = 'CP'.  rn_formname-low    = 'Z*SRI*'.  APPEND rn_formname.

  SELECT *    FROM stxfadm    INTO TABLE ti_stxfadm    WHERE formname LIKE 'Z%SRI%'.

  DESCRIBE TABLE ti_stxfadm.

  CHECK sy-tfill GT 0.

  SELECT *    FROM stxfadmt    INTO TABLE ti_stxfadmt    FOR ALL ENTRIES IN ti_stxfadm    WHERE langu    EQ sy-langu      AND formname EQ ti_stxfadm-formname.

  field_tab-fieldname = 'FORMNAME'.  field_tab-tabname = 'STXFADM'.  APPEND field_tab.

  field_tab-fieldname = 'CAPTION'.  field_tab-tabname = 'STXFADMT'.  APPEND field_tab.

  field_tab-fieldname = 'FORMNAME'.

  LOOP AT ti_stxfadmt.    value_tab-name = ti_stxfadmt-formname.    APPEND value_tab.    value_tab-name = ti_stxfadmt-caption.    APPEND value_tab.  ENDLOOP.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'    EXPORTING      retfield        = field_tab-fieldname    TABLES      value_tab       = value_tab      field_tab       = field_tab      return_tab      = return_tab    EXCEPTIONS      parameter_error = 1      no_values_found = 2      OTHERS          = 3.

  IF sy-subrc = 0.    p_form = return_tab-fieldval.  ENDIF.ENDFORM.                    " form

*&---------------------------------------------------------------------**&      Form  modify_screen*&---------------------------------------------------------------------*FORM modify_screen .  IF pn-endda IS INITIAL.    LOOP AT SCREEN.      IF screen-group1 EQ 'NEW'.        screen-required  = 0.        screen-active    = 0.        screen-invisible = 1.        MODIFY SCREEN.      ENDIF.    ENDLOOP.  ENDIF.

  CHECK NOT pn-endda IS INITIAL.

  LOOP AT SCREEN.    IF screen-group1 EQ 'NEW'.      IF pn-endda(4) GE cn_year.        screen-required  = 0.        screen-active    = 0.        screen-invisible = 1.

      ELSE.        screen-required  = 1.        screen-active    = 1.        screen-invisible = 0.      ENDIF.      MODIFY SCREEN.    ENDIF.  ENDLOOP.

ENDFORM.                    " modify_screen

*&---------------------------------------------------------------------**&      Form  CATAL_2012*&---------------------------------------------------------------------*FORM catal_2012 .  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'PERNR'            'F'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'BUKRS'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'BUTXT'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'WERKS'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'NAME1'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'KOSTL'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'KTEXT'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'BTRTL'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'BTEXT'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'PERSG'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'PTEXG'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'PERSK'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'PTEXT'            'I'.

  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ABKRS'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ATEXT'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ORGEH'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ORGTX'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'PLANS'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'PLSTX'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'CNAME'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ICTYP'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ICNUM'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'STATE'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'BEZEI'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ORT01'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'TELNR'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'STRAS'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'LOCAT'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'CODIGOCAN'        'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'DESCRIPCION'      'I'.  PERFORM init_fieldnames USING  'Fecha Alta'  'ZPYECS004'  'LS_HIRING_DATE'   ' '.  PERFORM init_fieldnames USING  'Fecha Baja'  'ZPYECS004'  'LS_FIRING_DATE'   'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VSYSA'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VSCOR'       

     ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VPAUT'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZIGOEM'           ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VDTSU'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VDCSU'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VSADI'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VFORE'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VOINR'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VAPIE'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZIESSR'           'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZVIVI'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZSALU'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZEDUC'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZALIM'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZVEST'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZDISC'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZTEED'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VIRAE'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VBAIM'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VIRCA'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZVIROE'           ' '.

  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VIMRE'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VIGEM'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VDESA'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VSUBT'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'NMTRA'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZDGPOE'           ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZOROEM'           ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VREES'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'WAERS'            ' '.ENDFORM.                    " CATAL_2012

*&---------------------------------------------------------------------**&      Form  CATAL_2013*&---------------------------------------------------------------------*FORM catal_2013 .  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'PERNR'            'F'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'BUKRS'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'BUTXT'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'WERKS'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'NAME1'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'KOSTL'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'KTEXT'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'BTRTL'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'BTEXT'       

     'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'PERSG'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'PTEXG'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'PERSK'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'PTEXT'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ABKRS'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ATEXT'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ORGEH'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ORGTX'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'PLANS'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'PLSTX'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'CNAME'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ICTYP'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ICNUM'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'STATE'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'BEZEI'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ORT01'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'TELNR'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'STRAS'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'LOCAT'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'CODIGOCAN'        'I'.

  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'DESCRIPCION'      'I'.  PERFORM init_fieldnames USING  'Fecha Alta'  'ZPYECS004'  'LS_HIRING_DATE'   ' '.  PERFORM init_fieldnames USING  'Fecha Baja'  'ZPYECS004'  'LS_FIRING_DATE'   'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VSYSA'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VSCOR'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VPAUT'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZIGOEM'           ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VDTSU'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VDCSU'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VSADI'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VFORE'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VOINR'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VAPIE'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZIESSR'           ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZVIVI'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZSALU'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZEDUC'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZALIM'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZVEST'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZDISC'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZTEED'       

     ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VIRAE'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VBAIM'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VIRCA'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZVIROE'           ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VIMRE'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VIGEM'            ' '.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VDESA'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VSUBT'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'NMTRA'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZDGPOE'           'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'ZOROEM'           'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'VREES'            'I'.  PERFORM init_fieldnames USING  ' '           'ZPYECS004'  'WAERS'            'I'.ENDFORM.                    " CATAL_2013

*&---------------------------------------------------------------------**&      Form  REP_UTIL_2011*&---------------------------------------------------------------------*FORM rep_util_2011 .  CHECK pernr-bukrs EQ '1100' AND pn-endda(4) EQ '2012'.

  CLEAR dataemployee_tmp.  FREE  dataemployee_tmp.

  CALL FUNCTION 'Z_HREC_READ_CLUSTER_PERIOD'    EXPORTING      payroll_pernr              = pernr-pernr

      payroll_begda              = '01122011'      payroll_endda              = '31122011'      payroll_in_view            = 'X'      payroll_payty              = p_payty      payroll_payid              = p_payid      payroll_bondt              = p_bondt      payroll_ocrsn              = 'A'      cd_regular                 = wl_regular    TABLES      datatable                  = dataemployee_tmp    EXCEPTIONS      empleado_no_existe         = 1      resultado_nomina_no_existe = 2      OTHERS                     = 3.

  IF sy-subrc <> 0.    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.  ELSE.* Se trae la Clase de Evaluacion Numero 20 de cada CC-Nomina* Esta clase de evaluacion es la que permite saber que cc-nomina* hace parte de cada campo del formato SRI    LOOP AT dataemployee_tmp.      PERFORM re512w USING dataemployee_tmp-molga dataemployee_tmp-lgart pn-endda.      MOVE: t512w-aklas     TO xaklas,            xaklas-cleval20 TO dataemployee_tmp-gl_evcl20.

      MODIFY dataemployee_tmp.    ENDLOOP.

* Borra los registros (cc-nominas) que no tengan clase de evaluacion 20    DELETE dataemployee_tmp WHERE gl_evcl20 IS INITIAL.

    DESCRIBE TABLE dataemployee_tmp.

    CHECK sy-tfill GT 0.

    CLEAR ti_pernr-vpaut.

* Participación Utilidades Campo 309 Formato SRI

    PERFORM trae_valor TABLES dataemployee_tmp USING '09' CHANGING ti_pernr-vpaut.  ENDIF.ENDFORM.                    " REP_UTIL_2011