Files
MBS/PROYECTO/veprmt001.4gl
T

3217 lines
109 KiB
Plaintext

{
--------------------------------------------------------------------------
PROGRAMA : VEPRMT001
OBJETIVO : Este programa captura la factura comercial
REALIZADO POR : Ing. Juan Fco. Soto.
FECHA : Enero 12,1993.
MODIFICADO POR: Victor Gomez C.
FECHA : Saturday, July 07, 2001
OBJETIVO : Registrar el descuento aplicado a cada producto por separado,
se utilizaran los campos cantidad_2 y bonificacion de la tabla
vetb00003.
--------------------------------------------------------------------------
}
GLOBALS
"veprgb000.4gl"
DEFINE p_codigo,mes_chequeo SMALLINT
DEFINE porce,valor_desc,cant_prod,cant_vend,sub_total,porcentaje_n DECIMAL (8,2)
DEFINE codigo_provincia,t_arr,kncf INTEGER,
p_usuario CHAR(9),
pubicacion LIKE prtb00012.ubicacion,
codigodgii LIKE vetb00071.codigo_dgii,
descripcion CHAR(80),
simbolo CHAR(6),
pconduce int
DEFINE fecha_final DATE,
cod_b1 CHAR(13),
lleva_parcial,ch_itbi,cod_b2 CHAR(1),
cod_b4 CHAR(15),
cuenta_arr INTEGER,
observacion CHAR(180) ,
obs1,obs2,obs3 CHAR(50),obs4 CHAR(30)
DEFINE prtb09 RECORD LIKE prtb00009.* #-> Monitoreo de la orden de produccion
DEFINE f_cctb01 RECORD LIKE cctb00001.*,
f_avance,f_total_avance,f_valor_av DEC(10,2),
f_num_avance INTEGER,cant_devol DEC(8,3)
FUNCTION veprmt001()
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,
cod_fact SMALLINT,
ch_balance CHAR(14)
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 vefmmt001 FROM "vefmmt001"
DISPLAY FORM vefmmt001
DISPLAY "veprmt001" AT 1,1 ATTRIBUTE (blue)
LET hoy = today
DISPLAY hoy using "dd/mm/yyyy" AT 1,68 ATTRIBUTE (blue)
# DISPLAY "Factura de Ventas" AT 3,30 ATTRIBUTE (blue)
# 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
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].descrip_esp = NULL
LET fact_det[idx].unidad_med = NULL
LET fact_det[idx].cantidad = NULL
LET fact_det[idx].precio = NULL
LET fact_det[idx].precio = NULL
LET fact_det[idx].cantidad_2 = 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].descrip_esp to s_fact[idx].descrip_esp
DISPLAY fact_det[idx].unidad_med to s_fact[idx].unidad_med
DISPLAY fact_det[idx].cantidad to s_fact[idx].cantidad
DISPLAY fact_det[idx].precio to s_fact[idx].precio
DISPLAY fact_det[idx].cantidad_2 to s_fact[idx].cantidad_2
DISPLAY fact_det[idx].monto_fact to s_fact[idx].monto_fact
END FOR
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 = 1
DISPLAY BY NAME fact_gral.porc_itbi,fact_gral.prima_us,descrip1
LET hice = "S"
LET h = 1
LABEL otravez:
INITIALIZE detalle TO NULL
LET ch_itbi = "S"
LABEL regresa:
LET fact_gral.itbi = 0
LET fact_gral.sub_total = 0
LET fact_gral.total_fact = 0
LET fact_gral.desc_valor = 0
INPUT BY NAME pconduce,codigodgii,fact_gral.* WITHOUT DEFAULTS ATTRIBUTE (blue)
ON KEY (F2)
RUN "TYPE C:\\FACTURA > %USPRINT1%"
ON KEY (CONTROL-B)
LET mes_chequeo = MONTH(TODAY)
CALL anular()
NEXT FIELD cod_cia
ON KEY (CONTROL-E)
CASE
WHEN INFIELD(tipo_cliente)
CALL veprmt101()
LET fact_gral.tipo_cliente = cliente_bas.tipo_cliente
LET fact_gral.sec_cliente = cliente_bas.sec_cliente
LET fact_gral.nombre = cliente_bas.nombre CLIPPED
LET credito = cliente_bas.limite_credito
LET codigo_provincia = cliente_bas.cod_provincia
DISPLAY BY NAME fact_gral.tipo_cliente,fact_gral.sec_cliente,
fact_gral.nombre
WHEN INFIELD(sec_cliente)
CALL veprmt101()
LET fact_gral.tipo_cliente = cliente_bas.tipo_cliente
LET fact_gral.sec_cliente = cliente_bas.sec_cliente
LET fact_gral.nombre = cliente_bas.nombre CLIPPED
LET credito = cliente_bas.limite_credito
LET codigo_provincia = cliente_bas.cod_provincia
DISPLAY BY NAME fact_gral.tipo_cliente,fact_gral.sec_cliente,
fact_gral.nombre
END CASE
ON KEY (CONTROL-W)
CASE
WHEN INFIELD (codigodgii)
LET codigodgii = NULL
LET descripcion = NULL
CALL btipo_fact()
LET int_flag = FALSE
DISPLAY BY NAME codigodgii,descripcion
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 fact_gral.cod_tarifa,descrip6 ATTRIBUTE (BOLD)
NEXT FIELD cod_tarifa
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(blue)
DISPLAY BY NAME fact_gral.descrip ATTRIBUTE(blue)
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 (blue)
DISPLAY BY NAME fact_gral.nombre_vend ATTRIBUTE (blue)
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 (blue)
DISPLAY BY NAME fact_gral.sec_transp ATTRIBUTE (blue)
DISPLAY BY NAME fact_gral.nombre_tran ATTRIBUTE (blue)
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 (blue)
DISPLAY BY NAME fact_gral.sec_transp ATTRIBUTE (blue)
DISPLAY BY NAME fact_gral.nombre_tran ATTRIBUTE (blue)
END CASE
AFTER FIELD pconduce
IF pconduce IS NULL THEN
CALL msg(16)
NEXT FIELD pconduce
END IF
AFTER FIELD conduce
IF fact_gral.conduce IS not NULL THEN
# informacion de la cotizacion
select a.ventas,a.cod_provincia,c.descripcion,a.tipo_cliente,a.sec_cliente,
a.cond_pago,
f.descrip,a.fecha,a.porc_itbi,a.sec_vend
into fact_gral.ventas,fact_gral.zona,fact_gral.nombre_tipo,
fact_gral.tipo_cliente,fact_gral.sec_cliente,
fact_gral.cond_pago,fact_gral.descrip,
fact_gral.fecha_conduce,fact_gral.porc_itbi,
fact_gral.sec_vend
from vetb00060 c,vetb00012 f,vetb00050 a,
adtb00003 i
where a.cotizacion_no = fact_gral.conduce and
a.ventas = c.ventas and
a.cond_pago = f.cond_pago and
a.sec_vend = i.num_emp
if status = notfound then
call msg(3)
end if
LET tipo1 = fact_gral.zona
SELECT unique descrip INTO descrip1 FROM vetb00008
WHERE cod_zona = tipo1
let fact_gral.zona = tipo1 using "&&&"
SELECT a.nombre,a.limite_credito,a.cod_provincia,a.telefono
INTO fact_gral.nombre,credito,codigo_provincia,
cliente_bas.telefono
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
LET nombre_ad = nULL
SELECT a.solicitante_s INTO nombre_ad FROM vetb00006 a
WHERE a.tipo_cliente_s = fact_gral.tipo_cliente AND
a.sec_cliente_s = fact_gral.sec_cliente
LET fact_gral.nombre = fact_gral.nombre CLIPPED," ",nombre_ad
DISPLAY BY NAME fact_gral.nombre ATTRIBUTE (blue)
LET descrip1 = NULL
LET descrip3 = NULL
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
IF fact_gral.tipo_cliente = 12 THEN
SELECT d.nombre_provincia INTO fact_gral.ciudad
FROM vetb00020 d
WHERE d.cod_provincia = codigo_provincia
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 (blue)
DISPLAY BY NAME fact_gral.ciudad ATTRIBUTE (blue)
LET porcentaje_n = 0
SELECT a.porc_negocio INTO porcentaje_n
FROM vetb00086 a
WHERE a.cotizacion_no = fact_gral.conduce_no
IF STATUS = NOTFOUND THEN
LET porcentaje_n = 0
END IF
display by name fact_gral.*,porcentaje_n
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 = p_companias.nombre CLIPPED
END IF
DISPLAY BY NAME compania ATTRIBUTE (blue)
# NCF
IF fact_gral.fecha_factura > "12312006" THEN
SELECT MAX(a.ncf) INTO kncf FROM vetb00072 a
WHERE a.tipo_doc = "FT" and
a.codigo_dgii = codigodgii
IF kncf IS NULL THEN
LET kncf = 0
END IF
LET kncf = kncf + 1
DISPLAY BY NAME kncf
SELECT UNIQUE a.itbis INTO ch_itbi FROM vetb00071 a
WHERE kncf BETWEEN a.ncf_inicial AND a.ncf_final and
a.tipo_doc = "FT" and a.codigo_dgii = codigodgii
IF STATUS = NOTFOUND THEN
LET numero_msg =391
CALL msg(numero_msg)
NEXT FIELD cod_cia
END IF
END IF
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
INTO fact_gral.prima_us
FROM vetb00019 WHERE disponible = "S"
IF fact_gral.ventas = "1" THEN
LET p_codigo = 30
LET tipo_f = "FT"
LET tipo_fact = 30
LET fact_gral.prima_us = 1
ELSE
IF fact_gral.ventas = "2" THEN
LET tipo_fact = 31
LET p_codigo = 31
LET tipo_f = "FE"
LET fact_gral.nombre_tipo = "EXPORTACION"
END IF
IF fact_gral.ventas = "3" THEN
LET tipo_fact = 55
LET p_codigo = 55
LET tipo_f = "FE"
END IF
IF fact_gral.ventas = "4" THEN
SELECT porciento
INTO fact_gral.prima_us
FROM vetb00019 WHERE disponible = "S"
LET fact_gral.nombre_tipo = "VENTAS EURO"
LET tipo_fact = 56
LET p_codigo = 56
LET tipo_f = "FE"
END IF
END IF
IF ch_itbi = "S" THEN
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 fact_gral.porc_itbi = 0
END IF
LET fact_gral.nombre_tipo = "LOCAL"
LET fact_gral.prima_us = 1
ELSE
IF fact_gral.ventas = "2" THEN
LET fact_gral.porc_itbi = NULL
IF fact_gral.prima_us IS NULL THEN
SELECT prima
INTO fact_gral.prima_us
FROM vetb00019 WHERE disponible = "S"
END IF
LET fact_gral.nombre_tipo = "EXPORTACION"
END IF
IF fact_gral.ventas = "3" THEN
LET fact_gral.nombre_tipo = "US$ LOCAL"
END IF
IF fact_gral.ventas = "4" THEN
LET fact_gral.porc_itbi = NULL
IF fact_gral.prima_us IS NULL THEN
SELECT porciento
INTO fact_gral.prima_us
FROM vetb00019 WHERE disponible = "S"
END IF
LET simbolo = "EURO$"
LET fact_gral.nombre_tipo = "VENTAS EURO"
END IF
END IF
END IF
if ch_itbi = 'N' then
let fact_gral.porc_itbi=0
end if
DISPLAY BY NAME fact_gral.porc_desc,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 porc_desc
IF fact_gral.porc_desc < 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD zona
END IF
AFTER FIELD zona
IF fact_gral.zona IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD zona
END IF
LET longitud = LENGTH(fact_gral.zona CLIPPED)
IF longitud < 3 THEN
LET numero_msg = 77
CALL msg(numero_msg)
NEXT FIELD zona
END IF
LET tipo1 = fact_gral.zona
IF fact_gral.ventas = "1" THEN
SELECT unique descrip INTO descrip1 FROM vetb00008
WHERE cod_zona = tipo1
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD zona
END IF
END IF
IF fact_gral.ventas = "2" THEN
LET tipo2 = NULL
LET tipo2 = fact_gral.zona
SELECT unique nom_pais INTO descrip1 FROM cotb00018
WHERE cod_pais = tipo1
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD zona
END IF
END IF
# SELECT UNIQUE a.factura FROM vetb00002 a
# WHERE a.factura = fact_gral.factura AND
# a.fech_Crea > DATETIME(2007-01-01 08:00) YEAR TO MINUTE
# IF STATUS != NOTFOUND THEN
# LET numero_msg = 382
# CALL msg(numero_msg)
# NEXT FIELD cod_cia
# END IF
# DISPLAY BY NAME fact_gral.factura ATTRIBUTE (blue)
# DISPLAY BY NAME descrip1 ATTRIBUTE(blue)
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
IF fact_gral.fecha_factura IS NULL THEN
LET fact_gral.fecha_factura = TODAY
DISPLAY BY NAME fact_gral.fecha_factura
END IF
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
SELECT a.nombre,a.limite_credito,a.cod_provincia,a.telefono
INTO fact_gral.nombre,credito,codigo_provincia,
cliente_bas.telefono
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 = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
LET nombre_ad = nULL
SELECT a.solicitante_s INTO nombre_ad FROM vetb00006 a
WHERE a.tipo_cliente_s = fact_gral.tipo_cliente AND
a.sec_cliente_s = fact_gral.sec_cliente
LET fact_gral.nombre = fact_gral.nombre CLIPPED," ",nombre_ad
DISPLAY BY NAME fact_gral.nombre ATTRIBUTE (blue)
LET descrip1 = NULL
LET descrip3 = NULL
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
IF fact_gral.tipo_cliente = 12 THEN
SELECT d.nombre_provincia INTO fact_gral.ciudad
FROM vetb00020 d
WHERE d.cod_provincia = codigo_provincia
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 (blue)
DISPLAY BY NAME fact_gral.ciudad ATTRIBUTE (blue)
{ ASI ERA QUE ESTABA ANTES DE CAMBIAR LA NCF FECHA 5/1/2007
# Verifica fuente de factura
IF fact_gral.ventas = 1 THEN
IF fact_gral.tipo_cliente != 12 THEN
LET numero_msg =386
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
END IF
IF fact_gral.ventas = 3 THEN
IF fact_gral.tipo_cliente != 14 THEN
LET numero_msg =387
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
END IF
IF fact_gral.ventas = 2 THEN
IF fact_gral.tipo_cliente != 13 THEN
LET numero_msg =387
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
END IF
}
# Verifica fuente de factura
SELECT a.tipo_cliente FROM vetb00061 a
WHERE a.tipo_cliente = fact_gral.tipo_cliente and
a.ventas = fact_gral.ventas
IF STATUS = NOTFOUND THEN
LET numero_msg =386
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
# BUSCA EL VENDEDOR
SELECT a.sec_vend INTO fact_gral.sec_vend
FROM vetb00028 a
WHERE a.tipo_cliente = fact_gral.tipo_cliente AND
a.sec_cliente = fact_gral.sec_cliente
DISPLAY BY NAME fact_gral.sec_vend
# BUSCA LA ULTIMA ORDEN DE ESTE CLIENTE
LET fact_gral.orden = NULL
SELECT MAX(a.num_oc) INTO fact_gral.orden
FROM prtb00012 a
WHERE a.tipo_cliente = fact_gral.tipo_cliente AND
a.sec_cliente = fact_Gral.sec_cliente
DISPLAY BY NAME fact_gral.orden
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
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 (blue)
BEFORE FIELD porc_itbi
IF fact_gral.ventas = "2" THEN
NEXT FIELD sec_vend
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
IF fact_gral.cond_pago != 1 OR fact_gral.sec_vend !=8888 THEN
SELECT nom1_emp, apell1_emp INTO descrip5,descrip6
FROM adtb00003 WHERE num_emp = fact_gral.sec_vend
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD sec_vend
END IF
LET fact_gral.nombre_vend = descrip5 clipped," ",descrip6 clipped
DISPLAY BY NAME fact_gral.nombre_vend ATTRIBUTE (blue)
# 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
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
ELSE
LET fact_gral.nombre_tran = NULL
LET p_cedula = NULL
LET p_serie = NULL
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 (blue)
END IF
AFTER FIELD cod_tarifa
IF fact_gral.cod_tarifa IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
#NEXT FIELD cod_tarifa
ELSE
LET descrip6 = NULL
SELECT descrip INTO descrip6 FROM vetb00023
WHERE cod_tarifa = fact_gral.cod_tarifa AND status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
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)
END IF
BEFORE FIELD fecha_factura
LET fact_gral.fecha_factura = hoy
DISPLAY BY NAME fact_gral.fecha_factura
BEFORE FIELD fecha_embarque
IF fact_gral.ventas = "1" or fact_gral.ventas = "3" 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 orden
IF fact_gral.orden IS NOT NULL THEN
LET pubicacion = NULL
SELECT UNIQUE a.fecha_oc,a.ubicacion INTO
fact_gral.fecha_orden,pubicacion FROM prtb00012 a
WHERE a.num_oc = fact_gral.orden AND
a.tipo_cliente = fact_gral.tipo_cliente AND
a.sec_cliente = fact_gral.sec_cliente AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD orden
END IF
ELSE
NEXT FIELD orden
END IF
DISPLAY BY NAME fact_gral.fecha_orden
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
DELETE FROM vetb00042 WHERE factura = fact_gral.factura AND
cod_mov = p_codigo
RETURN
END IF
IF fact_gral.fecha_factura IS NULL THEN
LET fact_gral.fecha_factura = TODAY
DISPLAY BY NAME fact_gral.fecha_factura
END IF
LET p_fechas = fact_gral.fecha_factura
LET hoy = fact_gral.fecha_factura
IF kncf = 0 or kncf IS NULL THEN
CALL msg(16)
NEXT FIELD codigodgii
END IF
CALL prd()
IF bandera = 1 THEN
LET bandera = 0
#NEXT FIELD fecha_factura
END IF
IF fact_gral.ventas IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
IF ch_itbi = "S" THEN
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 fact_gral.porc_itbi = 0
END IF
LET tipo_fact = 30
LET tipo_f = "FT"
LET fact_gral.nombre_tipo = "LOCAL"
LET fact_gral.prima_us = 1
ELSE
IF fact_gral.ventas = "3" THEN
LET fact_gral.nombre_tipo = "US$ LOCAL"
ELSE
LET fact_gral.porc_itbi = NULL
IF fact_gral.prima_us IS NULL THEN
LET fact_gral.prima_us = 1
END IF
LET fact_gral.nombre_tipo = "EXPORTACION"
LET tipo_fact = 31
LET tipo_f = "FE"
END IF
END IF
END IF
IF fact_gral.prima_us IS NULL THEN
LET numero_msg = 87
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
LET fact_gral.factura = 0
SELECT ult_factura INTO fact_gral.factura FROM vetb00001
IF fact_gral.factura IS NULL THEN
LET fact_gral.factura = 0
END IF
LET fact_gral.factura = fact_gral.factura + 1
SELECT UNIQUE a.factura FROM vetb00002 a
WHERE a.factura = fact_gral.factura AND
a.fech_Crea > DATETIME(2007-01-01 08:00) YEAR TO MINUTE
IF STATUS != NOTFOUND THEN
LET numero_msg = 382
CALL msg(numero_msg)
NEXT FIELD cod_cia
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.sec_cliente IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
IF pconduce IS NULL THEN
CALL msg(16)
NEXT FIELD pconduce
END IF
EXIT INPUT
END INPUT
CALL detalles()
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:
DECLARE buscame CURSOR FOR
SELECT unique a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,
a.cantidad,a.precio,a.porc_desc
FROM vetb00051 a,iptb00002 b
WHERE a.cotizacion_no = fact_gral.conduce and
a.cod_n = b.cod_n and
a.cod_grupo = b.cod_grupo and
a.cod_tipo = b.cod_tipo and
a.cod_Sec = b.cod_sec
LET idx = 1
FOREACH buscame INTO fact_det[idx].cod_n,
fact_det[idx].cod_grupo,
fact_det[idx].cod_tipo,
fact_det[idx].cod_sec,
fact_det[idx].descrip_esp,
fact_det[idx].unidad_med,
fact_det[idx].cantidad,
fact_det[idx].precio,
fact_det[idx].cantidad_2
IF porcentaje_n > 0 THEN
LET fact_det[idx].precio = fact_det[idx].precio *(porcentaje_n /100)
END IF
LET idx = idx + 1
IF idx = 10 THEN
EXIT FOREACH
END IF
END FOREACH
CALL set_count(idx-1)
INPUT ARRAY fact_det WITHOUT DEFAULTS FROM s_fact.*
ON KEY (F2)
RUN "TYPE C:\\FACTURA > %USPRINT1%"
BEFORE ROW
LET curr = arr_curr()
LET scr_l = scr_line()
AFTER ROW
LET t_arr = arr_count()
CALL after_all()
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,a.unidad_med,SUM(b.cantidad_2)
INTO fact_det[curr].descrip_esp,fact_det[curr].unidad_med,
p_existencia
FROM iptb00002 a,OUTER 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 GROUP BY 1,2
IF p_existencia IS NULL THEN
LET p_existencia = 0
END IF
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].descrip_esp TO s_fact[scr_l].descrip_esp
DISPLAY fact_det[curr].unidad_med TO s_fact[scr_l].unidad_med
DISPLAY fact_det[curr].precio TO s_fact[scr_l].precio
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
LET verdad = NULL
CALL precios()
IF verdad = "S" THEN
NEXT FIELD cod_n
END IF
SELECT a.descrip_esp,a.unidad_med,SUM(b.cantidad_2)
INTO fact_det[curr].descrip_esp,fact_det[curr].unidad_med,
p_existencia
FROM iptb00002 a, OUTER 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 GROUP BY 1,2
IF p_existencia IS NULL THEN
LET p_existencia = 0
END IF
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].descrip_esp TO s_fact[scr_l].descrip_esp
DISPLAY fact_det[curr].unidad_med TO s_fact[scr_l].unidad_med
DISPLAY fact_det[curr].precio TO s_fact[scr_l].precio
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
LET verdad = NULL
CALL precios()
IF verdad = "S" THEN
NEXT FIELD cod_n
END IF
SELECT a.descrip_esp,a.unidad_med,SUM(b.cantidad_2)
INTO fact_det[curr].descrip_esp,fact_det[curr].unidad_med,
p_existencia
FROM iptb00002 a, OUTER 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 GROUP BY 1,2
IF p_existencia IS NULL THEN
LET p_existencia = 0
END IF
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].descrip_esp TO s_fact[scr_l].descrip_esp
DISPLAY fact_det[curr].unidad_med TO s_fact[scr_l].unidad_med
DISPLAY fact_det[curr].precio TO s_fact[scr_l].precio
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
LET verdad = NULL
CALL precios()
IF verdad = "S" THEN
NEXT FIELD cod_n
END IF
SELECT a.descrip_esp,a.unidad_med,SUM(b.cantidad_2)
INTO fact_det[curr].descrip_esp,fact_det[curr].unidad_med,
p_existencia
FROM iptb00002 a, OUTER 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 GROUP BY 1,2
IF p_existencia IS NULL THEN
LET p_existencia = 0
END IF
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].descrip_esp TO s_fact[scr_l].descrip_esp
DISPLAY fact_det[curr].unidad_med TO s_fact[scr_l].unidad_med
DISPLAY fact_det[curr].precio TO s_fact[scr_l].precio
END CASE
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
# Busca la descripcion del producto con su existencia
LET fact_det[curr].descrip_esp = NULL
LET fact_det[curr].unidad_med = NULL
LET p_existencia = 0
SELECT a.descrip_esp,a.unidad_med,SUM(b.cantidad_2)
INTO fact_det[curr].descrip_esp,fact_det[curr].unidad_med,
p_existencia
FROM iptb00002 a,OUTER 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 GROUP BY 1,2
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
END IF
IF p_existencia IS NULL THEN
LET p_existencia = 0
END IF
# BUSCA LA MARCA DEL PRODUCTO
IF p_existencia IS NULL THEN
LET p_existencia = 0
END IF
LET verdad = NULL
#CALL precios()
#IF verdad = "S" THEN
# NEXT FIELD cod_n
#END IF
DISPLAY fact_det[curr].descrip_esp,fact_det[curr].unidad_med,
fact_det[curr].precio
TO s_fact[scr_l].descrip_esp,s_fact[scr_l].unidad_med,
s_fact[scr_l].precio
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 p_existencia IS NULL THEN
LET p_existencia = 0
END IF
IF fact_det[curr].cod_n != 5 THEN
IF fact_det[curr].cantidad > p_existencia THEN
LET numero_msg = 30
CALL msg(numero_msg)
# NEXT FIELD cantidad
END IF
END IF
#-> Busca la cantidad ordenada a produccion vg Tuesday, 16 January, 2001
SELECT SUM(a.cantidad)INTO cant_prod FROM vetb00051 a
WHERE a.cotizacion_no = fact_gral.conduce
AND a.cod_n = fact_det[curr].cod_n
AND a.cod_tipo = fact_det[curr].cod_tipo
AND a.cod_grupo = fact_det[curr].cod_grupo
AND a.cod_sec = fact_det[curr].cod_sec
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET cant_prod = 0
END IF
IF fact_det[curr].cantidad > cant_prod THEN
LET numero_msg = 1661
CALL msg(numero_msg)
#-> Provicional Victor Gomez Thursday, September 20, 2001 NEXT FIELD cantidad
END IF
# ESTA PARTE DEL PROGRAMA LE COLOQUE COMENTARIO PORQUE Entiendo que no debe controlar esto
# En esta parte de la base de datos exterior
#-> Busca la cantidad despachada de la orden vg Tuesday, 16 January, 2001
# CALL cantidad_desp(fact_gral.orden,fact_det[curr].cod_n,
# fact_det[curr].cod_tipo,fact_det[curr].cod_grupo,
# fact_det[curr].cod_sec)
#
#-> BUSCA LAS DEVOLUCIONES HECHAS VG Saturday, September 22, 2001
# SELECT SUM(a.cantidad_2) INTO cant_devol FROM iptb00006 a
# WHERE a.cod_mov = 12 AND a.status_t IS NULL AND
# a.conduce_no = fact_gral.orden and
# a.cod_sp = fact_gral.tipo_cliente and
# a.cod_sp_sec = fact_gral.sec_cliente and
# a.cod_n = fact_det[curr].cod_n and
# a.cod_tipo = fact_det[curr].cod_tipo and
# a.cod_grupo = fact_det[curr].cod_grupo and
# a.cod_sec = fact_det[curr].cod_sec
# IF cant_devol IS NULL THEN
# LET cant_devol = 0
# END IF
# LET cant_vend = (cant_vend + fact_det[curr].cantidad) - cant_devol
# IF cant_vend > cant_prod THEN
# LET numero_msg = 1661
# CALL msg(numero_msg)
# NEXT FIELD cantidad
# END IF
END IF
AFTER FIELD cantidad_2 #-> Aqui se digita el % de descto. al producto.
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
LET verdad = "N"
CALL repite_codigo()
IF verdad = "S" THEN
NEXT FIELD cod_n
END IF
END IF
IF fact_det[curr].cantidad_2 IS NULL THEN
LET fact_det[curr].cantidad_2 = 0
END IF
IF fact_det[curr].precio IS NULL THEN
LET fact_det[curr].precio = 0
END IF
IF fact_det[curr].cantidad IS NOT NULL THEN
LET fact_det[curr].monto_fact = fact_det[curr].cantidad * fact_det[curr].precio
IF fact_det[curr].cantidad_2 > 0 THEN #-> calcula el valor en descuento para cada articulo vg
LET valor_desc = 0
LET valor_desc = fact_det[curr].monto_fact * (fact_det[curr].cantidad_2 / 100)
LET fact_gral.desc_valor = fact_gral.desc_valor + valor_desc
LET fact_det[curr].monto_fact = fact_det[curr].monto_fact - valor_desc
END IF
END IF
DISPLAY fact_det[curr].monto_fact to s_fact[scr_l].monto_fact
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
DELETE FROM vetb00042 WHERE factura = fact_gral.factura AND
cod_mov = p_codigo
RETURN
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
# Busca la descripcion del producto con su existencia
LET fact_det[curr].descrip_esp = NULL
LET fact_det[curr].unidad_med = NULL
LET p_existencia = 0
SELECT a.descrip_esp,a.unidad_med,SUM(b.cantidad_2)
INTO fact_det[curr].descrip_esp,fact_det[curr].unidad_med,
p_existencia
FROM iptb00002 a,OUTER 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 GROUP BY 1,2
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
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
FOR idx = 1 to arr_count() #-> Calculo del sub_total de la factura
IF fact_det[idx].cantidad IS NOT NULL THEN
LET fact_gral.sub_total = fact_det[idx].cantidad * fact_det[idx].precio
END IF
END FOR
DISPLAY BY NAME fact_gral.sub_total ATTRIBUTE (BOLD)
FOR idx = 1 to arr_count()
IF fact_det[idx].cantidad IS NOT NULL THEN
LET fact_det[idx].monto_fact = fact_det[idx].cantidad * fact_det[idx].precio
IF fact_det[idx].cantidad_2 > 0 THEN #-> calcula el valor en descuento para cada articulo vg
LET valor_desc = 0
LET valor_desc = fact_det[idx].monto_fact * (fact_det[idx].cantidad_2 / 100)
LET fact_gral.desc_valor = fact_gral.desc_valor + valor_desc
LET fact_det[idx].monto_fact = fact_det[idx].monto_fact - valor_desc
END IF
END IF
END FOR
DISPLAY BY NAME fact_gral.desc_valor ATTRIBUTE(BOLD)
# Calcula el porciento de ITBIS de la factura dependiendo del porciento
# especificado por el usuario
# El sub_total tiene el descuento aplicado por cada articulo Victor gomez
let fact_gral.itbi = 0
IF fact_gral.porc_itbi IS NOT NULL THEN
IF ch_itbi = 'S' THEn
LET fact_gral.itbi=((fact_gral.sub_total - fact_gral.desc_valor) * fact_gral.porc_itbi/100)
#-> LET fact_gral.itbi=(fact_gral.sub_total * fact_gral.porc_itbi/100)
end if
ELSE
LET fact_gral.itbi=0
END IF
LET itbi = fact_gral.itbi using "###,###,###.##"
# Calculo total de la factura
LET fact_gral.total_fact =
(fact_gral.sub_total - fact_gral.desc_valor + fact_gral.itbi)
DISPLAY BY NAME fact_gral.itbi,fact_gral.total_fact ATTRIBUTE (BOLD)
}
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 cuenta_arr = arr_count()
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 opt = "S" THEN
LABEL aqui:
LET verdad = "S"
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
SELECT ult_factura INTO fact_gral.factura FROM vetb00001
LET fact_gral.factura= fact_gral.factura+ 1
DISPLAY BY NAME fact_gral.factura
# Pregunta sobre si la factura va ser impresa ahora o luego
if fact_gral.factura is null then
error 'factura no tiene numero'
sleep 3
return
end if
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
LET lleva_parcial = "N"
LABEL brinca:
# Actualiza la tabla de datos generales de la factura
LET fact_gral.factura = 0
SELECT ult_factura INTO fact_gral.factura FROM vetb00001
IF fact_gral.factura IS NULL THEN
insert into vetb00001 (ult_factura,us_crea)
values (0,user)
let fact_gral.factura = 0
END IF
LET fact_gral.factura = fact_gral.factura + 1
update vetb00001 set ult_factura = fact_gral.factura
IF fact_gral.factura IS NOT NULL THEN
# INSERTA DOCUMENTO EN TRANSACCIONES NCF
INSERT INTO vetb00072 VALUES (fact_gral.factura,"FT",codigodgii,kncf,user,current)
INSERT INTO vetb22222 VALUES (fact_gral.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,pconduce,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)
# INSERTA EL DETALLE DE LA FACTURA
INSERT INTO vetb00048
VALUES (fact_gral.factura,observacion,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
END IF
# 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)
{
#-> Actualiza los avances de las ordenes, aplicandolos a la facturas. Victor Gomez Sbado 24 de Marzo de 200102:37:58 p.m.
SELECT MIN(a.num_doc)INTO f_num_avance FROM cctb00001 a
WHERE a.tipo_doc = "AV" AND a.fecha_orig > "31122000"
AND a.tipo_cliente = fact_gral.tipo_cliente
AND a.sec_cliente = fact_gral.sec_cliente
AND a.num_cheque = fact_gral.orden
AND a.status_t IS NULL
IF f_num_avance IS NOT NULL THEN
#-> VAlidar que la orden no haya sido aplicada en su totalidad Vg
SELECT SUM(b.valor) INTO f_avance FROM cctb00001 b
WHERE b.tipo_doc = "AV" AND b.fecha_orig > "31122000"
AND b.num_doc = f_num_avance
AND b.status_t IS NULL
IF fact_gral.total_fact < f_avance THEN
LET f_valor_av = fact_gral.total_fact
ELSE
#LET f_valor_av = (fact_gral.total_fact - f_avance)
LET f_valor_av = f_avance
END IF
IF f_valor_av IS NULL THEN
LET f_valor_av = 0
END IF
IF f_valor_av != 0 THEN
LET f_valor_av = f_valor_av * -1
LET tipo_f = "AV"
INSERT INTO cctb00001 VALUES (NULL,fact_gral.cod_cia,tipo_f,f_num_avance,
fact_gral.tipo_cliente,fact_gral.sec_cliente,NULL,
fact_gral.sec_vend,fact_gral.fecha_factura,p_fecha_ven,
f_num_avance,fact_gral.factura, fact_gral.orden,f_valor_av,NULL,NULL,
t_costos,0, NULL, USER,CURRENT, NULL, NULL)
END IF
END IF
}
END IF
#-> Actulizacion de la tabla de monitoreo de la orden de produccion vg Wednesday, 17 January, 2001 09:33:21 AM
LET prtb09.num_oc = fact_gral.orden
LET prtb09.fecha = fact_gral.fecha_factura
IF cant_vend <> cant_prod THEN
LET prtb09.pendiente = "S"
LET prtb09.detalle = "DESPACHO DE MERCANCIA SEGUN FACT. # ",fact_gral.factura USING "<<<<<<<",
" DE FECHA : ",fact_gral.fecha_factura USING "dd/mm/yyyy"
END IF
{ INSERT INTO prtb00009 VALUES (prtb09.num_oc,prtb09.fecha,null,prtb09.pendiente,
prtb09.detalle,NULL,USER,CURRENT,NULL,NULL) }
#----------------------------------------------------------------------------------------------------
FOR idx = 1 TO cuenta_arr
{
IF fact_det[idx].cod_n IS NOT NULL AND
fact_det[idx].cantidad > 0 THEN
IF fact_det[idx].cantidad_2 > 0 THEN
LET valor_desc = 0
LET fact_det[idx].monto_fact = (fact_det[idx].cantidad_2 * fact_det[idx].precio)
LET valor_desc = fact_det[idx].monto_fact * (fact_det[idx].cantidad_2 / 100)
LET fact_gral.desc_valor = fact_gral.desc_valor + valor_desc
LET fact_det[idx].monto_fact = fact_det[idx].monto_fact - valor_desc
ELSE
LET valor_desc = 0
END IF }
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].cantidad,fact_det[idx].cantidad_2,
valor_desc,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].cantidad = fact_det[idx].cantidad * -1
IF fact_det[idx].cod_n != 5 THEN
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].cantidad,1,USER,CURRENT)
END IF
LET fact_det[idx].cantidad = fact_det[idx].cantidad * -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 FOR
ELSE
GOTO regresa
END IF
CALL actualiza_st(fact_gral.orden) #-> Actualiza el status de la orden de produccion vg
# Impresion de la factura
IF opt1 = "S" or opt1 = "s" THEN
#-> Valida si la factura realmente existe vg Sbado 24 de Marzo de 2001
SELECT * FROM vetb00002
WHERE @factura = fact_gral.factura
IF STATUS = NOTFOUND THEN
GOTO regresa
END IF
START REPORT imp_fact TO "C:\\factura"
FOR idx = 1 TO cuenta_arr
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 AND
fact_det[idx].cantidad IS NOT NULL AND
fact_det[idx].cantidad > 0 THEN
LET cod_fact = 1
OUTPUT TO REPORT imp_fact(fact_gral.*,fact_det[idx].*,tot_porc,
p_bonifica[idx],cod_fact,kncf,codigodgii)
END IF
END FOR
DISPLAY nombre_m CLIPPED AT 1,1
FINISH REPORT imp_fact
RUN "TYPE C:\\factura > %USPRINT1%"
LET impresion = "S"
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
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].descrip_esp = NULL
LET fact_det[idx].unidad_med = NULL
LET fact_det[idx].cantidad = 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
GOTO otravez
END FUNCTION
FUNCTION repite_codigo()
LET verdad = NULL
LET ant_art.cod_n = fact_det[curr].cod_n
LET ant_art.cod_grupo = fact_det[curr].cod_grupo
LET ant_art.cod_tipo = fact_det[curr].cod_tipo
LET ant_art.cod_sec = fact_det[curr].cod_sec
LET ant_art.cantidad = fact_det[curr].cantidad
LET ant_art.precio = fact_det[curr].precio
FOR idx = 1 TO arr_count()
IF idx != curr THEN
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 = ant_art.cod_n AND
fact_det[idx].cod_grupo = ant_art.cod_grupo AND
fact_det[idx].cod_tipo = ant_art.cod_tipo AND
fact_det[idx].cod_sec = ant_art.cod_sec AND
fact_det[idx].cantidad = ant_art.cantidad AND
fact_det[idx].precio = ant_art.precio THEN
LET numero_msg = 21
CALL msg(numero_msg)
LET verdad = "S"
ELSE
IF verdad != "S" THEN
LET verdad = "N"
END IF
END IF
END IF
END IF
END FOR
END FUNCTION
FUNCTION tarifas()
OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd014"
ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST)
LET int_flag = false
CONSTRUCT criterio ON a.descrip FROM descrip
LET selec2 = "SELECT a.cod_tarifa,a.descrip,a.tarifa_pago FROM vetb00023 a ",
"WHERE a.status_t IS NULL AND ",criterio clipped," ORDER BY 1 "
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
GO TO salir_tarifa
END IF
PREPARE busca_tarifa FROM selec2
IF STATUS >= 0 THEN
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
END IF
END IF
DECLARE buscar_tarifa CURSOR FOR busca_tarifa
LET idx = 1
FOREACH buscar_tarifa INTO arr_tarifa[idx].*
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
MESSAGE
" <Esc> Selecciona Tarifa del Transportista Donde Esta el cursor"
DISPLAY ARRAY arr_tarifa TO s_datos.*
LET curr1 = arr_curr()
LET fact_gral.cod_tarifa = arr_tarifa[curr1].cod_tarifa
LET descrip6 = arr_tarifa[curr1].descrip
LABEL salir_tarifa:
CLOSE WINDOW busqueda
END FUNCTION
FUNCTION condiciones()
OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd011"
ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST)
LET int_flag = false
CONSTRUCT BY NAME criterio ON a.descrip
LET selec2 = "SELECT a.cond_pago, a.descrip",
" FROM vetb00012 a",
" WHERE ",
"a.status_t IS NULL AND ",
criterio clipped,
"ORDER BY 1 "
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
GO TO salir_consulta_e
END IF
PREPARE busca_cond1 FROM selec2
IF STATUS >= 0 THEN
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
END IF
END IF
DECLARE buscar_cond CURSOR FOR busca_cond1
LET idx = 1
FOREACH buscar_cond INTO arr_condicion[idx].*
IF STATUS = NOTFOUND THEN
EXIT FOREACH
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT FOREACH
END IF
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
MESSAGE " <Esc> Selecciona Empleado donde esta el cursor"
DISPLAY ARRAY arr_condicion TO s_condicion.*
LET curr1 = arr_curr()
LET fact_gral.cond_pago = arr_condicion[curr1].cond_pago
LET fact_gral.descrip = arr_condicion[curr1].descrip
LABEL salir_consulta_e:
CLOSE WINDOW busqueda
END FUNCTION
FUNCTION cons_transp()
OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd012"
ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST)
LET int_flag = false
CONSTRUCT criterio ON a.nombre FROM descrip6
LET selec2 = "SELECT a.cod_transp,a.sec_transp, a.nombre FROM vetb00015 a ",
"WHERE a.status_t IS NULL AND ",criterio clipped," ORDER BY 1,2"
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
GO TO salir_consulta_e
END IF
PREPARE busca_transp1 FROM selec2
IF STATUS >= 0 THEN
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
END IF
END IF
DECLARE buscar_transp CURSOR FOR busca_transp1
LET idx = 1
FOREACH buscar_transp INTO arr_transp[idx].*
IF STATUS = NOTFOUND THEN
EXIT FOREACH
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT FOREACH
END IF
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
MESSAGE " <Esc> Selecciona Empleado donde esta el cursor"
DISPLAY ARRAY arr_transp TO s_transp.*
LET curr1 = arr_curr()
LET fact_gral.cod_transp = arr_transp[curr1].cod_transp
LET fact_gral.sec_transp = arr_transp[curr1].sec_transp
LET fact_gral.nombre_tran = arr_transp[curr1].nombre
LABEL salir_consulta_e:
CLOSE WINDOW busqueda
END FUNCTION
REPORT imp_fact(x,z,porciento,bonifica,cod_f,pncf,Pcodigodgii)
DEFINE x RECORD
cod_cia LIKE vetb00002.cod_cia,
conduce int,
ventas LIKE vetb00002.ventas,
zona LIKE vetb00002.zona,
nombre_tipo CHAR(11),
factura LIKE vetb00002.factura,
fecha_factura LIKE vetb00002.fecha_factura,
tipo_cliente LIKE vetb00002.tipo_cliente,
sec_cliente LIKE vetb00002.sec_cliente,
nombre CHAR(30),
direccion CHAR(50),
ciudad CHAR(20),
prima_us LIKE vetb00002.prima_us,
porc_desc LIKE vetb00002.porc_desc,
nombre_desc CHAR(30),
cond_pago LIKE vetb00002.cond_pago,
descrip CHAR(30),
orden int,
fecha_orden LIKE vetb00002.fecha_orden,
fecha_conduce LIKE vetb00002.fecha_conduce,
porc_itbi LIKE vetb00002.porc_itbi,
sec_vend int,
nombre_vend CHAR(30),
cod_transp LIKE iptb00006.cod_transp,
sec_transp LIKE iptb00006.sec_transp,
cod_tarifa LIKE iptb00006.cod_tarifa,
nombre_tran CHAR(30),
fecha_embarque LIKE vetb00002.fecha_embarque,
placa_transp LIKE iptb00006.placa,
sub_total DECIMAL(12,2),
desc_valor DECIMAL(12,2),
itbi DECIMAL(12,2),
total_fact DECIMAL(12,2)
END RECORD
DEFINE z RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp CHAR(50),
unidad_med CHAR(4),
cantidad DECIMAL(12,2),
precio DECIMAL(12,3),
cantidad_2 DEC(3,0),
monto_fact DECIMAL(12,3)
END RECORD,
Pcodigodgii LIKE vetb00071.codigo_dgii
DEFINE cantidad_p INTEGER,
i,cod_f SMALLINT
DEFINE c_cajas,bonifica,pncf INTEGER
DEFINE tot_b,tot_n,tot_m,peso_n,medida,peso_b DECIMAL(12,2),
ch_fech CHAR(20)
DEFINE porciento DECIMAL(8,3)
DEFINE valor_porc DECIMAL (12,2)
DEFINE normal,doce,negras,negras_off,doble CHAR(2)
DEFINE rnc CHAR(11)
DEFINE nombre_vend,apellido_vend CHAR(15)
DEFINE comprimido,comprimido_of CHAR(1)
DEFINE presenta LIKE iptb00010.conversion
DEFINE j,lj,h INTEGER
OUTPUT
TOP MARGIN 2
LEFT MARGIN 0
PAGE LENGTH 65
BOTTOM MARGIN 3
ORDER BY x.factura,z.cod_n,z.cod_sec
FORMAT
BEFORE GROUP OF x.factura
LET comprimido = ASCII 15
LET comprimido_of = ASCII 18
LET negras = ASCII 27, ASCII 69
LET negras_off = ASCII 27, ASCII 70
LET doble = ASCII 14
LET doce = ASCII 27, ASCII 77
LET normal = ASCII 27, ASCII 80
LET lj = (80 - LENGTH(p_companias.nombre CLIPPED))/2
LET j = (90 - LENGTH(p_companias.direccion CLIPPED))/2
LET i = (90 - LENGTH(p_companias.telefono CLIPPED))/2
LET h = (90 - LENGTH(p_companias.rnc CLIPPED))/2
PRINT COLUMN lj, normal,doble,p_companias.nombre CLIPPED
PRINT COLUMN j+3, p_companias.direccion
PRINT COLUMN i-9, "Tels : ",p_companias.telefono ,
" Fax : ",p_companias.fax
PRINT COLUMN h-1, "RNC : ",p_companias.rnc CLIPPED,
COLUMN 100, "Pag. ", pageno using "###"
SELECT num_rnc INTO rnc FROM vetb00004
WHERE tipo_cliente = x.tipo_cliente AND sec_cliente = x.sec_cliente AND
status_t IS NULL
#PRINT normal,comprimido_of
IF x.ventas = "1" THEN
PRINT COLUMN 4,normal,comprimido_of, negras,"SENORES :"
ELSE
PRINT COLUMN 4, "SIR :"
END IF
PRINT COLUMN 4, x.nombre CLIPPED," COD.#",x.tipo_cliente using "&&","-",
x.sec_cliente using "&&&&"
PRINT COLUMN 4, x.direccion CLIPPED," ",cliente_bas.telefono
PRINT COLUMN 4, x.ciudad CLIPPED," RNC #",rnc,
COLUMN 50, doble,"FACTURA ",x.factura using "&&&&&"
PRINT COLUMN 4, pubicacion
PRINT COLUMN 4, "NCF: ",pcodigodgii CLIPPED,pncf USING "&&&&&&&&"
PRINT COLUMN 4, descripcion
PRINT comprimido
IF x.cond_pago > 1 AND x.ventas = "1" THEN
LET nombre_vend = p_adtb03.nom1_emp CLIPPED
LET apellido_vend = p_adtb03.apell1_emp CLIPPED
END IF
IF x.ventas = "2" THEN
LET nombre_vend = x.descrip
LET apellido_vend = NULL
END IF
IF x.cond_pago = 1 THEN
LET nombre_vend = x.descrip
LET apellido_vend = NULL
END IF
PRINT "======================================================================================================",
"================================="
PRINT COLUMN 15, "ORDEN",
COLUMN 35, "FECHA",
COLUMN 60, "CONDICION",
COLUMN 80, "VENDEDOR",
COLUMN 98, "COTIZACION",
COLUMN 123, "FECHA FACTURA"
PRINT COLUMN 14, x.orden using "&&&&&&",
COLUMN 34, x.fecha_orden using "dd/mm/yyyy",
COLUMN 60, condicion.descrip CLIPPED,
COLUMN 80, "(",x.sec_vend using "&&&&",") ",x.nombre_vend CLIPPED,
COLUMN 98, x.conduce using "&&&&&&",
COLUMN 126, x.fecha_factura using "dd/mm/yyyy"
PRINT "======================================================================================================",
"================================="
LET tot_n = 0
LET tot_b = 0
LET tot_m = 0
PRINT COLUMN 5,"CODIGO",
COLUMN 21, "CANTIDAD",
COLUMN 37, "UNIDADES",
COLUMN 50, "DESCRIPCION",
COLUMN 102, "PRECIO",
COLUMN 114, "DESC.",
COLUMN 131, "TOTAL"
PRINT "======================================================================================================",
"================================="
ON EVERY ROW
IF z.cantidad <> 0 THEN
LET p_iptb01.factor_conv = 1
LET p_iptb01.unidad = z.unidad_med
SELECT a.factor_conv,a.unidad INTO p_iptb01.factor_conv,p_iptb01.unidad
FROM iptb00001 a
WHERE a.cod_n = z.cod_n AND a.cod_grupo = z.cod_grupo AND
a.cod_tipo = z.cod_tipo AND a.cod_sec = z.cod_sec
IF p_iptb01.factor_conv IS NULL OR p_iptb01.factor_conv = 0 THEN
LET p_iptb01.factor_conv = 1
LET p_iptb01.unidad = z.unidad_med
END IF
PRINT COLUMN 5, z.cod_n USING "&&","-",z.cod_grupo USING "&&","-",
z.cod_tipo USING "&&&","-",z.cod_sec USING "&&&",
COLUMN 13, z.cantidad USING "###,###.###"," ",z.unidad_med CLIPPED,
COLUMN 32, z.cantidad/p_iptb01.factor_conv USING "###,###",
COLUMN 50, z.descrip_esp CLIPPED,
COLUMN 98, z.precio USING "###,###.###",
COLUMN 114, z.cantidad_2 USING "##.&&",
COLUMN 123, z.monto_fact USING "##,###,###.##"
END IF
AFTER GROUP OF x.factura
# Impresion de informaciones que pertenecen a facturas de exportacion
IF x.ventas = "2" or x.ventas = "4" THEN
IF x.nombre_desc IS NOT NULL THEN
PRINT COLUMN 122,"--------------"
PRINT COLUMN 78, "VALOR BRUTO ",
COLUMN 122, x.sub_total using "###,###,###.##"
END IF
IF x.desc_valor <> 0 THEN
PRINT COLUMN 77, x.porc_desc using "<<<.##"," %DISCOUNT",
COLUMN 122, x.desc_valor using "###,###,###.##"
END IF
PRINT COLUMN 122, "--------------"
PRINT COLUMN 78, "TOTAL F.O.B. PLANT, D.R.",
COLUMN 122, x.total_fact using "###,###,###.##"
PRINT COLUMN 122, "______________"
PRINT COLUMN 122, "--------------"
LET ch_fech = x.fecha_embarque using "ddd, mmm. dd, yyyy"
LET ch_fech = upshift(ch_fech)
PRINT COLUMN 47, "INLAND FREIGHT : COLLECT"
PRINT COLUMN 47, "INSURANCE : TO BE COVERED BY CUSTOMER"
PRINT COLUMN 47, "TO BE SHIPPED : ", ch_fech
#PRINT COLUMN 47, "EXCHANGE RATE : ", x.prima_us USING "###.##"
END IF
# Impresion de datos que concierne solamente a tipos de facturas locales
IF x.ventas = "1" THEN
#->PRINT COLUMN 122, "--------------"
SKIP 1 LINE
PRINT COLUMN 78, "VALOR BRUTO ",
COLUMN 122, x.sub_total using "###,###,###.##"
IF x.desc_valor <> 0 THEN
PRINT COLUMN 77, x.porc_desc using "##"," %DESCUENTO",
COLUMN 093, x.desc_valor using "###,###,###.##"
#COLUMN 122, x.desc_valor using "###,###,###.##"
END IF
#-> PRINT COLUMN 122, "--------------"
PRINT COLUMN 78, "SUB-TOTAL",
COLUMN 119, x.sub_total-x.desc_valor using "RD$###,###,###.##"
IF x.porc_itbi > 0 THEN
PRINT COLUMN 78,x.porc_itbi using "###.##","%"," ITBI",
COLUMN 122, x.itbi using "###,###,###.##"
END IF
PRINT COLUMN 122, "--------------"
PRINT COLUMN 78, "VALOR NETO ",
COLUMN 119, x.total_fact using "RD$###,###,###.##"
PRINT COLUMN 122, "=============="
END IF
IF x.ventas = "3" THEN
#->PRINT COLUMN 122, "--------------"
SKIP 1 LINE
PRINT COLUMN 78, "VALOR BRUTO ",
COLUMN 118, x.sub_total using "USD$###,###,###.##"
IF x.desc_valor <> 0 THEN
PRINT COLUMN 77, x.porc_desc using "##"," %DESCUENTO",
COLUMN 093, x.desc_valor using "###,###,###.##"
#COLUMN 122, x.desc_valor using "###,###,###.##"
END IF
#-> PRINT COLUMN 122, "--------------"
PRINT COLUMN 78, "SUB-TOTAL",
COLUMN 122, x.sub_total-x.desc_valor using "###,###,###.##"
IF x.porc_itbi > 0 THEN
PRINT COLUMN 78, x.porc_itbi using "###.##","%"," ITBI",
COLUMN 122, x.itbi using "###,###,###.##"
END IF
PRINT COLUMN 122, "--------------"
PRINT COLUMN 78, "VALOR NETO ",
COLUMN 118, x.total_fact using "USD$###,###,###.##"
PRINT COLUMN 122, "=============="
END IF
PRINT comprimido_of
#SKIP 8 LINE
PAGE TRAILER
SKIP 1 LINE
PRINT doce,comprimido_of
LET obs1=observacion[1,50]
LET obs2=observacion[51,101]
LET obs3=observacion[102,152]
LET obs4=observacion[152,180]
PRINT COLUMN 3, "OBSERVACIONES: ",UPSHIFT(obs1) CLIPPED," ", UPSHIFT(obs2) CLIPPED
PRINT COLUMN 3, " ",UPSHIFT(obs3) CLIPPED," ", UPSHIFT(obs4) CLIPPED
# IF x.ventas = 3 THEN
# PRINT COLUMN 3, "EXCHANGE RATE : ", x.prima_us USING "###.##"
# ELSE
# PRINT " "
# END IF
SKIP 2 LINES
PRINT COLUMN 4, "NOMBRE TRANSPORTISTA: ",x.nombre_tran, " ",
"CEDULA: ",p_cedula using "&&&&&&&&&",
" SERIE: ",p_serie using "&&&"
PRINT COLUMN 4, "PLACA DEL VEHICULO: ",x.placa_transp
{
SKIP 10 LINES
PRINT COLUMN 12, x.nombre CLIPPED
CALL convierte(x.total_fact)
PRINT COLUMN 05, valor_letras clipped,
COLUMN 72, x.total_fact using "###,###,###.##"
PRINT COLUMN 72, x.factura using "&&&&&"
PRINT COLUMN 10, condicion.dias USING "&&"
}
SKIP 3 LINES
PRINT COLUMN 4,"-------------------------------",20 SPACES,
"-------------------------------"
PRINT COLUMN 4," FACTURADO POR ",20 SPACES,
" REVISADO POR "
SKIP 4 LINES
END REPORT
FUNCTION veprfu001()
DEFINE pagos RECORD
documento LIKE vetb00002.factura,
detalle CHAR(30),
factura LIKE vetb00002.factura,
cheque_no LIKE cctb00001.num_cheque,
banco LIKE cctb00001.banco,
valor_cheque DECIMAL(12,2),
valor_efectivo DECIMAL (12,2)
END RECORD
OPEN WINDOW captura AT 7,12 WITH FORM "vefmwd013"
ATTRIBUTE (BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST)
INPUT BY NAME pagos.*
BEFORE FIELD factura
LET pagos.factura = fact_gral.factura
AFTER FIELD detalle
IF pagos.detalle IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD detalle
END IF
AFTER FIELD factura
IF pagos.factura IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD factura
ELSE
SELECT a.fecha_factura,a.tipo_cliente,a.sec_cliente,b.nombre,
a.neto,b.cod_provincia,a.sub_total,a.monto_itbi INTO
fact_gral.fecha_factura,fact_gral.tipo_cliente,
fact_gral.sec_cliente,fact_gral.nombre,fact_gral.total_fact,
codigo_provincia,fact_gral.sub_total,fact_gral.itbi
FROM vetb00002 a,vetb00004 b
WHERE a.factura = pagos.factura AND a.tipo_cliente = b.tipo_cliente AND
a.sec_cliente = b.sec_cliente AND a.status_t IS NULL
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
END IF
LET fact_gral.factura = pagos.factura
AFTER FIELD banco
LET descrip1 = NULL
LET descrip2 = NULL
IF pagos.banco IS NOT NULL THEN
SELECT nombre_bc,localidad INTO descrip1,descrip2 FROM bancos
WHERE cod_banco = pagos.banco
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD banco
END IF
END IF
DISPLAY BY NAME descrip1 ATTRIBUTE (BOLD)
AFTER FIELD valor_cheque
IF pagos.valor_cheque IS NOT NULL THEN
LET pagos.valor_efectivo = fact_gral.total_fact - pagos.valor_cheque
ELSE
LET pagos.valor_efectivo = fact_gral.total_fact
END IF
DISPLAY BY NAME pagos.valor_efectivo
AFTER INPUT
IF int_flag THEN
LET int_flag = FALSE
RETURN
END IF
END INPUT
LET p_fecha_ven = "01/01/01"
LET fact_gral.total_fact = fact_gral.total_fact * -1
IF fact_gral.total_fact IS NULL THEN
LET fact_gral.total_fact = 0
END IF
IF fact_gral.total_fact <> 0 THEN
LET pagos.documento = 0
# para marmotech se esta continuando con la secuencia en el tipo de documento AV
SELECT ult_recibo INTO pagos.documento FROM cctb00003 WHERE tipo_doc = "AV"
IF pagos.documento IS NULL THEN
LET pagos.documento = 0
END IF
LET pagos.documento = pagos.documento + 1
DISPLAY BY NAME pagos.documento
DELETE FROM cctb00001 WHERE num_doc = pagos.documento AND tipo_doc = "PC"
INSERT INTO cctb00001
VALUES (NULL,fact_gral.cod_cia,"PC",pagos.documento,
fact_gral.tipo_cliente,fact_gral.sec_cliente,NULL,
fact_gral.sec_vend,fact_gral.fecha_factura,p_fecha_ven,
fact_gral.factura,pagos.cheque_no,pagos.banco,
fact_gral.total_fact,pagos.valor_efectivo,pagos.valor_cheque,
0,0,NULL,USER,CURRENT,NULL, NULL)
LET fact_gral.total_fact = fact_gral.total_fact * -1
START REPORT volante TO "C:\\RECIBO"
OUTPUT TO REPORT volante(fact_gral.*,pagos.*,descrip1,descrip2)
FINISH REPORT volante
RUN "TYPE C:\\RECIBO > %USPRINT1%"
UPDATE cctb00003 SET ult_recibo = pagos.documento WHERE tipo_doc = "PC"
CLOSE WINDOW captura
END IF
END FUNCTION
REPORT volante (x,y,t,t1)
DEFINE y RECORD
documento LIKE vetb00002.factura,
detalle CHAR(30),
factura LIKE vetb00002.factura,
cheque_no LIKE cctb00001.num_cheque,
banco LIKE cctb00001.banco,
valor_cheque DECIMAL(12,2),
valor_efectivo DECIMAL (12,2)
END RECORD
DEFINE x RECORD
cod_cia LIKE vetb00002.cod_cia,
ventas LIKE vetb00002.ventas,
zona LIKE vetb00002.zona,
nombre_tipo CHAR(11),
factura LIKE vetb00002.factura,
fecha_factura LIKE vetb00002.fecha_factura,
tipo_cliente LIKE vetb00002.tipo_cliente,
sec_cliente LIKE vetb00002.sec_cliente,
nombre CHAR(30),
direccion CHAR(50),
ciudad CHAR(20),
prima_us LIKE vetb00002.prima_us,
porc_desc LIKE vetb00002.porc_desc,
nombre_desc CHAR(30),
cond_pago LIKE vetb00002.cond_pago,
descrip CHAR(30),
orden LIkE vetb00002.orden,
fecha_orden LIKE vetb00002.fecha_orden,
conduce LIKE vetb00002.conduce,
fecha_conduce LIKE vetb00002.fecha_conduce,
porc_itbi LIKE vetb00002.porc_itbi,
sec_vend LIKE vetb00002.sec_vend,
nombre_vend CHAR(30),
cod_transp LIKE iptb00006.cod_transp,
sec_transp LIKE iptb00006.sec_transp,
cod_tarifa LIKE vetb00023.cod_tarifa,
nombre_tran CHAR(30),
fecha_embarque LIKE vetb00002.fecha_embarque,
placa_transp LIKE iptb00006.placa,
sub_total DECIMAL(12,2),
desc_valor DECIMAL(12,2),
itbi DECIMAL(12,2),
total_fact DECIMAL(12,2)
END RECORD
DEFINE t,t1 CHAR(30)
DEFINE doble CHAR(1)
DEFINE comp_off,negras,negras_of,italic,italic_of CHAR(2)
DEFINE solicitante CHAR(30)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
FORMAT
PAGE HEADER
LET negras = ASCII 27, ASCII 69
LET negras_of = ASCII 27, ASCII 70
LET doble = ASCII 14
LET italic = ASCII 27, ASCII 52
LET italic_of = ASCII 27, ASCII 53
LET comp_off = ASCII 18
PRINT COLUMN 70,comp_off, ASCII 27, ASCII 80
PRINT COLUMN 70,doble, y.documento using "&&&&&&"
PRINT COLUMN 5, negras,p_companias.nombre CLIPPED,negras_of,
COLUMN 72, today using "dd/mm/yyyy"
PRINT COLUMN 5, p_companias.direccion CLIPPED," TEL. ",p_companias.telefono
SKIP 1 LINE
PRINT COLUMN 15, italic,"RECIBO DE INGRESO"
SKIP 2 LINE
LET valor_orig = x.total_fact
LET valor_letras = NULL
CALL convierte(valor_orig)
SELECT solicitante_s INTO solicitante FROM vetb00006
WHERE tipo_cliente_s = x.tipo_cliente AND sec_cliente_s = x.sec_cliente AND
status_t IS NULL
PRINT COLUMN 5, "RECIBIMOS DE: ",negras,y.detalle,negras_of,
COLUMN 40, "ESTABLECIMIENTO: ",negras,x.nombre,negras_of
PRINT COLUMN 5, "DIRECCION: ",negras,x.direccion,negras_of
PRINT COLUMN 5, "LOCALIDAD: ",negras,x.ciudad,negras_of
PRINT COLUMN 5, "LA SUMA DE: ", negras,valor_letras clipped,negras_of#,
#COLUMN 56, "RD$ ",negras,x.total_fact using "###,###,###.##",negras_of
PRINT COLUMN 5, "VALOR RECIBIDO: ",
COLUMN 25,"EN EFECTIVO: ",negras,y.valor_efectivo using "##,###,###.##",
negras_of,
COLUMN 58, "EN CHEQUES: ",negras,y.valor_cheque using "###,###,###.##",
negras_of
PRINT COLUMN 5,
"CHEQUE NO: ",negras,y.cheque_no,negras_of,"BANCO: ",negras,t clipped,
negras_of
PRINT COLUMN 5, "LOCALIDAD: ",negras,t1 clipped ,negras_of
SKIP 1 LINE
PRINT COLUMN 1,
"------------------------------------------------------------------------------"
PRINT COLUMN 5, "FECHA",
COLUMN 20, "FACTURA",
COLUMN 39, "VALOR FACTURA",
COLUMN 60, "NETO COBRADO"
PRINT COLUMN 1,
"------------------------------------------------------------------------------"
SKIP 1 LINE
PRINT COLUMN 3, x.fecha_factura using "dd/mm/yyyy",
COLUMN 20, x.factura using "&&&&&&" ,
COLUMN 38, x.sub_total - x.desc_valor + x.itbi using "###,###,###.##",
COLUMN 58, x.total_fact using "###,###,###.##"
PRINT italic_of
END REPORT
FUNCTION anular()
OPEN WINDOW anula AT 7,5 WITH FORM "vefmwd006" ATTRIBUTE (BORDER,
COMMENT LINE LAST - 1,PROMPT LINE LAST,FORM LINE FIRST + 1)
LABEL vuelve:
INPUT BY NAME p_fact_no
AFTER FIELD p_fact_no
SELECT UNIQUE fecha_factura,orden,tipo_cliente,sec_cliente,neto
INTO fact_gral.fecha_factura,fact_gral.orden,fact_gral.tipo_cliente,
fact_gral.sec_cliente,fact_gral.total_fact
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
SELECT a.nombre
INTO fact_gral.nombre
FROM vetb00004 a
WHERE a.tipo_cliente = fact_gral.tipo_cliente AND
a.sec_cliente = fact_gral.sec_cliente
DISPLAY BY NAME fact_gral.tipo_cliente,fact_gral.sec_cliente,
fact_gral.total_fact,fact_gral.nombre ATTRIBUTE(blue)
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
SELECT UNIQUE a.usuario INTO p_usuario FROM seg0001 a
WHERE a.usuario = user
IF p_usuario = "ussecr01" THEN
IF fact_gral.fecha_factura != TODAY THEN
ERROR "NO PUEDE ANULAR FACTURA QUE NO SEAN DEL DIA DE HOY"
RETURN
END IF
END IF
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 (2006-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,31,32,55) AND
fech_crea > datetime (2006-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 (2006-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 (2006-03-31 08:00) year to minute
UPDATE cctb00001 SET status_t = "E",
us_mod = USER,
fech_mod = CURRENT
WHERE aplica_a = p_fact_no AND tipo_doc = "PC" AND
fech_crea > datetime (2006-03-31 08:00) year to minute
# ANULACION DE LAS SERIES
IF fact_gral.ventas = "1" THEN
LET p_codigo = 30
ELSE
LET p_codigo = 31
END IF
UPDATE vetb00042 set status_t = "E", us_mod = user, fech_mod = current
WHERE factura = p_fact_no AND cod_mov = p_codigo
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
FUNCTION precios()
# AQUI HAY QUE BUSCAR EL PRECIO PARA CALCULAR POR CLIENTE
LET p_costos1 = 0
SELECT precio INTO p_costos1 FROM vetb00025
WHERE ventas = fact_gral.ventas AND tipo_cliente = fact_gral.tipo_cliente AND
sec_cliente = fact_gral.sec_cliente AND 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 status_t IS NULL
IF STATUS = NOTFOUND THEN
SELECT precio INTO p_costos1 FROM vetb00025
WHERE ventas = fact_gral.ventas AND tipo_cliente IS NULL AND
sec_cliente IS NULL AND 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 status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 85
CALL msg(numero_msg)
LET verdad = "N"
END IF
{IF fact_det[curr].cod_n = 2 THEN
LET verdad = "N"
END IF}
END IF
LET fact_det[curr].precio = p_costos1
END FUNCTION
FUNCTION ver_desc()
OPEN WINDOW descuentos AT 10,5 WITH FORM "vefmwd007" ATTRIBUTE
(BORDER,FORM LINE FIRST +1,COMMENT LINE LAST -1,MESSAGE LINE LAST)
CALL set_count(h-1)
DISPLAY ARRAY descuenta TO s_desc.*
CLOSE WINDOW descuentos
END FUNCTION
FUNCTION detalles()
OPEN WINDOW wdetalle AT 12,2 WITH FORM "vefmwd075"
ATTRIBUTE(BORDER,FORM LINE FIRST +1)
INPUT BY NAME observacion WITHOUT DEFAULTS
CLOSE WINDOW wdetalle
END FUNCTION
FUNCTION cantidad_desp(forden,fcod_n,fcod_tipo,fcod_grupo,fcod_sec)
DEFINE forden INTEGER,
fcod_n,fcod_tipo,fcod_grupo,fcod_sec SMALLINT
SELECT SUM(b.cantidad) INTO cant_vend
FROM vetb00002 a, vetb00003 b
WHERE a.orden = forden AND a.fecha_factura > "31122000"
AND a.factura = b.factura
AND b.cod_n = fcod_n
AND b.cod_tipo = fcod_tipo
AND b.cod_grupo = fcod_grupo
AND b.cod_sec = fcod_sec
AND a.status_t IS NULL
and b.status_t is NULL
IF STATUS = NOTFOUND THEN
LET cant_vend = 0
END IF
END FUNCTION
FUNCTION actualiza_st(forden)
DEFINE forden INTEGER,
prod_total,vent_total DEC(8,2)
SELECT SUM(a.cantidad) INTO prod_total FROM prtb00013 a
WHERE a.num_oc = forden
IF STATUS = NOTFOUND THEN
LET prod_total = 0
END IF
SELECT SUM(b.cantidad) INTO vent_total
FROM vetb00002 a, vetb00003 b
WHERE a.orden = forden AND a.fecha_factura > "31122000"
AND a.factura = b.factura
AND a.tipo_cliente = fact_gral.tipo_cliente
AND a.sec_cliente = fact_gral.sec_cliente
AND a.status_t IS NULL
AND b.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET vent_total = 0
END IF
#-> display "Vendido : ",vent_total," ","Prod : ",prod_total at 2,15 sleep 3
#-> Actualiza la fecha de cierre de la orden de corte vg Wednesday, 17 January, 200112:42:33 PM
IF vent_total = prod_total THEN
UPDATE prtb00012 SET fecha_cierre = fact_gral.fecha_factura
WHERE @num_oc = forden
AND @tipo_cliente = fact_gral.tipo_cliente
AND @sec_cliente = fact_gral.sec_cliente
LET prtb09.num_oc = forden
LET prtb09.fecha = fact_gral.fecha_factura
LET prtb09.pendiente = "N"
LET prtb09.detalle = "CIERRE DE ORDEN DE PRODUCCION SEGUN FACT. # ",fact_gral.factura USING "<<<<<<<",
" DE FECHA : ",fact_gral.fecha_factura USING "dd/mm/yyyy"
{ INSERT INTO prtb00009 VALUES (prtb09.num_oc,prtb09.fecha,prtb09.pendiente,
prtb09.detalle,NULL,USER,CURRENT,NULL,NULL) }
END IF
END FUNCTION
FUNCTION convierte(valor_origen) # Funcion para convertir de valor a letras
DEFINE valor_origen DECIMAL(12,2)
DEFINE consegui CHAR(1)
DEFINE p,miles,m,k,a,b,d,c,entero,unidades_mi,unidades_m,unidad,mil,millon,
unid_c,u INTEGER
DEFINE cheles DECIMAL (7,2)
CALL letras()
LET valor_letras = null
LET consegui = "N"
LET entero = valor_origen
LET cheles = (valor_origen - entero) * 100
LET unidad = entero / 100
LET unidad = entero - (unidad * 100)
LET a = entero / 1000
LET a = entero - (a * 1000)
LET d = entero - 19
IF d >= 82 THEN
LET c = entero / 100
# Para Controlar los miles y los cientos
IF c <= 9 THEN
LET valor_letras = valor_letras clipped," ",centenas[c] clipped
ELSE
LET c = entero / 1000
LET b = entero / 1000000
END IF
IF d > 19 THEN
LET d = unidad - 19
END IF
IF unidad > 0 and unidad < 20 THEN
LET d = unidad
LET valor_letras = valor_letras clipped," ",unidades1[d] clipped
LET consegui = "S"
END IF
ELSE
IF d > 0 AND d <= 81 THEN
LET valor_letras = valor_letras clipped," ",decenas[d] clipped
LET consegui = "S"
END IF
END IF
# Para controlar los miles
IF entero > 999 THEN
LET unidades_m = a / 100
LET unidades_m = a - (unidades_m * 100)
LET valor_letras = null
IF c = 1 THEN
LET valor_letras = "MIL"
END IF
IF c > 1 and c <= 19 THEN
LET valor_letras = valor_letras clipped," ",unidades1[c] clipped," ","MIL"
END IF
IF c >= 20 and c <= 999 THEN
IF c < 82 THEN
LET c = c - 19
LET valor_letras = valor_letras clipped," ",decenas[c] clipped
ELSE
LET k = c / 100
LET valor_letras = valor_letras clipped," ",centenas[k] clipped
LET unid_c = c - (k * 100)
IF unid_c >= 20 THEN
LET unid_c = unid_c - 19
LET valor_letras = valor_letras clipped," ",decenas[unid_c] clipped
END IF
END IF
LET valor_letras = valor_letras clipped," ","MIL"
END IF
LET c = a
IF c > 100 THEN
LET c = c / 100
LET valor_letras = valor_letras clipped," ",centenas[c] clipped
END IF
IF c = 100 THEN
LET valor_letras = valor_letras clipped," ",decenas[81] clipped
END IF
IF unidades_m > 0 and unidades_m <= 19 THEN
LET a = unidades_m
LET valor_letras = valor_letras clipped, " ",unidades1[a] clipped
{ ELSE
LET a = unidades_m - 19
LET valor_letras = valor_letras clipped, " ",unidades1[a] clipped}
END IF
END IF
# Para Controlar cantidades en millones
IF entero > 999999 THEN
LET c = 0
LET miles = entero - 1000000
LET m = miles / 1000
LET p = miles - (m * 1000)
LET u = m / 100
LET u = m - (u * 100)
LET unidades_mi = p
LET unidades_mi = unidades_mi / 100
LET unidades_mi = p - (unidades_mi * 100)
LET valor_letras = null
IF b = 1 THEN
LET valor_letras = "UN MILLON"
END IF
IF b > 1 and b <= 19 THEN
LET valor_letras = valor_letras clipped," ",unidades1[b] clipped," ",
"MILLONES"
END IF
IF b >= 20 and b <= 999999 THEN
IF b < 82 THEN
LET b = b - 19
LET valor_letras = valor_letras clipped," ",decenas[b] clipped," ",
"MILLONES"
ELSE
LET k = b / 100
LET valor_letras = valor_letras clipped," ",centenas[k] clipped," ",
"MILLONES"
END IF
END IF
LET b = m
IF b > 100 THEN
LET b = b / 100
LET valor_letras = valor_letras clipped," ",centenas[b] clipped
IF u > 0 and u <= 19 THEN
IF u = 1 THEN
LET unidades1[1] = "UN"
END IF
LET valor_letras = valor_letras clipped," ",unidades1[u] clipped
END IF
LET valor_letras = valor_letras clipped," ","MIL"
END IF
IF p > 100 THEN
LET p = p / 100
LET valor_letras = valor_letras clipped," ",centenas[p] clipped
END IF
IF unidades_mi > 0 and unidades_mi < 19 THEN
LET m = unidades_mi
LET valor_letras = valor_letras clipped, " ",unidades1[m] clipped
END IF
END IF
IF unidad > 0 and unidad < 20 AND consegui = "N" THEN
LET d = unidad
LET valor_letras = valor_letras clipped," ",unidades1[d] clipped
END IF
IF unidad >= 20 AND d <= 81 AND consegui = "N" THEN
LET valor_letras = valor_letras clipped," ",decenas[d] clipped
END IF
LET valor_letras = valor_letras clipped," ","CON"," ",
cheles using "&&", "/100"
END FUNCTION
FUNCTION letras()
LET unidades1[1] = "UNO"
LET unidades1[2] = "DOS"
LET unidades1[3] = "TRES"
LET unidades1[4] = "CUATRO"
LET unidades1[5] = "CINCO"
LET unidades1[6] = "SEIS"
LET unidades1[7] = "SIETE"
LET unidades1[8] = "OCHO"
LET unidades1[9] = "NUEVE"
LET unidades1[10] = "DIEZ"
LET unidades1[11] = "ONCE"
LET unidades1[12] = "DOCE"
LET unidades1[13] = "TRECE"
LET unidades1[14] = "CATORCE"
LET unidades1[15] = "QUINCE"
LET unidades1[16] = "DIESISEIS"
LET unidades1[17] = "DIESISIETE"
LET unidades1[18] = "DIESIOCHO"
LET unidades1[19] = "DIESINUEVE"
LET decenas[1] = "VEINTE"
LET decenas[2] = "VEINTE Y UNO"
LET decenas[3] = "VEINTE Y DOS"
LET decenas[4] = "VEINTE Y TRES"
LET decenas[5] = "VEINTE Y CUATRO"
LET decenas[6] = "VEINTE Y CINCO"
LET decenas[7] = "VEINTE Y SEIS"
LET decenas[8] = "VEINTE Y SIETE"
LET decenas[9] = "VEINTE Y OCHO"
LET decenas[10] = "VEINTE Y NUEVE"
LET decenas[11] = "TREINTA"
LET decenas[12] = "TREINTA Y UNO"
LET decenas[13] = "TREINTA Y DOS"
LET decenas[14] = "TREINTA Y TRES"
LET decenas[15] = "TREINTA Y CUATRO"
LET decenas[16] = "TREINTA Y CINCO"
LET decenas[17] = "TREINTA Y SEIS"
LET decenas[18] = "TREINTA Y SIETE"
LET decenas[19] = "TREINTA Y OCHO"
LET decenas[20] = "TREINTA Y NUEVE"
LET decenas[21] = "CUARENTA"
LET decenas[22] = "CUARENTA Y UNO"
LET decenas[23] = "CUARENTA Y DOS"
LET decenas[24] = "CUARENTA Y TRES"
LET decenas[25] = "CUARENTA Y CUATRO"
LET decenas[26] = "CUARENTA Y CINCO"
LET decenas[27] = "CUARENTA Y SEIS"
LET decenas[28] = "CUARENTA Y SIETE"
LET decenas[29] = "CUARENTA Y OCHO"
LET decenas[30] = "CUARENTA Y NUEVE"
LET decenas[31] = "CINCUENTA"
LET decenas[32] = "CINCUENTA Y UNO"
LET decenas[33] = "CINCUENTA Y DOS"
LET decenas[34] = "CINCUENTA Y TRES"
LET decenas[35] = "CINCUENTA Y CUATRO"
LET decenas[36] = "CINCUENTA Y CINCO"
LET decenas[37] = "CINCUENTA Y SEIS"
LET decenas[38] = "CINCUENTA Y SIETE"
LET decenas[39] = "CINCUENTA Y OCHO"
LET decenas[40] = "CINCUENTA Y NUEVE"
LET decenas[41] = "SESENTA"
LET decenas[42] = "SESENTA Y UNO"
LET decenas[43] = "SESENTA Y DOS"
LET decenas[44] = "SESENTA Y TRES"
LET decenas[45] = "SESENTA Y CUATRO"
LET decenas[46] = "SESENTA Y CINCO"
LET decenas[47] = "SESENTA Y SEIS"
LET decenas[48] = "SESENTA Y SIETE"
LET decenas[49] = "SESENTA Y OCHO"
LET decenas[50] = "SESENTA Y NUEVE"
LET decenas[51] = "SETENTA"
LET decenas[52] = "SETENTA Y UNO"
LET decenas[53] = "SETENTA Y DOS"
LET decenas[54] = "SETENTA Y TRES"
LET decenas[55] = "SETENTA Y CUATRO"
LET decenas[56] = "SETENTA Y CINCO"
LET decenas[57] = "SETENTA Y SEIS"
LET decenas[58] = "SETENTA Y SIETE"
LET decenas[59] = "SETENTA Y OCHO"
LET decenas[60] = "SETENTA Y NUEVE"
LET decenas[61] = "OCHENTA"
LET decenas[62] = "OCHENTA Y UNO"
LET decenas[63] = "OCHENTA Y DOS"
LET decenas[64] = "OCHENTA Y TRES"
LET decenas[65] = "OCHENTA Y CUATRO"
LET decenas[66] = "OCHENTA Y CINCO"
LET decenas[67] = "OCHENTA Y SEIS"
LET decenas[68] = "OCHENTA Y SIETE"
LET decenas[69] = "OCHENTA Y OCHO"
LET decenas[70] = "OCHENTA Y NUEVE"
LET decenas[71] = "NOVENTA"
LET decenas[72] = "NOVENTA Y UNO"
LET decenas[73] = "NOVENTA Y DOS"
LET decenas[74] = "NOVENTA Y TRES"
LET decenas[75] = "NOVENTA Y CUATRO"
LET decenas[76] = "NOVENTA Y CINCO"
LET decenas[77] = "NOVENTA Y SEIS"
LET decenas[78] = "NOVENTA Y SIETE"
LET decenas[79] = "NOVENTA Y OCHO"
LET decenas[80] = "NOVENTA Y NUEVE"
LET decenas[81] = "CIEN"
LET centenas[1] = "CIENTO"
LET centenas[2] = "DOCIENTOS"
LET centenas[3] = "TRESCIENTOS"
LET centenas[4] = "CUATROCIENTOS"
LET centenas[5] = "QUINIENTOS"
LET centenas[6] = "SEISCIENTOS"
LET centenas[7] = "SETECIENTOS"
LET centenas[8] = "OCHOCIENTOS"
LET centenas[9] = "NOVECIENTOS"
END FUNCTION
FUNCTION after_all()
# Calculo del sub-total de la factura
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 t_arr
IF fact_det[idx].cantidad IS NOT NULL THEN
LET fact_gral.sub_total = fact_gral.sub_total + (fact_det[idx].cantidad * fact_det[idx].precio)
END IF
END FOR
DISPLAY BY NAME fact_gral.sub_total
FOR idx = 1 to arr_count()
IF fact_det[idx].cantidad IS NOT NULL THEN
LET fact_det[idx].monto_fact = fact_det[idx].cantidad * fact_det[idx].precio
IF fact_det[idx].cantidad_2 > 0 THEN #-> calcula el valor en descuento para cada articulo vg
LET valor_desc = 0
LET valor_desc = fact_det[idx].monto_fact * (fact_det[idx].cantidad_2 / 100)
LET fact_gral.desc_valor = fact_gral.desc_valor + valor_desc
LET fact_det[idx].monto_fact = fact_det[idx].monto_fact - valor_desc
END IF
END IF
END FOR
DISPLAY BY NAME fact_gral.desc_valor
# 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.itbi=((fact_gral.sub_total - fact_gral.desc_valor)* fact_gral.porc_itbi/100)
#- LET fact_gral.itbi=(fact_gral.sub_total * fact_gral.porc_itbi/100)
ELSE
LET fact_gral.itbi=0
END IF
LET itbi = fact_gral.itbi using "###,###,###.##"
DISPLAY BY NAME fact_gral.itbi ATTRIBUTE (BOLD)
# Calculo total de la factura
LET fact_gral.total_fact = (fact_gral.sub_total - fact_gral.desc_valor)+ fact_gral.itbi
DISPLAY BY NAME fact_gral.total_fact ATTRIBUTE (BOLD)
END FUNCTION
FUNCTION btipo_fact()
DEFINE arrtipofact ARRAY[50] OF RECORD
codigodgii LIKE vetb00071.codigo_dgii,
descripcion LIKE vetb00071.tipo_ncf
END RECORD
OPEN WINDOW tipofactura AT 7,12 WITH FORM "vefmwd018"
ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST)
DECLARE busca_tipo CURSOR FOR
SELECT a.codigo_dgii,a.tipo_ncf FROM vetb00071 a
WHERE a.tipo_doc = "FT" and a.disponible = "S"
LET idx = 1
FOREACH busca_tipo INTO arrtipofact[idx].*
LET idx = idx + 1
END FOREACH
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLOSE WINDOW tipofactura
END IF
CALL set_count(idx-1)
DISPLAY ARRAY arrtipofact TO s_tipo.*
LET curr1 = arr_curr()
LET codigodgii = arrtipofact[curr1].codigodgii
LET descripcion = arrtipofact[curr1].descripcion
CLOSE WINDOW tipofactura
END FUNCTION