/// <summary> /// Según FONADE clásico, el archivo "", se usa este método para determinar si el proyecto está /// incluido en un acta de comité evaluador. /// </summary> /// <param name="codProyecto">Código del proyecto.</param> /// <param name="sCodConvocatoria">Código de la convocatoria.</param> private bool EstaEnActa(String codProyecto, String sCodConvocatoria) { //Inicializar variables. String query = ""; Datos.Consultas consultas = new Datos.Consultas(); try { //Ejecutar consulta. query = " SELECT COUNT(codproyecto) AS Conteo from evaluacionactaproyecto, evaluacionacta " + " WHERE id_acta = codacta AND codproyecto = " + codProyecto + " AND codconvocatoria = " + sCodConvocatoria; //Asignar resultado de la consulta a variable DataTable. var tabla_sql = consultas.ObtenerDataTable(query, "text"); //Obtener el valor usable en la siguiente condición. int conteo = Convert.ToInt32(tabla_sql.Rows[0]["Conteo"].ToString()); //Si es mayor a cero... if (conteo > 0) { return(true); } else { return(false); } } catch { return(false); } }
/// <summary> /// Versión del método "fnMiembroProyecto" localizado en "Base_Page". /// </summary> /// <param name="codProyecto">Código del proyecto.</param> /// <param name="IdContacto">Id del contacto.</param> /// <returns>Booleano que indica si es o no un miembro...</returns> private bool fnMiembro(String codProyecto, String IdContacto) { //Inicializar variables. String query = ""; Datos.Consultas consultas = new Datos.Consultas(); try { //Ejecutar consulta. query = " SELECT COUNT(Id_ProyectoContacto) AS Conteo " + " FROM ProyectoContacto " + " WHERE CodProyecto = " + codProyecto + " AND CodContacto = " + IdContacto + " AND Inactivo = 0 AND FechaInicio<GETDATE() AND FechaFin = NULL"; //Asignar resultado de la consulta a variable DataTable. var tabla_sql = consultas.ObtenerDataTable(query, "text"); int conteo = Convert.ToInt32(tabla_sql.Rows[0]["Conteo"].ToString()); if (conteo > 0) { return(false); } else { return(true); } } catch { return(false); } }
/// <summary> /// 09/06/2014. /// Cargar el valor "numAnios" en la variable global y de sesión llamadas "int_txtTiempoProyeccion". /// </summary> /// <returns>int_txtTiempoProyeccion / numAnios</returns> private Int32 Cargar_numAnios() { //Inicializar variables. Int32 int_txtTiempoProyeccion = 0; try { Datos.Consultas consultas = new Datos.Consultas(); txtSQL = " SELECT TiempoProyeccion FROM ProyectoMercadoProyeccionVentas WHERE codProyecto = " + CodigoProyecto; var dt = consultas.ObtenerDataTable(txtSQL, "text"); if (dt.Rows.Count > 0) { int_txtTiempoProyeccion = Int32.Parse(dt.Rows[0]["TiempoProyeccion"].ToString()); dt = null; txtSQL = null; HttpContext.Current.Session["int_txtTiempoProyeccion"] = int_txtTiempoProyeccion; txtTiempoProyeccion = int_txtTiempoProyeccion; return(int_txtTiempoProyeccion); } else { dt = null; txtSQL = null; HttpContext.Current.Session["int_txtTiempoProyeccion"] = int_txtTiempoProyeccion; txtTiempoProyeccion = int_txtTiempoProyeccion; return(int_txtTiempoProyeccion); } } catch { HttpContext.Current.Session["int_txtTiempoProyeccion"] = int_txtTiempoProyeccion; txtTiempoProyeccion = int_txtTiempoProyeccion; return(int_txtTiempoProyeccion); } }
/// <summary> /// Obtener la última actualización que se ha hecho en la página "tab". /// </summary> /// <param name="tab">Tab a invocar.</param> /// <param name="codProyecto">Código del proyecto.</param> /// <param name="codConvocatoria">Código de la convocatoria.</param> /// <param name="sCodGrupo">Código del grupo del usuario.</param> /// <param name="Id_User">Id del usuario en sesión.</param> /// <returns>String con resultados de la consulta SQL o consulta LINQ.</returns> public string ObtenerUltimaActualizacion(String tab = null, String codProyecto = null, String codConvocatoria = null, String sCodGrupo = null, String Id_User = null) { //Inicializar variables. Datos.Consultas consultas = new Datos.Consultas(); String resultado = ""; DateTime fecha = DateTime.Now; String fechaFomateda = ""; String checked_string = ""; String disabled = ""; bool EsMiembro = false; bool EsActa = false; //Si el usuario que ha iniciado sesión es "Gerente Evaluador", NO puede chequear el CheckBox. if (sCodGrupo == Datos.Constantes.CONST_GerenteEvaluador.ToString()) { disabled = "disabled"; } //Obtener el valor "EsMiembro". EsMiembro = fnMiembro(codProyecto, Id_User); //Obtener si "está en acta"... EsActa = EstaEnActa(codProyecto, codConvocatoria); //Consultar la información concerniente a la última actualización. String sqlConsulta = " SELECT Nombres + ' ' + Apellidos AS nombre, FechaModificacion, Realizado " + " FROM TabEvaluacionProyecto, Contacto " + " WHERE Id_Contacto = CodContacto AND CodTabEvaluacion = " + sTab + " AND CodProyecto = " + sCodProyecto + " AND CodConvocatoria = " + sCodConvocatoria; //Asignar resultado de la consulta a variable DataTable. var tabla_sql = consultas.ObtenerDataTable(sqlConsulta, "text"); //Convertir fecha. try { fecha = Convert.ToDateTime(tabla_sql.Rows[0]["FechaModificacion"].ToString()); } catch { return("Error al obtener la fecha de actualización."); /*Error al obtener la fecha.*/ } //Obtener el nombre del mes (las primeras tres letras). string sMes = fecha.ToString("MMM", System.Globalization.CultureInfo.CreateSpecificCulture("es-CO")); //Obtener la hora en minúscula. string hora = fecha.ToString("hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture).ToLowerInvariant(); //Formatear la fecha según manejo de FONADE clásico. "Ej: Nov 19 de 2013 07:36:26 p.m.". fechaFomateda = UppercaseFirst(sMes) + " " + fecha.Day + " de " + fecha.Year + " " + hora + "."; //Si el valor "Realizado es 1 o TRUE, se establece el string "checked_string" vacío (lo cual indica que //es chequeable el CheckBox), de lo contrario, el string "checked_string" no tendrá valor, estará vacío. if (tabla_sql.Rows[0]["Realizado"].ToString() == "True" || tabla_sql.Rows[0]["Realizado"].ToString() == "1") { checked_string = "checked"; } //Establecer si el campo está o no inhabilitado. if (!(EsMiembro && sCodGrupo == Datos.Constantes.CONST_RolCoordinadorEvaluador.ToString()) || tabla_sql.Rows[0]["nombre"].ToString().Trim() == "" || EsActa) { disabled = "disabled"; } //Establecer string con código HTML y valores depurados. resultado = " <div> " + " <div class=\"marcar-realizado\"> " + " <div style=\"display: inline-block\"> " + " <span>ULTIMA ACTUALIZACIÓN:</span> " + " <span>" + tabla_sql.Rows[0]["nombre"].ToString().ToUpperInvariant() + " </span> " + " <span>" + fechaFomateda + "</span> " + " </div> " + " <div style=\"display: inline-block\" class=\"menu\"> " + " <span>MARCAR COMO REALIZADO:</span> " + " <input type=\"checkbox\" " + checked_string + " " + disabled + "><!----> " + " </div> " + " </div> " + " <br/> " + " </div>"; return(resultado); }
/// 09/06/2014. /// Generar la primera tabla llamada "Tabla de costos de producción en pesos(incluido IVA)". /// </summary> private void GenerarTablaDeCostosDeProduccion() { //Inicilizar variables. String strSelect = ""; DataTable tabla_costosProduccion = new DataTable(); TableHeaderCell celdaEncabezado = new TableHeaderCell(); TableHeaderCell celdaDatos = new TableHeaderCell(); TableCell celdaEspecial = new TableCell(); TableHeaderRow fila1 = new TableHeaderRow(); TableRow fila = new TableRow(); TableCell celdaDatosda = new TableCell(); object[] numTotPesos = new object[12]; Int32 incr = 1; Datos.Consultas consultas = new Datos.Consultas(); int aux = 0; try { aux = Cargar_numAnios(); //Generar SQL que será concatenado a la consulta principal. for (int i = 1; i < aux + 1; i++) { strSelect = strSelect + ", sum(case when Ano=" + i.ToString() + " then V.unidades*cantidad*((100+desperdicio)/100.0)*(Precio*((100+IVA)/100.0)) else 0 end) AS [Año " + i.ToString() + "] "; } } catch (Exception) { throw; } try { if (aux > 0) { //Consulta completa "con la concatenación de la variable (strSelect) generada anteriormente". txtSQL = " SELECT T.id_TipoInsumo, T.nomTipoInsumo AS [Tipo de Insumo] " + strSelect + " FROM TipoInsumo T, ProyectoInsumo I, ProyectoProductoInsumo PI," + " ProyectoProductoUnidadesVentas V, ProyectoInsumoPrecio P" + " WHERE I.codTipoInsumo = T.id_TipoInsumo AND PI.codInsumo = I.id_Insumo " + " AND V.codProducto = PI.codProducto " + " AND P.codInsumo = I.id_Insumo AND V.codProducto = PI.codProducto " + " AND P.periodo = V.ano AND Unidades <> 0 AND I.codProyecto =" + CodigoProyecto + " GROUP BY T.id_TipoInsumo, T.nomTipoInsumo ORDER BY nomTipoInsumo"; //Asignar resultados a la variable DataTable. tabla_costosProduccion = consultas.ObtenerDataTable(txtSQL, "text"); } #region Generar fila principal. fila1 = new TableHeaderRow(); fila1.Attributes.Add("bgcolor", "#3D5A87"); celdaEncabezado = new TableHeaderCell(); celdaEncabezado.Attributes.Add("colspan", "6"); celdaEncabezado.Attributes.Add("color", "white"); celdaEncabezado.Attributes.Add("align", "center"); celdaEncabezado.Style.Add("text-align", "center"); celdaEncabezado.Text = "Tabla de costos de producción en pesos (incluido IVA)"; fila1.Cells.Add(celdaEncabezado); Tabla_Costos.Rows.Add(fila1); #endregion #region Generar segunda fila con los encabezados correctos. fila = new TableHeaderRow(); fila.Attributes.Add("bgcolor", "#3D5A87"); foreach (DataColumn item_string in tabla_costosProduccion.Columns) { //Inicializar la celda del encabezado. celdaEncabezado = new TableHeaderCell(); //Si es "id_TipoInsumo" no muestra el título. if (item_string.ColumnName != "id_TipoInsumo") { //Añadir atributo adicional si es año. if (item_string.ColumnName.Contains("Año")) { celdaEncabezado.Attributes.Add("align", "center"); celdaEncabezado.Style.Add("text-align", "center"); } //Continuar con la generación de la celda. celdaEncabezado.Text = item_string.ColumnName; fila.Cells.Add(celdaEncabezado); } } Tabla_Costos.Rows.Add(fila); #endregion } catch (Exception) { throw; } try { #region Generar siguientes dos filas "Insumos" y "Materia Prima" y sus datos. foreach (DataRow row_tabla in tabla_costosProduccion.Rows) { //Inicializar fila. fila = new TableRow(); #region Inicializar celda "Insumo" ó "Materia Prima". celdaEspecial = new TableCell(); celdaEspecial.Text = row_tabla["Tipo de Insumo"].ToString(); fila.Cells.Add(celdaEspecial); #endregion #region Generar las celdas con valores de "Años". for (int i = 1; i < txtTiempoProyeccion + 1; i++) { celdaEspecial = new TableCell(); celdaEspecial.Attributes.Add("align", "right"); celdaEspecial.Text = Double.Parse(row_tabla["Año " + i.ToString()].ToString()).ToString("$ 0,0.00", CultureInfo.InvariantCulture); fila.Cells.Add(celdaEspecial); } #endregion //Se añade la fila a la tabla. Tabla_Costos.Rows.Add(fila); } #endregion } catch (Exception) { throw; } try { #region Obtener los totales "para luego mostrarlos en la grilla. //Fuente: http://stackoverflow.com/questions/5892993/how-to-calculate-the-sum-of-the-datatable-column-in-asp-net if (tabla_costosProduccion.Rows.Count > 0) { for (int i = 1; i < txtTiempoProyeccion + 1; i++) { double valn = Double.Parse(tabla_costosProduccion.Compute("Sum([Año " + i.ToString() + "])", "").ToString()); //var valn = tabla_costosProduccion.Compute("Sum([Año " + i.ToString() + "])", ""); numTotPesos[i] = valn; } #endregion #region Generar tabla de totales. //Inicializar fila. fila = new TableRow(); for (int i = 0; i < tabla_costosProduccion.Columns.Count; i++) { if (i == 0) { //Inicializar nueva celda. celdaEspecial = new TableCell(); celdaEspecial.Text = "<b>Totales</b>"; fila.Cells.Add(celdaEspecial); } else { if (incr <= txtTiempoProyeccion) { //Generar lista de totales. celdaEspecial = new TableCell(); celdaEspecial.Attributes.Add("align", "right"); celdaEspecial.Text = "<b>" + Convert.ToDouble(numTotPesos[incr].ToString()).ToString("$ 0,0.00", CultureInfo.InvariantCulture); fila.Cells.Add(celdaEspecial); incr++; } } } } //Se devuelve la variable a su estado original. incr = 1; //Se añade la fila a la tabla. Tabla_Costos.Rows.Add(fila); #endregion } catch (Exception) { throw; } #region Destruir variables. Tabla_Costos = new Table(); strSelect = ""; tabla_costosProduccion = null; celdaEncabezado = null; celdaDatos = null; celdaEspecial = null; fila1 = null; fila = null; celdaDatosda = null; numTotPesos = null; incr = 0; #endregion }
/// <summary> /// 10/06/2014. /// Generar la tercera tabla llamada "Proyección de Compras (Pesos)". /// </summary> private void GenerarTablaProyeccionCompras_Pesos() { //Inicializar variables. String strSelect = ""; DataTable rsTipo = new DataTable(); TableHeaderCell celdaEncabezado = new TableHeaderCell(); TableHeaderCell celdaDatos = new TableHeaderCell(); TableCell celdaEspecial = new TableCell(); TableHeaderRow fila1 = new TableHeaderRow(); TableRow fila = new TableRow(); TableCell celdaDatosda = new TableCell(); Double[] numTotPesos = new Double[12]; Double[] numIVA = new Double[12]; List <double> ListaYears = new List <double>(); List <double> ListaIVAs = new List <double>(); String[] arr_totales = { " ", "Total", "IVA", "Total mas IVA" }; Datos.Consultas consultas = new Datos.Consultas(); try { #region Generar fila principal. fila1 = new TableHeaderRow(); fila1.Attributes.Add("bgcolor", "#3D5A87"); celdaEncabezado = new TableHeaderCell(); celdaEncabezado.Attributes.Add("colspan", "6"); celdaEncabezado.Attributes.Add("color", "white"); celdaEncabezado.Attributes.Add("align", "center"); celdaEncabezado.Style.Add("text-align", "center"); celdaEncabezado.Text = "Proyección de Compras (Pesos)"; fila1.Cells.Add(celdaEncabezado); Tabla_Proyecciones_2.Rows.Add(fila1); #endregion #region Generar encabezados y string SQL para ser usado en la siguiente consulta. //Instanciar la fila. fila = new TableHeaderRow(); fila.Attributes.Add("bgcolor", "#3D5A87"); #region Añadir la celda "Tipos de Insumo". //Inicializar la celda. celdaEncabezado = new TableHeaderCell(); //Agregar valores a la celda. celdaEncabezado.Text = "Tipos de Insumo"; //Añadir la celda a la fila. fila.Cells.Add(celdaEncabezado); #endregion //Generar encabezados de "Años" y string SQL que será concatenado a la consulta principal. for (int i = 1; i < Cargar_numAnios() + 1; i++) { //Inicializar la celda del encabezado. celdaEncabezado = new TableHeaderCell(); //Agregar valores a la celda. celdaEncabezado.Attributes.Add("align", "center"); celdaEncabezado.Style.Add("text-align", "center"); celdaEncabezado.Text = "Año " + i.ToString(); //Añadir la celda a la fila. fila.Cells.Add(celdaEncabezado); //Generar SQL en variable "strSelect". strSelect = strSelect + " , sum(case when Ano=" + i.ToString() + " then V.unidades*cantidad*((100+desperdicio)/100.0)*precio else 0 end) AS [Año " + i.ToString() + "] " + " , sum(case when Ano=" + i.ToString() + " then V.unidades*cantidad*((100+desperdicio)/100.0)*precio*IVA/100.0 else 0 end) IVA" + i.ToString(); } //Añadir la fila a la tabla. Tabla_Proyecciones_2.Rows.Add(fila); #endregion #region Consultar los valores por "Insumo" o "Materia Prima" y generar las filas. int aux = Cargar_numAnios(); if (aux > 0) { //Consultar los tipos de insumos a generar en la tabla. txtSQL = " SELECT T.id_TipoInsumo, T.nomTipoInsumo AS [Tipo de Insumo] " + strSelect + " FROM TipoInsumo T, ProyectoInsumo I, ProyectoProductoInsumo PI, ProyectoProductoUnidadesVentas V, " + " ProyectoInsumoPrecio P " + " WHERE I.codTipoInsumo = T.id_TipoInsumo AND PI.codInsumo = I.id_Insumo " + " AND V.codProducto = PI.codProducto AND P.codInsumo = I.id_Insumo AND V.codProducto = PI.codProducto " + " AND P.periodo=V.ano AND Unidades <> 0 AND I.codProyecto = " + CodigoProyecto + " GROUP BY T.id_TipoInsumo, T.nomTipoInsumo ORDER BY nomTipoInsumo "; //Asignar resultados a la variable DataTable. rsTipo = consultas.ObtenerDataTable(txtSQL, "text"); } foreach (DataRow row in rsTipo.Rows) { #region Generar la fila única de "Tipo de Insumo". fila = new TableRow(); celdaEspecial = new TableCell(); celdaEspecial.Attributes.Add("colspan", "6"); celdaEspecial.Text = "<strong >" + row["Tipo de Insumo"].ToString() + "</strong>"; fila.Cells.Add(celdaEspecial); //Agregar fila. Tabla_Proyecciones_2.Rows.Add(fila); #endregion #region Consulta SQL y resultados añadidos a la tabla temporal "dt". txtSQL = " SELECT I.nomInsumo " + strSelect + " FROM ProyectoInsumo I, ProyectoProductoInsumo PI, ProyectoProductoUnidadesVentas V, " + " ProyectoInsumoPrecio P " + " WHERE PI.codInsumo = I.id_Insumo AND V.codProducto=PI.codProducto " + " AND P.codInsumo = I.id_Insumo AND V.codProducto = PI.codProducto AND P.periodo = V.ano " + " AND Unidades <> 0 AND I.codProyecto = " + CodigoProyecto + " AND I.codTipoInsumo=" + row["id_tipoInsumo"].ToString() + " GROUP BY I.nomInsumo "; var dt = consultas.ObtenerDataTable(txtSQL, "text"); #endregion #region Por cada fila en "dt", generará los resultados en nueva fila con nuevas celdas. foreach (DataRow row_dt in dt.Rows) { //Inicializar nueva fila. fila = new TableRow(); //Inicializar celda. celdaDatosda = new TableCell(); //Generar la celda del nombre. celdaDatosda.Text = row_dt["nomInsumo"].ToString(); fila.Cells.Add(celdaDatosda); //Recorrer los años para generar los valores de las columnas "Años" y //obtener los valores de "IVA's" en la lista de doubles, "así como los valores de años". for (int i = 1; i < txtTiempoProyeccion + 1; i++) { //Generar las siguientes celdas. celdaEspecial = new TableCell(); celdaEspecial.Attributes.Add("align", "right"); celdaEspecial.Text = Double.Parse(row_dt["Año " + i.ToString()].ToString()).ToString("$ 0,0.00", CultureInfo.InvariantCulture); numTotPesos[i] = numTotPesos[i] + Double.Parse(row_dt["Año " + i.ToString()].ToString()); numIVA[i] = numIVA[i] + Double.Parse(row_dt["IVA" + i.ToString()].ToString()); fila.Cells.Add(celdaEspecial); } //Añadir la fila generada con las celdas a la tabla. Tabla_Proyecciones_2.Rows.Add(fila); } //Destruir variable dt = null; #endregion } #endregion #region Generar filas de totales. if (aux > 0) { //Recorrer la variable "arr_totates" que contiene los títulos pre-definidos. for (int i = 0; i < arr_totales.Count(); i++) { #region Generar la fila única de acuerdo al valor almacenado en el arreglo "arr_totales". #region Generar la primera celda de la fila. fila = new TableRow(); celdaEspecial = new TableCell(); celdaEspecial.Text = "<strong>" + arr_totales[i] + "</strong>"; fila.Cells.Add(celdaEspecial); #endregion #region Establecer iteración de datos. if (i == 1) { #region Iterar la variable "numTotPesos" = Años. for (int j = 1; j < txtTiempoProyeccion + 1; j++) { celdaEspecial = new TableCell(); celdaEspecial.Attributes.Add("align", "right"); celdaEspecial.Text = "<strong>" + numTotPesos[j].ToString("$ 0,0.00", CultureInfo.InvariantCulture) + "</strong>"; fila.Cells.Add(celdaEspecial); } #endregion } if (i == 2) { #region Iterar la variable "numIVA" = IVA's. for (int j = 1; j < txtTiempoProyeccion + 1; j++) { celdaEspecial = new TableCell(); celdaEspecial.Attributes.Add("align", "right"); celdaEspecial.Text = "<strong>" + numIVA[j].ToString("$ 0,0.00", CultureInfo.InvariantCulture) + "</strong>"; fila.Cells.Add(celdaEspecial); } #endregion } if (i == 3) { #region Iterar para sumar los valores de las variables "numTotPesos" y "numIVA". for (int j = 1; j < txtTiempoProyeccion + 1; j++) { celdaEspecial = new TableCell(); celdaEspecial.Attributes.Add("align", "right"); celdaEspecial.Text = "<strong>" + (numIVA[j] + numTotPesos[j]).ToString("$ 0,0.00", CultureInfo.InvariantCulture) + "</strong>"; fila.Cells.Add(celdaEspecial); } #endregion } #endregion //Añadir la celda generada a la fila. fila.Cells.Add(celdaEspecial); //Agregar fila a la tabla. Tabla_Proyecciones_2.Rows.Add(fila); #endregion } } #endregion } catch (Exception) { throw; } #region Destruir variables. Tabla_Proyecciones_2 = null; strSelect = null; rsTipo = null; celdaEncabezado = null; celdaDatos = null; celdaEspecial = null; fila1 = null; fila = null; celdaDatosda = null; numTotPesos = null; numIVA = null; ListaYears = null; ListaIVAs = null; arr_totales = null; #endregion }
/// <summary> /// 10/06/2014. /// Generar la segunda tabla llamada "Proyección de Compras (Unidades)". /// </summary> private void GenerarTablaProyeccionCompras_Unidades() { //Inicializar variables. String strSelect = ""; DataTable rsTipo = new DataTable(); TableHeaderCell celdaEncabezado = new TableHeaderCell(); TableHeaderCell celdaDatos = new TableHeaderCell(); TableCell celdaEspecial = new TableCell(); TableHeaderRow fila1 = new TableHeaderRow(); TableRow fila = new TableRow(); TableCell celdaDatosda = new TableCell(); List <double> numTotPesos = new List <double>(); List <double> Rows1 = new List <double>(); List <double> Rows2 = new List <double>(); List <double> RowsResults = new List <double>(); Datos.Consultas consultas = new Datos.Consultas(); int aux = 0; try { aux = Cargar_numAnios(); #region Generar fila principal. fila1 = new TableHeaderRow(); fila1.Attributes.Add("bgcolor", "#3D5A87"); celdaEncabezado = new TableHeaderCell(); celdaEncabezado.Attributes.Add("colspan", "6"); celdaEncabezado.Attributes.Add("color", "white"); celdaEncabezado.Attributes.Add("align", "center"); celdaEncabezado.Style.Add("text-align", "center"); celdaEncabezado.Text = "Proyección de Compras (Unidades)"; fila1.Cells.Add(celdaEncabezado); Tabla_Proyecciones_1.Rows.Add(fila1); #endregion #region Consulta con la información inicial de los encabezados. if (aux > 0) { //Generar SQL que será concatenado a la consulta principal. for (int i = 1; i < aux + 1; i++) { strSelect = strSelect + ", SUM(case when ano=" + i.ToString() + " then V.Unidades*PI.Cantidad*(1+(desperdicio/100.0)) else 0 end) AS [Año " + i.ToString() + "] "; } //Consultar los tipos de insumos a generar en la tabla. txtSQL = " SELECT T.id_TipoInsumo, T.nomTipoInsumo AS [Tipo de Insumo] " + strSelect + " FROM TipoInsumo T, ProyectoInsumo I, ProyectoProductoInsumo PI, ProyectoProductoUnidadesVentas V, " + " ProyectoInsumoPrecio P " + " WHERE I.codTipoInsumo = T.id_TipoInsumo AND PI.codInsumo = I.id_Insumo " + " AND V.codProducto = PI.codProducto AND P.codInsumo = I.id_Insumo AND V.codProducto = PI.codProducto " + " AND P.periodo=V.ano AND Unidades <> 0 AND I.codProyecto = " + CodigoProyecto + " GROUP BY T.id_TipoInsumo, T.nomTipoInsumo ORDER BY nomTipoInsumo "; //Asignar resultados a la variable DataTable. rsTipo = consultas.ObtenerDataTable(txtSQL, "text"); } #endregion #region Generar segunda fila con los encabezados correctos. fila = new TableHeaderRow(); fila.Attributes.Add("bgcolor", "#3D5A87"); foreach (DataColumn item_string in rsTipo.Columns) { //Inicializar la celda del encabezado. celdaEncabezado = new TableHeaderCell(); //Si es "id_TipoInsumo" no muestra el título. if (item_string.ColumnName != "id_TipoInsumo") { //Añadir atributo adicional si es año. if (item_string.ColumnName.Contains("Año")) { celdaEncabezado.Attributes.Add("align", "center"); celdaEncabezado.Style.Add("text-align", "center"); } //Continuar con la generación de la celda. celdaEncabezado.Text = item_string.ColumnName; fila.Cells.Add(celdaEncabezado); } } Tabla_Proyecciones_1.Rows.Add(fila); #endregion //Recorrer la tabla de la consulta principal para generar la información. foreach (DataRow row_rsTipo in rsTipo.Rows) { #region Region 1. "Contiene la información de las proyecciones de compras en unidades". txtSQL = " SELECT I.nomInsumo AS [Tipo de Insumo] " + strSelect + " FROM ProyectoInsumo I, ProyectoProductoInsumo PI, ProyectoProductoUnidadesVentas V " + " WHERE PI.codInsumo = I.id_insumo AND V.codProducto = PI.codProducto " + " AND I.codProyecto = " + CodigoProyecto + " AND codTipoInsumo = " + row_rsTipo.ItemArray[0].ToString() + " GROUP BY I.nomInsumo " + " HAVING Sum(V.Unidades) > 0 "; var dt = consultas.ObtenerDataTable(txtSQL, "text"); #endregion #region Generar fila única "Insumos" o "Materia Prima". //Inicializar la nueva fila. fila = new TableRow(); //Inicializar nueva celda. celdaEspecial = new TableCell(); celdaEspecial.Attributes.Add("colspan", "6"); celdaEspecial.Text = "<strong>" + row_rsTipo["Tipo de Insumo"].ToString() + "</strong>"; //Añadir la celda a la fila de datos obtenidos. fila.Cells.Add(celdaEspecial); Tabla_Proyecciones_1.Rows.Add(fila); #endregion #region Generar filas de acuerdo a la hecha en el region llamado "Region 1". foreach (DataRow row_dt in dt.Rows) { //Inicializar fila. fila = new TableRow(); for (int i = 0; i < row_rsTipo.ItemArray.Count() - 1; i++) { //Inicializar la celda. celdaEspecial = new TableCell(); //Si la posición es igual a cero "la cual contiene el nombre de la materia prima, //ésta se agrega directamente", de lo contrario, sele añade la //propiedad de alineación del texto, se formatea el dato y se añade a la //fila. if (i == 0) { celdaEspecial.Text = row_dt.ItemArray[i].ToString(); } else { celdaEspecial.Attributes.Add("align", "right"); celdaEspecial.Text = Double.Parse(row_dt.ItemArray[i].ToString()).ToString("$ 0,0.00", CultureInfo.InvariantCulture); } //Añadir la celda generada a la fila. fila.Cells.Add(celdaEspecial); } //Agregar la fila generada a la tabla. Tabla_Proyecciones_1.Rows.Add(fila); } dt = null; #endregion } } catch (Exception) { throw; } #region Destruir variables. Tabla_Proyecciones_1 = new Table(); strSelect = ""; rsTipo = null; celdaEncabezado = null; celdaDatos = null; celdaEspecial = null; fila1 = null; fila = null; celdaDatosda = null; numTotPesos = new List <double>(); Rows1 = new List <double>(); Rows2 = new List <double>(); RowsResults = new List <double>(); #endregion }