Files

254 lines
7.6 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : CPPRCS001
OBJETIVO : Estado De Cuentas
PROGRAMADOR : Tadeo A. Ferreras
FECHA REALIZACION : Junio 16, 1993
-------------------------------------------------------------------------------
}
GLOBALS "cpprgb000.4gl"
DEFINE fecha DATE
DEFINE valor4,valor2,balance4,balance3,p_valor,p_monto DECIMAL(12,2)
DEFINE mov CHAR(1)
DEFINE direccion CHAR(30)
DEFINE provincia CHAR(3)
DEFINE tipo CHAR(1)
DEFINE idx_1, idx_2, idx_3 SMALLINT
DEFINE salir, salir1, salir3, tipo_venta CHAR(1)
DEFINE selec5, selec6 CHAR(1500)
DEFINE cuenta1 RECORD
fecha_inicial DATE,
fecha_final DATE,
cod_sp LIKE cptb00001.cod_sp,
cod_sp_sec LIKE cptb00001.cod_sp_sec,
nom_sp LIKE cotb00001.nom_sp,
direccion CHAR(30),
ciu_sp CHAR(30),
prima DECIMAL(5,2),
balance DECIMAL(12,2)
END RECORD
DEFINE cuenta2 ARRAY[1000] OF RECORD
num_doc LIKE cptb00001.num_doc,
tipo_doc LIKE cptb00001.tipo_doc,
fecha_orig LIKE cptb00001.fecha_orig,
aplica_a CHAR(13),
debito DECIMAL(12,2),
credito DECIMAL(12,2),
balance1 DECIMAL(12,2)
END RECORD
DEFINE busca_d RECORD
num_doc LIKE cptb00001.num_doc,
tipo_doc LIKE cptb00001.tipo_doc,
fecha_orig LIKE cptb00001.fecha_orig,
aplica_a LIKE cptb00001.aplica_a,
valor DECIMAL(12,2)
END RECORD
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_companias.* FROM companias a
CALL cpprcs001()
END MAIN
FUNCTION cpprcs001()
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM cpfmcs001 FROM "cpfmcs001"
DISPLAY FORM cpfmcs001
#CALL pantalla()
#DISPLAY "cpprcs001" AT 4,3
#DISPLAY "Estado de Cuenta" AT 6,31
LABEL volvera:
INPUT BY NAME cuenta1.* WITHOUT DEFAULTS
AFTER FIELD fecha_inicial
IF cuenta1.fecha_inicial is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_inicial
END IF
BEFORE FIELD fecha_final
LET cuenta1.fecha_final = today
AFTER FIELD fecha_final
IF cuenta1.fecha_final is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_final
END IF
IF cuenta1.fecha_final < cuenta1.fecha_inicial THEN
LET numero_msg = 86
CALL msg(numero_msg)
NEXT FIELD fecha_final
END IF
AFTER FIELD cod_sp
IF cuenta1.cod_sp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_sp
END IF
AFTER FIELD cod_sp_sec
IF cuenta1.cod_sp_sec IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_sp_sec
END IF
SELECT MIN(a.fecha_orig) INTO fecha FROM cptb00001 a
WHERE a.cod_sp = cuenta1.cod_sp AND a.cod_sp_sec = cuenta1.cod_sp_sec AND
a.status_t IS NULL
IF cuenta1.fecha_inicial < fecha THEN
LET cuenta1.fecha_inicial = fecha
DISPLAY BY NAME cuenta1.fecha_inicial
END IF
SELECT a.nom_sp,a.dir_sp,a.ciu_sp
INTO cuenta1.nom_sp,cuenta1.direccion,cuenta1.ciu_sp
FROM cotb00001 a
WHERE a.cod_sp = cuenta1.cod_sp AND a.cod_sp_sec = cuenta1.cod_sp_sec AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_sp
END IF
DISPLAY BY NAME cuenta1.nom_sp,cuenta1.direccion,cuenta1.ciu_sp
BEFORE FIELD prima
DISPLAY "Buscando Balance Inicial... Espere" AT 23,1 ATTRIBUTE (BOLD)
SELECT sum(a.valor) INTO valor4 FROM cptb00001 a
WHERE a.status_t is null and a.fecha_proc < cuenta1.fecha_inicial
and a.cod_sp = cuenta1.cod_sp and a.cod_sp_sec = cuenta1.cod_sp_sec
AND a.tipo_doc = "CP" AND a.aplica_a IS NULL
SELECT sum(a.valor) INTO valor2 FROM cptb00001 a
WHERE a.status_t is null and a.fecha_proc < cuenta1.fecha_inicial
and a.cod_sp = cuenta1.cod_sp and a.cod_sp_sec = cuenta1.cod_sp_sec
AND a.tipo_doc != "CP"
LET cuenta1.balance = valor2 - (valor4 * -1)
IF cuenta1.balance IS NULL THEN
LET cuenta1.balance = 0
END IF
IF STATUS = NOTFOUND THEN
LET cuenta1.balance = 0
END IF
AFTER FIELD prima
IF cuenta1.prima is not null THEN
LET cuenta1.balance = cuenta1.balance * cuenta1.prima
END IF
DISPLAY " " AT 23,1 ATTRIBUTE (BOLD)
LET fecha = cuenta1.fecha_inicial
DISPLAY BY NAME cuenta1.balance
AFTER INPUT
IF cuenta1.cod_sp = 23 THEN
LET cuenta1.prima = null
EXIT INPUT
DISPLAY BY NAME cuenta1.prima
END IF
EXIT INPUT
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
DECLARE buscar CURSOR FOR
SELECT a.num_doc,a.tipo_doc,a.fecha_orig,a.aplica_a,a.valor
FROM cptb00001 a
WHERE a.status_t IS NULL AND a.cod_sp = cuenta1.cod_sp AND
a.cod_sp_sec = cuenta1.cod_sp_sec AND
a.fecha_orig BETWEEN cuenta1.fecha_inicial AND cuenta1.fecha_final
ORDER BY 4,3,1
DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 24,14
ATTRIBUTE (REVERSE,BOLD)
DISPLAY " " AT 24,14
LET idx_1 = 0
FOREACH buscar INTO busca_d.*
IF STATUS = NOTFOUND THEN
EXIT FOREACH
END IF
IF busca_d.tipo_doc = "CP" AND busca_d.aplica_a IS NOT NULL THEN
LET busca_d.valor = 0
END IF
IF cuenta1.prima is not null AND cuenta1.prima > 0 THEN
LET busca_d.valor = busca_d.valor * cuenta1.prima
END IF
IF cuenta1.balance IS NULL THEN
LET cuenta1.balance = 0
END IF
IF busca_d.valor IS NULL THEN
LET busca_d.valor = 0
END IF
IF busca_d.valor IS NOT NULL THEN
LET idx_1 = idx_1 + 1
LET cuenta2[idx_1].num_doc = busca_d.num_doc
LET cuenta2[idx_1].tipo_doc = busca_d.tipo_doc
LET cuenta2[idx_1].fecha_orig = busca_d.fecha_orig using "dd/mm/yy"
IF busca_d.valor > 0 THEN
LET cuenta2[idx_1].credito = busca_d.valor USING "###,###,###.##"
LET cuenta2[idx_1].debito = 0
ELSE
LET cuenta2[idx_1].debito = busca_d.valor USING "###,###,###.##"
LET cuenta2[idx_1].credito = 0
END IF
LET cuenta1.balance = cuenta1.balance + busca_d.valor
LET cuenta2[idx_1].balance1 = cuenta1.balance
IF busca_d.aplica_a IS NOT NULL THEN
LET cuenta2[idx_1].aplica_a = "FT-",busca_d.aplica_a clipped
END IF
#LET idx_1 = idx_1 + 1
END IF
END FOREACH
CALL SET_COUNT(idx_1)
DISPLAY ARRAY cuenta2 TO cuenta.*
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
CLEAR FORM
GOTO volvera
END FUNCTION