GLOBALS DEFINE numero_msg SMALLINT, idx INT DEFINE criterio,selec1 STRING END GLOBALS FUNCTION busca_puesto() DEFINE buscar_puesto DYNAMIC ARRAY OF RECORD cod_puesto SMALLINT, nom_puesto VARCHAR(50) END RECORD, xcod_puesto SMALLINT, xdescripcion VARCHAR(50) OPEN WINDOW busqueda1 AT 10,10 WITH FORM "adfmwd002" ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last) CONSTRUCT criterio ON a.nom_puesto FROM nom_puesto IF INT_FLAG THEN CLOSE WINDOW busqueda1 LET INT_FLAG = FALSE RETURN 0,' ' END IF LET selec1 = "SELECT a.cod_puesto,a.nom_puesto FROM adtb00004 a ", " WHERE ", " a.status_t is null AND ", criterio clipped, " ORDER BY a.cod_puesto " PREPARE ppuesto FROM selec1 DECLARE cpuesto CURSOR FOR ppuesto LET idx = 1 FOREACH cpuesto INTO buscar_puesto[idx].* IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) EXIT FOREACH END IF LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY ARRAY buscar_puesto TO s_puesto.* AFTER DISPLAY LET idx = arr_curr() LET xcod_puesto = buscar_puesto[idx].cod_puesto LET xdescripcion = buscar_puesto[idx].nom_puesto EXIT DISPLAY END DISPLAY CLOSE WINDOW busqueda1 RETURN xcod_puesto,xdescripcion END FUNCTION FUNCTION busca_depto() DEFINE buscar_depto DYNAMIC ARRAY OF RECORD departamento SMALLINT, nom_dpto VARCHAR(50) END RECORD, xdepto SMALLINT, xnombre VARCHAR(50) OPEN WINDOW busqueda AT 10,10 WITH FORM "adfmwd001" ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last) CONSTRUCT criterio ON adtb00001.nom_dpto FROM adtb00001.nom_dpto LET selec1 = "SELECT departamento,nom_dpto FROM adtb00001 ", " WHERE ", " status_t is null AND ", criterio clipped, "ORDER BY 1 " PREPARE busco FROM selec1 DECLARE local CURSOR FOR busco LET idx = 1 FOREACH local INTO buscar_depto[idx].* IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) EXIT FOREACH END IF LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY ARRAY buscar_depto TO s_depto.* LET idx = arr_curr() LET xdepto = buscar_depto[idx].departamento LET xnombre = buscar_depto[idx].nom_dpto CLOSE WINDOW busqueda RETURN xdepto,xnombre END FUNCTION ## VENTANA PARA DESPLEGAR LOS NIVELES EDUCATIVOS FUNCTION busca_educacion() DEFINE buscar_educacion DYNAMIC ARRAY OF RECORD cod_educa SMALLINT, nom_educa VARCHAR(50) END RECORD, xeducacion SMALLINT, xnombre VARCHAR(50) OPEN WINDOW busqueda2 AT 10,10 WITH FORM "adfmwd011" ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last) CONSTRUCT criterio ON adtb00005.nom_educa FROM adtb00005.nom_educa LET selec1 = "SELECT cod_educa,nom_educa FROM adtb00005 ", " WHERE ", " status_t is null AND ", criterio clipped, "ORDER BY 1 " PREPARE busca2 FROM selec1 DECLARE local2 CURSOR FOR busca2 LET idx = 1 FOREACH local2 INTO buscar_educacion[idx].* IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) EXIT FOREACH END IF LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY ARRAY buscar_educacion TO s_educa.* LET idx = arr_curr() LET xeducacion = buscar_educacion[idx].cod_educa LET xnombre = buscar_educacion[idx].nom_educa CLOSE WINDOW busqueda2 RETURN xeducacion,xnombre END FUNCTION FUNCTION codigos_nomina() DEFINE id SMALLINT, descripcion CHAR(30), pcodigo ui.ComboBox LET pcodigo = ui.ComboBox.forName("formonly.cod_mov") DECLARE bcodigos CURSOR FOR SELECT a.cod_mov,a.descrip_mov FROM notb00002 a WHERE a.status_t IS NULL ORDER BY a.descrip_mov CALL pcodigo.clear() FOREACH bcodigos INTO id,descripcion CALL pcodigo.additem(id,descripcion) END FOREACH END FUNCTION FUNCTION codigos_accion() DEFINE id SMALLINT, descripcion CHAR(30), pcodigo ui.ComboBox LET pcodigo = ui.ComboBox.forName("adtb00020.cod_mto") DECLARE ccodigos CURSOR FOR SELECT a.cod_mto,a.desc_mto FROM adtb00009 a WHERE a.status_t IS NULL ORDER BY a.desc_mto CALL pcodigo.clear() FOREACH ccodigos INTO id,descripcion CALL pcodigo.additem(id,descripcion) END FOREACH END FUNCTION FUNCTION calcula_salarios(ptipo_nomina,xnum_emp,fecha_liquida) DEFINE pvalor,valor_total,promedio_ano_actual, promedio_ano_anterior,m_valor_total,incentivos, sueldo_promedio,salario_dia,sueldo_acumulado DECIMAL(12,2), ptipo_nomina VARCHAR(1), xnum_emp INT, fecha_liquida DATE LET promedio_ano_actual = 0 LET promedio_ano_anterior = 0 LET m_valor_total = 0 # Busqueda del sueldo en la tabla actual DECLARE busca_salario CURSOR FOR SELECT SUM(a.valor),a.fecha FROM notb00008 a,notb00002 b WHERE a.num_emp = xnum_emp AND a.cod_mov =b.cod_mov AND b.vacaciones = "SI" AND a.valor != 0 AND a.fecha <= fecha_liquida GROUP BY a.fecha ORDER BY a.fecha DESC LET idx = 1 LET valor_total = 0 FOREACH busca_salario INTO pvalor LET valor_total = valor_total + pvalor IF ptipo_nomina = "Q" OR ptipo_nomina = 'J' THEN IF idx = 24 THEN SELECT a.monto INTO incentivos FROM notbingresos a WHERE a.num_emp = xnum_emp IF incentivos IS NOT NULL THEN LET valor_total = valor_total + (incentivos * idx) LET incentivos = 0 END IF EXIT FOREACH END IF ELSE IF idx = 52 THEN EXIT FOREACH END IF END IF LET idx = idx + 1 END FOREACH IF idx = 0 OR idx IS NULL THEN LET idx = 1 END IF IF ptipo_nomina = "S" THEN IF idx = 52 THEN LET idx = idx - 1 END IF LET idx = idx /4 END IF IF ptipo_nomina = "Q" THEN LET idx = idx / 2 END IF LET sueldo_acumulado = valor_total LET valor_total = valor_total / idx LET sueldo_promedio = valor_total LET salario_dia = sueldo_promedio / 23.83 # DISPLAY "sueldo dia ",salario_dia," PROM ",sueldo_promedio," IDX ",idx, " v total ",valor_total RETURN salario_dia,sueldo_acumulado END FUNCTION FUNCTION busca_foto() DEFINE imagenom,filepath,filedestino STRING, foto_emp BYTE, xsecuencia INT SELECT a.secuencia INTO xsecuencia FROM adtb00048 a IF xsecuencia IS NULL THEN LET xsecuencia = 0 END IF LET xsecuencia = xsecuencia +1 UPDATE adtb00048 SET secuencia = xsecuencia # LET imagenom = "*.*" CALL ui.interface.frontcall("standard","openfile",[imagenom,"*","*.png *.jpg *.bmp *.gif","Busca Imagen"],filepath) IF filepath IS NOT NULL THEN LOCATE foto_Emp IN MEMORY LET filedestino = xsecuencia USING "&&&&&&",".jpg" #LET filedestino = "F:\\FOURJS\\GAS22006\\pic\\NOMINA\\" # LET filedestino = filedestino CLIPPED,"\\",emplea.num_emp USING "&&&&&",".jpg" # CALL FGL_WINMESSAGE("W",filedestino,"stop") CALL fgl_getfile(filepath,filedestino) CALL comprimeImagen(filedestino,' -resize 300x300 ') CALL foto_emp.readFile(filedestino) DISPLAY filedestino TO foto_solicita END IF RETURN foto_emp,filedestino END FUNCTION