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

2798 lines
97 KiB
Plaintext

{
--------------------------------------------------------------------------
PROGRAMA : VEPRMT022
OBJETIVO : Este programa captura la factura comercial PUNTO DE VENTAS
REALIZADO POR : Ing. Juan Fco. Soto.
FECHA : Septiembre 1, 2014.
--------------------------------------------------------------------------
}
GLOBALS
"veprgb000.4gl"
DEFINE localidad,mes_chequeo SMALLINT,
p_nombre_tipo CHAR(50)
DEFINE porce,valor_desc,cant_prod,cant_vend,itbis_o DECIMAL (8,2),
descrip_ventas CHAR(30),
att dynamic array of record
col1 string,
col2 string,
col3 string,
col4 string,
col5 string,
col6 string,
col7 string,
col8 string,
col9 string
end record
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),
sucnombre,xnombre_proyecto VARCHAR(50)
DEFINE lleva_parcial,ch_itbi,ch_encabeza CHAR(1),
pcotizacion,cuenta_arr INTEGER,
observacion CHAR(180) ,
obs1,obs2,obs3 CHAR(50),obs4 CHAR(30),
chexistencia CHAR(2),
vexistencia DEC(12,4)
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 "vefmmt022"
DISPLAY FORM vefmmt001
MENU
ON ACTION nuevo
CALL inicializa()
CALL veprmt022()
ON ACTION buscar
CALL inicializa()
call veprmf022()
ON ACTION salir
exit menu
END MENU
END MAIN
FUNCTION veprmt022()
DEFINE t_valor,credito DECIMAL(12,2)
DEFINE tipo_fact,p_bonif,ano_act,ano_fe,
cod_fact,pcod_transp,psec_transp SMALLINT
DEFINE hoy DATE
DEFINE hice,primera CHAR(1),
opt1,opt CHAR(7)
DEFINE pfacturar,tipo_f CHAR(2)
DEFINE tot_porc1,porc_desc,tot_porc DECIMAL(8,3)
DIALOG ATTRIBUTE(UNBUFFERED,FIELD ORDER FORM)
INPUT BY NAME fact_gral1.*,factura_e ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE INPUT
LET codigodgii = NULL
LET descripcion_ncf=NULL
LET fact_gral1.fecha_factura = TODAY
INITIALIZE fact_gral1.*,primera TO NULL
LET porc_desc = 0
LET descrip1 = NULL
LET descrip2 = NULL
LET p_bonif = NULL
LET fact_gral1.cod_cia = 1
LET ch_fecha = TODAY USING "dd/mm/yyyy"
LET fact_gral1.fecha_factura = ch_fecha
LET tot_porc1 = 0
LET fact_gral1.itbi = 0
LET fact_gral1.sub_total = 0
LET fact_gral1.total_fact = 0
LET fact_gral1.desc_valor = 0
LET tot_porc = 0
DISPLAY BY NAME descrip1
CALL fact_det1.clear()
LET descrip1 = NULL
LET descrip2 = NULL
LET descrip3 = NULL
LET p_bonif = NULL
LET tot_porc1 = 0
LET t_valor = 0
LET fact_gral1.cond_pago = 4
LET fact_gral1.porc_itbi = NULL
LET fact_gral1.prima_us = NULL
DISPLAY BY NAME fact_gral1.porc_itbi,fact_gral1.prima_us,descrip1,fact_gral1.tipo_cliente,fact_gral1.sec_cliente,
fact_gral1.fecha_conduce,fact_gral1.ciudad
LET hice = "S"
LET h = 1
INITIALIZE detalle TO NULL
LET fact_gral1.itbi = 0
LET fact_gral1.sub_total = 0
LET fact_gral1.total_fact = 0
LET fact_gral1.desc_valor = 0
LET pcondicion = ui.combobox.forname("formonly.cond_pago")
CALL ccondicion()
ON ACTION F8
LET mes_chequeo = MONTH(TODAY)
SET CONNECTION "MSSQL"
CALL anular()
ON ACTION bncf
IF fact_gral1.tipo_cliente IS NOT NULL THEN
SELECT UNIQUE a.ncf INTO xncf FROM vetb00060 a
WHERE a.tipo_cliente = fact_gral1.tipo_cliente
IF xncf ='S' THEN
CALL btipo_fact(localidad) 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 orden
BEFORE FIELD cod_transp
LET fact_gral1.cod_transp = pcod_transp
LET fact_gral1.sec_transp = psec_transp
LET fact_gral1.nombre_tran = NULL
LET p_cedula = NULL
LET p_serie = NULL
IF fact_gral1.cond_pago = 1 or fact_gral1.ventas = "2" THEN
IF fact_gral1.ventas = "2" THEN
NEXT FIELD fecha_embarque
END IF
END IF
DISPLAY BY NAME fact_gral1.cod_transp,fact_gral1.sec_transp
AFTER FIELD cod_transp
IF fact_gral1.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_gral1.sec_transp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
#NEXT FIELD sec_transp
ELSE
LET fact_gral1.nombre_tran = NULL
LET p_cedula = NULL
LET p_serie = NULL
SELECT a.nombre,a.cedula,a.serie
INTO fact_gral1.nombre_tran,p_cedula,p_serie FROM vetb00015 a
WHERE a.cod_transp = fact_gral1.cod_transp AND
a.sec_transp = fact_gral1.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_gral1.nombre_tran ATTRIBUTE (blue)
END IF
LET pcod_transp = fact_gral1.cod_transp
LET psec_transp = fact_gral1.sec_transp
AFTER FIELD cod_tarifa
IF fact_gral1.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_gral1.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
AFTER FIELD fecha_embarque
IF fact_gral1.ventas = "2" THEN
IF fact_gral1.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_gral1.fecha_embarque)
IF fact_gral1.fecha_embarque > fact_gral1.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_gral1.ventas = "2" THEN
EXIT INPUT
END IF
}
AFTER FIELD num_req
IF fact_gral1.num_req IS NULL THEN
CALL msg(16)
NEXT FIELD num_req
END IF
LET pubicacion = NULL
LET documento_ref = NULL
SELECT UNIQUE CONVERT(char(10),a.fecha_oc,103),a.ubicacion,a.nombre_file,
b.descrip,b.dias,a.cotizacion_no,a.tipo_cliente,
a.sec_cliente,a.sec_vend,c.ventas,c.cond_pago,c.ventas
INTO
fact_gral1.fecha_orden,pubicacion,documento_ref,
condicion.descrip,condicion.dias,
pcotizacion,fact_gral1.tipo_cliente,fact_gral1.sec_cliente,fact_gral1.sec_vend,fact_gral1.ventas,
fact_gral1.cond_pago,fact_gral1.ventas
FROM cctb00026 d,prtb00012 a,vetb00012 b,vetb00050 c
WHERE d.num_req = fact_gral1.num_req AND
a.num_oc = d.num_oc AND
c.cond_pago = b.cond_pago AND
d.cotizacion_no = c.cotizacion_no AND
a.cotizacion_no = c.cotizacion_no AND
d.estado = "AUTORIZADA" AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD orden
END IF
SELECT UNIQUE a.num_req FROM vetb00002 a
WHERE a.num_req = fact_gral1.num_req AND
a.status_t IS NULL
IF STATUS <> NOTFOUND THEN
CALL msg(12)
NEXT FIELD num_req
END IF
LET pcotizacion = documento_ref
LET porcentaje_n = 0
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
SELECT prima,@itbi,porciento
INTO fact_gral1.prima_us,fact_gral1.porc_itbi,porce
FROM vetb00019 WHERE disponible = "S"
LET itbis_o = fact_gral1.itbi
IF porcentaje_n > 0 THEN
LET fact_gral1.porc_itbi = fact_gral1.porc_itbi * (porcentaje_n /100)
END IF
SELECT a.nom1_emp||' '||a.apell1_emp
INTO fact_gral1.nombre_vend
FROM adtb00003 a
WHERE a.num_emp = fact_gral1.sec_vend
SELECT a.nombre,a.limite_credito,a.cod_zona,a.cod_provincia,a.telefono
INTO fact_gral1.nombre,credito,fact_gral1.zona,codigo_provincia,
cliente_bas.telefono
FROM vetb00004 a
WHERE a.tipo_cliente = fact_gral1.tipo_cliente AND
a.sec_cliente = fact_gral1.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_gral1.tipo_cliente AND
b.sec_cliente = fact_gral1.sec_cliente
SELECT d.nombre_provincia INTO fact_gral1.ciudad
FROM vetb00020 d
WHERE d.cod_provincia = codigo_provincia
LET fact_gral1.direccion = descrip1 clipped,descrip2 clipped,", ",
descrip3 clipped
IF fact_gral1.ventas = "1" THEN
LET tipo_f = "FT"
END IF
IF fact_gral1.ventas = "2" THEN
LET tipo_f = "FE"
END IF
IF fact_gral1.ventas = "3" THEN
LET tipo_f = "FE"
END IF
IF fact_gral1.ventas = "4" THEN
LET tipo_f = "FE"
END IF
#CONTROL TIPO DE CLIENTES MONEDA
SELECT UNIQUE a.ncf,b.descripcion,a.facturar_punto_ventas
INTO xncf,descrip_ventas,pfacturar
FROM vetb00060 a,vetb00061 b
WHERE a.ventas = fact_gral1.ventas AND
a.ventas = b.ventas AND
a.tipo_cliente = fact_gral1.tipo_cliente
IF STATUS = NOTFOUND THEN
LET numero_msg = 386
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
IF pfacturar = "NO" THEN
CALL fgl_winmessage("ERROR","ESTE TIPO DE CLIENTE NO SE PUEDE FACTURAR EN EL PUNTO DE VENTAS","INFO")
NEXT FIELD orden
END IF
SELECT unique descrip INTO descrip1 FROM vetb00008
WHERE cod_zona = CAST(fact_gral1.zona as smallint)
IF xncf ='S' THEN
IF codigodgii IS NULL THEN
CALL btipo_fact(localidad) RETURNING codigodgii,descripcion_ncf
DISPLAY BY NAME codigodgii,descripcion_ncf
END IF
END IF
LET fact_gral1.cod_transp = NULL
LET fact_gral1.sec_transp = NULL
DISPLAY BY NAME fact_gral1.zona,fact_gral1.direccion,fact_gral1.nombre,fact_gral1.ciudad,descrip1,
fact_gral1.direccion,fact_gral1.nombre_vend,
pcotizacion,descrip_ventas,fact_gral1.tipo_cliente,fact_gral1.sec_cliente,
fact_gral1.cond_pago,fact_gral1.sec_vend,pcotizacion,
fact_gral1.ventas
SET CONNECTION "MSSQL"
SELECT a.dias INTO condicion.dias FROM vetb00012 a
WHERE a.cond_pago = fact_gral1.cond_pago
LET p_fecha_ven = fact_gral1.fecha_factura + condicion.dias
DISPLAY BY NAME p_fecha_ven ATTRIBUTE(RED)
DISPLAY BY NAME fact_gral1.fecha_orden,documento_ref,
fact_gral1.cond_pago
LET porcentaje_n = 0
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_gral1.placa_transp = aplaca_transp
LET p_fecha_ven = fact_gral1.fecha_factura + condicion.dias
DISPLAY BY NAME fact_gral1.placa_transp
DISPLAY BY NAME p_fecha_ven ATTRIBUTE(RED)
AFTER FIELD placa_transp
IF fact_gral1.placa_transp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
END IF
LET aplaca_transp = fact_gral1.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_gral1.factura AND
cod_mov = p_codigo
RETURN
END IF
IF fact_gral1.fecha_factura IS NULL THEN
LET fact_gral1.fecha_factura = TODAY
DISPLAY BY NAME fact_gral1.fecha_factura
END IF
LET p_fechas = fact_gral1.fecha_factura
LET hoy = fact_gral1.fecha_factura
IF xncf = 'S' AND codigodgii IS NULL THEN
CALL msg(391)
NEXT FIELD conduce
END IF
CALL prd(fact_gral1.fecha_factura,usuarios) RETURNING bandera
IF bandera = 1 THEN
LET bandera = 0
NEXT FIELD fecha_factura
END IF
IF fact_gral1.ventas IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
IF fact_gral1.ventas = "1" THEN
IF fact_gral1.porc_itbi IS NULL THEN
LET fact_gral1.porc_itbi = 0
END IF
LET tipo_fact = 30
LET tipo_f = "FT"
LET fact_gral1.prima_us = NULL
ELSE
IF fact_gral1.ventas = "3" THEN
LET fact_gral1.prima_us = NULL
ELSE
LET fact_gral1.porc_itbi = NULL
IF fact_gral1.prima_us IS NULL THEN
LET fact_gral1.prima_us = 1
END IF
LET tipo_fact = 31
LET tipo_f = "FE"
END IF
END IF
DISPLAY BY NAME fact_gral1.prima_us,fact_gral1.porc_itbi ATTRIBUTE(BOLD)
DISPLAY BY NAME descrip1 ATTRIBUTE (BOLD)
IF fact_gral1.sec_cliente IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
IF fact_gral1.cond_pago IS NULL THEN
CALL msg(16)
NEXT FIELD cond_pago
END IF
LET fact_gral1.itbi = 0
LET fact_gral1.sub_total = 0
LET fact_gral1.total_fact = 0
LET fact_gral1.desc_valor = 0
LET tot_porc = 0
LET vexistencia = 0
DECLARE buscame CURSOR FOR
SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,a.cantidad,
c.precio,c.porc_desc
FROM cctb00026 AS a
INNER JOIN iptb00002 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 = b.cod_Sec
inner JOIN vetb00051 as c on
c.cotizacion_no = a.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_req = fact_gral1.num_req
ORDER BY a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec
LET idx = 1
FOREACH buscame INTO fact_det1[idx].area,
fact_det1[idx].cod_n,
fact_det1[idx].cod_grupo,
fact_det1[idx].cod_tipo,
fact_det1[idx].cod_sec,
fact_det1[idx].descrip_esp,
fact_det1[idx].cantidad,
fact_det1[idx].precio,
fact_det1[idx].cantidad_2
IF fact_det1[idx].cantidad < 0 THEN
LET fact_det1[idx].cantidad = fact_det1[idx].cantidad * -1
END IF
LET fact_det1[idx].bodega=pbodega
LET vexistencia = 0
{ CONTROL EXISTENCIA SELECT a.control_existencia INTO chexistencia FROM iptb00002 a
WHERE a.cod_n = fact_det1[idx].cod_n AND
a.cod_grupo = fact_det1[idx].cod_grupo AND
a.cod_tipo = fact_det1[idx].cod_tipo AND
a.cod_sec = fact_det1[idx].cod_sec
IF chexistencia = "SI" THEN
CALL existencia(fact_det1[idx].cod_n,fact_det1[idx].cod_grupo,
fact_det1[idx].cod_tipo,fact_det1[idx].cod_sec,fact_det1[idx].cantidad,
idx,fact_det1[idx].bodega)
RETURNING vexistencia
LET fact_det1[idx].existencia=vexistencia
END IF
}
LET fact_gral1.sub_total = (fact_det1[idx].cantidad * fact_det1[idx].precio)+fact_gral1.sub_total
LET fact_gral1.desc_valor = ((fact_det1[idx].cantidad * fact_det1[idx].precio) * (fact_det1[idx].cantidad_2/100)) +
fact_gral1.desc_valor
LET fact_gral1.itbi = (fact_gral1.sub_total - fact_gral1.desc_valor)*(fact_gral1.porc_itbi/100)
LET fact_gral1.total_fact = fact_gral1.sub_total - fact_gral1.desc_valor + fact_gral1.itbi
LET idx = idx + 1
END FOREACH
# CALL detalles()
DISPLAY BY NAME fact_gral1.sub_total,fact_gral1.desc_valor,fact_gral1.total_fact,fact_gral1.itbi
DISPLAY ARRAY fact_det1 TO s_fact.*
ON ACTION guardar
{ CONTROL EXISTENCIA FOR idx = 1 TO fact_det1.getLength()
IF fact_det1[idx].cantidad > fact_det1[idx].existencia THEN
DISPLAY fact_det1[idx].descrip_esp TO s_fact[SCR_LINE()].descrip_esp ATTRIBUTE(RED)
CALL fgl_winmessage("ERROR","EXISTE UN ARTICULO QUE NO TIENE EXISTENCIA EN ESTA BODEGA","INFO")
RETURN
END IF
END FOR
}
LET opt = FGL_WINQUESTION("PREGUNTA","La Informacion Esta Correcta?","yes","yes|no","question",0)
LET cuenta_arr = arr_count()
LET opt = UPSHIFT(opt)
IF opt = "YES" THEN
LET verdad = "S"
IF fact_gral1.ventas = "1" THEN
LET fact_gral1.prima_us = 1
END IF
LET lleva_parcial = "N"
#-----------------------------------------------------------------------------------------
# CONSOLIDADO
SET CONNECTION "MSSQL"
SELECT MAX(a.ncf) INTO kncf FROM vetb00072 a
WHERE a.tipo_doc = "FT" AND
a.codigo_dgii = codigodgii AND
a.sucid = localidad
IF kncf IS NULL THEN
LET kncf = 0
END IF
LET kncf = kncf + 1
# NCF
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 AND
a.sucid = localidad
IF STATUS = NOTFOUND THEN
LET numero_msg =391
CALL msg(numero_msg)
CONTINUE DIALOG
END IF
SELECT ult_factura INTO fact_gral1.factura FROM vetb00001
IF fact_gral1.factura IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
RETURN
END IF
LET fact_gral1.factura = fact_gral1.factura + 1
DISPLAY fact_gral1.factura
UPDATE vetb00001 SET ult_factura = fact_gral1.factura,
us_mod = usuarios,
fech_mod = getdate()
WHERE sucid = localidad
INSERT INTO vetb00072 (documento,tipo_doc,codigo_dgii,ncf,us_crea,fech_crea,sucid)
VALUES (fact_gral1.factura,'FT',codigodgii,kncf,usuarios,getdate(),localidad)
# Actualiza la tabla de datos generales de la factura
INSERT INTO vetb00002 (cod_cia,factura,fecha_factura,ventas,zona,orden,
fecha_orden,conduce,fecha_conduce,tipo_cliente,
sec_cliente,cod_vend,sec_vend,cond_pago,porc_itbi,
porc_desc,prima_us,sub_total,monto_desc,monto_itbi,
neto,fecha_embarque,status_impresion,status_t,us_crea,
fech_crea, us_mod, fech_mod,documento,placa_transporte,sucid,num_req)
VALUES (fact_gral1.cod_cia, fact_gral1.factura, fact_gral1.fecha_factura,
fact_gral1.ventas,fact_gral1.zona,fact_gral1.orden,
fact_gral1.fecha_orden,fact_gral1.conduce,fact_gral1.fecha_conduce,
fact_gral1.tipo_cliente,fact_gral1.sec_cliente,factura_e,fact_gral1.sec_vend,
fact_gral1.cond_pago,fact_gral1.porc_itbi,fact_gral1.porc_desc,
fact_gral1.prima_us,fact_gral1.sub_total,fact_gral1.desc_valor,
fact_gral1.itbi,fact_gral1.total_fact,fact_gral1.fecha_embarque,
impresion,NULL,SUSER_SNAME(),GETDATE(),NULL,NULL,documento_ref,fact_gral1.placa_transp,
localidad,fact_gral1.num_req)
# Actualizacion de la tabla de cuentas por cobrar
IF fact_gral1.cond_pago > 1 THEN
INSERT INTO cctb00001
VALUES (NULL,fact_gral1.cod_cia,tipo_f,fact_gral1.factura,
fact_gral1.tipo_cliente,fact_gral1.sec_cliente,NULL,
fact_gral1.sec_vend,fact_gral1.fecha_factura,p_fecha_ven,
fact_gral1.factura, NULL,NULL,fact_gral1.total_fact,NULL,NULL,
t_costos,0, NULL, SUSER_SNAME(),GETDATE(), NULL, NULL,localidad)
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_gral1.orden
LET prtb09.fecha = fact_gral1.fecha_factura
IF cant_vend <> cant_prod THEN
LET prtb09.pendiente = "S"
LET prtb09.detalle = "DESPACHO DE MERCANCIA SEGUN FACT. # ",fact_gral1.factura USING "<<<<<<<",
" DE FECHA : ",fact_gral1.fecha_factura USING "dd/mm/yyyy"
END IF
FOR idx = 1 TO cuenta_arr
IF fact_det1[idx].cantidad_2 IS NULL THEN
LET fact_det1[idx].cantidad_2 = 0
END IF
IF fact_det1[idx].cod_n IS NOT NULL THEN
INSERT INTO vetb00003
VALUES (fact_gral1.cod_cia,fact_gral1.factura,fact_det1[idx].area,fact_det1[idx].cod_n,
fact_det1[idx].cod_grupo,fact_det1[idx].cod_tipo,
fact_det1[idx].cod_sec,fact_det1[idx].cantidad,fact_det1[idx].cantidad_2,
valor_desc,fact_det1[idx].precio,NULL,SUSER_SNAME(),GETDATE(),NULL,NULL,localidad)
# 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
LA FACTURA VOLVIO AFECTAR EL INVENTARIO EN ESTE PROGRAMA FECHA 3/09/2014
LET fact_det1[idx].cantidad = fact_det1[idx].cantidad * -1
INSERT INTO iptb00006 (cod_cia,num_doc,fact_no,fecha,cod_transp,sec_transp,
cod_sp,cod_sp_sec,placa,cod_tarifa,cod_mov,cod_n,
cod_grupo,cod_tipo,cod_sec,cantidad_2,
bodega,us_crea,fech_crea)
VALUES (fact_gral1.cod_cia,fact_gral1.factura,fact_gral1.factura,
fact_gral1.fecha_factura,fact_gral1.cod_transp,fact_gral1.sec_transp,
fact_gral1.tipo_cliente,fact_gral1.sec_cliente,fact_gral1.placa_transp,
fact_gral1.cod_tarifa,tipo_fact,fact_det1[idx].cod_n,
fact_det1[idx].cod_grupo,fact_det1[idx].cod_tipo,
fact_det1[idx].cod_sec,fact_det1[idx].cantidad,1,SUSER_SNAME(),GETDATE())
}
LET fact_det1[idx].cantidad = fact_det1[idx].cantidad * -1
LET cant_pend[idx] = cant_pend[idx] * -1
# Actualiza el campo placa cuando la factura es de exportacion
IF fact_gral1.ventas = 2 THEN
UPDATE iptb00006 SET placa = fact_gral1.placa_transp
WHERE num_doc = fact_gral1.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=============================
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_det1[idx].cod_n IS NOT NULL AND
fact_det1[idx].cod_grupo IS NOT NULL AND
fact_det1[idx].cod_tipo IS NOT NULL AND
fact_det1[idx].cod_sec IS NOT NULL AND
fact_det1[idx].cantidad IS NOT NULL AND
fact_det1[idx].cantidad > 0 THEN
LET cod_fact = 1
OUTPUT TO REPORT imp_fact(fact_gral1.*,fact_det1[idx].*,tot_porc,
p_bonifica[idx],cod_fact)
END IF
END FOR
FINISH REPORT imp_fact
RUN imprime
LET impresion = "S"
END IF
LET opt1 = fgl_winquestion("RECIBO","DESEA EMITIR RECIBIO INGRESO?","YES","YES|NO|","QUESTION",0)
IF opt1 = "YES" THEN
CALL veprfu001()
END IF
IF xncf = 'S' THEN
CALL exterior(localidad,fact_det1,usuarios,opt1)
END IF
CALL msg(1)
END DISPLAY
END INPUT
ON ACTION CANCEL
LET INT_FLAG = FALSE
CALL msg(2)
EXIT DIALOG
RETURN
END DIALOG
END FUNCTION
FUNCTION repite_codigo()
LET verdad = NULL
LET ant_art.area = fact_det1[curr].area
LET ant_art.cod_n = fact_det1[curr].cod_n
LET ant_art.cod_grupo = fact_det1[curr].cod_grupo
LET ant_art.cod_tipo = fact_det1[curr].cod_tipo
LET ant_art.cod_sec = fact_det1[curr].cod_sec
LET ant_art.cantidad = fact_det1[curr].cantidad
LET ant_art.precio = fact_det1[curr].precio
FOR idx = 1 TO arr_count()
IF idx != curr THEN
IF fact_det1[idx].cod_n IS NOT NULL AND
fact_det1[idx].cod_grupo IS NOT NULL AND
fact_det1[idx].cod_tipo IS NOT NULL AND
fact_det1[idx].cod_sec IS NOT NULL THEN
IF fact_det1[idx].area = ant_art.area AND
fact_det1[idx].cod_n = ant_art.cod_n AND
fact_det1[idx].cod_grupo = ant_art.cod_grupo AND
fact_det1[idx].cod_tipo = ant_art.cod_tipo AND
fact_det1[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_gral1.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_gral1.cod_transp = arr_transp[curr1].cod_transp
LET fact_gral1.sec_transp = arr_transp[curr1].sec_transp
LET fact_gral1.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,
num_req INT,
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),
bodega SMALLINT,
cantidad DECIMAL(12,5),
precio DECIMAL(12,3),
cantidad_2 DEC(3,0),
monto_fact DECIMAL(12,3),
existencia BOOLEAN
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_gral1.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 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_gral1.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 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 CHAR(30),
banco CHAR(30),
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 INPUT
LET pagos.factura = fact_gral1.factura
LET pagos.detalle = fact_gral1.nombre
LET pagos.valor_efectivo = fact_gral1.total_fact
DISPLAY fact_gral1.nombre TO detalle
DISPLAY BY NAME fact_gral1.factura,pagos.valor_efectivo
AFTER INPUT
IF int_flag THEN
LET int_flag = FALSE
RETURN
END IF
LET fact_gral1.total_fact = fact_gral1.total_fact * -1
IF fact_gral1.total_fact IS NULL THEN
CALL msg(16)
NEXT FIELD valor_efectivo
END IF
LET p_fecha_ven = "01/01/01"
SELECT ult_recibo INTO pagos.documento FROM cctb00003 WHERE tipo_doc = "PG"
IF pagos.documento IS NULL THEN
INSERT INTO cctb00003 (ult_recibo,tipo_doc,sucid) VALUES (1,'PG',localidad)
END IF
LET pagos.documento = pagos.documento + 1
UPDATE cctb00003 SET ult_recibo = pagos.documento WHERE tipo_doc = "PG"
DISPLAY BY NAME pagos.documento
END INPUT
IF fact_gral1.total_fact <> 0 THEN
INSERT INTO vetb00021 (num_doc,fecha,tipo_cliente,sec_cliente,nombre,factura,referencia_pago,banco,ventas,sucid,
us_crea,fech_crea)
VALUES (pagos.documento,fact_gral1.fecha_factura,fact_gral1.tipo_cliente,fact_gral1.sec_cliente,
fact_gral1.nombre,fact_gral1.factura,pagos.cheque_no,pagos.banco,fact_gral1.ventas,localidad,usuarios,getdate())
INSERT INTO cctb00001
VALUES (NULL,fact_gral1.cod_cia,"PG",pagos.documento,
fact_gral1.tipo_cliente,fact_gral1.sec_cliente,NULL,
fact_gral1.sec_vend,fact_gral1.fecha_factura,p_fecha_ven,
fact_gral1.factura,pagos.cheque_no,pagos.banco,
fact_gral1.total_fact,pagos.valor_efectivo,0,
0,0,NULL,SUSER_SNAME(),GETDATE(),NULL, NULL)
LET fact_gral1.total_fact = fact_gral1.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 cctb01 TO archivo
{OUTPUT TO REPORT volante(pagos.documento,fact_gral1.orden,fact_gral1.tipo_cliente,fact_gral1.sec_cliente,
fact_gral1.sec_vend,fact_gral1.fecha_factura,fact_gral1.total_fact)}
LET p_nombre_tipo = 'RECIBO INGRESO'
OUTPUT TO REPORT cctb01 (fact_gral1.tipo_cliente,fact_gral1.sec_cliente,
fact_gral1.fecha_factura,pagos.documento,fact_gral1.sec_vend,
'PG',' ',pagos.banco,fact_gral1.factura,fact_gral1.desc_valor,
fact_gral1.total_fact,fact_gral1.nombre,fact_gral1.nombre_vend,' ',
observacion)
FINISH REPORT cctb01
RUN imprime
CLOSE WINDOW captura
END IF
END FUNCTION
REPORT cctb01(p_tipo_cliente,p_sec_cliente,p_fecha_orig,
p_num_doc,p_cod_emp_sec,p_tipo_doc,
p_cuenta_no,p_banco,p_aplica_a,
p_monto_desc,p_valor,p_nombre,
p_nomb_emp,p_nombre_cta,p_comentario)
DEFINE p_tipo_cliente LIKE cctb00001.tipo_cliente,
p_sec_cliente LIKE cctb00001.sec_cliente,
p_fecha_orig LIKE cctb00001.fecha_orig,
p_num_doc LIKE cctb00001.num_doc,
p_cod_emp_sec LIKE cctb00001.cod_emp_sec,
p_tipo_doc LIKE cctb00001.tipo_doc,
p_cuenta_no LIKE cctb00001.cuenta_no,
p_banco LIKE cctb00001.banco,
p_aplica_a LIKE cctb00001.aplica_a,
p_monto_desc LIKE cctb00001.monto_desc,
p_valor LIKE cctb00001.valor,
p_nomb_emp CHAR(40),
p_nombre_cta CHAR(30),
p_cod_cia LIKE cctb00001.cod_cia,
pitbis DEC(12,2)
define
hora char(5),
l smallint,
p_nombre LIKE vetb00004.nombre,
p_comentario CHAR(120), #LIKE cctb00011.comentario,
ditbis DEC(12,2)
output
top margin 0
bottom margin 5
left margin 0
page length 33
ORDER BY p_sec_cliente,p_num_doc
format
page header
LET hora = time
LET lj = (80 - LENGTH(p_companias.nombre CLIPPED))/2
print column 2, "ccprmt001",
column 15, negrilla_on,
column lj, p_companias.nombre, negrillas_of,
column 40, "NO. DOC.: ",p_num_doc using "<<<<<<<"
LET lj = (80 - LENGTH(p_companias.direccion CLIPPED))/2
print column 1, negrilla_on,TODAY USING "DD/MM/YYYY",
column lj, p_companias.direccion, negrillas_of,
column 73, p_fecha_orig USING "dd/mm/yyyy"
IF p_tipo_doc = 'PG' THEN
LET lj = (80 - LENGTH(p_nombre_tipo))/2
print column 1, negrilla_on,
column lj, "RECIBO INGRESOS",negrillas_of,
column 73, hora
ELSE
LET lj = (80 - LENGTH("DOCUMENTOS"))/2
PRINT COLUMN l,"DOCUMENTOS"
END IF
SKIP 1 LINES
BEFORE GROUP OF p_sec_cliente
SELECT a.itbi INTO pitbis FROM vetb00019 a
WHERE a.disponible = "S"
IF pitbis IS NULL THEN
LET pitbis = 0
END IF
PRINT COLUMN 5, "LOCALIDAD :",sucnombre
PRINT COLUMN 5, "CUENTA :",p_cuenta_no CLIPPED," - ",p_nombre_cta CLIPPED,
COLUMN 50,"DEPOSITO :", p_banco
PRINT COLUMN 5, "CLIENTE :",p_nombre CLIPPED,"(",
p_tipo_cliente USING "<<","-",
p_sec_cliente USING "<<<<<",")"
PRINT COLUMN 5, "VENDEDOR :",p_cod_emp_sec USING "<<<<"," - ",p_nomb_emp CLIPPED
PRINT COLUMN 5, "TIPO PAGO :",p_tipo_doc CLIPPED," - ",p_nombre_tipo CLIPPED
PRINT doce
print column 1,
"===============================================================",
"================================"
print column 5, "Aplica Factura ",
column 23, " Descuento",
column 37, " Valor ",
# column 54, " ITBIS",
column 70, " TOTAL"
#print column 37, " S/ITBIS"
print column 1,
"===============================================================",
"================================"
on every row
{IF p_tipo_Doc = "NC" THEN
IF ncr = "S" THEN
LET ditbis =p_valor * (pitbis/100)
ELSE
LET ditbis = 0
END IF
UPDATE cctb00001 SET valor_efectivo = p_valor,
valor_cheque = ditbis,
valor = p_valor+ditbis
WHERE tipo_doc = p_tipo_Doc AND
num_doc = p_num_doc AND
aplica_a = p_aplica_a AND
tipo_cliente =p_tipo_cliente AND
sec_cliente = p_sec_cliente
END IF
}
print column 5, p_aplica_a USING "#######",
column 23, p_monto_desc USING "#,###,###.##",
column 37, p_valor USING "##,###,###.##",
column 54, ditbis USING "##,###,###.##",
column 70, p_valor USING "###,###,###.##"
let l = 12
{QUITE LA SUMATORIA DE P_VALOR + DITBIS PORQUE PARA ESTA EMPRESA NO NECESITA ESE
CALCULO, SE INSTALO EL PROGRAM DE NOTAS DE CREDITOS POR VENTAS}
AFTER GROUP OF p_sec_cliente
PRINT COLUMN 5, "Total----> ",
COLUMN 23, GROUP SUM(p_monto_desc) USING "#,###,###.##",
COLUMN 37, GROUP SUM(p_valor) USING "##,###,###.##"
{ IF p_tipo_doc = "NC" or p_tipo_doc = "ND" THEN
SELECT a.itbi INTO pitbis FROM vetb00019 a
WHERE a.disponible = "S"
IF pitbis IS NULL THEN
LET pitbis = 0
END IF
IF ncr = "S" THEN
LET ditbis =GROUP SUM(p_valor)* (pitbis/100)
ELSE
LET ditbis = 0
END IF
SKIP 1 LINE
PRINT COLUMN 37, pitbis USING "###.##","% ITBIS",
COLUMN 54, ditbis USING "##,###,###.##"
PRINT COLUMN 39, "TOTAL ",
COLUMN 54, GROUP SUM(p_valor) USING "##,###,###.##"
END IF}
on last row
PRINT COLUMN 2, "COMENTARIOS : "
PRINT COLUMN 5, p_comentario[1,60] CLIPPED
PRINT COLUMN 5, p_comentario[61,120] CLIPPED
PAGE TRAILER
SKIP 1 LINE
PRINT COLUMN 10, "____________________________________",
COLUMN 60, "____________________________________"
PRINT COLUMN 10, " Preparado Por ",
COLUMN 60, " Autorizado Por "
print normal
END REPORT
{
REPORT volante (x)
DEFINE x RECORD
num_doc INTEGER,
num_orden INTEGER,
tipo_cliente INTEGER,
sec_cliente INTEGER,
cod_emp_sec INTEGER,
fecha DATE,
avance DECIMAL(12,2)
END RECORD
DEFINE doble CHAR(1),
psimbolo,pmoneda CHAR(20)
DEFINE comp_off,negras,negras_of,italic,italic_of CHAR(2)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
PAGE LENGTH 33
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
SELECT unique a.sucnombre,a.telefono,a.direccion
INTO p_companias.nombre,p_companias.telefono,p_companias.direccion
FROM sucursales a,seg0001 b
WHERE b.usuario = usuarios AND b.sucid = a.sucid
PRINT COLUMN 70,comp_off, ASCII 27, ASCII 80
PRINT COLUMN 68,doble, x.num_doc using "&&&&&&"
IF NOT verdad THEN
PRINT " "
PRINT " "
ELSE
PRINT COLUMN 5, negras,p_companias.nombre CLIPPED,negras_of,
COLUMN 74, today using "dd/mm/yyyy"
PRINT COLUMN 5, p_companias.direccion CLIPPED," TEL.",p_companias.telefono CLIPPED
END IF
PRINT COLUMN 15, italic,"RECIBO DE INGRESO"
PRINT COLUMN 15, italic,"AVANCE A COTIZACION"
SKIP 1 LINE
LET valor_orig = x.avance
LET valor_letras = NULL
SELECT a.simbolo,a.descripcion_moneda
INTO psimbolo,pmoneda FROM vetb00061 a,vetb00060 b
WHERE a.ventas = b.ventas AND
b.tipo_cliente = x.tipo_cliente
CALL convierte(x.avance)
# BUSCA TIPO DE VENTAS
PRINT COLUMN 5, "RECIBIMOS DE :",negras,fact_gral1.nombre clipped,"(",x.tipo_cliente USING "&&","-",x.sec_cliente USING "&&&&&&",")",negras_of
PRINT COLUMN 5, "DIRECCION :",negras,fact_gral1.direccion,negras_of
PRINT COLUMN 5, "PROVINCIA :",negras,fact_gral1.ciudad CLIPPED,negras_of
PRINT COLUMN 5, "VENDEDOR :",fact_gral1.sec_vend USING "<<<<"," ",fact_gral1.nombre_vend
PRINT COLUMN 5, "PROYECTO :",negras,xnombre_proyecto CLIPPED,negras_of
PRINT COLUMN 5, "LA SUMA DE :", negras,valor_letras clipped,negras_of
PRINT COLUMN 5, "VALOR RECIBIDO:", negras,psimbolo CLIPPED,x.avance
using "<<<,<<<,<<<.##",negras_of
SKIP 1 LINE
PRINT COLUMN 1,
"------------------------------------------------------------------------------"
PRINT COLUMN 5, "FECHA",
COLUMN 40, "COTIZACION NO.",
COLUMN 60, "NETO COBRADO"
PRINT COLUMN 1,
"------------------------------------------------------------------------------"
SKIP 1 LINE
PRINT COLUMN 5, x.fecha using "dd/mm/yyyy",
COLUMN 40, x.num_orden using "&&&&&&" ,
COLUMN 58,psimbolo CLIPPED, x.avance using "<<<,<<<,<##.##"
PAGE TRAILER
SKIP 1 LINE
PRINT COLUMN 5, "_______________________________",
COLUMN 45,"_______________________________"
PRINT COLUMN 10, " Preparado Por ",
COLUMN 45, " Autorizado Por"
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_gral1.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_gral1.fecha_factura,fact_gral1.orden,fact_gral1.tipo_cliente,
fact_gral1.sec_cliente,fact_gral1.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_gral1.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_gral1.nombre
FROM vetb00004 a
WHERE a.tipo_cliente = fact_gral1.tipo_cliente AND
a.sec_cliente = fact_gral1.sec_cliente
DISPLAY BY NAME fact_gral1.tipo_cliente,fact_gral1.sec_cliente,
fact_gral1.total_fact,fact_gral1.nombre,
fact_gral1.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_gral1.fecha_factura
{ SELECT UNIQUE a.usuario INTO p_usuario FROM seg0001 a
WHERE a.usuario = SUSER_SNAME()
IF p_usuario = "rsierra" THEN
IF fact_gral1.fecha_factura != TODAY THEN
ERROR "NO PUEDE ANULAR FACTURA QUE NO SEAN DEL DIA DE HOY"
RETURN
END IF
END IF
}
CALL prd(fact_gral1.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_gral1.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_gral1.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_gral1.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_gral1.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_gral1.cod_cia
# ANULACION DE LAS SERIES
IF fact_gral1.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_gral1.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_gral1.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_gral1.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_gral1.cod_cia
UPDATE vetb00003 SET status_t = "E",
us_mod = 'lpinales',
fech_mod = current
WHERE factura = p_fact_no
and cod_cia = fact_gral1.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_gral1.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_gral1.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_gral1.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_gral1.ventas AND tipo_cliente = fact_gral1.tipo_cliente AND
sec_cliente = fact_gral1.sec_cliente AND cod_n=fact_det1[curr].cod_n AND
cod_grupo=fact_det1[curr].cod_grupo AND cod_tipo=fact_det1[curr].cod_tipo
AND cod_sec = fact_det1[curr].cod_sec AND status_t IS NULL
IF STATUS = NOTFOUND THEN
SELECT precio INTO p_costos1 FROM vetb00025
WHERE ventas = fact_gral1.ventas AND tipo_cliente IS NULL AND
sec_cliente IS NULL AND cod_n = fact_det1[curr].cod_n AND
cod_grupo = fact_det1[curr].cod_grupo AND
cod_tipo = fact_det1[curr].cod_tipo AND
cod_sec = fact_det1[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_det1[curr].cod_n = 2 THEN
LET verdad = "N"
END IF}
END IF
LET fact_det1[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_gral1.tipo_cliente
AND a.sec_cliente = fact_gral1.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_gral1.fecha_factura
WHERE @num_oc = forden
AND @tipo_cliente = fact_gral1.tipo_cliente
AND @sec_cliente = fact_gral1.sec_cliente
LET prtb09.num_oc = forden
LET prtb09.fecha = fact_gral1.fecha_factura
LET prtb09.pendiente = "N"
LET prtb09.detalle = "CIERRE DE ORDEN DE PRODUCCION SEGUN FACT. # ",fact_gral1.factura USING "<<<<<<<",
" DE FECHA : ",fact_gral1.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_gral1.itbi = 0
LET fact_gral1.sub_total = 0
LET fact_gral1.total_fact = 0
LET fact_gral1.desc_valor = 0
FOR idx = 1 to t_arr
IF fact_det1[idx].cantidad IS NOT NULL THEN
LET fact_gral1.sub_total = fact_gral1.sub_total + (fact_det1[idx].cantidad * fact_det1[idx].precio)
END IF
END FOR
DISPLAY BY NAME fact_gral1.sub_total
FOR idx = 1 to arr_count()
IF fact_det1[idx].cantidad IS NOT NULL THEN
LET fact_det1[idx].monto_fact = fact_det1[idx].cantidad * fact_det1[idx].precio
IF fact_det1[idx].cantidad_2 > 0 THEN #-> calcula el valor en descuento para cada articulo vg
LET valor_desc = 0
LET valor_desc = fact_det1[idx].monto_fact * (fact_det1[idx].cantidad_2 / 100)
LET fact_gral1.desc_valor = fact_gral1.desc_valor + valor_desc
LET fact_det1[idx].monto_fact = fact_det1[idx].monto_fact - valor_desc
END IF
END IF
END FOR
DISPLAY BY NAME fact_gral1.desc_valor
# Calcula el porciento de ITBIS de la factura dependiendo del porciento
# especificado por el usuario
IF fact_gral1.porc_itbi IS NOT NULL THEN
LET fact_gral1.itbi=((fact_gral1.sub_total - fact_gral1.desc_valor)* fact_gral1.porc_itbi/100)
#- LET fact_gral1.itbi=(fact_gral1.sub_total * fact_gral1.porc_itbi/100)
ELSE
LET fact_gral1.itbi=0
END IF
LET itbi = fact_gral1.itbi using "###,###,###.##"
DISPLAY BY NAME fact_gral1.itbi ATTRIBUTE (BOLD)
# Calculo total de la factura
LET fact_gral1.total_fact = (fact_gral1.sub_total - fact_gral1.desc_valor)+ fact_gral1.itbi
DISPLAY BY NAME fact_gral1.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 veprmf022()
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.num_req,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_gral1.*,factura_e,documento_ref
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL informacion(fact_gral1.conduce,fact_gral1.ventas)
DISPLAY BY NAME fact_gral1.*,factura_e,documento_ref
MENU "NAVEGACION:"
COMMAND "Siguiente"
FETCH NEXT consulta iNTO fact_gral1.*,factura_e
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL informacion(fact_gral1.conduce,fact_gral1.ventas)
DISPLAY BY NAME fact_gral1.*,factura_e,documento_ref
COMMAND "Anterior"
FETCH PREVIOUS consulta iNTO fact_gral1.*,factura_e
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL informacion(fact_gral1.conduce,fact_gral1.ventas)
LET pcondicion = ui.ComboBox.forName("formonly.cond_pago")
CALL ccondicion()
DISPLAY BY NAME fact_gral1.*,factura_e,documento_ref
COMMAND "Primero"
FETCH FIRST consulta iNTO fact_gral1.*,factura_e
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL informacion(fact_gral1.conduce,fact_gral1.ventas)
LET pcondicion = ui.ComboBox.forName("formonly.cond_pago")
CALL ccondicion()
DISPLAY BY NAME fact_gral1.*,factura_e,documento_ref
COMMAND "Ultimo"
FETCH LAST consulta iNTO fact_gral1.*,factura_e
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL informacion(fact_gral1.conduce,fact_gral1.ventas)
LET pcondicion = ui.ComboBox.forName("formonly.cond_pago")
CALL ccondicion()
DISPLAY BY NAME fact_gral1.*,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_gral1.factura,fact_gral1.factura
LET idx = 1
FOREACH busca_items INTO fact_det1[idx].*
LET valor_Desc = (fact_det1[idx].cantidad * fact_det1[idx].precio) * (fact_det1[idx].cantidad_2 / 100)
IF valor_desc IS NULL THEN
LET valor_desc = 0
END IF
LET fact_det1[idx].monto_fact = (fact_det1[idx].precio * fact_det1[idx].cantidad)- valor_desc
LET cod_fact = 1
LET p_bonifica[idx] = 0
OUTPUT TO REPORT imp_fact(fact_gral1.*,fact_det1[idx].*,tot_porc,
p_bonifica[idx],cod_fact)
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
DISPLAY ARRAY fact_det1 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
FUNCTION inicializa()
CLEAR FORM
SELECT a.nombre,a.logo_file INTO p_companias.nombre,p_companias.logo_file
FROM companias a
SELECT a.sucid,b.sucnombre, a.bodega INTO localidad,sucnombre,pbodega
FROM seg0001 a,sucursales b
WHERE a.usuario = usuarios AND a.sucid = b.sucid
SELECT a.descripcion INTO descrip_bodega FROM intb00009 a
WHERE a.cod_bodega = pbodega
DISPLAY p_companias.logo_file TO logo_cia
DISPLAY p_companias.nombre TO compania
DISPLAY BY NAME sucnombre
DISPLAY BY NAME descrip_bodega
END FUNCTION