Powered By

Free XML Skins for Blogger

Powered by Blogger

Sunday, January 18, 2009

ABAP XML file to word document through SAP

Is there any way to convert XML file to word document through SAP?

The requirement is to import a XML file, convert it to word document and download it back to the same location.

The below program import an XML file to an internal table.

Also, take a look a this XML example: XML file example.

Moises Moreno

*----------------------------------------------------------------------*
* PROGRAMA : ZHR02597 Batch Input Datos Reloj Checador *
* leyendo un archivo XML *
* AUTOR : Moises Moreno De Leon (GALVAK) *
* FECHA : Junio 23, 2004 *
*----------------------------------------------------------------------*
REPORT ZHR02597 MESSAGE-ID ZG LINE-SIZE 80 LINE-COUNT 65
NO STANDARD PAGE HEADING.
*----------------------------------------------------------------------*
* Tablas *
TABLES:
PA0000, "HR Master Record: Infotype 0000 (Events)
PA0001, "HR Master Record: Infotype 0001 (Org. Assignment
PA0007, "HR Master Record: Infotype 0007 (Work Schedule)
PA0008, "HR Master Record: Infotype 0008 (Basic Pay)
PA2003, "HR Time Record: Infotype 2003 (Substitutions)
T508A, "Work Schedule Rules
T552A, "Monthly Work Schedules
T550A, "Daily Work Schedules
ZCATEGORIA. "Pay Scale Groups - Categorias
* Fin de Tablas *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Estructura *
DATA: BEGIN OF BDC_TABLE OCCURS 100. "Tabla para BIS
INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDC_TABLE.
DATA BEGIN OF TH_MESSTAB OCCURS 10.
INCLUDE STRUCTURE BDCMSGCOLL.
DATA END OF TH_MESSTAB.
DATA: BEGIN OF TH_ARCHIVO OCCURS 100,
NUMERO(8), "P2011-PERNR Numero del empleado
FECHA LIKE SY-DATUM, "P2011-LDATE Logical date
AUSENTISMO(4), "
HORA(4), "P2011-LTIME Logical time
TERMINAL(3), "P2011-TERID Terminal ID
RAZON(4), "P2011-ABWGR Att/absence reason
TURNO(2), "PA2003-TPROG Daily work schedule
DEPARTAMENTO(4), "KOSTL Cost center
EMPLEADO2(8), "PA2003-VPERN Personnel no.to be
COORDINADOR_AUTORIZA(8),
IN_OUT(2) TYPE N,
END OF TH_ARCHIVO.
DATA: BEGIN OF TH_ERROR OCCURS 100,
NUMERO(5), "P2011-PERNR Numero del empleado
FECHA LIKE SY-DATUM, "P2011-LDATE Logical date
AUSENTISMO(4),
HORA(4), "P2011-LTIME Logical time
TERMINAL(3), "P2011-TERID Terminal ID
RAZON(4), "P2011-ABWGR Att/absence reason
TURNO(2), "PA2003-TPROG Daily work schedule
DEPARTAMENTO(4), "KOSTL Cost center
EMPLEADO2(5), "PA2003-VPERN Personnel no.to be
END OF TH_ERROR.

