Files
MBS/PROYECTO/otrodir/aplicacion.4gl
T

981 lines
28 KiB
Plaintext

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