286 lines
13 KiB
Plaintext
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 |