TYPES: BEGIN OF REG,
CAMBIO_TURNO,
DIA(10),
AUSENTISMO(4),
TURNO(2),
HORA(5),
TIPO,
INCIDENCIA(3),
CCOSTOS(4),
SOCIO_REEMPLAZA(8),
END OF REG.
DATA: REGISTRO TYPE REG OCCURS 0 WITH HEADER LINE.
TYPES: BEGIN OF EMPLEADO,
NUMERO(8),
REGISTRO LIKE REGISTRO OCCURS 0,
END OF EMPLEADO.
DATA: BEGIN OF CIERRE OCCURS 0,
EMPLEADO TYPE EMPLEADO,
END OF CIERRE.
DATA: CHECADAS TYPE REG OCCURS 0 WITH HEADER LINE.
* Fin de estrucutras *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Variables *
DATA: SW_ERROR, "Swich existencia de empleado
SW_I2002(1) TYPE C VALUE 'F',
WC_FECHA(10), "Fecha con formato dd.mm.aaaa
WC_DIA(2), "Filtra el día de la fecha
WC_MES(2), "Filtra el mes de la fecha
WC_YEAR(4), "Filtra el año de la fecha
WC_TIPO(2), "Tipo de Substitución
WC_TPR00(4), "Turno del empleado
WC_TURNO(4), "Turno del empleado GK(Turno)
WC_TURNO_SUST(4), "Turno Sustitucion
WC_TURNO_R(4), "Turno del RELOJ GK(Turno)
WC_TURNO_S(4), "Turno del SAP GK(Turno)
WC_CATEGORIA(8), "Categoria del empleado
WN_IN_OUT(2) TYPE N, "Tipo de evento IN/OUT
WN_PERNR LIKE PA2003-PERNR,
WI_BETRG1 LIKE ZCATEGORIA-BETRG, "Cantidad por turno Emple. 1
WI_BETRG2 LIKE ZCATEGORIA-BETRG, "Cantidad por turno Emple. 2
WT_TIEMPO LIKE P2011-LTIME, "Hora de chacada
WT_INICIO(4) TYPE N, "Hora de chacada I2002
WT_FINAL(4) TYPE N, "Hora de chacada I2002
WT_HORA LIKE P2011-LTIME VALUE '120000', "Sumar Doce horas
ARCH1(40) TYPE C VALUE '/users/interf/datos/hr/errores.txt',
WC_ARCHIVO(40) TYPE C, "Nombre del archivo
WI_LC TYPE I VALUE 0, "Contador lineas
WD_FECHA_DESC LIKE SY-DATUM, "Fecha de Descanso
WD_FECHA LIKE SY-DATUM,
WI_INDICE LIKE SY-TABIX, "Indice de la tabla interna
SW_DELETE(1) TYPE C VALUE 'F',
WC_REGISTRO1(35) TYPE C, "Registro de la tabla interna
WC_REGISTRO2(35) TYPE C. "Registro de la tabla interna
DATA: QID LIKE APQI-QID,
B-NAME LIKE RFPDO-ALLGBINA,
EXCEPT TYPE I.
DATA: ME TYPE REF TO CL_XML_DOCUMENT.
DATA: SUBRC LIKE SY-SUBRC.
DATA: GVK_MODE.
* Fin de variables *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Parámetros de Selección *
SELECTION-SCREEN BEGIN OF BLOCK BL_01 WITH FRAME TITLE TEXT-001.
PARAMETERS: ARCHIVO TYPE RLGRAP-FILENAME.
SELECTION-SCREEN END OF BLOCK BL_01.
* Fin de parametros de sleccion *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* AT SELECTION SCREEN *
AT SELECTION-SCREEN ON VALUE-REQUEST FOR ARCHIVO.
PERFORM ESPECIFICA_RUTA USING '0'.
* AT SELECTION SCREEN *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Start of selection *
START-OF-SELECTION.
CLEAR GVK_MODE.
GVK_MODE = 'N'.
IF SY-UNAME+0(6) NE 'GKRHUM' AND SY-UNAME+0(6) NE 'GK_961' AND
SY-UNAME+0(6) NE 'GKSIST' AND SY-UNAME NE 'EXUANL_MML'.
WRITE:/ 'Usuario no pertenece a GALVAK, S.A. de C.V.'.
LEAVE PROGRAM.
ENDIF.
PERFORM LEE_ARCHIVO_XML.
PERFORM LLENA_TH_ARCHIVO.
SORT TH_ARCHIVO BY NUMERO FECHA HORA.
PERFORM ELIMINA_DUPLICADOS.
LOOP AT TH_ARCHIVO.
PERFORM VALIDA_INFO.
MOVE ' ' TO : WC_DIA, WC_MES, WC_YEAR, WC_FECHA,
WC_TIPO, WC_TPR00, WC_TURNO, WC_CATEGORIA,
WT_TIEMPO, WN_PERNR, WN_IN_OUT, WT_INICIO,
WT_FINAL.
MOVE 0 TO: WI_LC.
IF SW_ERROR EQ '0'.
SELECT *
FROM PA0001
WHERE PERNR = TH_ARCHIVO-NUMERO.
ENDSELECT.
IF SY-SUBRC EQ 0.
IF TH_ARCHIVO-DEPARTAMENTO = PA0001-KOSTL+6(4).
TH_ARCHIVO-DEPARTAMENTO = ' '.
ENDIF.
ENDIF.
PERFORM FORMATO_FECHA.
MOVE TH_ARCHIVO-HORA TO WT_TIEMPO.
IF TH_ARCHIVO-EMPLEADO2 NE ' '.
WN_PERNR = TH_ARCHIVO-EMPLEADO2.
ELSE.
WN_PERNR = TH_ARCHIVO-NUMERO.
ENDIF.
IF TH_ARCHIVO-AUSENTISMO = 'DESC'.
CONCATENATE WD_FECHA+6(2) '.' WD_FECHA+4(2) '.' WD_FECHA(4)
INTO WC_FECHA.
PERFORM DATOS_DESC. "Actualiza 2003
ELSE.
PERFORM EVENTO_IN_OUT.
CONCATENATE WD_FECHA+6(2) '.' WD_FECHA+4(2) '.' WD_FECHA(4)
INTO WC_FECHA.
PERFORM TRANS_PA61.
CALL TRANSACTION 'PA61' USING BDC_TABLE MODE GVK_MODE
UPDATE 'S' MESSAGES INTO TH_MESSTAB.
IF SY-SUBRC EQ 0.
IF WC_TURNO <> WC_TPR00 OR
WC_TURNO <> WC_TURNO_SUST OR
WC_TURNO = 'DESC' OR
WC_TURNO = 'FREE'.
IF TH_ARCHIVO-IN_OUT = '01'.
PERFORM OTROS_DATOS. "Actualiza 2003
ENDIF.
ELSE.
ENDIF.
ELSE.
MOVE-CORRESPONDING TH_ARCHIVO TO TH_ERROR.
APPEND TH_ERROR.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
DESCRIBE TABLE TH_ERROR LINES WI_LC.
* Fin de start of selection *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* End of selection *
END-OF-SELECTION.
IF WI_LC NE 0.
PERFORM ARCHIVO_ERROR.
ENDIF.
PERFORM BDC_CLOSE USING EXCEPT.
MESSAGE I100.
* DELETE DATASET ARCHIVO. "moises 02.06.1999
* Fin de end of slection *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Funcion valida_info *
FORM VALIDA_INFO.
MOVE '0' TO SW_ERROR.
SELECT DISTINCT *
FROM PA0000
WHERE PERNR EQ TH_ARCHIVO-NUMERO.
EXIT.
ENDSELECT.
IF SY-SUBRC NE 0.
FORMAT INTENSIFIED OFF.
WRITE:/ 'El empleado ', TH_ARCHIVO-NUMERO,
' no esta dado de alta'.
FORMAT INTENSIFIED ON.
MOVE '1' TO SW_ERROR.
ENDIF.
ENDFORM.
* Fin de funcion valida_info *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Funcion formato_fecha *
FORM FORMATO_FECHA.
WC_DIA = TH_ARCHIVO-FECHA(2).
WC_MES = TH_ARCHIVO-FECHA+2(2).
WC_YEAR = TH_ARCHIVO-FECHA+4(4).
CONCATENATE WC_YEAR WC_MES WC_DIA INTO WD_FECHA.
ENDFORM.
* Fin de funicon formato_fecha *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Funcion evento_in_out *
FORM EVENTO_IN_OUT.
SELECT *
FROM PA0007
WHERE PERNR EQ WN_PERNR
AND BEGDA <= WD_FECHA
AND ENDDA >= WD_FECHA.
ENDSELECT.
IF SY-SUBRC EQ 0 AND PA0007-SCHKZ NE ' '.
SELECT *
FROM T508A
WHERE MOFID EQ 'GK'
AND SCHKZ = PA0007-SCHKZ.
ENDSELECT.
SELECT *
FROM T552A
WHERE SCHKZ EQ PA0007-SCHKZ
AND KJAHR EQ WC_YEAR
AND MONAT EQ WC_MES.
ENDSELECT.
IF SY-SUBRC EQ 0.
PERFORM BUSCA_DIA.
WC_TURNO = WC_TPR00.
PERFORM VERIFICA_P2003.
IF WC_TURNO_SUST IS INITIAL.
WC_TURNO_SUST = WC_TURNO.
ENDIF.
IF WC_TURNO EQ 'FREE' OR WC_TURNO EQ 'DESC'.
WC_TIPO = '02'.
IF TH_ARCHIVO-RAZON NE 'ETI ' AND
TH_ARCHIVO-RAZON NE 'EPM ' AND
TH_ARCHIVO-RAZON NE 'ERP ' AND
TH_ARCHIVO-RAZON NE 'STI ' AND
TH_ARCHIVO-RAZON NE 'SPM ' AND
TH_ARCHIVO-RAZON NE 'SRP '.
PERFORM VALIDA_SIGUIENTE_DIA.
IF WC_TPR00 = 'GM11' OR WC_TPR00 = 'GK01'.
WC_TURNO = WC_TPR00.
ENDIF.
ENDIF.
ELSEIF WC_TPR00 = 'DESC' OR WC_TPR00 = 'FREE'.
WC_TIPO = '02'.
ELSE.
WC_TIPO = '01'.
ENDIF.
ENDIF.
PERFORM TIEMPOS_EXTRA.
WC_TURNO_S = WC_TURNO.
IF TH_ARCHIVO-TURNO NE ' '.
IF TH_ARCHIVO-TURNO = 'S1' OR TH_ARCHIVO-TURNO = 'S2' OR
TH_ARCHIVO-TURNO = 'S3'.
CONCATENATE 'DE' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
WC_TURNO = WC_TURNO_R.
ELSEIF TH_ARCHIVO-TURNO = 'T1' OR TH_ARCHIVO-TURNO = 'T2'.
CONCATENATE 'GK' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
WC_TURNO = WC_TURNO_R.
ELSE.
IF TH_ARCHIVO-TURNO < 10.
CONCATENATE 'GK' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
ELSEIF TH_ARCHIVO-TURNO > 10.
CONCATENATE 'GM' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
ENDIF.
IF WC_TURNO NE WC_TURNO_R. " and th_archivo-razon = ' '. moises
WC_TURNO = WC_TURNO_R.
ENDIF.
ENDIF.
ENDIF.
* IF WC_TURNO EQ 'GM11' OR WC_TURNO = 'GK01'.
* WT_TIEMPO = WT_TIEMPO + WT_HORA.
* ENDIF.
SELECT *
FROM T550A
WHERE MOTPR EQ T508A-MOTPR
AND TPROG EQ WC_TURNO.
IF ( T550A-BTBEG <= WT_TIEMPO AND T550A-BTEND >= WT_TIEMPO ) OR
( TH_ARCHIVO-RAZON = 'IJ ' OR TH_ARCHIVO-RAZON = 'II ' OR
TH_ARCHIVO-RAZON = 'ESU ' OR TH_ARCHIVO-RAZON = 'EPM ' OR
TH_ARCHIVO-RAZON = 'ERP ' OR TH_ARCHIVO-RAZON = 'ETI ' ).
WN_IN_OUT = '01'.
IF WC_TURNO EQ 'GM11' OR WC_TURNO = 'GK01'.
* WD_FECHA = WD_FECHA + 1.
ENDIF.
ELSEIF ( T550A-ETBEG <= WT_TIEMPO AND
T550A-ETEND >= WT_TIEMPO ) OR
( TH_ARCHIVO-RAZON = 'FJ ' OR
TH_ARCHIVO-RAZON = 'FI ' OR
TH_ARCHIVO-RAZON = 'SSU ' OR
TH_ARCHIVO-RAZON = 'SPM ' OR
TH_ARCHIVO-RAZON = 'SRP ' OR
TH_ARCHIVO-RAZON = 'STI ' ).
WN_IN_OUT = '02'.
ELSE.
WN_IN_OUT = '02'.
ENDIF.
IF TH_ARCHIVO-RAZON = 'ETI ' AND
( T550A-BTBEG <= WT_TIEMPO AND T550A-BTEND >= WT_TIEMPO ).
WT_INICIO = WT_TIEMPO(4).
WT_FINAL = T550A-SOBEG(4).
SW_I2002 = 'T'.
ELSEIF TH_ARCHIVO-RAZON = 'STI ' AND
( T550A-ETBEG <= WT_TIEMPO AND T550A-ETEND >= WT_TIEMPO ).
WT_INICIO = T550A-SOEND(4).
WT_FINAL = WT_TIEMPO(4).
SW_I2002 = 'T'.
ENDIF.
ENDSELECT.
IF SW_I2002 = 'T'.
SW_I2002 = 'F'.
CONCATENATE WD_FECHA+6(2) '.' WD_FECHA+4(2) '.' WD_FECHA(4)
INTO WC_FECHA.
PERFORM ALTA_I2002.
ENDIF.
ENDIF.
ENDFORM.
* Fin de funcion evento_in_out *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Funcion busca_dia *
FORM BUSCA_DIA.
CASE WC_DIA.
WHEN 01.
MOVE T552A-TPR01 TO WC_TPR00.
WHEN 02.
MOVE T552A-TPR02 TO WC_TPR00.
WHEN 03.
MOVE T552A-TPR03 TO WC_TPR00.
WHEN 04.
MOVE T552A-TPR04 TO WC_TPR00.
WHEN 05.
MOVE T552A-TPR05 TO WC_TPR00.
WHEN 06.
MOVE T552A-TPR06 TO WC_TPR00.
WHEN 07.
MOVE T552A-TPR07 TO WC_TPR00.
WHEN 08.
MOVE T552A-TPR08 TO WC_TPR00.
WHEN 09.
MOVE T552A-TPR09 TO WC_TPR00.
WHEN 10.
MOVE T552A-TPR10 TO WC_TPR00.
WHEN 11.
MOVE T552A-TPR11 TO WC_TPR00.
WHEN 12.
MOVE T552A-TPR12 TO WC_TPR00.
WHEN 13.
MOVE T552A-TPR13 TO WC_TPR00.
WHEN 14.
MOVE T552A-TPR14 TO WC_TPR00.
WHEN 15.
MOVE T552A-TPR15 TO WC_TPR00.
WHEN 16.
MOVE T552A-TPR16 TO WC_TPR00.
WHEN 17.
MOVE T552A-TPR17 TO WC_TPR00.
WHEN 18.
MOVE T552A-TPR18 TO WC_TPR00.
WHEN 19.
MOVE T552A-TPR19 TO WC_TPR00.
WHEN 20.
MOVE T552A-TPR20 TO WC_TPR00.
WHEN 21.
MOVE T552A-TPR21 TO WC_TPR00.
WHEN 22.
MOVE T552A-TPR22 TO WC_TPR00.
WHEN 23.
MOVE T552A-TPR23 TO WC_TPR00.
WHEN 24.
MOVE T552A-TPR24 TO WC_TPR00.
WHEN 25.
MOVE T552A-TPR25 TO WC_TPR00.
WHEN 26.
MOVE T552A-TPR26 TO WC_TPR00.
WHEN 27.
MOVE T552A-TPR27 TO WC_TPR00.
WHEN 28.
MOVE T552A-TPR28 TO WC_TPR00.
WHEN 29.
MOVE T552A-TPR29 TO WC_TPR00.
WHEN 30.
MOVE T552A-TPR30 TO WC_TPR00.
WHEN 31.
MOVE T552A-TPR31 TO WC_TPR00.
ENDCASE.
ENDFORM.
* Fin de funcion busca_dia *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Funcion verifica_p2003 *
FORM VERIFICA_P2003.
DATA: WFECHA LIKE SY-DATUM.
CONCATENATE TH_ARCHIVO-FECHA+4(4) TH_ARCHIVO-FECHA+2(2)
TH_ARCHIVO-FECHA(2) INTO WFECHA.

