623 lines
25 KiB
Plaintext
623 lines
25 KiB
Plaintext
{------------------------------------------------------------------------------
|
|
PROGRAMA : CCPRRP050
|
|
OBJETIVO : Programa para cobros compulsivos CxC
|
|
PROGRAMADOR : Valentin Rodriguez
|
|
FECHA REALIZACION :
|
|
------------------------------------------------------------------------------}
|
|
|
|
|
|
GLOBALS "ccprgb000.4gl"
|
|
|
|
DEFINE num_hijos, num_padres, totalRegistros INT
|
|
DEFINE p,l SMALLINT
|
|
DEFINE sbalance, sbalance1 DECIMAL(12,2)
|
|
DEFINE corte DATE
|
|
DEFINE fecha_creacion VARCHAR(30)
|
|
|
|
#RECORD DONDE GUARDAREMOS LAS COTIZACIONES, ORDENES Y FATURAS ENVIADOS
|
|
#POR EL METODO 'buscaBalance'
|
|
|
|
DEFINE nodos_hijos RECORD
|
|
clientes VARCHAR(150),
|
|
telefono CHAR(15),
|
|
limCredito INT,
|
|
documento CHAR(15),
|
|
cotizacion CHAR(15),
|
|
num_oc CHAR(15),
|
|
corriente DEC(12,2),
|
|
d1a30 DEC(12,2),
|
|
d31a60 DEC(12,2),
|
|
d61a90 DEC(12,2),
|
|
mas90 DEC(12,2),
|
|
totalSaldo DEC(12,2),
|
|
fechaPago DATE,
|
|
montoPago DEC(12,2),
|
|
nodo VARCHAR(10),
|
|
imagen VARCHAR(30),
|
|
sec_vend INT
|
|
END RECORD
|
|
|
|
DEFINE nodos_sub_hijos DYNAMIC ARRAY OF RECORD
|
|
tipo_cliente,
|
|
sec_cliente INT,
|
|
documento CHAR(15),
|
|
num_oc CHAR(15),
|
|
cotizacion CHAR(15),
|
|
corriente DEC(12,2),
|
|
d1a30 DEC(12,2),
|
|
d31a60 DEC(12,2),
|
|
d61a90 DEC(12,2),
|
|
mas90 DEC(12,2),
|
|
totalSaldo DEC(12,2),
|
|
fechaPago DATE,
|
|
montoPago DEC(12,2),
|
|
imagen VARCHAR(30),
|
|
nombre VARCHAR(50),
|
|
sec_vend INT ,
|
|
tipo_doc VARCHAR(10),
|
|
fecha_vence DATE,
|
|
moneda VARCHAR(50)
|
|
END RECORD
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
LET corte = TODAY
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
CONNECT TO "marmotech" USER usuarios USING clave
|
|
|
|
#PURGAMOS TODA LA INFORMACION DE LA TABLA ORIGEN
|
|
DELETE FROM cctb00042
|
|
|
|
#INSERTAMOS LOS DATOS EN LA TABLA DE REGISTRO DE LOGS
|
|
LET fecha_creacion = CURRENT
|
|
INSERT INTO cctb00045(us_crea, fech_crea)
|
|
VALUES(usuarios,fecha_creacion)
|
|
|
|
CALL cobros_comp()
|
|
END MAIN
|
|
|
|
FUNCTION cobros_comp()
|
|
OPEN WINDOW HOME_FRM WITH FORM 'ccfmmt051'
|
|
CALL datos()
|
|
CLOSE WINDOW HOME_FRM
|
|
END FUNCTION
|
|
|
|
FUNCTION datos()
|
|
|
|
DEFINE pdescrip, bdescrip VARCHAR(100),
|
|
ytelefono CHAR(15),
|
|
pmoneda VARCHAR(50),
|
|
hijos, padre VARCHAR(10),
|
|
pcodigo,i,x, ycodigo, tipo_cliente, sec_cliente,idz, sec_vend INT,
|
|
xcorriente,x1a30,x31a60,x61a90,xmas90,xtotalSaldo, ylimcredito DEC(12,2)
|
|
|
|
LET selec =
|
|
" SELECT distinct ISNULL(c.descripcion,a.nombre), ISNULL(c.codigo_grupo,1000), ",
|
|
" a.tipo_cliente, a.sec_cliente ",
|
|
" FROM marmotech.dbo.vetb00054 AS c INNER JOIN ",
|
|
" marmotech.dbo.vetb00052 AS b ON (c.codigo_grupo = b.codigo_grupo) RIGHT OUTER JOIN ",
|
|
" marmotech.dbo.vetb00004 AS a ON (b.tipo_cliente = a.tipo_cliente) AND (b.sec_cliente = a.sec_cliente) ",
|
|
" INNER JOIN marmotech.dbo.vetb00060 d ON d.tipo_cliente = a.tipo_cliente AND d.clientes_activos = 'SI' ",
|
|
" WHERE",
|
|
" a.tipo_cliente=15 and a.sec_cliente in (100,2297,5046,6081) and ",
|
|
" a.status_t IS NULL"
|
|
PREPARE comando FROM selec
|
|
DECLARE busca CURSOR FOR comando
|
|
|
|
#CONTAMOS LA CANTIDAD DE NODOS PADRES
|
|
CALL countPadres() RETURNING num_padres
|
|
|
|
#AQUI ITERAMOS ENTRE LOS CLIENTES PARA TENER UN TOTAL Y CREAR EL
|
|
#PROGRESS BAR
|
|
LET totalRegistros = 0
|
|
# FOREACH busca INTO bdescrip,ycodigo
|
|
# CALL countHijos(ycodigo) RETURNING num_hijos
|
|
# LET totalRegistros = totalRegistros + num_hijos
|
|
# END FOREACH
|
|
DISPLAY "total registros antes ",totalRegistros," ",num_padres
|
|
LET totalRegistros = totalRegistros + num_padres
|
|
# DISPLAY totalRegistros TO c_total
|
|
DISPLAY "Registros ",totalRegistros
|
|
LET i = 1
|
|
FOREACH busca INTO pdescrip,pcodigo,tipo_cliente, sec_cliente
|
|
|
|
#BUSCA BALANCE DEL CLIENTE PARA DETERMINAR SI ESTA EN '0'
|
|
SELECT SUM(a.valor+a.monto_desc)
|
|
INTO sbalance
|
|
FROM cctb00001 a
|
|
WHERE (a.tipo_cliente = tipo_cliente AND
|
|
a.sec_cliente = sec_cliente) AND
|
|
(a.fecha_orig <= corte) AND
|
|
a.tipo_doc NOT IN ("AV","AP") AND
|
|
a.status_t IS NULL
|
|
|
|
SELECT SUM(a.valor+a.monto_desc)
|
|
INTO sbalance1
|
|
FROM cctb00001 a
|
|
WHERE (a.tipo_cliente = tipo_cliente AND
|
|
a.sec_cliente = sec_cliente) AND
|
|
(a.fecha_orig <= corte) AND
|
|
a.tipo_doc IN ("AV") AND
|
|
a.status_t IS NULL
|
|
|
|
IF sbalance IS NULL THEN
|
|
LET sbalance = 0
|
|
END IF
|
|
|
|
IF sbalance1 IS NULL THEN
|
|
LET sbalance1 = 0
|
|
END IF
|
|
|
|
LET sbalance = sbalance - sbalance1
|
|
|
|
IF sbalance > 0 THEN
|
|
CALL llenahijos(i,pcodigo,tipo_cliente, sec_cliente)
|
|
RETURNING x,xcorriente,x1a30,x31a60,x61a90,xmas90,xtotalSaldo,
|
|
ytelefono, ylimcredito, sec_vend,pmoneda
|
|
|
|
--IF xtotalSaldo > 0 THEN
|
|
|
|
#INSERTAMOS EL NODO PADRE
|
|
|
|
LET hijos = i USING "<<<<<<"
|
|
LET padre = i
|
|
LET pdescrip ="(", tipo_cliente USING "<<","-",sec_cliente USING "<<<<<<<<",")",pdescrip CLIPPED
|
|
|
|
DISPLAY "CLIENTE ",pdescrip
|
|
INSERT INTO cctb00042(clientes,tipo_cliente, sec_cliente,corriente,d1a30,d31a60,d61a90,mas90,totalSaldo, hijos,
|
|
imagen, sec_vend,moneda)
|
|
VALUES(pdescrip,tipo_cliente, sec_cliente,xcorriente,x1a30,x31a60,x61a90,xmas90,sbalance, hijos, 'about.png',
|
|
sec_vend,pmoneda)
|
|
|
|
#LET l = nodos_hijos.getLength()
|
|
#INSERTAMOS EL NODO HIJO
|
|
|
|
# INSERT INTO cctb00042(clientes,tipo_cliente, sec_cliente, telefono,limCredito, corriente,d1a30,d31a60,d61a90,mas90,totalSaldo,nodo,hijos, sec_vend) --
|
|
# VALUES(nodos_hijos.clientes,tipo_cliente, sec_cliente,nodos_hijos.telefono,nodos_hijos.limcredito,nodos_hijos.corriente,nodos_hijos.d1a30,nodos_hijos.d31a60,nodos_hijos.d61a90,nodos_hijos.mas90,
|
|
# nodos_hijos.totalsaldo, padre, hijos, sec_vend)
|
|
|
|
|
|
#INSERTAMOS EL NODO SUB-HIJO
|
|
LET l = nodos_sub_hijos.getLength()
|
|
FOR idz = 1 TO nodos_sub_hijos.getLength()
|
|
IF nodos_sub_hijos[idz].totalSaldo > 0 THEN
|
|
LET padre = i USING "<<<<<<"
|
|
LET hijos = i USING "<<<<<<",".",idz USING "<<<<<<"
|
|
|
|
INSERT INTO cctb00042(clientes, tipo_cliente, sec_cliente, factura,orden,cotizacion,corriente,d1a30,d31a60,d61a90,mas90,totalSaldo,nodo,hijos, sec_vend,
|
|
tipo_doc,fecha_vence,moneda)
|
|
VALUES(' ',tipo_cliente, sec_cliente,nodos_sub_hijos[idz].documento, nodos_sub_hijos[idz].num_oc, nodos_sub_hijos[idz].cotizacion,
|
|
nodos_sub_hijos[idz].corriente, nodos_sub_hijos[idz].d1a30, nodos_sub_hijos[idz].d31a60, nodos_sub_hijos[idz].d61a90, nodos_sub_hijos[idz].mas90,
|
|
nodos_sub_hijos[idz].totalsaldo, padre, hijos, nodos_sub_hijos[idz].sec_vend,nodos_sub_hijos[idz].tipo_doc,
|
|
nodos_sub_hijos[idz].fecha_vence,nodos_sub_hijos[idz].moneda)
|
|
END IF
|
|
END FOR
|
|
LET i = i + 1
|
|
--END IF
|
|
END IF
|
|
END FOREACH
|
|
END FUNCTION
|
|
|
|
FUNCTION llenahijos(j,kcodigo,htipo_cliente, hsec_cliente)
|
|
DEFINE pnombre VARCHAR(100),
|
|
xtelefono CHAR(15),
|
|
xmoneda VARCHAR(50),
|
|
xtipo_cliente,xsec_cliente, j,kcodigo, htipo_cliente,
|
|
hsec_cliente,sec_vend INT,
|
|
xcorriente,x1a30,x31a60,x61a90,xmas90,xtotalSaldo, xlimcredito,
|
|
txcorriente,tx1a30,tx31a60,tx61a90,txmas90,txtotalSaldo DEC(12,2),
|
|
selec2 STRING
|
|
|
|
IF kcodigo <> 1000 THEN
|
|
LET selec2 =
|
|
"SELECT RTRIM('('+CAST(a.tipo_cliente AS CHAR(2))+'-'+RTRIM(CAST(a.sec_cliente AS char(10)))+')') ",
|
|
"+ a.nombre, isnull(a.telefono, 'XXX-XXX-XXXX'),a.limite_credito, a.tipo_cliente,a.sec_cliente, ",
|
|
" c.simbolo ",
|
|
"FROM vetb00004 a,vetb00052 b,vetb00060 c,vetb00061 d ",
|
|
"WHERE ",
|
|
"(a.tipo_cliente = ", htipo_cliente ,") AND ",
|
|
"(a.sec_cliente = ", hsec_cliente ,") AND ",
|
|
"(a.tipo_cliente = b.tipo_cliente) AND ",
|
|
"(a.sec_cliente = b.sec_cliente) AND ",
|
|
"a.tipo_cliente = d.tipo_cliente AND c.ventas=d.ventas AND ",
|
|
# " a.tipo_cliente = 15 and a.sec_cliente=100 and ",
|
|
"a.status_t IS NULL "
|
|
ELSE
|
|
LET selec2 =
|
|
"SELECT RTRIM('('+CAST(a.tipo_cliente AS CHAR(2))+'-'+RTRIM(CAST(a.sec_cliente AS char(10)))+')') ",
|
|
"+ a.nombre, isnull(a.telefono, 'XXX-XXX-XXXX'),a.limite_credito, a.tipo_cliente,a.sec_cliente, ",
|
|
" c.simbolo ",
|
|
"FROM vetb00004 a,vetb00060 c,vetb00061 d ",
|
|
"WHERE ",
|
|
"(a.tipo_cliente = ", htipo_cliente ," AND ",
|
|
"a.sec_cliente = ", hsec_cliente ,") AND ",
|
|
"a.tipo_cliente = d.tipo_cliente AND c.ventas=d.ventas AND ",
|
|
# " a.tipo_cliente = 15 and a.sec_cliente=100 and ",
|
|
"CAST(a.tipo_cliente AS CHAR(4))+ '-'+ CAST(a.sec_cliente AS CHAR(10)) NOT IN ",
|
|
"(SELECT CAST(b.tipo_cliente AS CHAR(4))+ '-'+ CAST(b.sec_cliente AS CHAR(10)) FROM vetb00052 b) AND ",
|
|
"a.status_t IS NULL "
|
|
|
|
END IF
|
|
PREPARE hcomando FROM selec2
|
|
DECLARE busca_h CURSOR FOR hcomando
|
|
|
|
LET k = j + 1
|
|
LET p = j + 1
|
|
|
|
LET txcorriente=0
|
|
LET tx1a30=0
|
|
LET tx31a60=0
|
|
LET tx61a90=0
|
|
LET txmas90=0
|
|
LET txtotalSaldo=0
|
|
|
|
FOREACH busca_h INTO pnombre, xtelefono, xlimcredito, xtipo_cliente, xsec_cliente,xmoneda
|
|
|
|
#LLENAMOS EL PROGRESSBAR DE ACUERDO A LOS DATOS PROCESADOS.
|
|
LET progreso = ( p / totalRegistros ) * 100
|
|
# DISPLAY progreso TO progreso
|
|
# DISPLAY p TO c_procesados
|
|
DISPLAY "Procesados ",p
|
|
|
|
# CALL ui.Interface.refresh()
|
|
|
|
LET nodos_hijos.clientes = pnombre
|
|
LET nodos_hijos.nodo = j USING "<<<<<<"
|
|
|
|
CALL buscaBalance(xtipo_cliente, xsec_cliente, j)
|
|
RETURNING xcorriente,x1a30,x31a60,x61a90,xmas90,xtotalSaldo, sec_vend
|
|
|
|
LET nodos_hijos.corriente =xcorriente
|
|
LET nodos_hijos.d1a30= x1a30
|
|
LET nodos_hijos.d31a60 = x31a60
|
|
LET nodos_hijos.d61a90= x61a90
|
|
LET nodos_hijos.mas90=xmas90
|
|
LET nodos_hijos.totalSaldo=xtotalSaldo
|
|
LET nodos_hijos.telefono = xtelefono
|
|
LET nodos_hijos.limCredito = xlimcredito
|
|
LET nodos_hijos.sec_vend = sec_vend
|
|
|
|
LET txcorriente = txcorriente + xcorriente
|
|
LET tx1a30 = x1a30+tx1a30
|
|
LET tx31a60 = tx31a60 + x31a60
|
|
LET tx61a90 = tx61a90 + x61a90
|
|
LET txmas90 = xmas90 +txmas90
|
|
LET txtotalSaldo = xtotalSaldo +txtotalSaldo
|
|
|
|
LET j = j+1
|
|
|
|
|
|
END FOREACH
|
|
|
|
{IF p + num_padres >= totalRegistros THEN
|
|
CALL fgl_winmessage("INFO", "DATOS ACTUALIZADOS CORRECTAMENTES", "INFO")
|
|
END IF}
|
|
|
|
RETURN j,txcorriente,tx1a30,tx31a60,tx61a90,txmas90,txtotalSaldo, xtelefono,
|
|
xlimcredito, sec_vend,xmoneda
|
|
END FUNCTION
|
|
|
|
FUNCTION buscaBalance(ktipo,ksec,j)
|
|
DEFINE ktipo,ksec,dias, j INT,
|
|
zcorriente,z1a30,z31a60,z61a90,zmas90,ztotalSaldo,t_ztotalSaldo,
|
|
t_zcorriente,t_z1a30,t_z31a60,t_z61a90,t_zmas90,t_t_totalSaldo DEC(12,2),
|
|
selec1 STRING,
|
|
zmoneda VARCHAR(50),
|
|
fechaAV,hoy DATE,
|
|
factura CHAR(10)
|
|
|
|
DEFINE datos RECORD
|
|
factura INT,
|
|
pendiente DECIMAL(12,2),
|
|
nombre VARCHAR(50),
|
|
fecha_ven DATE,
|
|
num_doc INT,
|
|
cotizacion_no,
|
|
num_oc INT,
|
|
tipo_doc CHAR(7),
|
|
tipo_cliente,
|
|
sec_cliente,
|
|
sec_vend INT
|
|
END RECORD
|
|
|
|
LET hoy = CURRENT USING "mm/dd/yyyy"
|
|
LET selec1= " SELECT a.tipo_cliente,a.sec_cliente,b.nombre,a.aplica_a,",
|
|
" SUM(a.valor+a.monto_desc),d.simbolo ",
|
|
" FROM cctb00001 a,vetb00004 b,vetb00028 c,vetb00060 d,vetb00061 e ",
|
|
" WHERE ",
|
|
" (a.fecha_orig <= '", TODAY USING "mm/dd/yyyy" , "') AND ",
|
|
" (a.tipo_cliente = ",ktipo," AND ",
|
|
" a.sec_cliente = ",ksec,") AND ",
|
|
" (a.tipo_cliente=b.tipo_cliente AND ",
|
|
" a.sec_cliente=b.sec_cliente) AND ",
|
|
" (a.tipo_cliente = c.tipo_cliente AND ",
|
|
" a.sec_cliente = c.sec_cliente) AND ",
|
|
"a.tipo_cliente = e.tipo_cliente AND e.ventas=d.ventas AND ",
|
|
" a.tipo_doc NOT IN ('AV','AP') AND ",
|
|
" a.status_t IS NULL ",
|
|
" GROUP BY a.tipo_cliente,a.sec_cliente,b.nombre,a.aplica_a,d.simbolo ",
|
|
" HAVING SUM(a.valor + a.monto_desc) > 0 ORDER BY a.tipo_cliente,a.sec_cliente,a.aplica_a "
|
|
|
|
PREPARE c_docs FROM selec1
|
|
DECLARE b_docs CURSOR FOR c_docs
|
|
|
|
LET t_zcorriente=0
|
|
LET t_z1a30=0
|
|
LET t_z31a60=0
|
|
LET t_z61a90=0
|
|
LET t_zmas90=0
|
|
LET t_ztotalSaldo=0
|
|
LET t_t_totalSaldo = 0
|
|
LET j = 1
|
|
|
|
FOREACH b_docs INTO datos.tipo_cliente, datos.sec_cliente, datos.nombre,
|
|
datos.factura, datos.pendiente,zmoneda
|
|
LET zcorriente=0
|
|
LET z1a30=0
|
|
LET z31a60=0
|
|
LET z61a90=0
|
|
LET zmas90=0
|
|
LET ztotalSaldo=0
|
|
|
|
#BUSCAMOS EL VENDEDOR
|
|
LET datos.sec_vend = NULL
|
|
SELECT UNIQUE a.sec_vend INTO datos.sec_vend
|
|
FROM vetb00028 a
|
|
WHERE a.tipo_cliente = datos.tipo_cliente AND
|
|
a.sec_cliente = datos.sec_cliente AND
|
|
a.status_t IS NULL
|
|
|
|
IF datos.sec_vend IS NULL THEN
|
|
LET datos.sec_vend = 0
|
|
END IF
|
|
|
|
#BUSCAMOS LA FECHA DE VENCIMIENTO Y TIPO DE DOCUMENTO
|
|
SELECT MAX( a.tipo_doc),MAX(a.fecha_ven)
|
|
INTO datos.tipo_doc,datos.fecha_ven
|
|
FROM cctb00001 a
|
|
WHERE a.status_t IS NULL AND (a.tipo_doc not in ("RC","NC","PC","OC","DV")AND
|
|
a.num_doc = a.num_doc AND
|
|
a.num_doc=datos.factura ) and
|
|
(a.tipo_cliente=datos.tipo_cliente AND
|
|
a.sec_cliente=datos.sec_cliente)
|
|
|
|
#BUSCAMOS LA COTIZACION
|
|
IF datos.tipo_doc = 'FT' OR datos.tipo_doc='FE' THEN
|
|
LET datos.cotizacion_no=NULL
|
|
SELECT MAX(a.conduce)
|
|
INTO datos.cotizacion_no
|
|
FROM vetb00002 a
|
|
WHERE (a.factura = datos.factura) AND
|
|
(a.tipo_cliente = datos.tipo_cliente AND
|
|
a.sec_cliente=datos.sec_cliente)
|
|
END IF
|
|
|
|
#DAMOS VALOR A LA FECHA DE FACTURA SI ES NULA
|
|
IF datos.fecha_ven IS NULL THEN
|
|
|
|
SELECT CONVERT(CHAR(10),MAX(a.fecha_ven),103)
|
|
INTO datos.fecha_ven
|
|
FROM cctb00001 a
|
|
WHERE a.status_t IS NULL AND
|
|
a.aplica_a=datos.factura AND
|
|
a.tipo_doc IN ("NC","PC","OC","DV","ND") and
|
|
(a.tipo_cliente=datos.tipo_cliente AND
|
|
a.sec_cliente=datos.sec_cliente)
|
|
END IF
|
|
|
|
IF datos.tipo_doc = 'AV' THEN
|
|
LET datos.cotizacion_no=null
|
|
SELECT CONVERT(CHAR(10),MAX(a.fecha_ven),103),MAX(a.documento_ref)
|
|
INTO fechaAV,datos.cotizacion_no
|
|
FROM cctb00001 a
|
|
WHERE (a.tipo_Doc = 'AV' AND
|
|
a.num_doc = datos.factura AND
|
|
a.num_doc = a.aplica_a) AND
|
|
(a.tipo_cliente=datos.tipo_cliente AND
|
|
a.sec_cliente=datos.sec_cliente) AND
|
|
a.status_t IS NULL
|
|
|
|
IF fechaav IS NULL THEN
|
|
LET fechaav = '01/01/2008'
|
|
END IF
|
|
END IF
|
|
|
|
#BUSCAMOS EL NUMERO DE ORDEN Y COTIZACION
|
|
SELECT MAX(a.orden),MAX(a.conduce)
|
|
INTO datos.num_oc, datos.cotizacion_no
|
|
FROM vetb00002 a
|
|
WHERE (a.factura = datos.factura) AND
|
|
(a.tipo_cliente = datos.tipo_cliente AND a.sec_cliente = datos.sec_cliente)
|
|
|
|
IF datos.fecha_ven IS NULL THEN
|
|
|
|
SELECT CONVERT(CHAR(10),MAX(a.fecha_ven),103)
|
|
INTO datos.fecha_ven
|
|
FROM cctb00001 a
|
|
WHERE a.status_t IS NULL AND
|
|
a.aplica_a=datos.factura AND
|
|
a.tipo_doc in ("NC","PC","OC","DV","ND") AND
|
|
(a.tipo_cliente=datos.tipo_cliente AND
|
|
a.sec_cliente=datos.sec_cliente)
|
|
END IF
|
|
|
|
IF datos.tipo_doc = 'AV' THEN
|
|
SELECT MAX(a.documento_ref)
|
|
INTO datos.cotizacion_no
|
|
FROM cctb00001 a
|
|
WHERE (a.tipo_doc ='AV' AND
|
|
a.num_doc = datos.factura AND
|
|
a.num_doc = a.aplica_a) AND
|
|
(a.tipo_cliente = datos.tipo_cliente AND
|
|
a.sec_cliente = datos.sec_cliente)
|
|
|
|
SELECT MAX(a.num_oc)
|
|
INTO datos.num_oc
|
|
FROM prtb00012 a
|
|
WHERE a.cotizacion_no=datos.cotizacion_no AND
|
|
(a.tipo_cliente = datos.tipo_cliente AND
|
|
a.sec_cliente = datos.sec_cliente) AND
|
|
a.status_t IS NULL
|
|
|
|
SELECT CONVERT(CHAR(10),MAX(a.fecha_ven),103)
|
|
INTO fechaAV
|
|
FROM cctb00001 a
|
|
WHERE a.num_doc = datos.factura AND
|
|
a.tipo_cliente=datos.tipo_cliente AND
|
|
a.sec_cliente=datos.sec_cliente AND
|
|
a.num_doc = a.aplica_a AND
|
|
a.tipo_Doc = 'AV' AND
|
|
a.status_t IS NULL
|
|
|
|
IF fechaAV IS NULL THEN
|
|
LET fechaAV = '01/01/2008'
|
|
END IF
|
|
|
|
LET datos.fecha_ven = fechaAV
|
|
|
|
SELECT SUM(a.valor+a.monto_desc)*-1
|
|
INTO datos.pendiente
|
|
FROM cctb00001 a
|
|
WHERE a.fecha_orig<=corte AND
|
|
a.tipo_cliente=datos.tipo_cliente AND
|
|
a.sec_cliente=datos.sec_cliente AND
|
|
a.status_t IS NULL AND
|
|
a.num_doc = datos.factura AND
|
|
a.tipo_Doc IN ("AV","AP")
|
|
|
|
LET datos.fecha_ven=fechaAV
|
|
END IF
|
|
|
|
IF datos.pendiente > 0 THEN
|
|
#### Calcula la diferencia de dias de pago a determinada factura para acu-
|
|
#### mularlo en la variable correspondiente por tipo de dia.
|
|
LET dias = corte - datos.fecha_ven
|
|
LET factura = datos.tipo_doc,"-",datos.factura
|
|
|
|
|
|
|
|
#### Imprime y acumula los valores correspondientes a pago realizados en
|
|
#### menos de 31 dias.
|
|
IF dias <= 0 THEN
|
|
LET zcorriente = datos.pendiente
|
|
LET t_zcorriente = t_zcorriente + datos.pendiente
|
|
|
|
END IF
|
|
|
|
IF dias > 0 AND dias < 31 THEN
|
|
LET z1a30 = datos.pendiente
|
|
LET t_z1a30 = t_z1a30 + datos.pendiente
|
|
END IF
|
|
|
|
IF dias >=31 AND dias < 61 THEN
|
|
LET z31a60 = datos.pendiente
|
|
LET t_z31a60 = t_z31a60+ datos.pendiente
|
|
END IF
|
|
|
|
IF dias >= 61 AND dias <= 90 THEN
|
|
LET z61a90 = datos.pendiente
|
|
LET t_z61a90 = t_z61a90+ datos.pendiente
|
|
END IF
|
|
|
|
IF dias > 90 THEN
|
|
LET zmas90 = datos.pendiente
|
|
LET t_zmas90 = t_zmas90 + datos.pendiente
|
|
END IF
|
|
CASE
|
|
WHEN z1a30 < 0
|
|
LET z1a30 =0
|
|
EXIT CASE
|
|
WHEN z31a60 < 0
|
|
LET z31a60 =0
|
|
EXIT CASE
|
|
WHEN z61a90 <0
|
|
LET z31a60 =0
|
|
EXIT CASE
|
|
WHEN zmas90 <0
|
|
LET zmas90 =0
|
|
EXIT CASE
|
|
END CASE
|
|
LET ztotalSaldo = zcorriente+ z1a30 + z31a60 + z61a90 + zmas90
|
|
LET t_ztotalSaldo = t_ztotalSaldo + ztotalSaldo
|
|
|
|
--DISPLAY "datos4 ", zcorriente, z1a30, z31a60, z61a90, zmas90, datos.tipo_doc, datos.factura, fechaAV
|
|
|
|
LET nodos_sub_hijos[j].tipo_cliente = datos.tipo_cliente
|
|
LET nodos_sub_hijos[j].sec_cliente = datos.sec_cliente
|
|
LET nodos_sub_hijos[j].documento = datos.factura
|
|
LET nodos_sub_hijos[j].num_oc = datos.num_oc
|
|
LET nodos_sub_hijos[j].cotizacion = datos.cotizacion_no
|
|
LET nodos_sub_hijos[j].moneda = zmoneda
|
|
|
|
LET nodos_sub_hijos[j].corriente =zcorriente
|
|
LET nodos_sub_hijos[j].d1a30= z1a30
|
|
LET nodos_sub_hijos[j].d31a60 = z31a60
|
|
LET nodos_sub_hijos[j].d61a90= z61a90
|
|
LET nodos_sub_hijos[j].mas90=zmas90
|
|
LET nodos_sub_hijos[j].totalSaldo=ztotalSaldo
|
|
LET nodos_sub_hijos[j].nombre = datos.nombre
|
|
LET nodos_sub_hijos[j].sec_vend = datos.sec_vend
|
|
LET nodos_sub_hijos[j].tipo_doc = datos.tipo_doc
|
|
LET nodos_sub_hijos[j].fecha_vence = datos.fecha_ven
|
|
|
|
--DISPLAY "data6 ",datos.factura," ",nodos_sub_hijos[j].corriente ,' ',j,' ', zcorriente
|
|
LET j = j+1
|
|
|
|
END IF
|
|
END FOREACH
|
|
RETURN t_zcorriente, t_z1a30, t_z31a60, t_z61a90, t_zmas90, t_ztotalSaldo, datos.sec_vend
|
|
END FUNCTION
|
|
|
|
FUNCTION countHijos(xcodigo)
|
|
DEFINE totalHijos INT
|
|
DEFINE selecx STRING
|
|
DEFINE xcodigo INT
|
|
|
|
IF xcodigo <> 1000 THEN
|
|
LET selecx =
|
|
"select count(*) ",
|
|
"FROM vetb00004 a,vetb00052 b,vetb00061 c ",
|
|
"WHERE ",
|
|
"a.tipo_cliente = b.tipo_cliente AND ",
|
|
"a.tipo_cliente =c.tipo_cliente AND ",
|
|
"c.clientes_activos = 'SI' AND ",
|
|
"a.sec_cliente = b.sec_cliente"
|
|
ELSE
|
|
LET selecx =
|
|
"select count(*) ",
|
|
" FROM vetb00004 a,vetb00061 b ",
|
|
" WHERE ",
|
|
" (a.tipo_cliente =b.tipo_cliente) and ",
|
|
" b.clientes_activos = 'SI' AND ",
|
|
" CAST(a.tipo_cliente AS CHAR(4))+ '-'+ CAST(a.sec_cliente AS CHAR(10)) NOT IN ",
|
|
" (SELECT CAST(b.tipo_cliente AS CHAR(4))+ '-'+ CAST(b.sec_cliente AS CHAR(10)) FROM vetb00052 b) and ",
|
|
" a.status_t IS NULL "
|
|
END IF
|
|
|
|
PREPARE c_query FROM selecx
|
|
EXECUTE c_query INTO totalHijos
|
|
DISPLAY "total hijos",totalhijos
|
|
RETURN totalHijos
|
|
END FUNCTION
|
|
|
|
FUNCTION countPadres()
|
|
|
|
DEFINE selecy STRING
|
|
DEFINE totalPadres INT
|
|
|
|
LET selecy = " select count(*) ",
|
|
" FROM marmotech.dbo.vetb00054 AS c INNER JOIN ",
|
|
" marmotech.dbo.vetb00052 AS b ON c.codigo_grupo = b.codigo_grupo RIGHT OUTER JOIN ",
|
|
" marmotech.dbo.vetb00004 AS a ON b.tipo_cliente = a.tipo_cliente AND b.sec_cliente = a.sec_cliente ",
|
|
" INNER JOIN marmotech.dbo.vetb00060 d ON d.tipo_cliente = a.tipo_cliente AND d.clientes_activos = 'SI' ",
|
|
" WHERE ",
|
|
" a.status_t IS NULL"
|
|
|
|
PREPARE d_query FROM selecy
|
|
EXECUTE d_query INTO totalPadres
|
|
|
|
RETURN totalPadres
|
|
END FUNCTION
|
|
|