{ ------------------------------------------------------------------------------- PROGRAMA : NOPRRP001 OBJETIVO : REPORTE DE INGRESOS DE LA NOMINA PROGRAMADOR : Ing. Betania Guerrero Perez FECHA REALIZACION : Noviembre 03, 1993 ------------------------------------------------------------------------------- } GLOBALS "noprgb000.4gl" DEFINE p,m INT DEFINE totales ARRAY[200] OF DECIMAL(12,2) DEFINE tot_gral ARRAY[200] OF DECIMAL(12,2) DEFINE primera,sigue CHAR(1) DEFINE nombre_mes2 CHAR(12) {DEFINE tot_gral ARRAY[50] OF RECORD cod_mov SMALLINT, valor DECIMAL(12,2) END RECORD} DEFINE o SMALLINT # Variable de los encabezados DEFINE f DYNAMIC ARRAY OF RECORD primer_enc LIKE notb00002.primer_enc, segundo_enc LIKE notb00002.segundo_enc, tercer_enc LIKE notb00002.tercer_enc, cod_mov LIKE notb00002.cod_mov, clase_mov LIKE notb00008.clase_mov, no_columna INTEGER, campo VARCHAR(25) END RECORD # Variable de los encabezados DEFINE j DYNAMIC ARRAY OF RECORD primer_enc LIKE notb00002.primer_enc, segundo_enc LIKE notb00002.segundo_enc, tercer_enc LIKE notb00002.tercer_enc, cod_mov LIKE notb00002.cod_mov, clase_mov LIKE notb00008.clase_mov, no_columna INTEGER END RECORD, primerDiaMes STRING MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" USER usuarios USING clave SELECT * INTO p_companias.* FROM companias --LET usuarios = 'bisaac' LET primerDiaMes = '01/',month(today),'/',year(today) CALL noprrp001() END MAIN FUNCTION noprrp001() ## DEFINICION DE LOS REGISTROS DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE DEFINE imprime RECORD num_emp LIKE notb00008.num_emp, nom1_emp LIKE adtb00003.nom1_emp, nom2_emp LIKE adtb00003.nom2_emp, apell1_emp LIKE adtb00003.apell1_emp, apell2_emp LIKE adtb00003.apell2_emp, cod_mov LIKE notb00008.cod_mov, cantidad LIKE notb00008.cantidad, clase_mov CHAR(1), valor LIKE notb00008.valor, departamento LIKE adtb00003.departamento, cuenta_no LIKE cgtb00002.cuenta_no, no_columna SMALLINT END RECORD OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 CLEAR SCREEN LET formulario = formulario CLIPPED,"nofmrp001" OPEN FORM nofmrp001 FROM "nofmrp001" DISPLAY FORM nofmrp001 # CALL pantalla() DISPLAY "noprrp001" AT 4,3 DISPLAY "Nomina de Pago" AT 6,33 ## INDICA EL TIPO DE PAPEL NECESARIO PARA EL REPORTE. 1 - PAPEL 9 1/2 X 11 ## 2 - PAPEL 14 7/8 X 11 LET tipo_papel = 2 CALL msgrp000(tipo_papel) LET primera = "S" ## AQUI SE INDICA EL CRITERIO DE BUSQUEDA DEL REPORTE INPUT BY NAME per_nomi.num_nomi,per_nomi.tipo_emp AFTER FIELD num_nomi IF per_nomi.num_nomi IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_nomi END IF AFTER FIELD tipo_emp IF per_nomi.num_nomi IS NOT NULL THEN IF per_nomi.tipo_emp IS NOT NULL THEN SELECT num_nomi,tipo_emp,fecha_del,fecha_al INTO per_nomi.num_nomi,per_nomi.tipo_emp, per_nomi.fecha_del,per_nomi.fecha_al FROM notb00010 WHERE num_nomi = per_nomi.num_nomi and tipo_emp = per_nomi.tipo_emp IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF ELSE LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_emp END IF END IF DISPLAY BY NAME per_nomi.fecha_del,per_nomi.fecha_al SELECT UNIQUE a.descrip INTO nombre_mes FROM mestable a WHERE a.mes = MONTH(per_nomi.fecha_del) SELECT UNIQUE a.descrip INTO nombre_mes2 FROM mestable a WHERE a.mes = MONTH(per_nomi.fecha_al) 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 criterio ON a.departamento,a.num_emp # Busqueda de los encabezados LET selec1 = "SELECT UNIQUE b.primer_enc,b.segundo_enc,b.tercer_enc,", "c.cod_mov,a.clase_mov ", "FROM notb00002 b,notb00008 a,notb00013 c ", "WHERE c.cod_mov_a = a.cod_mov and a.num_nomi ='", per_nomi.num_nomi, "' AND a.tipo_emp = '",per_nomi.tipo_emp,"' AND b.status_t is null and ", criterio CLIPPED, "AND b.cod_mov = c.cod_mov ORDER BY 4 " PREPARE comando FROM selec1 DECLARE accion CURSOR FOR comando LET idx = 1 FOREACH accion INTO j[idx].* IF j[idx].clase_mov = "I" or j[idx].clase_mov = "E" or j[idx].clase_mov = "P" THEN LET j[idx].no_columna = 1 END IF IF j[idx].clase_mov = "D" or j[idx].clase_mov = "S" or j[idx].clase_mov = "R" THEN LET j[idx].no_columna = 2 END IF LET f[idx].primer_enc = j[idx].primer_enc LET f[idx].segundo_enc = j[idx].segundo_enc LET f[idx].tercer_enc = j[idx].tercer_enc LET f[idx].cod_mov = j[idx].cod_mov LET f[idx].clase_mov = j[idx].clase_mov LET f[idx].no_columna = j[idx].no_columna LET f[idx].campo = f[idx].primer_enc CLIPPED IF f[idx].segundo_enc IS NOT NULL THEN LET f[idx].campo = f[idx].primer_enc,'_',f[idx].segundo_enc CLIPPED END IF LET idx = idx + 1 END FOREACH LET idx = idx - 1 # Validacion de colunnas de ingresos LET m = 1 FOR p = 1 TO idx IF f[p].no_columna = 1 THEN LET j[m].primer_enc = f[p].primer_enc LET j[m].segundo_enc = f[p].segundo_enc LET j[m].tercer_enc = f[p].tercer_enc LET j[m].cod_mov = f[p].cod_mov LET j[m].clase_mov = f[p].clase_mov LET j[m].no_columna = f[p].no_columna LET m = m + 1 END IF END FOR LET j[m].primer_enc = "________" LET j[m].segundo_enc = "|TOTAL |" LET j[m].tercer_enc = "|GANADO|" LET j[m].cod_mov = null LET j[m].no_columna = null LET m = m + 1 # Validacion de colunnas descuentos FOR p = 1 TO idx IF f[p].no_columna = 2 THEN LET j[m].primer_enc = f[p].primer_enc LET j[m].segundo_enc = f[p].segundo_enc LET j[m].tercer_enc = f[p].tercer_enc LET j[m].cod_mov = f[p].cod_mov LET j[m].clase_mov = f[p].clase_mov LET j[m].no_columna = f[p].no_columna LET m = m + 1 END IF END FOR LET j[m].primer_enc = "________" LET j[m].segundo_enc = "|TOTAL |" LET j[m].tercer_enc = "|DESC. |" LET j[m].cod_mov = null LET idx = m ## SE SELECCIONAN LOS CAMPOS NECESARIOS PARA EL REPORTE Y ## SE DECLARA EL CURSOR PARA BUSCAR LA INFORMACION SELECCIONADA LET selec1 = " SELECT a.num_emp,b.nom1_emp,b.nom2_emp,b.apell1_emp,", " b.apell2_emp,d.cod_mov,sum(a.cantidad),a.clase_mov,", " sum(a.valor),b.departamento,c.cuenta_no ", " FROM notb00008 a,adtb00003 b,notb00013 d,outer cgtb00002 c ", " WHERE a.num_nomi = '",per_nomi.num_nomi,"' AND a.tipo_emp = '", per_nomi.tipo_emp,"' AND ", " a.num_emp = b.num_emp AND ", " a.departamento = c.departamento AND ", " a.fecha between '", per_nomi.fecha_del,"' and '", per_nomi.fecha_al,"' AND ", " a.cod_mov not in (100,101,102,110) and ", " a.cod_mov = d.cod_mov_a AND ",criterio CLIPPED, " GROUP BY a.num_emp,b.nom1_emp,b.nom2_emp,b.apell1_emp,b.apell2_emp,d.cod_mov,a.clase_mov, ", "b.departamento,c.cuenta_no ", " ORDER BY a.num_emp,d.cod_mov" PREPARE comando2 FROM selec1 DECLARE accion1 CURSOR FOR comando2 IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14 ATTRIBUTE (REVERSE,BOLD) CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) CALL seleccionarsalida() RETURNING r_output CALL configureoutput(r_output) RETURNING handler START REPORT nomina_ing TO XML HANDLER handler ## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE ## SALIDA AL REPORTE FOREACH accion1 INTO imprime.* # Acumula el total de descuentos por empleado IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF IF imprime.clase_mov = "I" or imprime.clase_mov = "E" or imprime.clase_mov = "P" THEN LET imprime.no_columna = 1 END IF IF imprime.clase_mov = "D" or imprime.clase_mov = "S" THEN LET imprime.no_columna = 2 END IF # OUTPUT TO REPORT nomina_ing(imprime.*,per_nomi.num_nomi,per_nomi.tipo_emp, # per_nomi.fecha_del,per_nomi.fecha_al,nombre_mes,nombre_mes2) END FOREACH FINISH REPORT nomina_ing CLEAR SCREEN END FUNCTION ## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE REPORT nomina_ing(x,no_nomina,tipo,fecha1,fecha2,nombre,nombre2) DEFINE x RECORD num_emp LIKE notb00008.num_emp, nom1_emp LIKE adtb00003.nom1_emp, nom2_emp LIKE adtb00003.nom2_emp, apell1_emp LIKE adtb00003.apell1_emp, apell2_emp LIKE adtb00003.apell2_emp, cod_mov LIKE notb00008.cod_mov, cantidad LIKE notb00008.cantidad, clase_mov CHAR(1), valor LIKE notb00008.valor, departamento LIKE adtb00003.departamento, cuenta_no LIKE cgtb00002.cuenta_no, no_columna SMALLINT END RECORD ## DEFINICION DE LAS VARIABLES DE IMPRESION DEFINE nombre_depto CHAR(20) DEFINE doble_on CHAR(2) DEFINE doble_off CHAR(2) DEFINE negrillas_on CHAR(2) DEFINE negrillas_off CHAR(2) DEFINE comp_on CHAR(2) DEFINE comp_off CHAR(2) DEFINE doce CHAR(2) DEFINE normal CHAR(2) DEFINE hora CHAR(5) DEFINE fecha1,fecha2 DATE DEFINE segunda,tipo CHAR(1) DEFINE p_codigo,no_emp,k,h,n,ficha,no_nomina,l,cuenta_emp SMALLINT DEFINE nombre,nombre2,varia CHAR(11) DEFINE t_sal_hora,t_horas,sal_hora,horas DECIMAL(7,2) DEFINE t_salario1,salario,salario1 DECIMAL(8,2) DEFINE t_desc1,t_desc,neto,monto_desc,t_ganado,t_ganado_h,valor1, t_t_horas,t_t_valor_h,t_valor_h DECIMAL(10,2) DEFINE t_t_valor,t_t_neto,t_neto,t_t_Desc,t_t_ganado DECIMAL(12,2) OUTPUT ## DEFINICION DE LOS MARGENES DE IMPRESION TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 3 PAGE LENGTH 100 ORDER BY x.departamento,x.num_emp,x.no_columna,x.cod_mov FORMAT PAGE HEADER # LET doble_on = ASCII 14 # LET doble_off = ASCII 20 # LET negrillas_on = ASCII 27, ASCII 69 # LET negrillas_off = ASCII 27, ASCII 70 # LET comp_on = ASCII 27, ASCII 15 # LET comp_off = ASCII 18 # LET doce = ASCII 27, ASCII 77 # LET normal = ASCII 27, ASCII 80 LET hora = time ## ASIGNACION DEL TIPO DE NOMINA A IMPRIMIR IF tipo = "Q" THEN LET varia = "QUINCENALES" END IF IF tipo = "S" THEN LET varia = "SEMANALES" END IF IF tipo = "V" THEN LET varia = "VENDEDORES" END IF ## SE CALCULA LA LONGITUD DE LA VARIABLE -VARIA- LET l = (171 - LENGTH(varia))/2 LET l = (103 - LENGTH(p_companias.nombre CLIPPED))/2 ## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS PRINT COLUMN 1, doce,comp_on, COLUMN 2, "Nomina No.:", no_nomina,doble_on, COLUMN l, p_companias.nombre CLIPPED, doble_off, COLUMN 105," Pag. ",pageno using "###" PRINT COLUMN 2, "noprrp001", COLUMN 63, "Nomina Empleados ", COLUMN L, varia , COLUMN 145, today using "dd/mm/yy" PRINT COLUMN 42, "Nomina Regular del", COLUMN 62, DAY(fecha1) using "&&", COLUMN 66, "de", COLUMN 70, nombre clipped, COLUMN 83, "Al", COLUMN 87, DAY(fecha2) using "&&", COLUMN 91, nombre2 clipped, COLUMN 103, "de", COLUMN 107, YEAR(fecha2) using "####", COLUMN 145, time SKIP 1 LINE PRINT COLUMN 1, "--------------------------------------"; LET m = 36 FOR i = 1 to idx PRINT COLUMN m, "------------"; LET m = m + 12 END FOR PRINT COLUMN m, "-----------" # PRINT COLUMN 77, "Total"; LET m = 56 FOR i = 1 to idx PRINT COLUMN m, j[i].primer_enc; LET m = m + 11 END FOR PRINT " " LET m = 56 FOR i = 1 to idx PRINT COLUMN m, j[i].segundo_enc; LET m = m + 11 END FOR PRINT " " PRINT COLUMN 1, "Ficha", COLUMN 7, "Nombre"; LET m = 56 FOR i = 1 to idx PRINT COLUMN m, j[i].tercer_enc; LET m = m + 11 END FOR PRINT COLUMN m+3, "NETO" LET m = 56 FOR i = 1 TO idx PRINT COLUMN m, "(",j[i].cod_mov using "&&&",")"; LET m = m + 11 END FOR PRINT " " PRINT COLUMN 1, "-----------------------------------"; LET m = 36 FOR i = 1 to idx PRINT COLUMN m, "------------"; LET m = m + 12 END FOR PRINT COLUMN m, "--------------" SKIP 1 LINE ## AQUI SE INDICA LA IMPRESION DEL DETALLE BEFORE GROUP OF x.departamento LET t_sal_hora = 0 LET t_ganado = 0 LET t_desc = 0 LET t_neto = 0 LET t_horas = 0 LET t_valor_h = 0 LET cuenta_emp = 0 IF t_t_horas is null THEN LET t_t_horas = 0 END IF IF t_t_valor_h is null THEN LET t_t_valor_h = 0 END IF # Inicializacion del arreglo para los totales por departamentos FOR i = 1 TO idx LET totales[i] = 0 END FOR IF primera = "S" THEN FOR i = 1 TO idx LET tot_gral[i] = 0 END FOR LET primera = "N" END IF #-------------------------------------------------------------------------- IF t_t_ganado is null THEN LET t_t_ganado = 0 END IF IF t_t_desc is null THEN LET t_t_desc = 0 END IF IF t_t_neto is null THEN LET t_t_neto = 0 END IF BEFORE GROUP OF x.num_emp LET t_ganado_h = 0 LET neto = 0 LET valor1 = 0 LET sigue = "N" LET segunda = "S" LET p = 1 LET n = 38 LET t_desc1 = 0 LET sal_hora = 0 PRINT COLUMN 1, x.num_emp using "&&&&", COLUMN 7, x.nom1_emp clipped," ", x.apell1_emp clipped; ON EVERY ROW IF x.cod_mov = 1 THEN LET i = 1 IF x.cantidad is null THEN LET x.cantidad = 0 END IF IF x.cantidad > 0 THEN LET sal_hora = x.valor/x.cantidad END IF PRINT COLUMN n-3, sal_hora using "###.##", COLUMN n+7, x.cantidad USING "###.##"," ", COLUMN n+14, x.valor USING "###,###.##"; LET sigue = "S" LET t_sal_hora = t_sal_hora + sal_hora LET t_horas = t_horas + x.cantidad LET n = n + 25 LET totales[i] = totales[i] + x.valor LET tot_gral[i] = tot_gral[i] + x.valor # Acumulacion de los Ingresos IF x.clase_mov = "I" or x.clase_mov = "P" or x.clase_mov = "E" THEN LET t_ganado_h = t_ganado_h + x.valor END IF END IF IF sigue = "N" THEN LET sigue = "S" LET n = n + 13 END IF IF x.valor is null THEN LET x.valor = 0 END IF IF x.cod_mov > 1 THEN LET segunda = "N" IF j[i].cod_mov = x.cod_mov THEN # Este sum es porque el interes es un movimiento y hay que sumarlo con el # valor de la cuota IF x.cod_mov = 12 THEN SELECT valor INTO valor1 FROM notb00008 WHERE cod_mov = 110 and num_emp = x.num_emp and num_nomi = no_nomina and tipo_emp = tipo IF valor1 is null THEN LET valor1 = 0 END IF LET x.valor = x.valor + valor1 END IF LET totales[i] = totales[i] + x.valor LET tot_gral[i] = tot_gral[i] + x.valor # Acumulacion de los Ingresos IF x.clase_mov = "I" or x.clase_mov = "P" or x.clase_mov = "E" THEN LET t_ganado_h = t_ganado_h + x.valor END IF # Acumulacion de los descuentos IF x.clase_mov = "R" or x.clase_mov = "S" or x.clase_mov = "D" THEN LET t_desc1 = t_desc1 + x.valor END IF PRINT COLUMN n,x.valor USING "###,###.##"; ELSE FOR k = i TO idx IF j[k].cod_mov = x.cod_mov THEN IF x.cod_mov = 12 THEN SELECT valor INTO valor1 FROM notb00008 WHERE cod_mov = 110 and num_emp = x.num_emp and num_nomi = no_nomina and tipo_emp = tipo IF valor1 is null THEN LET valor1 = 0 END IF LET x.valor = x.valor + valor1 END IF PRINT COLUMN n,x.valor USING "###,###.##"; LET totales[k] = totales[k] + x.valor LET tot_gral[k] = tot_gral[k] + x.valor # Acumulacion de los Ingresos IF x.clase_mov = "I" or x.clase_mov = "P" or x.clase_mov = "E" THEN LET t_ganado_h = t_ganado_h + x.valor END IF # Acumulacion de los descuentos IF x.clase_mov = "R" or x.clase_mov = "S" or x.clase_mov = "D" THEN LET t_desc1 = t_desc1 + x.valor END IF LET i = k EXIT FOR ELSE IF j[k].cod_mov is not null THEN PRINT COLUMN n,0 USING "###,###.##"; LET totales[k] = totales[k] + 0 LET tot_gral[k] = tot_gral[k] + 0 END IF LET n = n + 11 LET p = p + 1 END IF END FOR END IF LET p = p + 1 LET n = n+11 END IF LET i = i + 1 AFTER GROUP OF x.no_columna IF segunda = "S" THEN LET n = n - 11 FOR k = 1 TO idx IF j[k].no_columna = x.no_columna THEN IF j[k].cod_mov != 1 THEN IF j[k].cod_mov is not null THEN PRINT COLUMN n,0 USING "###,###.##"; LET totales[k] = totales[k] + 0 LET tot_gral[k] = tot_gral[k] + 0 LET i = k + 1 END IF END IF LET n = n + 11 LET p = p + 1 END IF END FOR END IF IF x.no_columna = 1 THEN PRINT COLUMN n,"|", t_ganado_h USING "###,###.##","|"; LET totales[i] = totales[i] + t_ganado_h LET tot_gral[i] = tot_gral[i] + t_ganado_h END IF AFTER GROUP OF x.num_emp IF no_emp is null THEN LET no_emp = 0 END IF LET no_emp = no_emp + 1 LET cuenta_emp = cuenta_emp + 1 IF t_neto IS NULL THEN LET t_neto = 0 END IF IF t_ganado_h is null THEN LET t_ganado_h = 0 END IF IF t_desc1 is null THEN LET t_desc1 = 0 END IF LET neto = t_ganado_h + t_desc1 IF p = idx THEN PRINT COLUMN n+1,"|", t_desc1 using "###,###.##","|"; PRINT COLUMN n+11, neto USING "(((,((#.##)" END IF IF p != idx THEN LET p = idx - p LET p = (i + p) - 1 FOR k = i TO p IF j[k].cod_mov is not null THEN PRINT COLUMN n, 0 using "###,###.##"," "; LET totales[k] = totales[k] + 0 LET tot_gral[k] = tot_gral[k] + 0 LET n = n + 11 END IF END FOR PRINT COLUMN n,"|", t_desc1 using "###,###.##","|"; PRINT COLUMN n+11, neto USING "(((,((#.##)" END IF LET t_ganado = t_ganado + t_ganado_h LET t_desc = t_desc + t_desc1 LET t_neto = t_neto + neto AFTER GROUP OF x.departamento IF o is null THEN LET o = 1 END IF #------------------------------------------------------------------------------- SELECT nom_dpto INTO nombre_depto FROM adtb00001 WHERE departamento = x.departamento IF status = notfound THEN LET status = 0 END IF PRINT negrillas_on # Impresion de los totales de los departamentos PRINT COLUMN 4,x.departamento USING "#####"," ",nombre_depto; IF t_t_valor is null THEN LET t_t_valor = 0 END IF PRINT COLUMN 35, t_sal_hora using "###.##", COLUMN 43, t_horas using "#,###.##"; LET t_t_horas = t_t_horas + t_sal_hora LET t_t_valor_h = t_t_valor_h + t_horas LET m = 38 LET sigue = "N" IF j[1].cod_mov = 1 THEN LET m = m + 15 LET sigue = "S" END IF IF sigue = "N" THEN LET m = m + 15 END IF LET idx = idx - 1 LET m = m - 1 FOR i= 1 TO idx PRINT COLUMN m, totales[i] using "#,###,###.##"; LET m = m + 11 END FOR LET idx = idx + 1 PRINT COLUMN n+1, t_desc using "#,###,###.##"," ", t_neto using "#,###,###.##" PRINT negrillas_off # NUMERO DE EMPLEADOS PRINT COLUMN 4, "NO. EMPLEADOS DEPTO: ",cuenta_emp USING "####" PRINT " " # Acumulacion de Totales generales LET t_t_ganado = t_t_ganado + t_ganado LET t_t_desc = t_t_desc + t_desc LET t_t_neto = t_t_neto + t_neto ON LAST ROW PRINT negrillas_on PRINT COLUMN 4, "Total General ", COLUMN 33, t_t_horas USING "#,###.##", COLUMN 42, t_t_valor_h using "##,###.##"; LET t_t_horas = 0 LET t_t_valor_h = 0 LET m = 38 LET sigue = "N" IF j[1].cod_mov = 1 THEN LET m = m + 14 LET sigue = "S" END IF IF sigue = "N" THEN LET m = m + 14 END IF LET idx = idx - 1 FOR i= 1 TO idx PRINT COLUMN m, tot_gral[i] using "###,###.##"; LET m = m + 11 END FOR IF t_t_desc < 0 THEN LET t_t_desc = t_t_desc * -1 END IF LET t_t_neto = t_t_ganado - t_t_desc PRINT COLUMN m,t_t_desc using "###,###.##"," ", t_t_neto using "####,###.##", negrillas_off PRINT COLUMN 4, "Total Empleados ", no_emp using "<<<" LET t_t_ganado = 0 LET t_t_desc = 0 LET t_t_neto = 0 LET no_emp = 0 PRINT COLUMN 1,normal,comp_off END REPORT