Files
2026-09-22 20:38:51 -04:00

362 lines
11 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : NOPRRP015
OBJETIVO : LISTAR LOS PRESTAMOS DE COOPERATIVA
PROGRAMADOR : Ing. Betania Guerrero Perez
FECHA REALIZACION : Septiembre 03, 1993
-------------------------------------------------------------------------------
}
GLOBALS "noprgb000.4gl"
FUNCTION noprrp015()
## DEFINICION DEL REGISTRO DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
DEFINE salir CHAR(1)
DEFINE acumula RECORD
cod_mov LIKE notb00008.cod_mov,
num_emp LIKE notb00008.num_emp,
valor DECIMAL(12,2)
END RECORD
DEFINE cooper RECORD
num_emp LIKE notb00008.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.apell1_emp,
tipo_emp LIKE notb00008.tipo_emp,
cod_mov LIKE notb00008.cod_mov,
descrip_mov LIKE notb00002.descrip_mov,
clase_mov LIKE notb00008.clase_mov,
balance DECIMAL(10,2),
valor LIKE notb00008.valor,
num_nomi LIKE notb00008.num_nomi,
fecha_al LIKE notb00010.fecha_al
END RECORD
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
CLEAR SCREEN
OPEN FORM nofmrp015 FROM "nofmrp015"
DISPLAY FORM nofmrp015
CALL pantalla()
DISPLAY "noprrp015" AT 4,3
DISPLAY "Descuentos de Cooperativa" AT 6,27
## 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 = 1
CALL msgrp000(tipo_papel)
## AQUI SE INDICA EL CRITERIO DE BUSQUEDA DEL REPORTE
INPUT BY NAME cooper.num_nomi,cooper.tipo_emp
AFTER INPUT
IF cooper.num_nomi is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_nomi
END IF
IF cooper.tipo_emp is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_emp
END IF
SELECT fecha_al INTO cooper.fecha_al FROM notb00010
WHERE num_nomi = cooper.num_nomi and
tipo_emp = cooper.tipo_emp
EXIT INPUT
END INPUT
CONSTRUCT criterio ON a.cod_mov
FROM cod_mov
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET selec1 =
"SELECT a.cod_mov,a.num_emp,sum(a.valor) FROM notb00008 a ",
"WHERE ",criterio clipped," and a.fecha <= ? ",
"GROUP BY 1,2 ORDER BY 1,2"
PREPARE comando1 FROM selec1
DECLARE busca SCROLL CURSOR FOR comando1
OPEN busca USING cooper.fecha_al
DISPLAY "Buscando Acumulados ... Espere Por Favor" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
## SE SELECCIONAN LOS CAMPOS NECESARIOS PARA EL REPORTE
LET SELEC =
"SELECT UNIQUE a.num_emp,b.departamento,b.nivel_emp,b.cod_puesto, ",
" b.nom1_emp,b.apell1_emp, ",
" a.tipo_emp,a.cod_mov,c.descrip_mov,c.clase_mov ",
" FROM adtb00003 b,notb00008 a,notb00002 c ",
" WHERE a.num_emp = b.num_emp AND a.tipo_emp = b.nomina AND ",
" a.cod_mov = c.cod_mov AND a.fecha <= ? AND ",
" a.tipo_emp = ? and ",
" a.status_t is null AND ",criterio clipped," ORDER BY 9,1,2,3,4"
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)
## SE PREPARA LA INFORMACION SELECCIONADA
PREPARE comando FROM selec
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
## SE DECLARA EL CURSOR PARA BUSCAR LA INFORMACION SELECCIONADA
DECLARE accion CURSOR FOR comando
OPEN accion USING cooper.fecha_al,cooper.tipo_emp
DISPLAY " " AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
START REPORT prestamo TO "C:\\archivo"
## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE
## SALIDA AL REPORTE
WHILE status != notfound
FETCH accion INTO cooper.*
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 salir = "N"
LET idx = 1
WHILE salir != "S"
FETCH ABSOLUTE idx busca INTO acumula.*
IF status = notfound THEN
LET idx = 1
EXIT WHILE
END IF
LET idx = idx + 1
LET cooper.balance = 0
IF acumula.num_emp = cooper.num_emp and
acumula.cod_mov = cooper.cod_mov THEN
LET cooper.balance = acumula.valor
LET idx = 1
EXIT WHILE
END IF
END WHILE
OUTPUT TO REPORT prestamo(cooper.*)
END WHILE
FINISH REPORT prestamo
CLEAR SCREEN
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
REPORT prestamo(x)
DEFINE x RECORD
num_emp LIKE notb00008.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.apell1_emp,
tipo_emp LIKE notb00008.tipo_emp,
cod_mov LIKE notb00008.cod_mov,
descrip_mov LIKE notb00002.descrip_mov,
clase_mov LIKE notb00008.clase_mov,
balance DECIMAL(10,2),
valor LIKE notb00008.valor,
num_nomi LIKE notb00008.num_nomi,
fecha_al LIKE notb00010.fecha_al
END RECORD
## DEFINICION DE LAS VARIABLES DE IMPRESION
DEFINE t_interes,interes DECIMAL(8,2)
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 valor1,total,total1,balance DECIMAL(10,2)
DEFINE l smallint
DEFINE varia CHAR(30)
OUTPUT
## DEFINICION DE LOS MARGENES DE IMPRESION
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 3
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 15
LET comp_off = ASCII 18
LET doce = ASCII 27, ASCII 77
LET normal = ASCII 27, ASCII 80
LET hora = time
LET varia = x.descrip_mov
## SE CALCULA LA LONGITUD DE LA VARIABLE -VARIA-
LET l = (80 - LENGTH(p_companias.nombre CLIPPED))/2
## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS
PRINT COLUMN 1, normal,negrillas_on
PRINT COLUMN 1, "noprrp015",
COLUMN l, p_companias.nombre CLIPPED,
COLUMN 73, "Pag. ",pageno using "###"
PRINT COLUMN 29, "Descuentos Cooperativa",
COLUMN 73, today using "dd/mm/yy"
LET l = (80 - LENGTH(varia CLIPPED))/2
PRINT COLUMN l, varia CLIPPED,
COLUMN 73, hora
SKIP 1 LINE
## SE IMPRIME EL NUMERO DE NOMINA Y LA FECHA
PRINT COLUMN 1, negrillas_on,
COLUMN 4, "Nomina No.: ",x.num_nomi using "<<<<",
" Al: ",x.fecha_al using "dd/mm/yy",
negrillas_off
## SE SELECCIONA EL TIPO DE NOMINA A IMPRIMIR
IF x.tipo_emp = "Q" THEN
LET descr = "QUINCENAL"
ELSE
IF x.tipo_emp = "V" THEN
LET descr = "VENDEDOR"
ELSE
LET descr = "SEMANAL"
END IF
END IF
PRINT doce
PRINT COLUMN 1, negrillas_on,
COLUMN 4, descr,
COLUMN 15, negrillas_off
PRINT COLUMN 2, "---------------------------------------------------",
"-------------------------------------------"
PRINT COLUMN 4, "Codigo No.",
COLUMN 23, "Nombre",
COLUMN 53, "Valor",
COLUMN 61, "Interes",
COLUMN 74, "Balance"
PRINT COLUMN 2, "----------------------------------------------------",
"------------------------------------------"
## SE INDICA EL SALTO DE PAGINA CUANDO SE IMPRIMEN TODOS LOS MOVIMIENTOS
BEFORE GROUP OF x.cod_mov
SKIP TO TOP OF PAGE
LET total1 = 0
LET total = 0
LET t_interes = 0
BEFORE GROUP OF x.num_emp
LET balance = 0
LET valor1 = 0
# Busca La cuota de la nomina aqui ya que en el SELECT principal se busca
# pero no es confiable
SELECT valor INTO x.valor FROM notb00008
WHERE num_emp = x.num_emp and num_nomi = x.num_nomi and
tipo_emp = x.tipo_emp and cod_mov = x.cod_mov
IF status = notfound THEN
LET status = 0
END IF
IF x.valor is null THEN
LET x.valor = 0
END IF
# BUSQUEDA DEL INTERES COBRADO EN LA NOMINA ESPECIFICADA
LET interes = 0
SELECT valor INTO interes FROM notb00008
WHERE num_emp = x.num_emp and num_nomi = x.num_nomi and
tipo_emp = x.tipo_emp and cod_mov = 110
IF status = notfound THEN
LET status = 0
END IF
IF interes is null THEN
LET interes = 0
END IF
## AQUI SE CALCULAN LOS TOTALES GENERALES
IF total1 IS NULL THEN
LET total1 = 0
END IF
LET total1 = total1 + x.valor
IF total IS NULL THEN
LET total = 0
END IF
LET total = total + x.balance
## AQUI COMIENZA LA IMPRESION DEL DETALLE
IF x.valor != 0 OR x.balance > 0 THEN
PRINT COLUMN 4, x.num_emp using "&&&&","-",
x.departamento using "&&&&","-",
x.nivel_emp using "&&","-", x.cod_puesto using "&&",
" ",x.nom1_emp clipped," ",x.apell1_emp clipped,
COLUMN 52, x.valor using "##,###.##",
COLUMN 62, interes using "###.##",
COLUMN 69, x.balance using "#,###,###.##"
LET t_interes = t_interes + interes
END IF
## AQUI SE IMPRIMEN LOS TOTALES GENERALES
AFTER GROUP OF x.cod_mov
SKIP 2 LINES
PRINT COLUMN 1, negrillas_on,
COLUMN 8, "TOTAL GENERAL",
COLUMN 51, total1 using "###,###.##",
COLUMN 62, t_interes using "###.##",
COLUMN 69, total using "#,###,###.##"
PRINT COLUMN 18, negrillas_off
END REPORT