Files
2026-09-22 20:38:51 -04:00

286 lines
13 KiB
Plaintext

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