{ ------------------------------------------------------------------------------- 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