476 lines
15 KiB
Plaintext
476 lines
15 KiB
Plaintext
{
|
|
-------------------------------------------------------------------------------
|
|
PROGRAMA : NOPRRP035
|
|
OBJETIVO : PLANILLA VACACIONES DGT3 y DGT4
|
|
PROGRAMADOR : Ing. JUAN F. SOTO
|
|
FECHA REALIZACION : ENERO 18, 1999
|
|
MODIFICADO POR : Ing. Juan Soto
|
|
DETALLE MODIFICACION : Genera la planilla de la TSS DGT3 Y DGT4 a excel
|
|
FECHA MODIFIA
|
|
-------------------------------------------------------------------------------
|
|
}
|
|
|
|
|
|
GLOBALS "noprgb000.4gl"
|
|
CONSTANT FILE ='DGT3Y4.XLS'
|
|
CONSTANT prog = "EXCEL"
|
|
|
|
DEFINE rcol,arch_pc,fila_excel,col STRING,
|
|
p_res INT,cuenta,xi,progreso SMALLINT,
|
|
selec CHAR(1000),
|
|
ciarnc CHAR(11),
|
|
idioma_office VARCHAR,
|
|
tipo_Reporte VARCHAR(10)
|
|
|
|
DEFINE fecha_formulario DATE,
|
|
registro_no,formulario_no INTEGER,
|
|
tmpfecha CHAR(12),
|
|
cnt SMALLINT,
|
|
dir_file VARCHAR(60),
|
|
d_tipos,mensaje,f_tipos,filepath,res,fila,val STRING
|
|
|
|
|
|
|
|
DEFINE m_cedula CHAR(12),
|
|
fecha_c,fecha_entrada DATE
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
CALL ARG_VAL(3) RETURNING impresor
|
|
CALL startlog("NORP35,txt")
|
|
CONNECT to "smarmotech" USER usuarios USING clave
|
|
SELECT a.* INTO p_companias.* FROM companias a
|
|
CALL noprrp035()
|
|
END MAIN
|
|
|
|
FUNCTION noprrp035()
|
|
|
|
DEFINE registro RECORD
|
|
nomina LIKE adtb00003.nomina,
|
|
num_emp LIKE adtb00003.num_emp,
|
|
departamento LIKE adtb00003.departamento,
|
|
nivel_emp LIKE adtb00003.nivel_emp,
|
|
cod_puesto LIKE adtb00003.cod_puesto,
|
|
nom1_emp CHAR(20),
|
|
nom2_emp CHAR(20),
|
|
apell1_emp CHAR(20),
|
|
apell2_emp CHAR(20),
|
|
cedula LIKE adtb00003.cedula,
|
|
serie LIKE adtb00003.serie,
|
|
fech_nac LIKE adtb00003.fech_nac,
|
|
fech_efec LIKE adtb00003.fech_efec,
|
|
sexo LIKE adtb00021.sexo,
|
|
nacionalidad CHAR(10),
|
|
nom_puesto LIKE adtb00004.otra_descripcion,
|
|
sueldo_ac LIKE adtb00003.sueldo_ac,
|
|
numero_tss LIKE adtb00003.cod_seg1,
|
|
turno LIKE adtb00003.licencia,
|
|
sucid LIKE adtb00003.sucid,
|
|
puesto_real LIKE adtb00004.nom_puesto
|
|
END RECORD
|
|
DEFINE fecha1,fecha2 DATE
|
|
DEFINE l_fech_ini,l_fech_fin DATE,
|
|
l_f_ini,l_f_fin CHAR(10),
|
|
periodo CHAR(6)
|
|
|
|
## DEFINICION DEL REGISTRO DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA
|
|
## EL REPORTE
|
|
DEFINE extras RECORD
|
|
num_emp LIKE adtb00003.num_emp,
|
|
departamento LIKE adtb00003.departamento,
|
|
nivel LIKE adtb00003.nivel_emp,
|
|
cod_puesto LIKE adtb00003.cod_puesto,
|
|
nom1_emp CHAR(20),
|
|
nom2_emp CHAR(20),
|
|
apell1_emp CHAR(20),
|
|
apell2_emp CHAR(20),
|
|
cedula LIKE adtb00003.cedula,
|
|
serie LIKE adtb00003.serie,
|
|
cod_mov LIKE notb00008.cod_mov,
|
|
cantidad LIKE notb00008.cantidad,
|
|
valor LIKE notb00008.valor
|
|
END RECORD
|
|
|
|
# WHENEVER ERROR CONTINUE
|
|
|
|
OPTIONS
|
|
FORM LINE 8,
|
|
ERROR LINE 23,
|
|
COMMENT LINE 21
|
|
|
|
CLEAR SCREEN
|
|
|
|
#LET formulario = formulario CLIPPED,"nofmrp035"
|
|
OPEN FORM nofmrp035 FROM "nofmrp035"
|
|
DISPLAY FORM nofmrp035
|
|
#CALL pantalla()
|
|
DISPLAY "noprnorp035" AT 4,3 ATTRIBUTE(RED)
|
|
DISPLAY "Horas Extras Empleados" AT 6,32 ATTRIBUTE(BLACK)
|
|
|
|
|
|
CONSTRUCT BY NAME criterio ON b.num_emp,b.departamento
|
|
|
|
## AQUI SE INDICA EL CRITERIO DE BUSQUEDA DEL REPORTE
|
|
INPUT BY NAME registro_no,formulario_no,tipo_Reporte,fecha_formulario,fecha2,idioma_office
|
|
ON ACTION abrir
|
|
|
|
CALL ui.Interface.frontCall("standard","openfile", [dir_file,d_tipos,f_tipos,mensaje], [filepath] )
|
|
CALL ui.Interface.frontCall("standard","shellexec", [filepath], [p_res] )
|
|
# LET FILE = filepath
|
|
AFTER FIELD tipo_reporte
|
|
IF tipo_reporte = 'DGT3' THEN
|
|
NEXT FIELD idioma_office
|
|
ELSE
|
|
NEXT FIELD fecha_formulario
|
|
END IF
|
|
AFTER INPUT
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
RETURN
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
## SE SELECCIONAN LOS CAMPOS NECESARIOS PARA EL REPORTE
|
|
|
|
IF idioma_office = "E" THEN
|
|
LET fila_excel = "F"
|
|
ELSE
|
|
LET fila_excel = "R"
|
|
END IF
|
|
|
|
# CALL ui.Interface.frontCall("standard","getenv", ["USDGT3Y4"], [file] )
|
|
|
|
|
|
# LET file = FILEpath CLIPPED
|
|
CALL conectarDDE()
|
|
# START REPORT planilla TO "dummy"
|
|
|
|
IF tipo_reporte = 'DGT3' THEN
|
|
LET selec =
|
|
"SELECT b.nomina,b.num_emp,b.departamento,b.nivel_emp,b.cod_puesto, ",
|
|
"b.nom1_emp, b.nom2_emp,",
|
|
"b.apell1_emp,b.apell2_emp,b.cedula,b.serie,CONVERT (CHAR(10),b.fech_nac,103),CONVERT(CHAR(10),b.fech_efec,103), ",
|
|
"c.sexo,'DOMINICANA',d.otra_descripcion,b.sueldo_ac,b.cod_seg1,b.licencia,b.sucid, ",
|
|
" d.nom_puesto ",
|
|
"FROM adtb00003 b, adtb00021 c, adtb00004 d ",
|
|
"WHERE b.num_emp = c.num_emp ",
|
|
" AND b.cod_puesto = d.cod_puesto AND b.nomina = 'Q' AND ",
|
|
" b.status_t IS NULL and b.cod_Seg1 IS NOT NULL and ",criterio CLIPPED,
|
|
" and b.fech_efec < '",fecha_formulario USING "dd/mm/yyyy","'",
|
|
" ORDER BY b.departamento,b.cod_puesto "
|
|
ELSE
|
|
LET selec =
|
|
"SELECT b.nomina,b.num_emp,b.departamento,b.nivel_emp,b.cod_puesto, ",
|
|
"b.nom1_emp, b.nom2_emp,",
|
|
"b.apell1_emp,b.apell2_emp,b.cedula,b.serie,CONVERT (CHAR(10),b.fech_nac,103),CONVERT(CHAR(10),b.fech_efec,103), ",
|
|
"c.sexo,'DOMINICANA',d.otra_descripcion,b.sueldo_ac,b.cod_seg1,b.licencia,b.sucid, ",
|
|
" d.nom_puesto ",
|
|
"FROM adtb00003 b, adtb00021 c, adtb00004 d ",
|
|
"WHERE b.num_emp = c.num_emp ",
|
|
" AND b.cod_puesto = d.cod_puesto AND b.nomina = 'Q' AND ",
|
|
" b.status_t IS NULL and b.cod_Seg1 IS NOT NULL and ",criterio CLIPPED,
|
|
" and b.fech_efec between '",fecha_formulario USING "mm/dd/yyyy","' and '",fecha2 USING "mm/dd/yyyy" ,"' ",
|
|
" ORDER BY b.departamento,b.cod_puesto "
|
|
|
|
|
|
END IF
|
|
|
|
PREPARE comando FROM selec
|
|
DECLARE buscar CURSOR FOR comando
|
|
|
|
DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14
|
|
ATTRIBUTE (REVERSE,BOLD)
|
|
|
|
## SE PREPARA LA INFORMACION SELECCIONADA
|
|
DISPLAY " " AT 19,14
|
|
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
|
|
AT 19,14 ATTRIBUTE (REVERSE)
|
|
|
|
|
|
## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE
|
|
## SALIDA AL REPORTE
|
|
LET periodo = MONTH(fecha_formulario) USING "&&",YEAR(fecha_formulario)
|
|
|
|
# LET col = 3
|
|
# LET fila = 8
|
|
# LET val = periodo
|
|
# CALL enviaDDE(fila,col,val)
|
|
|
|
LET col = 4
|
|
LET fila = 9
|
|
LET val = tipo_reporte
|
|
CALL enviaDDE(fila,col,val)
|
|
{
|
|
LET cnt = 14
|
|
FOREACH buscar INTO registro.*
|
|
|
|
|
|
LET fecha_entrada = registro.fech_efec # ES PARA TENER LA FECHA EN UNA VRIABLE UNICA,
|
|
# ESTO VA A SERVIR PARA CALCULAR LOS ANOS DEL
|
|
# EMPLEADO.
|
|
|
|
LET tmpfecha = registro.fech_efec using "dd/mm/yyyy"
|
|
LET tmpfecha[7,10] = year (fecha_formulario) using "&&&&"
|
|
LET fecha_c = tmpfecha
|
|
|
|
|
|
|
|
|
|
# IF tipo_reporte = 'DGT3' THEN
|
|
|
|
CALL fechaV()
|
|
|
|
LET l_f_ini = tmpfecha
|
|
LET l_f_fin = fecha_c
|
|
IF year(l_f_ini) = year(fecha2) THEN
|
|
OUTPUT TO REPORT planilla(registro.*,l_f_ini,l_f_fin,m_cedula)
|
|
END IF
|
|
# END IF
|
|
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
RETURN
|
|
END IF
|
|
|
|
|
|
|
|
END FOREACH
|
|
FINISH REPORT planilla}
|
|
CALL terminaDDE()
|
|
END FUNCTION
|
|
|
|
## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA
|
|
## EL REPORTE
|
|
# REPORT planilla(x,p_fech_ini,p_fech_fin,p_cedula)
|
|
REPORT planilla(x,fecha_ini_v,fecha_fin_v,p_cedula)
|
|
|
|
DEFINE x RECORD
|
|
nomina LIKE adtb00003.nomina,
|
|
num_emp LIKE adtb00003.num_emp,
|
|
departamento LIKE adtb00003.departamento,
|
|
nivel_emp LIKE adtb00003.nivel_emp,
|
|
cod_puesto LIKE adtb00003.cod_puesto,
|
|
nom1_emp CHAR(20),
|
|
nom2_emp CHAR(20),
|
|
apell1_emp CHAR(20),
|
|
apell2_emp CHAR(20),
|
|
cedula LIKE adtb00003.cedula,
|
|
serie LIKE adtb00003.serie,
|
|
fech_nac LIKE adtb00003.fech_nac,
|
|
fech_efec LIKE adtb00003.fech_efec,
|
|
sexo LIKE adtb00021.sexo,
|
|
nacionalidad CHAR(10),
|
|
nom_puesto LIKE adtb00004.otra_descripcion,
|
|
sueldo_ac LIKE adtb00003.sueldo_ac,
|
|
numero_tss LIKE adtb00003.cod_seg1,
|
|
turno LIKE adtb00003.licencia,
|
|
sucid LIKE adtb00003.sucid,
|
|
puesto_real LIKE adtb00004.nom_puesto
|
|
END RECORD,
|
|
fecha_1 CHAR(8),
|
|
fecha_ini_vac,fecha_fin_vac CHAR(8)
|
|
DEFINE p_f_ini CHAR(8),
|
|
fecha_ini_v,fecha_fin_v DATE,
|
|
p_cedula VARCHAR(11)
|
|
|
|
## DEFINICION DE LAS VARIABLES DE IMPRESION
|
|
|
|
DEFINE nombres CHAR(60)
|
|
|
|
FORMAT
|
|
|
|
|
|
ON EVERY ROW
|
|
LET fecha_ini_vac = fecha_ini_v USING "DDMMYYYY"
|
|
LET fecha_fin_vac = fecha_fin_v USING "DDMMYYYY"
|
|
LET fecha_1 = x.fech_efec USING "ddmmyyyy"
|
|
LET p_f_ini = x.fech_nac USING "ddmmyyyy"
|
|
|
|
|
|
LET col = 2
|
|
LET fila = cnt
|
|
LET val = "ingreso"
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
LET col = 4
|
|
LET fila = cnt
|
|
LET val = "C"
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
LET col = 5
|
|
LET fila = cnt
|
|
LET val = x.cedula
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
LET nombres = x.nom1_emp CLIPPED," ",x.nom2_emp CLIPPED
|
|
LET col = 6
|
|
LET fila = cnt
|
|
LET val = nombres
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
LET col = 7
|
|
LET fila = cnt
|
|
LET val = x.apell1_emp
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
LET col = 8
|
|
LET fila = cnt
|
|
LET val = x.apell2_emp
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
LET col = 9
|
|
LET fila = cnt
|
|
LET val = x.sexo
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
|
|
LET col = 10
|
|
LET fila = cnt
|
|
LET val = x.nacionalidad
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
LET col = 11
|
|
LET fila = cnt
|
|
LET val = p_f_ini
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
LET col = 12
|
|
LET fila = cnt
|
|
LET val = x.sueldo_ac
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
LET col = 13
|
|
LET fila = cnt
|
|
LET val = fecha_1
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
LET col = 15
|
|
LET fila = cnt
|
|
LET val = x.nom_puesto
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
LET col = 16
|
|
LET fila = cnt
|
|
LET val = x.puesto_real
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
LET col = 17
|
|
LET fila = cnt
|
|
LET val = fecha_ini_vac
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
LET col = 18
|
|
LET fila = cnt
|
|
LET val = fecha_ini_vac
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
LET col = 19
|
|
LET fila = cnt
|
|
LET val = x.turno
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
LET col = 20
|
|
LET fila = cnt
|
|
LET val = x.sucid
|
|
CALL enviaDDE(fila,col,val)
|
|
|
|
|
|
LET cnt = cnt + 1
|
|
END REPORT
|
|
|
|
FUNCTION fechaV()
|
|
DEFINE dias_lab SMALLINT
|
|
|
|
|
|
LET dias_lab = 0
|
|
|
|
WHILE dias_lab < 15
|
|
SELECT a.dias FROM notb00012 a
|
|
WHERE a.dias = day(fecha_c) AND a.cod_mes = MONTH(fecha_c)
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
IF WEEKDAY(fecha_c) <> 0 THEN
|
|
|
|
LET dias_lab = dias_lab + 1
|
|
END IF
|
|
END IF
|
|
|
|
|
|
LET fecha_c = fecha_c + 1
|
|
|
|
IF dias_lab > 13 THEN
|
|
EXIT WHILE
|
|
END IF
|
|
|
|
END WHILE
|
|
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION chqDdeError(p_res,p_msg)
|
|
|
|
DEFINE p_res INTEGER,
|
|
p_msg STRING,
|
|
m_err STRING,
|
|
m_log STRING
|
|
|
|
IF p_res THEN
|
|
RETURN
|
|
END IF
|
|
|
|
CALL ui.Interface.frontCall("WINDDE","DDEError",[],[m_err])
|
|
CALL ui.Interface.frontCall("WINDDE","DDEFinishAll", [], [p_res] )
|
|
|
|
LET m_log="DDE Error: ",m_err CLIPPED," (",p_msg,")"
|
|
|
|
#CALL errorlog(m_log)
|
|
|
|
LET m_log="Se ha producido un Error en '",p_msg CLIPPED,"'. Para mas detalle revise el LOG de errores."
|
|
|
|
CALL fgl_winmessage("DDE Error", m_log, "stop")
|
|
|
|
EXIT PROGRAM
|
|
|
|
END FUNCTION
|
|
FUNCTION terminaDDE()
|
|
CALL ui.Interface.frontCall("WINDDE","DDEFinishAll", [], [res] );
|
|
CALL checkError(res)
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION conectarDDE()
|
|
DISPLAY "programa ",prog," ",file
|
|
CALL ui.Interface.frontCall("WINDDE","DDEConnect", [prog,file], [res] )
|
|
CALL checkError(res)
|
|
#DISPLAY "error ",res
|
|
END FUNCTION
|
|
FUNCTION enviaDDE(xfila,xcol,xval)
|
|
DEFINE xfila,xcol,xval,xcelda STRING
|
|
|
|
DISPLAY "enviado ",xfila," c ",xcol," v ",xval
|
|
|
|
LET xcelda = fila_excel CLIPPED,xfila CLIPPED,"C",xcol CLIPPED
|
|
DISPLAY "celda ",xcelda
|
|
CALL ui.Interface.frontCall("WINDDE","DDEPoke", [prog,file,xcelda,xval], [res] );
|
|
CALL checkError(res)
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION checkError(res)
|
|
DEFINE res INTEGER
|
|
DEFINE mess STRING
|
|
IF res THEN RETURN END IF
|
|
DISPLAY "DDE Error:"
|
|
CALL ui.Interface.frontCall("WINDDE","DDEError",[],[mess]);
|
|
DISPLAY mess
|
|
CALL ui.Interface.frontCall("WINDDE","DDEFinishAll", [], [res] );
|
|
EXIT PROGRAM (-1)
|
|
END FUNCTION
|