{ ------------------------------------------------------------------------ FORMULARIO : NOPRRP008 OBJETIVO : Reporte para imprimir los Volantes PROGRAMADOR : Ing. Juan Soto. FECHA REALIZACION : Noviembre 5, 1993 MODIFICADO POR : Ing. Juan Soto FECHA : Marzo 11, 2003 DESCRIPCION : Volante de Los empleados por pagar la nomina automatica en el BANCO POPULAR, EL CODIGO DE LA EMPRESA ES EL 3563. ----------------------------------------------------------------------------- } GLOBALS "noprgb000.4gl" DEFINE letras RECORD negrillas_on , negrillas_off , doble_on , doble_off , comp_on , comp_off , doce , normal CHAR(6) END RECORD, fecha_inicial DATE DEFINE impresor SMALLINT, imprime CHAR(80), archivo CHAR(20), cuenta_emp SMALLINT DEFINE cheque_ini,cheque_fin,no_cheque,emp_ant INTEGER DEFINE idx_40,idx_x,k,l,t,i,idx,numero_msg SMALLINT DEFINE meses ARRAY[12] OF CHAR(15) DEFINE valor_letras CHAR(90) DEFINE unidades1 ARRAY[19] OF CHAR(10) DEFINE decenas ARRAY[81] OF CHAR(20) DEFINE centenas ARRAY[10] OF CHAR(20) DEFINE miles ARRAY[9] OF CHAR(2) DEFINE salir,cuarta CHAR(1) DEFINE selec21,selec20,selec10 CHAR(500) DEFINE criterio10 CHAR(200) DEFINE segunda,primera,siguie CHAR(1) DEFINE p_valor DECIMAL(12,2), formulario CHAR(70) DEFINE emp_neto RECORD num_emp SMALLINT, valor DECIMAL(12,2) END RECORD DEFINE arr_mov ARRAY[24] OF RECORD num_emp INTEGER, cod_mov1 SMALLINT, descrip1 CHAR(10), cantidad1 DECIMAL(8,2), valor1 DECIMAL(8,2), acumulado1 DECIMAL(10,2), cod_mov2 SMALLINT, descrip2 CHAR(10), cantidad2 DECIMAL(8,2), valor2 DECIMAL(8,2), acumulado2 DECIMAL(10,2), cod_mov3 SMALLINT, descrip3 CHAR(10), cantidad3 DECIMAL(8,2), valor3 DECIMAL(8,2), acumulado3 DECIMAL(10,2) END RECORD DEFINE c_entra RECORD fecha DATE, num_nomi INTEGER, tipo_emp CHAR(1), nombre_tipo CHAR(20) END RECORD DEFINE datos_peri RECORD tipo_emp CHAR(1), fecha_d DATE, fecha_a DATE END RECORD DEFINE cientos ARRAY[9] OF CHAR(20) DEFINE decimas ARRAY[99] OF CHAR(20) FUNCTION noprrp008() DEFINE acumula RECORD cod_mov LIKE notb00008.cod_mov, num_emp LIKE notb00008.num_emp, valor DECIMAL(12,2) END RECORD DEFINE datos_cheque RECORD num_emp LIKE adtb00003.num_emp, departamento LIKE adtb00003.departamento, nivel_emp LIKE adtb00003.nivel_emp, cod_puesto LIKE adtb00003.cod_puesto, nom1_emp LIKE adtb00003.nom1_emp, apell1_emp LIKE adtb00003.nom1_emp, nom2_emp LIKE adtb00003.nom1_emp, apell2_emp LIKE adtb00003.nom1_emp, cod_mov LIKE notb00008.cod_mov, descrip_mov LIKE notb00002.segundo_enc, tipo_d CHAR(1), cantidad LIKE notb00008.cantidad, valor LIKE notb00008.valor, cuenta_no LIKE adtb00003.cuenta_no, nombre CHAR(80), numero INTEGER, fecha DATE, acumulado DECIMAL(12,2), neto DECIMAL(12,2) END RECORD, imp_form CHAR(1) OPTIONS FORM LINE 9, ERROR LINE 24, COMMENT LINE 22 # Desplegue de pantalla y de formulario para la captura de informacion CALL pantalla() LET formulario = formulario CLIPPED,"nofmrp008" OPEN FORM nofmrp008 FROM formulario DISPLAY FORM nofmrp008 DISPLAY "noprrp008" AT 4,2 ATTRIBUTE(RED) DISPLAY "Volantes de Nomina" AT 6,31 ATTRIBUTE(BLACK) INITIALIZE c_entra TO null #Captura de informacion para el reporte: banco,numero de nomina,cheque_no INPUT BY NAME c_entra.*,imp_form AFTER FIELD tipo_emp IF c_entra.tipo_emp = "Q" THEN LET c_entra.nombre_tipo = "QUINCENAL" END IF IF c_entra.tipo_emp = "S" THEN LET c_entra.nombre_tipo = "SEMANAL" END IF IF c_entra.tipo_emp = "V" THEN LET c_entra.nombre_tipo = "VENDEDORES" END IF LET fecha_inicial = "01/01/2005" SELECT COUNT(*) INTO cuenta_emp FROM adtb00003 WHERE (status_t IS NULL OR status_t = "I") AND num_emp NOT IN (560,564,609,614) AND nomina = c_entra.tipo_emp # Monto Nomina # Del monto total de la nomina se quitaran las fichas mas abajo mencionadas porque ellos tienen # Problemas de credito en el banco. SELECT SUM(a.valor) INTO p_valor FROM notb00008 a,adtb00003 b WHERE a.num_nomi = c_entra.num_nomi AND a.tipo_emp = c_entra.tipo_emp AND a.cod_mov not in (100,101,102,98,50) AND # a.num_emp NOT IN (560,564,609,614) a.num_emp = b.num_emp AND b.cuenta_no IS NOT NULL DISPLAY BY NAME c_entra.nombre_tipo ATTRIBUTE (BOLD) SELECT tipo_emp,fecha_del,fecha_al INTO datos_peri.* FROM notb00010 WHERE num_nomi = c_entra.num_nomi and tipo_emp = c_entra.tipo_emp and status_t is null IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tipo_emp END IF DISPLAY BY NAME datos_peri.* ATTRIBUTE(BOLD) 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 CONSTRUCT BY NAME criterio10 ON a.departamento,a.num_emp IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET selec10 = "SELECT a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto, ", "a.nom1_emp,a.apell1_emp,a.nom2_emp,a.apell2_emp, ", "b.cod_mov,c.ch_encabeza,b.clase_mov,b.cantidad,b.valor, ", "a.cuenta_no ", "FROM adtb00003 a,notb00008 b, notb00002 c ", "WHERE a.num_emp = b.num_emp and ", "b.num_nomi = ? and ", "b.tipo_emp = ? and ", "b.cod_mov = c.cod_mov and ", criterio10 clipped, "ORDER BY 2,1,9" PREPARE comando FROM selec10 DECLARE busca CURSOR FOR comando OPEN busca USING c_entra.num_nomi,c_entra.tipo_emp IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF START REPORT cheque TO "c:\\volantes.txt" START REPORT banco to "c:\\MTECH.txt" DISPLAY "Volantes Generandose... Espere Por Favor" AT 19,14 ATTRIBUTE(REVERSE,BOLD) LET i = 1 LET idx = 1 LET siguie = "S" LET emp_ant = 0 LET cuarta = "N" WHILE STATUS != NOTFOUND FETCH busca INTO datos_cheque.* IF status = notfound THEN EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET datos_cheque.nombre = datos_cheque.nom1_emp clipped," ", datos_cheque.nom2_emp clipped," ", datos_cheque.apell1_emp clipped," ", datos_cheque.apell2_emp clipped LET datos_cheque.acumulado = 0 # Busqueda de acumulados SELECT a.* FROM notb00014 a WHERE a.cod_mov = datos_cheque.cod_mov IF STATUS != NOTFOUND THEN SELECT sum(valor) INTO datos_cheque.acumulado FROM notb00008 WHERE num_emp = datos_cheque.num_emp and cod_mov = datos_cheque.cod_mov and fecha <= datos_peri.fecha_a AND fecha >= fecha_inicial ELSE SELECT sum(valor) INTO datos_cheque.acumulado FROM notb00008 WHERE num_emp = datos_cheque.num_emp and cod_mov = datos_cheque.cod_mov and fecha >= fecha_inicial and fecha <= datos_peri.fecha_a END IF IF datos_cheque.cod_mov = 12 THEN SELECT valor INTO p_valor FROM notb00008 WHERE num_nomi = c_entra.num_nomi and tipo_emp = c_entra.tipo_emp and num_emp = datos_cheque.num_emp and cod_mov = 110 LET datos_cheque.valor = datos_cheque.valor + p_valor END IF # Busque del valor neto del empleado para que el programa tenga la oportunidad # de buscar el valor en letras del cheque SELECT sum(a.valor) INTO datos_cheque.neto FROM notb00008 a WHERE a.num_nomi = c_entra.num_nomi and a.tipo_emp = c_entra.tipo_emp and a.cod_mov not in (100,101,102,98,50) and a.num_emp = datos_cheque.num_emp and a.departamento = datos_cheque.departamento #------------------------------------------------------------------------- OUTPUT TO REPORT cheque(datos_cheque.*) OUTPUT TO REPORT banco(datos_cheque.*) LET siguie = "N" END WHILE FINISH REPORT cheque FINISH REPORT banco RUN "type C:\\volantes.txt > %USPRINT1%" RUN "type C:\\rayovac.txt > %USPRINT1%" END FUNCTION REPORT cheque(x) DEFINE x RECORD num_emp LIKE adtb00003.num_emp, departamento LIKE adtb00003.departamento, nivel_emp LIKE adtb00003.nivel_emp, cod_puesto LIKE adtb00003.cod_puesto, nom1_emp LIKE adtb00003.nom1_emp, apell1_emp LIKE adtb00003.nom1_emp, nom2_emp LIKE adtb00003.nom1_emp, apell2_emp LIKE adtb00003.nom1_emp, cod_mov LIKE notb00008.cod_mov, descrip_mov LIKE notb00002.segundo_enc, tipo_d CHAR(1), cantidad LIKE notb00008.cantidad, valor LIKE notb00008.valor, cuenta_no LIKE adtb00003.cuenta_no, nombre CHAR(80), numero INTEGER, fecha DATE, acumulado DECIMAL(12,2), neto DECIMAL(12,2) END RECORD DEFINE col1,col2,col3,segunda,imp CHAR(1) DEFINE ano CHAR(4) DEFINE nombre_mes CHAR(10) DEFINE orden,fact CHAR(30) DEFINE subraya_on,subraya_off CHAR(3) DEFINE italica,italica_of CHAR(2) DEFINE l,k,in_mes INTEGER, t_monto,t_desc,p_monto DECIMAL(12,2) OUTPUT LEFT MARGIN 0 PAGE LENGTH 22 FORMAT BEFORE GROUP OF x.num_emp LET italica = ASCII 27, ASCII 52 LET italica_of = ASCII 27, ASCII 53 LET subraya_on = ASCII 27, ASCII 45, ASCII 1 LET subraya_off = ASCII 27, ASCII 45, ASCII 0 LET t_desc = 0 LET t_monto = 0 LET in_mes = month(today) CALL busca_mes() LET nombre_mes = meses[in_mes] PRINT COLUMN 1,letras.negrillas_on, COLUMN 5, "Nomina: ",letras.negrillas_off,c_entra.nombre_tipo, COLUMN 60, "del ",datos_peri.fecha_d using "dd/mm/yyyy" PRINT COLUMN 1,letras.negrillas_on, COLUMN 10, "Empleado: ",letras.negrillas_off, "(",x.num_emp using "&&&",")", x.nombre[1,30], COLUMN 60, "al ",datos_peri.fecha_a using "dd/mm/yyyy", letras.comp_off LET p_monto = x.neto LET ano = year(today) using "&&&&" PRINT COLUMN 5, "|------ INGRESOS ------|", "|----------- DESCUENTOS -----------|" PRINT COLUMN 5, "FECHA EMISION: ",day(today) using "&&", 2 SPACES, nombre_mes clipped, 2 SPACES, ano,letras.negrillas_on PRINT COLUMN 5, "COD", 12 SPACES, "HORAS", 2 SPACES, "MONTO", 4 SPACES, "ACUMULADO", 2 SPACES, "COD", 12 SPACES, "MONTO", 2 SPACES, "ACUMULADO", letras.negrillas_off LET imp = "N" LET k = 0 SKIP 1 LINES ON EVERY ROW IF x.tipo_d = "I" or x.tipo_d = "P" or x.tipo_d = "E" THEN IF idx > 1 THEN FOR k = 1 TO 9 IF arr_mov[k].cod_mov1 is null or arr_mov[k].cod_mov1 = 0 THEN LET i = k EXIT FOR END IF END FOR END IF LET arr_mov[i].num_emp = x.num_emp LET arr_mov[i].cod_mov1 = x.cod_mov LET arr_mov[i].descrip1 = x.descrip_mov LET arr_mov[i].cantidad1 = x.cantidad LET arr_mov[i].valor1 = x.valor LET arr_mov[i].acumulado1 = x.acumulado LET i = i + 1 LET primera = "S" END IF IF x.tipo_d = "S" or x.tipo_d = "R" or x.tipo_d = "D" THEN IF idx <= 12 THEN IF primera = "S" THEN LET primera = "N" LET i = 1 END IF FOR k = 1 TO 9 IF arr_mov[k].cod_mov2 is null or arr_mov[k].cod_mov2 = 0 THEN LET i = k EXIT FOR END IF END FOR LET arr_mov[i].num_emp = x.num_emp LET arr_mov[i].cod_mov2 = x.cod_mov LET arr_mov[i].descrip2 = x.descrip_mov LET arr_mov[i].cantidad2 = null LET arr_mov[i].valor2 = x.valor LET arr_mov[i].acumulado2 = x.acumulado LET i = i + 1 LET segunda = "S" END IF IF idx > 12 THEN IF segunda = "S" THEN LET segunda = "N" LET i = 1 END IF FOR k = 1 TO 9 IF arr_mov[k].cod_mov3 is null or arr_mov[k].cod_mov3 = 0 THEN LET i = k EXIT FOR END IF END FOR LET arr_mov[i].num_emp = x.num_emp LET arr_mov[i].cod_mov3 = x.cod_mov LET arr_mov[i].descrip3 = x.descrip_mov LET arr_mov[i].cantidad3 = null LET arr_mov[i].valor3 = x.valor LET arr_mov[i].acumulado3 = x.acumulado LET i = i + 1 END IF END IF LET idx = idx + 1 AFTER GROUP OF x.num_emp LET col1 = "S" LET l = 5 LET k = 0 FOR i = 1 TO idx #----------------------------------------------------------------------------- # Impresion de movimientos en columnas #------------------------------------------------------------------------------ IF arr_mov[i].cod_mov2 != 0 or arr_mov[i].cod_mov1 != 0 or arr_mov[i].cod_mov3 != 0 THEN LET k = k + 1 IF arr_mov[i].cod_mov1 = 0 THEN LET arr_mov[i].cod_mov1 = null END IF IF arr_mov[i].cod_mov3 = 0 THEN LET arr_mov[i].cod_mov3 = null END IF IF arr_mov[i].cod_mov2 = 0 THEN LET arr_mov[i].cod_mov2 = null END IF PRINT COLUMN l, arr_mov[i].cod_mov1 using "&&"," ", COLUMN l+3, arr_mov[i].descrip1, COLUMN l+11, arr_mov[i].cantidad1 using "###.##", COLUMN l+18, arr_mov[i].valor1 using "####,###.##", COLUMN l+29, arr_mov[i].acumulado1 using "###,###.##","|", COLUMN l+39, arr_mov[i].cod_mov2 using "&&"," ", COLUMN l+42, arr_mov[i].descrip2, COLUMN l+51, arr_mov[i].valor2 using "####,###.##", COLUMN l+61, arr_mov[i].acumulado2 using "###,###.##","|", COLUMN l+78, arr_mov[i].cod_mov3 using "&&"," ", COLUMN l+81, arr_mov[i].descrip3 , #COLUMN l+91, arr_mov[i].cantidad3 using "###.##", COLUMN l+91, arr_mov[i].valor3 using "###,###.##", COLUMN l+100, arr_mov[i].acumulado3 using "###,###.##" IF imp = "S" THEN LET l = 115 END IF # Totaliza los ingresos IF arr_mov[i].valor1 > 0 THEN LET t_monto = t_monto + arr_mov[i].valor1 END IF IF arr_mov[i].valor2 > 0 THEN LET t_monto = t_monto + arr_mov[i].valor2 END IF IF arr_mov[i].valor3 > 0 THEN LET t_monto = t_monto + arr_mov[i].valor3 END IF # Totaliza los descuentos IF arr_mov[i].valor1 < 0 THEN LET t_desc = t_Desc + arr_mov[i].valor1 END IF IF arr_mov[i].valor2 < 0 THEN LET t_desc = t_desc + arr_mov[i].valor2 END IF IF arr_mov[i].valor3 < 0 THEN LET t_desc = t_desc + arr_mov[i].valor3 END IF END IF END FOR SKIP 1 LINE PRINT COLUMN 5,letras.comp_off, "Ingresos: ", t_monto using "$,$$$,$$#.##", 2 SPACES, "Descuentos: ", t_desc using "$$$,$$#.##", 2 SPACES, "A Cobrar : ", p_monto using "$,$$$,$$#.##",letras.comp_off # Limpieza del arreglo FOR i = 1 TO idx LET arr_mov[i].cod_mov1 = null LET arr_mov[i].descrip1 = null LET arr_mov[i].cantidad1 = null LET arr_mov[i].valor1 = null LET arr_mov[i].acumulado1 = null LET arr_mov[i].cod_mov2 = null LET arr_mov[i].descrip2 = null LET arr_mov[i].cantidad2 = null LET arr_mov[i].valor2 = null LET arr_mov[i].acumulado2 = null LET arr_mov[i].cod_mov3 = null LET arr_mov[i].descrip3 = null LET arr_mov[i].cantidad3 = null LET arr_mov[i].valor3 = null LET arr_mov[i].acumulado3 = null END FOR LET i = 1 LET idx = 1 Print "----------------------" SKIP TO TOP OF PAGE {ON LAST ROW UPDATE notb00010 set status_t = "P" WHERE num_nomi = c_entra.num_nomi and tipo_emp = c_entra.tipo_emp } END REPORT REPORT banco(x) DEFINE x RECORD num_emp LIKE adtb00003.num_emp, departamento LIKE adtb00003.departamento, nivel_emp LIKE adtb00003.nivel_emp, cod_puesto LIKE adtb00003.cod_puesto, nom1_emp LIKE adtb00003.nom1_emp, apell1_emp LIKE adtb00003.nom1_emp, nom2_emp LIKE adtb00003.nom1_emp, apell2_emp LIKE adtb00003.nom1_emp, cod_mov LIKE notb00008.cod_mov, descrip_mov LIKE notb00002.segundo_enc, tipo_d CHAR(1), cantidad LIKE notb00008.cantidad, valor LIKE notb00008.valor, cuenta_no LIKE adtb00003.cuenta_no, nombre CHAR(80), numero INTEGER, fecha DATE, acumulado DECIMAL(12,2), neto DECIMAL(12,2) END RECORD DEFINE m_sexo,col1,col2,col3,segunda,imp CHAR(1), ch_valor,ch_neto CHAR(14) DEFINE ano CHAR(4) DEFINE nombre_mes CHAR(10) DEFINE orden,fact CHAR(30) DEFINE subraya_on,subraya_off CHAR(3) DEFINE italica,italica_of CHAR(2) DEFINE l,k,in_mes INTEGER, t_monto,t_desc,p_monto DECIMAL(12,2) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 PAGE LENGTH 700 FORMAT FIRST PAGE HEADER LET ch_valor = p_valor USING "&&&&&&&&&&&.##" LET ch_valor = ch_valor[1,11],ch_valor[13,14] PRINT "H","03431",c_entra.fecha USING "mmddyy",ch_valor CLIPPED, cuenta_emp USING "&&&&&&", 70 SPACES AFTER GROUP OF x.num_emp display x.num_emp, x.cuenta_no IF x.cuenta_no IS NOT NULL THEN LET ch_neto = x.neto USING "&&&&&&&&&&&.##" LET ch_neto = ch_neto[1,11],ch_neto[13,14] PRINT "N",x.num_emp USING "&&&&&&&&&&",x.cuenta_no USING "&&&&&&&&&&", ch_neto CLIPPED,x.departamento USING "&&&&&&&&&&", 56 SPACES { PRINT "N",x.num_emp USING "&&&&&&&&&&","|",x.cuenta_no USING "&&&&&&&&&&","|", ch_neto CLIPPED,"|",x.departamento USING "&&&&&&&&&&","|", 56 SPACES } END IF END REPORT FUNCTION busca_mes() LET meses[1] = "ENERO" LET meses[2] = "FEBRERO" LET meses[3] = "MARZO" LET meses[4] = "ABRIL" LET meses[5] = "MAYO" LET meses[6] = "JUNIO" LET meses[7] = "JULIO" LET meses[8] = "AGOSTO" LET meses[9] = "SEPTIEMBRE" LET meses[10] = "OCTUBRE" LET meses[11] = "NOVIEMBRE" LET meses[12] = "DICIEMBRE" END FUNCTION