CLEAR WC_TURNO_SUST.

SELECT SINGLE *
FROM PA2003
WHERE PERNR = WN_PERNR
AND BEGDA <= WFECHA
AND ENDDA >= WFECHA.
CHECK SY-SUBRC EQ 0.
IF PA2003-TPROG NE ' ' AND PA2003-TPROG NE WC_TURNO.
MOVE PA2003-TPROG TO: WC_TURNO, WC_TURNO_SUST.
ELSEIF PA2003-SCHKZ NE ' '.
SELECT *
FROM T552A
WHERE SCHKZ EQ PA2003-SCHKZ
AND KJAHR EQ WC_YEAR
AND MONAT EQ WC_MES.
ENDSELECT.
IF SY-SUBRC EQ 0.
PERFORM BUSCA_DIA.
IF WC_TPR00 NE WC_TURNO.
WC_TURNO = WC_TPR00.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " VERIFICA_P2003
* Fin de funcion verifica_p2003 *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Funion valida_siguiente_dia *
FORM VALIDA_SIGUIENTE_DIA.
WD_FECHA_DESC = WD_FECHA + 1.
WC_DIA = WD_FECHA_DESC+6(2).
SELECT *
FROM T552A
WHERE SCHKZ EQ PA0007-SCHKZ
AND KJAHR EQ WC_YEAR
AND MONAT EQ WC_MES.
ENDSELECT.
IF SY-SUBRC EQ 0.
PERFORM BUSCA_DIA.
ENDIF.
ENDFORM. " VALIDA_SIGUIENTE_DIA
* Fin de funcion valida_siguiente_dia *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Funcion alta_i2002 *
FORM ALTA_I2002.
IF TH_ARCHIVO-TURNO = 'S1' OR TH_ARCHIVO-TURNO = 'S2' OR
TH_ARCHIVO-TURNO = 'S3'.
ELSE.
REFRESH BDC_TABLE.
PERFORM DYNPRO_START USING 'SAPMP50A' '1000'.
PERFORM DYNPRO_FIELD USING 'RP50G-PERNR' TH_ARCHIVO-NUMERO.
PERFORM DYNPRO_FIELD USING 'RP50G-CHOIC' '2002'.
PERFORM DYNPRO_FIELD USING 'RP50G-SUBTY' '0020'.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=INS'. "MML QA&C 08.02.00
PERFORM DYNPRO_START USING 'MP200000' '2050'.
PERFORM DYNPRO_FIELD USING 'P2002-BEGDA' WC_FECHA.
PERFORM DYNPRO_FIELD USING 'P2002-ENDDA' WC_FECHA.
PERFORM DYNPRO_FIELD USING 'P2002-BEGUZ' WT_INICIO.
PERFORM DYNPRO_FIELD USING 'P2002-ENDUZ' WT_FINAL.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=UPD'. "MML QA&C 08.02.00
CALL TRANSACTION 'PA61' USING BDC_TABLE MODE GVK_MODE UPDATE 'S'
MESSAGES INTO TH_MESSTAB.
IF SY-SUBRC NE 0.
MOVE-CORRESPONDING TH_ARCHIVO TO TH_ERROR.
APPEND TH_ERROR.
ENDIF.
ENDIF.
ENDFORM. " ALTA_I2002
* Fin de funcion alta_i2002 *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Funcion trnas_pa61 *
FORM TRANS_PA61.
REFRESH BDC_TABLE.
IF TH_ARCHIVO-AUSENTISMO IS INITIAL.
PERFORM DYNPRO_START USING 'SAPMP50A' '1000'.
PERFORM DYNPRO_FIELD USING 'RP50G-PERNR' TH_ARCHIVO-NUMERO.
PERFORM DYNPRO_FIELD USING 'RP50G-CHOIC' '2011'.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=INS'. "MML QA&C 20.08.00
PERFORM DYNPRO_START USING 'MP200000' '2500'.
PERFORM DYNPRO_FIELD USING 'P2011-LDATE' WC_FECHA.
PERFORM DYNPRO_FIELD USING 'P2011-LTIME' WT_TIEMPO.
* PERFORM DYNPRO_FIELD USING 'P2011-SATZA' WN_IN_OUT.
PERFORM DYNPRO_FIELD USING 'P2011-SATZA' TH_ARCHIVO-IN_OUT.
IF TH_ARCHIVO-RAZON <> 'ARR'.
PERFORM DYNPRO_FIELD USING 'P2011-ABWGR' TH_ARCHIVO-RAZON.
ENDIF.
PERFORM DYNPRO_FIELD USING 'P2011-TERID' TH_ARCHIVO-TERMINAL.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=UPD'. "MML QA&C 08.02.00
ELSE.
PERFORM DYNPRO_START USING 'SAPMP50A' '1000'.
PERFORM DYNPRO_FIELD USING 'RP50G-PERNR' TH_ARCHIVO-NUMERO.
PERFORM DYNPRO_FIELD USING 'RP50G-ENDDA' WC_FECHA.
PERFORM DYNPRO_FIELD USING 'RP50G-CHOIC' '2001'.
PERFORM DYNPRO_FIELD USING 'RP50G-SUBTY' TH_ARCHIVO-AUSENTISMO..
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=INS'. "MML QA&C 20.08.00
PERFORM DYNPRO_START USING 'MP200000' '2001'.
PERFORM DYNPRO_FIELD USING 'P2001-BEGDA' WC_FECHA.
PERFORM DYNPRO_FIELD USING 'P2001-ENDDA' WC_FECHA.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=UPD'. "MML QA&C 08.02.00
ENDIF.
ENDFORM. " TRANS_PA61
* Fin de funcion trans_pa61 *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Funcion otros_datos *
FORM OTROS_DATOS.
IF WC_TURNO_SUST = 'DESC' OR WC_TURNO_SUST = 'FREE'.
PERFORM ELIMINA_SUSTITUCION.
ENDIF.

