Files
MBS/PROYECTO/tedirbk/teprrp002.4gl
T

521 lines
16 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : TEPRRP002
OBJETIVO : Estado De Cuentas
PROGRAMADOR : Ing. Juan F. Soto
FECHA REALIZACION : Junio 1, 1993
-------------------------------------------------------------------------------
}
GLOBALS "teprgb000.4gl"
DEFINE opt CHAR(1)
DEFINE prima DECIMAL(10,2)
DEFINE mov CHAR(1)
DEFINE idx_1, idx_2, idx_3 SMALLINT
DEFINE fecha_inicial, fecha_final DATE
DEFINE salir, salir1, salir3, tipo_venta CHAR(1)
DEFINE selec4,selec5, selec6 CHAR(1500)
DEFINE tot_gen1 RECORD
totald DECIMAL(10,2),
totalc DECIMAL(10,2),
totalg DECIMAL(10,2)
END RECORD
DEFINE clientes RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
valor DECIMAL(12,2)
END RECORD
DEFINE mvtos RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
tipo_doc CHAR(2),
num_doc INTEGER,
fecha_doc DATE,
aplica_a INTEGER,
valor DECIMAL(10,2),
monto_desc LIKE cctb00001.monto_desc,
cliente CHAR(6) ,
balance DECIMAL(12,2)
END RECORD
FUNCTION teprrp002()
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM tefmrp002 FROM "tefmrp002"
DISPLAY FORM tefmrp002
CALL pantalla()
DISPLAY "teprrp002" AT 4,3 ATTRIBUTE(RED)
DISPLAY " Estado Cuentas " AT 6,32 ATTRIBUTE(BLACK)
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
CALL defecto(impresor) RETURNING imprime,letras.*,archivo
CONSTRUCT criterio ON a.tipo_cliente,a.sec_cliente FROM
tipo_cliente, sec_cliente
INPUT BY NAME prima,fecha_inicial,fecha_final
ON KEY(CONTROL-P)
CALL busca_printer() RETURNING imprime,letras.*,archivo
AFTER FIELD fecha_inicial
IF fecha_inicial is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_inicial
END IF
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 < fecha_inicial THEN
LET numero_msg = 86
CALL msg(numero_msg)
NEXT FIELD fecha_final
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
IF fecha_inicial is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_inicial
END IF
IF fecha_final is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_final
END IF
IF fecha_final < fecha_inicial THEN
LET numero_msg = 86
CALL msg(numero_msg)
NEXT FIELD fecha_final
END IF
EXIT INPUT
END INPUT
LET parametro = "D"
CALL elijeimpresion(parametro) RETURNING orden,destino,letras.*
# Busca Balances de los clientes
LET selec5 =
"SELECT a.tipo_cliente,a.sec_cliente,sum(a.valor+a.monto_desc) ",
"FROM cctb00001 a ",
"WHERE ",criterio clipped," AND a.status_t is null AND a.fecha_orig < ? ",
"GROUP BY 1,2 ORDER BY 1,2 "
DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
PREPARE b_balance FROM selec5
DECLARE c_balance SCROLL CURSOR FOR b_balance
OPEN c_balance USING fecha_inicial
# Busca los documentos que esten en el rango de fechas especificado
LET selec4 =
"SELECT a.tipo_cliente, a.sec_cliente, a.tipo_doc, a.num_doc, ",
" a.fecha_orig, a.aplica_a, a.valor, a.monto_desc ",
"FROM cctb00001 a ",
"WHERE ",criterio clipped," AND a.status_t IS NULL AND ",
" a.fecha_orig between ? AND ? ",
"ORDER BY 1,2,6,5 "
DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
DISPLAY "<< Buscando los Movimientos del Rango >>" AT 20,14
ATTRIBUTE (REVERSE,BOLD)
PREPARE movi FROM selec4
DECLARE mvtos_cli SCROLL CURSOR FOR movi
OPEN mvtos_cli USING fecha_inicial,fecha_final
DISPLAY " " AT 20,14
START REPORT report14 TO archivo
DISPLAY " " AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
LET idx_1 = 1
LET salir = "N"
WHILE salir != "S"
FETCH ABSOLUTE idx_1 mvtos_cli INTO mvtos.*
IF status = NOTFOUND THEN
LET salir = "S"
EXIT WHILE
END IF
IF int_flag THEN
LET salir = "S"
LET numero_msg = 2
CALL msg(numero_msg)
FINISH REPORT report14
EXIT WHILE
END IF
LET idx_1 = idx_1 + 1
LET mvtos.cliente = mvtos.tipo_cliente using "&&",
mvtos.sec_cliente using "&&&&"
LET mvtos.balance = 0
LET idx_2 = 1
LET salir1 = "N"
WHILE salir1 != "S"
FETCH ABSOLUTE idx_2 c_balance INTO clientes.*
IF status = notfound THEN
LET idx_2 = 1
LET salir1 = "S"
EXIT WHILE
END IF
LET idx_2 = idx_2 + 1
IF mvtos.tipo_cliente = clientes.tipo_cliente AND
mvtos.sec_cliente = clientes.sec_cliente THEN
LET idx_2 = 1
LET mvtos.balance = clientes.valor
EXIT WHILE
END IF
END WHILE
# DISPLAY mvtos.cliente AT 13,1
IF prima is not null THEN
LET mvtos.valor = mvtos.valor * prima
LET mvtos.monto_desc = mvtos.monto_desc * prima
LET mvtos.balance = mvtos.balance * prima
END IF
DISPLAY mvtos.cliente AT 21,20
DISPLAY mvtos.tipo_doc AT 21,35
DISPLAY mvtos.num_doc AT 21,38
OUTPUT TO REPORT report14(mvtos.*)
END WHILE
FINISH REPORT report14
#IF not int_flag THEN
# LET int_flag = false
# FINISH REPORT report14
PROMPT "Desea Imprimir Reporte [S/N].....?" FOR CHAR opt
LET opt = UPSHIFT(opt)
IF opt = "S" THEN
#RUN imprime
CALL fdestino(destino,archivo,imprime)
END IF
#END IF
CLEAR SCREEN
END FUNCTION
REPORT report14(x)
DEFINE x RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
tipo_doc CHAR(2),
num_doc INTEGER,
fecha_doc DATE,
aplica_a INTEGER,
valor DECIMAL(10,2),
monto_desc LIKE cctb00001.monto_desc,
cliente CHAR(6) ,
balance DECIMAL(12,2)
END RECORD
DEFINE dias SMALLINT
DEFINE p_calle,p_descrip CHAR(30)
DEFINE p_casa,p_zona,p_numero CHAR(10)
DEFINE hora CHAR(5)
DEFINE tipo CHAR(2)
DEFINE imp_cli CHAR(1)
DEFINE credito, debito, tcredito, tdebito, tbalance,
limite, b_balance, v1_30, v31_45, v46_60, vm_60,p_valor DECIMAL(12,2)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 2
PAGE LENGTH 33
ORDER BY x.cliente,x.aplica_a,x.fecha_doc
FORMAT
PAGE HEADER
LET hora = time
PRINT COLUMN 1, letras.comp_on
# PRINT COLUMN 1, letras.doce, letras.negrillas_on
PRINT COLUMN 1, "teprrp002",
COLUMN 31, "R A Y - O - V A C D O M I N I C A N A, S. A.",
COLUMN 103, "Pag.",
COLUMN 108, pageno using "###"
PRINT COLUMN 43, "Sistema de Tesoreria",
COLUMN 101, today using "dd/mm/yyyy"
PRINT COLUMN 44, " Estado de Cuenta ",
COLUMN 106, hora
PRINT COLUMN 47, " Al ", fecha_final using "dd/mm/yyyy"
# , letras.negrillas_off
IF prima is null THEN
PRINT COLUMN 53, "RD$"
ELSE
PRINT COLUMN 53, "US$"
END IF
SKIP 1 LINES
BEFORE GROUP OF x.cliente
LET v1_30 = 0
LET v31_45 = 0
LET v46_60 = 0
LET vm_60 = 0
IF tdebito IS NULL THEN
LET tdebito = 0
END IF
IF tcredito IS NULL THEN
LET tcredito = 0
END IF
IF tbalance IS NULL THEN
LET tbalance = 0
END IF
SELECT b.nombre,b.limite_credito,b.zona_postal,b.num_rnc,
c.calle,c.casa_num,d.descrip
INTO descrip1,limite,p_zona,p_numero,p_calle,p_casa,
p_descrip
FROM vetb00004 b ,vetb00005 c,vetb00008 d
WHERE x.tipo_cliente = b.tipo_cliente and
x.sec_cliente = b.sec_cliente and
b.tipo_cliente = c.tipo_cliente and
b.sec_cliente = c.sec_cliente and
b.cod_zona = d.cod_zona and
b.status_t is null
IF x.balance IS NULL THEN
LET x.balance = 0
END IF
IF limite IS NULL THEN
LET limite = 0
END IF
IF prima is not null THEN
PRINT COLUMN 1,"Prima: ", prima using "###.##"
END IF
PRINT COLUMN 1,
"--------------------------------------------------",
"--------------------------------------------------",
"-----------"
,letras.negrillas_on
PRINT COLUMN 1, "Cliente:",
COLUMN 10, x.tipo_cliente using "&&","-",
x.sec_cliente using "&&&&",
COLUMN 18, descrip1 clipped,
COLUMN 49, "Limite Credito",
COLUMN 64, limite using "####,###,###.##",
COLUMN 81, "Balance Al: ", fecha_inicial using "dd/mm/yyyy"
PRINT COLUMN 10, p_calle clipped," ",p_casa,
COLUMN 24, "RNC: ", p_numero,
COLUMN 91, x.balance using "####,###,###.##"
PRINT COLUMN 10, p_descrip,
COLUMN 22, "ZONA POSTAL: ",p_zona,letras.negrillas_off
PRINT COLUMN 1,
"--------------------------------------------------",
"--------------------------------------------------",
"-----------"
LET b_balance = x.balance
# SKIP 1 LINE
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 63, "D E B I T O",
COLUMN 80, "C R E D I T O",
COLUMN 99, "B A L A N C E"
PRINT COLUMN 1,
"--------------------------------------------------",
"--------------------------------------------------" ,
"-----------"
LET debito = 0
LET credito = 0
ON EVERY ROW
# IF x.fecha_doc >= fecha_inicial AND
# x.fecha_doc <= fecha_final THEN
{
SELECT UNIQUE tipo_doc
INTO tipo
FROM cctb00001
WHERE num_doc = x.num_doc #aplica_a
}
PRINT COLUMN 3, x.num_doc using "######",
COLUMN 12, x.tipo_doc,
COLUMN 16, x.fecha_doc using "dd/mm/yyyy",
COLUMN 28, x.aplica_a using "######",
COLUMN 39, tipo;
LET b_balance = b_balance + (x.valor + x.monto_desc)
IF x.valor >= 0 THEN
PRINT COLUMN 59, x.valor using "####,###,###.##",
COLUMN 97, b_balance using "####,###,###.##"
LET debito = debito + x.valor
ELSE
PRINT COLUMN 78, x.valor + x.monto_desc using "####,###,###.##",
COLUMN 97, b_balance using "####,###,###.##"
LET credito = credito + (x.valor + x.monto_desc)
END IF
# END IF
AFTER GROUP OF x.aplica_a
LET p_valor = GROUP SUM(x.valor+x.monto_desc)
IF p_valor > 0 THEN
LET dias = fecha_inicial - x.fecha_doc
IF dias < 31 THEN
LET v1_30 = p_valor + v1_30
END IF
IF dias > 30 and dias < 46 THEN
LET v31_45 = p_valor + v31_45
END IF
IF dias > 45 and dias < 61 THEN
LET v46_60 = p_valor + v46_60
END IF
IF dias > 60 THEN
LET vm_60 = vm_60 + p_valor
END IF
END IF
PAGE TRAILER
PRINT COLUMN 1, "ANALISIS POR ANTIGUEDAD",letras.negrillas_on,
COLUMN 33, "1 a 30",
COLUMN 47, "31 a 45",
COLUMN 59, "46 a 60",
COLUMN 70, "Mas de 60",letras.negrillas_off
PRINT COLUMN 1, "DE SU APRECIADA CUENTA: ",
COLUMN 26, v1_30 using "##,###,###.##",
COLUMN 41, v31_45 using "##,###,###.##",
COLUMN 51, v46_60 using "##,###,###.##",
COLUMN 61, vm_60 using "##,###,###.##"
PRINT COLUMN 1, "NOTA: LE ROGAMOS REVISAR ESTE ESTADO Y NOTIFICAR A NUESTRO ",
"DEPARTAMENTO DE CONTABILIDAD SOBRE CUALQUIER "
PRINT COLUMN 1, "DISCREPANCIA O REPARO, A LA MAYOR BREVEDAD POSIBLE."
PRINT COLUMN 1, "APRECIAMOS SU RESPUESTA, POR TANTO, QUEDAREMOS AGRADECIDOS"
," POR SU ATENCION, SERVANSE USAR LA COPIA DE ESTE ESTADO"
PRINT COLUMN 1, "PARA SU CONFIRMACION."
SKIP 1 LINE
PRINT COLUMN 10, letras.negrillas_on,
"NOMENCLATURA: PG- PAGOS FT- FACTURAS ND- NOTA DE DEBITO NC- NOTA CREDITO",
" DE- DEVOLUCIONES",
letras.negrillas_off
{ AFTER GROUP OF x.cliente
IF imp_cli = "S" THEN
SKIP 1 LINE
PRINT
COLUMN 1, letras.negrillas_on,
COLUMN 27, "Total Cliente",
COLUMN 59, debito using "####,###,###.##",
COLUMN 78, credito using "####,###,###.##",
COLUMN 97, b_balance using "####,###,###.##"
PRINT COLUMN 59, "===============",
COLUMN 78, "===============",
COLUMN 97, "==============="
, letras.negrillas_off
PRINT COLUMN 1,
"--------------------------------------------------",
"--------------------------------------------------" ,
"-----------"
LET tcredito = tcredito + credito
LET tdebito = tdebito + debito
LET tbalance = tbalance + b_balance
LET credito = 0
LET debito = 0
LET x.balance = 0
END IF}
{ ON LAST ROW
SKIP 1 LINE
PRINT
COLUMN 1, letras.negrillas_on,
COLUMN 27, "Total General",
COLUMN 59, tdebito using "####,###,###.##",
COLUMN 78, tcredito using "####,###,###.##",
COLUMN 97, tbalance using "####,###,###.##"
# , letras.negrillas_off
LET tot_gen1.totald = tdebito
LET tot_gen1.totalc = tcredito
LET tot_gen1.totalg = tbalance
PRINT normall
# PRINT normal }
END REPORT