{ -------------------------------------------------------------------------- PROGRAMA : VEPRMT001 OBJETIVO : Este programa captura la factura comercial REALIZADO POR : Ing. Juan Fco. Soto. FECHA : Enero 12,1993. MODIFICADO POR: Victor Gomez C. FECHA : Saturday, July 07, 2001 OBJETIVO : Registrar el descuento aplicado a cada producto por separado, se utilizaran los campos cantidad_2 y bonificacion de la tabla vetb00003. MODIFICACION: ESTA FACTURA ES PARA CONSOLIDADO CON EL NUMERO DE FACTURA MANUAL ES PARA LOS CLIENTES 15,16,17 -------------------------------------------------------------------------- } GLOBALS "veprgb000.4gl" DEFINE mes_chequeo SMALLINT DEFINE porce,valor_desc,cant_prod,cant_vend,itbis_o DECIMAL (8,2) DEFINE codigo_provincia,t_arr, pubicacion LIKE prtb00012.ubicacion, aplaca_transp CHAR(20), documento_ref CHAR(15), codigodgii CHAR(14), descripcion_ncf CHAR(80), kncf,otro_num INTEGER, porcentaje_n DEC(8,2), ch_id_kit DYNAMIC ARRAY OF CHAR(2) DEFINE lleva_parcial,ch_servicios,ch_itbi,ch_encabeza CHAR(1), pcotizacion,cuenta_arr INTEGER, observacion CHAR(180) , obs1,obs2,obs3 CHAR(50),obs4 CHAR(30) DEFINE prtb09 RECORD LIKE prtb00009.* #-> Monitoreo de la orden de produccion MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(4) RETURNING impresor # CONNECT to "exterior" AS "IFMX" CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave OPTIONS FORM LINE 2, ERROR LINE 24, COMMENT LINE 23, PROMPT LINE 22 CLEAR SCREEN OPEN FORM vefmmt001 FROM "vefmmt001" DISPLAY FORM vefmmt001 MENU ON ACTION nuevo CALL veprmt001() ON ACTION buscar call veprmf001() 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 LET porc_desc = 0 LET descrip1 = NULL LET descrip2 = NULL LET p_bonif = NULL LET fact_gral.cod_cia = 1 LET ch_fecha = TODAY USING "dd/mm/yyyy" LET fact_gral.fecha_factura = ch_fecha LET tot_porc1 = 0 LET fact_gral.itbi = 0 LET fact_gral.sub_total = 0 LET fact_gral.total_fact = 0 LET fact_gral.desc_valor = 0 LET tot_porc = 0 DISPLAY BY NAME descrip1 FOR idx = 1 to 20 LET fact_det[idx].cod_n = NULL LET fact_det[idx].cod_grupo = NULL LET fact_det[idx].cod_tipo = NULL LET fact_det[idx].cod_sec = NULL LET fact_det[idx].descrip_esp = NULL LET fact_det[idx].unidad_med = NULL LET fact_det[idx].cantidad = NULL LET fact_det[idx].precio = NULL LET fact_det[idx].precio = NULL LET fact_det[idx].cantidad_2 = NULL LET fact_det[idx].monto_fact = NULL END FOR FOR idx = 1 to 4 DISPLAY fact_det[idx].cod_n to s_fact[idx].cod_n DISPLAY fact_det[idx].cod_grupo to s_fact[idx].cod_grupo DISPLAY fact_det[idx].cod_tipo to s_fact[idx].cod_tipo DISPLAY fact_det[idx].cod_sec to s_fact[idx].cod_sec DISPLAY fact_det[idx].descrip_esp to s_fact[idx].descrip_esp DISPLAY fact_det[idx].unidad_med to s_fact[idx].unidad_med DISPLAY fact_det[idx].cantidad to s_fact[idx].cantidad DISPLAY fact_det[idx].precio to s_fact[idx].precio DISPLAY fact_det[idx].cantidad_2 to s_fact[idx].cantidad_2 DISPLAY fact_det[idx].monto_fact to s_fact[idx].monto_fact END FOR LABEL vuelve: LET descrip1 = NULL LET descrip2 = NULL LET descrip3 = NULL LET p_bonif = NULL LET tot_porc1 = 0 LET t_valor = 0 LET fact_gral.cond_pago = 4 LET fact_gral.porc_itbi = NULL LET fact_gral.prima_us = NULL DISPLAY BY NAME fact_gral.porc_itbi,fact_gral.prima_us,descrip1 LET hice = "S" LET h = 1 LABEL otravez: INITIALIZE detalle TO NULL LABEL regresa: LET fact_gral.itbi = 0 LET fact_gral.sub_total = 0 LET fact_gral.total_fact = 0 LET fact_gral.desc_valor = 0 LET ch_itbi = "N" LET ch_servicios = "N" LET ch_encabeza ="S" LET ch_balance = NULL LET descrip1 = NULL LET factura_e = NULL INPUT BY NAME ch_itbi,ch_encabeza,ch_servicios AFTER INPUT IF INT_FLAG THEN LET opt = FGL_WINQUESTION("PREGUNTA","Desea Salir del Programa?","yes","Yes|no","question",0) IF UPSHIFT(opt) = "YES" THEN LET INT_FLAG = FALSE RETURN END IF END IF IF ch_itbi IS NULL THEN ERROR "DEBE ESPECIFICAR PARAMETRO ITBIS" CONTINUE INPUT END IF IF ch_encabeza IS NULL THEN ERROR "DEBE ESPECIFICAR PARAMETRO ENCABEZADO" CONTINUE INPUT END IF IF ch_servicios IS NULL THEN ERROR "DEBE ESPECIFICAR PARAMETRO SERVICIOS" CONTINUE INPUT END IF EXIT INPUT END INPUT LET codigodgii = NULL LET descripcion_ncf=NULL INPUT BY NAME fact_gral.*,factura_e WITHOUT DEFAULTS ATTRIBUTE (blue) BEFORE INPUT CALL bodegas('1') ON ACTION F8 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 INTO condicion.dias,condicion.descrip FROM vetb00012 a where a.cond_pago = fact_gral.cond_pago DISPLAY BY NAME fact_gral.cod_cia,fact_gral.cond_pago,compania,fact_gral.ventas LET p_fecha_ven = fact_gral.fecha_factura + condicion.dias DISPLAY BY NAME p_fecha_ven ATTRIBUTE(RED) AFTER FIELD conduce IF ch_servicios = "N" THEN IF fact_gral.conduce IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD conduce END IF IF fact_gral.ventas = "1" THEN LET tipo_f = "FT" END IF IF fact_gral.ventas = "2" THEN LET tipo_f = "FE" END IF IF fact_gral.ventas = "3" THEN LET tipo_f = "FE" END IF IF fact_gral.ventas = "4" THEN LET tipo_f = "FE" END IF SELECT UNIQUE a.cod_sp,a.cod_sp_sec, CAST(a.conduce_no AS INT),CONVERT(CHAR(10),a.fecha,103), a.cod_transp,a.sec_transp INTO fact_gral.tipo_cliente,fact_gral.sec_cliente,fact_gral.orden,fact_gral.fecha_conduce, fact_gral.cod_transp,fact_gral.sec_transp FROM iptb00006 a WHERE a.num_doc = fact_gral.conduce AND a.cod_mov = p_codigo AND a.status_t IS NULL AND a.bodega = fact_gral.bodega AND a.fecha > "01/01/2008" IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD conduce END IF DISPLAY BY NAME fact_gral.tipo_cliente,fact_gral.sec_cliente,fact_gral.orden, fact_gral.cod_transp,fact_gral.sec_transp SELECT a.nombre,a.limite_credito,a.cod_zona,a.cod_provincia,a.telefono INTO fact_gral.nombre,credito,fact_gral.zona,codigo_provincia, cliente_bas.telefono FROM vetb00004 a WHERE a.tipo_cliente = fact_gral.tipo_cliente AND a.sec_cliente = fact_gral.sec_cliente SELECT b.calle,b.casa_num,b.barrio INTO descrip1,descrip2,descrip3 FROM vetb00005 b WHERE b.tipo_cliente = fact_gral.tipo_cliente AND b.sec_cliente = fact_gral.sec_cliente SELECT d.nombre_provincia INTO fact_gral.ciudad FROM vetb00020 d WHERE d.cod_provincia = codigo_provincia LET fact_gral.direccion = descrip1 clipped,descrip2 clipped,", ", descrip3 clipped SELECT unique descrip INTO descrip1 FROM vetb00008 WHERE cod_zona = CAST(fact_gral.zona as smallint) # BUSCA EL VENDEDOR SELECT a.sec_vend INTO fact_gral.sec_vend FROM vetb00028 a WHERE a.tipo_cliente = fact_gral.tipo_cliente AND a.sec_cliente = fact_gral.sec_cliente DISPLAY BY NAME fact_gral.sec_vend DISPLAY BY NAME fact_gral.zona,fact_gral.direccion,fact_gral.nombre,fact_gral.ciudad,descrip1 ATTRIBUTE (blue) # CONTROL DE REPETICION DE CONDUCES SELECT UNIQUE CAST(a.conduce AS INT) FROM vetb00002 a WHERE CAST(a.conduce AS INT) = fact_gral.conduce AND a.ventas = fact_gral.ventas AND a.fecha_factura > "01/01/2009" AND a.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 END IF BEFORE FIELD ventas LET pventas = ui.ComboBox.forName("formonly.ventas") CALL cventas() AFTER FIELD cod_cia IF fact_gral.cod_cia IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_cia END IF IF fact_gral.cod_cia = 1 THEN LET compania = p_companias.nombre CLIPPED END IF DISPLAY BY NAME compania ATTRIBUTE (blue) AFTER FIELD ventas IF fact_gral.ventas IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ventas END IF # BUSCA EL CODIGO DEL MOVIMIENTO SELECT UNIQUE a.cod_mov INTO p_codigo FROM vetb00060 a WHERE a.ventas = fact_gral.ventas IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD ventas END IF LET tipo_fact = p_codigo IF fact_gral.ventas = "1" THEN LET tipo_f = "FT" ELSE IF fact_gral.ventas = "2" THEN LET tipo_f = "FE" END IF IF fact_gral.ventas = "3" THEN LET tipo_f = "FE" END IF SELECT prima INTO fact_gral.prima_us FROM vetb00019 WHERE disponible = "S" END IF DISPLAY BY NAME fact_gral.porc_desc,fact_gral.prima_us, fact_gral.porc_itbi ATTRIBUTE(BOLD) DISPLAY BY NAME descrip1 ATTRIBUTE (BOLD) LET fact_gral.factura = 0 SELECT ult_factura INTO fact_gral.factura FROM vetb00001 IF fact_gral.factura IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) RETURN END IF LET fact_gral.factura = fact_gral.factura + 1 DISPLAY BY NAME fact_gral.factura DISPLAY BY NAME descrip1 ATTRIBUTE(blue) AFTER FIELD factura SELECT UNIQUE a.factura FROM vetb00002 a WHERE a.factura = fact_gral.factura IF STATUS != NOTFOUND THEN LET numero_msg = 382 CALL msg(numero_msg) NEXT FIELD cod_cia END IF DISPLAY BY NAME fact_gral.factura ATTRIBUTE (blue) AFTER FIELD sec_cliente IF fact_gral.sec_cliente IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sec_cliente ELSE IF fact_gral.fecha_factura IS NULL THEN LET fact_gral.fecha_factura = TODAY DISPLAY BY NAME fact_gral.fecha_factura END IF LET p_fechas = fact_gral.fecha_factura LET hoy = fact_gral.fecha_factura CALL prd(fact_gral.fecha_factura,usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha_factura END IF SELECT a.nombre,a.limite_credito,a.cod_zona,a.cod_provincia,a.telefono INTO fact_gral.nombre,credito,fact_gral.zona,codigo_provincia, cliente_bas.telefono FROM vetb00004 a WHERE a.tipo_cliente = fact_gral.tipo_cliente AND a.sec_cliente = fact_gral.sec_cliente IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF SELECT b.calle,b.casa_num,b.barrio INTO descrip1,descrip2,descrip3 FROM vetb00005 b WHERE b.tipo_cliente = fact_gral.tipo_cliente AND b.sec_cliente = fact_gral.sec_cliente SELECT d.nombre_provincia INTO fact_gral.ciudad FROM vetb00020 d WHERE d.cod_provincia = codigo_provincia #CONTROL TIPO DE CLIENTES MONEDA SELECT UNIQUE a.ventas FROM vetb00060 a WHERE a.ventas = fact_Gral.ventas AND a.tipo_cliente = fact_gral.tipo_cliente IF STATUS = NOTFOUND THEN LET numero_msg = 386 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF SELECT unique descrip INTO descrip1 FROM vetb00008 WHERE cod_zona = CAST(fact_gral.zona as smallint) # BUSCA EL VENDEDOR SELECT a.sec_vend INTO fact_gral.sec_vend FROM vetb00028 a WHERE a.tipo_cliente = fact_gral.tipo_cliente AND a.sec_cliente = fact_gral.sec_cliente DISPLAY BY NAME fact_gral.sec_vend,fact_gral.nombre LET fact_gral.direccion = descrip1 clipped,descrip2 clipped,", ", descrip3 clipped DISPLAY BY NAME fact_gral.zona,fact_gral.direccion,fact_gral.nombre,fact_gral.ciudad,descrip1 ATTRIBUTE (blue) SELECT SUM(@valor+@monto_desc) INTO valor FROM cctb00001 WHERE @fecha_orig <= fact_gral.fecha_factura AND @tipo_cliente = fact_gral.tipo_cliente AND @sec_cliente = fact_gral.sec_cliente AND @status_t IS NULL AND tipo_doc NOT in ("DE","PC") IF valor IS NULL THEN LET valor = 0.00 END IF SELECT SUM(@valor+@monto_desc) INTO valor1 FROM cctb00001 WHERE @fecha_orig <= fact_gral.fecha_factura AND @tipo_cliente = fact_gral.tipo_cliente AND @sec_cliente = fact_gral.sec_cliente AND @status_t IS NULL AND tipo_doc = "DE" AND num_doc = aplica_a IF valor1 IS NULL THEN LET valor1 = 0.00 END IF LET balance = valor - valor1 IF balance IS NULL THEN LET balance = 0 END IF LET ch_balance = balance using "###,###,###.##" DISPLAY BY NAME ch_balance ATTRIBUTE(BOLD) END IF BEFORE FIELD nombre IF fact_gral.sec_cliente != 51 THEN NEXT FIELD porc_desc END IF BEFORE FIELD prima_us IF fact_gral.ventas = "1" THEN NEXT FIELD cond_pago END IF { BEFORE FIELD cond_pago #LET pcondicion = ui.ComboBox.forName("formonly.cond_pago") CALL ccondicion() LET fact_gral.cond_pago = 4 DISPLAY BY NAME fact_gral.cond_pago LET condicion.descrip = pcondicion.getitemtext(fact_gral.cond_pago) SELECT a.dias INTO condicion.dias FROM vetb00012 a where a.cond_pago = condicion.cond_pago LET p_fecha_ven = fact_gral.fecha_factura + condicion.dias DISPLAY BY NAME p_fecha_ven ATTRIBUTE(RED) AFTER FIELD cond_pago IF fact_gral.cond_pago IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cond_pago END IF SELECT a.* INTO condicion.* FROM vetb00012 a WHERE a.cond_pago = fact_gral.cond_pago IF STATUS < 0 THEN CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF ELSE IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cond_pago END IF END IF DISPLAY BY NAME condicion.descrip ATTRIBUTE (blue) } AFTER FIELD sec_vend IF fact_gral.sec_vend IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sec_vend END IF IF fact_gral.cond_pago != 1 OR fact_gral.sec_vend !=8888 THEN SELECT nom1_emp, apell1_emp INTO descrip5,descrip6 FROM adtb00003 WHERE num_emp = fact_gral.sec_vend IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD sec_vend END IF LET fact_gral.nombre_vend = descrip5 clipped," ",descrip6 clipped DISPLAY BY NAME fact_gral.nombre_vend ATTRIBUTE (blue) # Verifica que el vendedor venda al cliente de la factura IF fact_gral.sec_vend != 8888 THEN SELECT unique * FROM vetb00028 WHERE sec_vend = fact_gral.sec_vend AND tipo_cliente = fact_gral.tipo_cliente AND sec_cliente = fact_gral.sec_cliente IF STATUS = NOTFOUND THEN LET numero_msg = 119 CALL msg(numero_msg) NEXT FIELD sec_vend END IF END IF END IF BEFORE FIELD cod_transp LET fact_gral.cod_transp = pcod_transp LET fact_gral.sec_transp = psec_transp LET fact_gral.nombre_tran = NULL LET p_cedula = NULL LET p_serie = NULL IF fact_gral.cond_pago = 1 or fact_gral.ventas = "2" THEN IF fact_gral.ventas = "2" THEN NEXT FIELD fecha_embarque END IF END IF DISPLAY BY NAME fact_gral.cod_transp,fact_gral.sec_transp AFTER FIELD cod_transp IF fact_gral.cod_transp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) # NEXT FIELD cod_transp END IF AFTER FIELD sec_transp IF fact_gral.sec_transp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) #NEXT FIELD sec_transp ELSE LET fact_gral.nombre_tran = NULL LET p_cedula = NULL LET p_serie = NULL SELECT a.nombre,a.cedula,a.serie INTO fact_gral.nombre_tran,p_cedula,p_serie FROM vetb00015 a WHERE a.cod_transp = fact_gral.cod_transp AND a.sec_transp = fact_gral.sec_transp AND a.status_t IS NULL IF STATUS < 0 THEN CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF ELSE IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_transp END IF END IF DISPLAY BY NAME fact_gral.nombre_tran ATTRIBUTE (blue) END IF LET pcod_transp = fact_gral.cod_transp LET psec_transp = fact_gral.sec_transp AFTER FIELD cod_tarifa IF fact_gral.cod_tarifa IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) #NEXT FIELD cod_tarifa ELSE LET descrip6 = NULL SELECT descrip INTO descrip6 FROM vetb00023 WHERE cod_tarifa = fact_gral.cod_tarifa AND status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_tarifa END IF LET descrip5 = descrip6[1,15] clipped LET descrip6 = descrip6[16,30] clipped DISPLAY BY NAME descrip5,descrip6 ATTRIBUTE (BOLD) END IF BEFORE FIELD fecha_factura LET fact_gral.fecha_factura = hoy DISPLAY BY NAME fact_gral.fecha_factura { ES PARA PONER LA FACTURA COMERCIAL EN EL CAMPO PLACA BEFORE FIELD fecha_embarque IF fact_gral.ventas = "1" or fact_gral.ventas = "3" THEN NEXT FIELD placa_transp END IF } AFTER FIELD fecha_embarque IF fact_Gral.ventas = "2" THEN IF fact_gral.fecha_embarque IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_embarque END IF END IF # No permite que el usuario introduzca un ano que no corresponda al actual LET ano_act = year(today) LET ano_fe = year(fact_gral.fecha_embarque) IF fact_gral.fecha_embarque > fact_gral.fecha_factura THEN LET numero_msg = 100 CALL msg(numero_msg) NEXT FIELD fecha_embarque END IF {POR EL ASUNTO DE LA FACTURA COMERCIAL IF fact_gral.ventas = "2" THEN EXIT INPUT END IF } AFTER FIELD orden IF fact_gral.orden IS NOT NULL THEN LET pubicacion = NULL LET documento_ref = NULL SELECT UNIQUE CONVERT(char(10),a.fecha_oc,103),a.ubicacion,a.nombre_file, a.cond_pago,b.descrip,b.dias,a.cotizacion_no INTO fact_gral.fecha_orden,pubicacion,documento_ref, fact_gral.cond_pago,condicion.descrip,condicion.dias, pcotizacion FROM prtb00012 a,vetb00012 b WHERE a.num_oc = fact_gral.orden AND a.tipo_cliente = fact_gral.tipo_cliente AND a.sec_cliente = fact_gral.sec_cliente AND a.cond_pago = b.cond_pago AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD orden END IF ELSE NEXT FIELD orden END IF SELECT a.dias INTO condicion.dias FROM vetb00012 a WHERE a.cond_pago = fact_gral.cond_pago LET p_fecha_ven = fact_gral.fecha_factura + condicion.dias DISPLAY BY NAME p_fecha_ven ATTRIBUTE(RED) DISPLAY BY NAME fact_gral.fecha_orden,documento_ref, fact_gral.cond_pago LET porcentaje_n = 0 SELECT a.porc_negocio INTO porcentaje_n FROM vetb00086 a WHERE a.cotizacion_no = pcotizacion IF STATUS = NOTFOUND THEN LET porcentaje_n = 0 END IF BEFORE FIELD placa_transp LET fact_Gral.placa_transp = aplaca_transp LET p_fecha_ven = fact_gral.fecha_factura + condicion.dias DISPLAY BY NAME fact_gral.placa_transp DISPLAY BY NAME p_fecha_ven ATTRIBUTE(RED) AFTER FIELD placa_transp IF fact_gral.placa_transp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) END IF LET aplaca_transp = fact_gral.placa_transp AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false DELETE FROM vetb00042 WHERE factura = fact_gral.factura AND cod_mov = p_codigo RETURN END IF IF fact_gral.fecha_factura IS NULL THEN LET fact_gral.fecha_factura = TODAY DISPLAY BY NAME fact_gral.fecha_factura END IF LET p_fechas = fact_gral.fecha_factura LET hoy = fact_gral.fecha_factura CALL prd(fact_gral.fecha_factura,usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha_factura END IF IF fact_gral.ventas IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ventas END IF IF ch_itbi = "S" THEN SELECT prima,@itbi,porciento INTO fact_gral.prima_us,fact_gral.porc_itbi,porce FROM vetb00019 WHERE disponible = "S" LET itbis_o = fact_gral.itbi IF porcentaje_n > 0 THEN LET fact_gral.porc_itbi = fact_gral.porc_itbi * (porcentaje_n /100) END IF IF fact_gral.ventas = "1" THEN IF fact_gral.porc_itbi IS NULL THEN LET fact_gral.porc_itbi = 0 END IF LET tipo_fact = 30 LET tipo_f = "FT" LET fact_gral.prima_us = NULL ELSE IF fact_gral.ventas = "3" THEN LET fact_gral.prima_us = NULL ELSE LET fact_gral.porc_itbi = NULL IF fact_gral.prima_us IS NULL THEN LET fact_gral.prima_us = 1 END IF LET tipo_fact = 31 LET tipo_f = "FE" END IF END IF END IF LET fact_gral.factura = 0 SELECT ult_factura INTO fact_gral.factura FROM vetb00001 IF fact_gral.factura IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD factura END IF LET fact_gral.factura = fact_gral.factura + 1 SELECT UNIQUE a.factura FROM vetb00002 a WHERE a.factura = fact_gral.factura IF STATUS != NOTFOUND THEN LET numero_msg = 382 CALL msg(numero_msg) NEXT FIELD cod_cia END IF DISPLAY BY NAME fact_gral.prima_us,fact_gral.porc_itbi ATTRIBUTE(BOLD) DISPLAY BY NAME descrip1 ATTRIBUTE (BOLD) IF fact_gral.sec_cliente IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF EXIT INPUT END INPUT CALL detalles() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET fact_gral.itbi = 0 LET fact_gral.sub_total = 0 LET fact_gral.total_fact = 0 LET fact_gral.desc_valor = 0 LET tot_porc = 0 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, 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 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 FROM iptb00002 a LEFT OUTER JOIN iptb00006 b ON a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = a.cod_sec WHERE a.cod_n = fact_det[curr].cod_n AND a.cod_grupo = fact_det[curr].cod_grupo AND a.cod_tipo = fact_det[curr].cod_tipo AND a.cod_sec = fact_det[curr].cod_sec AND a.status_t IS NULL GROUP BY a.descrip_esp,a.unidad_med IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF IF p_existencia IS NULL THEN LET p_existencia = 0 END IF 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: LET opt1 = FGL_WINQUESTION("PREGUNTA","Desea Imprimir esta Factura ahora?","yes","yes|no","question",0) LET opt1 = upshift(opt1) LET impresion = opt1 IF fact_gral.ventas = "1" THEN LET fact_gral.prima_us = 1 END IF LET lleva_parcial = "N" #----------------------------------------------------------------------------------------- # CONSOLIDADO SET CONNECTION "MSSQL" SELECT ult_factura INTO fact_gral.factura FROM vetb00001 IF fact_gral.factura IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) RETURN END IF LET fact_gral.factura = fact_gral.factura + 1 DISPLAY fact_Gral.factura DISPLAY BY NAME descrip1 ATTRIBUTE(blue) LABEL brinca: # Actualiza la tabla de datos generales de la factura IF fact_gral.factura IS NOT NULL THEN INSERT INTO vetb00002 (cod_cia,factura,fecha_factura,ventas,zona,orden, fecha_orden,conduce,fecha_conduce,tipo_cliente, sec_cliente,cod_vend,sec_vend,cond_pago,porc_itbi, porc_desc,prima_us,sub_total,monto_desc,monto_itbi, neto,fecha_embarque,status_impresion,status_t,us_crea, fech_crea, us_mod, fech_mod,documento,placa_transporte,bodega) 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) # INSERTA EL DETALLE DE LA FACTURA INSERT INTO vetb00048 VALUES (fact_gral.factura,observacion,null,SUSER_SNAME(),GETDATE(), null,null) # Actualiza la tabla control de la numeracion de la factura UPDATE vetb00001 SET ult_factura = fact_gral.factura, us_crea = SUSER_SNAME(), fech_crea = GETDATE() END IF # Actualizacion de la tabla de cuentas por cobrar IF fact_gral.cond_pago > 1 THEN INSERT INTO cctb00001 (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) 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) END IF #-> Actulizacion de la tabla de monitoreo de la orden de produccion vg Wednesday, 17 January, 2001 09:33:21 AM LET prtb09.num_oc = fact_gral.orden LET prtb09.fecha = fact_gral.fecha_factura IF cant_vend <> cant_prod THEN LET prtb09.pendiente = "S" LET prtb09.detalle = "DESPACHO DE MERCANCIA SEGUN FACT. # ",fact_gral.factura USING "<<<<<<<", " DE FECHA : ",fact_gral.fecha_factura USING "dd/mm/yyyy" END IF FOR idx = 1 TO cuenta_arr IF fact_det[idx].cantidad_2 IS NULL THEN LET fact_det[idx].cantidad_2 = 0 END IF IF fact_det[idx].cod_n IS NOT NULL THEN INSERT INTO vetb00003 VALUES (fact_gral.cod_cia,fact_gral.factura,fact_det[idx].area,fact_det[idx].cod_n, fact_det[idx].cod_grupo,fact_det[idx].cod_tipo, fact_det[idx].cod_sec,fact_det[idx].cantidad,fact_det[idx].cantidad_2, valor_desc,fact_det[idx].precio,NULL,SUSER_SNAME(),GETDATE(),NULL,NULL,fact_gral.bodega) # Actualiza el campo placa cuando la factura es de exportacion IF fact_gral.ventas = 2 THEN UPDATE iptb00006 SET placa = fact_gral.placa_transp WHERE num_doc = fact_gral.conduce AND cod_mov = 31 END IF IF p_bonifica[idx] IS NULL THEN LET p_bonifica[idx] = 0 END IF IF opt4 = "N" or opt4 = "n" THEN LET p_bonifica[idx] = 0 END IF # END IF END IF # cod_n IS NULL END FOR ### ============================== IMPRESION CONSOLIDADO============================= IF opt1 = "YES" THEN #-> Valida si la factura realmente existe vg 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 START REPORT imp_fact TO archivo FOR idx = 1 TO cuenta_arr IF fact_det[idx].cod_n IS NOT NULL AND fact_det[idx].cod_grupo IS NOT NULL AND fact_det[idx].cod_tipo IS NOT NULL AND fact_det[idx].cod_sec IS NOT NULL AND fact_det[idx].cantidad IS NOT NULL AND fact_det[idx].cantidad > 0 THEN LET cod_fact = 1 OUTPUT TO REPORT imp_fact(fact_gral.*,fact_det[idx].*,tot_porc, p_bonifica[idx],cod_fact) END IF END FOR DISPLAY nombre_m CLIPPED AT 1,1 FINISH REPORT imp_fact RUN imprime LET impresion = "S" END IF ELSE GOTO regresa END IF LET numero_msg = 1 CALL msg(numero_msg) FOR idx = 1 to arr_count() LET fact_det[idx].cod_n = NULL LET fact_det[idx].cod_grupo = NULL LET fact_det[idx].cod_tipo = NULL LET fact_det[idx].cod_sec = NULL LET fact_det[idx].descrip_esp = NULL LET fact_det[idx].unidad_med = NULL LET fact_det[idx].cantidad = NULL LET fact_det[idx].precio = NULL LET fact_det[idx].monto_fact = NULL END FOR LET fact_gral.itbi = 0 LET fact_gral.sub_total = 0 LET fact_gral.total_fact = 0 LET fact_gral.desc_valor = 0 INITIALIZE fact_Gral.* TO NULL GOTO otravez END FUNCTION FUNCTION repite_codigo() LET verdad = NULL LET ant_art.area = fact_det[curr].area LET ant_art.cod_n = fact_det[curr].cod_n LET ant_art.cod_grupo = fact_det[curr].cod_grupo LET ant_art.cod_tipo = fact_det[curr].cod_tipo LET ant_art.cod_sec = fact_det[curr].cod_sec LET ant_art.cantidad = fact_det[curr].cantidad LET ant_art.precio = fact_det[curr].precio FOR idx = 1 TO arr_count() IF idx != curr THEN IF fact_det[idx].cod_n IS NOT NULL AND fact_det[idx].cod_grupo IS NOT NULL AND fact_det[idx].cod_tipo IS NOT NULL AND fact_det[idx].cod_sec IS NOT NULL THEN IF fact_Det[idx].area = ant_art.area AND fact_det[idx].cod_n = ant_art.cod_n AND fact_det[idx].cod_grupo = ant_art.cod_grupo AND fact_det[idx].cod_tipo = ant_art.cod_tipo AND fact_det[idx].cod_sec = ant_art.cod_sec THEN LET numero_msg = 21 CALL msg(numero_msg) LET verdad = "S" ELSE IF verdad != "S" THEN LET verdad = "N" END IF END IF END IF END IF END FOR END FUNCTION FUNCTION tarifas() OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd014" ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST) LET int_flag = false CONSTRUCT criterio ON a.descrip FROM descrip LET selec2 = "SELECT a.cod_tarifa,a.descrip,a.tarifa_pago FROM vetb00023 a ", "WHERE a.status_t IS NULL AND ",criterio clipped," ORDER BY 1 " IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO salir_tarifa END IF PREPARE busca_tarifa FROM selec2 IF STATUS >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 END IF END IF DECLARE buscar_tarifa CURSOR FOR busca_tarifa LET idx = 1 FOREACH buscar_tarifa INTO arr_tarifa[idx].* LET idx = idx + 1 END FOREACH CALL set_count(idx-1) MESSAGE " 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) 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, Pcodigodgii LIKE vetb00071.codigo_dgii DEFINE c_cajas,bonifica,cantidad_p INTEGER, i,cod_f SMALLINT, plado1,plado2,plado3,pcantidad,pmedida,total_unidades DEC(12,5) DEFINE tot_b,tot_n,tot_m,peso_n,medida,peso_b DECIMAL(12,2), ch_fech CHAR(20), descripcion_area CHAR(30) DEFINE porciento DECIMAL(8,3) DEFINE valor_porc DECIMAL (12,2) DEFINE normal,doce,negras,negras_off,doble CHAR(2) DEFINE rnc CHAR(11) DEFINE nombre_vend,apellido_vend CHAR(15) DEFINE comprimido,comprimido_of CHAR(1) DEFINE j,lj,h INTEGER, etiqueta CHAR(30) OUTPUT TOP MARGIN 2 LEFT MARGIN 0 PAGE LENGTH 65 BOTTOM MARGIN 3 ORDER BY z.area,z.cod_n,z.cod_grupo,z.cod_tipo,z.cod_Sec FORMAT PAGE HEADER LET comprimido = ASCII 15 LET comprimido_of = ASCII 18 LET negras = ASCII 27, ASCII 69 LET negras_off = ASCII 27, ASCII 70 LET doble = ASCII 14 LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 LET lj = (80 - LENGTH(p_companias.nombre CLIPPED))/2 LET j = (90 - LENGTH(p_companias.direccion CLIPPED))/2 LET i = (90 - LENGTH(p_companias.telefono CLIPPED))/2 LET h = (90 - LENGTH(p_companias.rnc CLIPPED))/2 # IF ch_encabeza = "S" THEN # PRINT COLUMN lj, normal,doble,p_companias.nombre CLIPPED # PRINT COLUMN j+3, p_companias.direccion #PRINT COLUMN i-9, "Tels : ",p_companias.telefono , # " Fax : ",p_companias.fax #PRINT COLUMN h-1, "RNC : ",p_companias.rnc CLIPPED, # COLUMN 100, "Pag. ", pageno using "###" # ELSE # PRINT # PRINT # END IF IF ch_encabeza = "S" THEN PRINT COLUMN 4, normal,doble,"MARMOTECH, S. A." ELSE PRINT END IF SKIP 1 LINE SELECT num_rnc INTO rnc FROM vetb00004 WHERE tipo_cliente = x.tipo_cliente AND sec_cliente = x.sec_cliente AND status_t IS NULL #PRINT normal,comprimido_of IF x.ventas = "1" THEN PRINT COLUMN 4,normal,comprimido_of, negras,"SENORES :" ELSE PRINT COLUMN 4, "SIR :" END IF PRINT COLUMN 4, x.nombre CLIPPED," COD.#",x.tipo_cliente using "&&","-", x.sec_cliente using "&&&&" PRINT COLUMN 4, x.direccion CLIPPED," ",cliente_bas.telefono PRINT COLUMN 4, x.ciudad CLIPPED," RNC #",rnc, COLUMN 50, doble,"CONDUCE ",x.factura using "&&&&&" PRINT COLUMN 4, pubicacion, COLUMN 50, "PAGINA NO. ",pageno USING "<<<" PRINT comprimido SELECT a.nom1_emp,a.apell1_emp INTO p_adtb03.nom1_emp,p_adtb03.apell1_emp FROM adtb00003 a WHERE a.num_emp = fact_gral.sec_vend IF x.cond_pago > 1 AND x.ventas = "1" THEN LET nombre_vend = p_adtb03.nom1_emp CLIPPED LET apellido_vend = p_adtb03.apell1_emp CLIPPED END IF IF x.ventas = "2" THEN LET nombre_vend = p_adtb03.nom1_emp LET apellido_vend = NULL END IF PRINT "======================================================================================================", "=================================" PRINT COLUMN 1, "SALIDA", COLUMN 15, "ORDEN", COLUMN 25, "FECHA", COLUMN 38, "COTIZACION", COLUMN 52, "FACTURA E", COLUMN 65, "CONDICION", COLUMN 80, "VENDEDOR", COLUMN 113,"DOC.", COLUMN 123, "FECHA FACTURA" PRINT COLUMN 1, x.conduce USING "<<<<<", COLUMN 14, x.orden using "&&&&&&", COLUMN 25, x.fecha_orden using "dd/mm/yyyy", COLUMN 38, pcotizacion USING "&&&&&&", COLUMN 50, factura_e USING "&&&&&&", # COLUMN 65, pcondicion.getitemtext(x.cond_pago) CLIPPED, COLUMN 65, condicion.descrip[1,14], COLUMN 80, "(",x.sec_vend using "&&&&",") ",x.nombre_vend[1,20], COLUMN 113, documento_ref[1,10], COLUMN 126, x.fecha_factura using "dd/mm/yyyy" PRINT COLUMN 65, condicion.descrip[15,30] PRINT "======================================================================================================", "=================================" LET tot_n = 0 LET tot_b = 0 LET tot_m = 0 PRINT COLUMN 5,"CODIGO", COLUMN 21, "CANTIDAD", COLUMN 37, "UNIDADES", COLUMN 50, "DESCRIPCION", COLUMN 102, "PRECIO", COLUMN 114, "DESC.", COLUMN 131, "TOTAL" PRINT "======================================================================================================", "=================================" BEFORE GROUP OF z.area SELECT a.nombre_area INTO descripcion_area FROM prtb00016 a WHERE a.area_num=Z.area PRINT "AREA: (",z.area USING "<<<",")",descripcion_area SKIP 1 LINE ON EVERY ROW IF z.cantidad <> 0 THEN LET p_iptb01.factor_conv = 1 LET p_iptb01.unidad = z.unidad_med SELECT a.factor_conv,a.unidad INTO p_iptb01.factor_conv,p_iptb01.unidad FROM iptb00001 a WHERE a.cod_n = z.cod_n AND a.cod_grupo = z.cod_grupo AND a.cod_tipo = z.cod_tipo AND a.cod_sec = z.cod_sec IF p_iptb01.factor_conv IS NULL OR p_iptb01.factor_conv = 0 THEN LET p_iptb01.factor_conv = 1 LET p_iptb01.unidad = z.unidad_med END IF PRINT COLUMN 5, z.cod_n USING "&&&&","-",z.cod_grupo USING "&&&&","-", z.cod_tipo USING "&&&&","-",z.cod_sec USING "&&&&", COLUMN 13, z.cantidad USING "###,###.#####"," ",z.unidad_med CLIPPED, COLUMN 32, z.cantidad/p_iptb01.factor_conv USING "###,###", COLUMN 50, z.descrip_esp CLIPPED, COLUMN 98, z.precio USING "###,###.###", COLUMN 114, z.cantidad_2 USING "###.###", COLUMN 123, z.monto_fact USING "##,###,###.##" END IF DECLARE busca_d1 CURSOR FOR SELECT a.etiqueta,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida FROM iptb00025 a WHERE a.area = z.area AND a.cod_n = z.cod_n AND a.cod_grupo = z.cod_grupo AND a.cod_tipo = z.cod_tipo AND a.cod_sec = z.cod_sec AND a.cod_mov = p_codigo AND a.num_Doc = x.conduce LET total_unidades = 0 FOREACH busca_d1 INTO etiqueta,plado1,plado2,plado3,pcantidad,pmedida PRINT COLUMN 53,pcantidad USING "<<<,<<<"," ",etiqueta clipped," DE ",plado1 USING "<<.#####"," X ", plado2 USING "<<.#####"," X ",plado3 USING "<<.#####"," = ",pmedida USING "<<<.#####" LET total_unidades = total_unidades + pcantidad END FOREACH # IF total_unidades > 0 THEN # PRINT COLUMN 53, "TOTAL UNIDADES ",total_unidades USING "<,<<<" #END IF ON LAST ROW # Impresion de informaciones que pertenecen a facturas de exportacion IF x.ventas = "2" THEN IF x.desc_valor <> 0 THEN PRINT COLUMN 77, x.porc_desc using "<<<.##"," %DISCOUNT", COLUMN 122, x.desc_valor using "###,###,###.##" END IF PRINT COLUMN 122, "--------------" PRINT COLUMN 78, "TOTAL F.O.B. PLANT, D.R.", COLUMN 119, x.total_fact using "USD$###,###,###.##" PRINT COLUMN 122, "______________" PRINT COLUMN 122, "--------------" LET ch_fech = x.fecha_embarque using "ddd, mmm. dd, yyyy" LET ch_fech = upshift(ch_fech) PRINT COLUMN 47, "INLAND FREIGHT : COLLECT" PRINT COLUMN 47, "INSURANCE : TO BE COVERED BY CUSTOMER" PRINT COLUMN 47, "TO BE SHIPPED : ", ch_fech END IF # Impresion de datos que concierne solamente a tipos de facturas locales IF x.ventas = "1" THEN IF x.ventas = "1" THEN IF x.desc_valor <> 0 THEN SKIP 1 LINE PRINT COLUMN 78, "VALOR BRUTO ", COLUMN 122, x.sub_total using "###,###,###.##" PRINT COLUMN 77, x.porc_desc using "##"," %DESCUENTO", COLUMN 122, x.desc_valor using "###,###,###.##" END IF #-> PRINT COLUMN 122, "--------------" PRINT COLUMN 78, "SUB-TOTAL", COLUMN 122, x.sub_total-x.desc_valor using "###,###,###.##" IF x.porc_itbi > 0 THEN PRINT COLUMN 78, x.porc_itbi using "###.##","%"," ITBIS", COLUMN 122, x.itbi using "###,###,###.##" END IF PRINT COLUMN 122, "--------------" PRINT COLUMN 78, "VALOR NETO ", COLUMN 122, x.total_fact using "###,###,###.##" PRINT COLUMN 122, "==============" END IF END IF IF x.ventas = "3" THEN SKIP 1 LINE PRINT COLUMN 78, "VALOR BRUTO ", COLUMN 122, x.sub_total using "###,###,###.##" IF x.desc_valor <> 0 THEN PRINT COLUMN 77, x.porc_desc using "##"," %DESCUENTO", COLUMN 093, x.desc_valor using "###,###,###.##" #COLUMN 122, x.desc_valor using "###,###,###.##" END IF #-> PRINT COLUMN 122, "--------------" PRINT COLUMN 78, "SUB-TOTAL", COLUMN 122, x.sub_total-x.desc_valor using "###,###,###.##" IF x.porc_itbi > 0 THEN PRINT COLUMN 61, porcentaje_n USING "###.##","%/ ",itbis_o USING "###.##","% ", x.porc_itbi using "###.##","%"," ITBI", COLUMN 122, x.itbi using "###,###,###.##" END IF PRINT COLUMN 122, "--------------" PRINT COLUMN 78, "VALOR NETO ", COLUMN 118, x.total_fact using "USD$###,###,###.##" PRINT COLUMN 122, "==============" END IF PRINT comprimido_of #SKIP 8 LINE PAGE TRAILER PRINT doce,comprimido_of LET obs1=observacion[1,50] LET obs2=observacion[51,101] LET obs3=observacion[102,152] LET obs4=observacion[152,180] PRINT COLUMN 3, "OBSERVACIONES: ",UPSHIFT(obs1) CLIPPED PRINT COLUMN 3, " ",UPSHIFT(obs2) CLIPPED PRINT COLUMN 3, " ",UPSHIFT(obs3) CLIPPED PRINT COLUMN 3, " ",UPSHIFT(obs4) CLIPPED SKIP 3 LINES PRINT COLUMN 4, "NOMBRE TRANSPORTISTA: ",x.nombre_tran, " ", "CEDULA: ",p_cedula using "&&&&&&&&&", " SERIE: ",p_serie using "&&&" IF x.ventas = "2" THEN PRINT COLUMN 4, "FACTURA COMERCIAL: ",x.placa_transp ELSE PRINT COLUMN 4, "PLACA DEL VEHICULO: ",x.placa_transp END IF { SKIP 10 LINES PRINT COLUMN 12, x.nombre CLIPPED CALL convierte(x.total_fact) PRINT COLUMN 05, valor_letras clipped, COLUMN 72, x.total_fact using "###,###,###.##" PRINT COLUMN 72, x.factura using "&&&&&" PRINT COLUMN 10, condicion.dias USING "&&" } SKIP 3 LINES PRINT COLUMN 4,"-------------------------------",20 SPACES, "-------------------------------" PRINT COLUMN 4," FACTURADO POR ",20 SPACES, " REVISADO POR " #SKIP 4 LINES END REPORT FUNCTION veprfu001() DEFINE pagos RECORD documento LIKE vetb00002.factura, detalle CHAR(30), factura LIKE vetb00002.factura, cheque_no LIKE cctb00001.num_cheque, banco LIKE cctb00001.banco, valor_cheque DECIMAL(12,2), valor_efectivo DECIMAL (12,2) END RECORD OPEN WINDOW captura AT 7,12 WITH FORM "vefmwd013" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST) INPUT BY NAME pagos.* BEFORE FIELD factura LET pagos.factura = fact_gral.factura AFTER FIELD detalle IF pagos.detalle IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD detalle END IF AFTER FIELD factura IF pagos.factura IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD factura ELSE SELECT a.fecha_factura,a.tipo_cliente,a.sec_cliente,b.nombre, a.neto,b.cod_provincia,a.sub_total,a.monto_itbi INTO fact_gral.fecha_factura,fact_gral.tipo_cliente, fact_gral.sec_cliente,fact_gral.nombre,fact_gral.total_fact, codigo_provincia,fact_gral.sub_total,fact_gral.itbi FROM vetb00002 a,vetb00004 b WHERE a.factura = pagos.factura AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND a.status_t IS NULL SELECT b.calle,b.casa_num,b.barrio INTO descrip1,descrip2,descrip3 FROM vetb00005 b WHERE b.tipo_cliente = fact_gral.tipo_cliente AND b.sec_cliente = fact_gral.sec_cliente SELECT d.nombre_provincia INTO fact_gral.ciudad FROM vetb00020 d WHERE d.cod_provincia = codigo_provincia END IF LET fact_gral.factura = pagos.factura BEFORE FIELD documento LET pagos.documento = 0 SELECT ult_recibo INTO pagos.documento FROM cctb00003 WHERE tipo_doc = "PC" IF pagos.documento IS NULL THEN LET pagos.documento = 0 END IF LET pagos.documento = pagos.documento + 1 DISPLAY BY NAME pagos.documento #NEXT FIELD detalle AFTER FIELD banco LET descrip1 = NULL LET descrip2 = NULL IF pagos.banco IS NOT NULL THEN SELECT nombre_bc,localidad INTO descrip1,descrip2 FROM bancos WHERE cod_banco = pagos.banco IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD banco END IF END IF DISPLAY BY NAME descrip1 ATTRIBUTE (BOLD) AFTER FIELD valor_cheque IF pagos.valor_cheque IS NOT NULL THEN LET pagos.valor_efectivo = fact_gral.total_fact - pagos.valor_cheque ELSE LET pagos.valor_efectivo = fact_gral.total_fact END IF DISPLAY BY NAME pagos.valor_efectivo AFTER INPUT IF int_flag THEN LET int_flag = FALSE RETURN END IF END INPUT LET p_fecha_ven = "01/01/01" LET fact_gral.total_fact = fact_gral.total_fact * -1 IF fact_gral.total_fact IS NULL THEN LET fact_gral.total_fact = 0 END IF IF fact_gral.total_fact <> 0 THEN DELETE FROM cctb00001 WHERE num_doc = pagos.documento AND tipo_doc = "PC" INSERT INTO cctb00001 VALUES (NULL,fact_gral.cod_cia,"PC",pagos.documento, fact_gral.tipo_cliente,fact_gral.sec_cliente,NULL, fact_gral.sec_vend,fact_gral.fecha_factura,p_fecha_ven, fact_gral.factura,pagos.cheque_no,pagos.banco, fact_gral.total_fact,pagos.valor_efectivo,pagos.valor_cheque, 0,0,NULL,SUSER_SNAME(),GETDATE(),NULL, NULL,null) LET fact_gral.total_fact = fact_gral.total_fact * -1 CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT volante TO archivo OUTPUT TO REPORT volante(fact_gral.*,pagos.*,descrip1,descrip2) FINISH REPORT volante RUN imprime UPDATE cctb00003 SET ult_recibo = pagos.documento WHERE tipo_doc = "PC" CLOSE WINDOW captura END IF END FUNCTION REPORT volante (x,y,t,t1) DEFINE y RECORD documento LIKE vetb00002.factura, detalle CHAR(30), factura LIKE vetb00002.factura, cheque_no LIKE cctb00001.num_cheque, banco LIKE cctb00001.banco, valor_cheque DECIMAL(12,2), valor_efectivo DECIMAL (12,2) END RECORD DEFINE x RECORD cod_cia LIKE vetb00002.cod_cia, ventas LIKE vetb00002.ventas, zona LIKE vetb00002.zona, factura LIKE vetb00002.factura, fecha_factura LIKE vetb00002.fecha_factura, tipo_cliente LIKE vetb00002.tipo_cliente, sec_cliente LIKE vetb00002.sec_cliente, nombre CHAR(30), direccion CHAR(50), ciudad CHAR(20), prima_us LIKE vetb00002.prima_us, porc_desc LIKE vetb00002.porc_desc, cond_pago LIKE vetb00002.cond_pago, orden LIkE vetb00002.orden, fecha_orden LIKE vetb00002.fecha_orden, conduce LIKE vetb00002.conduce, 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() OPEN WINDOW anula AT 7,5 WITH FORM "vefmwd006" ATTRIBUTE (BORDER, COMMENT LINE LAST - 1,PROMPT LINE LAST,FORM LINE FIRST + 1) INPUT BY NAME fact_gral.cod_cia,p_fact_no AFTER FIELD p_fact_no SELECT UNIQUE CONVERT(CHAR(10),a.fecha_factura,103),a.orden,a.tipo_cliente,a.sec_cliente,neto INTO fact_gral.fecha_factura,fact_gral.orden,fact_gral.tipo_cliente, fact_gral.sec_cliente,fact_gral.total_fact FROM vetb00002 a WHERE a.factura = p_fact_no AND a.status_t IS NULL AND a.fech_crea >'01/01/2009' and a.cod_cia = fact_Gral.cod_cia IF STATUS = NOTFOUND THEN LET numero_msg = 102 CALL msg(numero_msg) NEXT FIELD p_fact_no END IF SELECT a.nombre INTO fact_gral.nombre FROM vetb00004 a WHERE a.tipo_cliente = fact_gral.tipo_cliente AND a.sec_cliente = fact_gral.sec_cliente DISPLAY BY NAME fact_gral.tipo_cliente,fact_gral.sec_cliente, fact_gral.total_fact,fact_gral.nombre, fact_gral.fecha_factura ATTRIBUTE(blue) #CONTROL DEVOLUCIONES SELECT DISTINCT a.fact_no FROM iptb00006 a # WHERE a.cod_mov in (12,13) and CONVERT(int,a.fact_no) = p_fact_no AND WHERE a.cod_mov in (12,13) and a.fact_no = p_fact_no AND a.fecha > '01/01/2009' and a.status_t IS NULL IF STATUS != NOTFOUND THEN LET numero_msg =138 CALL msg(numero_msg) NEXT FIELD p_fact_no END IF LET p_fechas = fact_gral.fecha_factura { SELECT UNIQUE a.usuario INTO p_usuario FROM seg0001 a WHERE a.usuario = SUSER_SNAME() IF p_usuario = "rsierra" THEN IF fact_gral.fecha_factura != TODAY THEN ERROR "NO PUEDE ANULAR FACTURA QUE NO SEAN DEL DIA DE HOY" RETURN END IF END IF } CALL prd(fact_gral.fecha_factura,usuarios) RETURNING bandera AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT INPUT END IF LET opt3 = FGL_WINQUESTION("PREGUNTA","Esta seguro de Anular Esta Factura?","yes","Yes|no","question",0) LET opt3 = UPSHIFT(opt3) IF opt3 = "YES" THEN UPDATE vetb00002 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE factura = p_fact_no AND fech_crea > '01/01/2009' and cod_cia = fact_Gral.cod_cia { EN COMENTARIO PORQUE ESTE PROGRAMA NO ACTUALIZA INVENTARIO UPDATE iptb00006 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE num_doc = p_fact_no AND cod_mov IN (30,31,32,55) AND fech_crea > datetime (2006-03-31 08:00) year to minute and cod_cia = fact_Gral.cod_cia } UPDATE vetb00003 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE factura = p_fact_no AND fech_crea > '01/01/2009' and cod_cia = fact_Gral.cod_cia UPDATE cctb00001 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE num_doc = p_fact_no AND (tipo_doc = "FT" or tipo_doc = "FE") AND fech_crea > '01/01/2009' and cod_cia = fact_Gral.cod_cia UPDATE cctb00001 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE aplica_a = p_fact_no AND tipo_doc = "PC" and fech_crea > '01/01/2009' and cod_cia = fact_Gral.cod_cia # ANULACION DE LAS SERIES IF fact_gral.ventas = "1" THEN LET p_codigo = 30 ELSE LET p_codigo = 31 END IF UPDATE vetb00042 set status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE factura = p_fact_no AND cod_mov = p_codigo LET numero_msg = 82 CALL msg(numero_msg) EXIT INPUT ELSE CONTINUE INPUT END IF EXIT INPUT END INPUT # Este Int_flag es porque tuve que salir del input con el int_flag verdadero # y asi poder salir del window sin problemas LET fact_gral.fecha_factura = TODAY CLOSE WINDOW anula END FUNCTION FUNCTION precios() # AQUI HAY QUE BUSCAR EL PRECIO PARA CALCULAR POR CLIENTE LET p_costos1 = 0 SELECT precio INTO p_costos1 FROM vetb00025 WHERE ventas = fact_gral.ventas AND tipo_cliente = fact_gral.tipo_cliente AND sec_cliente = fact_gral.sec_cliente AND cod_n=fact_det[curr].cod_n AND cod_grupo=fact_det[curr].cod_grupo AND cod_tipo=fact_det[curr].cod_tipo AND cod_sec = fact_det[curr].cod_sec AND status_t IS NULL IF STATUS = NOTFOUND THEN SELECT precio INTO p_costos1 FROM vetb00025 WHERE ventas = fact_gral.ventas AND tipo_cliente IS NULL AND sec_cliente IS NULL AND cod_n = fact_det[curr].cod_n AND cod_grupo = fact_det[curr].cod_grupo AND cod_tipo = fact_det[curr].cod_tipo AND cod_sec = fact_det[curr].cod_sec AND status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 85 CALL msg(numero_msg) LET verdad = "N" END IF {IF fact_det[curr].cod_n = 2 THEN LET verdad = "N" END IF} END IF LET fact_det[curr].precio = p_costos1 END FUNCTION FUNCTION ver_desc() OPEN WINDOW descuentos AT 10,5 WITH FORM "vefmwd007" ATTRIBUTE (BORDER,FORM LINE FIRST +1,COMMENT LINE LAST -1,MESSAGE LINE LAST) CALL set_count(h-1) DISPLAY ARRAY descuenta TO s_desc.* CLOSE WINDOW descuentos END FUNCTION FUNCTION detalles() OPEN WINDOW wdetalle AT 12,2 WITH FORM "vefmwd075" ATTRIBUTE(BORDER,FORM LINE FIRST +1) INPUT BY NAME observacion WITHOUT DEFAULTS CLOSE WINDOW wdetalle END FUNCTION FUNCTION cantidad_desp(forden,fcod_n,fcod_tipo,fcod_grupo,fcod_sec) DEFINE forden INTEGER, fcod_n,fcod_tipo,fcod_grupo,fcod_sec SMALLINT SELECT SUM(b.cantidad) INTO cant_vend FROM vetb00002 a, vetb00003 b WHERE a.orden = forden AND a.fecha_factura > "31122006" AND a.factura = b.factura AND b.cod_n = fcod_n AND b.cod_tipo = fcod_tipo AND b.cod_grupo = fcod_grupo AND b.cod_sec = fcod_sec AND a.status_t IS NULL and b.status_t is NULL IF STATUS = NOTFOUND THEN LET cant_vend = 0 END IF END FUNCTION FUNCTION actualiza_st(forden) DEFINE forden INTEGER, prod_total,vent_total DEC(8,2) SELECT SUM(a.cantidad) INTO prod_total FROM prtb00013 a WHERE a.num_oc = forden IF STATUS = NOTFOUND THEN LET prod_total = 0 END IF SELECT SUM(b.cantidad) INTO vent_total FROM vetb00002 a, vetb00003 b WHERE a.orden = forden AND a.fecha_factura > "31122000" AND a.factura = b.factura AND a.tipo_cliente = fact_gral.tipo_cliente AND a.sec_cliente = fact_gral.sec_cliente AND a.status_t IS NULL AND b.status_t IS NULL IF STATUS = NOTFOUND THEN LET vent_total = 0 END IF #-> display "Vendido : ",vent_total," ","Prod : ",prod_total at 2,15 sleep 3 #-> Actualiza la fecha de cierre de la orden de corte vg Wednesday, 17 January, 200112:42:33 PM IF vent_total = prod_total THEN UPDATE prtb00012 SET fecha_cierre = fact_gral.fecha_factura WHERE @num_oc = forden AND @tipo_cliente = fact_gral.tipo_cliente AND @sec_cliente = fact_gral.sec_cliente LET prtb09.num_oc = forden LET prtb09.fecha = fact_gral.fecha_factura LET prtb09.pendiente = "N" LET prtb09.detalle = "CIERRE DE ORDEN DE PRODUCCION SEGUN FACT. # ",fact_gral.factura USING "<<<<<<<", " DE FECHA : ",fact_gral.fecha_factura USING "dd/mm/yyyy" INSERT INTO prtb00009 VALUES (prtb09.num_oc,prtb09.fecha,null,prtb09.pendiente, prtb09.detalle,NULL,SUSER_SNAME(),GETDATE(),NULL,NULL) END IF END FUNCTION FUNCTION convierte(valor_origen) # Funcion para convertir de valor a letras DEFINE valor_origen DECIMAL(12,2) DEFINE consegui CHAR(1) DEFINE p,miles,m,k,a,b,d,c,entero,unidades_mi,unidades_m,unidad,mil,millon, unid_c,u INTEGER DEFINE cheles DECIMAL (7,2) CALL letras() LET valor_letras = null LET consegui = "N" LET entero = valor_origen LET cheles = (valor_origen - entero) * 100 LET unidad = entero / 100 LET unidad = entero - (unidad * 100) LET a = entero / 1000 LET a = entero - (a * 1000) LET d = entero - 19 IF d >= 82 THEN LET c = entero / 100 # Para Controlar los miles y los cientos IF c <= 9 THEN LET valor_letras = valor_letras clipped," ",centenas[c] clipped ELSE LET c = entero / 1000 LET b = entero / 1000000 END IF IF d > 19 THEN LET d = unidad - 19 END IF IF unidad > 0 and unidad < 20 THEN LET d = unidad LET valor_letras = valor_letras clipped," ",unidades1[d] clipped LET consegui = "S" END IF ELSE IF d > 0 AND d <= 81 THEN LET valor_letras = valor_letras clipped," ",decenas[d] clipped LET consegui = "S" END IF END IF # Para controlar los miles IF entero > 999 THEN LET unidades_m = a / 100 LET unidades_m = a - (unidades_m * 100) LET valor_letras = null IF c = 1 THEN LET valor_letras = "MIL" END IF IF c > 1 and c <= 19 THEN LET valor_letras = valor_letras clipped," ",unidades1[c] clipped," ","MIL" END IF IF c >= 20 and c <= 999 THEN IF c < 82 THEN LET c = c - 19 LET valor_letras = valor_letras clipped," ",decenas[c] clipped ELSE LET k = c / 100 LET valor_letras = valor_letras clipped," ",centenas[k] clipped LET unid_c = c - (k * 100) IF unid_c >= 20 THEN LET unid_c = unid_c - 19 LET valor_letras = valor_letras clipped," ",decenas[unid_c] clipped END IF END IF LET valor_letras = valor_letras clipped," ","MIL" END IF LET c = a IF c > 100 THEN LET c = c / 100 LET valor_letras = valor_letras clipped," ",centenas[c] clipped END IF IF c = 100 THEN LET valor_letras = valor_letras clipped," ",decenas[81] clipped END IF IF unidades_m > 0 and unidades_m <= 19 THEN LET a = unidades_m LET valor_letras = valor_letras clipped, " ",unidades1[a] clipped { ELSE LET a = unidades_m - 19 LET valor_letras = valor_letras clipped, " ",unidades1[a] clipped} END IF END IF # Para Controlar cantidades en millones IF entero > 999999 THEN LET c = 0 LET miles = entero - 1000000 LET m = miles / 1000 LET p = miles - (m * 1000) LET u = m / 100 LET u = m - (u * 100) LET unidades_mi = p LET unidades_mi = unidades_mi / 100 LET unidades_mi = p - (unidades_mi * 100) LET valor_letras = null IF b = 1 THEN LET valor_letras = "UN MILLON" END IF IF b > 1 and b <= 19 THEN LET valor_letras = valor_letras clipped," ",unidades1[b] clipped," ", "MILLONES" END IF IF b >= 20 and b <= 999999 THEN IF b < 82 THEN LET b = b - 19 LET valor_letras = valor_letras clipped," ",decenas[b] clipped," ", "MILLONES" ELSE LET k = b / 100 LET valor_letras = valor_letras clipped," ",centenas[k] clipped," ", "MILLONES" END IF END IF LET b = m IF b > 100 THEN LET b = b / 100 LET valor_letras = valor_letras clipped," ",centenas[b] clipped IF u > 0 and u <= 19 THEN IF u = 1 THEN LET unidades1[1] = "UN" END IF LET valor_letras = valor_letras clipped," ",unidades1[u] clipped END IF LET valor_letras = valor_letras clipped," ","MIL" END IF IF p > 100 THEN LET p = p / 100 LET valor_letras = valor_letras clipped," ",centenas[p] clipped END IF IF unidades_mi > 0 and unidades_mi < 19 THEN LET m = unidades_mi LET valor_letras = valor_letras clipped, " ",unidades1[m] clipped END IF END IF IF unidad > 0 and unidad < 20 AND consegui = "N" THEN LET d = unidad LET valor_letras = valor_letras clipped," ",unidades1[d] clipped END IF IF unidad >= 20 AND d <= 81 AND consegui = "N" THEN LET valor_letras = valor_letras clipped," ",decenas[d] clipped END IF LET valor_letras = valor_letras clipped," ","CON"," ", cheles using "&&", "/100" END FUNCTION FUNCTION letras() LET unidades1[1] = "UNO" LET unidades1[2] = "DOS" LET unidades1[3] = "TRES" LET unidades1[4] = "CUATRO" LET unidades1[5] = "CINCO" LET unidades1[6] = "SEIS" LET unidades1[7] = "SIETE" LET unidades1[8] = "OCHO" LET unidades1[9] = "NUEVE" LET unidades1[10] = "DIEZ" LET unidades1[11] = "ONCE" LET unidades1[12] = "DOCE" LET unidades1[13] = "TRECE" LET unidades1[14] = "CATORCE" LET unidades1[15] = "QUINCE" LET unidades1[16] = "DIESISEIS" LET unidades1[17] = "DIESISIETE" LET unidades1[18] = "DIESIOCHO" LET unidades1[19] = "DIESINUEVE" LET decenas[1] = "VEINTE" LET decenas[2] = "VEINTE Y UNO" LET decenas[3] = "VEINTE Y DOS" LET decenas[4] = "VEINTE Y TRES" LET decenas[5] = "VEINTE Y CUATRO" LET decenas[6] = "VEINTE Y CINCO" LET decenas[7] = "VEINTE Y SEIS" LET decenas[8] = "VEINTE Y SIETE" LET decenas[9] = "VEINTE Y OCHO" LET decenas[10] = "VEINTE Y NUEVE" LET decenas[11] = "TREINTA" LET decenas[12] = "TREINTA Y UNO" LET decenas[13] = "TREINTA Y DOS" LET decenas[14] = "TREINTA Y TRES" LET decenas[15] = "TREINTA Y CUATRO" LET decenas[16] = "TREINTA Y CINCO" LET decenas[17] = "TREINTA Y SEIS" LET decenas[18] = "TREINTA Y SIETE" LET decenas[19] = "TREINTA Y OCHO" LET decenas[20] = "TREINTA Y NUEVE" LET decenas[21] = "CUARENTA" LET decenas[22] = "CUARENTA Y UNO" LET decenas[23] = "CUARENTA Y DOS" LET decenas[24] = "CUARENTA Y TRES" LET decenas[25] = "CUARENTA Y CUATRO" LET decenas[26] = "CUARENTA Y CINCO" LET decenas[27] = "CUARENTA Y SEIS" LET decenas[28] = "CUARENTA Y SIETE" LET decenas[29] = "CUARENTA Y OCHO" LET decenas[30] = "CUARENTA Y NUEVE" LET decenas[31] = "CINCUENTA" LET decenas[32] = "CINCUENTA Y UNO" LET decenas[33] = "CINCUENTA Y DOS" LET decenas[34] = "CINCUENTA Y TRES" LET decenas[35] = "CINCUENTA Y CUATRO" LET decenas[36] = "CINCUENTA Y CINCO" LET decenas[37] = "CINCUENTA Y SEIS" LET decenas[38] = "CINCUENTA Y SIETE" LET decenas[39] = "CINCUENTA Y OCHO" LET decenas[40] = "CINCUENTA Y NUEVE" LET decenas[41] = "SESENTA" LET decenas[42] = "SESENTA Y UNO" LET decenas[43] = "SESENTA Y DOS" LET decenas[44] = "SESENTA Y TRES" LET decenas[45] = "SESENTA Y CUATRO" LET decenas[46] = "SESENTA Y CINCO" LET decenas[47] = "SESENTA Y SEIS" LET decenas[48] = "SESENTA Y SIETE" LET decenas[49] = "SESENTA Y OCHO" LET decenas[50] = "SESENTA Y NUEVE" LET decenas[51] = "SETENTA" LET decenas[52] = "SETENTA Y UNO" LET decenas[53] = "SETENTA Y DOS" LET decenas[54] = "SETENTA Y TRES" LET decenas[55] = "SETENTA Y CUATRO" LET decenas[56] = "SETENTA Y CINCO" LET decenas[57] = "SETENTA Y SEIS" LET decenas[58] = "SETENTA Y SIETE" LET decenas[59] = "SETENTA Y OCHO" LET decenas[60] = "SETENTA Y NUEVE" LET decenas[61] = "OCHENTA" LET decenas[62] = "OCHENTA Y UNO" LET decenas[63] = "OCHENTA Y DOS" LET decenas[64] = "OCHENTA Y TRES" LET decenas[65] = "OCHENTA Y CUATRO" LET decenas[66] = "OCHENTA Y CINCO" LET decenas[67] = "OCHENTA Y SEIS" LET decenas[68] = "OCHENTA Y SIETE" LET decenas[69] = "OCHENTA Y OCHO" LET decenas[70] = "OCHENTA Y NUEVE" LET decenas[71] = "NOVENTA" LET decenas[72] = "NOVENTA Y UNO" LET decenas[73] = "NOVENTA Y DOS" LET decenas[74] = "NOVENTA Y TRES" LET decenas[75] = "NOVENTA Y CUATRO" LET decenas[76] = "NOVENTA Y CINCO" LET decenas[77] = "NOVENTA Y SEIS" LET decenas[78] = "NOVENTA Y SIETE" LET decenas[79] = "NOVENTA Y OCHO" LET decenas[80] = "NOVENTA Y NUEVE" LET decenas[81] = "CIEN" LET centenas[1] = "CIENTO" LET centenas[2] = "DOCIENTOS" LET centenas[3] = "TRESCIENTOS" LET centenas[4] = "CUATROCIENTOS" LET centenas[5] = "QUINIENTOS" LET centenas[6] = "SEISCIENTOS" LET centenas[7] = "SETECIENTOS" LET centenas[8] = "OCHOCIENTOS" LET centenas[9] = "NOVECIENTOS" END FUNCTION FUNCTION after_all() # Calculo del sub-total de la factura LET fact_gral.itbi = 0 LET fact_gral.sub_total = 0 LET fact_gral.total_fact = 0 LET fact_gral.desc_valor = 0 FOR idx = 1 to t_arr IF fact_det[idx].cantidad IS NOT NULL THEN LET fact_gral.sub_total = fact_gral.sub_total + (fact_det[idx].cantidad * fact_det[idx].precio) END IF END FOR DISPLAY BY NAME fact_gral.sub_total FOR idx = 1 to arr_count() IF fact_det[idx].cantidad IS NOT NULL THEN LET fact_det[idx].monto_fact = fact_det[idx].cantidad * fact_det[idx].precio IF fact_det[idx].cantidad_2 > 0 THEN #-> calcula el valor en descuento para cada articulo vg LET valor_desc = 0 LET valor_desc = fact_det[idx].monto_fact * (fact_det[idx].cantidad_2 / 100) LET fact_gral.desc_valor = fact_gral.desc_valor + valor_desc LET fact_det[idx].monto_fact = fact_det[idx].monto_fact - valor_desc END IF END IF END FOR DISPLAY BY NAME fact_gral.desc_valor # Calcula el porciento de ITBIS de la factura dependiendo del porciento # especificado por el usuario IF fact_gral.porc_itbi IS NOT NULL THEN LET fact_gral.itbi=((fact_gral.sub_total - fact_gral.desc_valor)* fact_gral.porc_itbi/100) #- LET fact_gral.itbi=(fact_gral.sub_total * fact_gral.porc_itbi/100) ELSE LET fact_gral.itbi=0 END IF LET itbi = fact_gral.itbi using "###,###,###.##" DISPLAY BY NAME fact_gral.itbi ATTRIBUTE (BOLD) # Calculo total de la factura LET fact_gral.total_fact = (fact_gral.sub_total - fact_gral.desc_valor)+ fact_gral.itbi DISPLAY BY NAME fact_gral.total_fact ATTRIBUTE (BOLD) END FUNCTION { FUNCTION despiece() OPEN WINDOW despieza AT 15,5 WITH FORM "vefmwd017" END FUNCTION FUNCTION despiecerow() DEFINE plado1,plado2,plado3,pcantidad,pmedida DEC(15,4) DECLARE despiecer CURSOR FOR SELECT a.etiqueta,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida FROM iptb00025 a WHERE a.cod_n = z.cod_n AND a.cod_grupo = z.cod_grupo AND a.cod_tipo = z.cod_tipo AND a.cod_sec = z.cod_sec AND a.cod_mov = p_codigo AND a.num_Doc = x.conduce LET total_unidades = 0 FOREACH despiecer INTO etiqueta,plado1,plado2,plado3,pcantidad,pmedida FUNCTION ccondicion() 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 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,RTRIM(b.calle) + ' ' + RTRIM(b.casa_num) + ' ' + RTRIM(b.barrio), ", " l.nombre_provincia,a.prima_us,a.porc_Desc,a.cond_pago,a.orden,convert(char(10),a.fecha_orden,103),a.porc_itbi,a.sec_vend, ", " RTRIM(d.nom1_emp) + ' ' + RTRIM(d.apell1_emp),' ', ' ',' ',' ', ", " convert(char(10),a.fecha_embarque,103),' ',a.sub_total,a.monto_Desc, ", " a.monto_itbi,a.neto,a.cod_vend,a.documento ", " FROM vetb00002 a left outer join ", " vetb00005 b on a.tipo_cliente = b.tipo_cliente and a.sec_cliente = b.sec_cliente , ", " vetb00004 g, adtb00003 d,vetb00060 k,vetb00020 l ", " WHERE a.ventas = k.ventas and a.tipo_cliente = k.tipo_cliente and ", " a.tipo_cliente = g.tipo_cliente and ", criterio CLIPPED," and ", " a.sec_cliente = g.sec_cliente and ", " g.cod_provincia =l.cod_provincia and ", " a.sec_vend = d.num_emp and a.status_t IS NULL ", " ORDER BY a.factura " PREPARE comando FROM selec DECLARE consulta SCROLL CURSOR FOR comando OPEN consulta FETCH FIRST consulta INTO fact_gral.*,factura_e,documento_ref IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL informacion(fact_gral.conduce,fact_gral.ventas,fact_gral.bodega) LET pcondicion = ui.ComboBox.forName("formonly.cond_pago") CALL ccondicion() CALL bodegas('1') DISPLAY BY NAME fact_gral.*,factura_e,documento_ref MENU "NAVEGACION:" COMMAND "Siguiente" FETCH NEXT consulta iNTO fact_Gral.*,factura_e IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL informacion(fact_gral.conduce,fact_gral.ventas,fact_gral.bodega) LET pcondicion = ui.ComboBox.forName("formonly.cond_pago") CALL ccondicion() DISPLAY BY NAME fact_gral.*,factura_e,documento_ref COMMAND "Anterior" FETCH PREVIOUS consulta iNTO fact_Gral.*,factura_e IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL informacion(fact_gral.conduce,fact_gral.ventas,fact_gral.bodega) LET pcondicion = ui.ComboBox.forName("formonly.cond_pago") CALL ccondicion() DISPLAY BY NAME fact_gral.*,factura_e,documento_ref COMMAND "Primero" FETCH FIRST consulta iNTO fact_Gral.*,factura_e IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL informacion(fact_gral.conduce,fact_gral.ventas,fact_gral.bodega) LET pcondicion = ui.ComboBox.forName("formonly.cond_pago") CALL ccondicion() DISPLAY BY NAME fact_gral.*,factura_e,documento_ref COMMAND "Ultimo" FETCH LAST consulta iNTO fact_Gral.*,factura_e IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL informacion(fact_gral.conduce,fact_gral.ventas,fact_gral.bodega) LET pcondicion = ui.ComboBox.forName("formonly.cond_pago") CALL ccondicion() DISPLAY BY NAME fact_gral.*,factura_e,documento_ref 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 defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT imp_fact TO archivo LET selec = "SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,b.descrip_esp,b.unidad_med, ", " a.cantidad,a.precio,a.cantidad_2,(a.cantidad*a.precio)*(a.cantidad_2/100), ", " (a.cantidad*a.precio) -(a.cantidad*a.precio)*(a.cantidad_2/100) ", " FROM vetb00003 a,iptb00002 b ", " WHERE a.factura = ? AND ", " a.cod_n = b.cod_n AND ", " a.cod_grupo = b.cod_grupo AND ", " a.cod_tipo = b.cod_tipo AND ", " a.cod_Sec = b.cod_Sec ", " UNION ", "SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,b.descrip_esp,b.unidad_med, ", " a.cantidad,a.precio,a.cantidad_2,(a.cantidad*a.precio)*(a.cantidad_2/100), ", " (a.cantidad*a.precio) -(a.cantidad*a.precio)*(a.cantidad_2/100) ", " FROM historicomtech.dbo.vetb00003 a,historicomtech.dbo.iptb00002 b ", " WHERE a.factura = ? AND ", " a.cod_n = b.cod_n AND ", " a.cod_grupo = b.cod_grupo AND ", " a.cod_tipo = b.cod_tipo AND ", " a.cod_Sec = b.cod_Sec " PREPARE cmdfact FROM selec DECLARE busca_items CURSOR FOR cmdfact OPEN busca_items USING fact_gral.factura,fact_gral.factura LET idx = 1 FOREACH busca_items INTO fact_Det[idx].* LET valor_Desc = (fact_det[idx].cantidad * fact_det[idx].precio) * (fact_Det[idx].cantidad_2 / 100) IF valor_desc IS NULL THEN LET valor_desc = 0 END IF LET fact_det[idx].monto_fact = (fact_Det[idx].precio * fact_det[idx].cantidad)- valor_desc LET cod_fact = 1 LET p_bonifica[idx] = 0 OUTPUT TO REPORT imp_fact(fact_gral.*,fact_det[idx].*,tot_porc, p_bonifica[idx],cod_fact) LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY ARRAY fact_det TO s_fact.* FINISH REPORT imp_fact IF int_flag THEN LET numero_msg = 3 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF RUN imprime COMMAND "Retornar" CLEAR FORM EXIT MENU END MENU END FUNCTION