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

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