SCHEMA smarmotech GLOBALS DEFINE cuenta,xnum_oc,xcotizacion,idx INT, selec,selec1 STRING END GLOBALS MAIN DEFER INTERRUPT CONNECT to "marmotech" USER 'jusoto' USING 'lmmjvsd2014' # Esta funcion busca las facturas de los clientes y aplica los avances en las cuentas por cobrar # En exterior CALL busca_facturas_exterior() # CONSOLIDADO #CALL busca_facturas_consolidado() # CALL actualiza_Empleados() # ESTO ES PARA ACTUALIZR LOS EMPLEADOS CON UNA LISTA # Funcion analiza las facturas con balances en negativo o positivo de los clientes que su balance #esta en cero. # CALL busca_balance_cero() # APLICACION AVANCES POR AGOTAMIENTO DE VALOR # CALL aplica_avance_balances() #CALL prueba_combo() #CALL reporte_cancelados() # CALL act_ordenescrm() # Actualizacion vendedor en la base de datos CRMINDATA #CALL actualiza_vendedor() #CALL actualiza_cliente_ex() #CALL actualiza_secuencia() #CALL actualiza_cotizacion() END MAIN FUNCTION actualiza_secuencia() DEFINE idx,idx1,xcotiza_ant,xcotizacion_no,xarea,xcodn,xcodgrupo,xcodtipo,xcodsec,idcotizacion1,idcotizacion INT, update_ch,selec STRING, xprecio,xcantidad FLOAT { LET update_ch = "UPDATE CRMINDATA.DBO.cotizacion_detalle SET secuencia = ?,us_mod = 'JSOTO',fech_mod = getdate() ", " WHERE cotizacion_no = ? AND area = ? AND cod_n = ? AND cod_grupo = ? AND cod_tipo = ? AND ", " cod_sec = ? and secuencia is null and precio = ? and cantidad = ? " PREPARE actualiza FROM update_ch LET update_ch = "UPDATE vetb00051 SET secuencia = ?,us_mod = 'JSOTO',fech_mod = getdate() ", " WHERE cotizacion_no = ? AND area = ? AND cod_n = ? AND cod_grupo = ? AND cod_tipo = ? AND ", " cod_sec = ? and secuencia is null and precio = ? and cantidad = ?" PREPARE actualiza2 FROM update_ch } LET update_ch = "UPDATE CRMINDATA.DBO.cotizacion_detalle SET secuencia = ?,us_mod = 'JSOTO',fech_mod = getdate() ", " WHERE id_cotizacion = ? " PREPARE actualiza FROM update_ch LET update_ch = "UPDATE vetb00051 SET secuencia = ?,us_mod = 'JSOTO',fech_mod = getdate() ", " WHERE id_cotizacion = ? " PREPARE actualiza2 FROM update_ch LET selec = " SELECT a.cotizacion_no,a.secuencia,a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.precio,a.cantidad,a.id_cotizacion, c.id_cotizacion FROM vetb00051 a,vetb00050 b,crmindata.dbo.cotizacion_detalle c WHERE a.cotizacion_no = b.cotizacion_no AND b.fecha > '12/31/2017' AND a.cotizacion_no = c.cotizacion_no AND a.cod_n = c.cod_n and a.cod_Grupo = c.cod_grupo and a.cod_tipo = c.cod_tipo and a.cod_Sec = c.cod_Sec and a.area = c.area and a.cotizacion_no IN(155849, 162592, 168468, 169806, 171829, 174208, 174925, 176016, 176370, 176407, 178135, 180263, 180312, 180682, 180706, 180938, 181070, 181234, 181277, 181285, 181347, 181478, 181544, 181547, 181549, 181561, 181581, 181603, 181628, 181631, 181686, 181699, 181708, 181709, 181710, 181717, 181732, 181777, 181808, 181865, 181904, 181922, 181932, 181950, 181964, 181976, 182001, 182086, 182097, 182140, 182144, 182198, 182233, 182243, 182245, 182266, 182275, 182304, 182306, 182310, 182314, 182315, 182336, 182351, 182413, 182436, 182454, 182478, 182496, 182522, 182571, 182574 ) ORDER BY a.cotizacion_no " PREPARE comando1 FROM selec DECLARE busca_cotizacion CURSOR FOR comando1 LET xcotiza_ant = 0 LET idx1 = 1 FOREACH busca_cotizacion INTO xcotizacion_no,idx,xarea,xcodn,xcodgrupo,xcodtipo,xcodsec,xprecio,xcantidad,idcotizacion, idcotizacion1 IF xcotiza_ant <> xcotizacion_no THEN LET xcotiza_ant = xcotizacion_no LET idx1 = 1 END IF EXECUTE actualiza USING idx1,idcotizacion1 EXECUTE actualiza2 USING idx1,idcotizacion DISPLAY " data ",xcotizacion_no," ",idx1," ",idcotizacion," ",idcotizacion1 LET idx1 = idx1 + 1 END FOREACH END FUNCTION FUNCTION actualiza_cotizacion() DEFINE idx,idx1,xcotiza_ant,xcotizacion_no,xarea,xcodn,xcodgrupo,xcodtipo,xcodsec,idcotizacion1,idcotizacion INT, xfecha_mod,update_ch,selec,xus_mod STRING, xprecio,xcantidad,xporc_desc,xvalorBruto,xvalorDesc,xvalorItbis,xvalorNeto,xsubTotal FLOAT LET update_ch = "UPDATE CRMINDATA.DBO.cotizacion_detalle SET porc_desc=?, valor_bruto = ?, monto_desc = ?, valor_itbis = ?, valor_neto = ?, fech_mod = ?,us_mod=? ", " WHERE id_cotizacion = ? " PREPARE actualiza1 FROM update_ch LET update_ch = "UPDATE CRMINDATA.DBO.cotizacion_master SET total_bruto=?,sub_total=?, monto_desc = ?, monto_itbi = ?, total_neto = ? ", " WHERE cotizacion_no = ? " PREPARE actualiza12 FROM update_ch LET update_ch = "SELECT SUM(valor_bruto),SUM(monto_desc),SUM(valor_itbis),SUM(valor_neto) FROM CRMindata.dbo.cotizacion_detalle WHERE cotizacion_no =?" PREPARE actualiza3 FROM update_ch LET selec = " SELECT a.cotizacion_no,a.secuencia,a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.precio,a.cantidad,a.id_cotizacion, c.id_cotizacion,a.porc_desc,a.fech_mod,a.us_mod FROM vetb00051 a,vetb00050 b,crmindata.dbo.cotizacion_detalle c WHERE a.cotizacion_no = b.cotizacion_no AND b.fecha > '12/31/2019' AND a.cotizacion_no in(183927, 183942, 183102, 183129, 183161, 183581, 183679, 183924, 183300, 184052, 183141, 183627, 183111, 183774, 169332, 183940, 184056, 183723, 184023, 183678, 183369, 184020, 183281, 183114, 183680, 183996, 183639, 183402) AND a.cotizacion_no = c.cotizacion_no AND a.cod_n = c.cod_n and a.cod_Grupo = c.cod_grupo and a.cod_tipo = c.cod_tipo and a.cod_Sec = c.cod_Sec and a.area = c.area ORDER BY a.cotizacion_no " PREPARE comando2 FROM selec DECLARE busca_cotizacion1 CURSOR FOR comando2 LET xcotiza_ant = 0 LET idx1 = 1 FOREACH busca_cotizacion1 INTO xcotizacion_no,idx,xarea,xcodn,xcodgrupo,xcodtipo,xcodsec,xprecio,xcantidad,idcotizacion, idcotizacion1,xporc_desc,xfecha_mod,xus_mod IF xcotiza_ant <> xcotizacion_no THEN EXECUTE actualiza3 INTO xvalorBruto,xvalorDesc,xvalorItbis,xvalorNeto USING xcotizacion_no LET xsubTotal = xvalorBruto - xvalorDesc EXECUTE actualiza12 USING xvalorBruto,xsubTotal,xvalorDesc,xvalorItbis,xvalorNeto,xcotizacion_no LET xcotiza_ant = xcotizacion_no END IF LET xvalorBruto = xcantidad * xprecio LET xvalorDesc = xvalorBruto * (xporc_desc/100) LET xvalorItbis = (xvalorBruto - XvalorDesc) * .18 LET xvalorNeto = xvalorBruto - XvalorDesc + xvalorItbis EXECUTE actualiza1 USING xporc_Desc,xvalorBruto,xvalorDesc,xvalorItbis,xvalorNeto, xfecha_mod,xus_mod, idcotizacion1 DISPLAY " data ",xcotizacion_no," ",xporc_desc," ",xfecha_mod LET idx1 = idx1 + 1 END FOREACH END FUNCTION FUNCTION actualiza_cliente_ex() DEFINE pcliente RECORD LIKE vetb00004.* DEFINE pdireccion RECORD LIKE vetb00005.* DEFINE pvendedor RECORD LIKE vetb00028.*, SELEC,UPD STRING LET upd =" UPDATE exterior.dbo.vetb00004 SET vetb00004.* = ",pcliente.*, " WHERE tipo_cliente =", pcliente.tipo_cliente," AND sec_cliente = ",pcliente.sec_cliente PREPARE xcliente FROM upd LET upd =" UPDATE exterior.dbo.vetb00005 SET vetb00005.* = ",pdireccion.*, " WHERE tipo_cliente =", pcliente.tipo_cliente," AND sec_cliente = ",pcliente.sec_cliente PREPARE xdireccion FROM upd LET upd =" UPDATE exterior.dbo.vetb00028 SET vetb00028.* = ",pvendedor.*, " WHERE tipo_cliente =", pcliente.tipo_cliente," AND sec_cliente = ",pcliente.sec_cliente PREPARE xvendedor FROM upd DECLARE clientes CURSOR FOR SELECT a.* FROM vetb00004 a WHERE a.tipo_cliente IN (15,16,17,21,22,24) FOREACH clientes INTO pcliente.* SELECT * INTO pdireccion.* FROM vetb00005 WHERE tipo_cliente = pcliente.tipo_cliente AND sec_cliente = pcliente.sec_cliente EXECUTE xdireccion SELECT * INTO pvendedor.* FROM vetb00028 WHERE tipo_cliente = pcliente.tipo_cliente AND sec_cliente = pcliente.sec_cliente END FOREACH END FUNCTION FUNCTION actualiza_vendedor() DEFINE xtipoCliente,xsecCliente,xsec_vend INT, xemail VARCHAR(100) LET selec = "UPDATE CRMindata.dbo.clientes set sec_Vend = ?,email_vendedor = ? ", " WHERE tipo_cliente = ? AND sec_cliente = ? " PREPARE comando FROM selec DECLARE busca_vendedor CURSOR FOR SELECT a.tipo_cliente,a.sec_cliente,a.sec_vend,b.email FROM vetb00028 a,seg0000 b WHERE a.tipo_cliente NOT IN (18,19,12,13,14) AND a.status_T IS NULL AND a.sec_vend = b.sec_vend FOREACH busca_Vendedor INTO xtipoCliente,xsecCliente,xsec_vend,xemail DISPLAY "actualizando ",xtipoCliente," ",xsecCliente EXECUTE comando USING xsec_vend,xemail,xtipoCliente,xsecCliente END FOREACH END FUNCTION FUNCTION act_ordenescrm() LET idx = 0 START REPORT ordenes TO "ordenes.txt" LET selec = "SELECT a.num_oc,a.cotizacion FROM CRMinDATA.[dbo].[ordnescrm] a WHERE a.num_oc > 0" PREPARE ocomando FROM selec LET selec1 = "SELECT a.num_oc FROM CRMinDATA.dbo.ordenes_master a WHERE a.num_oc =? AND a.status_t IS NULL " PREPARE ocomando1 FROM selec1 DECLARE busca_orden CURSOR FOR ocomando FOREACH busca_orden INTO xnum_oc,xcotizacion LET idx = idx + 1 DISPLAY "cuenta: ",idx EXECUTE ocomando1 USING xnum_oc IF status <> NOTFOUND THEN CONTINUE FOREACH END IF DISPLAY "DATOS: ",xnum_oc OUTPUT TO REPORT ordenes() END FOREACH FINISH REPORT ordenes END FUNCTION REPORT ordenes() OUTPUT PAGE LENGTH 100 FORMAT PAGE HEADER PRINT "ORDEN", 3 SPACES, "COTIZACION" ON EVERY ROW PRINT xnum_oc USING "&&&&&&&&", 2 SPACE,xcotizacion USING "&&&&&&&&" END REPORT FUNCTION actualiza_empleados() DEFINE nxnum_emp INT DECLARE buscar CURSOR FOR SELECT a.num_emp FROM adtb00003 a WHERE a.num_Emp IN (482, 610, 634, 2043, 2053, 3046, 3088, 3128, 3158, 3178, 3267, 3395, 3423, 3432, 3435, 3450, 3451, 3486, 3506, 3535, 3552, 3571, 3608, 3623, 3638, 3707, 3739, 3743, 3844, 3864, 3887, 3889, 3894, 3914, 3926, 3947, 3972, 3977, 3982, 3983, 3990, 3996, 4006, 4021, 4024, 4038, 4043, 4054, 4064, 4110, 4115, 4128, 4129, 4130, 4131, 4152, 4154, 4162, 4164, 4171, 4186, 4199, 4218, 4225, 4239, 4244, 4245, 4248, 4251, 4268, 4277, 4299, 4302, 4303, 4305, 4308, 4312, 4317, 4327, 4337, 4340, 4344, 4346, 4347, 4350, 4352, 4361, 4380, 4393, 4399, 4408, 4412, 4415, 4420, 4425, 4426, 4430, 4437, 4438, 4444, 4449, 4450, 4462, 4468, 4469, 4480, 4482, 4486, 4490, 4493, 4494, 4495, 4501, 4505, 4507, 4510, 4514, 4515, 4516, 4518, 4519, 4520, 4525, 4526, 4528, 4530, 4533, 4537, 4540, 4541, 4545, 4546, 4548, 4552, 4553, 4554, 4558, 4566, 4567, 4572, 4574, 4577, 4581, 4586, 4588, 4590, 4593, 4600, 4601, 4604, 4612, 4613, 4623, 4626, 4627, 4629, 4631, 4634, 4635, 4640, 4641, 4650, 4652, 4659, 4660, 4662, 4664, 4667, 4668, 4670, 4671, 4674, 4675, 4678, 4681, 4689, 4697, 4700, 4701, 4704, 4705, 4711, 4712, 4714, 4716, 4717, 4718, 4719, 4724, 4730, 4731, 4733, 4734, 4735, 4737, 4738, 4740, 4742, 4743, 4745, 4749, 4753, 4754, 4757, 4758, 4759, 4760, 4761, 4762, 4763, 4764, 4765, 4766, 4768, 4771, 4773, 4774, 4778, 4783, 4784, 4786, 4787, 4793, 4794, 4795, 4797, 4800, 4801, 4803, 4804, 4807, 4808, 4809, 4811, 4813, 4817, 4818, 4820, 4822, 4824, 4828, 4829, 4830, 4831, 4833, 4836, 4837, 4846, 4850, 4852, 4863, 4865, 4866, 4869, 4871, 4874, 4880, 4881, 4882, 4891, 4892, 4898, 4899, 4900, 4902, 4903, 4906, 4908, 4911, 4913, 4919, 4928, 4931, 4932, 4933, 4936, 4937, 4938, 4951, 4952 ) AND status_t IS null FOREACH buscar INTO nxnum_emp UPDATE adtb00003 SET status_t = 'D' WHERE num_emp = nxnum_emp DISPLAY "PROCESO ",nxnum_emp END FOREACH END FUNCTION FUNCTION reporte_cancelados() DEFINE DATA_REP RECORD cedula BIGINT, nombre , apellido1,apellido2 CHAR(30), sexo char(1), fecha date END RECORD DECLARE cancelados CURSOR FOR select b.cedula,b.nom1_emp,b.apell1_emp,ISNULL(b.apell2_emp,' '),c.sexo, b.fech_nac,a.monto from tmpliquidados a,adtb00003 b,adtb00021 c where a.num_emp = b.num_emp AND b.num_emp = c.num_emp START REPORT cancelar TO "cancelados.txt" FOREACH cancelados INTO data_rep.* OUTPUT TO REPORT cancelar(data_rep.*) END FOREACH FINISH REPORT cancelar END FUNCTION REPORT cancelar(x) DEFINE X RECORD cedula BIGINT, nombre , apellido1,apellido2 CHAR(30), sexo char(1), fecha date END RECORD, pcedula CHAR(11) OUTPUT PAGE LENGTH 200 FORMAT ON EVERY ROW LET pcedula = x.cedula USING "&&&&&&&&&&&" PRINT pcedula,"|",x.nombre,"|",x.apellido1,"|",x.apellido2,"|",x.sexo,"|", x.fecha USING "ddmmyyyy" END REPORT FUNCTION busca_facturas_consolidado() DEFINE ktipo_cliente,ksec_cliente,kcotizacion,knumero_f INT, balance,valor1,valor2,kvalor_f DEC(12,2), fecha_inicial,kfecha DATE, selec STRING LET fecha_inicial = '01/01/2001' DISPLAY "EN PROCESO...." LET selec = " SELECT MAX(a.cotizacion_no),CONVERT(CHAR(10),MAX(a.fecha_factura),103) FROM vetb00002 a WHERE a.status_t IS NULL AND a.factura = ?" PREPARE comando FROM selec DECLARE busca_f CURSOR FOR SELECT DISTINCT a.tipo_cliente,a.sec_cliente,a.valor,a.num_doc FROM cctb00001 a WHERE a.tipo_Doc IN ('FT','FE') AND a.status_t IS NULL AND a.sec_cliente = 71 AND a.tipo_cliente = 15 and a.fecha_orig <= '01/31/2018' AND a.tipo_cliente in (15,16,17,18,19,20,21,22,23,24) ORDER BY a.tipo_cliente,a.sec_cliente LET cuenta = 1 FOREACH busca_f INTO ktipo_cliente,ksec_cliente,kvalor_f,knumero_f # BUSCA COTIZACION DISPLAY "CLLIENTE ",ktipo_cliente, " ksec ",ksec_cliente," knumero ",knumero_F SELECT a.conduce,CONVERT(CHAR(10),a.fecha_factura,103) INTO kcotizacion,kfecha FROM vetb00002 a WHERE a.status_t IS NULL AND a.factura = knumero_f IF kcotizacion IS NULL THEN SELECT MAX(a.cotizacion_no),CONVERT(CHAR(10),MAX(a.fecha_factura),103) INTO kcotizacion,kfecha FROM vetb00002 a WHERE a.status_t IS NULL AND a.factura = knumero_f IF kcotizacion IS NULL THEN EXECUTE comando INTO kcotizacion,kfecha USING knumero_f END IF END IF CALL busca_avance_co(ktipo_cliente,ksec_cliente,kcotizacion,kvalor_f,knumero_f,kfecha) LET cuenta = cuenta +1 END FOREACH DISPLAY "NUMERO CLIENTE ",cuenta END FUNCTION FUNCTION busca_avance_co(ptipo_cliente,psec_cliente,pcotizacion_no,valor_f,pfactura,pfecha) DEFINE ptipo_cliente,psec_cliente,pcotizacion_no,pnum_doc,psec_vend,psucid,pfactura INT,pfecha DATE, valor_f,pvalor,monto_avance DEC(12,2), pusuario VARCHAR(50) LET pusuario ='JSOTO' DECLARE busca_av_co CURSOR FOR SELECT a.num_doc, a.valor+monto_desc INTO pnum_doc,pvalor FROM cctb00001 a WHERE a.tipo_cliente = ptipo_cliente AND a.sec_cliente = psec_cliente AND a.documento_ref = pcotizacion_no AND a.tipo_Doc = 'AV' FOREACH busca_av_co IF pvalor !=0 THEN LET monto_avance = 0 SELECT SUM(a.valor+a.monto_desc) INTO monto_avance FROM cctb00001 a WHERE a.num_doc = pnum_doc AND a.tipo_Doc IN ('AV','AP') AND a.status_t IS NULL # Cuando el avance tiene valor pendiente por aplicar IF monto_avance > 0 THEN IF valor_f >= monto_avance THEN LET pvalor = monto_avance ELSE LET pvalor = valor_f END IF DISPLAY "INSERTE ",pfactura," valor ",pvalor INSERT INTO cctb00001 (tipo_doc,num_doc,fecha_orig,tipo_cliente,sec_cliente,aplica_a,num_cheque,cod_emp,cod_emp_sec, valor,monto_desc,us_crea,fech_crea,banco) VALUES ('AP',pnum_doc,pfecha,ptipo_cliente,psec_cliente,pfactura,pnum_doc,psucid,psec_vend,pvalor*-1,'0', pusuario,getdate(),pcotizacion_no) END IF END IF END FOREACH END FUNCTION FUNCTION busca_facturas_exterior() DEFINE ktipo_cliente,ksec_cliente,kcotizacion,knumero_f,ksucid INT, balance,valor1,valor2,kvalor_f DEC(12,2), fecha_inicial,kfecha DATE LET fecha_inicial = '01/31/2018' DISPLAY "EN PROCESO...." DECLARE busca_f_ex CURSOR FOR SELECT a.tipo_cliente,a.sec_cliente,a.valor,a.num_doc,a.sucid FROM cctb00001 a,vetb00002 b WHERE a.tipo_Doc IN ('FT','FE') AND a.num_doc = b.factura AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND a.status_t IS NULL AND a.fecha_orig <= '01/31/2023' AND a.tipo_cliente =15 AND a.sec_cliente = 100 ORDER BY a.tipo_cliente,a.sec_cliente FOREACH busca_f_ex INTO ktipo_cliente,ksec_cliente,kvalor_f,knumero_f,ksucid # BUSCA COTIZACION DISPLAY "CLLIENTE ",ktipo_cliente, " ksec ",ksec_cliente," knumero ",knumero_F SELECT a.conduce,CONVERT(CHAR(10),a.fecha_factura,103) INTO kcotizacion,kfecha FROM vetb00002 a WHERE a.status_t IS NULL AND a.factura = knumero_f AND a.sucid = ksucid IF kcotizacion IS NULL THEN SELECT MAX(a.orden),CONVERT(CHAR(10),MAX(a.fecha_factura),103) INTO kcotizacion,kfecha FROM vetb00002 a WHERE a.status_t IS NULL AND a.factura = knumero_f AND a.sucid = ksucid END IF CALL busca_avance_ex(ktipo_cliente,ksec_cliente,kcotizacion,kvalor_f,knumero_f,kfecha,ksucid) END FOREACH END FUNCTION FUNCTION busca_avance_ex(ptipo_cliente,psec_cliente,pcotizacion_no,valor_f,pfactura,pfecha,psucid) DEFINE ptipo_cliente,psec_cliente,pcotizacion_no,pnum_doc,psec_vend,psucid,pfactura INT,pfecha DATE, valor_f,pvalor,monto_avance DEC(12,2), pusuario VARCHAR(50) LET pusuario ='jusoto' DISPLAY " buscando avance: ",pcotizacion_no DECLARE busca_av_ex CURSOR FOR SELECT a.num_doc, a.valor+monto_desc INTO pnum_doc,pvalor FROM cctb00001 a WHERE a.tipo_cliente = ptipo_cliente AND a.sec_cliente = psec_cliente AND a.banco = pcotizacion_no AND a.tipo_Doc = 'AV' FOREACH busca_av_ex DISPLAY "avance: ",pnum_doc," valor:",pvalor IF pvalor !=0 THEN LET monto_avance = 0 SELECT SUM(a.valor+a.monto_desc) INTO monto_avance FROM cctb00001 a WHERE a.num_doc = pnum_doc AND a.tipo_Doc IN ('AV','AP') AND a.tipo_cliente = ptipo_cliente AND a.sec_cliente = psec_cliente AND a.status_t IS NULL # Cuando el avance tiene valor pendiente por aplicar IF monto_avance > 0 THEN IF valor_f >= monto_avance THEN LET pvalor = monto_avance ELSE LET pvalor = valor_f END IF DISPLAY "INSERTE ",pfactura," valor ",pvalor INSERT INTO cctb00001 (tipo_doc,num_doc,fecha_orig,tipo_cliente,sec_cliente,aplica_a,num_cheque,cod_emp,cod_emp_sec, valor,monto_desc,us_crea,fech_crea,banco,sucid) VALUES ('AP',pnum_doc,pfecha,ptipo_cliente,psec_cliente,pfactura,pnum_doc,psucid,psec_vend,pvalor*-1,'0', pusuario,getdate(),pcotizacion_no,psucid) END IF END IF END FOREACH END FUNCTION { SELECT a.tipo_cliente,a.sec_cliente,SUM(a.valor+a.monto_desc),'0' FROM cctb00001 a,vetb00060 b WHERE a.fecha_orig <= '01/31/2018' AND a.tipo_cliente = b.tipo_cliente AND b.ventas = '1' AND a.tipo_cliente IN (15) and a.status_t is null and a.tipo_doc NOT IN ("AV","PC") GROUP BY a.tipo_cliente,a.sec_cliente UNION SELECT a.tipo_cliente,a.sec_cliente,'0',SUM(a.valor+a.monto_desc) FROM cctb00001 a,vetb00060 b WHERE a.fecha_orig <= '01/31/2018' and a.tipo_cliente = b.tipo_cliente AND b.ventas = '1' and a.status_t is null and a.tipo_doc = "AV" and a.num_doc = a.aplica_a AND a.tipo_cliente IN (15) GROUP BY a.tipo_cliente,a.sec_cliente ORDER BY a.tipo_cliente,a.sec_cliente } FUNCTION busca_balance_cero() DEFINE xtipo_cliente,xsec_cliente INT, balance,valor1,valor2 dec(12,2) DECLARE busca_balance CURSOR FOR SELECT a.tipo_cliente,a.sec_cliente FROM vetb00004 a WHERE a.status_t IS NULL AND a.tipo_cliente > 14 # AND a.tipo_cliente = 21 AND a.sec_cliente =3185 DISPLAY "BUSCAN CLIENTES..." BEGIN WORK FOREACH busca_balance INTO xtipo_cliente,xsec_cliente #busca balance cliente SELECT SUM(a.valor+a.monto_desc) INTO valor1 FROM cctb00001 a WHERE #@fecha_orig < fecha_inicial and a.tipo_cliente = xtipo_cliente and a.sec_cliente = xsec_cliente and a.status_t is null and a.tipo_doc NOT IN ("AV","PC","AP") IF valor1 IS NULL THEN LET valor1 = 0 END IF SELECT SUM(a.valor+a.monto_desc) INTO valor2 FROM cctb00001 a WHERE #@fecha_orig < fecha_inicial and a.tipo_cliente = xtipo_cliente and a.sec_cliente = xsec_cliente and a.status_t is null and a.tipo_doc = "AV" and num_doc = aplica_a IF valor2 IS NULL THEN LET valor2 = 0 END IF LET balance = valor1 - valor2 IF balance = 0 THEN DISPLAY "BUSCA INFO APLICACION...",xtipo_cliente," ",xsec_cliente," balance ",balance CALL ejecuta_aplicacion(xtipo_cliente,xsec_cliente) END IF END FOREACH COMMIT WORK END FUNCTION FUNCTION ejecuta_aplicacion(ztipo_cliente,zsec_cliente) DEFINE ztipo_cliente,zsec_cliente,xsucid,vendedor INT, zaplica_a,secuencia_db,secuencia_nc INT, pendiente,positivo,negativo,valor_factura DEC(12,2) SELECT a.ult_recibo INTO secuencia_db FROM cctb00003 a WHERE a.tipo_doc = "OD" SELECT a.ult_recibo INTO secuencia_nc FROM cctb00003 a WHERE a.tipo_doc = "OC" DECLARE busca_pendiente CURSOR FOR SELECT a.sucid,a.aplica_a,b.neto,c.sec_vend,SUM(a.valor+a.monto_desc) FROM cctb00001 a,vetb00002 b,vetb00028 c WHERE a.tipo_cliente = ztipo_cliente AND a.sec_cliente = zsec_cliente AND a.tipo_cliente = c.tipo_cliente AND a.sec_cliente = c.sec_cliente AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND a.aplica_a = b.factura AND a.sucid = b.sucid AND a.tipo_doc NOT IN ("AV","AP","PC") AND a.status_t IS NULL GROUP BY a.aplica_a,b.neto,c.sec_vend,a.sucid HAVING SUM(a.valor+a.monto_desc) <> 0 LET negativo = 0 LET positivo = 0 LET secuencia_db = secuencia_db + 1 LET secuencia_nc = secuencia_nc + 1 FOREACH busca_pendiente INTO xsucid,zaplica_a,valor_factura,vendedor,pendiente IF pendiente < 0 THEN LET negativo = negativo + pendiente END IF IF pendiente > 0 THEN LET positivo = positivo + pendiente END IF # NOTAS CREDITOS IF pendiente > 0 THEN LET pendiente = pendiente *-1 INSERT INTO cctb00001 (cod_cia,sucid,tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp_sec,fecha_orig,aplica_a, valor,monto_desc,us_crea,fech_crea,num_cheque) VALUES (1,1,'OC',secuencia_db,ztipo_cliente,zsec_cliente,vendedor,GETDATE(),zaplica_a,pendiente,0,'jsoto',getdate(),'APLICADA') LET pendiente = pendiente *-1 DISPLAY "NOTA NC",zaplica_a," pendiente ",pendiente LET secuencia_nc = secuencia_nc + 1 END IF IF pendiente < 0 THEN LET pendiente = pendiente *-1 INSERT INTO cctb00001 (cod_cia,sucid,tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp_sec,fecha_orig,aplica_a, valor,monto_desc,us_crea,fech_crea,num_cheque) VALUES (1,1,'OD',secuencia_db,ztipo_cliente,zsec_cliente,vendedor,GETDATE(),zaplica_a,pendiente,0,'jsoto',getdate(),'APLICADA') LET pendiente = pendiente *-1 LET secuencia_db = secuencia_db + 1 DISPLAY "NOTA DB",zaplica_a," pendiente ",pendiente END IF END FOREACH # INSERTA LOS CREDITOS Y DEBITOS SUMARIZADOS PARA QUE LA CUENTA CONTINUE CUADRADA # DBITOS IF positivo > 0 THEN INSERT INTO cctb00001 (cod_cia,sucid,tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp_sec,fecha_orig,aplica_a, valor,monto_desc,us_crea,fech_crea,num_cheque) VALUES (1,1,'OD',secuencia_db,ztipo_cliente,zsec_cliente,vendedor,GETDATE(),secuencia_db,positivo,0,'jsoto',getdate(),'APLICADA') END IF # CREDITOS IF negativo <> 0 THEN INSERT INTO cctb00001 (cod_cia,sucid,tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp_sec,fecha_orig,aplica_a, valor,monto_desc,us_crea,fech_crea,num_cheque) VALUES (1,1,'OC',secuencia_nc,ztipo_cliente,zsec_cliente,vendedor,GETDATE(),secuencia_nc,negativo,0,'jsoto',getdate(),'APLICADA') END IF CLOSE busca_pendiente END FUNCTION FUNCTION prueba_combo() DEFINE zcodigodgii CHAR(14) OPEN WINDOW w1 WITH FORM "vefmmt101" # CALL tipo_comprobante() SELECT a.codigodgii INTO zcodigodgii FROM vetb00004 a WHERE a.num_rnc = '130337391' INPUT BY NAME zcodigodgii WITHOUT DEFAULTS BEFORE INPUT DISPLAY BY NAME zcodigodgii AFTER INPUT EXIT INPUT END INPUT END FUNCTION FUNCTION tipo_comprobante() DEFINE kcodigo char(14), kdescripcion VARCHAR(100), kcodigodgii ui.ComboBox LET kcodigodgii = ui.ComboBox.forName("formonly.zcodigodgii") CALL kcodigodgii.clear() DECLARE busca_dgii CURSOR FOR SELECT CAST(a.codigo_dgii AS CHAR(3)),a.tipo_ncf FROM vetb00071 a WHERE a.disponible = "S" AND a.sucid = 1 AND a.tipo_doc = 'FT' ORDER BY a.codigo_dgii FOREACH busca_dgii INTO kcodigo,kdescripcion LET kcodigo = kcodigo CLIPPED CALL kcodigodgii.addItem(kcodigo,kdescripcion) END FOREACH END FUNCTION