Files
MBS/PROYECTO/vedir/veprmt036.4gl
T

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