{ -------------------------------------------------------------------------- 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.* 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 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,vetb00020 c WHERE a.usuario = usuarios AND a.sucid = b.sucid AND b.localidad = c.cod_provincia SELECT * INTO p_companias.* FROM companias #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 = 4 LET fact_gral.porc_itbi = NULL LET fact_gral.prima_us = NULL DISPLAY BY NAME fact_gral.porc_itbi,fact_gral.prima_us,descrip1 LET hice = "S" LET h = 1 LABEL otravez: INITIALIZE detalle TO NULL LABEL regresa: LET fact_gral.itbi = 0 LET fact_gral.sub_total = 0 LET fact_gral.total_fact = 0 LET fact_gral.desc_valor = 0 LET ch_itbi = "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,fpago 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() 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 disponible = "S" IF STATUS = NOTFOUND THEN LET numero_msg =391 CALL msg(numero_msg) CONTINUE INPUT 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 = 4 LET fact_gral.ventas = 1 # LET pcondicion = ui.ComboBox.forName("formonly.cond_pago") CALL ccondicion() LET pventas = ui.ComboBox.forName("formonly.ventas") CALL cventas() SELECT a.dias,a.descrip,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 IF documento_encabezado.tipoPago = '1' AND fpago IS NULL THEN CALL msg(16) NEXT FIELD fpago 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 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 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" 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 IF documento_encabezado.tipoPago = '1' THEN LET documento_encabezado.montoPago = fact_gral.total_fact*fact_gral.prima_us USING "<<<<<<<<<<<<<.##" END IF # 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 LET documento_encabezado.FormadePAgo = fpago 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 WHERE factura = fact_gral.factura AND cod_cia = localidad 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 TRY LET valor_control_ncf = documento_encabezado.montoTotal IF codigodgii <> 32 THEN CALL procesoEncf(' ',ambiente,' ',0,0,'consultatrackid',respuesta) RETURNING khash,xrespuesta,codigo DISPLAY "estado respuesta: ",CURRENT,xrespuesta," codigo: ",codigo CALL util.JSON.parse(xrespuesta,p) DISPLAY "estado: ",xrespuesta DISPLAY xrespuesta TO mensaje_dgii END IF DISPLAY "estado respuesta: ",CURRENT," coddgii: ",codigodgii,"valor: ",valor_control_ncf, xrespuesta," codigo: ",codigo IF codigodgii = '32' AND valor_control_ncf < 250000 THEN IF codigo = 200 THEN CALL util.JSON.parse(respuesta,p32) LET p.estado = p32.estado LET p.mensajes[1].valor = p32.mensajes ELSE CALL util.JSON.parse(respuesta,p32err) LET p.estado = p32err.estado LET p.mensajes[1].valor = p32err.mensajes[1].valor END IF END IF 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 LET p.estado = 'ERROR' LET p.mensajes[1].valor="NO PUDE PARSEAR LA RESPUESTA EN EL PROGRAMA VEPRMT022" END TRY 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 ### ============================== 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 " 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 " 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} FUNCTION veprfu001() DEFINE pagos RECORD documento LIKE vetb00002.factura, detalle CHAR(30), factura LIKE vetb00002.factura, cheque_no LIKE cctb00001.num_cheque, banco LIKE cctb00001.banco, valor_cheque DECIMAL(12,2), valor_efectivo DECIMAL (12,2) END RECORD OPEN WINDOW captura AT 7,12 WITH FORM "vefmwd013" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST) INPUT BY NAME pagos.* BEFORE FIELD factura LET pagos.factura = fact_gral.factura AFTER FIELD detalle IF pagos.detalle IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD detalle END IF AFTER FIELD factura IF pagos.factura IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD factura ELSE SELECT a.fecha_factura,a.tipo_cliente,a.sec_cliente,b.nombre, a.neto,b.cod_provincia,a.sub_total,a.monto_itbi INTO fact_gral.fecha_factura,fact_gral.tipo_cliente, fact_gral.sec_cliente,fact_gral.nombre,fact_gral.total_fact, codigo_provincia,fact_gral.sub_total,fact_gral.itbi FROM vetb00002 a,vetb00004 b WHERE a.factura = pagos.factura AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND a.status_t IS NULL SELECT b.calle,b.casa_num,b.barrio INTO descrip1,descrip2,descrip3 FROM vetb00005 b WHERE b.tipo_cliente = fact_gral.tipo_cliente AND b.sec_cliente = fact_gral.sec_cliente SELECT d.nombre_provincia INTO fact_gral.ciudad FROM vetb00020 d WHERE d.cod_provincia = codigo_provincia END IF LET fact_gral.factura = pagos.factura BEFORE FIELD documento LET pagos.documento = 0 SELECT ult_recibo INTO pagos.documento FROM cctb00003 WHERE tipo_doc = "PC" IF pagos.documento IS NULL THEN LET pagos.documento = 0 END IF LET pagos.documento = pagos.documento + 1 DISPLAY BY NAME pagos.documento #NEXT FIELD detalle AFTER FIELD banco LET descrip1 = NULL LET descrip2 = NULL IF pagos.banco IS NOT NULL THEN SELECT nombre_bc,localidad INTO descrip1,descrip2 FROM bancos WHERE cod_banco = pagos.banco IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD banco END IF END IF DISPLAY BY NAME descrip1 ATTRIBUTE (BOLD) AFTER FIELD valor_cheque IF pagos.valor_cheque IS NOT NULL THEN LET pagos.valor_efectivo = fact_gral.total_fact - pagos.valor_cheque ELSE LET pagos.valor_efectivo = fact_gral.total_fact END IF DISPLAY BY NAME pagos.valor_efectivo AFTER INPUT IF int_flag THEN LET int_flag = FALSE RETURN END IF END INPUT LET p_fecha_ven = "01/01/01" LET fact_gral.total_fact = fact_gral.total_fact * -1 IF fact_gral.total_fact IS NULL THEN LET fact_gral.total_fact = 0 END IF IF fact_gral.total_fact <> 0 THEN DELETE FROM cctb00001 WHERE num_doc = pagos.documento AND tipo_doc = "PC" INSERT INTO cctb00001 (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,monto_Desc, us_crea,fech_crea,bodega,sucid,documento_ref,banco) VALUES (fact_gral.cod_cia,"RC",pagos.documento, fact_gral.tipo_cliente,fact_gral.sec_cliente, fact_gral.sec_vend,fact_gral.fecha_factura,p_fecha_ven, fact_gral.factura,localidad,pagos.cheque_no, fact_gral.total_fact,pagos.valor_efectivo,pagos.valor_cheque, 0,usuarios,getdate(),localidad,localidad,pconduce,fact_gral.conduce) LET fact_gral.total_fact = fact_gral.total_fact * -1 CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia { START REPORT volante TO archivo OUTPUT TO REPORT volante(fact_gral.*,pagos.*,descrip1,descrip2) FINISH REPORT volante } RUN imprime UPDATE cctb00003 SET ult_recibo = pagos.documento WHERE tipo_doc = "PC" CLOSE WINDOW captura END IF END FUNCTION { REPORT volante (x,y,t,t1) DEFINE y RECORD documento LIKE vetb00002.factura, detalle CHAR(30), factura LIKE vetb00002.factura, cheque_no LIKE cctb00001.num_cheque, banco LIKE cctb00001.banco, valor_cheque DECIMAL(12,2), valor_efectivo DECIMAL (12,2) END RECORD DEFINE x RECORD cod_cia LIKE vetb00002.cod_cia, ventas LIKE vetb00002.ventas, zona LIKE vetb00002.zona, factura LIKE vetb00002.factura, fecha_factura LIKE vetb00002.fecha_factura, tipo_cliente LIKE vetb00002.tipo_cliente, sec_cliente LIKE vetb00002.sec_cliente, nombre CHAR(30), direccion CHAR(50), ciudad CHAR(20), prima_us LIKE vetb00002.prima_us, porc_desc LIKE vetb00002.porc_desc, cond_pago LIKE vetb00002.cond_pago, orden LIkE vetb00002.orden, fecha_orden LIKE vetb00002.fecha_orden, conduce LIKE vetb00002.conduce, 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,vetb00020 c WHERE a.usuario = usuarios AND a.sucid = b.sucid AND b.localidad = c.cod_provincia 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) 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.cod_cia = 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 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 chfechafirmadigital = buf.toString() LET rhash = xhash CALL sus_caracter(phash) RETURNING xhash DISPLAY "hasre",phash,"-",xhash # DISPLAY "fecha ",chfechafirmadigital IF pcodigodgii <> '32' THEN LET dataqrcode ='https://ecf.dgii.gov.do/TesteCF/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=",chfechafirmadigital, "&codigoseguridad=",xhash END IF IF pcodigodgii = '32' AND ineto > 250000 THEN LET dataqrcode ='https://ecf.dgii.gov.do/TesteCF/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=",chfechafirmadigital, "&codigoseguridad=",xhash END IF IF pcodigodgii = '32' AND ineto < 250000 THEN LET dataqrcode ='https://fc.dgii.gov.do/TesteCF/consultatimbrefc?rncemisor=',p_companias.rnc CLIPPED, "&encf=E",pcodigodgii CLIPPED,pncf USING "&&&&&&&&&&", "&montototal=",ineto USING "<<<<<<<<#.##", "&codigoseguridad=",xhash 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, vmensaje STRING 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