GLOBALS "noprgb000.4gl" DEFINE datarec RECORD rfecha1 DATE, rfecha2 DATE END RECORD, num_emp_super INT, actualiza char(2), xnumdoc,idz INT, xfecha_cierre DATE, pcompanias RECORD LIKE companias.*, primerDiaMes CHAR(20) DEFINE datarec2 RECORD nnomina SMALLINT, tipo_nomina CHAR(1) END RECORD DEFINE notb00007 RECORD departamento SMALLINT, nivel_emp SMALLINT, cod_puesto SMALLINT END RECORD DEFINE DATARRA DYNAMIC ARRAY OF RECORD nsupervisor VARCHAR(100), tfecha DATE, ficha_empleado INT, nom_empleado VARCHAR(100), sueldo FLOAT, cant_ex SMALLINT, valor FLOAT, pagadas VARCHAR(10), cod_mov SMALLINT, num_doc SMALLINT, num_nomi SMALLINT, comentario VARCHAR(100), departamento_labor VARCHAR(50), depto_codigo SMALLINT END RECORD MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" USER usuarios USING clave SELECT * INTO pcompanias.* FROM companias --LET usuarios = 'bisaac' LET primerDiaMes = '01/',month(today),'/',year(today) CALL noprmt029() END MAIN FUNCTION noprmt029() OPEN WINDOW HOME_FRM WITH FORM 'nofmmt029' DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME datarec.* BEFORE INPUT LET datarec.rfecha1 = primerDiaMes DISPLAY BY NAME datarec.rfecha1 AFTER FIELD rfecha1 IF datarec.rfecha1 IS NULL THEN CALL fgl_winmessage("INFO", "FECHA INICIAL NO PUEDE SER EN BLANCO", "INFO") NEXT FIELD rfecha1 END IF BEFORE FIELD rfecha2 LET datarec.rfecha2 = TODAY DISPLAY BY NAME datarec.rfecha2 AFTER FIELD rfecha2 IF datarec.rfecha2 IS NULL THEN CALL fgl_winmessage("INFO", "FECHA FINAL NO PUEDE SER EN BLANCO", "INFO") NEXT FIELD rfecha2 END IF IF datarec.rfecha2 < datarec.rfecha1 THEN CALL fgl_winmessage("INFO", "FECHA FINAL NO PUEDE SER MENOR A FECHA INICIAL", "INFO") NEXT FIELD rfecha2 END IF END INPUT CONSTRUCT criterio ON a.num_doc, c.num_emp_supervisor FROM ndocumento, num_emp_supervisa BEFORE CONSTRUCT CALL csupervisores() AFTER CONSTRUCT CALL mostrarData() IF idx == 1 THEN CALL fgl_winmessage("INFO","NO HAY REGISTROS CON LOS PARAMETROS INDICADOS","INFO") NEXT FIELD rfecha2 END IF END CONSTRUCT INPUT ARRAY DATARRA FROM src_nomina.* ON ACTION pagar LET idz = 1 FOR idz = 1 TO (DATARRA.getLength() -1) IF DATARRA[idx].pagadas == 'NO' THEN LET idz = idz +1 END IF END FOR IF idz != 1 THEN OPEN WINDOW NOMINA_FRM WITH FORM 'nofmmt029B' INPUT BY NAME datarec2.* AFTER FIELD nnomina IF datarec2.nnomina IS NULL THEN CALL fgl_winmessage("INFO", "ESPECIFIQUE EL NUMERO DE NOMINA", "INFO") NEXT FIELD nnomina END IF AFTER FIELD tipo_nomina IF datareC2.tipo_nomina IS NULL THEN CALL fgl_winmessage("INFO", "ESPECIFIQUE EL TIPO DE NOMINA", "INFO") NEXT FIELD tipo_nomina END IF LET idz = 1 BEGIN WORK FOR idx = 1 TO (DATARRA.getLength() -1) IF DATARRA[idx].pagadas == 'NO' THEN SELECT a.departamento, a.nivel_emp, a.cod_puesto INTO notb00007.departamento, notb00007.nivel_emp, notb00007.cod_puesto FROM adtb00003 a WHERE a.num_emp = DATARRA[idx].ficha_empleado INSERT INTO notb00007(num_nomi, tipo_emp,num_emp,departamento,nivel_emp,cod_puesto,cod_mov,cantidad,valor,status_t,us_crea,fech_crea, fecha, num_doc,departamento_labor) VALUES(datarec2.nnomina,datarec2.tipo_nomina,DATARRA[idx].ficha_empleado,notb00007.departamento,notb00007.nivel_emp,notb00007.cod_puesto, DATARRA[idx].cod_mov, DATARRA[idx].cant_ex,DATARRA[idx].valor,NULL,usuarios,TODAY,DATARRA[idx].tfecha,DATARRA[idx].num_doc,DATARRA[idx].depto_codigo) UPDATE notb00028 SET pagado = 'SI', num_nomi = datarec2.nnomina WHERE num_doc = DATARRA[idx].num_doc LET idz = idz + 1 END IF END FOR COMMIT WORK IF idz == 1 THEN CALL fgl_winmessage("INFO","NO HAY TRANSACCIONES QUE REALIZAR","INFO") ELSE CALL fgl_winmessage("INFO","DATOS INSERTADOS CORRECTAMENTE","INFO") CALL mostrarData() END IF ON ACTION CANCEL CALL msg(2) LET INT_FLAG = FALSE EXIT INPUT END INPUT CLOSE WINDOW NOMINA_FRM END IF ON ACTION mostrar CALL mostrarData() END INPUT ON ACTION CANCEL CALL msg(2) LET INT_FLAG = FALSE EXIT PROGRAM END DIALOG CLOSE WINDOW HOME_FRM END FUNCTION FUNCTION mostrarData() LET selec = "select a.supervisor, a.fecha, a.num_emp, b.nombre, b.sueldo, b.cantidad, b.valor, a.pagado, b.cod_mov, a.num_doc, a.num_nomi, a.comentario, '('+cast(b.departamento_labor as varchar(10))+')'+' '+ltrim(d.nom_dpto), b.departamento_labor FROM notb00028 a inner join notb00029 b on a.num_doc = b.num_doc inner join adtb00003 c on a.num_emp = c.num_emp inner join adtb00001 d on b.departamento_labor = d.departamento WHERE " , criterio CLIPPED, " and "," a.fecha between '", datarec.rfecha1 USING "mm/dd/yyyy" , "' and '",datarec.rfecha2 USING "mm/dd/yyyy","'" DISPLAY selec PREPARE comando FROM selec DECLARE autorizaciones CURSOR FOR comando LET idx = 1 FOREACH autorizaciones INTO DATARRA[idx].* LET IDX = IDX +1 END FOREACH END FUNCTION