public ActionResult Index() { using (var db = new NominaEntities()) { LisTgrupo = (from grupo in db.Grupo select new GrupoCLS { Id_grupo = grupo.Id_grupo, nomb_grupo = grupo.nomb_grupo, cod_grupo = grupo.cod_grupo }).ToList(); } return(View(LisTgrupo)); }
public ActionResult Index() { using (var db = new NominaEntities()) { LisTempleado = (from empleado in db.Empleado select new EmpleadoCLS { Id_empleado = empleado.Id_empleado, nombre = empleado.nombre, apellido = empleado.apellido, cod_empleado = empleado.cod_empleado, area = empleado.area, Id_grupo = empleado.Id_grupo }).ToList(); } return(View(LisTempleado)); }
public ActionResult Agregar(GrupoCLS grupoCLS) { if (!ModelState.IsValid) { return(View(grupoCLS)); } else { using (var bdUser = new NominaEntities()) { Grupo oGrupo = new Grupo(); oGrupo.Id_grupo = oGrupo.Id_grupo; oGrupo.nomb_grupo = oGrupo.nomb_grupo; oGrupo.cod_grupo = oGrupo.cod_grupo; bdUser.Grupo.Add(oGrupo); bdUser.SaveChanges(); } return(RedirectToAction("Index")); } }
public ActionResult Agregar(EmpleadoCLS empleadoCLS) { if (!ModelState.IsValid) { return(View(empleadoCLS)); } else { using (var bd = new NominaEntities()) { Empleado empleado = new Empleado(); empleado.nombre = empleadoCLS.nombre; empleado.apellido = empleadoCLS.apellido; empleado.cod_empleado = empleadoCLS.cod_empleado; empleado.area = empleadoCLS.area; empleado.Id_grupo = empleadoCLS.Id_grupo; bd.Empleado.Add(empleado); bd.SaveChanges(); } } return(RedirectToAction("Index")); }
protected void GenerarXMLFile_Button_Click(object sender, EventArgs e) { if (PeriodoSeleccion_TextBox.Text == "") { ErrMessage_Span.InnerHtml = "Ud. debe indicar un período de selección válido. <br /><br />" + "El período de selección que Ud. indique debe tener la forma 'aaaamm'; por ejemplo: 200901."; ErrMessage_Span.Style["display"] = "block"; return; } if (PeriodoSeleccion_TextBox.Text.ToString().Length != 6) { ErrMessage_Span.InnerHtml = "Ud. debe indicar un período de selección válido. <br /><br />" + "El período de selección que Ud. indique debe tener la forma 'aaaamm'; por ejemplo: 200901."; ErrMessage_Span.Style["display"] = "block"; return; } int nPeriodoSeleccion = 0; if (!int.TryParse(PeriodoSeleccion_TextBox.Text, out nPeriodoSeleccion)) { ErrMessage_Span.InnerHtml = "Ud. debe indicar un período de selección válido. <br /><br />" + "El período de selección que Ud. indique debe tener la forma 'aaaamm'; por ejemplo: 200901."; ErrMessage_Span.Style["display"] = "block"; return; } // si el combo no tiene registro seleccionado es porque no hay registros en la tabla if (CiaContab_DropDownList.SelectedIndex == -1) { ErrMessage_Span.InnerHtml = "No existe información para construir el archivo que Ud. ha requerido. <br /><br />" + "Probablemente Ud. no ha aplicado un filtro y seleccionado información aún."; ErrMessage_Span.Style["display"] = "block"; return; } BancosEntities dbBancos = new BancosEntities(); int ciaContab = Convert.ToInt32(CiaContab_DropDownList.SelectedValue); var Facturas = (from f in dbBancos.tTempWebReport_ConsultaFacturas join c in dbBancos.Companias on f.CiaContab equals c.Numero where f.NombreUsuario == User.Identity.Name && f.CiaContab == ciaContab select new { RifAgente = c.Rif, NombreCiaContab = c.NombreCorto, c.Abreviatura }).ToList(); if (Facturas.Count == 0) { ErrMessage_Span.InnerHtml = "No existe información para construir el archivo que Ud. ha requerido. <br /><br /> " + "Probablemente Ud. no ha aplicado un filtro y seleccionado información aún."; ErrMessage_Span.Style["display"] = "block"; dbBancos = null; return; } string sNombreCiaContab = Facturas[0].Abreviatura; string sRifCiaContab = Facturas[0].RifAgente.ToString().Replace("-", ""); int cantidadFacturas = 0; int cantidadRetenciones = 0; Facturas = null; // nótese como seleccionamos solo los registros que corresponden a la cia contab seleccinada; // además, solo los que corresponden al usuario XDocument xmldoc = new XDocument( new XElement("RelacionRetencionesISLR", new XAttribute("RifAgente", sRifCiaContab), new XAttribute("Periodo", nPeriodoSeleccion.ToString()))); xmldoc.Declaration = new XDeclaration("1.0", "ISO-8859-1", "true"); var facturasQuery = from f in dbBancos.tTempWebReport_ConsultaFacturas where f.NombreUsuario == User.Identity.Name && f.CiaContab == ciaContab select f; foreach (var f in facturasQuery) { // nótese lo que hacemos aquí: si el Iva comienza con J (persona jurídica) grabamos el // monto sujeto a retención al archivo; si el rif comienza con otra letra (persona NO juridica) // grabamos el monto total de la factura (ie: imponible más no imponible) // dejamos de aplicar el criterio que sigue pues ahora los empleados vienen siempre desde la // nómina con el sueldo que registre el usuario como monto sujeto a retención para el xml file if (f.RifCompania == null) { ErrMessage_Span.InnerHtml = "Aparentemente, la compañía " + f.NombreCompania + " no tiene un número de rif definido en la Maestra de Proveedores. <br /><br />" + "Por favor revise esta situación; asigne un número de Rif a esta compañía y regrese a ejecutar nuevamente este proceso."; ErrMessage_Span.Style["display"] = "block"; dbBancos = null; return; } // ---------------------------------------------------------------------------------------------------------------------------------------------- // ahora los impuestos y las retenciones se registran en forma separada en la tabla Facturas_Impuestos; el objetivo principal de este cambio fue, // simplemente, poder registrar *más de una* retención de impuestos para una factura. Aunque no es un caso frecuente, existen proveedores que // hacen facturas en las cuales especifican dos retenciones (islr) diferentes ... ellos ya las indican, para que el cliente sepa que debe hacerlo // así ... por esa razón, ahora buscamos, para cada factura, la retención islr en la tabla Facturas_Impuestos; como dijimos antes, aunque no es // frecuente, puede haber más de una retención islr para una misma factura ... Factura factura = dbBancos.Facturas.Include("Facturas_Impuestos"). Include("Facturas_Impuestos.ImpuestosRetencionesDefinicion"). Where(x => x.ClaveUnica == f.ClaveUnicaFactura). FirstOrDefault(); if (factura == null) { continue; } foreach (Facturas_Impuestos retencion in factura.Facturas_Impuestos.Where(r => r.ImpuestosRetencionesDefinicion.Predefinido == 3)) { // la factura debe tener un código de retención en el registro de ImpuestosRetenciones ... string codigoConceptoRetencion_islr = retencion.Codigo; if (string.IsNullOrEmpty(codigoConceptoRetencion_islr)) { ErrMessage_Span.InnerHtml = "Aparentemente, la compañía " + f.NombreCompania + " no tiene un 'código de concepto de retención de Islr' " + "en una (o varias) de sus facturas asociadas (ej: " + factura.NumeroFactura + "). " + "<br /><br /> Por favor revise esta situación; asigne un " + "'código de concepto de retención de Islr' a cada una de las facturas asociadas a esta compañía; " + "luego regrese y ejecute nuevamente este proceso."; ErrMessage_Span.Style["display"] = "block"; dbBancos = null; return; } // ------------------------------------------------------------------------------------------ // número control - intentamos quitar caracteres especiales y dejar solo números ... string sNumeroControlDefinitivo = factura.NumeroControl; if (string.IsNullOrEmpty(sNumeroControlDefinitivo)) { sNumeroControlDefinitivo = "0"; } Int64 numeroControl = 0; if (this.retencionISLR_NumeroControl_ConvertirNumeros_CheckBox.Checked) { if (!Int64.TryParse(sNumeroControlDefinitivo, out numeroControl)) { // excelente como quitamos letras y caracteres especiales del string (tomado de algún lado en la Web) ... sNumeroControlDefinitivo = new String(sNumeroControlDefinitivo.Where(c => char.IsDigit(c)).ToArray()); } else { sNumeroControlDefinitivo = factura.NumeroControl; } } ; // ------------------------------------------------------------------------------------------ decimal montoOperacion = retencion.MontoBase != null ? retencion.MontoBase.Value : 0; decimal porcentaje = retencion.Porcentaje != null ? retencion.Porcentaje.Value : 0; montoOperacion = decimal.Round(montoOperacion, 2, MidpointRounding.AwayFromZero); porcentaje = decimal.Round(porcentaje, 2, MidpointRounding.AwayFromZero); XElement x = new XElement("DetalleRetencion", new XElement("RifRetenido", f.RifCompania.ToString().Replace("-", "")), new XElement("NumeroFactura", factura.NumeroFactura), new XElement("NumeroControl", sNumeroControlDefinitivo), new XElement("FechaOperacion", factura.FechaRecepcion.ToString("dd/MM/yyyy").Replace("-", "/")), new XElement("CodigoConcepto", codigoConceptoRetencion_islr), // siempre nos aseguramos que el signo decimal en los montos sea '.' y no ',' new XElement("MontoOperacion", montoOperacion.ToString().Replace(",", ".")), new XElement("PorcentajeRetencion", porcentaje.ToString().Replace(",", ".")) ); xmldoc.Element("RelacionRetencionesISLR").Add(x); cantidadRetenciones++; } cantidadFacturas++; } String fileName = @"ISLR_retenido_" + sNombreCiaContab + ".xml"; String filePath = HttpContext.Current.Server.MapPath("~/Temp/" + fileName); // -------------------------------------------------------------------------------------------------- // si el usuario así lo indica, leemos retenciones desde la nómina de pago if (!LeerNomina_CheckBox.Checked) { // Saving to a file, you can also save to streams xmldoc.Save(filePath); GeneralMessage_Span.InnerHtml = "<br />" + "Ok, el archivo xml ha sido generado en forma satisfactoria. <br />" + "Se han leído " + cantidadFacturas.ToString() + " facturas, en base al criterio de selección que Ud. indicó. <br />" + "Se han agregado " + cantidadRetenciones.ToString() + " retenciones (registros) al archivo de retenciones. <br />" + "El nombre del archivo es: " + filePath + ".<br /><br />"; GeneralMessage_Span.Style["display"] = "block"; DownloadFile_LinkButton.Visible = true; FileName_HiddenField.Value = filePath; return; } // ----------------------------------------------------------------------------------------------- // lo primero que hacemos es intentar generar fechas de inicio y fin usando el período indicado int ano = Convert.ToInt32(PeriodoSeleccion_TextBox.Text.ToString().Substring(0, 4)); int mes = Convert.ToInt32(PeriodoSeleccion_TextBox.Text.ToString().Substring(4, 2)); if (ano <= 1990 || ano >= 2050) { ErrMessage_Span.InnerHtml = "El período indicado no está correctamente formado. <br /><br />" + "Recuerde que el período debe formarse de la siguiente manera: aaaamm; ejemplo: 201006."; ErrMessage_Span.Style["display"] = "block"; dbBancos = null; return; } if (mes <= 0 || mes >= 13) { ErrMessage_Span.InnerHtml = "El período indicado no está correctamente formado. <br /><br />" + "Recuerde que el período debe formarse de la siguiente manera: aaaamm; ejemplo: 201006."; ErrMessage_Span.Style["display"] = "block"; dbBancos = null; return; } // intentamos leer el código de retención para empleados de nómina // declaramos el EF context ... NominaEntities nominaCtx = new NominaEntities(); ContabSysNet_Web.ModelosDatos_EF.Nomina.ParametrosNomina parametrosNomina = (from c in nominaCtx.ParametrosNominas where c.Cia == ciaContab select c).FirstOrDefault(); if (parametrosNomina == null || string.IsNullOrEmpty(parametrosNomina.CodigoConceptoRetencionISLREmpleados)) { ErrMessage_Span.InnerHtml = "Aparentemente, no se ha definido un código de retención ISLR para empleados en la tabla Parámetros Nómina. <br /><br /> " + "Por favor abra la tabla mencionada y registre el código usado como concepto de retención para retención ISLR de empleados."; ErrMessage_Span.Style["display"] = "block"; dbBancos = null; return; } // rubro que corresponde al ISLR var rubroIslr = nominaCtx.tMaestraRubros.Select(r => new { r.Rubro, r.TipoRubro }).Where(r => r.TipoRubro == 8).FirstOrDefault(); if (rubroIslr == null) { ErrMessage_Span.InnerHtml = "No se ha definido el rubro ISLR en la maestra de rubros " + "(Catálogos --> Maestra de Rubros). <br /><br />" + "Ud. debe definir el rubro ISLR en la Maestra de Rubros."; ErrMessage_Span.Style["display"] = "block"; nominaCtx = null; return; } // leemos la nómina de pago del mes y seleccionamos los rubros que corresponden a la retención de ISLR // recuérdese que arriba validamos que existan rubros marcados como ISLR en la maestra; sin embargo, // puede no haber de éstos en la nómina de pago ... // además, leemos solo los empleados cuya propiedad EscribirArchivoXMLRetencionesISLR es true ... var queryNominaPago = from n in nominaCtx.tNominas where n.tNominaHeader.FechaNomina.Month == mes && n.tNominaHeader.FechaNomina.Year == ano && (n.tEmpleado.EscribirArchivoXMLRetencionesISLR != null && n.tEmpleado.EscribirArchivoXMLRetencionesISLR == true) && n.tNominaHeader.tGruposEmpleado.Cia == ciaContab && n.Rubro == rubroIslr.Rubro // maestraRubro.Rubro group n by n.Empleado into g select new { empleado = g.Key, fechaNomina = g.Max(m => m.tNominaHeader.FechaNomina), montoISLR = g.Sum(m => m.Monto), montoBase = g.Sum(m => m.MontoBase) }; int empleadosAgregadosISLRFile = 0; RegistroRetencionISLR registroRetencionISLR; List <RegistroRetencionISLR> registroRetencionISLR_List = new List <RegistroRetencionISLR>(); foreach (var n in queryNominaPago) { // leemos empleado ContabSysNet_Web.ModelosDatos_EF.Nomina.tEmpleado empleado = (from emp in nominaCtx.tEmpleados where emp.Empleado == n.empleado select emp).FirstOrDefault(); if (String.IsNullOrEmpty(empleado.Rif)) { ErrMessage_Span.InnerHtml = "Aunque se ha retenido ISLR al empleado " + empleado.Nombre + " en la nómina de pago, no se ha registrado su número de rif en la Maestra de Empleados. <br /><br />" + "Por favor abra la tabla mencionada y registre un número de rif para cada empleado que tenga retención de ISLR en la nómina de pago."; ErrMessage_Span.Style["display"] = "block"; dbBancos = null; return; } decimal islrPorc = 0; decimal montoBase = 0; decimal montoISLR = n.montoISLR; if (n.montoBase != null) { montoBase = n.montoBase.Value; } if (montoBase < 0) { // cómo la retención de islr en la nómina es una deducción, este monto viene negativo ... montoBase *= -1; } if (montoISLR < 0) { montoISLR *= -1; } if (montoBase != 0) { islrPorc = montoISLR * 100 / montoBase; } registroRetencionISLR = new RegistroRetencionISLR(); registroRetencionISLR.RifRetenido = empleado.Rif; registroRetencionISLR.NumeroFactura = "0"; registroRetencionISLR.NumeroControl = "NA"; registroRetencionISLR.FechaOperacion = n.fechaNomina; registroRetencionISLR.CodigoConcepto = parametrosNomina.CodigoConceptoRetencionISLREmpleados; // nos aseguramos que el monto tenga siempre 2 decimales decimal montoOperacion = decimal.Round(montoBase, 2, MidpointRounding.AwayFromZero); decimal porcentaje = decimal.Round(islrPorc, 2, MidpointRounding.AwayFromZero); // al convertir el monto a string siempre queda así: 1500.35 registroRetencionISLR.MontoOperacion = montoOperacion.ToString(); registroRetencionISLR.PorcentajeRetencion = porcentaje.ToString(); registroRetencionISLR_List.Add(registroRetencionISLR); empleadosAgregadosISLRFile++; } // finalmente, agregamos cada item en la lista como un nodo al xml file foreach (RegistroRetencionISLR r in registroRetencionISLR_List) { XElement x = new XElement("DetalleRetencion", new XElement("RifRetenido", r.RifRetenido.ToString().Replace("-", "")), new XElement("NumeroFactura", r.NumeroFactura), new XElement("NumeroControl", r.NumeroControl), new XElement("FechaOperacion", r.FechaOperacion.ToString("dd/MM/yyyy")), new XElement("CodigoConcepto", r.CodigoConcepto), new XElement("MontoOperacion", r.MontoOperacion), new XElement("PorcentajeRetencion", r.PorcentajeRetencion) ); xmldoc.Element("RelacionRetencionesISLR").Add(x); } // Saving to a file, you can also save to streams xmldoc.Save(filePath); GeneralMessage_Span.InnerHtml = "<br />" + "Ok, el archivo xml ha sido generado en forma satisfactoria. <br />" + "Se han leído " + cantidadFacturas.ToString() + " facturas, en base al criterio de selección que Ud. indicó. <br />" + "Se han agregado " + cantidadRetenciones.ToString() + " retenciones (registros) al archivo de retenciones. <br />" + "El nombre del archivo es: " + filePath + "<br /><br />" + "Además, se han agregado " + empleadosAgregadosISLRFile.ToString() + " retenciones (registros) desde la nómina de pago del mes."; GeneralMessage_Span.Style["display"] = "block"; DownloadFile_LinkButton.Visible = true; FileName_HiddenField.Value = filePath; }
protected void Ok_Button_Click(object sender, EventArgs e) { // ahora recorremos los movimientos bancarios seleccionados y construimos un txt file con // los datos necesarios para que el usuario inicie un proceso de mail merge usando Word ... if (Session["FiltroForma"] == null) { this.CustomValidator1.IsValid = false; this.CustomValidator1.ErrorMessage = "No se ha podido acceder a los registros necesarios para ejecutar este proceso.<br />" + "Probablemente, Ud. no ha definido y aplicado un filtro aún que permita a este proceso leer y procesar registros."; ValidationSummary1.ShowSummary = true; return; } StringBuilder sb; // Create the CSV file on the server String fileName = @"OrdenesPago_" + User.Identity.Name + ".txt"; String filePath = HttpContext.Current.Server.MapPath("~/Temp/" + fileName); StreamWriter sw = new StreamWriter(filePath, false); // First we will write the headers. sb = new StringBuilder(); sb.Append("\"CiaContabNombre\""); sb.Append("\t"); sb.Append("\"Fecha\""); sb.Append("\t"); sb.Append("\"Beneficiario\""); sb.Append("\t"); sb.Append("\"Moneda\""); sb.Append("\t"); sb.Append("\"Monto\""); sb.Append("\t"); sb.Append("\"MonedaYMonto\""); sb.Append("\t"); sb.Append("\"Concepto\""); sb.Append("\t"); sb.Append("\"Soporte1\""); sb.Append("\t"); sb.Append("\"Soporte2\""); sb.Append("\t"); sb.Append("\"Soporte3\""); sb.Append("\t"); sb.Append("\"Soporte4\""); sb.Append("\t"); sb.Append("\"Soporte5\""); sb.Append("\t"); sb.Append("\"RealizadoPor\""); sb.Append("\t"); sb.Append("\"CargoRealizadoPor\""); sb.Append("\t"); sb.Append("\"RevisadoPor\""); sb.Append("\t"); sb.Append("\"CargoRevisadoPor\""); sb.Append("\t"); sb.Append("\"AutorizadoPor1\""); sb.Append("\t"); sb.Append("\"CargoAutorizadoPor1\""); sb.Append("\t"); sb.Append("\"AutorizadoPor2\""); sb.Append("\t"); sb.Append("\"CargoAutorizadoPor2\""); sw.Write(sb.ToString()); sw.Write(sw.NewLine); // Now write all the rows. BancosEntities bancosContext = new BancosEntities(); var query = bancosContext.MovimientosBancarios. Include("Chequera"). Include("Chequera.CuentasBancaria"). Include("Chequera.CuentasBancaria.Compania"). Include("Chequera.CuentasBancaria.Moneda1"). Include("Chequera.CuentasBancaria.Agencia1"). Include("Chequera.CuentasBancaria.Agencia1.Banco1"). Where(Session["FiltroForma"].ToString()); int cantidadRegistrosLeidos = 0; foreach (MovimientosBancario m in query) { //sw.Write(","); //sw.Write(sw.NewLine); sb = new StringBuilder(); sb.Append("\"" + m.Chequera.CuentasBancaria.Compania.Nombre + "\""); sb.Append("\t"); sb.Append("\"" + m.Fecha.ToString("dd-MMM-yyyy") + "\""); sb.Append("\t"); sb.Append("\"" + m.Beneficiario + "\""); sb.Append("\t"); sb.Append("\"" + m.Chequera.CuentasBancaria.Moneda1.Simbolo + "\""); sb.Append("\t"); sb.Append("\"" + Math.Abs(m.Monto).ToString("N2") + "\""); sb.Append("\t"); sb.Append("\"" + m.Chequera.CuentasBancaria.Moneda1.Simbolo + " " + Math.Abs(m.Monto).ToString("N2") + "\""); sb.Append("\t"); sb.Append("\"" + m.Concepto + "\""); sb.Append("\t"); // escribimos hasta 5 soportes int i = 1; foreach (ListItem item in this.Soportes_CheckBoxList.Items) { if (item.Selected) { sb.Append("\"" + item.Text + "\""); sb.Append("\t"); i++; } if (i == 6) { break; } } for (int j = i; j <= 5; j++) { // si el usuario menos de 5 soportes, agregamos el resto en blanco ... sb.Append("\t"); } // declaramos un context para las tablas de nómina, para leer el cargo de cada empleado indicado ... NominaEntities nominaContext = new NominaEntities(); // realizado por if (this.RealizadoPor_DropDownList.SelectedValue != "Indefinido") { sb.Append("\"" + this.RealizadoPor_DropDownList.SelectedItem.Text + "\""); sb.Append("\t"); int empleadoID = Convert.ToInt32(this.RealizadoPor_DropDownList.SelectedValue); string nombreCargo = (from c in nominaContext.tEmpleados where c.Empleado == empleadoID select c).FirstOrDefault().tCargo.Descripcion; sb.Append("\"" + nombreCargo + "\""); sb.Append("\t"); } else { sb.Append("\t"); sb.Append("\t"); } // revisado por if (this.RevisadoPor_DropDownList.SelectedValue != "Indefinido") { sb.Append("\"" + this.RevisadoPor_DropDownList.SelectedItem.Text + "\""); sb.Append("\t"); int empleadoID = Convert.ToInt32(this.RevisadoPor_DropDownList.SelectedValue); string nombreCargo = (from c in nominaContext.tEmpleados where c.Empleado == empleadoID select c).FirstOrDefault().tCargo.Descripcion; sb.Append("\"" + nombreCargo + "\""); sb.Append("\t"); } else { sb.Append("\t"); sb.Append("\t"); } // autorizado por (1) if (this.AutorizadoPor1_DropDownList.SelectedValue != "Indefinido") { sb.Append("\"" + this.AutorizadoPor1_DropDownList.SelectedItem.Text + "\""); sb.Append("\t"); int empleadoID = Convert.ToInt32(this.AutorizadoPor1_DropDownList.SelectedValue); string nombreCargo = (from c in nominaContext.tEmpleados where c.Empleado == empleadoID select c).FirstOrDefault().tCargo.Descripcion; sb.Append("\"" + nombreCargo + "\""); sb.Append("\t"); } else { sb.Append("\t"); sb.Append("\t"); } // autorizado por (2) if (this.AutorizadoPor2_DropDownList.SelectedValue != "Indefinido") { sb.Append("\"" + this.AutorizadoPor2_DropDownList.SelectedItem.Text + "\""); sb.Append("\t"); int empleadoID = Convert.ToInt32(this.AutorizadoPor2_DropDownList.SelectedValue); string nombreCargo = (from c in nominaContext.tEmpleados where c.Empleado == empleadoID select c).FirstOrDefault().tCargo.Descripcion; sb.Append("\"" + nombreCargo + "\""); } else { sb.Append("\t"); //sb.Append("\t"); } sw.Write(sb.ToString()); sw.Write(sw.NewLine); cantidadRegistrosLeidos++; } // finally close the file sw.Close(); if (cantidadRegistrosLeidos == 0) { this.CustomValidator1.IsValid = false; this.CustomValidator1.ErrorMessage = "No se ha podido acceder a los registros necesarios para ejecutar este proceso.<br />" + "Probablemente, Ud. no ha definido y aplicado un filtro aún que permita a este proceso leer y procesar registros."; ValidationSummary1.ShowSummary = true; return; } string message = "Ok, el archivo requerido ha sido generado en forma satisfactoria. <br />" + "La cantidad de lineas que se han grabado al archivo es: " + cantidadRegistrosLeidos.ToString() + ". <br />" + "El nombre del archivo (en el servidor) es: " + filePath; Message_Span.InnerHtml = message; Message_Span.Style["display"] = "block"; DownloadFile_LinkButton.Visible = true; this.FileName_HiddenField.Value = filePath; // ------------------------------------------------------------------------------------------------------------------------- // para guardar el contenido de los controles de la página para recuperar el state cuando se abra la proxima vez KeepPageState MyKeepPageState = new KeepPageState(Membership.GetUser().UserName, this.GetType().Name.ToString()); MyKeepPageState.SavePageStateInFile(this.Controls); MyKeepPageState = null; // ------------------------------------------------------------------------------------------------------------------------- }