4835 lines
174 KiB
Plaintext
4835 lines
174 KiB
Plaintext
{
|
|
--------------------------------------------------------------------------
|
|
PROGRAMA : VEPRMT001
|
|
OBJETIVO : Este programa captura la factura comercial
|
|
REALIZADO POR : Ing. Juan Fco. Soto.
|
|
FECHA : Enero 12,1993.
|
|
--------------------------------------------------------------------------
|
|
}
|
|
IMPORT util
|
|
GLOBALS "veprgb000.4gl"
|
|
DEFINE modf CHAR(10)
|
|
DEFINE genera_itbis CHAR(2)
|
|
DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings()
|
|
r_filename STRING, -- filename of Report Design Document including .4rp extension
|
|
r_output STRING, -- output format option
|
|
preview INTEGER -- TRUE/FALSE, to set preview option
|
|
DEFINE mes_chequeo SMALLINT
|
|
DEFINE porce,valor_desc,cant_prod,cant_vend,itbis_o,valor_desc_moneda,valor_control_ncf DECIMAL (12,2),emailcliente VARCHAR(100),
|
|
salida STRING , fechafirma DATETIME YEAR TO SECOND
|
|
DEFINE codigo_provincia,t_arr,
|
|
pubicacion VARCHAR(100),
|
|
aplaca_transp,proforma VARCHAR(20),
|
|
documento_ref CHAR(15),
|
|
execede BOOLEAN,
|
|
porcentaje_n DEC(8,2),
|
|
factura_xc,fpago INT,
|
|
cliente_ncf CHAR(2),
|
|
pdocumento_ref VARCHAR(25)
|
|
DEFINE prtb09 RECORD LIKE prtb00009.*
|
|
# Formas de pago del e-CF (pago mixto) que llena veprfu001() en facturas de contado
|
|
DEFINE tablaformaspago DYNAMIC ARRAY OF RECORD
|
|
formapago STRING,
|
|
montopago STRING
|
|
END RECORD
|
|
DEFINE lleva_parcial,ch_servicios,ch_itbi,ch_encabeza,itbis_ncf CHAR(1),
|
|
pcotizacion,cuenta_arr,xdocumento_almacen INTEGER,
|
|
observacion CHAR(180) ,
|
|
obs1,obs2,obs3 CHAR(50),obs4 CHAR(30),
|
|
descripcion_doc VARCHAR(100),
|
|
genera_ncf CHAR(3),xdireccion_proyecto VARCHAR(100),controlExistencia VARCHAR(2)
|
|
DEFINE otro_json1 RECORD
|
|
codigo,estado,secuenciautilizada STRING,MENSAJES DYNAMIC ARRAY OF STRING
|
|
END RECORD
|
|
|
|
DEFINE pok RECORD
|
|
trackId,ERROR,mensaje STRING
|
|
END RECORD
|
|
|
|
DEFINE p32 RECORD
|
|
codigo,estado,mensajes,encf,secuenciautilizada STRING
|
|
END RECORD
|
|
|
|
DEFINE otrojson RECORD
|
|
codigo,estado,secuenciaUtilizada STRING,
|
|
mensajes DYNAMIC ARRAY OF RECORD
|
|
valor,codigo STRING END RECORD
|
|
END RECORD
|
|
|
|
DEFINE documento_encabezado RECORD
|
|
tipoEcf,eNcf,indicadorMontoGravado,tipoPago,fechaLimitePago,FormadePAgo,montoPago,FechaVencimientoSecuencia,
|
|
rncEmisor,razonSocialEmisor,direccionEmisor,Municipio,Provincia,telefonoEmisor,
|
|
correoEmisor,webSite,codigoVendedor,numeroFacturaInterna,numeroPedidoInterno,
|
|
fechaEmision,rncComprador,razonSocialComprador,montoGravadoTotal,montoGravadoI1,
|
|
montoGravadoI2,montoGravadoI3,montoExento,itbis1,itbis2,itbis3,totalItbis,totalItbis1,
|
|
totalItbis2,totalItbis3,montoTotal,tipoIngreso,terminoPago,TipoCuentaPago,NumeroCuentaPago,IdentificadorExtranjero,
|
|
contactoComprador,CorreoComprador,DireccionComprador,MunicipioComprador,ProvinciaComprador,FechaEntrega,FechaOrdenCompra,
|
|
NumeroOrdenCompra,CodigoInternoComprador,
|
|
nombreFile,IndicadorNotaCredito,NCFmodificado,codigoModificacion,fechaNCFmodificado
|
|
STRING
|
|
END RECORD,
|
|
respuesta,xrespuesta,ambiente STRING,
|
|
phash,tipodocumento,khash VARCHAR(10),
|
|
xtrack RECORD
|
|
trackid STRING,mensaje DYNAMIC ARRAY OF STRING
|
|
END RECORD,ditbis DYNAMIC ARRAY OF DEC(12,2)
|
|
DEFINE p RECORD
|
|
trackid STRING,
|
|
codigo,estado,rnc,encf,secuenciaUtilizada,fechaRecepcion STRING,
|
|
|
|
mensajes DYNAMIC ARRAY of RECORD
|
|
valor,codigo string
|
|
END RECORD
|
|
END RECORD
|
|
|
|
DEFINE p32err RECORD
|
|
codigo,estado STRING,
|
|
mensajes DYNAMIC ARRAY OF RECORD
|
|
codigo,valor,encf,secuenciautilizada STRING
|
|
END RECORD
|
|
END RECORD
|
|
|
|
|
|
DEFINE p1 RECORD
|
|
codigo,estado,mensajes,encf,secuenciaUtilizada STRING
|
|
END RECORD ,codigo STRING
|
|
|
|
|
|
|
|
DEFINE documento_Detalle DYNAMIC ARRAY OF RECORD
|
|
indicadorFacturacion,nombreItem,indicadorBienoServicio,cantidadItem,precioUnitarioItem,
|
|
montoItem STRING,
|
|
DescripcionItem VARCHAR(1000),
|
|
NumeroLinea int
|
|
END RECORD,id_provincia_dgii,id_municipio_dgii VARCHAR(20),num_rnc CHAR(11)
|
|
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL STARTLOG("veprmt01.txt")
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
CALL ARG_VAL(4) RETURNING impresor
|
|
CALL ARG_VAL(5) RETURNING xcopia
|
|
|
|
|
|
CONNECT TO "decomarmol" AS "MSSQL" USER usuarios USING clave
|
|
# CONNECT to "marmotech" AS "IFMX" USER usuarios USING clave
|
|
|
|
|
|
# Sucursal del usuario (localidad = sucid que se graba en la factura). La provincia
|
|
# (vetb00020) es opcional: antes, si faltaba, no encontraba nada y la factura se
|
|
# grababa sin sucursal (0/NULL) y luego no aparecia en CxC (ccprmt001).
|
|
LET localidad = NULL
|
|
SELECT a.sucid,b.sucnombre,b.direccion,c.nombre_provincia,b.telefono,b.fax,b.rnc,c.id_dgii,c.id_municipio_dgii
|
|
INTO localidad,sucnombre,p_companias.direccion,p_companias.direccion1,
|
|
p_companias.telefono,p_companias.fax,p_companias.rnc,id_provincia_dgii,id_municipio_dgii
|
|
FROM seg0001 a, sucursales b
|
|
LEFT OUTER JOIN vetb00020 c ON b.localidad = c.cod_provincia
|
|
WHERE a.usuario = usuarios AND a.sucid = b.sucid
|
|
IF localidad IS NULL OR localidad = 0 THEN
|
|
CALL fgl_winmessage("ERROR",
|
|
"USTED NO TIENE LOCALIDAD (SUCURSAL) ASIGNADA O LA SUCURSAL NO EXISTE.\nCONTACTE AL ADMINISTRADOR DE SISTEMAS (seg0001 / sucursales).",
|
|
"stop")
|
|
EXIT PROGRAM
|
|
END IF
|
|
SELECT * INTO p_companias.* FROM companias
|
|
# Provincia/municipio del emisor (e-CF) salen de companias, no de vetb00020
|
|
CALL ubicacion_emisor_dgii(id_provincia_dgii,id_municipio_dgii)
|
|
RETURNING id_provincia_dgii,id_municipio_dgii
|
|
#LET p_companias.nombre= sucnombre
|
|
|
|
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()
|
|
ON ACTION buscar
|
|
call veprmf001()
|
|
ON ACTION anular
|
|
SET CONNECTION "MSSQL"
|
|
CALL anular()
|
|
ON ACTION salir
|
|
exit menu
|
|
END MENU
|
|
END MAIN
|
|
|
|
FUNCTION veprmt001()
|
|
|
|
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
|
|
INITIALIZE documento_encabezado.* TO NULL
|
|
LET pdocumento_ref = 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
|
|
|
|
CALL fact_det.clear()
|
|
|
|
|
|
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 = 1
|
|
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 = "S"
|
|
LET ch_servicios = "N"
|
|
LET ch_encabeza = "S"
|
|
LET ch_balance = NULL
|
|
LET descrip1 = NULL
|
|
LET factura_e = NULL
|
|
LET pdocumento_ref =NULL
|
|
|
|
INPUT BY NAME ch_itbi,ch_encabeza,ch_servicios,proforma,descripcion_doc
|
|
BEFORE INPUT
|
|
LET proforma="CONDUCE"
|
|
LET descripcion_doc=NULL
|
|
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
|
|
IF proforma = "PROFORMA" THEN
|
|
NEXT FIELD descripcion_doc
|
|
ELSE
|
|
EXIT INPUT
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
LET codigodgii = NULL
|
|
LET descripcion_ncf=NULL
|
|
INPUT BY NAME fact_gral.*,codigodgii,factura_e,pdocumento_ref WITHOUT DEFAULTS ATTRIBUTE (blue)
|
|
BEFORE INPUT
|
|
SET CONNECTION "MSSQL"
|
|
IF ch_itbi ='S' THEN
|
|
LET genera_ncf = fgl_winquestion("NCF","DESEA GENERAR FACTURA CON NCF?","YES","NO|YES","QUESTION",0)
|
|
END IF
|
|
CALL bodegas('1')
|
|
# CALL formaspago() -- forma de pago: ahora se captura en veprfu001 (contado)
|
|
|
|
AFTER FIELD codigodgii
|
|
IF codigodgii IS NOT NULL THEN
|
|
SET CONNECTION "MSSQL"
|
|
|
|
SELECT a.tipo_ncf,a.fecha_vencimiento INTO descripcion_ncf,fecha_vencimiento FROM vetb00071 a
|
|
WHERE a.codigo_dgii=codigodgii
|
|
DISPLAY BY NAME descripcion_ncf,fecha_vencimiento
|
|
LET itbis_ncf = NULL
|
|
SELECT UNIQUE a.itbis INTO itbis_ncf FROM vetb00071 a
|
|
WHERE a.tipo_doc = "FT" and a.codigo_dgii = codigodgii AND
|
|
a.sucid = localidad AND UPPER(a.disponible) = "S"
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
# comprobante no disponible (o no registrado para esta localidad):
|
|
# no deja seguir (antes CONTINUE INPUT dejaba el codigo puesto y grababa)
|
|
LET numero_msg =391
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD codigodgii
|
|
END IF
|
|
# Respeta la casilla ITBIS del usuario: el tipo de comprobante solo puede
|
|
# QUITAR el ITBIS, nunca volver a ponerlo. 44 (Reg. Especiales) siempre exento
|
|
IF itbis_ncf = 'N' OR codigodgii = '44' THEN
|
|
LET ch_itbi = 'N'
|
|
END IF
|
|
DISPLAY BY NAME ch_itbi
|
|
END IF
|
|
IF ch_itbi = 'N' THEN
|
|
LET fact_gral.porc_itbi=0
|
|
END IF
|
|
DISPLAY BY NAME fact_gral.porc_itbi
|
|
SET CONNECTION "MSSQL"
|
|
ON ACTION anular
|
|
LET mes_chequeo = MONTH(TODAY)
|
|
SET CONNECTION "MSSQL"
|
|
|
|
CALL anular()
|
|
|
|
NEXT FIELD cod_cia
|
|
{
|
|
ON KEY (CONTROL-E)
|
|
CASE
|
|
WHEN INFIELD(tipo_cliente)
|
|
CALL veprmt101()
|
|
LET fact_gral.tipo_cliente = cliente_bas.tipo_cliente
|
|
LET fact_gral.sec_cliente = cliente_bas.sec_cliente
|
|
LET fact_gral.nombre = cliente_bas.nombre CLIPPED
|
|
LET credito = cliente_bas.limite_credito
|
|
LET codigo_provincia = cliente_bas.cod_provincia
|
|
DISPLAY BY NAME fact_gral.tipo_cliente,fact_gral.sec_cliente,
|
|
fact_gral.nombre
|
|
WHEN INFIELD(sec_cliente)
|
|
CALL veprmt101()
|
|
LET fact_gral.tipo_cliente = cliente_bas.tipo_cliente
|
|
LET fact_gral.sec_cliente = cliente_bas.sec_cliente
|
|
LET fact_gral.nombre = cliente_bas.nombre CLIPPED
|
|
LET credito = cliente_bas.limite_credito
|
|
LET codigo_provincia = cliente_bas.cod_provincia
|
|
DISPLAY BY NAME fact_gral.tipo_cliente,fact_gral.sec_cliente,
|
|
fact_gral.nombre
|
|
END CASE
|
|
|
|
ON KEY (CONTROL-W)
|
|
CASE
|
|
WHEN INFIELD(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 = 1
|
|
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,a.codigo_dgii,a.titulo_dgii
|
|
INTO condicion.dias,condicion.descrip,documento_encabezado.tipoPago
|
|
FROM vetb00012 a where
|
|
a.cond_pago = fact_gral.cond_pago
|
|
LET documento_encabezado.tipoPago=documento_encabezado.tipoPago clipped
|
|
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.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
|
|
|
|
IF fact_gral.conduce IS NOT NULL THEN
|
|
SELECT UNIQUE a.cod_sp,a.cod_sp_sec,
|
|
COALESCE(a.num_oc,a.conduce_no),CONVERT(CHAR(10),a.fecha,103),
|
|
a.cod_transp,a.sec_transp,a.placa
|
|
INTO fact_gral.tipo_cliente,fact_gral.sec_cliente,fact_gral.orden,fact_gral.fecha_conduce,
|
|
fact_gral.cod_transp,fact_gral.sec_transp,fact_gral.placa_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.bodega = fact_gral.bodega AND
|
|
a.fecha > "01/01/2008"
|
|
DISPLAY fact_gral.conduce,fact_gral.bodega,p_codigo
|
|
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,fact_gral.placa_transp
|
|
|
|
SELECT a.nombre,a.limite_credito,a.cod_zona,a.cod_provincia,a.telefono,a.num_rnc,a.zona_postal
|
|
INTO fact_gral.nombre,credito,fact_gral.zona,codigo_provincia,
|
|
cliente_bas.telefono,cliente_bas.num_rnc,tipodocumento
|
|
FROM vetb00004 a
|
|
WHERE a.tipo_cliente = fact_gral.tipo_cliente AND
|
|
a.sec_cliente = fact_gral.sec_cliente
|
|
DISPLAY "rnc",cliente_bas.num_rnc
|
|
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,d.id_dgii,d.id_municipio_dgii
|
|
INTO fact_gral.ciudad,documento_encabezado.Provincia,
|
|
documento_encabezado.Municipio
|
|
FROM vetb00020 d
|
|
WHERE d.cod_provincia = codigo_provincia
|
|
|
|
LET fact_gral.direccion = descrip1 clipped,descrip2 clipped,", ",
|
|
descrip3 clipped
|
|
|
|
|
|
SELECT unique descrip INTO descrip1 FROM vetb00008
|
|
WHERE cod_zona = CAST(fact_gral.zona as smallint)
|
|
|
|
|
|
|
|
# BUSCA EL VENDEDOR
|
|
SELECT a.sec_vend,a.nombre_file INTO fact_gral.sec_vend,documento_encabezado.NumeroOrdenCompra
|
|
FROM prtb00012 a
|
|
WHERE a.tipo_cliente = fact_gral.tipo_cliente AND
|
|
a.sec_cliente = fact_gral.sec_cliente AND
|
|
a.num_oc = fact_gral.orden
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
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
|
|
END IF
|
|
DISPLAY BY NAME fact_gral.sec_vend
|
|
|
|
|
|
DISPLAY BY NAME fact_gral.zona,fact_gral.direccion,fact_gral.nombre,fact_gral.ciudad,descrip1,
|
|
cliente_bas.num_rnc ATTRIBUTE (blue)
|
|
|
|
# CONTROL DE REPETICION DE CONDUCES
|
|
SELECT UNIQUE a.conduce FROM vetb00002 a
|
|
WHERE a.conduce = fact_gral.conduce AND
|
|
a.ventas = fact_gral.ventas AND
|
|
a.fecha_factura > "01/01/2009" AND
|
|
a.bodega = fact_gral.bodega AND
|
|
a.status_t IS NULL
|
|
|
|
IF STATUS != NOTFOUND THEN
|
|
LET numero_msg = 395
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD conduce
|
|
END IF
|
|
#NCF
|
|
IF genera_ncf = "YES" THEN
|
|
IF ch_itbi = "S" THEN
|
|
LET cliente_ncf = "N"
|
|
SELECT a.ncf INTO cliente_ncf FROM vetb00060 a WHERE a.tipo_cliente = fact_gral.tipo_cliente
|
|
IF cliente_ncf = "S" THEN
|
|
|
|
SET CONNECTION "MSSQL"
|
|
|
|
LET codigodgii = NULL
|
|
LET descripcion = NULL
|
|
|
|
CALL btipo_fact(localidad,'FT') RETURNING codigodgii,descripcion,fecha_vencimiento,genera_itbis
|
|
DISPLAY "__fecha" ,fecha_vencimiento
|
|
LET int_flag = FALSE
|
|
DISPLAY BY NAME codigodgii
|
|
DISPLAY descripcion TO descripcion_ncf
|
|
DISPLAY BY NAME fecha_vencimiento
|
|
# Comprobante exento (vetb00071.itbis='N' o 44): no lleva ITBIS
|
|
IF genera_itbis = 'N' OR codigodgii = '44' THEN
|
|
LET ch_itbi = 'N'
|
|
LET fact_gral.porc_itbi = 0
|
|
DISPLAY BY NAME ch_itbi,fact_gral.porc_itbi
|
|
END IF
|
|
SET CONNECTION "MSSQL"
|
|
END IF
|
|
END IF
|
|
END IF
|
|
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 tipo_cliente
|
|
IF fact_gral.tipo_cliente = 23 OR fact_Gral.tipo_cliente = 24 THEN
|
|
LET proforma = "PROFORMA"
|
|
ELSE
|
|
LET proforma="CONDUCE"
|
|
END IF
|
|
DISPLAY BY NAME proforma
|
|
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
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo_cliente
|
|
END IF
|
|
{ SE COLOCO EN COMENTARIO PORQUE SE ESTA OBTENIENDO DE LA TABLA VETB00050
|
|
FECHA MODIFICACION 21/05/2018
|
|
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 a.cotizacion_no INTO pcotizacion FROM prtb00012 a
|
|
WHERE a.num_oc = fact_gral.orden AND a.status_t IS NULL
|
|
|
|
IF pcotizacion IS NOT NULL THEN
|
|
LET xdireccion_proyecto = NULL
|
|
SELECT a.nombre_cliente,a.direccion_cliente,a.direccion_proyecto,a.rnc,a.email,a.total_bruto
|
|
INTO fact_gral.nombre,fact_gral.direccion,xdireccion_proyecto,num_rnc,emailcliente
|
|
FROM vetb00050 a
|
|
WHERE a.cotizacion_no = pcotizacion
|
|
END IF
|
|
|
|
SELECT d.nombre_provincia,d.id_dgii,d.id_municipio_dgii
|
|
INTO fact_gral.ciudad,documento_encabezado.ProvinciaComprador,documento_encabezado.MunicipioComprador
|
|
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
|
|
|
|
LET fact_gral.direccion = descrip1 clipped,descrip2 clipped,", ",
|
|
descrip3 clipped
|
|
|
|
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 prtb00012 a
|
|
WHERE a.tipo_cliente = fact_gral.tipo_cliente AND
|
|
a.sec_cliente = fact_gral.sec_cliente AND
|
|
a.num_oc = fact_gral.orden
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
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
|
|
END IF
|
|
|
|
DISPLAY BY NAME fact_gral.sec_vend,fact_gral.nombre
|
|
|
|
|
|
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","AV","AP")
|
|
|
|
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 = "AV" 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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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 codigodgii IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD codigodgii
|
|
END IF
|
|
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
|
|
|
|
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
|
|
# CONTROL LOCALIDAD VENDEDOR
|
|
SELECT a.sec_vend FROM vetb00084 a
|
|
WHERE a.sec_vend = fact_gral.sec_vend
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL fgl_winmessage("INFO","VENDEDOR NO TIENE LOCALIDAD ASIGNADA, COMUNIQUESE CON ADM SISTEMA","INFO")
|
|
CONTINUE INPUT
|
|
END IF
|
|
|
|
# CONTROL DE REPETICION DE CONDUCES
|
|
SELECT UNIQUE a.conduce FROM vetb00002 a
|
|
WHERE a.conduce = fact_gral.conduce AND
|
|
a.ventas = fact_gral.ventas AND
|
|
a.fecha_factura > "01/01/2009" AND
|
|
a.bodega = fact_gral.bodega AND
|
|
a.status_t IS NULL
|
|
|
|
IF STATUS != NOTFOUND THEN
|
|
LET numero_msg = 395
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD conduce
|
|
END IF
|
|
|
|
|
|
IF ch_itbi = 'N' THEN
|
|
LET fact_gral.porc_itbi=0
|
|
END IF
|
|
DISPLAY BY NAME fact_gral.porc_itbi
|
|
SET CONNECTION "MSSQL"
|
|
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
|
|
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
|
|
IF fact_gral.prima_us IS NULL THEN
|
|
SELECT a.prima INTO fact_gral.prima_us
|
|
FROM vetb00019 a WHERE a.disponible = "S"
|
|
END IF
|
|
CALL fact_det.clear()
|
|
|
|
LABEL alla:
|
|
DECLARE buscame CURSOR FOR
|
|
SELECT DISTINCT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.cantidad_2,
|
|
a.precio,a.descuento,a.id_kit
|
|
FROM prtb00013 AS a
|
|
INNER JOIN iptb00006 b ON COALESCE(b.num_oc,b.conduce_no) = a.num_oc and
|
|
b.num_doc = fact_gral.conduce and
|
|
b.cod_mov = p_codigo AND
|
|
b.bodega = fact_gral.bodega 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
|
|
{ INNER 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
|
|
UNION
|
|
SELECT DISTINCT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.cantidad_2,
|
|
c.precio,c.porc_desc,c.id_kit
|
|
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 AND d.status_t IS NULL
|
|
INNER JOIN vetb00031 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 AND
|
|
d.status_t IS null
|
|
WHERE a.num_oc = fact_gral.orden}
|
|
ORDER BY 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,
|
|
fact_det[idx].kit_id
|
|
IF fact_Det[idx].cantidad < 0 THEN
|
|
LET fact_det[idx].cantidad = fact_det[idx].cantidad * -1
|
|
END IF
|
|
|
|
|
|
# LE COLOQUE EN COMENTARIO PORQUE LA TASA LA ESTOY CALCULANDO EN LA COTIZACION veprmt049
|
|
|
|
{ IF fact_gral.ventas=1 AND fact_det[idx].kit_id IS NOT NULL THEN
|
|
|
|
LET fact_det[idx].precio = fact_det[idx].precio * fact_gral.prima_us
|
|
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,
|
|
documento_detalle[curr].indicadorBienoServicio,controlExistencia
|
|
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
|
|
b.num_doc = fact_gral.conduce and
|
|
a.status_t IS NULL
|
|
GROUP BY a.descrip_esp,a.unidad_med
|
|
# CALL fgl_winmessage("ERROR",p_existencia,"stop")
|
|
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
|
|
|
|
IF p_existencia IS NULL THEN
|
|
LET p_existencia = 0
|
|
END IF
|
|
|
|
LET verdad = NULL
|
|
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
|
|
END IF
|
|
|
|
AFTER FIELD cantidad_2 #-> Aqui se digita el % de descto. al producto.
|
|
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
|
|
|
|
|
|
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:
|
|
|
|
IF fact_gral.ventas = "1" THEN
|
|
LET fact_gral.prima_us = 1
|
|
END IF
|
|
LET lleva_parcial = "N"
|
|
LET opt1="YES"
|
|
#-----------------------------------------------------------------------------------------
|
|
# 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)
|
|
DISPLAY "NCF",KNCF
|
|
SELECT a.ncf INTO kncf FROM vetb00073 a
|
|
WHERE (a.tipo_doc = "FT" and
|
|
a.codigo_dgii = codigodgii)
|
|
DISPLAY "ncf",kncf
|
|
IF kncf IS NULL THEN
|
|
LET kncf = 0
|
|
END IF
|
|
LET kncf = kncf + 1
|
|
DISPLAY BY NAME kncf
|
|
# No deja pasar del ncf_final autorizado en vetb00071
|
|
IF codigodgii IS NOT NULL THEN
|
|
IF NOT valida_rango_ncf("FT",codigodgii,kncf) THEN
|
|
RETURN
|
|
END IF
|
|
END IF
|
|
LABEL brinca:
|
|
# Actualiza la tabla de datos generales de la factura
|
|
IF fact_gral.factura IS NOT NULL THEN
|
|
BEGIN WORK
|
|
|
|
IF genera_ncf = "YES" THEN
|
|
LET proforma = "NCF"
|
|
LET modf="S"
|
|
END IF
|
|
# Forma de pago (formadepago.id_pago): credito = 4; contado la pone veprfu001
|
|
IF fact_gral.cond_pago = 1 THEN
|
|
LET fpago = NULL
|
|
ELSE
|
|
LET fpago = 4
|
|
END IF
|
|
LET documento_encabezado.eNcf ="E",codigodgii CLIPPED, kncf USING "&&&&&&&&&&"
|
|
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,bodega,cotizacion_no,
|
|
tipo_factura,documento_ref,descripcion_documento,placa,nombre_cliente,direccion_cliente,rnc,ncf,
|
|
titulo_ncf,fecha_vencimiento_ncf,id_pago,sucid)
|
|
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,
|
|
fact_gral.bodega,pcotizacion,proforma,pdocumento_ref,descripcion_doc,modf,fact_gral.nombre,fact_gral.direccion,num_rnc,
|
|
documento_encabezado.eNcf,descripcion,fecha_vencimiento,fpago,localidad)
|
|
|
|
# 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()
|
|
|
|
UPDATE iptb00006 SET fact_no = fact_gral.factura
|
|
WHERE num_doc = fact_gral.conduce AND cod_sp = fact_gral.tipo_cliente AND
|
|
cod_sp_sec = fact_gral.sec_cliente AND bodega = fact_gral.bodega
|
|
|
|
|
|
|
|
|
|
UPDATE vetb00073 SET ncf = kncf,us_crea = usuarios,fech_crea = getdate()
|
|
WHERE tipo_doc = 'FT' AND codigo_dgii = codigodgii
|
|
|
|
|
|
# INSERTA DOCUMENTO EN TRANSACCIONES NCF
|
|
INSERT INTO vetb00072
|
|
(documento, tipo_doc, codigo_dgii, ncf, us_crea, fech_crea, sucid, fecha_vencimiento)
|
|
VALUES
|
|
(fact_gral.factura,"FT",codigodgii,kncf,usuarios,getdate(),localidad,fecha_vencimiento)
|
|
|
|
END IF
|
|
|
|
CALL busca_avance(fact_gral.tipo_cliente,fact_gral.sec_cliente,pcotizacion,fact_gral.total_fact,fact_gral.fecha_factura,
|
|
fact_gral.sec_vend,localidad,fact_gral.factura,usuarios)
|
|
# Actualizacion de la tabla de cuentas por cobrar
|
|
|
|
IF fact_gral.cond_pago > 1 THEN
|
|
|
|
|
|
|
|
INSERT INTO cctb00001 (cod_cia,tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp_sec,fecha_orig,
|
|
fecha_ven,
|
|
aplica_a,valor,monto_desc,us_crea,fech_crea,bodega,sucid)
|
|
VALUES (fact_gral.cod_cia,tipo_f,fact_gral.factura,
|
|
fact_gral.tipo_cliente,fact_gral.sec_cliente,
|
|
fact_gral.sec_vend,fact_gral.fecha_factura,p_fecha_ven,
|
|
fact_gral.factura, fact_gral.total_fact,'0',
|
|
SUSER_SNAME(),GETDATE(),fact_gral.bodega,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_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
|
|
|
|
|
|
CALL documento_detalle.clear()
|
|
FOR idx = 1 TO cuenta_arr
|
|
IF fact_det[idx].cod_n IS NOT NULL THEN
|
|
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
|
|
|
|
LET documento_detalle[idx].precioUnitarioItem = (fact_Det[idx].precio*fact_gral.prima_us) -((fact_Det[idx].precio*fact_gral.prima_us) * (fact_det[idx].cantidad_2 / 100))
|
|
USING "<<<<<<<<<<<<<<<&.####"
|
|
IF ch_itbi = 'S' THEN
|
|
LET documento_detalle[idx].indicadorFacturacion=1
|
|
LET ditbis[idx] = fact_det[idx].monto_fact * (fact_gral.porc_itbi/100)
|
|
ELSE
|
|
IF codigodgii <> '46' THEN
|
|
LET documento_detalle[idx].indicadorFacturacion=4
|
|
ELSE
|
|
LET documento_detalle[idx].indicadorFacturacion=3
|
|
END IF
|
|
END IF
|
|
LET documento_detalle[idx].cantidadItem = fact_det[idx].cantidad USING "<<<<&&.##"
|
|
LET documento_detalle[idx].nombreItem = fact_det[idx].descrip_esp CLIPPED
|
|
|
|
IF fact_gral.prima_us IS NULL THEN
|
|
LET fact_gral.prima_us=0
|
|
END IF
|
|
|
|
|
|
LET documento_detalle[idx].montoItem = ((fact_det[idx].precio*fact_gral.prima_us) * fact_det[idx].cantidad) - fact_det[idx].cantidad_2 USING "<<<<<<<<<<<<<<<&.##"
|
|
END IF
|
|
|
|
IF ditbis[idx]IS NULL THEN
|
|
LET ditbis[idx] = 0
|
|
|
|
END IF
|
|
LET fact_Det[idx].monto_fact =fact_Det[idx].monto_fact + ditbis[idx]
|
|
|
|
|
|
INSERT INTO vetb00003 (cod_cia,factura,area,cod_n,cod_grupo,cod_tipo,cod_Sec,
|
|
cantidad,cantidad_2,bonificacion,precio,us_crea,fech_crea,sucid,id_kit,descripcion,valor_desc,itbis,
|
|
valor)
|
|
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,usuarios,getdate(),localidad,fact_det[idx].kit_id,fact_det[idx].descrip_esp,
|
|
valor_desc,ditbis[idx],documento_detalle[idx].montoItem)
|
|
|
|
|
|
# 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
|
|
COMMIT WORK
|
|
|
|
# Factura de contado (condicion 1): capturar efectivo/tarjeta/etc., generar el
|
|
# recibo PC y las formas de pago del e-CF ANTES de enviarlo a la DGII.
|
|
# Credito: sin ventana, el e-CF va con forma de pago 4 (venta a credito).
|
|
CALL tablaformaspago.clear()
|
|
IF fact_gral.cond_pago = 1 THEN
|
|
CALL veprfu001()
|
|
END IF
|
|
CALL set_formaspago(tablaformaspago)
|
|
|
|
LET p_companias.direccion = NULL
|
|
SELECT a.rnc,a.nombre,a.direccion1,a.email
|
|
INTO p_companias.rnc,p_companias.nombre,p_companias.direccion1,p_companias.email
|
|
FROM companias a
|
|
LET documento_encabezado.numeroFacturaInterna = fact_gral.factura
|
|
LET documento_encabezado.tipoIngreso = '01'
|
|
|
|
LET documento_encabezado.nombreFile =p_companias.rnc CLIPPED,"E", codigodgii CLIPPED, kncf USING "&&&&&&&&&&",".xml"
|
|
DISPLAY "fecha 23 ",fecha_vencimiento
|
|
LET documento_encabezado.FechaVencimientoSecuencia = fecha_vencimiento USING "dd-mm-yyyy"
|
|
LET documento_encabezado.numeroPedidoInterno = fact_gral.orden
|
|
LET documento_encabezado.tipoEcf = codigodgii
|
|
LET documento_encabezado.codigoVendedor = fact_gral.sec_vend
|
|
LET documento_encabezado.correoEmisor = p_companias.email CLIPPED
|
|
LET documento_encabezado.direccionEmisor = p_companias.direccion CLIPPED,p_companias.direccion1 CLIPPED
|
|
|
|
LET documento_encabezado.Municipio = id_municipio_dgii CLIPPED
|
|
LET documento_encabezado.Provincia =id_provincia_dgii CLIPPED
|
|
|
|
LET documento_encabezado.CodigoInternoComprador = fact_gral.tipo_cliente USING "<<","-",fact_gral.sec_cliente USING "<<<<<<<<<"
|
|
LET documento_encabezado.CorreoComprador = emailcliente
|
|
|
|
IF fact_gral.direccion IS NOT NULL OR LENGTH(fact_gral.direccion) > 3 THEN
|
|
LET documento_encabezado.DireccionComprador = fact_gral.direccion
|
|
ELSE
|
|
LET documento_encabezado.DireccionComprador = NULL
|
|
END IF
|
|
LET documento_encabezado.FechaEntrega = fact_gral.fecha_conduce
|
|
|
|
|
|
IF codigodgii = '32' AND fact_gral.total_fact*fact_gral.prima_us >= 250000 THEN
|
|
|
|
LET documento_encabezado.IdentificadorExtranjero = num_rnc
|
|
# ELSE
|
|
# LET documento_encabezado.rncComprador = num_rnc CLIPPED
|
|
# LET documento_encabezado.razonSocialComprador = fact_gral.nombre CLIPPED
|
|
END IF
|
|
IF tipodocumento <> '3' THEN
|
|
LET documento_encabezado.rncComprador = num_rnc CLIPPED
|
|
END IF
|
|
IF tipodocumento = '3' THEN
|
|
LET documento_encabezado.IdentificadorExtranjero = num_rnc CLIPPED
|
|
END IF
|
|
# CALL sus_caracter(fact_Gral.nombre) RETURNING documento_encabezado.razonSocialComprador
|
|
LET documento_encabezado.razonSocialComprador = fact_Gral.nombre CLIPPED
|
|
|
|
LET documento_encabezado.rncEmisor =p_companias.rnc CLIPPED
|
|
LET documento_encabezado.razonSocialEmisor =p_companias.nombre CLIPPED
|
|
|
|
LET documento_encabezado.fechaEmision = fact_gral.fecha_factura USING "dd-mm-yyyy"
|
|
# TipoPago no puede ir vacio (1=Contado, 2=Credito)
|
|
IF documento_encabezado.tipoPago IS NULL OR documento_encabezado.tipoPago = ' ' THEN
|
|
IF fact_gral.cond_pago = 1 THEN
|
|
LET documento_encabezado.tipoPago = '1'
|
|
ELSE
|
|
LET documento_encabezado.tipoPago = '2'
|
|
END IF
|
|
END IF
|
|
IF documento_encabezado.tipoPago <> '1' THEN
|
|
LET documento_encabezado.fechaLimitePago = p_fecha_ven USING "dd-mm-yyyy"
|
|
LET documento_encabezado.terminoPago = condicion.dias USING "<<<"," dias"
|
|
END IF
|
|
LET documento_encabezado.montoPago = fact_gral.total_fact*fact_gral.prima_us USING "<<<<<<<<<<<<<.##"
|
|
# LET documento_encabezado.NumeroCuentaPago = cuenta_cliente
|
|
# LET documento_encabezado.TipoCuentaPago = xtipocta
|
|
|
|
|
|
IF ch_itbi = 'S' THEN
|
|
LET documento_encabezado.indicadorMontoGravado=0
|
|
ELSE
|
|
LET documento_encabezado.indicadorMontoGravado=NULL
|
|
END IF
|
|
# Forma de pago DGII: credito = 4; contado = las capturadas en veprfu001
|
|
# (generafilexml escribe una <FormaDePago> por cada una; esta es la de respaldo)
|
|
IF fact_gral.cond_pago = 1 AND tablaformaspago.getLength() > 0 THEN
|
|
LET documento_encabezado.FormadePAgo = tablaformaspago[1].formapago
|
|
ELSE
|
|
LET documento_encabezado.FormadePAgo = '4'
|
|
END IF
|
|
|
|
IF ch_itbi = 'S' THEN
|
|
LET documento_encabezado.itbis1 = fact_gral.porc_itbi USING "<&"
|
|
LET documento_encabezado.montoExento = null
|
|
ELSE
|
|
LET documento_encabezado.itbis1 =0 USING "<&"
|
|
LET documento_encabezado.montoExento = fact_gral.total_fact*fact_gral.prima_us
|
|
END IF
|
|
LET documento_encabezado.itbis2 = 0 USING "<&"
|
|
LET documento_encabezado.itbis3 = 0 USING "<&"
|
|
|
|
|
|
IF ch_itbi = 'S' THEN
|
|
|
|
LET documento_encabezado.montoExento=0 USING "<&"
|
|
ELSE
|
|
LET documento_encabezado.montoExento=(fact_gral.sub_total*fact_gral.prima_us) - (fact_gral.desc_valor * fact_gral.prima_us)
|
|
END IF
|
|
IF codigodgii <> '46' THEN
|
|
LET documento_encabezado.montoGravadoI1 = (fact_gral.sub_total*fact_gral.prima_us) -
|
|
(fact_gral.desc_valor * fact_gral.prima_us) USING "<<<<<<<<<<<<<<<&.##"
|
|
LET documento_encabezado.montoGravadoI2 =0 USING "<&"
|
|
LET documento_encabezado.montoGravadoI3 =0 USING "<&"
|
|
|
|
ELSE
|
|
LET documento_encabezado.montoGravadoI1 = 0 USING "<&"
|
|
LET documento_encabezado.montoGravadoI2 =0 USING "<&"
|
|
LET documento_encabezado.montoGravadoI3 =(fact_gral.sub_total*fact_gral.prima_us) - (fact_gral.desc_valor * fact_gral.prima_us)
|
|
|
|
END IF
|
|
LET documento_encabezado.montoGravadoTotal = (fact_gral.sub_total*fact_gral.prima_us) -
|
|
(fact_gral.desc_valor*fact_gral.prima_us) USING "<<<<<<<<<<<<<<<&.##"
|
|
|
|
LET documento_encabezado.totalItbis = fact_gral.itbi*fact_gral.prima_us USING "<<<<<<<<<<<<<<<&.##"
|
|
LET documento_encabezado.totalItbis1 = fact_gral.itbi*fact_gral.prima_us USING "<<<<<<<<<<<<<<&.##"
|
|
LET documento_encabezado.totalItbis2 = 0 USING "<&"
|
|
LET documento_encabezado.totalItbis3 = 0 USING "<&"
|
|
|
|
LET documento_encabezado.montoTotal = fact_gral.total_fact *fact_gral.prima_us USING "<<<<<<<<<<<<<<.##"
|
|
|
|
CALL generafile(documento_encabezado.*,documento_detalle,localidad,localidad,'adicionar')
|
|
RETURNING phash,respuesta,fechafirma,codigo
|
|
DISPLAY "hash veprmt001 ",phash
|
|
DISPLAY "REspuesta Genera File VEPRMT022: ",respuesta
|
|
UPDATE vetb00002 SET hash = phash,ultima_respuesta = respuesta,
|
|
fechafirmadigital=fechafirma,
|
|
ncf = documento_encabezado.eNcf
|
|
# misma condicion que el UPDATE del estado (sucid); cod_cia siempre es 1
|
|
WHERE factura = fact_gral.factura AND sucid = localidad
|
|
|
|
# limpia la respuesta de la factura anterior (variables de modulo)
|
|
INITIALIZE pok.* TO NULL
|
|
LET p.trackid = NULL
|
|
LET p.estado = NULL
|
|
CALL p.mensajes.clear()
|
|
IF codigo = '200' THEN
|
|
TRY
|
|
CALL util.JSON.parse(respuesta,pok)
|
|
DISPLAY "LO TENGO EL POK:",Pok.*
|
|
|
|
CATCH
|
|
TRY
|
|
CALL util.JSON.parse(respuesta,otrojson)
|
|
LET p.trackid=NULL
|
|
LET p.estado = otrojson.estado
|
|
LET p.mensajes[1].valor= otrojson.mensajes[1].valor
|
|
CATCH
|
|
LET p.trackId =NULL
|
|
LET p.mensajes[1].valor = 'ERROR EN PARSE'
|
|
END TRY
|
|
END TRY
|
|
END IF
|
|
CALL ambiente() RETURNING ambiente
|
|
LET valor_control_ncf = documento_encabezado.montoTotal
|
|
LET xrespuesta = NULL
|
|
IF pok.trackId IS NOT NULL THEN
|
|
# La DGII devolvio TrackId (31/33/34 y 32 >= 250k por B2B): se consulta el estado.
|
|
# Sin TrackId (consumo 32, o el envio fallo) se muestra la respuesta directa.
|
|
CALL procesoEncf(' ',ambiente,' ',0,0,'consultatrackid',respuesta)
|
|
RETURNING khash,xrespuesta,codigo
|
|
DISPLAY "estado respuesta: ",CURRENT,xrespuesta," codigo: ",codigo
|
|
DISPLAY xrespuesta TO mensaje_dgii
|
|
CALL lee_respuesta_dgii(xrespuesta)
|
|
IF p.trackid IS NULL THEN
|
|
LET p.trackid = pok.trackId
|
|
END IF
|
|
ELSE
|
|
# Consumo (32 < 250k) o envio fallido: se interpreta la respuesta directa
|
|
CALL lee_respuesta_dgii(respuesta)
|
|
END IF
|
|
|
|
IF p.estado = ' ' OR p.estado IS NULL THEN
|
|
LET p.estado = 'ERROR'
|
|
END IF
|
|
|
|
-- Muestra el estado DGII (Aceptado/Rechazado) en el campo "estado", para TODOS los tipos
|
|
-- (antes en consumo/32 no se mostraba). mensaje_dgii se deja como estaba (es para el XML).
|
|
DISPLAY BY NAME p.trackid, p.estado
|
|
|
|
UPDATE vetb00002 SET trackid=p.trackid,
|
|
estado_dgii = p.estado,
|
|
mensaje = p.mensajes[1].valor
|
|
WHERE factura = fact_gral.factura AND sucid = localidad
|
|
|
|
# Avisa si la DGII acepto o rechazo el e-CF y por que
|
|
CALL muestra_resultado_dgii()
|
|
|
|
|
|
### ============================== IMPRESION CONSOLIDADO=============================
|
|
IF opt1 = "YES" THEN
|
|
SET CONNECTION "MSSQL"
|
|
#-> Valida si la factura realmente existe vg S�ado 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
|
|
|
|
DISPLAY BY NAME imprime}
|
|
|
|
LET r_filename ="veprmt022.4rp"
|
|
LET r_output="PDF"
|
|
|
|
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
|
|
|
|
LET preview=1
|
|
CALL fgl_report_selectDevice(r_output) -- changing default
|
|
CALL fgl_report_selectPreview(preview) -- changing default
|
|
LET handler = fgl_report_commitCurrentSettings() -- commit changes
|
|
LET salida = 'SVG'
|
|
|
|
|
|
START REPORT imp_fact TO XML HANDLER handler
|
|
|
|
FOR idx = 1 TO fact_det.getLength()
|
|
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
|
|
# DISPLAY "aqui",codigodgii
|
|
OUTPUT TO REPORT imp_fact(fact_gral.*,fact_det[idx].*,tot_porc,
|
|
p_bonifica[idx],cod_fact,kncf,codigodgii)
|
|
END IF
|
|
END FOR
|
|
|
|
DISPLAY nombre_m CLIPPED AT 1,1
|
|
FINISH REPORT imp_fact
|
|
END IF
|
|
# RUN imprime
|
|
|
|
END IF
|
|
#------------------------- TERMINA MSSQL----------------------------------------------
|
|
# INSERTA EN EXTERIOR
|
|
|
|
IF ch_itbi="S" AND genera_ncf = "YES" THEN
|
|
IF cliente_ncf = "S" THEN
|
|
IF localidad IS NULL THEN
|
|
CALL fgl_winmessage("ERROR","LOCALIDAD ESTA EN BLANCO","INFO")
|
|
RETURN
|
|
END IF
|
|
LET kncf = NULL
|
|
IF codigodgii IS NOT NULL THEN
|
|
SET CONNECTION "MSSQL"
|
|
|
|
LET factura_xc = fact_gral.factura
|
|
# Control facturas NCF
|
|
FOR idx = 1 TO fact_det.getLength()
|
|
IF fact_det[idx].cod_n IS NOT NULL THEN
|
|
CALL verifica_cantidad(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_gral.orden)
|
|
RETURNING execede
|
|
DISPLAY "aqui"
|
|
IF NOT execede THEN
|
|
CONTINUE FOR
|
|
ELSE
|
|
EXIT FOR
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
DISPLAY "ex",execede
|
|
IF NOT execede THEN
|
|
{ SELECT a.ncf INTO kncf FROM vetb00073 a
|
|
WHERE a.tipo_doc = "FT" AND
|
|
a.codigo_dgii = codigodgii}
|
|
DISPLAY "NCF",KNCF
|
|
SELECT a.ncf INTO kncf FROM vetb00073 a
|
|
WHERE (a.tipo_doc = "FT" and
|
|
a.codigo_dgii = codigodgii)
|
|
DISPLAY "ncf",kncf
|
|
IF kncf IS NULL THEN
|
|
LET kncf = 0
|
|
END IF
|
|
LET kncf = kncf + 1
|
|
DISPLAY BY NAME kncf
|
|
IF NOT valida_rango_ncf("FT",codigodgii,kncf) THEN
|
|
RETURN
|
|
END IF
|
|
|
|
SELECT ult_factura INTO fact_gral.factura FROM vetb00001 WHERE sucid = localidad
|
|
|
|
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
|
|
|
|
BEGIN WORK
|
|
|
|
UPDATE vetb00073 SET ncf = kncf,us_crea = usuarios,fech_crea = getdate()
|
|
WHERE tipo_doc = 'FT' AND codigo_dgii = codigodgii
|
|
|
|
|
|
UPDATE vetb00001 SET ult_factura = fact_gral.factura,
|
|
us_crea = usuarios,
|
|
fech_crea = GETDATE()
|
|
WHERE sucid = localidad
|
|
|
|
INSERT INTO vetb00072 VALUES
|
|
(fact_gral.factura,"FT",codigodgii,kncf,usuarios,getdate(),localidad)
|
|
|
|
|
|
IF genera_ncf = "YES" THEN
|
|
LET proforma = "NCF"
|
|
LET modf="S"
|
|
END IF
|
|
|
|
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,bodega,factura_c,sucid,placa)
|
|
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,pcotizacion,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,usuarios,GETDATE(),NULL,NULL,documento_ref,fact_gral.placa_transp,
|
|
fact_gral.bodega,factura_xc,localidad,modf)
|
|
|
|
# Actualizacion de la tabla de cuentas por cobrar
|
|
|
|
CALL busca_avance(fact_gral.tipo_cliente,fact_gral.sec_cliente,pcotizacion,fact_gral.total_fact,fact_gral.fecha_factura,
|
|
fact_gral.sec_vend,localidad,fact_gral.factura,usuarios)
|
|
IF fact_gral.cond_pago > 1 THEN
|
|
|
|
|
|
|
|
INSERT INTO cctb00001 (cod_cia,tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp_sec,fecha_orig,
|
|
fecha_ven,
|
|
aplica_a,valor,monto_desc,us_crea,fech_crea,bodega,sucid,documento_ref)
|
|
VALUES (fact_gral.cod_cia,tipo_f,fact_gral.factura,
|
|
fact_gral.tipo_cliente,fact_gral.sec_cliente,
|
|
fact_gral.sec_vend,fact_gral.fecha_factura,p_fecha_ven,
|
|
fact_gral.factura, fact_gral.total_fact,'0',
|
|
usuarios,GETDATE(),fact_gral.bodega,localidad,factura_xc)
|
|
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
|
|
|
|
# BUSCA DOCUMENTO SECUENCIA PRODUCCION
|
|
SELECT a.num_doc INTO xdocumento_almacen FROM iptb00007 a WHERE cod_mov = 20
|
|
IF xdocumento_almacen IS NULL THEN
|
|
LET xdocumento_almacen =0
|
|
END IF
|
|
LET xdocumento_almacen=xdocumento_almacen +1
|
|
UPDATE iptb00007 SET num_doc = xdocumento_almacen WHERE cod_mov = 20
|
|
|
|
FOR idx = 1 TO fact_det.getLength()
|
|
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
|
|
|
|
# CALL verifica_cantidad(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_gral.orden)
|
|
# RETURNING execede
|
|
INSERT INTO vetb00003 (cod_cia,factura,area,cod_n,cod_grupo,cod_tipo,cod_Sec,
|
|
cantidad,cantidad_2,bonificacion,precio,us_crea,fech_crea,sucid,id_kit,descripcion,valor_desc,itbis,
|
|
valor)
|
|
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,usuarios,getdate(),localidad,fact_det[idx].kit_id,fact_det[idx].descrip_esp,
|
|
valor_desc,ditbis[idx],documento_detalle[idx].montoItem)
|
|
|
|
IF fact_det[idx].cantidad > 0 THEN
|
|
LET fact_det[idx].cantidad= fact_det[idx].cantidad * -1
|
|
END IF
|
|
|
|
INSERT INTO iptb00006 (cod_cia,num_doc,fact_no,fecha,cod_mov,cod_n,
|
|
cod_grupo,cod_tipo,cod_sec,cantidad_2,
|
|
bodega,us_crea,fech_crea,cotizacion_no,num_oc)
|
|
VALUES (fact_gral.cod_cia,xdocumento_almacen,fact_gral.factura,
|
|
fact_gral.fecha_factura,20,fact_det[idx].cod_n,
|
|
fact_det[idx].cod_grupo,fact_det[idx].cod_tipo,
|
|
fact_det[idx].cod_sec,fact_det[idx].cantidad,localidad,usuarios,getdate(),fact_gral.conduce,
|
|
fact_gral.orden)
|
|
|
|
IF fact_det[idx].cantidad < 0 THEN
|
|
LET fact_det[idx].cantidad= fact_det[idx].cantidad * -1
|
|
END IF
|
|
# AFECTA REGISTRO PARA LA PRODUCCION. FECHA 15/04/2018. POR JOHNNY SOTO
|
|
|
|
INSERT INTO iptb00006 (cod_cia,num_doc,fact_no,fecha,cod_mov,cod_n,
|
|
cod_grupo,cod_tipo,cod_sec,cantidad_2,
|
|
bodega,us_crea,fech_crea,cotizacion_no,num_oc)
|
|
VALUES (fact_gral.cod_cia,xdocumento_almacen,fact_gral.factura,
|
|
fact_gral.fecha_factura,20,fact_det[idx].cod_n,
|
|
fact_det[idx].cod_grupo,fact_det[idx].cod_tipo,
|
|
fact_det[idx].cod_sec,fact_det[idx].cantidad,localidad,usuarios,getdate(),fact_gral.conduce,
|
|
fact_gral.orden)
|
|
|
|
# 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
|
|
|
|
COMMIT WORK
|
|
|
|
### IMPRESION FACTURA CON NCF
|
|
SET CONNECTION "MSSQL"
|
|
{ ESTE PROCEDIMIENTO ESTABA PARA IMPRIMIR EN OTRA IMPRESORA REMOTA
|
|
CALL defecto(usuarios,clave,xcopia) RETURNING imprime,negrilla_on,negrillas_of,
|
|
doble_on,doble_off,comp_on,comp_off,
|
|
doce,normal,archivo,copia
|
|
|
|
|
|
|
|
START REPORT imp_fact_ncf TO archivo
|
|
|
|
FOR idx = 1 TO fact_Det.getLength()
|
|
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_ncf(fact_gral.*,fact_det[idx].*,tot_porc,
|
|
p_bonifica[idx],cod_fact,kncf,codigodgii)
|
|
|
|
END IF
|
|
END FOR
|
|
|
|
FINISH REPORT imp_fact_ncf
|
|
|
|
RUN imprime
|
|
}
|
|
UPDATE vetb00002 SET factura_ext = fact_gral.factura
|
|
WHERE factura = factura_xc AND tipo_cliente = fact_gral.tipo_cliente AND
|
|
sec_cliente = fact_gral.sec_cliente
|
|
|
|
UPDATE cctb00001 SET factura_ext = fact_gral.factura WHERE num_doc = factura_xc AND
|
|
tipo_Doc IN ('FE','FT') AND tipo_cliente = fact_gral.tipo_cliente AND
|
|
sec_cliente = fact_gral.sec_cliente
|
|
|
|
|
|
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
|
|
doble_on,doble_off,comp_on,comp_off,
|
|
doce,normal,archivo,copia
|
|
|
|
SET CONNECTION "MSSQL"
|
|
{ START REPORT imp_fact_ncf TO archivo
|
|
|
|
FOR idx = 1 TO fact_Det.getLength()
|
|
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_ncf(fact_gral.*,fact_det[idx].*,tot_porc,
|
|
p_bonifica[idx],cod_fact,kncf,codigodgii)
|
|
|
|
END IF
|
|
END FOR
|
|
|
|
FINISH REPORT imp_fact_ncf}
|
|
|
|
RUN imprime
|
|
LET impresion = "S"
|
|
ELSE
|
|
CALL fgl_Winmessage("INFO","LA FACTURACION CON NCF NO SE PUEDE REALIZAR, ESTA FACTURADA","INFO")
|
|
return
|
|
END IF
|
|
|
|
END IF # FIN CLIENTE_NCF
|
|
END IF
|
|
END IF
|
|
####----------------- TERMINA EXTERIOR-----------------------------------------------
|
|
|
|
END IF
|
|
|
|
|
|
LET numero_msg = 1
|
|
CALL msg(numero_msg)
|
|
SET CONNECTION "MSSQL"
|
|
|
|
CALL fact_det.clear()
|
|
|
|
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 regresa
|
|
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,pncf,pcodigodgii)
|
|
DEFINE x RECORD
|
|
cod_cia LIKE vetb00002.cod_cia,
|
|
ventas LIKE vetb00002.ventas,
|
|
zona LIKE vetb00002.zona,
|
|
factura LIKE vetb00002.factura,
|
|
bodega SMALLINT,
|
|
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(8,2),
|
|
monto_fact DECIMAL(12,3),
|
|
kit_id INT
|
|
END RECORD
|
|
DEFINE bonifica INTEGER,
|
|
i,cod_f SMALLINT,
|
|
plado1,plado2,plado3,pcantidad,pmedida,total_unidades DEC(12,5),
|
|
pncf INT, pcodigodgii CHAR(16)
|
|
|
|
|
|
DEFINE tot_b,tot_n,tot_m DECIMAL(12,2),
|
|
ch_fech CHAR(20),
|
|
descripcion_area CHAR(30)
|
|
DEFINE porciento DECIMAL(8,3)
|
|
DEFINE normal,doce,negras,negras_off,doble CHAR(2)
|
|
|
|
DEFINE nombre_vend,apellido_vend CHAR(15)
|
|
DEFINE comprimido,comprimido_of CHAR(1)
|
|
|
|
DEFINE j,lj,h INTEGER,
|
|
etiqueta CHAR(30),
|
|
pfecha_ncf date
|
|
|
|
OUTPUT
|
|
TOP MARGIN 2
|
|
LEFT MARGIN 0
|
|
#PAGE LENGTH 65
|
|
BOTTOM MARGIN 3
|
|
|
|
ORDER BY x.factura,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
|
|
SELECT a.fecha_vencimiento INTO pfecha_ncf FROM vetb00071 a
|
|
WHERE (a.tipo_doc = "FT" and
|
|
a.codigo_dgii = pcodigodgii)
|
|
DISPLAY pfecha_ncf," ",kncf," ",pcodigodgii
|
|
IF ch_encabeza = "S" THEN
|
|
PRINT COLUMN 4, normal,doble,p_companias.nombre
|
|
PRINT COLUMN 4,NORMAL,p_companias.direccion
|
|
PRINT COLUMN 4,NORMAL,"Telefono ",p_companias.telefono
|
|
PRINT COLUMN 4,NORMAL,"Rnc ",p_companias.rnc
|
|
print COLUMN 50, "NCF: ",pcodigodgii CLIPPED,pncf USING "&&&&&&&&"
|
|
PRINT COLUMN 50, "Valido Hasta: ",pfecha_ncf
|
|
# DISPLAY p_companias.nombre
|
|
ELSE
|
|
PRINT
|
|
PRINT
|
|
PRINT
|
|
PRINT
|
|
PRINT
|
|
PRINT
|
|
END IF
|
|
DISPLAY pncf,pcodigodgii
|
|
PRINT COLUMN 50, doble,"FACTURA" CLIPPED,":",x.factura using "<<<<<<"
|
|
IF descripcion_doc IS NOT NULL THEN
|
|
PRINT COLUMN 40, descripcion_Doc CLIPPED
|
|
ELSE
|
|
SKIP 1 LINE
|
|
END IF
|
|
|
|
PRINT COLUMN 4, "PAGINA NO. ",pageno USING "<<<"
|
|
#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 #",cliente_bas.num_rnc
|
|
|
|
# PRINT COLUMN 4, pubicacion[1,75]
|
|
# PRINT COLUMN 4, pubicacion[76,100]
|
|
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 78, "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 78, "DESCUENTO",
|
|
COLUMN 93, 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 "###.##","%"," ITBIS",
|
|
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)
|
|
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 "&&"
|
|
aqui estaba cerrar comentario
|
|
SKIP 3 LINES
|
|
PRINT COLUMN 4,"-------------------------------",20 SPACES,
|
|
"-------------------------------"
|
|
|
|
PRINT COLUMN 4," FACTURADO POR ",20 SPACES,
|
|
" REVISADO POR "
|
|
|
|
|
|
#SKIP 4 LINES
|
|
END REPORT
|
|
}{
|
|
REPORT imp_fact_ncf(x,z,porciento,bonifica,cod_f,pncf,Pcodigodgii)
|
|
|
|
DEFINE x RECORD
|
|
cod_cia LIKE vetb00002.cod_cia,
|
|
ventas LIKE vetb00002.ventas,
|
|
zona CHAR(3),
|
|
factura LIKE vetb00002.factura,
|
|
bodega SMALLINT,
|
|
conduce LIKE vetb00002.conduce,
|
|
fecha_conduce DATE,
|
|
fecha_factura DATE,
|
|
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 DATE,
|
|
porc_itbi LIKE vetb00002.porc_itbi,
|
|
sec_vend LIKE vetb00002.sec_vend,
|
|
nombre_vend CHAR(60),
|
|
cod_transp LIKE iptb00006.cod_transp,
|
|
sec_transp LIKE iptb00006.sec_transp,
|
|
cod_tarifa LIKE iptb00006.cod_tarifa,
|
|
nombre_tran CHAR(30),
|
|
fecha_embarque DATE,
|
|
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(5),
|
|
cantidad DEC(12,5),
|
|
precio LIKE vetb00003.precio,
|
|
cantidad_2 LIKE vetb00003.cantidad_2,
|
|
monto_fact DECIMAL(12,2),
|
|
kit_id INT
|
|
|
|
END RECORD,
|
|
Pcodigodgii LIKE vetb00071.codigo_dgii
|
|
|
|
DEFINE i,cod_f SMALLINT
|
|
DEFINE bonifica,pncf INTEGER
|
|
DEFINE tot_b,tot_n,tot_m DECIMAL(12,2),
|
|
ch_fech CHAR(20)
|
|
DEFINE porciento DECIMAL(8,3)
|
|
DEFINE normal,doce,negras,negras_off,doble CHAR(2)
|
|
DEFINE rnc CHAR(11)
|
|
DEFINE comprimido,comprimido_of CHAR(1)
|
|
DEFINE j,lj,h INTEGER
|
|
|
|
OUTPUT
|
|
TOP MARGIN 2
|
|
LEFT MARGIN 0
|
|
# PAGE LENGTH 65
|
|
BOTTOM MARGIN 3
|
|
ORDER BY x.factura,z.cod_n,z.cod_sec
|
|
|
|
FORMAT
|
|
|
|
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
|
|
|
|
SELECT a.nombre INTO p_companias.nombre FROM companias a
|
|
|
|
LET lj = (80 - LENGTH(p_companias.nombre CLIPPED))/2
|
|
LET j = (80 - LENGTH(p_companias.direccion CLIPPED||", "||p_companias.direccion1 CLIPPED))/2
|
|
LET i = (80 - LENGTH("Tels : "||p_companias.telefono ||
|
|
" Fax : "||p_companias.fax CLIPPED))/2
|
|
LET h = (80 - LENGTH(p_companias.rnc CLIPPED))/2
|
|
|
|
#--------------------------------------------------------
|
|
PRINT COLUMN 1, normal,doble,p_companias.nombre CLIPPED
|
|
|
|
PRINT COLUMN 1,doce, p_companias.direccion CLIPPED,", ",
|
|
p_companias.direccion1 CLIPPED,
|
|
COLUMN 61, descripcion[1,29]
|
|
PRINT COLUMN 1, sucnombre,
|
|
COLUMN 61,descripcion[30,60]
|
|
|
|
|
|
PRINT COLUMN 1, "Tels : ",p_companias.telefono ,
|
|
" Fax : ",p_companias.fax,
|
|
COLUMN 60,"NCF: ",pcodigodgii CLIPPED,pncf USING "&&&&&&&&"
|
|
|
|
PRINT COLUMN 1, "RNC : ",p_companias.rnc,
|
|
COLUMN 61, "Valida Hasta: ",fecha_vencimiento USING "dd/mm/yyyy"
|
|
PRINT COLUMN 1, "Pag. ", pageno using "###"
|
|
|
|
|
|
|
|
#PRINT normal,comprimido_of
|
|
|
|
#--------------------------------------------------------
|
|
|
|
|
|
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
|
|
PRINT COLUMN 1,"----------------------------------------------------------------------------------------------"
|
|
IF x.ventas = "1" THEN
|
|
PRINT COLUMN 1, negras,"SENORES :"
|
|
ELSE
|
|
PRINT COLUMN 1, "SR@ :"
|
|
END IF
|
|
|
|
PRINT COLUMN 1, x.nombre CLIPPED," COD.#",x.tipo_cliente using "&&","-",
|
|
x.sec_cliente using "&&&&&&"
|
|
PRINT COLUMN 1, x.direccion CLIPPED," ",cliente_bas.telefono
|
|
PRINT COLUMN 1, x.ciudad CLIPPED
|
|
PRINT COLUMN 1, "RNC CLIENTE: ",rnc,
|
|
COLUMN 60, doble,"FACTURA ",x.factura using "&&&&&"
|
|
PRINT COLUMN 1, pubicacion[1,70]
|
|
PRINT COLUMN 1, pubicacion[71,80]
|
|
PRINT COLUMN 1,"--------------------------------------------------------------------------------------------"
|
|
PRINT normal,comprimido
|
|
|
|
|
|
PRINT "======================================================================================================",
|
|
"================================="
|
|
PRINT COLUMN 1, "SALIDA",
|
|
COLUMN 15, "ORDEN",
|
|
COLUMN 35, "FECHA",
|
|
COLUMN 60, "CONDICION",
|
|
COLUMN 80, "VENDEDOR",
|
|
COLUMN 100, "COTIZACION",
|
|
COLUMN 111, "DOCUMENTO",
|
|
COLUMN 123, "FECHA FACTURA"
|
|
|
|
PRINT COLUMN 1, x.conduce using "&&&&&&",
|
|
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 100, pcotizacion using "&&&&&&",
|
|
COLUMN 111, documento_ref[1,14],
|
|
COLUMN 126, x.fecha_factura using "dd/mm/yyyy"
|
|
PRINT "======================================================================================================",
|
|
"================================="
|
|
|
|
LET tot_n = 0
|
|
LET tot_b = 0
|
|
LET tot_m = 0
|
|
PRINT COLUMN 5,"CODIGO",
|
|
COLUMN 21, "CANTIDAD",
|
|
COLUMN 37, "UNIDADES",
|
|
COLUMN 50, "DESCRIPCION",
|
|
COLUMN 102, "PRECIO",
|
|
COLUMN 114, "DESC.",
|
|
COLUMN 131, "TOTAL"
|
|
|
|
PRINT "======================================================================================================",
|
|
"================================="
|
|
|
|
|
|
ON EVERY ROW
|
|
|
|
IF z.cantidad <> 0 THEN
|
|
LET p_iptb01.factor_conv = 1
|
|
LET p_iptb01.unidad = z.unidad_med
|
|
SELECT a.factor_conv,a.unidad INTO p_iptb01.factor_conv,p_iptb01.unidad
|
|
FROM iptb00001 a
|
|
WHERE a.cod_n = z.cod_n AND a.cod_grupo = z.cod_grupo AND
|
|
a.cod_tipo = z.cod_tipo AND a.cod_sec = z.cod_sec
|
|
|
|
IF p_iptb01.factor_conv IS NULL OR p_iptb01.factor_conv = 0 THEN
|
|
LET p_iptb01.factor_conv = 1
|
|
LET p_iptb01.unidad = z.unidad_med
|
|
END IF
|
|
|
|
PRINT COLUMN 5, z.cod_n USING "&&&&","-",z.cod_grupo USING "&&&&","-",
|
|
z.cod_tipo USING "&&&&","-",z.cod_sec USING "&&&&",
|
|
COLUMN 13, z.cantidad USING "###,###.###"," ",z.unidad_med CLIPPED,
|
|
COLUMN 32, z.cantidad/p_iptb01.factor_conv USING "###,###",
|
|
COLUMN 50, z.descrip_esp CLIPPED,
|
|
COLUMN 98, z.precio USING "###,###.###",
|
|
COLUMN 114, z.cantidad_2 USING "##.&&",
|
|
COLUMN 123, z.monto_fact USING "##,###,###.##"
|
|
END IF
|
|
|
|
AFTER GROUP OF x.factura
|
|
# Impresion de informaciones que pertenecen a facturas de exportacion
|
|
IF x.ventas = "2" or x.ventas = "4" THEN
|
|
|
|
|
|
PRINT COLUMN 122,"--------------"
|
|
PRINT COLUMN 78, "VALOR BRUTO ",
|
|
COLUMN 122, x.sub_total using "###,###,###.##"
|
|
|
|
|
|
|
|
IF x.desc_valor <> 0 THEN
|
|
|
|
PRINT COLUMN 78,"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 78, "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 "###.##","%"," ITBIS",
|
|
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 78, "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 2 LINES
|
|
END REPORT}
|
|
|
|
# Ventana de pago de una factura de CONTADO (condicion 1). Se llama despues de
|
|
# grabar la factura y antes de enviar el e-CF:
|
|
# - captura cuanto se pago en efectivo, cheque/transferencia y tarjeta;
|
|
# la suma tiene que dar el total de la factura (no se puede cancelar, la
|
|
# factura ya esta grabada);
|
|
# - genera el recibo PC en cctb00001 (aplicado a la factura) y sube el contador
|
|
# PC de cctb00003 (lo crea si no existe);
|
|
# - llena tablaformaspago con los codigos DGII para el XML:
|
|
# 1=Efectivo 2=Cheque/Transferencia/Deposito 3=Tarjeta;
|
|
# - actualiza vetb00002.id_pago con la forma principal (tabla formadepago).
|
|
FUNCTION veprfu001()
|
|
DEFINE pagos RECORD
|
|
documento LIKE vetb00002.factura,
|
|
detalle CHAR(30),
|
|
factura LIKE vetb00002.factura,
|
|
cheque_no LIKE cctb00001.num_cheque,
|
|
valor_cheque DECIMAL(12,2),
|
|
valor_efectivo DECIMAL(12,2),
|
|
monto_cr DECIMAL(12,2),
|
|
valor_total DECIMAL(12,2)
|
|
END RECORD,
|
|
vrecibo INTEGER,
|
|
vvalor DECIMAL(14,2),
|
|
vmayor DECIMAL(12,2),
|
|
vmensaje STRING
|
|
|
|
OPEN WINDOW captura AT 7,12 WITH FORM "vefmwd013"
|
|
ATTRIBUTE (BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST)
|
|
|
|
LET vrecibo = NULL
|
|
SELECT a.ult_recibo INTO vrecibo FROM cctb00003 a WHERE a.tipo_doc = "PC"
|
|
IF vrecibo IS NULL THEN
|
|
LET vrecibo = 0
|
|
END IF
|
|
|
|
LET pagos.documento = vrecibo + 1
|
|
LET pagos.factura = fact_gral.factura
|
|
LET pagos.detalle = fact_gral.nombre
|
|
LET pagos.cheque_no = NULL
|
|
LET pagos.valor_efectivo = fact_gral.total_fact
|
|
LET pagos.valor_cheque = 0
|
|
LET pagos.monto_cr = 0
|
|
LET pagos.valor_total = fact_gral.total_fact
|
|
DISPLAY BY NAME pagos.documento,pagos.factura,pagos.valor_total
|
|
|
|
INPUT BY NAME pagos.detalle,pagos.cheque_no,pagos.valor_cheque,
|
|
pagos.valor_efectivo,pagos.monto_cr WITHOUT DEFAULTS
|
|
|
|
AFTER FIELD valor_cheque,valor_efectivo,monto_cr
|
|
CALL suma_pagos(pagos.valor_cheque,pagos.valor_efectivo,pagos.monto_cr)
|
|
RETURNING pagos.valor_total
|
|
DISPLAY BY NAME pagos.valor_total ATTRIBUTE(BOLD)
|
|
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET int_flag = FALSE
|
|
CALL fgl_winmessage("PAGO",
|
|
"La factura ya esta grabada.\nIndique como se pago (efectivo, tarjeta, etc.).",
|
|
"exclamation")
|
|
CONTINUE INPUT
|
|
END IF
|
|
IF pagos.valor_cheque IS NULL THEN LET pagos.valor_cheque = 0 END IF
|
|
IF pagos.valor_efectivo IS NULL THEN LET pagos.valor_efectivo = 0 END IF
|
|
IF pagos.monto_cr IS NULL THEN LET pagos.monto_cr = 0 END IF
|
|
IF pagos.valor_cheque < 0 OR pagos.valor_efectivo < 0 OR pagos.monto_cr < 0 THEN
|
|
CALL fgl_winmessage("PAGO","Los montos no pueden ser negativos.","stop")
|
|
CONTINUE INPUT
|
|
END IF
|
|
CALL suma_pagos(pagos.valor_cheque,pagos.valor_efectivo,pagos.monto_cr)
|
|
RETURNING pagos.valor_total
|
|
DISPLAY BY NAME pagos.valor_total ATTRIBUTE(BOLD)
|
|
IF pagos.valor_total <> fact_gral.total_fact THEN
|
|
LET vmensaje = "La suma de las formas de pago (",
|
|
pagos.valor_total USING "###,###,##&.&&",
|
|
") debe ser igual al total de la factura (",
|
|
fact_gral.total_fact USING "###,###,##&.&&", ")."
|
|
CALL fgl_winmessage("PAGO",vmensaje,"stop")
|
|
CONTINUE INPUT
|
|
END IF
|
|
END INPUT
|
|
|
|
# Formas de pago para el e-CF (una por cada monto > 0)
|
|
CALL tablaformaspago.clear()
|
|
CALL agrega_formapago("1",pagos.valor_efectivo)
|
|
CALL agrega_formapago("2",pagos.valor_cheque)
|
|
CALL agrega_formapago("3",pagos.monto_cr)
|
|
|
|
# Forma principal (la de mayor monto) para vetb00002.id_pago (tabla formadepago:
|
|
# 1=Efectivo 2=Tarjeta 3=Cheque/Transferencia/Deposito)
|
|
LET fpago = 1
|
|
LET vmayor = pagos.valor_efectivo
|
|
IF pagos.monto_cr > vmayor THEN
|
|
LET fpago = 2
|
|
LET vmayor = pagos.monto_cr
|
|
END IF
|
|
IF pagos.valor_cheque > vmayor THEN
|
|
LET fpago = 3
|
|
LET vmayor = pagos.valor_cheque
|
|
END IF
|
|
|
|
# Recibo PC aplicado a la factura
|
|
BEGIN WORK
|
|
LET vrecibo = NULL
|
|
SELECT a.ult_recibo INTO vrecibo FROM cctb00003 a WHERE a.tipo_doc = "PC"
|
|
IF STATUS = NOTFOUND THEN
|
|
INSERT INTO cctb00003 (tipo_doc,ult_recibo,us_crea,fech_crea)
|
|
VALUES ("PC",0,usuarios,GETDATE())
|
|
END IF
|
|
IF vrecibo IS NULL THEN
|
|
LET vrecibo = 0
|
|
END IF
|
|
LET pagos.documento = vrecibo + 1
|
|
LET vvalor = fact_gral.total_fact * -1
|
|
|
|
INSERT INTO cctb00001 (cod_cia,tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp_sec,fecha_orig,
|
|
fecha_ven,aplica_a,localidad_aplica_a,num_cheque,valor,valor_efectivo,
|
|
valor_cheque,valor_tarjeta,monto_Desc,
|
|
us_crea,fech_crea,bodega,sucid,documento_ref,banco)
|
|
VALUES (fact_gral.cod_cia,"PC",pagos.documento,
|
|
fact_gral.tipo_cliente,fact_gral.sec_cliente,
|
|
fact_gral.sec_vend,fact_gral.fecha_factura,fact_gral.fecha_factura,
|
|
fact_gral.factura,localidad,pagos.cheque_no,
|
|
vvalor,pagos.valor_efectivo,pagos.valor_cheque,pagos.monto_cr,
|
|
0,usuarios,getdate(),localidad,localidad,pconduce,fact_gral.conduce)
|
|
|
|
UPDATE cctb00003 SET ult_recibo = pagos.documento,
|
|
us_mod = usuarios,
|
|
fech_mod = GETDATE()
|
|
WHERE tipo_doc = "PC"
|
|
|
|
UPDATE vetb00002 SET id_pago = fpago
|
|
WHERE factura = fact_gral.factura
|
|
COMMIT WORK
|
|
|
|
DISPLAY BY NAME pagos.documento
|
|
CLOSE WINDOW captura
|
|
END FUNCTION
|
|
|
|
# Suma de las formas de pago (los NULL cuentan como 0)
|
|
FUNCTION suma_pagos(p1,p2,p3)
|
|
DEFINE p1,p2,p3,vtotal DECIMAL(12,2)
|
|
LET vtotal = 0
|
|
IF p1 IS NOT NULL THEN LET vtotal = vtotal + p1 END IF
|
|
IF p2 IS NOT NULL THEN LET vtotal = vtotal + p2 END IF
|
|
IF p3 IS NOT NULL THEN LET vtotal = vtotal + p3 END IF
|
|
RETURN vtotal
|
|
END FUNCTION
|
|
|
|
# Agrega una <FormaDePago> al e-CF si el monto es mayor que 0 (en la moneda del comprobante)
|
|
FUNCTION agrega_formapago(pcodigo,pmonto)
|
|
DEFINE pcodigo STRING,
|
|
pmonto DECIMAL(12,2),
|
|
vtasa DECIMAL(12,4),
|
|
i INTEGER
|
|
IF pmonto IS NULL OR pmonto <= 0 THEN
|
|
RETURN
|
|
END IF
|
|
LET vtasa = fact_gral.prima_us
|
|
IF vtasa IS NULL OR vtasa = 0 THEN
|
|
LET vtasa = 1
|
|
END IF
|
|
CALL tablaformaspago.appendElement()
|
|
LET i = tablaformaspago.getLength()
|
|
LET tablaformaspago[i].formapago = pcodigo
|
|
LET tablaformaspago[i].montopago = pmonto * vtasa USING "<<<<<<<<<<<<&.&&"
|
|
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,
|
|
bodega SMALLINT,
|
|
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()
|
|
DEFINE msg STRING,correos,subject ,procedimiento, cuerpo_correo VARCHAR(100),
|
|
fecha_xc VARCHAR(10)
|
|
LET INT_FLAG = FALSE
|
|
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
|
|
|
|
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
|
|
|
|
BEGIN WORK
|
|
UPDATE vetb00002 SET status_t = "E",
|
|
us_mod = usuarios,
|
|
fech_mod = GETDATE()
|
|
WHERE factura = p_fact_no AND fech_crea > '01/01/2009'
|
|
and cod_cia = fact_Gral.cod_cia
|
|
|
|
|
|
UPDATE vetb00003 SET status_t = "E",
|
|
us_mod = usuarios,
|
|
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 = usuarios,
|
|
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 = usuarios,
|
|
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
|
|
|
|
UPDATE cctb00001 SET status_t = "E",
|
|
us_mod = usuarios,
|
|
fech_mod = GETDATE()
|
|
WHERE aplica_a = p_fact_no AND tipo_doc = "AP"
|
|
|
|
# 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 = usuarios, fech_mod = GETDATE()
|
|
WHERE factura = p_fact_no AND cod_mov = p_codigo
|
|
|
|
COMMIT WORK
|
|
|
|
SET CONNECTION "MSSQL"
|
|
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 fact_det.getLength()
|
|
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()
|
|
DEFINE kcond_pago SMALLINT, dcondicion CHAR(30)
|
|
|
|
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()
|
|
DEFINE tot_porc dec(8,2),
|
|
cod_fact SMALLINT,
|
|
imprime_ncf VARCHAR(3)
|
|
|
|
SET CONNECTION "MSSQL"
|
|
|
|
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.bodega,a.conduce,convert(char(10),a.fecha_conduce,103),convert(char(10),a.fecha_factura,103),a.tipo_cliente, ",
|
|
" a.sec_cliente,g.nombre,ISNULL(RTRIM(b.calle),' ') + ' ' + ISNULL(RTRIM(b.casa_num),' ') + ' ' + ISNULL(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, ",
|
|
" ISNULL(RTRIM(d.nom1_emp),' ') + ' ' + ISNULL(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,a.tipo_factura,a.descripcion_documento,a.documento_ref,c.codigo_dgii ",
|
|
" 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 ,vetb00072 c",
|
|
" 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 c.documento=a.factura 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,proforma,descripcion_doc,pdocumento_Ref,codigodgii
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
CALL info()
|
|
CALL informacion(fact_gral.conduce,fact_gral.ventas,fact_gral.bodega)
|
|
LET pcondicion = ui.ComboBox.forName("formonly.cond_pago")
|
|
CALL ccondicion()
|
|
CALL bodegas('1')
|
|
# CALL busca_ncf(fact_gral.factura) RETURNING codigodgii,kncf,descripcion_ncf,factura_xc
|
|
|
|
DISPLAY BY NAME fact_gral.*,factura_e,documento_ref,codigodgii,kncf,descripcion_ncf,proforma,
|
|
descripcion_Doc,pdocumento_Ref,codigodgii
|
|
DISPLAY factura_xc TO factura1
|
|
|
|
MENU "NAVEGACION:"
|
|
COMMAND "Siguiente"
|
|
FETCH NEXT consulta iNTO fact_Gral.*,factura_e,documento_ref,proforma,descripcion_doc,pdocumento_Ref,codigodgii
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
CALL info()
|
|
CALL informacion(fact_gral.conduce,fact_gral.ventas,fact_gral.bodega)
|
|
LET pcondicion = ui.ComboBox.forName("formonly.cond_pago")
|
|
CALL ccondicion()
|
|
# CALL busca_ncf(fact_gral.factura) RETURNING codigodgii,kncf,descripcion_ncf,factura_xc
|
|
|
|
DISPLAY BY NAME fact_gral.*,factura_e,documento_ref,codigodgii,kncf,descripcion_ncf,documento_ref,proforma,
|
|
descripcion_Doc,pdocumento_Ref,codigodgii
|
|
DISPLAY factura_xc TO factura1
|
|
|
|
COMMAND "Anterior"
|
|
FETCH PREVIOUS consulta iNTO fact_Gral.*,factura_e,documento_ref,proforma,descripcion_doc,pdocumento_Ref,codigodgii
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
CALL info()
|
|
CALL informacion(fact_gral.conduce,fact_gral.ventas,fact_gral.bodega)
|
|
LET pcondicion = ui.ComboBox.forName("formonly.cond_pago")
|
|
CALL ccondicion()
|
|
# CALL busca_ncf(fact_gral.factura) RETURNING codigodgii,kncf,descripcion_ncf,factura_xc
|
|
DISPLAY BY NAME fact_gral.*,factura_e,documento_ref,codigodgii,kncf,descripcion_ncf,documento_ref,proforma,pdocumento_Ref,codigodgii
|
|
DISPLAY factura_xc TO factura1
|
|
|
|
COMMAND "Primero"
|
|
FETCH FIRST consulta iNTO fact_Gral.*,factura_e,documento_ref,proforma,descripcion_doc,pdocumento_Ref,codigodgii
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
CALL info()
|
|
CALL informacion(fact_gral.conduce,fact_gral.ventas,fact_gral.bodega)
|
|
LET pcondicion = ui.ComboBox.forName("formonly.cond_pago")
|
|
CALL ccondicion()
|
|
# CALL busca_ncf(fact_gral.factura) RETURNING codigodgii,kncf,descripcion_ncf,factura_xc
|
|
DISPLAY BY NAME fact_gral.*,factura_e,documento_ref,codigodgii,kncf,descripcion_ncf,documento_ref,proforma,pdocumento_Ref,codigodgii
|
|
DISPLAY factura_xc TO factura1
|
|
COMMAND "Ultimo"
|
|
FETCH LAST consulta iNTO fact_Gral.*,factura_e,documento_ref,proforma,descripcion_doc,pdocumento_Ref,codigodgii
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
CALL info()
|
|
CALL informacion(fact_gral.conduce,fact_gral.ventas,fact_gral.bodega)
|
|
LET pcondicion = ui.ComboBox.forName("formonly.cond_pago")
|
|
CALL ccondicion()
|
|
# CALL busca_ncf(fact_gral.factura) RETURNING codigodgii,kncf,descripcion_ncf,factura_xc
|
|
DISPLAY BY NAME fact_gral.*,factura_e,documento_ref,codigodgii,kncf,descripcion_ncf,documento_ref,proforma,
|
|
descripcion_Doc,pdocumento_Ref,codigodgii
|
|
DISPLAY factura_xc TO factura1
|
|
|
|
# NCF deshabilitado: ya no se asigna NCF despues de crear la factura.
|
|
{COMMAND "NCF"
|
|
SELECT b.placa INTO modf FROM vetb00002 b
|
|
WHERE b.factura=fact_gral.factura
|
|
|
|
|
|
IF modf ="S" THEN
|
|
LET numero_msg = 504
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
ELSE
|
|
CALL actualiza_ncf()
|
|
END IF }
|
|
|
|
|
|
COMMAND "ITEMS"
|
|
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
|
|
|
|
LET ch_encabeza ="S"
|
|
CALL fact_det.clear()
|
|
|
|
{CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
|
|
doble_on,doble_off,comp_on,comp_off,
|
|
doce,normal,archivo,copia
|
|
|
|
DISPLAY BY NAME imprime }
|
|
|
|
LET r_filename ="veprmt022.4rp"
|
|
LET r_output="PDF"
|
|
|
|
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
|
|
|
|
LET preview=1
|
|
CALL fgl_report_selectDevice(r_output) -- changing default
|
|
CALL fgl_report_selectPreview(preview) -- changing default
|
|
LET handler = fgl_report_commitCurrentSettings() -- commit changes
|
|
LET salida = 'SVG'
|
|
|
|
|
|
START REPORT imp_fact TO XML HANDLER handler
|
|
|
|
# CALL fgl_winmessage("INFO",p_companias.rnc,"INFO1")
|
|
|
|
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 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 "
|
|
|
|
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
|
|
DISPLAY "aqui",codigodgii
|
|
OUTPUT TO REPORT imp_fact(fact_gral.*,fact_det[idx].*,tot_porc,
|
|
p_bonifica[idx],cod_fact,kncf,codigodgii)
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
CALL set_count(idx-1)
|
|
|
|
DISPLAY ARRAY fact_det TO s_fact.*
|
|
FINISH REPORT imp_fact
|
|
END IF
|
|
# CALL fgl_winmessage("error",impresor,"stop")
|
|
# RUN imprime
|
|
|
|
# CONTROL NCF
|
|
SELECT a.ncf INTO cliente_ncf FROM vetb00060 a WHERE a.tipo_cliente = fact_gral.tipo_cliente
|
|
IF cliente_ncf = "S" THEN
|
|
LET imprime_ncf = fgl_winquestion("NCF","DESEA IMPRIMIR FACTURA CON NCF?","NO","NO|YES","QUESTION",0)
|
|
IF imprime_ncf = "YES" THEN
|
|
### IMPRESION FACTURA CON NCF
|
|
SET CONNECTION "MSSQL"
|
|
|
|
SELECT a.sucid,b.sucnombre,b.direccion,c.nombre_provincia,b.telefono,b.fax,b.rnc
|
|
INTO localidad,sucnombre,p_companias.direccion,p_companias.direccion1,
|
|
p_companias.telefono,p_companias.fax,p_companias.rnc
|
|
FROM seg0001 a, sucursales b
|
|
LEFT OUTER JOIN vetb00020 c ON b.localidad = c.cod_provincia
|
|
WHERE a.usuario = usuarios AND a.sucid = b.sucid
|
|
|
|
LET p_companias.nombre= sucnombre
|
|
|
|
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
|
|
doble_on,doble_off,comp_on,comp_off,
|
|
doce,normal,archivo,copia
|
|
|
|
SET CONNECTION "MSSQL"
|
|
|
|
|
|
SELECT a.factura INTO factura_xc FROM vetb00002 a WHERE a.factura_c = fact_gral.factura
|
|
DISPLAY factura_xc TO factura1
|
|
LET codigodgii =NULL
|
|
LET kncf = NULL
|
|
LET descripcion=NULL
|
|
SELECT a.codigo_dgii,a.ncf,b.tipo_ncf,CONVERT(CHAR(10),b.fecha_vencimiento,103)
|
|
INTO codigodgii,kncf,descripcion,fecha_vencimiento FROM vetb00072 a,vetb00071 b
|
|
WHERE a.documento = factura_xc AND a.codigo_dgii = b.codigo_dgii AND
|
|
a.tipo_doc = 'FT' AND b.disponible = 'S'
|
|
|
|
IF STATUS <> NOTFOUND THEN
|
|
LET fact_gral.factura = factura_xc
|
|
|
|
|
|
{ START REPORT imp_fact_ncf TO archivo
|
|
|
|
FOR idx = 1 TO fact_det.getLength()
|
|
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_ncf(fact_gral.*,fact_det[idx].*,tot_porc,
|
|
p_bonifica[idx],cod_fact,kncf,codigodgii)
|
|
|
|
END IF
|
|
END FOR
|
|
|
|
FINISH REPORT imp_fact_ncf}
|
|
|
|
RUN imprime
|
|
|
|
SET CONNECTION "MSSQL"
|
|
{ EVITANDO IMPIMIR EN OTRO PRINTER REMOTO
|
|
CALL defecto(usuarios,clave,xcopia) RETURNING imprime,negrilla_on,negrillas_of,
|
|
doble_on,doble_off,comp_on,comp_off,
|
|
doce,normal,archivo,copia
|
|
|
|
|
|
START REPORT imp_fact_ncf TO archivo
|
|
|
|
FOR idx = 1 TO fact_det.getLength()
|
|
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_ncf(fact_gral.*,fact_det[idx].*,tot_porc,
|
|
p_bonifica[idx],cod_fact,kncf,codigodgii)
|
|
|
|
END IF
|
|
END FOR
|
|
|
|
FINISH REPORT imp_fact_ncf
|
|
RUN imprime}
|
|
END IF # CLIENTE NCF
|
|
END IF
|
|
END IF
|
|
COMMAND "Retornar"
|
|
CLEAR FORM
|
|
EXIT MENU
|
|
END MENU
|
|
END FUNCTION
|
|
FUNCTION info()
|
|
LET pcotizacion = nuLL
|
|
SELECT a.cotizacion_no INTO pcotizacion
|
|
FROM prtb00012 a
|
|
WHERE a.num_oc = fact_gral.orden
|
|
|
|
DISPLAY BY NAME pcotizacion
|
|
END FUNCTION
|
|
|
|
REPORT imp_fact(x,z,porciento,bonifica,cod_f,pncf,pcodigodgii)
|
|
DEFINE x RECORD
|
|
cod_cia LIKE vetb00002.cod_cia,
|
|
ventas LIKE vetb00002.ventas,
|
|
zona LIKE vetb00002.zona,
|
|
factura LIKE vetb00002.factura,
|
|
bodega SMALLINT,
|
|
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(8,2),
|
|
monto_fact DECIMAL(12,3),
|
|
kit_id INT
|
|
END RECORD
|
|
DEFINE bonifica INTEGER,
|
|
i,cod_f SMALLINT,
|
|
plado1,plado2,plado3,pcantidad,pmedida,total_unidades DEC(12,5),
|
|
pncf INT, pcodigodgii CHAR(16)
|
|
|
|
|
|
DEFINE tot_b,tot_n,tot_m DECIMAL(12,2),
|
|
ch_fech CHAR(20),
|
|
descripcion_area CHAR(30)
|
|
DEFINE porciento DECIMAL(8,3)
|
|
DEFINE normal,doce,negras,negras_off,doble CHAR(2)
|
|
|
|
DEFINE nombre_vend,apellido_vend CHAR(15)
|
|
DEFINE comprimido,comprimido_of CHAR(1),
|
|
dataqrcode,xhash STRING,
|
|
xfechafirmadigital DATETIME YEAR TO SECOND,
|
|
chfechafirmadigital STRING,
|
|
buf base.StringBuffer,
|
|
muestraQR,ncffechaVencimiento BOOLEAN,
|
|
cemail VARCHAR(200),
|
|
rhash VARCHAR(6),
|
|
qrhash,qrfecha,qrpath STRING
|
|
|
|
DEFINE j,lj,h INTEGER,
|
|
etiqueta CHAR(30),
|
|
pfecha_ncf DATE,
|
|
rnc char(11),
|
|
ch_ncf char(30)
|
|
DEFINE neto_s_imp,valor_itbis,ldescuento,isub_total,ineto,idesc_valor,iitbis,tot_d,
|
|
tot_sub
|
|
DECIMAL(18,2)
|
|
|
|
OUTPUT
|
|
TOP MARGIN 2
|
|
LEFT MARGIN 0
|
|
#PAGE LENGTH 65
|
|
BOTTOM MARGIN 3
|
|
|
|
ORDER BY x.factura,z.area,z.cod_n,z.cod_grupo,z.cod_tipo,z.cod_Sec
|
|
|
|
FORMAT
|
|
FIRST PAGE HEADER
|
|
SELECT b.ncf INTO pncf FROM vetb00072 b
|
|
WHERE b.documento=x.factura AND tipo_doc='FT'
|
|
# CALL fgl_winmessage("INFO",p_companias.rnc,"INFO")
|
|
LET ch_ncf =pcodigodgii CLIPPED,pncf USING "&&&&&&&&"
|
|
|
|
SELECT num_rnc INTO rnc FROM vetb00004
|
|
WHERE tipo_cliente = x.tipo_cliente AND sec_cliente = x.sec_cliente
|
|
|
|
SELECT a.fecha,a.tipo_ncf INTO pfecha_ncf,descripcion FROM vetb00071 a
|
|
WHERE (a.tipo_doc = "FT" and
|
|
a.codigo_dgii = pcodigodgii)
|
|
|
|
DISPLAY "fecha",pfecha_ncf," ",kncf," ",pcodigodgii
|
|
|
|
IF pcodigodgii NOT MATCHES 'B*' THEN
|
|
LET ch_ncf ="e-NCF:","E", pcodigodgii CLIPPED,pncf USING "&&&&&&&&&&"
|
|
LET muestraQr = TRUE
|
|
ELSE
|
|
LET muestraQr = FALSE
|
|
LET ch_ncf ="NCF:", pcodigodgii CLIPPED,pncf USING "&&&&&&&&"
|
|
|
|
END IF
|
|
#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
|
|
IF pcodigodgii IS NULL THEN
|
|
DISPLAY ch_ncf,genera_ncf,pcodigodgii
|
|
LET ch_ncf=" "
|
|
LET descripcion=""
|
|
LET pfecha_ncf=""
|
|
END IF
|
|
|
|
DISPLAY ch_ncf,genera_ncf,pcodigodgii
|
|
LET tot_n = 0
|
|
LET tot_b = 0
|
|
LET tot_m = 0
|
|
|
|
# Busca Data QR CODE
|
|
SELECT a.hash,a.fechafirmadigital INTO xhash,xfechafirmadigital
|
|
FROM vetb00002 a WHERE a.factura = x.factura AND a.sucid = localidad
|
|
|
|
LET isub_total =x.sub_total *x.prima_us
|
|
LET ineto = x.total_fact * x.prima_us
|
|
LET idesc_valor =x.desc_valor * x.prima_us
|
|
LET iitbis = x.itbi * x.prima_us
|
|
|
|
# Fecha de firma: tal cual para imprimir; con %20 solo para la URL del QR
|
|
LET chfechafirmadigital=util.Datetime.format(xfechafirmadigital, "%d-%m-%Y %H:%M:%S" )
|
|
LET buf = base.StringBuffer.create()
|
|
CALL buf.append(chfechafirmadigital)
|
|
CALL buf.replace(' ','%20',1)
|
|
LET qrfecha = buf.toString()
|
|
|
|
# Codigo de seguridad: el GRABADO de esta factura (antes usaba phash, que es
|
|
# el de la ultima factura enviada en la sesion). xhash se imprime tal cual;
|
|
# qrhash va codificado en la URL del QR.
|
|
LET rhash = xhash
|
|
LET xhash = rhash CLIPPED
|
|
LET qrhash = NULL
|
|
IF xhash IS NOT NULL AND xhash.getLength() > 0 THEN
|
|
CALL sus_caracter(xhash) RETURNING qrhash
|
|
END IF
|
|
# Ruta del QR segun el ambiente DGII de la empresa (companias.ambientedgii)
|
|
CASE ambiente()
|
|
WHEN "produccion"
|
|
LET qrpath = "ecf"
|
|
WHEN "certificacion"
|
|
LET qrpath = "certecf"
|
|
OTHERWISE
|
|
LET qrpath = "testecf"
|
|
END CASE
|
|
# DISPLAY "fecha ",chfechafirmadigital
|
|
IF pcodigodgii <> '32' THEN
|
|
LET dataqrcode ='https://ecf.dgii.gov.do/',qrpath,'/consultatimbre?rncemisor=',p_companias.rnc CLIPPED,
|
|
"&rnccomprador=",rnc CLIPPED,"&encf=E",pcodigodgii CLIPPED,pncf USING "&&&&&&&&&&",
|
|
"&fechaemision=",x.fecha_factura USING 'dd-mm-yyyy',
|
|
"&montototal=",ineto USING "<<<<<<<<#.##",
|
|
"&fechafirma=",qrfecha,
|
|
"&codigoseguridad=",qrhash
|
|
END IF
|
|
IF pcodigodgii = '32' AND ineto >= 250000 THEN
|
|
LET dataqrcode ='https://ecf.dgii.gov.do/',qrpath,'/consultatimbre?rncemisor=',p_companias.rnc CLIPPED,
|
|
"&rnccomprador=",rnc CLIPPED,"&encf=E",pcodigodgii CLIPPED,pncf USING "&&&&&&&&&&",
|
|
"&fechaemision=",x.fecha_factura USING 'dd-mm-yyyy',
|
|
"&montototal=",ineto USING "<<<<<<<<#.##",
|
|
"&fechafirma=",qrfecha,
|
|
"&codigoseguridad=",qrhash
|
|
END IF
|
|
IF pcodigodgii = '32' AND ineto < 250000 THEN
|
|
LET dataqrcode ='https://fc.dgii.gov.do/',qrpath,'/consultatimbrefc?rncemisor=',p_companias.rnc CLIPPED,
|
|
"&encf=E",pcodigodgii CLIPPED,pncf USING "&&&&&&&&&&",
|
|
"&montototal=",ineto USING "<<<<<<<<#.##",
|
|
"&codigoseguridad=",qrhash
|
|
|
|
END IF
|
|
DISPLAY "qrcode ",dataqrcode
|
|
LET tot_n = 0
|
|
LET tot_b = 0
|
|
LET tot_m = 0
|
|
|
|
LET fecha_Vencimiento = null
|
|
SELECT a.fecha_Vencimiento INTO fecha_Vencimiento FROM vetb00071 a WHERE codigo_dgii = pcodigodgii
|
|
|
|
DISPLAY "FECHA VENCE: ",fecha_vencimiento
|
|
IF fecha_vencimiento IS NOT NULL THEN
|
|
LET ch_fecha = fecha_vencimiento USING "dd/mm/yyyy"
|
|
ELSE
|
|
LET ch_fecha = NULL
|
|
END IF
|
|
|
|
|
|
BEFORE GROUP OF z.area
|
|
SELECT a.nombre_area INTO descripcion_area
|
|
FROM prtb00016 a
|
|
WHERE a.area_num=Z.area
|
|
|
|
ON EVERY ROW
|
|
IF ch_fecha IS NOT NULL THEN
|
|
LET ncffechaVencimiento = TRUE
|
|
ELSE
|
|
LET ncffechaVencimiento = FALSE
|
|
END IF
|
|
PRINTX x.*,p_companias.*,rnc,condicion.descrip,pcodigodgii,pncf,descripcion,
|
|
documento_ref,z.*,observacion,cliente_bas.*,fecha_vencimiento,ch_ncf,pfecha_ncf,pcotizacion,dataqrcode,xhash,rhash,
|
|
chfechafirmadigital, muestraQR,ncffechaVencimiento,ch_fecha
|
|
|
|
ON LAST ROW
|
|
|
|
PAGE TRAILER
|
|
|
|
END REPORT
|
|
|
|
|
|
FUNCTION actualiza_ncf ()
|
|
DEFINE ncf_sec INT,modf CHAR(10)
|
|
INPUT BY NAME codigodgii
|
|
|
|
AFTER INPUT
|
|
|
|
|
|
|
|
IF codigodgii IS NULL THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD codigodgii
|
|
END IF
|
|
|
|
END INPUT
|
|
|
|
|
|
BEGIN WORK
|
|
|
|
|
|
SELECT a.ncf INTO ncf_sec FROM vetb00073 a
|
|
WHERE a.tipo_doc="FT" AND a.codigo_dgii=codigodgii
|
|
IF ncf_sec IS NULL THEN
|
|
LET ncf_sec = 0
|
|
END IF
|
|
LET ncf_sec = ncf_sec + 1
|
|
IF NOT valida_rango_ncf("FT",codigodgii,ncf_sec) THEN
|
|
ROLLBACK WORK
|
|
RETURN
|
|
END IF
|
|
|
|
|
|
DISPLAY "factrura",fact_gral.factura
|
|
UPDATE vetb00002
|
|
SET placa="S",tipo_factura="NCF"
|
|
WHERE factura=fact_gral.factura
|
|
|
|
DISPLAY "dgii ",codigodgii,ncf_sec
|
|
UPDATE vetb00073
|
|
SET ncf =ncf_sec
|
|
WHERE codigo_dgii=codigodgii AND tipo_doc="FT"
|
|
|
|
UPDATE vetb00072
|
|
SET codigo_dgii=codigodgii, ncf=ncf_sec,us_crea=usuarios,fech_crea=getdate()
|
|
WHERE documento=fact_gral.factura
|
|
|
|
LET numero_msg = 13
|
|
CALL msg(numero_msg)
|
|
|
|
|
|
|
|
COMMIT WORK
|
|
|
|
END FUNCTION
|
|
|
|
# Valida que el NCF que se va a usar no pase del ncf_final autorizado en vetb00071.
|
|
# Si ya se paso: avisa y devuelve FALSE (no se debe facturar con ese NCF).
|
|
# Si quedan pocos: avisa pero deja seguir.
|
|
FUNCTION valida_rango_ncf(ptipo_doc,pcodigodgii,pncf)
|
|
DEFINE ptipo_doc CHAR(2),
|
|
pcodigodgii LIKE vetb00071.codigo_dgii,
|
|
pncf INTEGER,
|
|
vncf_final INTEGER,
|
|
vquedan INTEGER,
|
|
vdisponibles INTEGER,
|
|
vmensaje STRING
|
|
|
|
# El comprobante tiene que estar Disponible = S en vetb00071
|
|
LET vdisponibles = 0
|
|
SELECT COUNT(*) INTO vdisponibles FROM vetb00071 a
|
|
WHERE a.tipo_doc = ptipo_doc AND a.codigo_dgii = pcodigodgii
|
|
AND a.sucid = localidad AND UPPER(a.disponible) = "S"
|
|
IF vdisponibles = 0 THEN
|
|
LET vmensaje = "El comprobante tipo ",pcodigodgii CLIPPED," no esta disponible",
|
|
" (Disponible = NO o no registrado para esta localidad).",
|
|
"\nActivelo en el administrador de NCF (veprmt020) antes de facturar."
|
|
CALL fgl_winmessage("NCF NO DISPONIBLE",vmensaje,"stop")
|
|
RETURN FALSE
|
|
END IF
|
|
|
|
LET vncf_final = NULL
|
|
SELECT MAX(a.ncf_final) INTO vncf_final FROM vetb00071 a
|
|
WHERE a.tipo_doc = ptipo_doc AND a.codigo_dgii = pcodigodgii
|
|
AND a.sucid = localidad
|
|
|
|
# Tipo sin rango configurado: no se valida
|
|
IF vncf_final IS NULL THEN
|
|
RETURN TRUE
|
|
END IF
|
|
|
|
IF pncf > vncf_final THEN
|
|
LET vmensaje = "Se agotaron los comprobantes tipo ",pcodigodgii CLIPPED,".",
|
|
"\nRango autorizado hasta: ",vncf_final USING "<<<<<<<<<<",
|
|
"\nSiguiente secuencia: ",pncf USING "<<<<<<<<<<",
|
|
"\n\nSolicite una nueva secuencia a la DGII y registrela",
|
|
" en la tabla de comprobantes (vetb00071) antes de facturar."
|
|
CALL fgl_winmessage("NCF AGOTADOS",vmensaje,"stop")
|
|
RETURN FALSE
|
|
END IF
|
|
|
|
LET vquedan = vncf_final - pncf
|
|
IF vquedan <= 20 THEN
|
|
LET vmensaje = "Quedan solo ",vquedan USING "<<<<<<<<<<",
|
|
" comprobantes tipo ",pcodigodgii CLIPPED,
|
|
" despues de este (rango hasta ",vncf_final USING "<<<<<<<<<<",").",
|
|
"\nSolicite una nueva secuencia a la DGII."
|
|
CALL fgl_winmessage("NCF POR AGOTARSE",vmensaje,"exclamation")
|
|
END IF
|
|
|
|
RETURN TRUE
|
|
END FUNCTION
|
|
|
|
# Provincia y municipio del EMISOR para el e-CF (codigos DGII de 6 digitos)
|
|
# tomados de companias.id_dgii / companias.id_municipio_dgii.
|
|
# vetb00020 queda solo para la ubicacion de los clientes.
|
|
# Si companias no los tiene, se dejan los valores recibidos.
|
|
FUNCTION ubicacion_emisor_dgii(pprovincia,pmunicipio)
|
|
DEFINE pprovincia,pmunicipio STRING,
|
|
vprovincia,vmunicipio INTEGER
|
|
|
|
LET vprovincia = NULL
|
|
LET vmunicipio = NULL
|
|
SELECT a.id_dgii,a.id_municipio_dgii INTO vprovincia,vmunicipio
|
|
FROM companias a
|
|
IF vprovincia IS NOT NULL THEN
|
|
LET pprovincia = vprovincia USING "&&&&&&"
|
|
END IF
|
|
IF vmunicipio IS NOT NULL THEN
|
|
LET pmunicipio = vmunicipio USING "&&&&&&"
|
|
END IF
|
|
RETURN pprovincia,pmunicipio
|
|
END FUNCTION
|
|
|
|
# Avisa SOLO si el e-CF fue Rechazado o hubo Error (si se acepto no muestra nada).
|
|
# Resultado de la DGII para el e-CF recien enviado: estado
|
|
# (Aceptado / Aceptado Condicional / Rechazado / En Proceso / Error), TrackId y
|
|
# todos los mensajes (codigo y motivo) que devolvio la DGII.
|
|
FUNCTION muestra_resultado_dgii()
|
|
DEFINE i INTEGER,
|
|
vestado,vmensaje,vtitulo,vicono STRING
|
|
|
|
LET vestado = p.estado
|
|
IF vestado IS NULL THEN
|
|
LET vestado = "ERROR"
|
|
END IF
|
|
LET vmensaje = "e-NCF: ", documento_encabezado.eNcf CLIPPED,
|
|
"\nEstado DGII: ", vestado
|
|
IF p.trackid IS NOT NULL THEN
|
|
LET vmensaje = vmensaje, "\nTrackId: ", p.trackid
|
|
END IF
|
|
FOR i = 1 TO p.mensajes.getLength()
|
|
IF p.mensajes[i].valor IS NOT NULL THEN
|
|
LET vmensaje = vmensaje, "\n- "
|
|
IF p.mensajes[i].codigo IS NOT NULL THEN
|
|
LET vmensaje = vmensaje, "(", p.mensajes[i].codigo, ") "
|
|
END IF
|
|
LET vmensaje = vmensaje, p.mensajes[i].valor
|
|
END IF
|
|
END FOR
|
|
|
|
LET vestado = UPSHIFT(vestado)
|
|
CASE
|
|
WHEN vestado MATCHES "*RECHAZ*"
|
|
LET vtitulo = "e-CF RECHAZADO POR LA DGII"
|
|
LET vicono = "stop"
|
|
WHEN vestado MATCHES "*ACEPTADO*" OR vestado MATCHES "*PROCESO*"
|
|
# Aceptado / Aceptado Condicional / En Proceso: sin cuadro; el estado
|
|
# queda en pantalla (campo estado) y en vetb00002
|
|
RETURN
|
|
OTHERWISE
|
|
LET vtitulo = "e-CF: ERROR AL ENVIAR / CONSULTAR"
|
|
LET vicono = "stop"
|
|
END CASE
|
|
CALL fgl_winmessage(vtitulo,vmensaje,vicono)
|
|
END FUNCTION
|
|
|
|
# Interpreta la respuesta de la DGII en p (estado, trackid, mensajes).
|
|
# Formatos: el completo con "mensajes" como lista [{codigo,valor}] (consulta
|
|
# por TrackId y consumo 32, ej. {"codigo":4,"estado":"Aceptado Condicional",
|
|
# "mensajes":[{"codigo":"1503","valor":"..."}]}) o el viejo con "mensajes" como
|
|
# texto. Si no se puede leer (p.ej. "<string>Semilla invalida.</string>") queda
|
|
# ERROR con la respuesta original como mensaje.
|
|
FUNCTION lee_respuesta_dgii(ptexto)
|
|
DEFINE ptexto,vtexto STRING
|
|
|
|
LET p.estado = NULL
|
|
CALL p.mensajes.clear()
|
|
TRY
|
|
CALL util.JSON.parse(ptexto,p)
|
|
CATCH
|
|
LET p.estado = NULL
|
|
CALL p.mensajes.clear()
|
|
END TRY
|
|
IF p.estado IS NOT NULL THEN
|
|
RETURN
|
|
END IF
|
|
|
|
TRY
|
|
CALL util.JSON.parse(ptexto,p32)
|
|
LET p.estado = p32.estado
|
|
CALL p.mensajes.clear()
|
|
LET p.mensajes[1].valor = p32.mensajes
|
|
CATCH
|
|
LET p.estado = NULL
|
|
END TRY
|
|
IF p.estado IS NOT NULL THEN
|
|
RETURN
|
|
END IF
|
|
|
|
LET vtexto = ptexto
|
|
IF vtexto IS NULL THEN
|
|
LET vtexto = "(sin respuesta)"
|
|
END IF
|
|
IF vtexto.getLength() > 250 THEN
|
|
LET vtexto = vtexto.subString(1,250)
|
|
END IF
|
|
LET p.estado = 'ERROR'
|
|
CALL p.mensajes.clear()
|
|
LET p.mensajes[1].valor = "Respuesta no reconocida de la DGII: ", vtexto
|
|
END FUNCTION
|