Files
MBS/PROYECTO/tedir/teprrp010.4gl
T

525 lines
20 KiB
Plaintext

{
==============================================================================
PROGRAMA : TEPRRP010
SISTEMA : Sistema de Tesoreria
Objetivo : Analisis del Cash Flow Real Comparativo
PROGRAMADOR : Tadeo A. Ferreras
FECHA : Diciembre 08, 1995
==============================================================================
}
GLOBALS
"teprgb000.4gl"
DEFINE datos_10 RECORD
codigo INTEGER,
descripcion CHAR(30),
tipo CHAR(2),
ano INTEGER,
mes INTEGER,
fecha1 DATE,
fecha2 DATE,
monto1 DECIMAL(12,4),
monto2 DECIMAL(12,4),
monto3 DECIMAL(12,4),
tipo1 CHAR(1)
END RECORD
DEFINE fecha_inicial,fecha_final DATE
DEFINE d,i,c,ano,ano2,mes,mes_2 INTEGER
DEFINE tasa DECIMAL(12,4)
DEFINE balance,balance1,balance2 INTEGER
DEFINE total_ig ARRAY[12] OF DECIMAL(12,4)
DEFINE total_ig1 ARRAY[12] OF DECIMAL(12,4)
DEFINE total_di ARRAY[12] OF DECIMAL(12,4)
DEFINE total_di1 ARRAY[12] OF DECIMAL(12,4)
DEFINE total_dl ARRAY[12] OF DECIMAL(12,4)
DEFINE total_dl1 ARRAY[12] OF DECIMAL(12,4)
DEFINE balan ARRAY[12] OF DECIMAL(12,4)
DEFINE balan1 ARRAY[12] OF DECIMAL(12,4)
FUNCTION teprrp010()
LET int_flag = FALSE
OPTIONS
FORM LINE 8
OPEN FORM tefmrp010 FROM "tefmrp010"
DISPLAY FORM tefmrp010
DISPLAY "teprrp010" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Cash Flow Real Comparativo (Periodo de 3 Anos)" AT 6,17 ATTRIBUTE(BLACK)
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
CALL defecto(impresor) RETURNING imprime,letras.*,archivo
INPUT BY NAME ano,mes,tasa
ON KEY(CONTROL-P)
CALL busca_printer() RETURNING imprime,letras.*,archivo
AFTER FIELD ano
IF ano IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ano
END IF
LET ano2 = ano - 2
AFTER FIELD mes
IF mes IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD mes
END IF
AFTER FIELD tasa
IF tasa IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tasa
END IF
END INPUT
LET parametro = "D"
CALL elijeimpresion(parametro) RETURNING orden,destino,letras.*
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
SELECT a.valor/1000 INTO balance2 FROM tetb00007 a
WHERE a.ano = ano - 3
SELECT a.valor/1000 INTO balance1 FROM tetb00007 a
WHERE a.ano = ano - 2
SELECT a.valor/1000 INTO balance FROM tetb00007 a
WHERE a.ano = ano - 1
IF balance IS NULL THEN
LET balance = 0
END IF
IF balance1 IS NULL THEN
LET balance1 = 0
END IF
IF balance2 IS NULL THEN
LET balance2 = 0
END IF
FOR idx = 1 TO 12
LET total_ig[idx] = 0
LET total_ig1[idx] = 0
LET total_di[idx] = 0
LET total_di1[idx] = 0
LET total_dl[idx] = 0
LET total_dl1[idx] = 0
END FOR
LET selec =
"SELECT UNIQUE a.codigo,a.descripcion,a.tipo,b.ano,b.mes, ",
" b.fecha_inicio,b.fecha_corte ",
"FROM tetb00003 a,prdtable b ",
"WHERE (a.status_t IS NULL) AND (b.ano BETWEEN ? AND ?) AND ",
" (b.mes = ?) "
DISPLAY "<<<Buscando Informacion... Espere por Favor>>>" AT 19,14
ATTRIBUTE(BLUE)
PREPARE comando FROM selec
DECLARE busco CURSOR FOR comando
OPEN busco USING ano2,ano,mes
START REPORT reporte_10 TO archivo
DISPLAY "<<<Reporte Generandose... Espere por Favor>>>" AT 19,14
ATTRIBUTE(BLUE)
WHILE status != NOTFOUND
FETCH busco INTO datos_10.*
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
DISPLAY datos_10.tipo AT 21,30
IF datos_10.tipo = "IG" THEN
LET datos_10.tipo1 = "A"
END IF
IF datos_10.tipo = "DI" THEN
LET datos_10.tipo1 = "B"
END IF
IF datos_10.tipo = "DL" THEN
LET datos_10.tipo1 = "C"
END IF
LET datos_10.monto1 = 0
IF datos_10.ano = ano THEN
CASE
WHEN datos_10.codigo = 1
SELECT SUM(a.monto/1000) INTO datos_10.monto1 FROM tetb00001 a
WHERE (a.status_t IS NULL) AND (a.procedencia IN (1,7)) AND
(a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2)
EXIT CASE
WHEN datos_10.codigo = 2
SELECT SUM(a.monto/1000) INTO datos_10.monto1 FROM tetb00001 a
WHERE (a.status_t IS NULL) AND (a.procedencia = 2) AND
(a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2)
EXIT CASE
WHEN datos_10.codigo = 3
SELECT SUM(a.monto/1000) INTO datos_10.monto1 FROM tetb00001 a
WHERE (a.status_t IS NULL) AND (a.procedencia = 3) AND
(a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2)
EXIT CASE
WHEN datos_10.codigo = 4
SELECT SUM(a.monto/1000) INTO datos_10.monto1 FROM tetb00001 a
WHERE (a.status_t IS NULL) AND (a.procedencia = 4) AND
(a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2)
EXIT CASE
WHEN datos_10.codigo = 22
SELECT SUM(a.valor/1000) INTO datos_10.monto1 FROM tetb00004 a
WHERE (a.status_t IS NULL) AND (a.codigo=datos_10.codigo) AND
(a.ano = datos_10.ano AND a.mes = datos_10.mes)
EXIT CASE
OTHERWISE
SELECT SUM(a.monto/1000) INTO datos_10.monto1
FROM cgtb00005 a,tetb00006 b
WHERE a.cheque_no = b.cheque_no AND
a.status_t = "C" AND
a.cuenta_no = b.banco AND
b.codigo = datos_10.codigo AND
a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2
EXIT CASE
END CASE
ELSE
SELECT SUM(a.valor_real/1000) INTO datos_10.monto1
FROM tetb00005 a
WHERE (a.status_t IS NULL) AND (a.codigo = datos_10.codigo) AND
(a.ano = datos_10.ano AND a.mes = datos_10.mes)
END IF
IF datos_10.ano = ano - 1 THEN
CASE
WHEN datos_10.codigo = 1
SELECT SUM(a.monto/1000) INTO datos_10.monto2 FROM tetb00001 a
WHERE (a.status_t IS NULL) AND (a.procedencia IN (1,7)) AND
(a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2)
EXIT CASE
WHEN datos_10.codigo = 2
SELECT SUM(a.monto/1000) INTO datos_10.monto2 FROM tetb00001 a
WHERE (a.status_t IS NULL) AND (a.procedencia = 2) AND
(a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2)
EXIT CASE
WHEN datos_10.codigo = 3
SELECT SUM(a.monto/1000) INTO datos_10.monto2 FROM tetb00001 a
WHERE (a.status_t IS NULL) AND (a.procedencia = 3) AND
(a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2)
EXIT CASE
WHEN datos_10.codigo = 4
SELECT SUM(a.monto/1000) INTO datos_10.monto2 FROM tetb00001 a
WHERE (a.status_t IS NULL) AND (a.procedencia = 4) AND
(a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2)
EXIT CASE
WHEN datos_10.codigo = 22
SELECT SUM(a.valor/1000) INTO datos_10.monto2 FROM tetb00004 a
WHERE (a.status_t IS NULL) AND (a.codigo=datos_10.codigo) AND
(a.ano = datos_10.ano AND a.mes = datos_10.mes)
EXIT CASE
OTHERWISE
SELECT SUM(a.monto/1000) INTO datos_10.monto2
FROM cgtb00005 a,tetb00006 b
WHERE a.cheque_no = b.cheque_no AND
a.status_t = "C" AND
a.cuenta_no = b.banco AND
b.codigo = datos_10.codigo AND
a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2
EXIT CASE
END CASE
ELSE
SELECT SUM(a.valor_real/1000) INTO datos_10.monto2
FROM tetb00005 a
WHERE (a.status_t IS NULL) AND (a.codigo = datos_10.codigo) AND
(a.ano = datos_10.ano AND a.mes = datos_10.mes)
END IF
IF datos_10.ano = ano - 2 THEN
CASE
WHEN datos_10.codigo = 1
SELECT SUM(a.monto/1000) INTO datos_10.monto3 FROM tetb00001 a
WHERE (a.status_t IS NULL) AND (a.procedencia IN (1,7)) AND
(a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2)
EXIT CASE
WHEN datos_10.codigo = 2
SELECT SUM(a.monto/1000) INTO datos_10.monto3 FROM tetb00001 a
WHERE (a.status_t IS NULL) AND (a.procedencia = 2) AND
(a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2)
EXIT CASE
WHEN datos_10.codigo = 3
SELECT SUM(a.monto/1000) INTO datos_10.monto3 FROM tetb00001 a
WHERE (a.status_t IS NULL) AND (a.procedencia = 3) AND
(a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2)
EXIT CASE
WHEN datos_10.codigo = 4
SELECT SUM(a.monto/1000) INTO datos_10.monto3 FROM tetb00001 a
WHERE (a.status_t IS NULL) AND (a.procedencia = 4) AND
(a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2)
EXIT CASE
WHEN datos_10.codigo = 22
SELECT SUM(a.valor/1000) INTO datos_10.monto3 FROM tetb00004 a
WHERE (a.status_t IS NULL) AND (a.codigo=datos_10.codigo) AND
(a.ano = datos_10.ano AND a.mes = datos_10.mes)
EXIT CASE
OTHERWISE
SELECT SUM(a.monto/1000) INTO datos_10.monto3
FROM cgtb00005 a,tetb00006 b
WHERE a.cheque_no = b.cheque_no AND
a.status_t = "C" AND
a.cuenta_no = b.banco AND
b.codigo = datos_10.codigo AND
a.fecha BETWEEN datos_10.fecha1 AND datos_10.fecha2
EXIT CASE
END CASE
ELSE
SELECT SUM(a.valor_real/1000) INTO datos_10.monto3
FROM tetb00005 a
WHERE (a.status_t IS NULL) AND (a.codigo = datos_10.codigo) AND
(a.ano = datos_10.ano AND a.mes = datos_10.mes)
END IF
DISPLAY datos_10.monto1 AT 21,35
IF datos_10.monto1 IS NULL THEN
LET datos_10.monto1 = 0
END IF
IF datos_10.monto2 IS NULL THEN
LET datos_10.monto2 = 0
END IF
IF datos_10.monto3 IS NULL THEN
LET datos_10.monto3 = 0
END IF
IF datos_10.tipo = "DI" THEN
LET datos_10.monto1 = datos_10.monto1 * tasa
END IF
IF datos_10.tipo = "DI" THEN
LET datos_10.monto2 = datos_10.monto2 * tasa
END IF
IF datos_10.tipo = "DI" THEN
LET datos_10.monto3 = datos_10.monto3 * tasa
END IF
OUTPUT TO REPORT reporte_10(datos_10.*)
END WHILE
FINISH REPORT reporte_10
#RUN imprime
CALL fdestino(destino,archivo,imprime)
CLEAR SCREEN
END FUNCTION
REPORT reporte_10(x)
DEFINE x RECORD
codigo INTEGER,
descripcion CHAR(30),
tipo CHAR(2),
ano INTEGER,
mes INTEGER,
fecha1 DATE,
fecha2 DATE,
monto1 DECIMAL(12,4),
monto2 DECIMAL(12,4),
monto3 DECIMAL(12,4),
tipo1 CHAR(1)
END RECORD
## DEFINICION DE LAS VARIABLES DE IMPRESION
DEFINE numero_ch CHAR(9),
descripcion CHAR(30),
detalle1,detalle2 CHAR(40)
DEFINE hora CHAR(5)
DEFINE nombre1 ARRAY[12] OF CHAR(10)
OUTPUT
## DEFINICION DE LOS MARGENES DE IMPRESION
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 3
ORDER BY x.tipo1,x.codigo,x.ano,x.mes
FORMAT
PAGE HEADER
LET hora = time
LET nombre1[1] = " ENERO "
LET nombre1[2] = " FEBRERO "
LET nombre1[3] = " MARZO "
LET nombre1[4] = " ABRIL "
LET nombre1[5] = " MAYO "
LET nombre1[6] = " JUNIO "
LET nombre1[7] = " JULIO "
LET nombre1[8] = " AGOSTO "
LET nombre1[9] = "SEPTIEMBRE"
LET nombre1[10] = " OCTUBRE "
LET nombre1[11] = "NOVIEMBRE "
LET nombre1[12] = "DICIEMBRE "
## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS
LET d = (c-46)/2
PRINT COLUMN 1, letras.negrillas_on
PRINT COLUMN 1, "teprrp010",
COLUMN 17, "R A Y . O . V A C D O M I N I C A N A, S. A.",
COLUMN 73, "Pag. ",pageno using "###"
PRINT COLUMN 17, " Sistema de Tesoreria",
COLUMN 73, today using "dd/mm/yyyy"
PRINT COLUMN 17, " Cash Flow Real Comparativo",
COLUMN 76, hora
PRINT COLUMN 17, "Periodo de 3 Anos Y Expresados Em Miles (1000) "
SKIP 1 LINE
PRINT COLUMN 1, "Periodo: Mes de ", nombre1[mes] CLIPPED,
" Del Ano ",ano - 2 USING "&&&&",
" Al ", ano USING "&&&&"
PRINT COLUMN 1, "--------------------------------------------------",
"------------------------------"
PRINT COLUMN 1, "Partida",
COLUMN 40, "Ano ", ano - 2 USING "&&&&",
COLUMN 55, "Ano ", ano - 1 USING "&&&&",
COLUMN 70, "Ano ", ano USING "&&&&"
PRINT COLUMN 1, "--------------------------------------------------",
"------------------------------"
BEFORE GROUP OF x.tipo1
IF x.tipo1 = "A" THEN
LET descripcion = "TOTAL INGRESO"
END IF
IF x.tipo1 = "B" THEN
LET descripcion = "TOTAL DESEMBOLSO INT."
END IF
IF x.tipo1 = "C" THEN
LET descripcion = "TOTAL DESEMBOLSO LOCAL"
END IF
BEFORE GROUP OF x.codigo
IF x.codigo = 1 THEN
PRINT COLUMN 1,letras.negrillas_on,"INGRESOS",letras.negrillas_off
PRINT COLUMN 1,letras.negrillas_on,"========",letras.negrillas_off
SKIP 1 LINE
END IF
IF x.codigo = 5 THEN
PRINT COLUMN 1,letras.negrillas_on,"DESEMBOLSOS",letras.negrillas_off
PRINT COLUMN 1,letras.negrillas_on,"===========",letras.negrillas_off
PRINT COLUMN 1,letras.negrillas_on,"DESEMBOLSOS INTERNACIONALES (",
"TASA UTILIZADA RD$",tasa USING "<<<,<<<.<<",")",
letras.negrillas_off
SKIP 1 LINE
END IF
IF x.codigo = 14 THEN
PRINT COLUMN 1,letras.negrillas_on,"DESEMBOLSOS LOCALES",
letras.negrillas_off
SKIP 1 LINE
END IF
PRINT COLUMN 1, x.codigo USING "###"," ",x.descripcion CLIPPED;
LET c = 39
## AQUI SE INDICA LA IMPRESION DEL DETALLE
AFTER GROUP OF x.codigo
PRINT COLUMN 35, GROUP SUM(x.monto3)
#WHERE x.ano = ano - 2 AND x.mes = mes
USING "#,###,###.####","|",
COLUMN 50, GROUP SUM(x.monto2)
#WHERE x.ano = ano - 1 AND x.mes = mes
USING "#,###,###.####","|",
COLUMN 65, GROUP SUM(x.monto1)
#WHERE x.ano = ano AND x.mes = mes
USING "#,###,###.####","|"
AFTER GROUP OF x.tipo1
PRINT COLUMN 40, "---------","|",
COLUMN 55, "---------","|",
COLUMN 70, "---------","|"
PRINT COLUMN 1, descripcion,
COLUMN 35, GROUP SUM(x.monto3)
#WHERE x.ano = ano - 2 AND x.mes = mes
USING "#,###,###.####","|",
COLUMN 50, GROUP SUM(x.monto2)
#WHERE x.ano = ano - 1 AND x.mes = mes
USING "#,###,###.####","|",
COLUMN 65, GROUP SUM(x.monto1)
#WHERE x.ano = ano AND x.mes = mes
USING "#,###,###.####","|"
ON LAST ROW
PRINT COLUMN 40, "---------","|",
COLUMN 55, "---------","|",
COLUMN 70, "---------","|"
IF x.tipo1 != "A" THEN
PRINT COLUMN 1, "TOTAL DESEMB. LOC. E INT.",
COLUMN 35, SUM(x.monto3)# WHERE x.ano = ano - 2 AND x.mes = mes
USING "#,###,###.####","|",
COLUMN 50, SUM(x.monto2) #WHERE x.ano = ano - 1 AND x.mes = mes
USING "#,###,###.####","|",
COLUMN 65, SUM(x.monto1) #WHERE x.ano = ano AND x.mes = mes
USING "#,###,###.####","|"
END IF
PRINT COLUMN 40, "---------","|",
COLUMN 55, "---------","|",
COLUMN 70, "---------","|"
PRINT COLUMN 1, "FLUJO OPERATIVO",
COLUMN 35, (SUM(x.monto3)) #WHERE x.ano=ano - 2 AND x.mes=mes)
USING "-,---,---.----","|",
COLUMN 50, (SUM(x.monto2)) #WHERE x.ano=ano - 1 AND x.mes=mes)
USING "-,---,---.----","|",
COLUMN 65, (SUM(x.monto1)) #WHERE x.ano=ano AND x.mes = mes)
USING "-,---,---.----","|"
PRINT COLUMN 1, "BALANCE INICIAL",
COLUMN 35, (SUM(x.monto3)) #WHERE x.ano=ano - 2 AND x.mes<mes)
+ balance2 USING "-,---,---.----","|",
COLUMN 50, (SUM(x.monto2)) #WHERE x.ano=ano - 1 AND x.mes<mes)
+ balance1 USING "-,---,---.----","|",
COLUMN 65, (SUM(x.monto1)) #WHERE x.ano=ano AND x.mes < mes)
+ balance USING "-,---,---.----","|"
PRINT COLUMN 40, "---------","|",
COLUMN 55, "---------","|",
COLUMN 70, "---------","|"
PRINT COLUMN 1, "BALANCE FINAL",
COLUMN 35, (SUM(x.monto3)) #WHERE x.ano=ano - 2 AND x.mes<=mes)
+ balance2 USING "-,---,---.----","|",
COLUMN 50, (SUM(x.monto2)) #WHERE x.ano=ano - 1 AND x.mes<=mes)
+ balance1 USING "-,---,---.----","|",
COLUMN 65, (SUM(x.monto1)) #WHERE x.ano=ano AND x.mes <= mes)
+ balance USING "-,---,---.----","|"
PRINT letras.comp_off,letras.negrillas_off
END REPORT