1659 lines
53 KiB
Plaintext
1659 lines
53 KiB
Plaintext
{--------------------------------------------------------------------------
|
|
PROGRAMA : VEPRMT036
|
|
OBJETIVO : Este programa captura la factura comercial del PLAN RANCHERO
|
|
es una modificacion del VEPRMT001 para incluir los siguiente:
|
|
Con el movto 30 (faturacion) se afecta la tabla iptb00017
|
|
(-) con mvto 33 y conjuntamente se hace un mvto positivo
|
|
a la tabla iptb00006 mvto 33 y asi poder facturar.
|
|
REALIZADO POR : Ing. Jose Alfredo Paulino Alejo.
|
|
fECHA : Diciembre 23, 1996.
|
|
--------------------------------------------------------------------------
|
|
}
|
|
GLOBALS
|
|
"veprgb000.4gl"
|
|
|
|
DEFINE mes_chequeo,vend_cte,tipo_fact1 SMALLINT
|
|
DEFINE porce,fact_unidades DECIMAL (8,2)
|
|
DEFINE codigo_provincia INTEGER
|
|
DEFINE fecha_final DATE,
|
|
cod_b1 CHAR(13),
|
|
cod_b2 CHAR(1),
|
|
cod_b4 CHAR(15)
|
|
FUNCTION veprmt036()
|
|
|
|
DEFINE valor,valor1,t_valor,valor_p,balance DECIMAL(12,2)
|
|
DEFINE tipo_fact,p_cod,p_bonif,cantidad_total,ano_act,ano_fe,credito,t_bonif,
|
|
factor INTEGER,
|
|
ch_balance CHAR(14),
|
|
cod_fact SMALLINT
|
|
DEFINE hoy DATE
|
|
DEFINE hice,primera,tipo_p,opt2,opt1,opt CHAR(1)
|
|
DEFINE tipo_f,tipo2 CHAR(2)
|
|
DEFINE cod_desc,tipo1 SMALLINT
|
|
DEFINE precio_ant,cantidad_ant,precio DECIMAL(12,3),
|
|
i,longitud SMALLINT
|
|
DEFINE tot_porc1,porc_desc,tot_porc DECIMAL(8,3)
|
|
|
|
OPTIONS
|
|
FORM LINE 2,
|
|
ERROR LINE 24,
|
|
COMMENT LINE 23,
|
|
PROMPT LINE 22
|
|
|
|
CLEAR SCREEN
|
|
OPEN FORM vefmmt036 FROM "vefmmt036"
|
|
DISPLAY FORM vefmmt036
|
|
DISPLAY "veprmt036" AT 1,1 ATTRIBUTE (YELLOW)
|
|
DISPLAY "JAPA " AT 2,1 ATTRIBUTE (YELLOW)
|
|
LET hoy = today
|
|
|
|
DISPLAY hoy using "dd/mm/yy" AT 1,70 ATTRIBUTE (YELLOW)
|
|
DISPLAY "PLAN RANCHERO " AT 3,30 ATTRIBUTE (reverse)
|
|
DISPLAY "<Esc> Adiciona " AT 3,1 ATTRIBUTE (BOLD)
|
|
DISPLAY "<Delete> Cancela Operacion" AT 3,54 ATTRIBUTE (BOLD)
|
|
|
|
# WHENEVER ERROR CONTINUE
|
|
|
|
ERROR "Para Anular Una Factura Que este Hecha Precione Ctrl-B"
|
|
|
|
LABEL exito:
|
|
INITIALIZE fact_gral.*,primera TO NULL
|
|
LET porc_desc = 0
|
|
LET descrip1 = NULL
|
|
LET descrip2 = NULL
|
|
LET p_bonif = NULL
|
|
LET fact_gral.cod_cia = 1
|
|
LET fact_gral.fecha_factura = today
|
|
LET tot_porc1 = 0
|
|
LET fact_gral.itbi = 0
|
|
LET fact_gral.sub_total = 0
|
|
LET fact_gral.total_fact = 0
|
|
LET fact_gral.desc_valor = 0
|
|
LET tot_porc = 0
|
|
DISPLAY BY NAME descrip1,descrip2
|
|
|
|
FOR idx = 1 to 10
|
|
LET fact_det[idx].cod_n = NULL
|
|
LET fact_det[idx].cod_grupo = NULL
|
|
LET fact_det[idx].cod_tipo = NULL
|
|
LET fact_det[idx].cod_sec = NULL
|
|
LET fact_det[idx].cantidad = NULL
|
|
LET fact_det[idx].despacho = NULL
|
|
LET fact_det[idx].existencia = NULL
|
|
LET fact_det[idx].unidades = NULL
|
|
LET fact_det[idx].precio = NULL
|
|
LET fact_det[idx].monto_fact = NULL
|
|
END FOR
|
|
|
|
FOR idx = 1 to 4
|
|
DISPLAY fact_det[idx].cod_n to s_fact[idx].cod_n
|
|
DISPLAY fact_det[idx].cod_grupo to s_fact[idx].cod_grupo
|
|
DISPLAY fact_det[idx].cod_tipo to s_fact[idx].cod_tipo
|
|
DISPLAY fact_det[idx].cod_sec to s_fact[idx].cod_sec
|
|
DISPLAY fact_det[idx].cantidad to s_fact[idx].cantidad
|
|
DISPLAY fact_det[idx].despacho to s_fact[idx].despacho
|
|
DISPLAY fact_det[idx].existencia to s_fact[idx].existencia
|
|
DISPLAY fact_det[idx].unidades to s_fact[idx].unidades
|
|
DISPLAY fact_det[idx].precio to s_fact[idx].precio
|
|
DISPLAY fact_det[idx].monto_fact to s_fact[idx].monto_fact
|
|
END FOR
|
|
|
|
DISPLAY BY NAME descrip1,descrip2
|
|
|
|
LABEL vuelve:
|
|
LET descrip1 = NULL
|
|
LET descrip2 = NULL
|
|
LET descrip3 = NULL
|
|
LET p_bonif = NULL
|
|
LET tot_porc1 = 0
|
|
LET t_valor = 0
|
|
LET fact_gral.cond_pago = 2
|
|
LET fact_gral.porc_itbi = NULL
|
|
LET fact_gral.prima_us = NULL
|
|
DISPLAY BY NAME fact_gral.porc_itbi,fact_gral.prima_us,
|
|
descrip1,descrip2
|
|
LET hice = "S"
|
|
LET h = 1
|
|
INPUT BY NAME fact_gral.* WITHOUT DEFAULTS ATTRIBUTE (YELLOW)
|
|
|
|
ON KEY (CONTROL-B)
|
|
LET mes_chequeo = MONTH(TODAY)
|
|
|
|
CALL anula()
|
|
NEXT FIELD cod_cia
|
|
|
|
ON KEY (CONTROL-W)
|
|
CASE
|
|
WHEN INFIELD(cod_tarifa)
|
|
CALL tarifas()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
NEXT FIELD cod_tarifa
|
|
END IF
|
|
LET descrip5 = descrip6[1,15] clipped
|
|
LET descrip6 = descrip6[16,30] clipped
|
|
DISPLAY BY NAME descrip5,descrip6 ATTRIBUTE (BOLD)
|
|
NEXT FIELD nombre_tran
|
|
|
|
WHEN INFIELD(zona)
|
|
IF fact_gral.ventas = "1" THEN
|
|
CALL busca_zona1()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
NEXT FIELD zona
|
|
END IF
|
|
ELSE
|
|
CALL busca_pais()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
NEXT FIELD zona
|
|
END IF
|
|
END IF
|
|
|
|
LET p_cod = fact_gral.zona
|
|
LET fact_gral.zona = p_cod using "&&&"
|
|
DISPLAY BY NAME fact_gral.zona,descrip1 ATTRIBUTE (BOLD)
|
|
NEXT FIELD fecha_factura
|
|
|
|
WHEN INFIELD(cond_pago)
|
|
CALL condiciones()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
NEXT FIELD cond_pago
|
|
END IF
|
|
|
|
DISPLAY BY NAME fact_gral.cond_pago ATTRIBUTE(YELLOW)
|
|
DISPLAY BY NAME fact_gral.descrip ATTRIBUTE(YELLOW)
|
|
NEXT FIELD orden
|
|
|
|
WHEN INFIELD(sec_vend)
|
|
CALL consulta_empleados()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
NEXT FIELD sec_vend
|
|
END IF
|
|
|
|
LET fact_gral.sec_vend = transportista.sec_transp
|
|
LET fact_gral.nombre_vend = descrip6
|
|
|
|
DISPLAY BY NAME fact_gral.sec_vend ATTRIBUTE (YELLOW)
|
|
DISPLAY BY NAME fact_gral.nombre_vend ATTRIBUTE (YELLOW)
|
|
NEXT FIELD cod_transp
|
|
|
|
WHEN INFIELD(cod_transp)
|
|
# CALL cons_transp()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
NEXT FIELD cons_transp
|
|
END IF
|
|
|
|
DISPLAY BY NAME fact_gral.cod_transp ATTRIBUTE (YELLOW)
|
|
DISPLAY BY NAME fact_gral.sec_transp ATTRIBUTE (YELLOW)
|
|
DISPLAY BY NAME fact_gral.nombre_tran ATTRIBUTE (YELLOW)
|
|
NEXT FIELD cod_tarifa
|
|
|
|
WHEN INFIELD(sec_transp)
|
|
# CALL cons_transp()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
NEXT FIELD cons_transp
|
|
END IF
|
|
|
|
DISPLAY BY NAME fact_gral.cod_transp ATTRIBUTE (YELLOW)
|
|
DISPLAY BY NAME fact_gral.sec_transp ATTRIBUTE (YELLOW)
|
|
DISPLAY BY NAME fact_gral.nombre_tran ATTRIBUTE (YELLOW)
|
|
NEXT FIELD cod_tarifa
|
|
|
|
END CASE
|
|
|
|
AFTER FIELD porc_desc
|
|
IF fact_gral.porc_desc IS NULL THEN
|
|
LET fact_gral.porc_desc = 0
|
|
END IF
|
|
IF fact_gral.porc_desc > porce THEN
|
|
LET numero_msg = 145
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD porc_desc
|
|
END IF
|
|
|
|
AFTER FIELD cod_cia
|
|
IF fact_gral.cod_cia IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_cia
|
|
END IF
|
|
|
|
IF fact_gral.cod_cia = 1 THEN
|
|
LET compania = "R A Y . O . V A C D O M I N I C A N A, S. A."
|
|
END IF
|
|
|
|
IF fact_gral.cod_cia = 2 THEN
|
|
LET compania = "DISTRIBUIDORA DOMINICANA DE PILAS, S. A."
|
|
END IF
|
|
|
|
DISPLAY BY NAME compania ATTRIBUTE (YELLOW)
|
|
|
|
AFTER FIELD ventas
|
|
IF fact_gral.ventas IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD ventas
|
|
END IF
|
|
|
|
SELECT prima,@itbi,porciento
|
|
INTO fact_gral.prima_us,fact_gral.porc_itbi,porce
|
|
FROM vetb00019 WHERE disponible = "S"
|
|
|
|
IF fact_gral.ventas = "1" THEN
|
|
IF fact_gral.porc_itbi IS NULL THEN
|
|
LET numero_msg = 87
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD ventas
|
|
END IF
|
|
LET tipo_fact = 30
|
|
LET tipo_f = "FT"
|
|
LET fact_gral.nombre_tipo = "LOCAL"
|
|
LET fact_gral.prima_us = NULL
|
|
ELSE
|
|
LET fact_gral.porc_itbi = NULL
|
|
IF fact_gral.prima_us IS NULL THEN
|
|
LET numero_msg = 87
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD ventas
|
|
END IF
|
|
|
|
LET fact_gral.nombre_tipo = "EXPORTACION"
|
|
LET tipo_fact = 31
|
|
LET tipo_f = "FE"
|
|
END IF
|
|
|
|
DISPLAY BY NAME fact_gral.prima_us,fact_gral.porc_itbi
|
|
ATTRIBUTE(BOLD)
|
|
DISPLAY BY NAME fact_gral.nombre_tipo ATTRIBUTE (BOLD)
|
|
DISPLAY BY NAME descrip1 ATTRIBUTE (BOLD)
|
|
|
|
AFTER FIELD zona
|
|
LET longitud = LENGTH(fact_gral.zona)
|
|
IF longitud < 3 THEN
|
|
LET numero_msg = 77
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD zona
|
|
END IF
|
|
|
|
LET tipo1 = fact_gral.zona
|
|
CALL integridad()
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
NEXT FIELD zona
|
|
END IF
|
|
|
|
LET tipo2 = fact_gral.zona[2,3]
|
|
IF fact_gral.ventas = "1" THEN
|
|
SELECT unique descrip INTO descrip1 FROM vetb00008
|
|
WHERE cod_zona = tipo1
|
|
|
|
IF STATUS < 0 THEN
|
|
CALL integridad()
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
ELSE
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD ventas
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
IF fact_gral.ventas = "2" THEN
|
|
SELECT unique nom_pais INTO descrip1 FROM cotb00018
|
|
WHERE cod_pais = tipo2
|
|
|
|
IF STATUS < 0 THEN
|
|
CALL integridad()
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
ELSE
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD ventas
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
SELECT max(ult_factura) INTO fact_gral.factura FROM vetb00001
|
|
|
|
LET fact_gral.factura = fact_gral.factura + 1
|
|
|
|
DISPLAY BY NAME fact_gral.factura ATTRIBUTE (YELLOW)
|
|
DISPLAY BY NAME descrip1 ATTRIBUTE(YELLOW)
|
|
|
|
AFTER FIELD sec_cliente
|
|
IF fact_gral.sec_cliente IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD sec_cliente
|
|
ELSE
|
|
|
|
SELECT a.nombre,a.limite_credito,a.cod_provincia
|
|
INTO fact_gral.nombre,credito,codigo_provincia
|
|
FROM vetb00004 a
|
|
WHERE a.tipo_cliente = fact_gral.tipo_cliente AND
|
|
a.sec_cliente = fact_gral.sec_cliente AND
|
|
a.status_t IS NULL
|
|
|
|
IF STATUS < 0 THEN
|
|
CALL integridad()
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
ELSE
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo_cliente
|
|
END IF
|
|
|
|
DISPLAY BY NAME fact_gral.nombre ATTRIBUTE (YELLOW)
|
|
|
|
SELECT b.calle,b.casa_num,b.barrio
|
|
INTO descrip1,descrip2,descrip3
|
|
FROM vetb00005 b
|
|
WHERE b.tipo_cliente = fact_gral.tipo_cliente AND
|
|
b.sec_cliente = fact_gral.sec_cliente
|
|
|
|
SELECT d.nombre_provincia INTO fact_gral.ciudad
|
|
FROM vetb00020 d
|
|
WHERE d.cod_provincia = codigo_provincia
|
|
|
|
IF STATUS < 0 THEN
|
|
CALL integridad()
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
ELSE
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo_cliente
|
|
END IF
|
|
END IF
|
|
|
|
LET fact_gral.direccion = descrip1 clipped," ",descrip2 clipped,", ",
|
|
descrip3 clipped
|
|
|
|
DISPLAY BY NAME fact_gral.direccion ATTRIBUTE (YELLOW)
|
|
DISPLAY BY NAME fact_gral.ciudad ATTRIBUTE (YELLOW)
|
|
|
|
SELECT SUM(@valor+@monto_desc)
|
|
INTO valor
|
|
FROM cctb00001
|
|
WHERE @fecha_orig <= fact_gral.fecha_factura AND
|
|
@tipo_cliente = fact_gral.tipo_cliente AND
|
|
@sec_cliente = fact_gral.sec_cliente AND
|
|
@status_t IS NULL AND
|
|
tipo_doc NOT in ("DE","PC")
|
|
|
|
IF valor IS NULL THEN
|
|
LET valor = 0.00
|
|
END IF
|
|
|
|
SELECT SUM(@valor+@monto_desc) INTO valor1
|
|
FROM cctb00001
|
|
WHERE @fecha_orig <= fact_gral.fecha_factura AND
|
|
@tipo_cliente = fact_gral.tipo_cliente AND
|
|
@sec_cliente = fact_gral.sec_cliente AND
|
|
@status_t IS NULL AND tipo_doc = "DE" AND num_doc = aplica_a
|
|
|
|
IF valor1 IS NULL THEN
|
|
LET valor1 = 0.00
|
|
END IF
|
|
LET balance = valor - valor1
|
|
|
|
IF balance IS NULL THEN
|
|
LET balance = 0
|
|
END IF
|
|
LET ch_balance = balance using "###,###,###.##"
|
|
DISPLAY BY NAME ch_balance ATTRIBUTE(BOLD)
|
|
END IF
|
|
END IF
|
|
BEFORE FIELD nombre
|
|
IF fact_gral.sec_cliente != 51 THEN
|
|
NEXT FIELD porc_desc
|
|
END IF
|
|
BEFORE FIELD prima_us
|
|
IF fact_gral.ventas = "1" THEN
|
|
NEXT FIELD cond_pago
|
|
END IF
|
|
|
|
BEFORE FIELD cond_pago
|
|
LET fact_gral.cond_pago = 2
|
|
DISPLAY BY NAME fact_gral.cond_pago
|
|
|
|
AFTER FIELD cond_pago
|
|
IF fact_gral.cond_pago IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cond_pago
|
|
END IF
|
|
|
|
SELECT a.* INTO condicion.* FROM vetb00012 a
|
|
WHERE a.cond_pago = fact_gral.cond_pago
|
|
|
|
IF STATUS < 0 THEN
|
|
CALL integridad()
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
ELSE
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cond_pago
|
|
END IF
|
|
END IF
|
|
|
|
DISPLAY BY NAME condicion.descrip ATTRIBUTE (YELLOW)
|
|
|
|
BEFORE FIELD porc_itbi
|
|
IF fact_gral.ventas = "2" THEN
|
|
NEXT FIELD sec_vend
|
|
END IF
|
|
|
|
AFTER FIELD porc_itbi
|
|
IF fact_gral.porc_itbi IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD porc_itbi
|
|
END IF
|
|
|
|
AFTER FIELD sec_vend
|
|
IF fact_gral.sec_vend IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD sec_vend
|
|
END IF
|
|
SELECT nom1_emp, apell1_emp INTO descrip5,descrip6
|
|
FROM adtb00003
|
|
WHERE num_emp = fact_gral.sec_vend
|
|
|
|
IF STATUS < 0 THEN
|
|
CALL integridad()
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
ELSE
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD sec_vend
|
|
END IF
|
|
END IF
|
|
|
|
LET fact_gral.nombre_vend = descrip5 clipped," ",descrip6 clipped
|
|
DISPLAY BY NAME fact_gral.nombre_vend ATTRIBUTE (YELLOW)
|
|
|
|
# Verifica que el vendedor venda al cliente de la factura
|
|
|
|
IF fact_gral.sec_vend != 8888 THEN
|
|
SELECT unique * FROM vetb00028
|
|
WHERE sec_vend = fact_gral.sec_vend AND
|
|
tipo_cliente = fact_gral.tipo_cliente AND
|
|
sec_cliente = fact_gral.sec_cliente
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 119
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD sec_vend
|
|
END IF
|
|
END IF
|
|
|
|
BEFORE FIELD cod_transp
|
|
LET fact_gral.nombre_tran = NULL
|
|
LET p_cedula = NULL
|
|
LET p_serie = NULL
|
|
|
|
IF fact_gral.cond_pago = 1 or fact_gral.ventas = "2" THEN
|
|
NEXT FIELD fecha_embarque
|
|
END IF
|
|
|
|
AFTER FIELD cod_transp
|
|
IF fact_gral.cod_transp IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_transp
|
|
END IF
|
|
|
|
AFTER FIELD sec_transp
|
|
IF fact_gral.sec_transp IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD sec_transp
|
|
END IF
|
|
|
|
SELECT a.nombre,a.cedula,a.serie
|
|
INTO fact_gral.nombre_tran,p_cedula,p_serie
|
|
FROM vetb00015 a
|
|
WHERE a.cod_transp=fact_gral.cod_transp AND
|
|
a.sec_transp=fact_gral.sec_transp AND
|
|
a.status_t IS NULL
|
|
|
|
IF STATUS < 0 THEN
|
|
CALL integridad()
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
ELSE
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_transp
|
|
END IF
|
|
END IF
|
|
|
|
DISPLAY BY NAME fact_gral.nombre_tran ATTRIBUTE (YELLOW)
|
|
|
|
AFTER FIELD cod_tarifa
|
|
IF fact_gral.cod_tarifa IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_tarifa
|
|
END IF
|
|
SELECT descrip INTO descrip6 FROM vetb00023
|
|
WHERE cod_tarifa = fact_gral.cod_tarifa AND
|
|
status_t IS NULL
|
|
|
|
LET descrip5 = descrip6[1,15] clipped
|
|
LET descrip6 = descrip6[16,30] clipped
|
|
DISPLAY BY NAME descrip5,descrip6 ATTRIBUTE (BOLD)
|
|
BEFORE FIELD fecha_factura
|
|
LET fact_gral.fecha_factura = hoy
|
|
DISPLAY BY NAME fact_gral.fecha_factura
|
|
{
|
|
AFTER FIELD fecha_factura
|
|
LET p_fechas = fact_gral.fecha_factura
|
|
LET hoy = fact_gral.fecha_factura
|
|
|
|
CALL prd()
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
NEXT FIELD fecha_factura
|
|
END IF
|
|
|
|
IF fact_gral.fecha_factura < "310394" THEN
|
|
LET numero_msg = 58
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
}
|
|
BEFORE FIELD fecha_embarque
|
|
IF fact_gral.ventas = "1" THEN
|
|
NEXT FIELD placa_transp
|
|
END IF
|
|
|
|
AFTER FIELD fecha_embarque
|
|
IF fact_gral.fecha_embarque IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha_embarque
|
|
END IF
|
|
|
|
# No permite que el usuario introduzca un ano que no corresponda al actual
|
|
|
|
LET ano_act = year(today)
|
|
LET ano_fe = year(fact_gral.fecha_embarque)
|
|
|
|
IF ano_fe < ano_act THEN
|
|
LET numero_msg = 59
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha_embarque
|
|
END IF
|
|
|
|
IF fact_gral.fecha_embarque < fact_gral.fecha_factura THEN
|
|
LET numero_msg = 100
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha_embarque
|
|
END IF
|
|
IF fact_gral.ventas = "2" THEN
|
|
EXIT INPUT
|
|
END IF
|
|
|
|
AFTER FIELD placa_transp
|
|
IF fact_gral.placa_transp IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
IF fact_gral.ventas IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD ventas
|
|
END IF
|
|
|
|
SELECT prima,@itbi,porciento
|
|
INTO fact_gral.prima_us,fact_gral.porc_itbi,porce
|
|
FROM vetb00019 WHERE disponible = "S"
|
|
|
|
IF fact_gral.ventas = "1" THEN
|
|
IF fact_gral.porc_itbi IS NULL THEN
|
|
LET numero_msg = 87
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD ventas
|
|
END IF
|
|
LET tipo_fact = 30
|
|
LET tipo_f = "FT"
|
|
LET fact_gral.nombre_tipo = "LOCAL"
|
|
LET fact_gral.prima_us = NULL
|
|
ELSE
|
|
LET fact_gral.porc_itbi = NULL
|
|
IF fact_gral.prima_us IS NULL THEN
|
|
LET numero_msg = 87
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD ventas
|
|
END IF
|
|
LET fact_gral.nombre_tipo = "EXPORTACION"
|
|
LET tipo_fact = 31
|
|
LET tipo_f = "FE"
|
|
END IF
|
|
|
|
DISPLAY BY NAME fact_gral.prima_us,fact_gral.porc_itbi
|
|
ATTRIBUTE(BOLD)
|
|
DISPLAY BY NAME fact_gral.nombre_tipo ATTRIBUTE (BOLD)
|
|
DISPLAY BY NAME descrip1 ATTRIBUTE (BOLD)
|
|
|
|
IF fact_gral.porc_desc > porce THEN
|
|
LET numero_msg = 145
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD porc_desc
|
|
END IF
|
|
IF fact_gral.sec_cliente IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo_cliente
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
RETURN
|
|
END IF
|
|
|
|
LET fact_gral.itbi = 0
|
|
LET fact_gral.sub_total = 0
|
|
LET fact_gral.total_fact = 0
|
|
LET fact_gral.desc_valor = 0
|
|
LET tot_porc = 0
|
|
|
|
LABEL alla:
|
|
INPUT ARRAY fact_det WITHOUT DEFAULTS FROM s_fact.*
|
|
BEFORE ROW
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
ON KEY (CONTROL-W)
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
|
|
CASE
|
|
WHEN INFIELD (cod_n)
|
|
CALL busca_pt()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
LET fact_det[curr].cod_n = pterminado.cod_n
|
|
LET fact_det[curr].cod_grupo = pterminado.cod_grupo
|
|
LET fact_det[curr].cod_tipo = pterminado.cod_tipo
|
|
LET fact_det[curr].cod_sec = pterminado.cod_sec
|
|
CALL repite_codigo()
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
LET verdad = NULL
|
|
CALL precios()
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
SELECT a.descrip_esp,SUM(b.cantidad_2) INTO descrip1,p_existencia
|
|
FROM iptb00002 a,iptb00006 b
|
|
WHERE a.cod_n = fact_det[curr].cod_n AND
|
|
a.cod_grupo = fact_det[curr].cod_grupo AND
|
|
a.cod_tipo = fact_det[curr].cod_tipo AND
|
|
a.cod_sec = fact_det[curr].cod_sec AND
|
|
b.cod_n = fact_det[curr].cod_n AND
|
|
b.cod_grupo = fact_det[curr].cod_grupo AND
|
|
b.cod_tipo = fact_det[curr].cod_tipo AND
|
|
b.cod_sec = fact_det[curr].cod_sec AND
|
|
a.status_t IS NULL AND
|
|
b.status_t IS NULL
|
|
|
|
LET descrip2 = descrip1
|
|
DISPLAY fact_det[curr].cod_n TO s_fact[scr_l].cod_n
|
|
DISPLAY fact_det[curr].cod_grupo TO s_fact[scr_l].cod_grupo
|
|
DISPLAY fact_det[curr].cod_tipo TO s_fact[scr_l].cod_tipo
|
|
DISPLAY fact_det[curr].cod_sec TO s_fact[scr_l].cod_sec
|
|
DISPLAY fact_det[curr].precio TO s_fact[scr_l].precio
|
|
DISPLAY BY NAME descrip2
|
|
NEXT FIELD cantidad
|
|
|
|
WHEN INFIELD (cod_grupo)
|
|
CALL busca_pt()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
LET fact_det[curr].cod_n = pterminado.cod_n
|
|
LET fact_det[curr].cod_grupo = pterminado.cod_grupo
|
|
LET fact_det[curr].cod_tipo = pterminado.cod_tipo
|
|
LET fact_det[curr].cod_sec = pterminado.cod_sec
|
|
CALL repite_codigo()
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
LET verdad = NULL
|
|
CALL precios()
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
SELECT a.descrip_esp,SUM(b.cantidad_2) INTO descrip1,p_existencia
|
|
FROM iptb00002 a,iptb00006 b
|
|
WHERE a.cod_n = fact_det[curr].cod_n AND
|
|
a.cod_grupo = fact_det[curr].cod_grupo AND
|
|
a.cod_tipo = fact_det[curr].cod_tipo AND
|
|
a.cod_sec = fact_det[curr].cod_sec AND
|
|
b.cod_n = fact_det[curr].cod_n AND
|
|
b.cod_grupo = fact_det[curr].cod_grupo AND
|
|
b.cod_tipo = fact_det[curr].cod_tipo AND
|
|
b.cod_sec = fact_det[curr].cod_sec AND
|
|
a.status_t IS NULL AND
|
|
b.status_t IS NULL
|
|
|
|
LET descrip2 = descrip1
|
|
DISPLAY fact_det[curr].cod_n TO s_fact[scr_l].cod_n
|
|
DISPLAY fact_det[curr].cod_grupo TO s_fact[scr_l].cod_grupo
|
|
DISPLAY fact_det[curr].cod_tipo TO s_fact[scr_l].cod_tipo
|
|
DISPLAY fact_det[curr].cod_sec TO s_fact[scr_l].cod_sec
|
|
DISPLAY fact_det[curr].precio TO s_fact[scr_l].precio
|
|
DISPLAY BY NAME descrip2
|
|
NEXT FIELD cantidad
|
|
|
|
WHEN INFIELD (cod_tipo)
|
|
CALL busca_pt()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
LET fact_det[curr].cod_n = pterminado.cod_n
|
|
LET fact_det[curr].cod_grupo = pterminado.cod_grupo
|
|
LET fact_det[curr].cod_tipo = pterminado.cod_tipo
|
|
LET fact_det[curr].cod_sec = pterminado.cod_sec
|
|
CALL repite_codigo()
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
LET verdad = NULL
|
|
CALL precios()
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
SELECT a.descrip_esp,SUM(b.cantidad_2) INTO descrip1,p_existencia
|
|
FROM iptb00002 a,iptb00006 b
|
|
WHERE a.cod_n = fact_det[curr].cod_n AND
|
|
a.cod_grupo = fact_det[curr].cod_grupo AND
|
|
a.cod_tipo = fact_det[curr].cod_tipo AND
|
|
a.cod_sec = fact_det[curr].cod_sec AND
|
|
b.cod_n = fact_det[curr].cod_n AND
|
|
b.cod_grupo = fact_det[curr].cod_grupo AND
|
|
b.cod_tipo = fact_det[curr].cod_tipo AND
|
|
b.cod_sec = fact_det[curr].cod_sec AND
|
|
a.status_t IS NULL AND
|
|
b.status_t IS NULL
|
|
|
|
LET descrip2 = descrip1
|
|
DISPLAY fact_det[curr].cod_n TO s_fact[scr_l].cod_n
|
|
DISPLAY fact_det[curr].cod_grupo TO s_fact[scr_l].cod_grupo
|
|
DISPLAY fact_det[curr].cod_tipo TO s_fact[scr_l].cod_tipo
|
|
DISPLAY fact_det[curr].cod_sec TO s_fact[scr_l].cod_sec
|
|
DISPLAY fact_det[curr].precio TO s_fact[scr_l].precio
|
|
DISPLAY BY NAME descrip2
|
|
NEXT FIELD cantidad
|
|
|
|
WHEN INFIELD (cod_sec)
|
|
CALL busca_pt()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
LET fact_det[curr].cod_n = pterminado.cod_n
|
|
LET fact_det[curr].cod_grupo = pterminado.cod_grupo
|
|
LET fact_det[curr].cod_tipo = pterminado.cod_tipo
|
|
LET fact_det[curr].cod_sec = pterminado.cod_sec
|
|
CALL repite_codigo()
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
LET verdad = NULL
|
|
CALL precios()
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
SELECT a.descrip_esp,SUM(b.cantidad_2) INTO descrip1,p_existencia
|
|
FROM iptb00002 a,iptb00006 b
|
|
WHERE a.cod_n = fact_det[curr].cod_n AND
|
|
a.cod_grupo = fact_det[curr].cod_grupo AND
|
|
a.cod_tipo = fact_det[curr].cod_tipo AND
|
|
a.cod_sec = fact_det[curr].cod_sec AND
|
|
b.cod_n = fact_det[curr].cod_n AND
|
|
b.cod_grupo = fact_det[curr].cod_grupo AND
|
|
b.cod_tipo = fact_det[curr].cod_tipo AND
|
|
b.cod_sec = fact_det[curr].cod_sec AND
|
|
a.status_t IS NULL AND
|
|
b.status_t IS NULL
|
|
|
|
LET descrip2 = descrip1
|
|
DISPLAY fact_det[curr].cod_n TO s_fact[scr_l].cod_n
|
|
DISPLAY fact_det[curr].cod_grupo TO s_fact[scr_l].cod_grupo
|
|
DISPLAY fact_det[curr].cod_tipo TO s_fact[scr_l].cod_tipo
|
|
DISPLAY fact_det[curr].cod_sec TO s_fact[scr_l].cod_sec
|
|
DISPLAY fact_det[curr].precio TO s_fact[scr_l].precio
|
|
DISPLAY BY NAME descrip2
|
|
NEXT FIELD cantidad
|
|
|
|
END CASE
|
|
|
|
AFTER FIELD cod_n
|
|
IF fact_det[curr].cod_n IS NOT NULL THEN
|
|
|
|
IF fact_det[curr].cod_n != 3 AND
|
|
fact_gral.cod_cia = 1 THEN
|
|
LET numero_msg = 211
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
IF fact_det[curr].cod_n != 9 AND
|
|
fact_det[curr].cod_n != 6 AND
|
|
fact_gral.cod_cia = 2 THEN
|
|
LET numero_msg = 211
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
END IF
|
|
|
|
IF fact_det[curr].cod_n IS NOT NULL AND
|
|
fact_det[curr].cod_grupo IS NOT NULL AND
|
|
fact_det[curr].cod_tipo IS NOT NULL AND
|
|
fact_det[curr].cod_sec IS NOT NULL THEN
|
|
CALL repite_codigo()
|
|
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cod_grupo
|
|
END IF
|
|
END IF
|
|
|
|
AFTER FIELD cod_grupo
|
|
|
|
IF fact_det[curr].cod_n IS NOT NULL AND
|
|
fact_det[curr].cod_grupo IS NOT NULL AND
|
|
fact_det[curr].cod_tipo IS NOT NULL AND
|
|
fact_det[curr].cod_sec IS NOT NULL THEN
|
|
CALL repite_codigo()
|
|
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cod_tipo
|
|
END IF
|
|
END IF
|
|
|
|
AFTER FIELD cod_tipo
|
|
|
|
IF fact_det[curr].cod_n IS NOT NULL AND
|
|
fact_det[curr].cod_grupo IS NOT NULL AND
|
|
fact_det[curr].cod_tipo IS NOT NULL AND
|
|
fact_det[curr].cod_sec IS NOT NULL THEN
|
|
CALL repite_codigo()
|
|
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cod_sec
|
|
END IF
|
|
END IF
|
|
|
|
AFTER FIELD cod_sec
|
|
|
|
IF fact_det[curr].cod_n IS NOT NULL AND
|
|
fact_det[curr].cod_grupo IS NOT NULL AND
|
|
fact_det[curr].cod_tipo IS NOT NULL AND
|
|
fact_det[curr].cod_sec IS NOT NULL THEN
|
|
|
|
CALL repite_codigo()
|
|
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
# Calcula el precio por la cantidad vendida para el monto y el
|
|
# calculo del precio por la prima digitdada
|
|
|
|
LET verdad = NULL
|
|
CALL precios()
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
# Busca la descripcion del producto con su existencia
|
|
|
|
SELECT a.descrip_esp,SUM(b.cantidad_2) INTO descrip2,p_existencia
|
|
FROM iptb00002 a,iptb00006 b
|
|
WHERE a.cod_n = fact_det[curr].cod_n AND
|
|
a.cod_grupo = fact_det[curr].cod_grupo AND
|
|
a.cod_tipo = fact_det[curr].cod_tipo AND
|
|
a.cod_sec = fact_det[curr].cod_sec AND
|
|
b.cod_n = a.cod_n AND b.cod_grupo = a.cod_grupo AND
|
|
b.cod_tipo = a.cod_tipo AND b.cod_sec = a.cod_sec AND
|
|
a.status_t IS NULL AND b.status_t IS NULL
|
|
|
|
IF STATUS < 0 THEN
|
|
CALL integridad()
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
|
|
ELSE
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
END IF
|
|
|
|
END IF
|
|
DISPLAY BY NAME descrip2
|
|
|
|
AFTER FIELD cantidad
|
|
|
|
IF fact_det[curr].cod_n IS NOT NULL AND
|
|
fact_det[curr].cod_grupo IS NOT NULL AND
|
|
fact_det[curr].cod_tipo IS NOT NULL AND
|
|
fact_det[curr].cod_sec IS NOT NULL THEN
|
|
|
|
IF fact_det[curr].cantidad IS NULL OR
|
|
fact_det[curr].cantidad = 0 THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
# Busca factor de conversion de cada pila
|
|
|
|
SELECT a.cantidad INTO p_cantidad FROM vetb00014 a
|
|
WHERE a.cod_n = fact_det[curr].cod_n AND
|
|
a.cod_grupo = fact_det[curr].cod_grupo AND
|
|
a.cod_tipo = fact_det[curr].cod_tipo AND
|
|
a.cod_sec = fact_det[curr].cod_sec AND
|
|
a.status_t IS NULL
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 94
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
|
|
SELECT UNIQUE sec_cliente INTO vend_cte FROM vetb00033
|
|
WHERE num_emp = fact_gral.sec_vend
|
|
|
|
SELECT sum(cantidad_2) INTO p_existencia FROM iptb00017
|
|
WHERE (cod_n = fact_det[curr].cod_n) AND
|
|
(cod_grupo = fact_det[curr].cod_grupo) AND
|
|
(cod_tipo = fact_det[curr].cod_tipo) AND
|
|
(cod_sec = fact_det[curr].cod_sec ) AND
|
|
(cod_sp_sec = vend_cte) AND
|
|
status_t IS NULL
|
|
|
|
IF p_existencia IS NULL THEN
|
|
LET p_existencia = 0
|
|
END IF
|
|
|
|
LET fact_det[curr].unidades = fact_det[curr].cantidad * p_cantidad
|
|
LET fact_det[curr].existencia = p_existencia
|
|
DISPLAY fact_det[curr].existencia TO s_fact[scr_l].existencia
|
|
LET excede[curr] = NULL
|
|
|
|
IF fact_gral.ventas = "1" THEN
|
|
IF fact_det[curr].unidades > p_existencia THEN
|
|
# LET excede[curr] = "S"
|
|
LET numero_msg = 30
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cantidad
|
|
END IF
|
|
END IF
|
|
|
|
DISPLAY fact_det[curr].unidades TO s_fact[scr_l].unidades
|
|
|
|
# Calcula el precio por las unidades y da el monto
|
|
|
|
LET fact_det[curr].monto_fact = fact_det[curr].unidades *
|
|
fact_det[curr].precio
|
|
|
|
DISPLAY fact_det[curr].monto_fact to s_fact[scr_l].monto_fact
|
|
DISPLAY fact_det[curr].precio TO s_fact[scr_l].precio
|
|
|
|
{ Convertir la existencia en cajas para desplegarla
|
|
LET fact_det[curr].despacho = p_existencia
|
|
LET fact_det[curr].existencia = p_existencia
|
|
LET cant_pend[curr] = fact_det[curr].despacho * p_cantidad
|
|
DISPLAY fact_det[curr].existencia TO s_fact[scr_l].existencia
|
|
DISPLAY fact_det[curr].despacho TO s_fact[scr_l].despacho
|
|
NEXT FIELD despacho
|
|
ELSE
|
|
NEXT FIELD precio
|
|
END IF}
|
|
|
|
END IF
|
|
|
|
BEFORE FIELD despacho
|
|
NEXT FIELD precio
|
|
|
|
AFTER INPUT
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
|
|
IF fact_det[curr].cod_n IS NULL THEN
|
|
LET fact_det[curr].cantidad = 0
|
|
LET fact_det[curr].unidades = 0
|
|
LET fact_det[curr].despacho = 0
|
|
LET fact_det[curr].existencia = 0
|
|
LET fact_det[curr].precio = 0
|
|
LET fact_det[curr].monto_fact = 0
|
|
END IF
|
|
|
|
IF fact_det[curr].cod_grupo IS NULL THEN
|
|
LET fact_det[curr].cantidad = 0
|
|
LET fact_det[curr].unidades = 0
|
|
LET fact_det[curr].despacho = 0
|
|
LET fact_det[curr].existencia = 0
|
|
LET fact_det[curr].precio = 0
|
|
LET fact_det[curr].monto_fact = 0
|
|
END IF
|
|
|
|
IF fact_det[curr].cod_tipo IS NULL THEN
|
|
LET fact_det[curr].cantidad = 0
|
|
LET fact_det[curr].unidades = 0
|
|
LET fact_det[curr].despacho = 0
|
|
LET fact_det[curr].existencia = 0
|
|
LET fact_det[curr].precio = 0
|
|
LET fact_det[curr].monto_fact = 0
|
|
END IF
|
|
|
|
IF fact_det[curr].cod_sec IS NULL THEN
|
|
LET fact_det[curr].cantidad = 0
|
|
LET fact_det[curr].unidades = 0
|
|
LET fact_det[curr].despacho = 0
|
|
LET fact_det[curr].existencia = 0
|
|
LET fact_det[curr].precio = 0
|
|
LET fact_det[curr].monto_fact = 0
|
|
END IF
|
|
|
|
DISPLAY fact_det[curr].cantidad TO s_fact[scr_l].cantidad
|
|
DISPLAY fact_det[curr].unidades TO s_fact[scr_l].unidades
|
|
DISPLAY fact_det[curr].despacho TO s_fact[scr_l].despacho
|
|
DISPLAY fact_det[curr].existencia TO s_fact[scr_l].existencia
|
|
DISPLAY fact_det[curr].precio TO s_fact[scr_l].precio
|
|
DISPLAY fact_det[curr].monto_fact TO s_fact[scr_l].monto_fact
|
|
|
|
# Calculo del sub-total de la factura
|
|
|
|
LET t_costos = 0
|
|
|
|
LET fact_gral.itbi = 0
|
|
LET fact_gral.sub_total = 0
|
|
LET fact_gral.total_fact = 0
|
|
LET fact_gral.desc_valor = 0
|
|
|
|
FOR idx = 1 to arr_count()
|
|
IF fact_det[idx].cod_n is not null and
|
|
fact_det[idx].cod_grupo is not null and
|
|
fact_det[idx].cod_tipo is not null and
|
|
fact_det[idx].cod_sec is not null THEN
|
|
|
|
SELECT a.cantidad INTO p_cantidad FROM vetb00014 a
|
|
WHERE a.cod_n = fact_det[idx].cod_n AND
|
|
a.cod_grupo = fact_det[idx].cod_grupo AND
|
|
a.cod_tipo = fact_det[idx].cod_tipo AND
|
|
a.cod_sec = fact_det[idx].cod_sec AND
|
|
a.status_t IS NULL
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 94
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
LET fact_det[idx].unidades =
|
|
fact_det[idx].cantidad * p_cantidad
|
|
DISPLAY fact_det[curr].unidades TO s_fact[scr_l].unidades
|
|
IF fact_det[idx].cod_n != 0 THEN
|
|
IF fact_det[idx].cantidad IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
IF fact_det[idx].monto_fact IS NOT NULL THEN
|
|
LET p_costos = 0
|
|
LET p_costos = 0
|
|
LET t_costos = 0
|
|
|
|
LET fact_gral.sub_total = fact_gral.sub_total +
|
|
fact_det[idx].monto_fact
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
LET cantidad_total = 0
|
|
|
|
IF primera IS NULL THEN
|
|
LET primera = "S"
|
|
END IF
|
|
|
|
# Calculo descuento de la factura
|
|
|
|
IF fact_gral.porc_desc > 0 AND fact_gral.ventas = "1" THEN
|
|
LET p_desc = fact_gral.sub_total * (fact_gral.porc_desc / 100)
|
|
LET fact_gral.desc_valor = p_desc
|
|
END IF
|
|
|
|
IF fact_gral.porc_desc > 0 AND fact_gral.ventas = "2" THEN
|
|
LET fact_gral.desc_valor = fact_gral.porc_desc
|
|
END IF
|
|
|
|
IF fact_gral.desc_valor IS NULL THEN
|
|
LET fact_gral.desc_valor = 0
|
|
END IF
|
|
|
|
LET desc_valor = fact_gral.desc_valor using "###,###.##"
|
|
DISPLAY BY NAME desc_valor ATTRIBUTE (BOLD)
|
|
|
|
# Calcula el porciento de ITBIS de la factura dependiendo del porciento
|
|
# especificado por el usuario
|
|
|
|
IF fact_gral.porc_itbi IS NOT NULL THEN
|
|
|
|
LET fact_gral.total_fact = fact_gral.sub_total - fact_gral.desc_valor
|
|
LET fact_gral.itbi = (fact_gral.total_fact *
|
|
(fact_gral.porc_itbi / 100))
|
|
|
|
LET itbi = fact_gral.itbi using "###,###,###.##"
|
|
DISPLAY BY NAME itbi ATTRIBUTE (BOLD)
|
|
END IF
|
|
|
|
# Calculo total de la factura
|
|
|
|
IF fact_gral.ventas = "1" THEN
|
|
LET fact_gral.total_fact = fact_gral.sub_total - fact_gral.desc_valor +
|
|
fact_gral.itbi
|
|
END IF
|
|
|
|
# Cargos varios por conceptos varios en factura de exportacion
|
|
|
|
IF fact_gral.ventas = "2" THEN
|
|
LET fact_gral.total_fact = fact_gral.sub_total + fact_gral.desc_valor
|
|
|
|
LET desc_valor = fact_gral.desc_valor using "###,###.##"
|
|
DISPLAY BY NAME desc_valor ATTRIBUTE (BOLD)
|
|
END IF
|
|
|
|
LET sub_total = fact_gral.sub_total using "###,###,###.##"
|
|
LET total_fact = fact_gral.total_fact using "###,###,###.##"
|
|
DISPLAY BY NAME total_fact ATTRIBUTE (BOLD)
|
|
DISPLAY BY NAME sub_total ATTRIBUTE (BOLD)
|
|
|
|
IF fact_gral.cond_pago > 1 THEN
|
|
|
|
IF balance > credito THEN
|
|
LET numero_msg = 80
|
|
CALL msg(numero_msg)
|
|
GO TO vuelve
|
|
END IF
|
|
END IF
|
|
|
|
# Si el usuario no introdujo ningun item en el arreglo
|
|
|
|
IF fact_gral.sub_total = 0 or fact_gral.sub_total IS NULL THEN
|
|
LET numero_msg = 84
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
RETURN
|
|
END IF
|
|
|
|
LABEL anterior:
|
|
PROMPT "Las Informaciones Estan Correctas (S/N)" FOR CHAR opt
|
|
LET opt = UPSHIFT(opt)
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
|
|
IF opt IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
GOTO anterior
|
|
END IF
|
|
|
|
IF (opt != "S" AND opt != "N") THEN
|
|
LET numero_msg = -1301
|
|
CALL msg(numero_msg)
|
|
GOTO anterior
|
|
END IF
|
|
|
|
IF fact_gral.cond_pago = 1 THEN
|
|
PROMPT
|
|
"Presione Cualquier Tecla Para Imprimir Volante de Pago" FOR CHAR opt3
|
|
CALL veprfu001()
|
|
END IF
|
|
|
|
IF opt = "S" THEN
|
|
LABEL aqui:
|
|
LET verdad = "S"
|
|
|
|
# Este LET verdad = "N" viene del comentario anterior si usted quita el
|
|
# comentario anterior debe de borrar este verdad = "N"
|
|
LET verdad = "N"
|
|
|
|
IF (opt4 != "S" AND opt4 != "s") THEN
|
|
IF (opt4 != "n" AND opt4 != "N") THEN
|
|
LET numero_msg = -1301
|
|
CALL msg(numero_msg)
|
|
GOTO aqui
|
|
END IF
|
|
END IF
|
|
|
|
# Pregunta sobre si la factura va ser impresa ahora o luego
|
|
|
|
LABEL anterior2:
|
|
PROMPT "Desea Imprimir Esta Factura Ahora (S/N)" FOR CHAR opt1
|
|
LET opt1 = upshift(opt1)
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
|
|
IF opt1 IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
GOTO anterior2
|
|
END IF
|
|
|
|
IF (opt1 != "S" AND opt1 != "s") THEN
|
|
IF opt1 != "N" AND opt1 != "n" THEN
|
|
LET numero_msg = -1301
|
|
CALL msg(numero_msg)
|
|
GOTO anterior2
|
|
END IF
|
|
END IF
|
|
|
|
LET impresion = opt1
|
|
|
|
IF fact_gral.ventas = "1" THEN
|
|
LET fact_gral.prima_us = 1
|
|
END IF
|
|
|
|
# Actualiza la tabla de datos generales de la factura
|
|
|
|
INSERT INTO vetb00002 (cod_cia,factura,fecha_factura,ventas,zona,orden,
|
|
fecha_orden,conduce,fecha_conduce,tipo_cliente,
|
|
sec_cliente,cod_vend,sec_vend,cond_pago,porc_itbi,
|
|
porc_desc,prima_us,sub_total,monto_desc,monto_itbi,
|
|
neto,fecha_embarque,status_impresion,status_t,us_crea,
|
|
fech_crea, us_mod, fech_mod)
|
|
VALUES (fact_gral.cod_cia, fact_gral.factura, fact_gral.fecha_factura,
|
|
fact_gral.ventas,fact_gral.zona,fact_gral.orden,
|
|
fact_gral.fecha_orden,fact_gral.conduce,fact_gral.fecha_conduce,
|
|
fact_gral.tipo_cliente,fact_gral.sec_cliente,NULL,fact_gral.sec_vend,
|
|
fact_gral.cond_pago,fact_gral.porc_itbi,fact_gral.porc_desc,
|
|
fact_gral.prima_us,fact_gral.sub_total,fact_gral.desc_valor,
|
|
fact_gral.itbi,fact_gral.total_fact,fact_gral.fecha_embarque,
|
|
impresion,NULL,USER,CURRENT,NULL,NULL)
|
|
|
|
# Actualiza la tabla control de la numeracion de la factura
|
|
|
|
UPDATE vetb00001 SET ult_factura = fact_gral.factura,
|
|
us_crea = USER,
|
|
fech_crea = CURRENT
|
|
|
|
# Actualizacion de la tabla de cuentas por cobrar
|
|
|
|
IF fact_gral.cond_pago > 1 THEN
|
|
|
|
LET p_fecha_ven = fact_gral.fecha_factura + condicion.dias
|
|
|
|
INSERT INTO cctb00001 VALUES
|
|
(NULL,fact_gral.cod_cia,tipo_f,fact_gral.factura,fact_gral.tipo_cliente,
|
|
fact_gral.sec_cliente,NULL,fact_gral.sec_vend,
|
|
fact_gral.fecha_factura,p_fecha_ven,fact_gral.factura, NULL,NULL,
|
|
fact_gral.total_fact,NULL,NULL,t_costos,0, NULL, USER,CURRENT, NULL, NULL)
|
|
|
|
END IF
|
|
|
|
FOR idx = 1 TO arr_count()
|
|
|
|
IF fact_det[idx].cod_n > 0 AND
|
|
fact_det[idx].cod_grupo > 0 AND
|
|
fact_det[idx].cod_tipo > 0 AND
|
|
fact_det[idx].cod_sec > 0 THEN
|
|
|
|
IF fact_det[idx].cantidad IS NOT NULL THEN
|
|
# Actualiza la tabla de datos detallados de la factura
|
|
|
|
INSERT INTO vetb00003
|
|
VALUES (fact_gral.cod_cia,fact_gral.factura,fact_det[idx].cod_n,
|
|
fact_det[idx].cod_grupo,fact_det[idx].cod_tipo,fact_det[idx].cod_sec,
|
|
fact_det[idx].unidades,0,p_bonifica[idx],fact_det[idx].precio,NULL,
|
|
USER,CURRENT,NULL,NULL)
|
|
|
|
# Actualizando la tabla de movimientos de inventario cuando la factura es
|
|
# normal o Tiene Cantidad a despachar
|
|
|
|
LET fact_det[idx].unidades = fact_det[idx].unidades * -1
|
|
LET tipo_fact1 = 33
|
|
SELECT UNIQUE sec_cliente INTO vend_cte FROM vetb00033
|
|
WHERE num_emp = fact_gral.sec_vend
|
|
INSERT INTO iptb00017 (cod_cia,num_doc,fact_no,fecha,cod_transp,sec_transp,
|
|
cod_sp,cod_sp_sec,placa,cod_tarifa,cod_mov,cod_n,
|
|
cod_grupo,cod_tipo,cod_sec,cantidad_2,bodega,
|
|
us_crea,fech_crea)
|
|
VALUES (fact_gral.cod_cia,fact_gral.factura,fact_gral.factura,
|
|
fact_gral.fecha_factura,fact_gral.cod_transp,fact_gral.sec_transp,
|
|
fact_gral.tipo_cliente,vend_cte,fact_gral.placa_transp,
|
|
fact_gral.cod_tarifa,tipo_fact1,fact_det[idx].cod_n,
|
|
fact_det[idx].cod_grupo,fact_det[idx].cod_tipo,
|
|
fact_det[idx].cod_sec,fact_det[idx].unidades,1,USER,CURRENT)
|
|
|
|
LET fact_unidades = fact_det[idx].unidades * -1
|
|
|
|
INSERT INTO iptb00006 (cod_cia,num_doc,fact_no,fecha,cod_transp,sec_transp,
|
|
cod_sp,cod_sp_sec,placa,cod_tarifa,cod_mov,cod_n,
|
|
cod_grupo,cod_tipo,cod_sec,cantidad_2,bodega,
|
|
us_crea,fech_crea)
|
|
VALUES (fact_gral.cod_cia,fact_gral.factura,fact_gral.factura,
|
|
fact_gral.fecha_factura,fact_gral.cod_transp,fact_gral.sec_transp,
|
|
fact_gral.tipo_cliente,vend_cte,fact_gral.placa_transp,
|
|
fact_gral.cod_tarifa,tipo_fact1,fact_det[idx].cod_n,
|
|
fact_det[idx].cod_grupo,fact_det[idx].cod_tipo,
|
|
fact_det[idx].cod_sec,fact_unidades,1,USER,CURRENT)
|
|
|
|
LET fact_det[idx].unidades = fact_unidades * -1
|
|
|
|
INSERT INTO iptb00006 (cod_cia,num_doc,fact_no,fecha,cod_transp,sec_transp,
|
|
cod_sp,cod_sp_sec,placa,cod_tarifa,cod_mov,cod_n,
|
|
cod_grupo,cod_tipo,cod_sec,cantidad_2,bodega,
|
|
us_crea,fech_crea)
|
|
VALUES (fact_gral.cod_cia,fact_gral.factura,fact_gral.factura,
|
|
fact_gral.fecha_factura,fact_gral.cod_transp,fact_gral.sec_transp,
|
|
fact_gral.tipo_cliente,fact_gral.sec_cliente,fact_gral.placa_transp,
|
|
fact_gral.cod_tarifa,tipo_fact,fact_det[idx].cod_n,
|
|
fact_det[idx].cod_grupo,fact_det[idx].cod_tipo,
|
|
fact_det[idx].cod_sec,fact_det[idx].unidades,1,USER,CURRENT)
|
|
|
|
LET fact_det[idx].unidades = fact_det[idx].unidades * -1
|
|
|
|
LET cant_pend[idx] = cant_pend[idx] * -1
|
|
|
|
# Actualiza la tabla maestra de producto terminados en la existencia
|
|
|
|
IF p_bonifica[idx] IS NULL THEN
|
|
LET p_bonifica[idx] = 0
|
|
END IF
|
|
|
|
IF opt4 = "N" or opt4 = "n" THEN
|
|
LET p_bonifica[idx] = 0
|
|
END IF
|
|
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
# Impresion de la factura
|
|
|
|
IF opt1 = "S" or opt1 = "s" THEN
|
|
|
|
START REPORT imp_fact TO "%USHOME%\\archivo"
|
|
|
|
FOR idx = 1 TO arr_count()
|
|
IF fact_det[idx].cod_n IS NOT NULL AND
|
|
fact_det[idx].cod_grupo IS NOT NULL AND
|
|
fact_det[idx].cod_tipo IS NOT NULL AND
|
|
fact_det[idx].cod_sec IS NOT NULL THEN
|
|
IF fact_det[idx].cod_n != 0 THEN
|
|
IF fact_det[idx].cantidad IS NOT NULL THEN
|
|
LET cod_fact = 2
|
|
OUTPUT TO REPORT
|
|
imp_fact(fact_gral.*,fact_det[idx].*,tot_porc,
|
|
p_bonifica[idx],cod_fact)
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
FINISH REPORT imp_fact
|
|
LET impresion = "S"
|
|
END IF
|
|
|
|
LET numero_msg = 1
|
|
CALL msg(numero_msg)
|
|
FOR idx = 1 to arr_count()
|
|
LET fact_det[idx].cod_n = NULL
|
|
LET fact_det[idx].cod_grupo = NULL
|
|
LET fact_det[idx].cod_tipo = NULL
|
|
LET fact_det[idx].cod_sec = NULL
|
|
LET fact_det[idx].cantidad = NULL
|
|
LET fact_det[idx].despacho = NULL
|
|
LET fact_det[idx].existencia = NULL
|
|
LET fact_det[idx].unidades = NULL
|
|
LET fact_det[idx].precio = NULL
|
|
LET fact_det[idx].monto_fact = NULL
|
|
END FOR
|
|
GOTO exito
|
|
ELSE
|
|
|
|
# Borra la factura de la tabla de descuentos para cuando el usuario
|
|
# haga alguna modificacion se le actualice en el proceso destinado para los
|
|
# descuentos
|
|
LET primera = NULL
|
|
DELETE FROM vetb00026 WHERE factura = fact_gral.factura
|
|
GOTO vuelve
|
|
END IF
|
|
|
|
FOR idx = 1 to arr_count()
|
|
LET fact_det[idx].cod_n = NULL
|
|
LET fact_det[idx].cod_grupo = NULL
|
|
LET fact_det[idx].cod_tipo = NULL
|
|
LET fact_det[idx].cod_sec = NULL
|
|
LET fact_det[idx].cantidad = NULL
|
|
LET fact_det[idx].despacho = NULL
|
|
LET fact_det[idx].existencia = NULL
|
|
LET fact_det[idx].unidades = NULL
|
|
LET fact_det[idx].precio = NULL
|
|
LET fact_det[idx].monto_fact = NULL
|
|
END FOR
|
|
LET fact_gral.itbi = 0
|
|
LET fact_gral.sub_total = 0
|
|
LET fact_gral.total_fact = 0
|
|
LET fact_gral.desc_valor = 0
|
|
END FUNCTION
|
|
|
|
FUNCTION anula()
|
|
OPEN WINDOW anula AT 7,5 WITH FORM "vefmwd006" ATTRIBUTE (BORDER,
|
|
COMMENT LINE LAST - 1,PROMPT LINE LAST - 2,FORM LINE FIRST + 1)
|
|
|
|
LABEL vuelve:
|
|
INPUT BY NAME p_fact_no
|
|
|
|
AFTER FIELD p_fact_no
|
|
SELECT UNIQUE fecha_factura INTO fact_gral.fecha_factura FROM vetb00002
|
|
WHERE factura = p_fact_no AND status_t IS NULL AND
|
|
fech_crea > datetime (1994-03-31 08:00) year to minute
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 102
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD p_fact_no
|
|
END IF
|
|
IF fact_gral.fecha_factura < "310394" THEN
|
|
LET numero_msg = 58
|
|
CALL msg(numero_msg)
|
|
GOTO salir
|
|
END IF
|
|
LET p_fechas = fact_gral.fecha_factura
|
|
CALL prd()
|
|
IF bandera =1 THEN
|
|
SLEEP 2
|
|
EXIT INPUT
|
|
END IF
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
EXIT INPUT
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
GOTO salir
|
|
END IF
|
|
|
|
# Este Int_flag es porque tuve que salir del input con el int_flag verdadero
|
|
# y asi poder salir del window sin problemas
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
GOTO salir
|
|
END IF
|
|
|
|
LABEL atras:
|
|
PROMPT "Esta seguro de Anular Esta Factura? (S/N)" FOR CHAR opt3
|
|
LET opt3 = UPSHIFT(opt3)
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
GOTO salir
|
|
END IF
|
|
|
|
IF opt3 != "S" AND opt3 != "N" THEN
|
|
LET numero_msg = -1301
|
|
CALL msg(numero_msg)
|
|
GOTO atras
|
|
END IF
|
|
|
|
IF opt3 = "N" THEN
|
|
GOTO salir
|
|
END IF
|
|
|
|
IF opt3 = "S" THEN
|
|
UPDATE vetb00002 SET status_t = "E",
|
|
us_mod = USER,
|
|
fech_mod = CURRENT
|
|
WHERE factura = p_fact_no AND fech_crea > datetime (1994-03-31 08:00)
|
|
year to minute
|
|
|
|
UPDATE iptb00006 SET status_t = "E",
|
|
us_mod = USER,
|
|
fech_mod = CURRENT
|
|
WHERE num_doc = p_fact_no AND cod_mov IN (30,33) AND
|
|
fech_crea > datetime (1994-03-31 08:00) year to minute
|
|
|
|
UPDATE iptb00017 SET status_t = "E",
|
|
us_mod = USER,
|
|
fech_mod = CURRENT
|
|
WHERE num_doc = p_fact_no AND cod_mov =33 AND
|
|
fech_crea > datetime (1994-03-31 08:00) year to minute
|
|
UPDATE vetb00003 SET status_t = "E",
|
|
us_mod = USER,
|
|
fech_mod = CURRENT
|
|
WHERE factura = p_fact_no AND fech_crea > datetime (1994-03-31 08:00)
|
|
year to minute
|
|
|
|
UPDATE cctb00001 SET status_t = "E",
|
|
us_mod = USER,
|
|
fech_mod = CURRENT
|
|
WHERE num_doc = p_fact_no AND (tipo_doc = "FT" or tipo_doc = "FE") AND
|
|
fech_crea > datetime (1994-03-31 08:00) year to minute
|
|
|
|
LET numero_msg = 82
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
LABEL salir:
|
|
LET fact_gral.fecha_factura = TODAY
|
|
#CLOSE FORM vefmwd006
|
|
CLOSE WINDOW anula
|
|
END FUNCTION
|