{------------------------------------------------------------------------------ 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