IF TH_ARCHIVO-TURNO = 'S1' OR TH_ARCHIVO-TURNO = 'S2' OR
TH_ARCHIVO-TURNO = 'S3'.
PERFORM GENERA_SUSTITUCION_S.
CALL TRANSACTION 'PA61' USING BDC_TABLE MODE GVK_MODE
UPDATE 'S' MESSAGES INTO TH_MESSTAB.
IF SY-SUBRC NE 0.
MOVE-CORRESPONDING TH_ARCHIVO TO TH_ERROR.
APPEND TH_ERROR.
ENDIF.
ELSE.
IF WN_IN_OUT = '01'. "or wn_in_out = '02'.
PERFORM GENERATE_BDC_DATA_1. "Actualiza 2003
CALL TRANSACTION 'PA61' USING BDC_TABLE MODE GVK_MODE
UPDATE 'S' MESSAGES INTO TH_MESSTAB.
IF SY-SUBRC NE 0.
MOVE-CORRESPONDING TH_ARCHIVO TO TH_ERROR.
APPEND TH_ERROR.
ENDIF.
ENDIF.
IF WN_IN_OUT = '02'.
IF TH_ARCHIVO-RAZON = 'SSU'.
PERFORM GENERATE_BDC_DATA_1.
CALL TRANSACTION 'PA61' USING BDC_TABLE MODE GVK_MODE
UPDATE 'S' MESSAGES INTO TH_MESSTAB.
IF SY-SUBRC NE 0.
MOVE-CORRESPONDING TH_ARCHIVO TO TH_ERROR.
APPEND TH_ERROR.
ENDIF.
ELSE.
PERFORM GENERATE_BDC_DATA_1.
CALL TRANSACTION 'PA61' USING BDC_TABLE MODE GVK_MODE
UPDATE 'S' MESSAGES INTO TH_MESSTAB.
IF SY-SUBRC NE 0.
MOVE-CORRESPONDING TH_ARCHIVO TO TH_ERROR.
APPEND TH_ERROR.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " OTROS_DATOS
* Fin de funicion ortors_datos *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Funcion generate_bdc_data_1 *
FORM GENERATE_BDC_DATA_1.
REFRESH BDC_TABLE.
PERFORM DYNPRO_START USING 'SAPMP50A' '1000'.
PERFORM DYNPRO_FIELD USING 'RP50G-PERNR' TH_ARCHIVO-NUMERO.
PERFORM DYNPRO_FIELD USING 'RP50G-CHOIC' '2003'.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=INS'. "MML QA&C 08.02.00
PERFORM DYNPRO_START USING 'MP200000' '2100'.
PERFORM DYNPRO_FIELD USING 'P2003-BEGDA' WC_FECHA.
PERFORM DYNPRO_FIELD USING 'P2003-ENDDA' WC_FECHA.
PERFORM DYNPRO_FIELD USING 'P2003-VTART' WC_TIPO.
IF TH_ARCHIVO-EMPLEADO2 NE ' ' AND
TH_ARCHIVO-EMPLEADO2 NE TH_ARCHIVO-NUMERO.
PERFORM BUSCA_CATEGORIA.
ENDIF.
IF WC_TURNO <> WC_TURNO_SUST.
PERFORM DYNPRO_FIELD USING 'P2003-TPROG' WC_TURNO.
ELSE.
IF TH_ARCHIVO-TURNO NE ' ' AND TH_ARCHIVO-TURNO NE WC_TURNO_S.
PERFORM DYNPRO_FIELD USING 'P2003-TPROG' WC_TURNO.
ENDIF.
IF WC_TURNO <> WC_TPR00.
PERFORM DYNPRO_FIELD USING 'P2003-TPROG' WC_TURNO.
ENDIF.
ENDIF.
IF WI_BETRG1 < WI_BETRG2. "Cambia categoria del Empleado 1
PERFORM BUSCA_CATEGORIA.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' 'DIFP'.
PERFORM DYNPRO_START USING 'MP200000' '2221'.
PERFORM DYNPRO_FIELD USING 'P2APL-TRFGR' WC_CATEGORIA.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '/8'.
PERFORM DYNPRO_START USING 'MP200000' '2100'.
ENDIF.
IF TH_ARCHIVO-DEPARTAMENTO NE ' '.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' 'PRIM'.
PERFORM DYNPRO_START USING 'SAPLHRTV' '0300'.
PERFORM DYNPRO_FIELD USING 'COBL-KOSTL' TH_ARCHIVO-DEPARTAMENTO.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '/8'.
PERFORM DYNPRO_START USING 'MP200000' '2100'.
ENDIF.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=UPD'. "MML QA&C 08.02.00
ENDFORM. " GENERATE_BDC_DATA_1
* Fin de funcion generate_bdc_data_1 *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Funcion busca_categoria *
FORM BUSCA_CATEGORIA.
SELECT *
FROM PA0008
WHERE PERNR EQ TH_ARCHIVO-NUMERO. "Empleado 1
IF SY-SUBRC EQ 0.
SELECT *
FROM ZCATEGORIA
WHERE TRFGR EQ PA0008-TRFGR.
WI_BETRG1 = ZCATEGORIA-BETRG.
ENDSELECT.
ENDIF.
ENDSELECT.
SELECT *
FROM PA0008
WHERE PERNR EQ TH_ARCHIVO-EMPLEADO2. "Empleado 2
IF SY-SUBRC EQ 0.
SELECT *
FROM ZCATEGORIA
WHERE TRFGR EQ PA0008-TRFGR.
WI_BETRG2 = ZCATEGORIA-BETRG.
WC_CATEGORIA = ZCATEGORIA-TRFGR.
ENDSELECT.
ENDIF.
ENDSELECT.
ENDFORM.
* Fin de funcin busca_categoria *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Fucion archivo_error *
FORM ARCHIVO_ERROR.
OPEN DATASET ARCH1 FOR OUTPUT IN TEXT MODE.
IF SY-SUBRC NE 0.
STOP. EXIT.
ENDIF.
LOOP AT TH_ERROR.
TRANSFER TH_ERROR TO ARCH1.
ENDLOOP.
CLOSE DATASET ARCH1.
ENDFORM.
* Fin de archivo_error *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Funcion bdc_close *
FORM BDC_CLOSE USING EXCEPT.
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.
EXCEPT = SY-SUBRC.
ENDFORM.
* Fin de funicon bdc_close *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Funcion dynpro_start *
FORM DYNPRO_START USING PROGRAM DYNPRO.
CLEAR BDC_TABLE.
BDC_TABLE-PROGRAM = PROGRAM.
BDC_TABLE-DYNPRO = DYNPRO.
BDC_TABLE-DYNBEGIN = 'X'.
APPEND BDC_TABLE.
ENDFORM. " DYNPRO_START
* Fin de funcion dynpro_start *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Funion dynpro_field *
FORM DYNPRO_FIELD USING FIELD VALUE.
CLEAR BDC_TABLE.
BDC_TABLE-FNAM = FIELD.
BDC_TABLE-FVAL = VALUE.
APPEND BDC_TABLE.
ENDFORM. " DYNPRO_FIELD
* Fin de funcion dypro_field *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Fucnion tiempos_extra *
FORM TIEMPOS_EXTRA.
IF TH_ARCHIVO-TURNO = 'S1' OR TH_ARCHIVO-TURNO = 'S2' OR
TH_ARCHIVO-TURNO = 'S3'.
CONCATENATE 'DE' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
WC_TURNO = WC_TURNO_R.
ELSEIF TH_ARCHIVO-TURNO = 'T1' OR TH_ARCHIVO-TURNO = 'T2'.
CONCATENATE 'GK' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
WC_TURNO = WC_TURNO_R.
ELSE.
IF ( TH_ARCHIVO-RAZON = 'ETI ' OR TH_ARCHIVO-RAZON = 'EPM ' OR
TH_ARCHIVO-RAZON = 'ERP ' ) AND TH_ARCHIVO-TURNO NE ' '.
IF TH_ARCHIVO-TURNO < 10.
CONCATENATE 'GK' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
ELSEIF TH_ARCHIVO-TURNO > 10.
CONCATENATE 'GM' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
ENDIF.
IF ( WC_TURNO = 'FREE' OR WC_TURNO = 'DESC' ).
IF WC_TURNO_R = 'GM13' OR WC_TURNO_R = 'GK03'.
PERFORM VALIDA_SIGUIENTE_DIA.
IF WC_TPR00 = 'GM11' OR WC_TPR00 = 'GK01'.
IF WC_TPR00 = 'GK01'.
WC_TURNO = 'GK01'.
ELSEIF WC_TPR00 = 'GM11'.
WC_TURNO = 'GM11'.
ENDIF.
ELSE.
WC_TURNO = WC_TURNO_R.
ENDIF.
ELSE.
WC_TURNO = WC_TURNO_R.
ENDIF.
ENDIF.
IF ( WC_TURNO NE 'FREE' OR WC_TURNO NE 'DESC' ).
IF WC_TURNO_R = 'GK02' AND WC_TURNO = 'GK03'.
WC_TURNO = 'GK03'.
ENDIF.
IF WC_TURNO_R = 'GK03' AND WC_TURNO = 'GK01'.
WC_TURNO = 'GK01'.
ENDIF.
IF WC_TURNO_R = 'GK01' AND WC_TURNO = 'GK02'.
WC_TURNO = 'GK02'.
ENDIF.
ENDIF.
ENDIF.
IF ( TH_ARCHIVO-RAZON = 'STI ' OR TH_ARCHIVO-RAZON = 'SPM ' OR
TH_ARCHIVO-RAZON = 'SRP ' ) AND TH_ARCHIVO-TURNO NE ' '.
IF TH_ARCHIVO-TURNO < 10.
CONCATENATE 'GK' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
ELSEIF TH_ARCHIVO-TURNO > 10.
CONCATENATE 'GM' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
ENDIF.
IF ( WC_TURNO = 'FREE' OR WC_TURNO = 'DESC' ).
IF WC_TURNO_R = 'GM11' OR WC_TURNO_R = 'GK01'.
WD_FECHA_DESC = WD_FECHA - 2.
PERFORM VALIDA_SIGUIENTE_DIA. "En realidad DIA ANTERIOR
IF WC_TPR00 = 'GM13' OR WC_TPR00 = 'GK03'.
IF WC_TPR00 = 'GK03'.
WC_TURNO = 'GK03'.
ELSEIF WC_TPR00 = 'GM13'.
WC_TURNO = 'GM13'.
ENDIF.
ELSE.
WC_TURNO = WC_TURNO_R.
ENDIF.
ELSE.
WC_TURNO = WC_TURNO_R.
ENDIF.
ENDIF.
IF ( WC_TURNO NE 'FREE' OR WC_TURNO NE 'DESC' ).
IF WC_TURNO_R = 'GK03' AND WC_TURNO = 'GK02'.
WC_TURNO = 'GK02'.
ENDIF.
IF WC_TURNO_R = 'GK01' AND WC_TURNO = 'GK03'.
WC_TURNO = 'GK03'.
ENDIF.
IF WC_TURNO_R = 'GK02' AND WC_TURNO = 'GK01'.
WC_TURNO = 'GK01'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
* Fin de funicon tiempos_extra *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* Funcion elimina_duplicados *
FORM ELIMINA_DUPLICADOS.
DELETE ADJACENT DUPLICATES FROM TH_ARCHIVO.
ENDFORM.
* Fin de funcion elimina_duplicados *
*----------------------------------------------------------------------

