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

409 lines
13 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : CCPRRP040
OBJETIVO : CREAR ARCHIVO DE LOS CLIENTES CON SUS SALDOS PARA
SER UTILIZADO EN EL CENTRO DE INFORMACION CREDITICA.
PROGRAMADOR : Juan F. Soto
FECHA REALIZACION : Junio 23, 1997.
-------------------------------------------------------------------------------
}
GLOBALS "ccprgb000.4gl"
DEFINE t_p CHAR(2)
DEFINE imp,salir17,salir,tipo_venta CHAR(1)
DEFINE fecha_corte DATE
DEFINE cod_emp_sec,ck_dev INTEGER
DEFINE cliente_ant,idx_1, idx_2 SMALLINT
DEFINE selec1 CHAR(1000)
DEFINE cheque_dv CHAR(11),
pcalle,pcasa,pbarrio,purbanizacion,psecuencia CHAR(20),
nom_zona,nom_prov CHAR(20)
DEFINE de RECORD
aplica_a INTEGER,
pendiente DECIMAL(12,2),
fecha_factura DATE
END RECORD
DEFINE devolucion RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
sec_vend SMALLINT,
aplica_a INTEGER,
pendiente DECIMAL(12,2),
fecha_factura DATE,
tipo_doc CHAR(2)
END RECORD
DEFINE doccli16 RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
aplica_a INTEGER,
pendiente DECIMAL(12,2),
num_rnc LIKE vetb00004.num_rnc,
zona_postal LIKE vetb00004.zona_postal,
cod_zona LIKE vetb00004.cod_zona,
cod_provincia LIKE vetb00004.cod_provincia,
limite_credito LIKE vetb00004.limite_credito,
fax LIKE vetb00004.fax,
telefono LIKE vetb00004.telefono,
direccion CHAR(80),
fecha_factura DATE,
tipo_doc CHAR(2)
END RECORD
DEFINE doccli16_1 RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
aplica_a INTEGER,
fecha_factura DATE,
sec_vend SMALLINT,
pendiente DECIMAL(12,2),
nombre CHAR(30)
END RECORD
DEFINE dat_c RECORD
sec_cliente SMALLINT,
nombre CHAR(30)
END RECORD
DEFINE tot_gen2 RECORD
total1 DECIMAL(10,2),
total2 DECIMAL(10,2),
total3 DECIMAL(10,2),
total4 DECIMAL(10,2),
total5 DECIMAL(10,2)
END RECORD
FUNCTION ccprrp040()
DEFINE valor_gral DECIMAL(12,2)
DEFINE salir16_1,salir16 CHAR(1)
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM ccfmrp040 FROM "ccfmrp040"
DISPLAY FORM ccfmrp040
CALL pantalla()
DISPLAY "ccprrp040" AT 4,3
DISPLAY "Partidas Pendientes de Cobro Por Vendedor" AT 6,18
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
###### Captura de los valores que intervendran en la condicion de busqueda.
INPUT BY NAME tipo_venta,fecha_corte
AFTER FIELD tipo_venta
IF tipo_venta is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_venta
END IF
IF tipo_venta = "1" OR tipo_venta = "2" THEN
DISPLAY BY NAME tipo_venta
ELSE
LET numero_msg = 7
CALL msg(numero_msg)
NEXT FIELD tipo_venta
END IF
BEFORE FIELD fecha_corte
LET fecha_corte = today
AFTER FIELD fecha_corte
IF fecha_corte is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_corte
END IF
END INPUT
##### Creando la facilidad para poder cancelar el proceso mediante la tecla
##### DELETE o SUPR.
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
##### Crea criterio de busqueda
##### Variables que intervienen en la condicion de busqueda, teniendo estas
##### la ventaja de que se pueden dejar en blanco en caso de que desee todos
##### los registro con ese campo.
CONSTRUCT criterio ON a.tipo_cliente,a.sec_cliente
FROM tipo_cliente,sec_cliente
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
# Busca pendiente de las facturas cuyas fechas de vencimiento son menores
# a la fecha de corte
LET selec3 =
"SELECT a.tipo_cliente,a.sec_cliente,b.nombre, ",
" a.aplica_a,SUM(a.valor + a.monto_desc),b.num_rnc,b.zona_postal, ",
" b.cod_zona,b.cod_provincia,b.limite_credito,b.fax,b.telefono ",
"FROM cctb00001 a,vetb00004 b,vetb00028 c ",
"WHERE (a.fecha_orig <= ? AND a.tipo_cliente = 12 AND ",criterio CLIPPED,
" AND a.sec_cliente = b.sec_cliente AND a.sec_cliente = c.sec_cliente AND ",
" a.sec_cliente < 9000 AND a.status_t is null AND ",
" a.tipo_doc != 'PC') AND ",
" a.num_doc IS NOT NULL ",
" AND a.status_t IS NULL AND c.status_t IS NULL ",
"GROUP BY 1,2,3,4,6,7,8,9,10,11,12 "
DISPLAY " " AT 19,14
DISPLAY "<< Informacion Generandose... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
PREPARE busca_pendiente FROM selec3
DECLARE ft_pendiente CURSOR FOR busca_pendiente
OPEN ft_pendiente USING fecha_corte
# Creacion Tabla Temporal
CREATE TABLE informa1
(
fecha DATE,
nombre CHAR(10),
codigo CHAR(7),
rnc CHAR(10),
zona_p CHAR(10),
direc CHAR(80),
barrio CHAR(20),
ciudad CHAR(20),
telefono CHAR(8),
limite DECIMAL(12,2),
t1a30 DECIMAL(12,2),
t45a60 DECIMAL(12,2),
t90 DECIMAL(12,2),
t120 DECIMAL(12,2),
t149 DECIMAL(12,2),
t180 DECIMAL(12,2)
)
LET salir16 = "N"
WHILE salir16 != "S"
FETCH ft_pendiente INTO doccli16.*
IF status = NOTFOUND THEN
LET salir16 = "S"
EXIT WHILE
END IF
IF int_flag THEN
LET int_flag = FALSE
LET numero_msg = 2
CALL msg(numero_msg)
RETURN
END IF
SELECT UNIQUE a.tipo_doc,a.fecha_orig
INTO doccli16.tipo_doc,doccli16.fecha_factura
FROM cctb00001 a
WHERE a.tipo_cliente = a.tipo_cliente AND
a.sec_cliente = doccli16.sec_cliente AND
a.num_doc = doccli16.aplica_a AND
a.num_doc = a.aplica_a AND
a.tipo_doc not in ("PG","NC","PC") AND
a.aplica_a = a.aplica_a
IF doccli16.tipo_doc = "AV" THEN
SELECT SUM(a.valor+a.monto_desc)*-1 INTO doccli16.pendiente
FROM cctb00001 a
WHERE (a.fecha_orig <= fecha_corte AND
a.tipo_cliente = doccli16.tipo_cliente AND
a.sec_cliente = doccli16.sec_cliente AND
a.status_t IS NULL AND a.tipo_doc = "AV") AND
a.num_doc = doccli16.aplica_a
END IF
# Busca La Direccion Del Clinte
LET doccli16.direccion = NULL
LET pcalle = NULL
LET pcasa = NULL
LET pbarrio= NULL
LET purbanizacion= NULL
SELECT a.calle,a.casa_num,a.barrio,a.urbanizacion,a.secuencia_visita
INTO pcalle,pcasa,pbarrio,purbanizacion,psecuencia
FROM vetb00005 a
WHERE a.tipo_cliente = doccli16.tipo_cliente AND
a.sec_cliente = doccli16.sec_cliente
LET doccli16.direccion = pcalle CLIPPED," ",pcasa CLIPPED," ",pbarrio
# Busca La Ciudad
SELECT a.descrip INTO nom_zona
FROM vetb00008 a
WHERE a.cod_zona = doccli16.cod_zona
SELECT a.nombre_provincia INTO nom_prov
FROM vetb00020 a
WHERE a.cod_provincia = doccli16.cod_provincia
OUTPUT TO REPORT reporte40(doccli16.*,tipo_venta,fecha_corte,
valor_gral)
END WHILE
FINISH REPORT reporte40
UNLOAD TO "clinte.inf" SELECT *FROM informa
DISPLAY BY NAME tot_gen2.*
CLEAR SCREEN
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
###### Funcion que genera el reporte
REPORT reporte40(x,venta,corte,valor_gral1)
DEFINE x RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
aplica_a INTEGER,
pendiente DECIMAL(12,2),
num_rnc LIKE vetb00004.num_rnc,
zona_postal LIKE vetb00004.zona_postal,
cod_zona LIKE vetb00004.cod_zona,
cod_provincia LIKE vetb00004.cod_provincia,
limite_credito LIKE vetb00004.limite_credito,
fax LIKE vetb00004.fax,
telefono LIKE vetb00004.telefono,
direccion CHAR(80),
fecha_factura DATE,
tipo_doc CHAR(2)
END RECORD
DEFINE venta CHAR(1),
corte DATE,
dif INTEGER
DEFINE valor_gral1 DECIMAL(12,2)
DEFINE nom1,apell1 CHAR(25)
DEFINE fecha_factura DATE
DEFINE de1a30, de31a45, de46a60, masde60, total_saldo DECIMAL(12,2)
DEFINE t30, t45, t60, tsaldo ,
t90, t120, t149, t180 DECIMAL(12,2)
DEFINE ttt30, ttt45, ttt60, tttm60, tttsaldo DECIMAL(12,2),
codigo CHAR(7),
dias INTEGER
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 0
FORMAT
BEFORE GROUP OF x.sec_cliente
LET t30 = 0
LET t60 = 0
LET t90 = 0
LET t120 = 0
LET t149 = 0
LET t180 = 0
LET existe = "N"
LET descrip1 = NULL
ON EVERY ROW
LET ck_dev = null
SELECT MAX(a.valor_cheque) INTO ck_dev FROM cctb00001 a
WHERE a.sec_cliente = x.sec_cliente AND a.aplica_a = x.aplica_a AND
a.tipo_doc = "ND"
IF ck_dev IS NOT NULL OR ck_dev <> 0 THEN
LET cheque_dv = "CD-",ck_dev USING "<<<<<<"
ELSE
LET cheque_dv = NULL
END IF
IF x.fecha_factura IS NULL THEN
LET x.fecha_factura = 0
END IF
#### Calcula la diferencia de dias de pago a determinada factura para acu-
#### mularlo en la variable correspondiente por tipo de dia.
LET dias = corte - x.fecha_factura
#### Imprime y acumula los valores correspondientes a pago realizados en
#### menos de 31 dias.
IF dias >= 0 AND dias < 31 AND x.pendiente <> 0 THEN
LET t30 = t30 + x.pendiente
END IF
#### Imprime y acumula los valores correspondientes a pago realizados en
#### mas de 30 y menos de 45 dias.
IF dias >= 31 AND dias < 61 AND x.pendiente <> 0 THEN
LET t60 = t60 + x.pendiente
END IF
#### Imprime y acumula los valores correspondientes a pago realizados en
#### mas de 60 menor a 90 dias.
IF dias >= 61 AND dias < 90 AND x.pendiente <> 0 THEN
LET t90 = t90 + x.pendiente
END IF
#### Imprime y acumula los valores correspondientes a pago realizados en
#### mas de 90 menor a 120 dias.
IF dias >= 90 AND dias < 120 AND x.pendiente <> 0 THEN
LET t120 = t120 + x.pendiente
END IF
#### Imprime y acumula los valores correspondientes a pago realizados en
#### mas de 120 menor a 150 dias.
IF dias >= 120 AND dias < 150 AND x.pendiente <> 0 THEN
LET t149 = t149 + x.pendiente
END IF
#### Imprime y acumula los valores correspondientes a pago realizados en
#### mas de 150 menor a 180 dias.
IF dias >= 150 AND dias < 180 AND x.pendiente <> 0 THEN
LET t180 = t180 + x.pendiente
END IF
IF x.pendiente != 0 THEN
LET existe = "S"
END IF
AFTER GROUP OF x.sec_cliente
######## IMPRIME totales acumulado por cliente.
IF existe IS NOT NULL AND existe = "S" THEN
LET codigo = x.tipo_cliente USING "##","-",x.sec_cliente
USING "&&&&"
INSERT INTO informa1 VALUES(corte,x.nombre,codigo,x.num_rnc,
x.zona_postal,x.direccion,
pbarrio,nom_prov,x.telefono,
x.limite_credito,t30,t60,t90,
t120,t149,t180)
LET t30 = 0
LET t60 = 0
LET t90 = 0
LET t120 = 0
LET t149 = 0
LET t180 = 0
END IF
END REPORT