Files

569 lines
19 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : CPPRRP006
OBJETIVO : Analisis de Saldo Pendiente
PROGRAMADOR : Tadeo A. Ferreras
FECHA REALIZACION : Octubre, 18 1993
-------------------------------------------------------------------------------
}
GLOBALS "cpprgb000.4gl"
DEFINE valor_doc,valor_pre DECIMAL(12,2)
DEFINE salida,mov CHAR(1)
DEFINE idx_1, idx_2, idx_3 SMALLINT
DEFINE fecha_inicial,fecha_final DATE
DEFINE impr,salir7,salir, salir1, salir3, tipo_venta CHAR(1)
DEFINE selec1,selec7,selec5, selec6 CHAR(1500)
DEFINE cli CHAR(6)
DEFINE supl RECORD
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
nom_sp CHAR(45)
END RECORD
DEFINE bal_fact RECORD
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
aplica_a CHAR(10),
valor DECIMAL(12,2)
END RECORD
DEFINE tot_gen6 RECORD
total1 DECIMAL(10,2),
total2 DECIMAL(10,2),
total3 DECIMAL(10,2),
total4 DECIMAL(10,2),
total5 DECIMAL(10,2),
total6 DECIMAL(10,2)
END RECORD
DEFINE cod_sp1 SMALLINT
DEFINE mvto21 RECORD
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
nombre CHAR(45),
tipo_doc CHAR(2),
num_doc CHAR(10),
fecha_doc DATE,
aplica_a CHAR(10),
valor DECIMAL(10,2),
suplidor CHAR(6)
END RECORD
DEFINE mvto20 RECORD
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
nombre CHAR(45),
tipo_doc CHAR(2),
num_doc CHAR(10),
fecha_doc DATE,
aplica_a CHAR(10),
valor DECIMAL(10,2)
END RECORD
DEFINE mvto22 RECORD
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
nombre CHAR(45),
tipo_doc CHAR(2),
num_doc CHAR(10),
fecha_doc DATE,
aplica_a CHAR(10),
valor DECIMAL(10,2)
END RECORD
FUNCTION cpprrp006()
DEFINE valor_gral DECIMAL(12,2)
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM cpfmrp006 FROM "cpfmrp006"
DISPLAY FORM cpfmrp006
CALL pantalla()
DISPLAY "cpprrp006" AT 4,3
DISPLAY "Analisis de Saldos Pendientes" AT 6,25
LET tipo_papel = 2
CALL msgrp000(tipo_papel)
INPUT BY NAME fecha_final,cod_sp1
BEFORE FIELD fecha_final
LET fecha_final = today
AFTER FIELD fecha_final
IF fecha_final is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_final
END IF
IF fecha_final > today THEN
LET numero_msg = 86
CALL msg(numero_msg)
NEXT FIELD fecha_final
END IF
AFTER FIELD cod_sp1
IF cod_sp1 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_sp1
END IF
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 criterio ON b.cod_sp_sec FROM cod_sp_sec
# Busca los documentos que esten en el rango de fechas especificado
SELECT *FROM systables WHERE tabname = "suplidor"
IF STATUS != NOTFOUND THEN
DROP VIEW suplidor
END IF
SELECT *FROM systables WHERE tabname = "cpprrp0062"
IF STATUS != NOTFOUND THEN
DROP VIEW cpprrp0062
END IF
CREATE VIEW suplidor (cod_sp,cod_sp_sec,nom_sp,aplica_a,valor)
AS SELECT a.cod_sp,a.cod_sp_sec,b.nom_sp,a.aplica_a,SUM(valor)
FROM cptb00001 a,cotb00001 b
WHERE a.cod_sp = b.cod_sp AND a.cod_sp_sec = b.cod_sp_sec AND
a.status_t IS NULL AND tipo_doc != "CP"
GROUP BY 1,2,3,4 HAVING SUM(valor) <> 0
CREATE VIEW cpprrp0062 (cod_sp,cod_sp_sec,nom_sp,tipo_doc,num_doc,fecha_orig,
aplica_a,valor)
AS SELECT a.cod_sp,a.cod_sp_sec,b.nom_sp,a.tipo_doc,a.num_doc,
a.fecha_orig,a.aplica_a,a.valor FROM cptb00001 a,suplidor b
WHERE b.cod_sp = a.cod_sp AND b.cod_sp_sec = a.cod_sp_sec AND
a.aplica_a = b.aplica_a AND a.status_t IS NULL AND a.tipo_doc != "CP"
LET selec4 =
"SELECT b.cod_sp,b.cod_sp_sec,b.nom_sp,b.tipo_doc,b.num_doc,b.fecha_orig, ",
" b.aplica_a,b.valor ",
"FROM cpprrp0062 b ",
"WHERE b.fecha_orig <= ? AND b.cod_sp = ? AND ",criterio CLIPPED
#" ORDER BY 1,2,7 "
DISPLAY "<< Buscando los Movimientos del Rango. >>" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
PREPARE movi FROM selec4
DECLARE mvto_cli CURSOR FOR movi
OPEN mvto_cli USING fecha_final,cod_sp1
LET selec6 =
"SELECT b.cod_sp,b.cod_sp_sec,a.nom_sp,b.tipo_doc,b.num_doc,b.fecha_orig, ",
" b.aplica_a,SUM(b.valor) ",
"FROM cptb00001 b,cotb00001 a ",
"WHERE b.cod_sp = a.cod_sp AND b.cod_sp_sec = a.cod_sp_sec AND ",
" b.tipo_doc = 'CP' AND b.fecha_orig <= ? AND b.cod_sp = ? AND ",
" b.aplica_a IS NULL AND ",criterio CLIPPED,
" GROUP BY 1,2,3,4,5,6,7 " #," ORDER BY 1,2,5 "
DISPLAY "<< Buscando los Prepagos... Espere. >>" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
PREPARE movi1 FROM selec6
DECLARE mvto_cli1 CURSOR FOR movi1
OPEN mvto_cli1 USING fecha_final,cod_sp1
START REPORT reporte20 TO "C:\\ARCHIVO"
DISPLAY " " AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
LET idx_2 = 1
LET salir1 = "N"
WHILE salir1 != "S"
FETCH mvto_cli INTO mvto22.*
IF STATUS = NOTFOUND THEN
LET idx_2 = 1
LET salir1 = "S"
EXIT WHILE
END IF
LET idx_2 = idx_2 + 1
LET valor_doc = 0
SELECT SUM(a.valor*-1) INTO valor_doc FROM cptb00001 a
WHERE a.cod_sp = mvto22.cod_sp AND a.cod_sp_sec = mvto22.cod_sp_sec
AND a.aplica_a = mvto22.num_doc AND a.status_t IS NULL AND
a.fecha_orig <= fecha_final AND a.tipo_doc != mvto22.tipo_doc
IF valor_doc IS NULL THEN
LET valor_doc = 0
END IF
LET valor_doc = mvto22.valor - valor_doc
IF valor_doc <> 0 THEN
LET mvto21.cod_sp = mvto22.cod_sp
LET mvto21.cod_sp_sec = mvto22.cod_sp_sec
LET mvto21.nombre = mvto22.nombre
LET mvto21.suplidor = mvto22.cod_sp USING "&&",
mvto22.cod_sp_sec USING "&&&&"
LET mvto21.tipo_doc = mvto22.tipo_doc
LET mvto21.num_doc = mvto22.num_doc
LET mvto21.fecha_doc = mvto22.fecha_doc
LET mvto21.aplica_a = mvto22.aplica_a
LET mvto21.valor = mvto22.valor
DISPLAY " " AT 14,10
DISPLAY "Balance ",mvto21.suplidor," - ",mvto21.tipo_doc,
mvto21.aplica_a," - ",mvto21.num_doc
AT 14,10
OUTPUT TO REPORT reporte20(mvto21.*,fecha_final)
END IF
END WHILE
LET idx_1 = 1
LET salir3 = "N"
WHILE salir3 != "S"
FETCH mvto_cli1 INTO mvto20.*
IF STATUS = NOTFOUND THEN
LET idx_1 = 1
LET salir3 = "S"
EXIT WHILE
END IF
LET idx_1 = idx_1 + 1
LET valor_pre = 0
SELECT SUM(a.valor) INTO valor_pre FROM cptb00001 a
WHERE a.cod_sp = mvto20.cod_sp AND a.cod_sp_sec = mvto20.cod_sp_sec
AND a.num_doc = mvto20.num_doc AND a.aplica_a IS NOT NULL AND
a.status_t IS NULL AND a.tipo_doc = "CP" AND
a.fecha_orig <= fecha_final
IF valor_pre IS NULL THEN
LET valor_pre = 0
END IF
LET mvto20.valor = mvto20.valor - valor_pre
IF mvto20.valor <> 0 THEN
LET mvto21.cod_sp = mvto20.cod_sp
LET mvto21.cod_sp_sec = mvto20.cod_sp_sec
LET mvto21.nombre = mvto20.nombre
LET mvto21.suplidor = mvto20.cod_sp USING "&&",
mvto20.cod_sp_sec USING "&&&&"
LET mvto21.tipo_doc = mvto20.tipo_doc
LET mvto21.num_doc = mvto20.num_doc
LET mvto21.fecha_doc = mvto20.fecha_doc
LET mvto21.aplica_a = mvto20.aplica_a
LET mvto21.valor = mvto20.valor
DISPLAY " " AT 14,10
DISPLAY "Suplidor ",mvto21.suplidor," - ",mvto21.tipo_doc,
mvto21.aplica_a," - ",mvto21.num_doc
AT 14,10
OUTPUT TO REPORT reporte20(mvto21.*,fecha_final)
END IF
END WHILE
FINISH REPORT reporte20
DISPLAY BY NAME tot_gen6.*
DROP VIEW suplidor
PROMPT "Desea Imprimir Reporte [S/N].....?" FOR CHAR opt
LET opt = UPSHIFT(opt)
IF opt = "S" THEN
RUN "TYPE C:\\ARCHIVO > %USPRINT%"
END IF
INITIALIZE tot_gen6.* TO NULL
CLEAR SCREEN
END FUNCTION
REPORT reporte20(x,fecha5)
DEFINE x RECORD
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
nombre CHAR(45),
tipo_doc CHAR(2),
num_doc CHAR(10),
fecha_doc DATE,
aplica_a CHAR(10),
valor DECIMAL(10,2),
suplidor CHAR(6)
END RECORD
DEFINE nombre1,apellido CHAR(30)
DEFINE valor_gral1 DECIMAL(12,2)
DEFINE fecha4,fecha5 DATE
DEFINE num_dia INTEGER
DEFINE p_numero,p_zona CHAR(10)
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 normall CHAR(3)
DEFINE comprimido CHAR(3)
DEFINE hora CHAR(5)
DEFINE tipo CHAR(2)
DEFINE imp_cli CHAR(1)
DEFINE credito,debito,tcredito,tdebito,tbalance,limite,b_balance,
m120,tm120 DECIMAL(12,2)
DEFINE pvalor,d1a30,d31a45,d46a60,m60 DECIMAL(12,2)
DEFINE v_balance,v130,v3145,v4660,vm60 DECIMAL(12,2)
DEFINE td1a30,td31a45,td46a60,tm60 DECIMAL(12,2)
DEFINE fecha_fact DATE
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 2
ORDER BY x.suplidor,x.fecha_doc,x.aplica_a
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 lj = (136 - LENGTH(p_companias.nombre))/2
PRINT COLUMN 1, comp_on
PRINT COLUMN 1, "cpprrp006",
COLUMN lj, p_companias.nombre CLIPPED,
COLUMN 129, "Pag. ",pageno USING "###"
PRINT COLUMN 54, "Sistema de Cuentas por Pagar",
COLUMN 127, today using "dd/mm/yyyy"
PRINT COLUMN 52, "Analisis de Saldo por Antiguedad",
COLUMN 132, hora
PRINT COLUMN 62," Al ", fecha5 using "dd/mm/yy"
# , negrillas_off
SKIP 1 LINES
BEFORE GROUP OF x.suplidor
LET descrip1 = x.nombre clipped
LET d1a30 = 0
LET d31a45 = 0
LET d46a60 = 0
LET m60 = 0
LET m120 = 0
LET b_balance = 0
IF tdebito IS NULL THEN
LET tdebito = 0
LET tcredito= 0
END IF
PRINT COLUMN 1,
"--------------------------------------------------",
"--------------------------------------------------",
"------------------------------------------"
, negrillas_on
PRINT COLUMN 1, "Cliente:",
COLUMN 10, x.cod_sp using "&&","-",
x.cod_sp_sec using "&&&&",
COLUMN 18, x.nombre clipped
PRINT COLUMN 4, "D O C U M E N T O",
COLUMN 29, "A F E C T A"
PRINT COLUMN 1, "|----------------------|",
COLUMN 27, "|---------------|"
PRINT COLUMN 3, "Numero",
COLUMN 11, "Tipo",
COLUMN 17, "Fecha",
COLUMN 29, "Numero",
COLUMN 38, "Tipo",
COLUMN 53, "1 a 30",
COLUMN 69, "31 a 60",
COLUMN 85, "61 a 90",
COLUMN 100, "91 a 120",
COLUMN 118, "Mas 120",
COLUMN 136, "BALANCE"
PRINT COLUMN 1,
"--------------------------------------------------",
"--------------------------------------------------" ,
"------------------------------------------"
ON EVERY ROW
# IF x.tipo_doc = "FT" THEN
LET fecha_fact = x.fecha_doc
# END IF
IF fecha_fact IS NULL THEN
LET fecha_fact = x.fecha_doc
END IF
IF x.valor is null THEN
LET x.valor = 0
END IF
LET b_balance = b_balance + (x.valor)
PRINT COLUMN 3, x.num_doc,
COLUMN 12, x.tipo_doc,
COLUMN 16, x.fecha_doc using "dd/mm/yy";
IF x.tipo_doc != "CP" THEN
PRINT COLUMN 28, x.aplica_a,
COLUMN 39, "FT"; #,
END IF
# COLUMN 59, (x.valor) using "(((,(((,(((.##)";
LET num_dia = fecha5 - fecha_fact
CASE
WHEN num_dia < 31
LET d1a30 = d1a30 + (x.valor)
PRINT COLUMN 45, x.valor USING "(((,(((,(((.##)";
EXIT CASE
WHEN num_dia > 30 AND num_dia <= 61
LET d31a45 = d31a45 + (x.valor)
PRINT COLUMN 62, x.valor USING "(((,(((,(((.##)";
EXIT CASE
WHEN num_dia > 61 AND num_dia <= 91
LET d46a60 = d46a60 + (x.valor)
PRINT COLUMN 79, x.valor USING "(((,(((,(((.##)";
EXIT CASE
WHEN num_dia > 91 AND num_dia <= 121
LET m60 = m60 + (x.valor)
PRINT COLUMN 95, x.valor USING "(((,(((,(((.##)";
EXIT CASE
OTHERWISE
LET m120 = m120 + (x.valor)
PRINT COLUMN 112, x.valor USING "(((,(((,(((.##)";
EXIT CASE
END CASE
PRINT COLUMN 129, b_balance using "(((,(((,(((.##)"
AFTER GROUP OF x.suplidor
PRINT COLUMN 45, "---------------",
COLUMN 62, "---------------",
COLUMN 79, "---------------",
COLUMN 95, "---------------",
COLUMN 112, "---------------",
COLUMN 129, "---------------"
LET b_balance = 0
LET b_balance = d1a30 + d31a45 + d46a60 + m60 + m120
PRINT COLUMN 27, "Total Cliente",
COLUMN 45, d1a30 using "(((,(((,(((.##)",
COLUMN 62, d31a45 using "(((,(((,(((.##)",
COLUMN 79, d46a60 using "(((,(((,(((.##)",
COLUMN 95, m60 using "(((,(((,(((.##)",
COLUMN 112, m120 using "(((,(((,(((.##)",
COLUMN 129, b_balance using "(((,(((,(((.##)"
PRINT COLUMN 45, "===============",
COLUMN 62, "===============",
COLUMN 79, "===============",
COLUMN 95, "===============",
COLUMN 112, "===============",
COLUMN 129, "==============="
# , negrillas_off
IF td1a30 IS NULL THEN
LET td1a30 = 0
END IF
IF td31a45 IS NULL THEN
LET td31a45 = 0
END IF
IF td46a60 IS NULL THEN
LET td46a60 = 0
END IF
IF tm60 IS NULL THEN
LET tm60 = 0
END IF
IF tm120 IS NULL THEN
LET tm120 = 0
END IF
IF tbalance IS NULL THEN
LET tbalance = 0
END IF
LET td1a30 = td1a30 + d1a30
LET td31a45 = td31a45 + d31a45
LET td46a60 = td46a60 + d46a60
LET tm60 = tm60 + m60
LET tm120 = tm120 + m120
LET tbalance = tbalance + b_balance
LET debito = 0
LET x.valor = 0
LET d1a30 = 0
LET d31a45 = 0
LET d46a60 = 0
LET m60 = 0
LET m120 = 0
LET b_balance = 0
ON LAST ROW
SKIP 1 LINE
PRINT COLUMN 27, "Total General",
COLUMN 45, td1a30 using "(((,(((,(((.##)",
COLUMN 62, td31a45 using "(((,(((,(((.##)",
COLUMN 79, td46a60 using "(((,(((,(((.##)",
COLUMN 95, tm60 using "(((,(((,(((.##)",
COLUMN 112, tm120 using "(((,(((,(((.##)",
COLUMN 129, tbalance using "(((,(((,(((.##)"
LET tot_gen6.total1 = td1a30
LET tot_gen6.total2 = td31a45
LET tot_gen6.total3 = td46a60
LET tot_gen6.total4 = tm60
LET tot_gen6.total6 = tm120
LET tot_gen6.total5 = tbalance
LET td1a30 = 0
LET td31a45 = 0
LET td46a60 = 0
LET tm60 = 0
LET tm120 = 0
LET tbalance = 0
PRINT normal
END REPORT