*----------------------------------------------------------------------*
* Form LEE_ARCHIVO_XML *
FORM LEE_ARCHIVO_XML.
CREATE OBJECT ME.
REFRESH CIERRE.
CALL METHOD ME->CREATE_WITH_FILE
EXPORTING
FILENAME = ARCHIVO
RECEIVING
RETCODE = SUBRC.
CALL METHOD ME->GET_DATA
IMPORTING
RETCODE = SUBRC
CHANGING
DATAOBJECT = CIERRE[].
ENDFORM.
* Form LEE_ARCHIVO_XML *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* FORM ESPECIFICA_RUTA *
FORM ESPECIFICA_RUTA USING PAR_VALOR.
CASE PAR_VALOR.
WHEN '0'.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
MASK = 'C:\*.xml'
STATIC = 'X'
CHANGING
FILE_NAME = ARCHIVO.
WHEN '1'.
* CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
* EXPORTING
* MASK = 'C:\*.txt'
* STATIC = 'x'
* CHANGING
* FILE_NAME = DESCARGA.
ENDCASE.
ENDFORM.
* FORM ESPECIFICA_RUTA *
*----------------------------------------------------------------------

*----------------------------------------------------------------------*
* Form LLENA_TH_ARCHIVO *
FORM LLENA_TH_ARCHIVO.
CONSTANTS GVK_12HRS LIKE P2011-LTIME VALUE '120000'.
CONSTANTS GVK_1159 LIKE P2011-LTIME VALUE '115900'.
CONSTANTS GVK_0630 LIKE P2011-LTIME VALUE '063000'.
CONSTANTS GVK_0715 LIKE P2011-LTIME VALUE '071500'.
CONSTANTS GVK_1830 LIKE P2011-LTIME VALUE '183000'.
CONSTANTS GVK_1915 LIKE P2011-LTIME VALUE '191500'.
DATA: GVK_HORA LIKE P2011-LTIME.
DATA: GVK_FECHA LIKE SY-DATUM.
CLEAR CIERRE.
REFRESH TH_ARCHIVO.
LOOP AT CIERRE.
CLEAR TH_ARCHIVO.
CHECADAS[] = CIERRE-EMPLEADO-REGISTRO[].
LOOP AT CHECADAS.
CLEAR TH_ARCHIVO.
MOVE: CIERRE-EMPLEADO-NUMERO TO TH_ARCHIVO-NUMERO,
CHECADAS-INCIDENCIA TO TH_ARCHIVO-RAZON,
CHECADAS-CCOSTOS TO TH_ARCHIVO-DEPARTAMENTO,
CHECADAS-SOCIO_REEMPLAZA TO TH_ARCHIVO-EMPLEADO2.
CONCATENATE CHECADAS-DIA(2) CHECADAS-DIA+3(2)
CHECADAS-DIA+6(4) INTO TH_ARCHIVO-FECHA.
CONCATENATE CHECADAS-HORA(2) CHECADAS-HORA+3(2)
INTO TH_ARCHIVO-HORA.
IF CHECADAS-TURNO = 'S1' OR CHECADAS-TURNO = 'S2' OR
CHECADAS-TURNO = 'S3'.
MOVE CHECADAS-TURNO TO TH_ARCHIVO-TURNO.
IF CHECADAS-TIPO = 'E'.
MOVE 'ETI' TO TH_ARCHIVO-RAZON.
ELSEIF CHECADAS-TIPO = 'S'.
MOVE 'STI' TO TH_ARCHIVO-RAZON.
ENDIF.
ELSE.
MOVE CHECADAS-TURNO TO TH_ARCHIVO-TURNO.
ENDIF.

