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

3807 lines
134 KiB
Plaintext

{
--------------------------------------------------------------------------
PROGRAMA : VEPRMT001_2
OBJETIVO : Este programa captura la factura comercial para los puntos de ventas
REALIZADO POR : Ing. Juan Fco. Soto.
FECHA : Agosto 11, 2014.
OBJETIVO : Registro facturas con NCF en los puntos de ventas
COPIA PROGRAMA : Programa Original es el veprmt001
--------------------------------------------------------------------------
}
GLOBALS
"veprgb000.4gl"
DEFINE mes_chequeo SMALLINT
DEFINE porce,valor_desc,cant_prod,cant_vend,itbis_o DECIMAL (8,2)
DEFINE codigo_provincia,t_arr,
pubicacion LIKE prtb00012.ubicacion,
aplaca_transp CHAR(20),
documento_ref CHAR(15),
codigodgii CHAR(14),
descripcion_ncf CHAR(80),
kncf,otro_num INTEGER,
porcentaje_n DEC(8,2)
DEFINE lleva_parcial,ch_servicios,ch_itbi,ch_encabeza CHAR(1),
pcotizacion,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
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(4) RETURNING impresor
# CONNECT to "exterior" AS "IFMX"
CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave
OPTIONS
FORM LINE 2,
ERROR LINE 24,
COMMENT LINE 23,
PROMPT LINE 22
CLEAR SCREEN
OPEN FORM vefmmt001 FROM "vefmmt001"
DISPLAY FORM vefmmt001
MENU
ON ACTION nuevo
CALL veprmt001_2()
ON ACTION buscar
call veprmf001_2()
ON ACTION salir
exit menu
END MENU
END MAIN
FUNCTION veprmt001_2()
DEFINE valor,valor1,t_valor,balance,credito DECIMAL(12,2)
DEFINE tipo_fact,p_bonif,ano_act,ano_fe,
cod_fact,pcod_transp,psec_transp SMALLINT,
ch_balance CHAR(14)
DEFINE hoy DATE
DEFINE hice,primera CHAR(1),
opt1,opt CHAR(7)
DEFINE tipo_f CHAR(2)
DEFINE tot_porc1,porc_desc,tot_porc DECIMAL(8,3)
LET hoy = today
DISPLAY hoy using "dd/mm/yyyy" AT 1,68 ATTRIBUTE (blue)
# 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 ch_fecha = TODAY USING "dd/mm/yyyy"
LET fact_gral.fecha_factura = ch_fecha
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 20
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 = 4
LET fact_gral.porc_itbi = NULL
LET fact_gral.prima_us = NULL
DISPLAY BY NAME fact_gral.porc_itbi,fact_gral.prima_us,descrip1
LET hice = "S"
LET h = 1
LABEL otravez:
INITIALIZE detalle TO NULL
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
LET ch_itbi = "N"
LET ch_servicios = "N"
LET ch_encabeza ="S"
LET ch_balance = NULL
LET descrip1 = NULL
LET factura_e = NULL
INPUT BY NAME ch_itbi,ch_encabeza,ch_servicios
AFTER INPUT
IF INT_FLAG THEN
LET opt = FGL_WINQUESTION("PREGUNTA","Desea Salir del Programa?","yes","Yes|no","question",0)
IF UPSHIFT(opt) = "YES" THEN
LET INT_FLAG = FALSE
RETURN
END IF
END IF
IF ch_itbi IS NULL THEN
ERROR "DEBE ESPECIFICAR PARAMETRO ITBIS"
CONTINUE INPUT
END IF
IF ch_encabeza IS NULL THEN
ERROR "DEBE ESPECIFICAR PARAMETRO ENCABEZADO"
CONTINUE INPUT
END IF
IF ch_servicios IS NULL THEN
ERROR "DEBE ESPECIFICAR PARAMETRO SERVICIOS"
CONTINUE INPUT
END IF
EXIT INPUT
END INPUT
LET codigodgii = NULL
LET descripcion_ncf=NULL
INPUT BY NAME fact_gral.*,factura_e WITHOUT DEFAULTS ATTRIBUTE (blue)
ON ACTION F8
LET mes_chequeo = MONTH(TODAY)
SET CONNECTION "MSSQL"
CALL anular()
ON ACTION bncf
IF fact_gral.tipo_cliente IS NOT NULL THEN
SELECT UNIQUE a.ncf INTO xncf FROM vetb00060 a
WHERE a.tipo_cliente = fact_gral.tipo_cliente
IF xncf ='S' THEN
CALL btipo_fact() RETURNING codigodgii,descripcion_ncf
ELSE
CALL fgl_Winmessage("ERROR","CLIENTE NO ES ELEJIBLE PARDA NCF","STOP")
END IF
END IF
DISPLAY BY NAME codigodgii,descripcion_ncf
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(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
}
BEFORE FIELD cod_cia
LET fact_gral.cod_cia = 1
LET compania = p_companias.nombre CLIPPED
LET fact_gral.cond_pago = 4
LET fact_gral.ventas = 1
# LET pcondicion = ui.ComboBox.forName("formonly.cond_pago")
CALL ccondicion()
LET pventas = ui.ComboBox.forName("formonly.ventas")
CALL cventas()
SELECT a.dias,a.descrip INTO condicion.dias,condicion.descrip
FROM vetb00012 a where
a.cond_pago = fact_gral.cond_pago
DISPLAY BY NAME fact_gral.cod_cia,fact_gral.cond_pago,compania,fact_gral.ventas
LET p_fecha_ven = fact_gral.fecha_factura + condicion.dias
DISPLAY BY NAME p_fecha_ven ATTRIBUTE(RED)
AFTER FIELD conduce
IF ch_servicios = "N" THEN
IF fact_gral.conduce IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD conduce
END IF
IF fact_gral.ventas = "1" THEN
LET tipo_f = "FT"
END IF
IF fact_gral.ventas = "2" THEN
LET tipo_f = "FE"
END IF
IF fact_gral.ventas = "3" THEN
LET tipo_f = "FE"
END IF
IF fact_gral.ventas = "4" THEN
LET tipo_f = "FE"
END IF
SELECT UNIQUE a.cod_sp,a.cod_sp_sec,
CAST(a.conduce_no AS INT),CONVERT(CHAR(10),a.fecha,103),
a.cod_transp,a.sec_transp
INTO fact_gral.tipo_cliente,fact_gral.sec_cliente,fact_gral.orden,fact_gral.fecha_conduce,
fact_gral.cod_transp,fact_gral.sec_transp
FROM iptb00006 a
WHERE a.num_doc = fact_gral.conduce AND
a.cod_mov = p_codigo AND a.status_t IS NULL AND
a.fecha > "01/01/2008"
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD conduce
END IF
DISPLAY BY NAME fact_gral.tipo_cliente,fact_gral.sec_cliente,fact_gral.orden,
fact_gral.cod_transp,fact_gral.sec_transp
SELECT a.nombre,a.limite_credito,a.cod_zona,a.cod_provincia,a.telefono
INTO fact_gral.nombre,credito,fact_gral.zona,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
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
LET fact_gral.direccion = descrip1 clipped,descrip2 clipped,", ",
descrip3 clipped
#CONTROL TIPO DE CLIENTES MONEDA
SELECT UNIQUE a.ncf INTO xncf FROM vetb00060 a
WHERE a.ventas = fact_Gral.ventas AND
a.tipo_cliente = fact_gral.tipo_cliente
IF STATUS = NOTFOUND THEN
LET numero_msg = 386
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
SELECT unique descrip INTO descrip1 FROM vetb00008
WHERE cod_zona = CAST(fact_gral.zona as smallint)
IF xncf ='S' THEN
IF codigodgii IS NULL THEN
CALL btipo_fact() RETURNING codigodgii,descripcion_ncf
DISPLAY BY NAME codigodgii,descripcion_ncf
END IF
# 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 conduce
END IF
END IF
END IF
SET CONNECTION "MSSQL"
# 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
DISPLAY BY NAME fact_gral.zona,fact_gral.direccion,fact_gral.nombre,fact_gral.ciudad,descrip1 ATTRIBUTE (blue)
# CONTROL DE REPETICION DE CONDUCES
SELECT UNIQUE CAST(a.conduce AS INT) FROM vetb00002 a
WHERE CAST(a.conduce AS INT) = fact_gral.conduce AND
a.ventas = fact_gral.ventas AND
a.fecha_factura > "01/01/2009" and
a.status_t IS NULL
IF STATUS != NOTFOUND THEN
LET numero_msg = 395
CALL msg(numero_msg)
NEXT FIELD conduce
END IF
END IF
BEFORE FIELD ventas
LET pventas = ui.ComboBox.forName("formonly.ventas")
CALL cventas()
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)
AFTER FIELD ventas
IF fact_gral.ventas IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
# BUSCA EL CODIGO DEL MOVIMIENTO
SELECT UNIQUE a.cod_mov INTO p_codigo FROM vetb00060 a
WHERE a.ventas = fact_gral.ventas
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
LET tipo_fact = p_codigo
IF fact_gral.ventas = "1" THEN
LET tipo_f = "FT"
ELSE
IF fact_gral.ventas = "2" THEN
LET tipo_f = "FE"
END IF
IF fact_gral.ventas = "3" THEN
LET tipo_f = "FE"
END IF
SELECT prima
INTO fact_gral.prima_us
FROM vetb00019 WHERE disponible = "S"
END IF
DISPLAY BY NAME fact_gral.porc_desc,fact_gral.prima_us,
fact_gral.porc_itbi ATTRIBUTE(BOLD)
DISPLAY BY NAME descrip1 ATTRIBUTE (BOLD)
LET fact_gral.factura = 0
SELECT ult_factura INTO fact_gral.factura FROM vetb00001
IF fact_gral.factura IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
RETURN
END IF
LET fact_gral.factura = fact_gral.factura + 1
DISPLAY BY NAME fact_gral.factura
DISPLAY BY NAME descrip1 ATTRIBUTE(blue)
AFTER FIELD factura
SELECT UNIQUE a.factura FROM vetb00002 a
WHERE a.factura = fact_gral.factura
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)
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(fact_gral.fecha_factura,usuarios) RETURNING bandera
IF bandera = 1 THEN
LET bandera = 0
NEXT FIELD fecha_factura
END IF
SELECT a.nombre,a.limite_credito,a.cod_zona,a.cod_provincia,a.telefono
INTO fact_gral.nombre,credito,fact_gral.zona,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
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
#CONTROL TIPO DE CLIENTES MONEDA
SELECT UNIQUE a.ventas FROM vetb00060 a
WHERE a.ventas = fact_Gral.ventas AND
a.tipo_cliente = fact_gral.tipo_cliente
IF STATUS = NOTFOUND THEN
LET numero_msg = 386
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
SELECT unique descrip INTO descrip1 FROM vetb00008
WHERE cod_zona = CAST(fact_gral.zona as smallint)
# 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,fact_gral.nombre
LET fact_gral.direccion = descrip1 clipped,descrip2 clipped,", ",
descrip3 clipped
DISPLAY BY NAME fact_gral.zona,fact_gral.direccion,fact_gral.nombre,fact_gral.ciudad,descrip1 ATTRIBUTE (blue)
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 pcondicion = ui.ComboBox.forName("formonly.cond_pago")
CALL ccondicion()
LET fact_gral.cond_pago = 4
DISPLAY BY NAME fact_gral.cond_pago
LET condicion.descrip = pcondicion.getitemtext(fact_gral.cond_pago)
SELECT a.dias INTO condicion.dias FROM vetb00012 a where
a.cond_pago = condicion.cond_pago
LET p_fecha_ven = fact_gral.fecha_factura + condicion.dias
DISPLAY BY NAME p_fecha_ven ATTRIBUTE(RED)
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)
}
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.cod_transp = pcod_transp
LET fact_gral.sec_transp = psec_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
IF fact_gral.ventas = "2" THEN
NEXT FIELD fecha_embarque
END IF
END IF
DISPLAY BY NAME fact_gral.cod_transp,fact_gral.sec_transp
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
LET pcod_transp = fact_gral.cod_transp
LET psec_transp = fact_gral.sec_transp
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
{ ES PARA PONER LA FACTURA COMERCIAL EN EL CAMPO PLACA 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.ventas = "2" THEN
IF fact_gral.fecha_embarque IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_embarque
END IF
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 fact_gral.fecha_embarque > fact_gral.fecha_factura THEN
LET numero_msg = 100
CALL msg(numero_msg)
NEXT FIELD fecha_embarque
END IF
{POR EL ASUNTO DE LA FACTURA COMERCIAL IF fact_gral.ventas = "2" THEN
EXIT INPUT
END IF
}
AFTER FIELD orden
IF fact_gral.orden IS NOT NULL THEN
LET pubicacion = NULL
LET documento_ref = NULL
SELECT UNIQUE CONVERT(char(10),a.fecha_oc,103),a.ubicacion,a.nombre_file,
a.cond_pago,b.descrip,b.dias,a.cotizacion_no
INTO
fact_gral.fecha_orden,pubicacion,documento_ref,
fact_gral.cond_pago,condicion.descrip,condicion.dias,
pcotizacion
FROM prtb00012 a,vetb00012 b
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.cond_pago = b.cond_pago 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
SELECT a.dias INTO condicion.dias FROM vetb00012 a
WHERE a.cond_pago = fact_gral.cond_pago
LET p_fecha_ven = fact_gral.fecha_factura + condicion.dias
DISPLAY BY NAME p_fecha_ven ATTRIBUTE(RED)
DISPLAY BY NAME fact_gral.fecha_orden,documento_ref,
fact_gral.cond_pago
LET porcentaje_n = 0
DISPLAY "porc ",porcentaje_n, 'cot ',pcotizacion
SELECT a.porc_negocio INTO porcentaje_n FROM vetb00086 a
WHERE a.cotizacion_no = pcotizacion
IF STATUS = NOTFOUND THEN
LET porcentaje_n = 0
END IF
BEFORE FIELD placa_transp
LET fact_Gral.placa_transp = aplaca_transp
LET p_fecha_ven = fact_gral.fecha_factura + condicion.dias
DISPLAY BY NAME fact_gral.placa_transp
DISPLAY BY NAME p_fecha_ven ATTRIBUTE(RED)
AFTER FIELD placa_transp
IF fact_gral.placa_transp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
END IF
LET aplaca_transp = fact_gral.placa_transp
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 xncf = 'S' AND codigodgii IS NULL THEN
CALL msg(391)
NEXT FIELD conduce
END IF
CALL prd(fact_gral.fecha_factura,usuarios) RETURNING bandera
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"
LET itbis_o = fact_gral.itbi
IF porcentaje_n > 0 THEN
LET fact_gral.porc_itbi = fact_gral.porc_itbi * (porcentaje_n /100)
END IF
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.prima_us = NULL
ELSE
IF fact_gral.ventas = "3" THEN
LET fact_gral.prima_us = NULL
ELSE
LET fact_gral.porc_itbi = NULL
IF fact_gral.prima_us IS NULL THEN
LET fact_gral.prima_us = 1
END IF
LET tipo_fact = 31
LET tipo_f = "FE"
END IF
END IF
END IF
LET fact_gral.factura = 0
SELECT ult_factura INTO fact_gral.factura FROM vetb00001
IF fact_gral.factura IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD factura
END IF
LET fact_gral.factura = fact_gral.factura + 1
SELECT UNIQUE a.factura FROM vetb00002 a
WHERE a.factura = fact_gral.factura
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 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
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 a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.cantidad_2,c.precio,c.porc_desc,a.secuencia
FROM prtb00013 AS a
INNER JOIN iptb00006 b ON b.conduce_no = a.num_oc and
b.num_doc = fact_gral.conduce and
b.cod_mov = p_codigo AND
a.area = b.area 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 AND
b.fecha > "01/01/2008"
INNER JOIN prtb00012 as d on
a.num_oc = d.num_oc
LEFT OUTER JOIN vetb00051 as c on
d.cotizacion_no = c.cotizacion_no and
a.cod_n = c.cod_n AND
a.area = c.area AND
a.cod_grupo = c.cod_grupo and
a.cod_tipo = c.cod_tipo and
a.cod_Sec = c.cod_Sec
WHERE a.num_oc = fact_gral.orden
ORDER BY a.secuencia,a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec
LET idx = 1
FOREACH buscame INTO fact_det[idx].area,
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].precio,
fact_det[idx].cantidad_2
IF fact_Det[idx].cantidad < 0 THEN
LET fact_det[idx].cantidad = fact_det[idx].cantidad * -1
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.*
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 a.descrip_esp,a.unidad_med
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 a.descrip_esp,a.unidad_med
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 a.descrip_esp,a.unidad_med
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 a.descrip_esp,a.unidad_med
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 a.descrip_esp,a.unidad_med
}
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 LEFT OUTER JOIN
iptb00006 b ON a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND
a.cod_tipo = b.cod_tipo AND
a.cod_sec = a.cod_sec
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
GROUP BY a.descrip_esp,a.unidad_med
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
{
#-> Busca la precio de la orden Abril 23, 2008
SELECT a.precio INTO fact_det[curr].precio FROM prtb00013 a
WHERE a.num_oc = fact_gral.orden
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 numero_msg =85
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
#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
{LA FACTURA NO AFECTA INVENTARIO POR TAL MOTIVO NO DEBE CONTROLAR EXISTENCIA
IF fact_det[curr].cod_n != 5 and
fact_det[curr].cod_n != 12 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 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 in(12,13) 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
display cant_vend," CANTIDAD PROD ",cant_prod
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 a.descrip_esp,a.unidad_med
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
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 "###,###,###.##"
# 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
LET opt = FGL_WINQUESTION("PREGUNTA","La Informacion Esta Correcta?","yes","yes|no","question",0)
{ PROMPT "Las Informaciones Estan Correctas (S/N)" FOR CHAR opt}
LET cuenta_arr = arr_count()
LET opt = UPSHIFT(opt)
IF opt = "YES" THEN
LABEL aqui:
LET verdad = "S"
LABEL anterior2:
LET opt1 = FGL_WINQUESTION("PREGUNTA","Desea Imprimir esta Factura ahora?","yes","yes|no","question",0)
LET opt1 = upshift(opt1)
LET impresion = opt1
IF fact_gral.ventas = "1" THEN
LET fact_gral.prima_us = 1
END IF
LET lleva_parcial = "N"
#-----------------------------------------------------------------------------------------
# CONSOLIDADO
SET CONNECTION "MSSQL"
SELECT ult_factura INTO fact_gral.factura FROM vetb00001
IF fact_gral.factura IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
RETURN
END IF
LET fact_gral.factura = fact_gral.factura + 1
DISPLAY fact_Gral.factura
DISPLAY BY NAME descrip1 ATTRIBUTE(blue)
LABEL brinca:
# Actualiza la tabla de datos generales de la factura
IF fact_gral.factura IS NOT NULL THEN
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,documento,placa_transporte)
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,factura_e,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,SUSER_SNAME(),GETDATE(),NULL,NULL,documento_ref,fact_gral.placa_transp)
# INSERTA EL DETALLE DE LA FACTURA
INSERT INTO vetb00048
VALUES (fact_gral.factura,observacion,null,SUSER_SNAME(),GETDATE(),
null,null)
# Actualiza la tabla control de la numeracion de la factura
UPDATE vetb00001 SET ult_factura = fact_gral.factura,
us_crea = SUSER_SNAME(),
fech_crea = GETDATE()
END IF
# Actualizacion de la tabla de cuentas por cobrar
IF fact_gral.cond_pago > 1 THEN
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, SUSER_SNAME(),GETDATE(), NULL, NULL)
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
FOR idx = 1 TO cuenta_arr
IF fact_det[idx].cantidad_2 IS NULL THEN
LET fact_det[idx].cantidad_2 = 0
END IF
IF fact_det[idx].cod_n IS NOT NULL THEN
INSERT INTO vetb00003
VALUES (fact_gral.cod_cia,fact_gral.factura,fact_det[idx].area,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,SUSER_SNAME(),GETDATE(),NULL,NULL)
# Actualizando la tabla de movimientos de inventario cuando la factura es
# normal o Tiene Cantidad a despachar
{ FACTURA NO AFECTA INVENTARIO EN FECHA :23/04/2008 POR JUAN SOTO
LET fact_det[idx].cantidad = fact_det[idx].cantidad * -1
IF fact_det[idx].cod_n != 5 and fact_det[idx].cod_n != 12 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,SUSER_SNAME(),GETDATE())
END IF
LET fact_det[idx].cantidad = fact_det[idx].cantidad * -1
LET cant_pend[idx] = cant_pend[idx] * -1
}
# Actualiza el campo placa cuando la factura es de exportacion
IF fact_gral.ventas = 2 THEN
UPDATE iptb00006 SET placa = fact_gral.placa_transp
WHERE num_doc = fact_gral.conduce AND cod_mov = 31
END IF
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 # cod_n IS NULL
END FOR
### ============================== IMPRESION CONSOLIDADO=============================
IF opt1 = "YES" THEN
#-> Valida si la factura realmente existe vg Sado 24 de Marzo de 2001
SELECT DISTINCT a.factura FROM vetb00002 a
WHERE a.factura = fact_gral.factura
IF STATUS = NOTFOUND THEN
GOTO regresa
END IF
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
START REPORT imp_fact TO archivo
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)
END IF
END FOR
DISPLAY nombre_m CLIPPED AT 1,1
FINISH REPORT imp_fact
RUN imprime
LET impresion = "S"
END IF
#-------------------------------------------------------------------------------
# EXTERIOR
IF xncf = 'S' THEN
LET otro_num = fact_gral.factura
{ SET CONNECTION "IFMX"
SELECT ult_factura INTO fact_gral.factura FROM vetb00001
LET fact_gral.factura = fact_gral.factura + 1
UPDATE vetb00001 SET ult_factura = fact_gral.factura
#===========================================================================
# INSERTA DOCUMENTO EN TRANSACCIONES NCF
INSERT INTO vetb00072 VALUES (fact_gral.factura,"FT",codigodgii,kncf,user,current)
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)
# INSERTA EL DETALLE DE LA FACTURA
INSERT INTO vetb00048
VALUES (fact_gral.factura,observacion,null,user,current,
null,null)
# 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
#-> 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
FOR idx = 1 TO cuenta_arr
IF fact_det[idx].cod_n IS NOT NULL THEN
INSERT INTO vetb00003
VALUES (fact_gral.cod_cia,fact_gral.factura,fact_Det[idx].area,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 IF
END FOR
##============================== IMPRESION EXTERIOR===============================
}
IF opt1 = "YES" THEN
#-> Valida si la factura realmente existe vg Sado 24 de Marzo de 2001
SET CONNECTION "MSSQL"
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
# TABLA RELACIONA EL DOCUMENTO CONSOLIDADO CON EL EXTERIOR
INSERT INTO cctb00020 (cod_cia,tipo_doc,num_oc,fecha,tipo_cliente,sec_cliente,
factura,valor_efectivo,num_trans,us_crea,fech_crea)
VALUES (fact_gral.cod_cia,tipo_f,otro_num,fact_gral.fecha_factura,
fact_gral.tipo_cliente,
fact_gral.sec_cliente,fact_gral.conduce,
fact_gral.total_fact,fact_gral.factura,user,current)
{ SET CONNECTION "IFMX"
START REPORT imp_fact1 TO archivo
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_fact1(fact_gral.*,fact_det[idx].*,tot_porc,
p_bonifica[idx],cod_fact)
END IF
END FOR
FINISH REPORT imp_fact1
RUN imprime
LET impresion = "S"
END IF #------------- TERMINA OPERACION EXTERIOR-------------
}
END IF
ELSE
GOTO regresa
END IF
# El programa de despacho es quien debe actualizar orden CALL actualiza_st(fact_gral.orden) #-> Actualiza el status de la orden de produccion vg
# Impresion de la factura
{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
INITIALIZE fact_Gral.* TO NULL
GOTO otravez
END FUNCTION
FUNCTION repite_codigo()
LET verdad = NULL
LET ant_art.area = fact_det[curr].area
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].area = ant_art.area AND
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
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 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)
DEFINE x RECORD
cod_cia LIKE vetb00002.cod_cia,
ventas LIKE vetb00002.ventas,
zona LIKE vetb00002.zona,
factura LIKE vetb00002.factura,
conduce LIKE vetb00002.conduce,
fecha_conduce LIKE vetb00002.fecha_conduce,
fecha_factura LIKE vetb00002.fecha_factura,
tipo_cliente LIKE vetb00002.tipo_cliente,
sec_cliente LIKE vetb00002.sec_cliente,
nombre CHAR(30),
direccion CHAR(80),
ciudad CHAR(20),
prima_us LIKE vetb00002.prima_us,
porc_desc LIKE vetb00002.porc_desc,
cond_pago LIKE vetb00002.cond_pago,
orden INT,
fecha_orden LIKE vetb00002.fecha_orden,
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 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
area SMALLINT,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp CHAR(50),
unidad_med CHAR(4),
cantidad DECIMAL(12,5),
precio DECIMAL(12,3),
cantidad_2 DEC(3,0),
monto_fact DECIMAL(12,3)
END RECORD,
Pcodigodgii LIKE vetb00071.codigo_dgii
DEFINE c_cajas,bonifica,cantidad_p INTEGER,
i,cod_f SMALLINT,
plado1,plado2,plado3,pcantidad,pmedida,total_unidades DEC(12,5)
DEFINE tot_b,tot_n,tot_m,peso_n,medida,peso_b DECIMAL(12,2),
ch_fech CHAR(20),
descripcion_area CHAR(30)
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 j,lj,h INTEGER,
etiqueta CHAR(30)
OUTPUT
TOP MARGIN 2
LEFT MARGIN 0
PAGE LENGTH 65
BOTTOM MARGIN 3
ORDER BY z.area,z.cod_n,z.cod_grupo,z.cod_tipo,z.cod_Sec
FORMAT
PAGE HEADER
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
# IF ch_encabeza = "S" THEN
# 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 "###"
# ELSE
# PRINT
# PRINT
# END IF
IF ch_encabeza = "S" THEN
PRINT COLUMN 4, normal,doble,"MARMOTECH, S. A."
ELSE
PRINT
END IF
SKIP 1 LINE
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,"CONDUCE ",x.factura using "&&&&&"
PRINT COLUMN 4, pubicacion,
COLUMN 50, "PAGINA NO. ",pageno USING "<<<"
PRINT comprimido
SELECT a.nom1_emp,a.apell1_emp INTO p_adtb03.nom1_emp,p_adtb03.apell1_emp
FROM adtb00003 a WHERE a.num_emp = fact_gral.sec_vend
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 = p_adtb03.nom1_emp
LET apellido_vend = NULL
END IF
PRINT "======================================================================================================",
"================================="
PRINT COLUMN 1, "SALIDA",
COLUMN 15, "ORDEN",
COLUMN 25, "FECHA",
COLUMN 38, "COTIZACION",
COLUMN 52, "FACTURA E",
COLUMN 65, "CONDICION",
COLUMN 80, "VENDEDOR",
COLUMN 113,"DOC.",
COLUMN 123, "FECHA FACTURA"
PRINT COLUMN 1, x.conduce USING "<<<<<",
COLUMN 14, x.orden using "&&&&&&",
COLUMN 25, x.fecha_orden using "dd/mm/yyyy",
COLUMN 38, pcotizacion USING "&&&&&&",
COLUMN 50, factura_e USING "&&&&&&",
# COLUMN 65, pcondicion.getitemtext(x.cond_pago) CLIPPED,
COLUMN 65, condicion.descrip[1,14],
COLUMN 80, "(",x.sec_vend using "&&&&",") ",x.nombre_vend[1,20],
COLUMN 113, documento_ref[1,10],
COLUMN 126, x.fecha_factura using "dd/mm/yyyy"
PRINT COLUMN 65, condicion.descrip[15,30]
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 "======================================================================================================",
"================================="
BEFORE GROUP OF z.area
SELECT a.nombre_area INTO descripcion_area
FROM prtb00016 a
WHERE a.area_num=Z.area
PRINT "AREA: (",z.area USING "<<<",")",descripcion_area
SKIP 1 LINE
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
DECLARE busca_d1 CURSOR FOR
SELECT a.etiqueta,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida
FROM iptb00025 a
WHERE a.area = z.area AND
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 AND
a.cod_mov = p_codigo AND
a.num_Doc = x.conduce
LET total_unidades = 0
FOREACH busca_d1 INTO etiqueta,plado1,plado2,plado3,pcantidad,pmedida
PRINT COLUMN 53,pcantidad USING "<<<,<<<"," ",etiqueta clipped," DE ",plado1 USING "<<.#####"," X ",
plado2 USING "<<.#####"," X ",plado3 USING "<<.#####"," = ",pmedida USING "<<<.#####"
LET total_unidades = total_unidades + pcantidad
END FOREACH
# IF total_unidades > 0 THEN
# PRINT COLUMN 53, "TOTAL UNIDADES ",total_unidades USING "<,<<<"
#END IF
ON LAST ROW
# Impresion de informaciones que pertenecen a facturas de exportacion
IF x.ventas = "2" THEN
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 119, x.total_fact using "USD$###,###,###.##"
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
END IF
# Impresion de datos que concierne solamente a tipos de facturas locales
IF x.ventas = "1" THEN
IF x.ventas = "1" THEN
IF x.desc_valor <> 0 THEN
SKIP 1 LINE
PRINT COLUMN 78, "VALOR BRUTO ",
COLUMN 122, x.sub_total using "###,###,###.##"
PRINT COLUMN 77, x.porc_desc using "##"," %DESCUENTO",
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 "###.##","%"," ITBIS",
COLUMN 122, x.itbi using "###,###,###.##"
END IF
PRINT COLUMN 122, "--------------"
PRINT COLUMN 78, "VALOR NETO ",
COLUMN 122, x.total_fact using "###,###,###.##"
PRINT COLUMN 122, "=============="
END IF
END IF
IF x.ventas = "3" THEN
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 122, x.sub_total-x.desc_valor using "###,###,###.##"
IF x.porc_itbi > 0 THEN
PRINT COLUMN 61, porcentaje_n USING "###.##","%/ ",itbis_o USING "###.##","% ",
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
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
PRINT COLUMN 3, " ",UPSHIFT(obs2) CLIPPED
PRINT COLUMN 3, " ",UPSHIFT(obs3) CLIPPED
PRINT COLUMN 3, " ",UPSHIFT(obs4) CLIPPED
SKIP 3 LINES
PRINT COLUMN 4, "NOMBRE TRANSPORTISTA: ",x.nombre_tran, " ",
"CEDULA: ",p_cedula using "&&&&&&&&&",
" SERIE: ",p_serie using "&&&"
IF x.ventas = "2" THEN
PRINT COLUMN 4, "FACTURA COMERCIAL: ",x.placa_transp
ELSE
PRINT COLUMN 4, "PLACA DEL VEHICULO: ",x.placa_transp
END IF
{
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
##========================== REPORTE EXTERIOR ==================================
REPORT imp_fact1(x,z,porciento,bonifica,cod_f)
DEFINE x RECORD
cod_cia LIKE vetb00002.cod_cia,
ventas LIKE vetb00002.ventas,
zona LIKE vetb00002.zona,
factura LIKE vetb00002.factura,
conduce LIKE vetb00002.conduce,
fecha_conduce LIKE vetb00002.fecha_conduce,
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,
cond_pago LIKE vetb00002.cond_pago,
orden INT,
fecha_orden LIKE vetb00002.fecha_orden,
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 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
area SMALLINT,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp CHAR(50),
unidad_med CHAR(4),
cantidad DECIMAL(12,5),
precio DECIMAL(12,3),
cantidad_2 DEC(3,0),
monto_fact DECIMAL(12,3)
END RECORD,
Pcodigodgii LIKE vetb00071.codigo_dgii
DEFINE c_cajas,bonifica,cantidad_p INTEGER,
i,cod_f SMALLINT,
plado1,plado2,plado3,pcantidad,pmedida,total_unidades DEC(12,5),
descripcion_Area CHAR(30)
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 j,lj,h,pncf INTEGER
OUTPUT
TOP MARGIN 2
LEFT MARGIN 0
PAGE LENGTH 65
BOTTOM MARGIN 3
ORDER BY z.area,z.cod_n,z.cod_grupo,z.cod_tipo,z.cod_Sec
FORMAT
PAGE HEADER
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
SELECT a.nom1_emp,a.apell1_emp INTO p_adtb03.nom1_emp,p_adtb03.apell1_emp
FROM adtb00003 a WHERE a.num_emp = fact_gral.sec_vend
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.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 = p_adtb03.nom1_emp
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 "======================================================================================================",
"================================="
BEFORE GROUP OF z.area
SELECT a.nombre_area INTO descripcion_area
FROM prtb00016 a
WHERE a.area_num=Z.area
PRINT "AREA: (",z.area USING "<<<",")",descripcion_area
SKIP 1 LINE
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
PRINT COLUMN 122,"--------------"
PRINT COLUMN 78, "VALOR BRUTO ",
COLUMN 122, x.sub_total using "###,###,###.##"
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
BEFORE FIELD documento
LET pagos.documento = 0
SELECT ult_recibo INTO pagos.documento FROM cctb00003 WHERE tipo_doc = "PC"
IF pagos.documento IS NULL THEN
LET pagos.documento = 0
END IF
LET pagos.documento = pagos.documento + 1
DISPLAY BY NAME pagos.documento
#NEXT FIELD detalle
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
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,SUSER_SNAME(),GETDATE(),NULL, NULL)
LET fact_gral.total_fact = fact_gral.total_fact * -1
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
START REPORT volante TO archivo
OUTPUT TO REPORT volante(fact_gral.*,pagos.*,descrip1,descrip2)
FINISH REPORT volante
RUN imprime
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,
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,
cond_pago LIKE vetb00002.cond_pago,
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)
INPUT BY NAME fact_gral.cod_cia,p_fact_no
AFTER FIELD p_fact_no
SELECT UNIQUE CONVERT(CHAR(10),a.fecha_factura,103),a.orden,a.tipo_cliente,a.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 a
WHERE a.factura = p_fact_no AND a.status_t IS NULL AND
a.fech_crea >'01/01/2009' and a.cod_cia = fact_Gral.cod_cia
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,
fact_gral.fecha_factura ATTRIBUTE(blue)
#CONTROL DEVOLUCIONES
SELECT DISTINCT a.fact_no FROM iptb00006 a
# WHERE a.cod_mov in (12,13) and CONVERT(int,a.fact_no) = p_fact_no AND
WHERE a.cod_mov in (12,13) and a.fact_no = p_fact_no AND
a.fecha > '01/01/2009' and
a.status_t IS NULL
IF STATUS != NOTFOUND THEN
LET numero_msg =138
CALL msg(numero_msg)
NEXT FIELD p_fact_no
END IF
LET p_fechas = fact_gral.fecha_factura
{ SELECT UNIQUE a.usuario INTO p_usuario FROM seg0001 a
WHERE a.usuario = SUSER_SNAME()
IF p_usuario = "rsierra" 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(fact_gral.fecha_factura,usuarios) RETURNING bandera
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT INPUT
END IF
LET opt3 = FGL_WINQUESTION("PREGUNTA","Esta seguro de Anular Esta Factura?","yes","Yes|no","question",0)
LET opt3 = UPSHIFT(opt3)
IF opt3 = "YES" THEN
UPDATE vetb00002 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE factura = p_fact_no AND fech_crea > '01/01/2009'
and cod_cia = fact_Gral.cod_cia
{ EN COMENTARIO PORQUE ESTE PROGRAMA NO ACTUALIZA INVENTARIO
UPDATE iptb00006 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
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 and cod_cia = fact_Gral.cod_cia
}
UPDATE vetb00003 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE factura = p_fact_no AND fech_crea > '01/01/2009'
and cod_cia = fact_Gral.cod_cia
UPDATE cctb00001 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE num_doc = p_fact_no AND (tipo_doc = "FT" or tipo_doc = "FE") AND
fech_crea > '01/01/2009' and cod_cia = fact_Gral.cod_cia
UPDATE cctb00001 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE aplica_a = p_fact_no AND tipo_doc = "PC" and
fech_crea > '01/01/2009' and cod_cia = fact_Gral.cod_cia
# 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 = SUSER_SNAME(), fech_mod = GETDATE()
WHERE factura = p_fact_no AND cod_mov = p_codigo
SELECT UNIQUE a.ncf INTO xncf FROM vetb00060 a
WHERE a.tipo_cliente = fact_gral.tipo_cliente
IF xncf ='S' THEN
LET otro_num = p_fact_no
SELECT a.num_trans INTO p_fact_no FROM cctb00020 a
WHERE a.tipo_doc IN ("FT","FE") AND a.num_oc =otro_num
SET CONNECTION "IFMX"
UPDATE vetb00002 SET status_t = "E",
us_mod = 'lpinales',
fech_mod = CURRENT
WHERE factura = p_fact_no AND fech_crea > '01/01/2009'
and cod_cia = fact_Gral.cod_cia
UPDATE vetb00072 SET status_t = "E",
us_mod = 'lpinales',
fech_mod = CURRENT
WHERE documento = p_fact_no AND tipo_doc IN ("FT","FE")
and cod_cia = fact_Gral.cod_cia
UPDATE iptb00006 SET status_t = "E",
us_mod = 'lpinales',
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 and cod_cia = fact_Gral.cod_cia
UPDATE vetb00003 SET status_t = "E",
us_mod = 'lpinales',
fech_mod = current
WHERE factura = p_fact_no
and cod_cia = fact_Gral.cod_cia
UPDATE cctb00001 SET status_t = "E",
us_mod = 'lpinales',
fech_mod = current
WHERE num_doc = p_fact_no AND (tipo_doc = "FT" or tipo_doc = "FE")
and cod_cia = fact_Gral.cod_cia AND
fech_crea > datetime (2006-03-31 08:00) year to minute
UPDATE cctb00001 SET status_t = "E",
us_mod = 'lpinales',
fech_mod = current
WHERE aplica_a = p_fact_no AND tipo_doc = "PC" and cod_cia = fact_Gral.cod_cia
END IF
LET numero_msg = 82
CALL msg(numero_msg)
EXIT INPUT
ELSE
CONTINUE INPUT
END IF
EXIT INPUT
END INPUT
# Este Int_flag es porque tuve que salir del input con el int_flag verdadero
# y asi poder salir del window sin problemas
LET fact_gral.fecha_factura = TODAY
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 > "31122006"
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,null,prtb09.pendiente,
prtb09.detalle,NULL,SUSER_SNAME(),GETDATE(),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 despiece()
OPEN WINDOW despieza AT 15,5 WITH FORM "vefmwd017"
END FUNCTION
FUNCTION despiecerow()
DEFINE plado1,plado2,plado3,pcantidad,pmedida DEC(15,4)
DECLARE despiecer CURSOR FOR
SELECT a.etiqueta,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida
FROM iptb00025 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 AND
a.cod_mov = p_codigo AND
a.num_Doc = x.conduce
LET total_unidades = 0
FOREACH despiecer INTO etiqueta,plado1,plado2,plado3,pcantidad,pmedida
}
FUNCTION ccondicion()
LET pcondicion = ui.combobox.forname("formonly.cond_pago")
DECLARE bcondicion CURSOR FOR
SELECT a.cond_pago,a.descrip,a.dias FROM vetb00012 a
CALL pcondicion.clear()
FOREACH bcondicion INTO condicion.cond_pago,condicion.descrip,condicion.dias
CALL pcondicion.additem(condicion.cond_pago,condicion.descrip)
END FOREACH
END FUNCTION
FUNCTION veprmf001_2()
DEFINE tot_porc dec(8,2),
cod_fact smallint
CONSTRUCT criterio ON a.factura,a.fecha_factura,a.tipo_cliente,a.sec_cliente,a.orden,
a.cod_vend
FROM factura,fecha_factura,tipo_cliente,sec_cliente,orden,
factura_e
LET selec =
" SELECT a.cod_cia,a.ventas,a.zona,a.factura,a.conduce,convert(char(10),a.fecha_conduce,103),convert(char(10),a.fecha_factura,103),a.tipo_cliente, ",
" a.sec_cliente,g.nombre,RTRIM(b.calle) + ' ' + RTRIM(b.casa_num) + ' ' + RTRIM(b.barrio), ",
" l.nombre_provincia,a.prima_us,a.porc_Desc,a.cond_pago,a.orden,convert(char(10),a.fecha_orden,103),a.porc_itbi,a.sec_vend, ",
" RTRIM(d.nom1_emp) + ' ' + RTRIM(d.apell1_emp),' ', ' ',' ',' ', ",
" convert(char(10),a.fecha_embarque,103),' ',a.sub_total,a.monto_Desc, ",
" a.monto_itbi,a.neto,a.cod_vend,a.documento ",
" FROM vetb00002 a left outer join ",
" vetb00005 b on a.tipo_cliente = b.tipo_cliente and a.sec_cliente = b.sec_cliente , ",
" vetb00004 g, adtb00003 d,vetb00060 k,vetb00020 l ",
" WHERE a.ventas = k.ventas and a.tipo_cliente = k.tipo_cliente and ",
" a.tipo_cliente = g.tipo_cliente and ", criterio CLIPPED," and ",
" a.sec_cliente = g.sec_cliente and ",
" g.cod_provincia =l.cod_provincia and ",
" a.sec_vend = d.num_emp and a.status_t IS NULL ",
" ORDER BY a.factura "
PREPARE comando FROM selec
DECLARE consulta SCROLL CURSOR FOR comando
OPEN consulta
FETCH FIRST consulta INTO fact_gral.*,factura_e,documento_ref
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL informacion(fact_gral.conduce,fact_gral.ventas)
LET pcondicion = ui.ComboBox.forName("formonly.cond_pago")
CALL ccondicion()
DISPLAY BY NAME fact_gral.*,factura_e,documento_ref
MENU "NAVEGACION:"
COMMAND "Siguiente"
FETCH NEXT consulta iNTO fact_Gral.*,factura_e
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL informacion(fact_gral.conduce,fact_gral.ventas)
LET pcondicion = ui.ComboBox.forName("formonly.cond_pago")
CALL ccondicion()
DISPLAY BY NAME fact_gral.*,factura_e,documento_ref
COMMAND "Anterior"
FETCH PREVIOUS consulta iNTO fact_Gral.*,factura_e
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL informacion(fact_gral.conduce,fact_gral.ventas)
LET pcondicion = ui.ComboBox.forName("formonly.cond_pago")
CALL ccondicion()
DISPLAY BY NAME fact_gral.*,factura_e,documento_ref
COMMAND "Primero"
FETCH FIRST consulta iNTO fact_Gral.*,factura_e
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL informacion(fact_gral.conduce,fact_gral.ventas)
LET pcondicion = ui.ComboBox.forName("formonly.cond_pago")
CALL ccondicion()
DISPLAY BY NAME fact_gral.*,factura_e,documento_ref
COMMAND "Ultimo"
FETCH LAST consulta iNTO fact_Gral.*,factura_e
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL informacion(fact_gral.conduce,fact_gral.ventas)
LET pcondicion = ui.ComboBox.forName("formonly.cond_pago")
CALL ccondicion()
DISPLAY BY NAME fact_gral.*,factura_e,documento_ref
COMMAND "ITEMS"
LET ch_encabeza ="S"
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
START REPORT imp_fact TO archivo
LET selec =
"SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,b.descrip_esp,b.unidad_med, ",
" a.cantidad,a.precio,a.cantidad_2,(a.cantidad*a.precio)*(a.cantidad_2/100), ",
" (a.cantidad*a.precio) -(a.cantidad*a.precio)*(a.cantidad_2/100) ",
" FROM vetb00003 a,iptb00002 b ",
" WHERE a.factura = ? 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 ",
" UNION ",
"SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,b.descrip_esp,b.unidad_med, ",
" a.cantidad,a.precio,a.cantidad_2,(a.cantidad*a.precio)*(a.cantidad_2/100), ",
" (a.cantidad*a.precio) -(a.cantidad*a.precio)*(a.cantidad_2/100) ",
" FROM historicomtech.dbo.vetb00003 a,historicomtech.dbo.iptb00002 b ",
" WHERE a.factura = ? 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 "
PREPARE cmdfact FROM selec
DECLARE busca_items CURSOR FOR cmdfact
OPEN busca_items USING fact_gral.factura,fact_gral.factura
LET idx = 1
FOREACH busca_items INTO fact_Det[idx].*
LET valor_Desc = (fact_det[idx].cantidad * fact_det[idx].precio) * (fact_Det[idx].cantidad_2 / 100)
IF valor_desc IS NULL THEN
LET valor_desc = 0
END IF
LET fact_det[idx].monto_fact = (fact_Det[idx].precio * fact_det[idx].cantidad)- valor_desc
LET cod_fact = 1
LET p_bonifica[idx] = 0
OUTPUT TO REPORT imp_fact(fact_gral.*,fact_det[idx].*,tot_porc,
p_bonifica[idx],cod_fact)
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
DISPLAY ARRAY fact_det TO s_fact.*
FINISH REPORT imp_fact
IF int_flag THEN
LET numero_msg = 3
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
RUN imprime
COMMAND "Retornar"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION