Files
MBS/PROYECTO/cgdir/cgprcs002.4gl
T

232 lines
6.2 KiB
Plaintext

{
-----------------------------------------------------------------------------
PROGRAMA : CGPRCS002
OBJETIVO : Consulta de Transaciones
REALIZADO POR : Ing. Tadeo A. Ferreras
FECHA : Febrero 22, 1994.
-----------------------------------------------------------------------------
}
GLOBALS "cgprgb000.4gl"
DEFINE balance2 DECIMAL(12,2)
DEFINE cuenta1 RECORD
fecha DATE,
ref CHAR(14),
cod_aux SMALLINT,
cod_sec SMALLINT,
departamento SMALLINT,
debito DECIMAL(12,2),
credito DECIMAL(12,2)
END RECORD
DEFINE cuenta2 DYNAMIC ARRAY OF RECORD
fecha DATE,
detalle CHAR(23),
departamento SMALLINT,
debito DECIMAL(12,2),
credito DECIMAL(12,2),
balance1 DECIMAL(12,2)
END RECORD
DEFINE recibo1 RECORD
cuenta_no CHAR(8),
descripcion CHAR(30),
balance DECIMAL(12,2)
END RECORD
DEFINE fecha1,fecha2 DATE
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_compania.* FROM companias a
CALL cgprcs002()
END MAIN
###### Funcion que adiciona informacion referente a la aplicacion de un pago
FUNCTION cgprcs002()
DEFINE porc_p DECIMAL(10,2)
DEFINE emp SMALLINT
DEFINE hoy DATE
OPTIONS
FORM LINE 8,
ERROR LINE 24,
COMMENT LINE 22,
PROMPT LINE 23
CALL pantalla()
OPEN FORM cgfmcs002 FROM "cgfmcs002"
DISPLAY FORM cgfmcs002
DISPLAY "cgprcs002" AT 4,3
DISPLAY "Transacciones" AT 6,33
DISPLAY "<CTRL-C> CANCELA OPERACION" AT 2,5 ATTRIBUTE (BOLD)
LET int_flag = FALSE
INPUT BY NAME fecha1,fecha2
AFTER FIELD fecha1
IF fecha1 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha1
END IF
AFTER FIELD fecha2
IF fecha2 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha2
END IF
IF fecha1 > fecha2 THEN
LET numero_msg = 149
CALL msg(numero_msg)
NEXT FIELD fecha1
END IF
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
CONSTRUCT criterio ON a.cuenta_no FROM cuenta_no
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET selec =
"SELECT UNIQUE a.cuenta_no,b.descripcion ",
"FROM cgtb00004 a,cgtb00001 b ",
"WHERE a.cuenta_no = b.cuenta_no AND a.status_t IS NULL AND ",
" b.status_t IS NULL AND a.fecha BETWEEN ? AND ? AND ",
criterio CLIPPED," ORDER BY 1 "
PREPARE comando FROM selec
DECLARE busca SCROLL CURSOR FOR comando
OPEN busca USING fecha1,fecha2
FETCH FIRST busca INTO recibo1.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL buscando()
MENU "Opcion"
COMMAND "Siguiente"
FETCH NEXT busca INTO recibo1.*
IF STATUS = NOTFOUND THEN
FETCH LAST busca INTO recibo1.*
CALL buscando()
LET numero_msg = 5
CALL msg(numero_msg)
END IF
CALL buscando()
COMMAND "Anterior"
FETCH PREVIOUS busca INTO recibo1.*
IF STATUS = NOTFOUND THEN
FETCH FIRST busca INTO recibo1.*
CALL buscando()
LET numero_msg = 5
CALL msg(numero_msg)
END IF
CALL buscando()
COMMAND "Primero"
FETCH FIRST busca INTO recibo1.*
CALL buscando()
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Ultimo"
FETCH LAST busca INTO recibo1.*
CALL buscando()
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Ver"
DECLARE busca1 SCROLL CURSOR FOR
SELECT a.fecha,a.ref,a.cod_aux,a.cod_sec,a.departamento,
a.debito,a.credito
FROM cgtb00004 a
WHERE a.fecha BETWEEN fecha1 AND fecha2 AND a.status_t IS NULL AND
a.cuenta_no = recibo1.cuenta_no ORDER BY 1,2
OPEN busca1
LET balance2 = recibo1.balance
LET idx = 1
WHILE STATUS != NOTFOUND
FETCH ABSOLUTE idx busca1 INTO cuenta1.*
IF STATUS = NOTFOUND THEN
EXIT WHILE
END IF
IF cuenta1.debito IS NULL THEN
LET cuenta1.debito = 0
END IF
IF cuenta1.credito IS NULL THEN
LET cuenta1.credito = 0
END IF
LET cuenta2[idx].fecha = cuenta1.fecha
LET cuenta2[idx].detalle = cuenta1.ref," ",
cuenta1.cod_aux USING "&&","-",
cuenta1.cod_sec USING "&&&&"
LET cuenta2[idx].departamento = cuenta1.departamento
LET cuenta2[idx].debito = cuenta1.debito
LET cuenta2[idx].credito = cuenta1.credito
LET cuenta2[idx].balance1 = balance2 + (cuenta2[idx].debito -
cuenta2[idx].credito)
LET balance2 = cuenta2[idx].balance1
LET idx = idx + 1
END WHILE
CALL SET_COUNT(idx - 1)
DISPLAY ARRAY cuenta2 TO s_cuenta2.*
LET curr = arr_curr()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
COMMAND "Retornar"
EXIT MENU
END MENU
END FUNCTION
FUNCTION buscando()
SELECT SUM(a.debito-a.credito) INTO recibo1.balance FROM cgtb00004 a
WHERE a.cuenta_no = recibo1.cuenta_no AND a.status_t IS NULL AND
a.fecha < fecha1
IF recibo1.balance IS NULL THEN
LET recibo1.balance = 0
END IF
DISPLAY BY NAME recibo1.*
END FUNCTION