MAIN DEFER INTERRUPT CONNECT to "decomarmol" USER 'jsoto' 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() # 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() END MAIN 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 LET fecha_inicial = '01/31/2018' DISPLAY "EN PROCESO...." DECLARE busca_f CURSOR FOR SELECT 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.fecha_orig <= '01/31/2018' AND a.tipo_cliente > 14 AND a.tipo_cliente = 24 AND a.sec_cliente = 8 ORDER BY a.tipo_cliente,a.sec_cliente 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.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 END IF CALL busca_avance_co(ktipo_cliente,ksec_cliente,kcotizacion,kvalor_f,knumero_f,kfecha) END FOREACH 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.banco = 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 WHERE a.tipo_Doc IN ('FT','FE') AND a.status_t IS NULL AND a.fecha_orig <= '01/31/2018' 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 ='JSOTO' 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 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.sucid = psucid 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 aplica_avance_balances() DECLARE busca_a_ba CURSOR FOR SELECT a.tipo_cliente,a.sec_cliente,a.num_Doc FROM cctb00001 a WHERE a.tipo_doc IN ('AV','AP') AND AND a.fecha_orig < ' a.status_t IS NULL END FUNCTION