IF CHECADAS-CAMBIO_TURNO = 1.
MOVE CHECADAS-TURNO TO TH_ARCHIVO-TURNO.
ENDIF.
MOVE CHECADAS-AUSENTISMO TO TH_ARCHIVO-AUSENTISMO.
CASE CHECADAS-TURNO.
WHEN '01' OR 'S1'.
IF CHECADAS-TIPO = 'E'.
CLEAR GVK_FECHA.
CONCATENATE CHECADAS-DIA+6(4) CHECADAS-DIA+3(2)
CHECADAS-DIA(2)
INTO GVK_FECHA.
GVK_FECHA = GVK_FECHA + 1.
CONCATENATE GVK_FECHA+6(2) GVK_FECHA+4(2) GVK_FECHA(4)
INTO TH_ARCHIVO-FECHA.
ELSEIF CHECADAS-TIPO = 'S'.
GVK_HORA = TH_ARCHIVO-HORA.
IF GVK_HORA > GVK_1159.
CLEAR GVK_FECHA.
CONCATENATE CHECADAS-DIA+6(4) CHECADAS-DIA+3(2)
CHECADAS-DIA(2)
INTO GVK_FECHA.
GVK_FECHA = GVK_FECHA + 1.
CONCATENATE GVK_FECHA+6(2) GVK_FECHA+4(2)
GVK_FECHA(4)
INTO TH_ARCHIVO-FECHA.
ENDIF.
ENDIF.
CLEAR GVK_HORA.
GVK_HORA = TH_ARCHIVO-HORA.
GVK_HORA = GVK_HORA + GVK_12HRS.
CLEAR TH_ARCHIVO-HORA.
CONCATENATE GVK_HORA(2) GVK_HORA+2(2)
INTO TH_ARCHIVO-HORA.
WHEN 'T1'.
IF CHECADAS-TIPO = 'E'.
CLEAR GVK_FECHA.
CLEAR GVK_HORA.
CONCATENATE CHECADAS-DIA+6(4) CHECADAS-DIA+3(2)
CHECADAS-DIA(2)
INTO GVK_FECHA.
GVK_FECHA = GVK_FECHA + 1.
CONCATENATE GVK_FECHA+6(2) GVK_FECHA+4(2) GVK_FECHA(4)
INTO TH_ARCHIVO-FECHA.
GVK_HORA = TH_ARCHIVO-HORA.
GVK_HORA = GVK_HORA + GVK_12HRS.
CLEAR TH_ARCHIVO-HORA.
CONCATENATE GVK_HORA(2) GVK_HORA+2(2)
INTO TH_ARCHIVO-HORA.
ELSEIF CHECADAS-TIPO = 'S'.
MOVE 'STI' TO TH_ARCHIVO-RAZON.
GVK_HORA = TH_ARCHIVO-HORA.
IF GVK_HORA > GVK_1159.
CLEAR GVK_FECHA.
CONCATENATE CHECADAS-DIA+6(4) CHECADAS-DIA+3(2)
CHECADAS-DIA(2)
INTO GVK_FECHA.
GVK_FECHA = GVK_FECHA + 1.
CONCATENATE GVK_FECHA+6(2) GVK_FECHA+4(2)
GVK_FECHA(4)
INTO TH_ARCHIVO-FECHA.
ENDIF.
GVK_HORA = TH_ARCHIVO-HORA.
IF GVK_HORA BETWEEN GVK_0630 AND GVK_0715.
GVK_HORA = GVK_0630.
ENDIF.
GVK_HORA = GVK_HORA + GVK_12HRS.
CLEAR TH_ARCHIVO-HORA.
CONCATENATE GVK_HORA(2) GVK_HORA+2(2)
INTO TH_ARCHIVO-HORA.
ENDIF.
WHEN 'T2'.
IF CHECADAS-TIPO = 'S'.
MOVE 'STI' TO TH_ARCHIVO-RAZON.
CLEAR GVK_HORA.
GVK_HORA = TH_ARCHIVO-HORA.
IF GVK_HORA BETWEEN GVK_1830 AND GVK_1915.
GVK_HORA = GVK_1830.
CONCATENATE GVK_HORA(2) GVK_HORA+2(2)
INTO TH_ARCHIVO-HORA.
ENDIF.
ENDIF.
ENDCASE.
IF CHECADAS-TIPO = 'E'.
TH_ARCHIVO-IN_OUT = '01'.
ELSEIF CHECADAS-TIPO = 'S'.
TH_ARCHIVO-IN_OUT = '02'.
ENDIF.
APPEND TH_ARCHIVO.
ENDLOOP.
ENDLOOP.
ENDFORM.
* Form LLENA_TH_ARCHIVO *
*----------------------------------------------------------------------

