Files
MBS/PROYECTO/ccdir/ccprrp021.4gl
T

513 lines
17 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : CCPRRP021
OBJETIVO : Resumen de saldo por antiguedad por vendedor porcentual
PROGRAMADOR : Tadeo A. Ferreras
FECHA REALIZACION : Octubre, 18 1993
-------------------------------------------------------------------------------
}
GLOBALS "ccprgb000.4gl"
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 bal_fact20 RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
aplica_a CHAR(10),
valor DECIMAL(12,2)
END RECORD
DEFINE tot_gen20 RECORD
totald DECIMAL(10,2),
totalc DECIMAL(10,2),
totalg DECIMAL(10,2)
END RECORD
DEFINE mvto221 RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
zona CHAR(10),
limite_c DECIMAL(12,2),
rnc CHAR(10),
tipo_doc CHAR(2),
num_doc INTEGER,
fecha_doc DATE,
aplica_a INTEGER,
valor DECIMAL(10,2),
monto_desc LIKE cctb00001.monto_desc,
num_emp SMALLINT,
cliente CHAR(6)
END RECORD
DEFINE mvto220 RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
zona CHAR(10),
limite_c DECIMAL(12,2),
rnc CHAR(10),
tipo_doc CHAR(2),
num_doc INTEGER,
fecha_doc DATE,
aplica_a INTEGER,
valor DECIMAL(10,2),
monto_desc LIKE cctb00001.monto_desc,
num_emp SMALLINT
END RECORD
FUNCTION ccprrp021()
DEFINE valor_gral DECIMAL(12,2)
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM ccfmrp021 FROM "ccfmrp021"
DISPLAY FORM ccfmrp021
CALL pantalla()
DISPLAY "ccprrp021" AT 4,3
DISPLAY "Resumen de Saldo Por Antiguedad Por Vendedor Porcentual" AT 6,12
LET tipo_papel = 2
CALL msgrp000(tipo_papel)
CONSTRUCT criterio ON b.tipo_cliente,b.sec_cliente FROM
tipo_cliente, sec_cliente
INPUT BY NAME fecha_final
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 INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
EXIT INPUT
END INPUT
# Busca los documentos que esten en el rango de fechas especificado
SELECT *FROM systables WHERE tabname = "cliente20"
IF STATUS != NOTFOUND THEN
DROP VIEW cliente20
END IF
SELECT *FROM systables WHERE tabname = "trx20"
IF STATUS != NOTFOUND THEN
DROP VIEW trx20
END IF
SELECT *FROM systables WHERE tabname = "tempo21"
IF STATUS != NOTFOUND THEN
DROP TABLE tempo21
END IF
DISPLAY "Preparando Informacion ... Espere por Favor" AT 19,14
CREATE TABLE tempo21
(num_emp SMALLINT,tipo_cliente SMALLINT,sec_cliente SMALLINT,tipo_doc CHAR(2),
num_doc INTEGER,fecha_orig DATE,aplica_a INTEGER,valor DECIMAL(12,2),
monto_desc DECIMAL(12,2))
INSERT INTO tempo21
SELECT a.cod_emp_sec,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 a.status_t IS NULL AND a.fecha_orig <= fecha_final
CREATE VIEW cliente20 (tipo_cliente,sec_cliente,aplica_a,valor)
AS SELECT tipo_cliente,sec_cliente,aplica_a,SUM(valor+monto_desc)
FROM tempo21
GROUP BY 1,2,3 HAVING SUM(valor+monto_desc) <> 0
CREATE VIEW trx20 (num_emp,tipo_cliente,sec_cliente,tipo_doc,num_doc,fecha_orig,
aplica_a,valor,monto_desc)
AS SELECT a.num_emp,a.tipo_cliente,a.sec_cliente,a.tipo_doc,a.num_doc,
a.fecha_orig,a.aplica_a,a.valor,a.monto_desc FROM tempo21 a,cliente20 b
WHERE b.tipo_cliente = a.tipo_cliente AND b.sec_cliente = a.sec_cliente AND
a.aplica_a = b.aplica_a
LET selec4 =
"SELECT b.tipo_cliente,b.sec_cliente,a.nombre,a.zona_postal,a.limite_credito, ",
" a.num_rnc,b.tipo_doc,b.num_doc,b.fecha_orig,b.aplica_a,b.valor, ",
" b.monto_desc,b.num_emp FROM trx20 b,vetb00004 a ",
"WHERE b.tipo_cliente = a.tipo_cliente AND b.sec_cliente = a.sec_cliente AND ",
" b.tipo_doc != 'PC' AND b.fecha_orig <= ? AND ",
criterio CLIPPED," ORDER BY b.tipo_cliente,b.sec_cliente,b.aplica_a "
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
LET selec1= " SELECT SUM(b.valor+b.monto_desc) FROM cctb00001 b ",
" WHERE b.status_t IS NULL AND ",
" b.fecha_orig <= ? AND b.tipo_doc != 'PC' AND ",
criterio CLIPPED
PREPARE comando FROM selec1
DECLARE busca CURSOR FOR comando
OPEN busca USING fecha_final
DISPLAY "<< Buscando Balance General... Espere Por Favor>>" AT 19,14
START REPORT reporte220 TO "partida16"
DISPLAY " " AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
WHILE STATUS != NOTFOUND
FETCH busca INTO valor_gral
IF STATUS = NOTFOUND THEN
EXIT WHILE
END IF
END WHILE
LET STATUS = 0
LET idx_2 = 1
LET salir1 = "N"
WHILE salir1 != "S"
FETCH mvto_cli INTO mvto220.*
IF STATUS = NOTFOUND THEN
LET idx_2 = 1
LET salir1 = "S"
EXIT WHILE
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET idx_2 = idx_2 + 1
LET mvto221.tipo_cliente = mvto220.tipo_cliente
LET mvto221.sec_cliente = mvto220.sec_cliente
LET mvto221.nombre = mvto220.nombre
LET mvto221.zona = mvto220.zona
LET mvto221.limite_c = mvto220.limite_c
LET mvto221.rnc = mvto220.rnc
LET mvto221.tipo_doc = mvto220.tipo_doc
LET mvto221.num_doc = mvto220.num_doc
LET mvto221.fecha_doc = mvto220.fecha_doc
LET mvto221.aplica_a = mvto220.aplica_a
LET mvto221.valor = mvto220.valor
LET mvto221.monto_desc = mvto220.monto_desc
LET mvto221.num_emp = mvto220.num_emp
LET mvto221.cliente = mvto220.tipo_cliente USING "&&",
mvto220.sec_cliente USING "&&&&"
OUTPUT TO REPORT reporte220(mvto221.*,fecha_final,valor_gral)
END WHILE
FINISH REPORT reporte220
DISPLAY BY NAME tot_gen20.*
PROMPT "Desea Imprimir Reporte [S/N].....?" FOR CHAR opt
LET opt = UPSHIFT(opt)
IF opt = "S" THEN
RUN "cat partida16|$DBPRINT"
END IF
DROP VIEW trx20
DROP VIEW cliente20
DELETE FROM tempo21 WHERE tipo_doc != "kk"
CLEAR SCREEN
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
REPORT reporte220(x,fecha5,valor_gral1)
DEFINE x RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
zona CHAR(10),
limite_c DECIMAL(12,2),
rnc CHAR(10),
tipo_doc CHAR(2),
num_doc INTEGER,
fecha_doc DATE,
aplica_a INTEGER,
valor DECIMAL(10,2),
monto_desc LIKE cctb00001.monto_desc,
num_emp SMALLINT,
cliente 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 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.num_emp,x.cliente,x.aplica_a,x.tipo_doc
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 69
LET comp_on = ASCII 15
LET comp_off = ASCII 18
LET comprimido = ASCII 031
LET doce = ASCII 27, ASCII 77
LET normal = ASCII 27, ASCII 80
LET normall = ASCII 030
LET hora = time
LET lj = (136 - LENGTH(p_companias.nombre CLIPPED))/2
PRINT COLUMN 1, comprimido
PRINT COLUMN 1, "ccprrp021",
COLUMN lj, p_companias.nombre CLIPPED,
COLUMN 129, "Pag. ",pageno USING "###"
PRINT COLUMN 52, "Sistema de Cuentas por Cobrar",
COLUMN 127, today using "dd/mm/yyyy"
PRINT COLUMN 40,
"Resumen de Saldo Por Antiguedad X Vendedor Porcentual",
COLUMN 132, hora
PRINT COLUMN 61," Al ", fecha5 using "dd/mm/yy"
PRINT COLUMN 1,negrillas_on
PRINT COLUMN 1,"--------------------------------------------------",
"--------------------------------------------------",
"------------------------------------"
PRINT COLUMN 1, "Vendedor",
COLUMN 63, "1 a 30",
COLUMN 80, "31 a 45",
COLUMN 96, "45 a 60",
COLUMN 112, "Mas de 60",
COLUMN 130, "BALANCE" ,negrillas_off
PRINT COLUMN 1, "--------------------------------------------------",
"--------------------------------------------------",
"------------------------------------"
BEFORE GROUP OF x.num_emp
SELECT nom1_emp,apell1_emp INTO nombre1,apellido FROM adtb00003
WHERE num_emp = x.num_emp
SKIP 1 LINE
PRINT COLUMN 14, x.num_emp using "&&&"," ",
nombre1 clipped, " ",apellido CLIPPED;
LET v130 = 0
LET v3145 = 0
LET v4660 = 0
LET vm60 = 0
LET v_balance = 0
BEFORE GROUP OF x.cliente
LET descrip1 = x.nombre clipped
LET d1a30 = 0
LET d31a45 = 0
LET d46a60 = 0
LET m60 = 0
LET b_balance = 0
ON EVERY ROW
LET fecha_fact = x.fecha_doc
IF b_balance IS NULL THEN
LET b_balance = 0
END IF
IF x.valor is null THEN
LET x.valor = 0
END IF
IF x.monto_desc is null THEN
LET x.monto_desc = 0
END IF
IF tdebito IS NULL THEN
LET tdebito = 0
END IF
IF tcredito IS NULL THEN
LET tcredito= 0
END IF
IF (x.valor + x.monto_desc) > 0 THEN
LET tdebito = tdebito + (x.valor + x.monto_desc)
ELSE
LET tcredito = tcredito + (x.valor + x.monto_desc)
END IF
LET b_balance = b_balance + (x.valor + x.monto_desc)
LET num_dia = fecha5 - fecha_fact
CASE
WHEN num_dia < 31
LET d1a30 = d1a30 + (x.valor + x.monto_desc)
LET v130 = v130 + (x.valor + x.monto_desc)
EXIT CASE
WHEN num_dia > 30 AND num_dia < 46
LET d31a45 = d31a45 + (x.valor+x.monto_desc)
LET v3145 = v3145 + (x.valor+x.monto_desc)
EXIT CASE
WHEN num_dia > 45 AND num_dia < 61
LET d46a60 = d46a60 + (x.valor+x.monto_desc)
LET v4660 = v4660 + (x.valor+x.monto_desc)
EXIT CASE
OTHERWISE
LET m60 = m60 + (x.valor+x.monto_desc)
LET vm60 = vm60 + (x.valor+x.monto_desc)
EXIT CASE
END CASE
AFTER GROUP OF x.cliente
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 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 tbalance = tbalance + b_balance
LET debito = 0
LET x.valor = 0
LET d1a30 = 0
LET d31a45 = 0
LET d46a60 = 0
LET m60 = 0
LET b_balance = 0
AFTER GROUP OF x.num_emp
LET v_balance = 0
LET v_balance = v130 + v3145 + v4660 + vm60
PRINT COLUMN 59, v130 using "(((,(((,(((.##)",
COLUMN 75, v3145 using "(((,(((,(((.##)",
COLUMN 91, v4660 using "(((,(((,(((.##)",
COLUMN 107, vm60 using "(((,(((,(((.##)",
COLUMN 123, v_balance using "(((,(((,(((.##)"
PRINT COLUMN 59, "===============",
COLUMN 75, "===============",
COLUMN 91, "===============",
COLUMN 107, "===============",
COLUMN 123, "==============="
, negrillas_off
PRINT COLUMN 62, (v130/v_balance)*100 using "(,(((.##)"," %",
COLUMN 78, (v3145/v_balance)*100 using "(,(((.##)"," %",
COLUMN 94, (v4660/v_balance)*100 using "(,(((.##)"," %",
COLUMN 110, (vm60/v_balance)*100 using "(,(((.##)"," %",
COLUMN 126, (v_balance/v_balance)*100 using "(,(((.##)"," %"
PRINT COLUMN 1," "
ON LAST ROW
SKIP 1 LINE
PRINT COLUMN 27, "Total General",
COLUMN 59, td1a30 using "(((,(((,(((.##)",
COLUMN 75, td31a45 using "(((,(((,(((.##)",
COLUMN 91, td46a60 using "(((,(((,(((.##)",
COLUMN 107, tm60 using "(((,(((,(((.##)",
COLUMN 123, tbalance using "(((,(((,(((.##)"
PRINT COLUMN 59, "===============",
COLUMN 75, "===============",
COLUMN 91, "===============",
COLUMN 107, "===============",
COLUMN 123, "==============="
PRINT COLUMN 62, (td1a30/tbalance)*100 using "(,(((.##)"," %",
COLUMN 78, (td31a45/tbalance)*100 using "(,(((.##)"," %",
COLUMN 94, (td46a60/tbalance)*100 using "(,(((.##)"," %",
COLUMN 110, (tm60/tbalance)*100 using "(,(((.##)"," %",
COLUMN 126, (tbalance/tbalance)*100 using "(,(((.##)"," %"
LET tot_gen20.totald = tdebito
LET tot_gen20.totalg = tbalance
LET td1a30 = 0
LET td31a45 = 0
LET td46a60 = 0
LET tm60 = 0
LET tbalance = 0
LET tdebito = 0
LET tcredito = 0
PRINT normall
END REPORT