Files

579 lines
18 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : CPPRRP004
OBJETIVO : Estado De Cuentas
PROGRAMADOR : Tadeo A. Ferreras
FECHA REALIZACION : Junio 1, 1993
-------------------------------------------------------------------------------
}
GLOBALS "cpprgb000.4gl"
DEFINE prima DECIMAL(10,2)
DEFINE cod_sup SMALLINT
DEFINE mov CHAR(1)
DEFINE idx_1, idx_2, idx_3 SMALLINT
DEFINE fecha_inicial, fecha_final DATE
DEFINE salir, salir2, salir1, salir3, tipo_venta CHAR(1)
DEFINE selec5, selec6 CHAR(1500)
DEFINE valor2,valor3 DECIMAL(18,2)
DEFINE tot_gen1 RECORD
totald DECIMAL(10,2),
totalc DECIMAL(10,2),
totalg DECIMAL(10,2)
END RECORD
DEFINE suplidor RECORD
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
valor DECIMAL(12,2)
END RECORD
DEFINE mvtos RECORD
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
nom_sup CHAR(30),
dir_sup CHAR(30),
ciu_sup CHAR(30),
tipo_doc CHAR(2),
num_doc CHAR(10),
fecha_doc DATE,
aplica_a CHAR(10),
valor DECIMAL(10,2),
orden_no INTEGER,
cliente CHAR(6) ,
balance DECIMAL(12,2)
END RECORD
DEFINE mvtos1 RECORD
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
nom_sup CHAR(30),
dir_sup CHAR(30),
ciu_sup CHAR(30),
tipo_doc CHAR(2),
num_doc CHAR(10),
fecha_doc DATE,
aplica_a CHAR(10),
valor DECIMAL(10,2),
orden_no INTEGER,
cliente CHAR(6) ,
balance DECIMAL(12,2)
END RECORD
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT to "smarmotech" user usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL cpprrp004()
END MAIN
FUNCTION cpprrp004()
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM cpfmrp004 FROM "cpfmrp004"
DISPLAY FORM cpfmrp004
# CALL pantalla()
DISPLAY "cpprrp004" AT 4,3
DISPLAY "Estado Cuenta" AT 6,33
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
INPUT BY NAME fecha_inicial,fecha_final,prima,cod_sup
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 FIELD cod_sup
IF cod_sup IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_sup
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
IF cod_sup IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_sup
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
# Busca Balances de los suplidores
CONSTRUCT criterio ON a.cod_sp_sec FROM cod_sp_sec
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
CALL configureoutput("SVG") RETURNING handler
START REPORT report141 TO XML HANDLER handler
LET selec5 =
"SELECT UNIQUE a.cod_sp,a.cod_sp_sec ",
"FROM cptb00001 a ",
"WHERE a.status_t is null AND a.fecha_orig < ? AND cod_sp = ? AND ",
criterio clipped," ORDER BY 1,2 "
DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
PREPARE b_balance FROM selec5
DECLARE c_balance CURSOR FOR b_balance
OPEN c_balance USING fecha_final,cod_sup
# Busca los documentos que esten en el rango de fechas especificado
LET selec4 =
"SELECT a.cod_sp, a.cod_sp_sec,b.nom_sp,b.dir_sp,b.ciu_sp,a.tipo_doc, ",
" a.num_doc,a.fecha_orig, a.aplica_a, a.valor, a.orden_no ",
"FROM cptb00001 a,cotb00001 b ",
"WHERE ",criterio clipped," and a.cod_sp = b.cod_sp AND ",
" a.cod_sp_sec = b.cod_sp_sec AND a.status_t is null and ",
" a.fecha_orig between ? and ? and a.cod_sp = ? AND a.tipo_doc_cp != 'CP' ",
" ORDER BY 1,2,7,6 "
DISPLAY "<< Buscando los Movimientos del Rango >>" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
PREPARE movi FROM selec4
DECLARE mvtos_cli SCROLL CURSOR FOR movi
OPEN mvtos_cli USING fecha_inicial,fecha_final,cod_sup
LET selec5 =
"SELECT a.cod_sp, a.cod_sp_sec,b.nom_sp,b.dir_sp,b.ciu_sp,a.tipo_doc, ",
" a.num_doc,a.fecha_orig, a.aplica_a, a.valor, a.orden_no ",
"FROM cptb00001 a,cotb00001 b ",
"WHERE ",criterio clipped," and a.cod_sp = b.cod_sp AND ",
" a.cod_sp_sec = b.cod_sp_sec AND a.status_t is null and ",
" a.fecha_orig between ? and ? and a.cod_sp = ? AND a.tipo_doc_cp = 'CP' ",
" AND a.aplica_a IS NULL ORDER BY 1,2,7,6 "
DISPLAY "<< Buscando los Movimientos del Rango >>" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
PREPARE movi1 FROM selec5
DECLARE mvtos_cli1 SCROLL CURSOR FOR movi1
OPEN mvtos_cli1 USING fecha_inicial,fecha_final,cod_sup
DISPLAY "<< " AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14
ATTRIBUTE (REVERSE)
LET salir1 = "N"
WHILE salir1 != "S"
FETCH c_balance INTO suplidor.*
IF status = notfound THEN
LET salir1 = "S"
EXIT WHILE
END IF
LET valor2 = 0
LET valor3 = 0
SELECT ISNULL(SUM(a.valor),0) INTO valor2 FROM cptb00001 a
WHERE a.cod_sp = suplidor.cod_sp AND a.cod_sp_sec = suplidor.cod_sp_sec
AND a.fecha_orig < fecha_inicial AND a.status_t IS NULL AND
a.tipo_doc_cp = "CP" AND a.aplica_a IS NULL
SELECT ISNULL(SUM(a.valor),0) INTO valor3 FROM cptb00001 a
WHERE a.cod_sp = suplidor.cod_sp AND a.cod_sp_sec = suplidor.cod_sp_sec
AND a.fecha_orig < fecha_inicial AND a.status_t IS NULL AND
a.tipo_doc_cp != "CP" AND a.aplica_a IS NOT NULL
IF valor2 IS NULL THEN
LET valor2 = 0
END IF
IF valor3 IS NULL THEN
LET valor3 = 0
END IF
LET suplidor.valor = valor3 + valor2
LET mvtos.cod_sp = suplidor.cod_sp
LET mvtos.cod_sp_sec = suplidor.cod_sp_sec
LET mvtos.balance = suplidor.valor
LET mvtos.cliente = mvtos.cod_sp using "&&",
mvtos.cod_sp_sec using "&&&&"
IF prima is not null THEN
LET mvtos.balance = mvtos.balance * prima
END IF
LET idx_1 = 1
LET salir = "N"
WHILE salir != "S"
FETCH ABSOLUTE idx_1 mvtos_cli INTO mvtos1.*
IF status = NOTFOUND THEN
LET salir = "S"
EXIT WHILE
END IF
DISPLAY "datos: ",mvtos1.nom_sup
IF int_flag THEN
LET salir = "S"
LET numero_msg = 2
CALL msg(numero_msg)
RETURN
END IF
LET idx_1 = idx_1 + 1
IF mvtos1.cod_sp = mvtos.cod_sp AND
mvtos1.cod_sp_sec = mvtos.cod_sp_sec THEN
DISPLAY "datos despues: ",mvtos1.nom_sup
LET mvtos1.cod_sp = mvtos.cod_sp
LET mvtos1.cod_sp_sec = mvtos.cod_sp_sec
LET mvtos1.balance = mvtos.balance
LET mvtos1.cliente = mvtos.cod_sp using "&&",
mvtos.cod_sp_sec using "&&&&"
LET mvtos.* = mvtos1.*
IF prima is not null THEN
LET mvtos.valor = mvtos.valor * prima
END IF
OUTPUT TO REPORT report141(mvtos.*,cod_sup)
END IF
END WHILE
LET idx_2 = 1
LET salir2 = "N"
WHILE salir2 != "S"
FETCH ABSOLUTE idx_2 mvtos_cli1 INTO mvtos1.*
IF status = NOTFOUND THEN
LET salir2 = "S"
EXIT WHILE
END IF
LET idx_2 = idx_2 + 1
IF mvtos1.cod_sp = mvtos.cod_sp AND
mvtos1.cod_sp_sec = mvtos.cod_sp_sec THEN
LET mvtos1.cod_sp = mvtos.cod_sp
LET mvtos1.cod_sp_sec = mvtos.cod_sp_sec
LET mvtos1.balance = mvtos.balance
LET mvtos1.cliente = mvtos.cod_sp using "&&",
mvtos.cod_sp_sec using "&&&&"
LET mvtos.* = mvtos1.*
IF prima is not null THEN
LET mvtos.valor = mvtos.valor * prima
END IF
OUTPUT TO REPORT report141(mvtos.*,cod_sup)
END IF
END WHILE
END WHILE
FINISH REPORT report141
CLEAR SCREEN
END FUNCTION
REPORT report141(x,cod1)
DEFINE x RECORD
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
nom_sup CHAR(30),
dir_sup CHAR(30),
ciu_sup CHAR(30),
tipo_doc CHAR(2),
num_doc CHAR(10),
fecha_doc DATE,
aplica_a CHAR(10),
valor DECIMAL(10,2),
orden_no INTEGER,
cliente CHAR(6) ,
balance DECIMAL(12,2)
END RECORD
DEFINE cod1,dias SMALLINT
DEFINE direccion,p_descrip CHAR(30)
DEFINE p_casa,p_zona,p_numero CHAR(10)
DEFINE doble_on CHAR(2)
DEFINE doble_off CHAR(2)
DEFINE negrillas_on CHAR(6)
DEFINE negrillas_off CHAR(6)
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 vm_120,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 100
ORDER BY x.cliente,x.aplica_a,x.fecha_doc
FORMAT
PAGE HEADER
LET hora = time
LET lj = (110 - LENGTH(p_companias.nombre CLIPPED))/2
PRINT COLUMN 1, comp_on
# PRINT COLUMN 1, doce, negrillas_on clipped
PRINT COLUMN 1, "cpprrp004",
COLUMN lj, p_companias.nombre CLIPPED,
COLUMN 103, "Pag. ",pageno using "###"
PRINT COLUMN 39, "Sistema de Cuentas por Pagar",
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/yy"
# , negrillas_off clipped
{ IF cod1 = 23 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 = x.balance
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
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,
"--------------------------------------------------",
"--------------------------------------------------",
"-----------"
, negrillas_on clipped
PRINT COLUMN 1, "Suplidor:",
COLUMN 10, x.cod_sp using "&&","-",
x.cod_sp_sec using "&&&&",
COLUMN 18, x.nom_sup clipped,
COLUMN 81, "Balance Al: ", fecha_inicial using "dd/mm/yy"
PRINT COLUMN 1,negrillas_on clipped,
COLUMN 10, x.dir_sup clipped," ",x.ciu_sup clipped,
COLUMN 93, x.balance using "(((,(((,(((.##)",
negrillas_off clipped
PRINT COLUMN 1,
"--------------------------------------------------",
"--------------------------------------------------",
"-----------"
LET b_balance = x.balance
# SKIP 1 LINE
PRINT COLUMN 4, "D O C U M E N T O"
PRINT COLUMN 1, "|----------------------|"
PRINT COLUMN 3, "Numero",
COLUMN 11, "Tipo",
COLUMN 17, "Fecha",
COLUMN 29, "APLICADO A",
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.tipo_doc = "CP" AND x.aplica_a IS NOT NULL THEN
LET x.valor = 0
END IF
IF x.valor <> 0 THEN
PRINT COLUMN 3, x.num_doc ,
COLUMN 12, x.tipo_doc,
COLUMN 16, x.fecha_doc using "dd/mm/yy";
LET b_balance = b_balance + x.valor
IF x.aplica_a IS NULL THEN
PRINT COLUMN 29,"OC-",x.orden_no CLIPPED;
ELSE
PRINT COLUMN 29,"FT-",x.aplica_a CLIPPED;
END IF
IF x.valor < 0 THEN
PRINT COLUMN 59, x.valor using "(((,(((,(((.##)",
COLUMN 97, b_balance using "(((,(((,(((.##)"
IF x.tipo_doc = "CP" AND x.aplica_a IS NOT NULL THEN
LET x.valor = x.valor * -1
END IF
LET debito = debito + x.valor
ELSE
PRINT COLUMN 78, x.valor using "(((,(((,(((.##)",
COLUMN 97, b_balance using "(((,(((,(((.##)"
LET credito = credito + x.valor
END IF
LET p_valor = x.valor
LET dias = fecha_final - x.fecha_doc
IF dias > 120 THEN
LET vm_120 = vm_120 + p_valor
END IF
IF dias >91 AND dias >= 121 THEN
LET vm_60 = vm_60 + p_valor
END IF
IF dias > 61 and dias < 91 THEN
LET v46_60 = p_valor + v46_60
END IF
IF dias > 30 and dias <= 61 THEN
LET v31_45 = p_valor + v31_45
END IF
IF dias < 31 THEN
LET v1_30 = p_valor + v1_30
END IF
END IF
AFTER GROUP OF x.cliente
SKIP 1 LINE
PRINT COLUMN 1, "ANALISIS POR ANTIGUEDAD",negrillas_on clipped,
COLUMN 37, "1 a 30",
COLUMN 51, "31 a 60",
COLUMN 66, "61 a 90",
COLUMN 79, "91 a 120",
COLUMN 90, "Mas 120",negrillas_off clipped
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 "(((,(((,((&.&&)",
COLUMN 90, vm_120 using "(((,(((,((&.&&)"
SKIP 1 LINE
PRINT COLUMN 1, "NOTA: FAVOR 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 to TOP OF PAGE
PAGE TRAILER
SKIP 1 LINE
PRINT COLUMN 1,negrillas_on clipped,
COLUMN 10,
"NOMENCLATURA: OC = ORDEN COMPRA CK = CHEQUE FT = FACTURAS ",
"ND = NOTA DE DEBITO NC = NOTA CREDITO CP = PREPAGOS",
negrillas_off clipped
PRINT normal
END REPORT