*&---------------------------------------------------------------------*
*& Form DATOS_DESC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DATOS_DESC.
REFRESH BDC_TABLE.
PERFORM DYNPRO_START USING 'SAPMP50A' '1000'.
PERFORM DYNPRO_FIELD USING 'RP50G-PERNR' TH_ARCHIVO-NUMERO.
PERFORM DYNPRO_FIELD USING 'RP50G-CHOIC' '2003'.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=INS'. "MML QA&C 08.02.00
PERFORM DYNPRO_START USING 'MP200000' '2100'.
PERFORM DYNPRO_FIELD USING 'P2003-BEGDA' WC_FECHA.
PERFORM DYNPRO_FIELD USING 'P2003-ENDDA' WC_FECHA.
PERFORM DYNPRO_FIELD USING 'P2003-VTART' '01'.
PERFORM DYNPRO_FIELD USING 'P2003-TPROG' 'DESC'.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=UPD'. "MML QA&C 08.02.00

CALL TRANSACTION 'PA61' USING BDC_TABLE MODE GVK_MODE UPDATE 'S'
MESSAGES INTO TH_MESSTAB.
IF SY-SUBRC NE 0.
MOVE-CORRESPONDING TH_ARCHIVO TO TH_ERROR.
APPEND TH_ERROR.
ENDIF.
ENDFORM. " DATOS_DESC
*

*&---------------------------------------------------------------------*
*& Form GENERA_SUSTITUCION_S
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GENERA_SUSTITUCION_S.
REFRESH BDC_TABLE.
PERFORM DYNPRO_START USING 'SAPMP50A' '1000'.
PERFORM DYNPRO_FIELD USING 'RP50G-PERNR' TH_ARCHIVO-NUMERO.
PERFORM DYNPRO_FIELD USING 'RP50G-CHOIC' '2003'.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=INS'. "MML QA&C 08.02.00
PERFORM DYNPRO_START USING 'MP200000' '2100'.
PERFORM DYNPRO_FIELD USING 'P2003-BEGDA' WC_FECHA.
PERFORM DYNPRO_FIELD USING 'P2003-ENDDA' WC_FECHA.
PERFORM DYNPRO_FIELD USING 'P2003-VTART' '02'.
IF TH_ARCHIVO-EMPLEADO2 NE ' ' AND
TH_ARCHIVO-EMPLEADO2 NE TH_ARCHIVO-NUMERO.
PERFORM BUSCA_CATEGORIA.
ENDIF.
IF WC_TURNO <> WC_TURNO_SUST.
PERFORM DYNPRO_FIELD USING 'P2003-TPROG' WC_TURNO.
ELSE.
IF TH_ARCHIVO-TURNO NE ' ' AND TH_ARCHIVO-TURNO NE WC_TURNO_S.
PERFORM DYNPRO_FIELD USING 'P2003-TPROG' WC_TURNO.
ENDIF.
ENDIF.
IF WI_BETRG1 < WI_BETRG2. "Cambia categoria del Empleado 1
PERFORM BUSCA_CATEGORIA.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' 'DIFP'.
PERFORM DYNPRO_START USING 'MP200000' '2221'.
PERFORM DYNPRO_FIELD USING 'P2APL-TRFGR' WC_CATEGORIA.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '/8'.
PERFORM DYNPRO_START USING 'MP200000' '2100'.
ENDIF.
IF TH_ARCHIVO-DEPARTAMENTO NE ' '.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' 'PRIM'.
PERFORM DYNPRO_START USING 'SAPLHRTV' '0300'.
PERFORM DYNPRO_FIELD USING 'COBL-KOSTL' TH_ARCHIVO-DEPARTAMENTO.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '/8'.
PERFORM DYNPRO_START USING 'MP200000' '2100'.
ENDIF.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=UPD'. "MML QA&C 08.02.00
ENDFORM.

*----------------------------------------------------------------------*
* Form GENERATE_BDC_DATA_2 *
FORM GENERATE_BDC_DATA_2.
REFRESH BDC_TABLE.
PERFORM DYNPRO_START USING 'SAPMP50A' '1000'.
PERFORM DYNPRO_FIELD USING 'RP50G-PERNR' TH_ARCHIVO-NUMERO.
PERFORM DYNPRO_FIELD USING 'RP50G-CHOIC' '2003'.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=INS'. "MML QA&C 08.02.00
PERFORM DYNPRO_START USING 'MP200000' '2100'.
PERFORM DYNPRO_FIELD USING 'P2003-BEGDA' WC_FECHA.
PERFORM DYNPRO_FIELD USING 'P2003-ENDDA' WC_FECHA.
PERFORM DYNPRO_FIELD USING 'P2003-VTART' WC_TIPO.
IF TH_ARCHIVO-EMPLEADO2 NE ' ' AND
TH_ARCHIVO-EMPLEADO2 NE TH_ARCHIVO-NUMERO.
PERFORM BUSCA_CATEGORIA.
ENDIF.
PERFORM DYNPRO_FIELD USING 'P2003-TPROG' WC_TURNO.
IF WI_BETRG1 < WI_BETRG2. "Cambia categoria del Empleado 1
PERFORM BUSCA_CATEGORIA.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' 'DIFP'.
PERFORM DYNPRO_START USING 'MP200000' '2221'.
PERFORM DYNPRO_FIELD USING 'P2APL-TRFGR' WC_CATEGORIA.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '/8'.
PERFORM DYNPRO_START USING 'MP200000' '2100'.
ENDIF.
IF TH_ARCHIVO-DEPARTAMENTO NE ' '.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' 'PRIM'.
PERFORM DYNPRO_START USING 'SAPLHRTV' '0300'.
PERFORM DYNPRO_FIELD USING 'COBL-KOSTL' TH_ARCHIVO-DEPARTAMENTO.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '/8'.
PERFORM DYNPRO_START USING 'MP200000' '2100'.
ENDIF.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=UPD'. "MML QA&C 08.02.00
ENDFORM.
* Form GENERATE_BDC_DATA_2 *
*----------------------------------------------------------------------

*----------------------------------------------------------------------*
* Form ELIMINA_SUSTITUCION *
FORM ELIMINA_SUSTITUCION.
REFRESH BDC_TABLE.
PERFORM DYNPRO_START USING 'SAPMP50A' '1000'.
PERFORM DYNPRO_FIELD USING 'RP50G-PERNR' TH_ARCHIVO-NUMERO.
PERFORM DYNPRO_FIELD USING 'RP50G-BEGDA' WC_FECHA.
PERFORM DYNPRO_FIELD USING 'RP50G-ENDDA' WC_FECHA.
PERFORM DYNPRO_FIELD USING 'RP50G-CHOIC' '2003'.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=DEL'.
PERFORM DYNPRO_START USING 'MP200000' '2100'.
PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=UPDL'.
CALL TRANSACTION 'PA61' USING BDC_TABLE MODE GVK_MODE
UPDATE 'S' MESSAGES INTO TH_MESSTAB.
IF SY-SUBRC NE 0.
MOVE-CORRESPONDING TH_ARCHIVO TO TH_ERROR.
APPEND TH_ERROR.
ENDIF.
ENDFORM. " ELIMINA_SUSTITUCION
* Form ELIMINA_SUSTITUCION *
*----------------------------------------------------------------

No comments: