private void CargarDataEco()
    {
        StringBuilder sb = new StringBuilder();

        #region Obtenión de dataset con empresas, proyectos y clientes y creación de HASTABLES

        oProyectoSubNodo = null;
        oClaseEconomica  = null;
        oProveedor       = null;

        DataSet ds = AddDATAECO.ValidarTabla();

        htProyectoSubNodo = new Hashtable();
        foreach (DataRow dsProyectoSubNodo in ds.Tables[0].Rows)//Recorro tabla de proyectos-subnodos
        {
            htProyectoSubNodo.Add(dsProyectoSubNodo["t301_idproyecto"].ToString() + @"/" + dsProyectoSubNodo["t303_idnodo"].ToString(), new ProyectoSubNodo((int)dsProyectoSubNodo["t301_idproyecto"], (int)dsProyectoSubNodo["t305_idproyectosubnodo"],
                                                                                                                                                            (int)dsProyectoSubNodo["t303_idnodo"], dsProyectoSubNodo["t305_cualidad"].ToString())
                                  );
        }

        htClaseEconomica = new Hashtable();
        foreach (DataRow dsClaseEconomica in ds.Tables[1].Rows)//Recorro tabla de Clases económicas
        {
            htClaseEconomica.Add(dsClaseEconomica["t329_idclaseeco"].ToString(), new ClaseEconomica((int)dsClaseEconomica["t329_idclaseeco"],
                                                                                                    dsClaseEconomica["t329_necesidad"].ToString(), bool.Parse(dsClaseEconomica["t329_visiblecarruselC"].ToString()), bool.Parse(dsClaseEconomica["t329_visiblecarruselJ"].ToString()), bool.Parse(dsClaseEconomica["t329_visiblecarruselP"].ToString()))
                                 );
        }

        htProveedor = new Hashtable();
        foreach (DataRow dsProveedor in ds.Tables[2].Rows) //Recorro tabla de proveedores
        {
            htProveedor.Add(dsProveedor["t315_codigoexterno"].ToString(), new Proveedor((int)dsProveedor["t315_idproveedor"],
                                                                                        dsProveedor["t315_codigoexterno"].ToString())
                            );
        }
        ds.Dispose();
        #endregion

        // Lectura, validación y conteo, de las filas de la tabla

        SqlDataReader dr = AddDATAECO.Catalogo();
        while (dr.Read())
        {
            iCont++;
            if (validarCampos(dr))
            {
                iNumOk++;
            }
        }
        dr.Close();
        dr.Dispose();

        sb.Append("</table>");
        this.divB.InnerHtml   = cabErrores() + sbE + "</table>";
        cldTotalLin.InnerText = AddDATAECO.numFilas(null).ToString("##,###,##0");
        cldLinOK.InnerText    = iNumOk.ToString("##,###,##0");
        cldLinErr.InnerText   = (iCont - iNumOk).ToString("##,###,##0");
    }
    private void CargarArrayHT()
    {
        #region Obtenión de dataset con empresas, proyectos y clientes y nodos y creación de HASTABLES

        oProveedor       = null;
        oProyectoSubNodo = null;
        oClaseEconomica  = null;
        oNodoDestino     = null;
        oMoneda          = null;

        DataSet ds = AddDATAECO.ValidarFichero();
        htProveedor = new Hashtable();
        foreach (DataRow dsProveedor in ds.Tables[0].Rows) //Recorro tabla de proveedores
        {
            htProveedor.Add(dsProveedor["t315_codigoexterno"].ToString(), new Proveedor((int)dsProveedor["t315_idproveedor"],
                                                                                        dsProveedor["t315_codigoexterno"].ToString())
                            );
        }

        htProyectoSubNodo = new Hashtable();
        foreach (DataRow dsProyectoSubNodo in ds.Tables[1].Rows)//Recorro tabla de proyectos-subnodos
        {
            htProyectoSubNodo.Add(dsProyectoSubNodo["t301_idproyecto"].ToString() + @"/" + dsProyectoSubNodo["t303_idnodo"].ToString(), new ProyectoSubNodo((int)dsProyectoSubNodo["t301_idproyecto"], (int)dsProyectoSubNodo["t305_idproyectosubnodo"],
                                                                                                                                                            (int)dsProyectoSubNodo["t303_idnodo"], dsProyectoSubNodo["t305_cualidad"].ToString())
                                  );
        }

        htClaseEconomica = new Hashtable();
        foreach (DataRow dsClaseEconomica in ds.Tables[2].Rows)//Recorro tabla de Clases económicas
        {
            htClaseEconomica.Add(dsClaseEconomica["t329_idclaseeco"].ToString(), new ClaseEconomica((int)dsClaseEconomica["t329_idclaseeco"],
                                                                                                    dsClaseEconomica["t329_necesidad"].ToString(), bool.Parse(dsClaseEconomica["t329_visiblecarruselC"].ToString()), bool.Parse(dsClaseEconomica["t329_visiblecarruselJ"].ToString()), bool.Parse(dsClaseEconomica["t329_visiblecarruselP"].ToString()))
                                 );
        }

        htNodoDestino = new Hashtable();
        foreach (DataRow dsNodoDestino in ds.Tables[3].Rows)//Recorro tabla de Nodos
        {
            htNodoDestino.Add(dsNodoDestino["t303_idnodo"].ToString(), new NodoDestino((int)dsNodoDestino["t303_idnodo"])
                              );
        }

        htMoneda = new Hashtable();
        foreach (DataRow dsMoneda in ds.Tables[4].Rows)//Recorro tabla de Monedas
        {
            htMoneda.Add(dsMoneda["t422_idmoneda"].ToString(), new Moneda(dsMoneda["t422_idmoneda"].ToString())
                         );
        }

        ds.Dispose();
        #endregion
    }
    private bool validarCampos(SqlDataReader dr)
    {
        // EL RESTO DE LAS VALIDACIONES SE HACEN POR INTEGRIDAD REFERENCIAL CON SUS RESPECTIVAS TABLAS

        oProyectoSubNodo = (ProyectoSubNodo)htProyectoSubNodo[dr["t301_idproyecto"].ToString() + "/" + dr["t303_idnodo"].ToString()];
        if (oProyectoSubNodo == null)
        {
            sbE.Append(ponerFilaError(dr, "No existe un proyectosubnodo correspondiente al proyecto " + dr["t301_idproyecto"].ToString() + " y al " + Estructura.getDefCorta(Estructura.sTipoElem.NODO) + " " + dr["t303_idnodo"].ToString() + "."));
            return(false);
        }

        oClaseEconomica = (ClaseEconomica)htClaseEconomica[dr["t329_idclaseeco"].ToString()];
        if (oClaseEconomica != null)
        {
            if ((oClaseEconomica.t329_necesidad == "N") && (dr["t303_idnodo_destino"] == DBNull.Value))
            {
                sbE.Append(ponerFilaError(dr, "El nodo destino no se ha especificado y la clase lo exige"));
                return(false);
            }
            if ((oClaseEconomica.t329_necesidad != "N") && (dr["t303_idnodo_destino"] != DBNull.Value))
            {
                sbE.Append(ponerFilaError(dr, "La clase económica especificada debiera exigir nodo"));
                return(false);
            }
            if ((oClaseEconomica.t329_necesidad == "P") && (dr["t315_codigoexterno"] == DBNull.Value))
            {
                sbE.Append(ponerFilaError(dr, "El codigo externo del proveedor no se ha especificado y la clase lo exige"));
                return(false);
            }
            if ((oClaseEconomica.t329_necesidad != "P") && (dr["t315_codigoexterno"] != DBNull.Value))
            {
                sbE.Append(ponerFilaError(dr, "La clase económica especificada debiera exigir proveedor"));
                return(false);
            }
            if ((dr["t303_idnodo_destino"] != DBNull.Value) && (dr["t315_codigoexterno"] != DBNull.Value))
            {
                sbE.Append(ponerFilaError(dr, "No es posible especificar proveedor y nodo destino a la vez"));
                return(false);
            }

            if (oProyectoSubNodo.t305_cualidad == "C" && oClaseEconomica.t329_visiblecarruselC == false)
            {
                sbE.Append(ponerFilaError(dr, "La clase económica (" + oClaseEconomica.t329_idclaseeco + ") para este proyecto/nodo (Contratante) no tiene visibilidad en el carrusel."));
                return(false);
            }
            if (oProyectoSubNodo.t305_cualidad == "J" && oClaseEconomica.t329_visiblecarruselJ == false)
            {
                sbE.Append(ponerFilaError(dr, "La clase económica (" + oClaseEconomica.t329_idclaseeco + ") para este proyecto/nodo (Replicado sin gestión) no tiene visibilidad en el carrusel."));
                return(false);
            }
            if (oProyectoSubNodo.t305_cualidad == "P" && oClaseEconomica.t329_visiblecarruselP == false)
            {
                sbE.Append(ponerFilaError(dr, "La clase económica (" + oClaseEconomica.t329_idclaseeco + ") para este proyecto/nodo (Replicado con gestión propia) no tiene visibilidad en el carrusel."));
                return(false);
            }
        }


        if (!Fechas.ValidarAnnomes((int)dr["t325_anomes"]))
        {
            sbE.Append(ponerFilaError(dr, "Año o mes de la fecha incorrecto (" + dr["t325_anomes"].ToString().Substring(0, 4) + ")"));
            return(false);
        }

        return(true);
    }
    private DesdeFichero validarLinea(DesdeFichero oDesdeFichero)
    {
        oClaseEconomica = (ClaseEconomica)htClaseEconomica[(int.Parse(oDesdeFichero.idclaseeco)).ToString()];
        if (oClaseEconomica != null)
        {
            oDesdeFichero.t329_necesidad        = oClaseEconomica.t329_necesidad;
            oDesdeFichero.t329_visiblecarruselC = oClaseEconomica.t329_visiblecarruselC;
            oDesdeFichero.t329_visiblecarruselJ = oClaseEconomica.t329_visiblecarruselJ;
            oDesdeFichero.t329_visiblecarruselP = oClaseEconomica.t329_visiblecarruselP;
        }
        if (oDesdeFichero.t329_necesidad == "P")
        {
            oDesdeFichero.codigoexterno = oDesdeFichero.idProveedNodoDestino;
            oProveedor = (Proveedor)htProveedor[oDesdeFichero.codigoexterno]; // cod externo Proveedor

            if (oProveedor != null)
            {
                oDesdeFichero.t315_idproveedor = oProveedor.t315_idproveedor;
            }
        }
        else if (oDesdeFichero.t329_necesidad == "N")
        {
            if (Utilidades.isNumeric(oDesdeFichero.idProveedNodoDestino))
            {
                oDesdeFichero.idnododestino = oDesdeFichero.idProveedNodoDestino;
                oNodoDestino = (NodoDestino)htNodoDestino[(int.Parse(oDesdeFichero.idnododestino)).ToString()]; // cod Nodo

                if (oNodoDestino != null)
                {
                    oDesdeFichero.t303_idnododestino = int.Parse(oDesdeFichero.idnododestino);
                }
            }
            else
            {
                oDesdeFichero.t303_idnododestino = -1;
            }
        }
        oProyectoSubNodo = (ProyectoSubNodo)htProyectoSubNodo[oDesdeFichero.idproyecto + "/" + oDesdeFichero.idnodo];
        if (oProyectoSubNodo != null)
        {
            oDesdeFichero.t301_idproyecto        = oProyectoSubNodo.t301_idproyecto;
            oDesdeFichero.t305_idproyectosubnodo = oProyectoSubNodo.t305_idproyectosubnodo;
            oDesdeFichero.t303_idnodo            = oProyectoSubNodo.t303_idnodo;
            oDesdeFichero.t305_cualidad          = oProyectoSubNodo.t305_cualidad;
        }

        if (Utilidades.isNumeric(oDesdeFichero.idnodo))
        {
            oDesdeFichero.t303_idnodo = System.Convert.ToInt32(oDesdeFichero.idnodo);
        }
        else
        {
            oDesdeFichero.t303_idnodo = -1;
        }

        if (Utilidades.isNumeric(oDesdeFichero.idproyecto))
        {
            oDesdeFichero.t301_idproyecto = System.Convert.ToInt32(oDesdeFichero.idproyecto);
        }
        else
        {
            oDesdeFichero.t301_idproyecto = -1;
        }

        if (Utilidades.isNumeric(oDesdeFichero.annomes))
        {
            oDesdeFichero.t325_annomes = System.Convert.ToInt32(oDesdeFichero.annomes);
        }
        else
        {
            oDesdeFichero.t325_annomes = -1;
        }

        if (Utilidades.isNumeric(oDesdeFichero.idclaseeco))
        {
            oDesdeFichero.t329_idclaseeco = System.Convert.ToInt32(oDesdeFichero.idclaseeco);
            if (oDesdeFichero.t329_idclaseeco < 0)
            {
                oDesdeFichero.t329_idclaseeco = 999999;
            }
        }
        else
        {
            oDesdeFichero.t329_idclaseeco = -1;
        }

        if (oDesdeFichero.t305_cualidad == "C" && oDesdeFichero.t329_visiblecarruselC == false)
        {
            oDesdeFichero.t329_idclaseeco = 888888;
        }
        if (oDesdeFichero.t305_cualidad == "J" && oDesdeFichero.t329_visiblecarruselJ == false)
        {
            oDesdeFichero.t329_idclaseeco = 777777;
        }
        if (oDesdeFichero.t305_cualidad == "P" && oDesdeFichero.t329_visiblecarruselP == false)
        {
            oDesdeFichero.t329_idclaseeco = 666666;
        }

        if (Utilidades.isNumeric(oDesdeFichero.importe))
        {
            oDesdeFichero.t376_importe = System.Convert.ToDecimal(oDesdeFichero.importe);
        }
        else
        {
            oDesdeFichero.t376_importe = -999999999;
        }

        //if (Utilidades.isNumeric(oDesdeFichero.idnododestino))
        //    oDesdeFichero.t303_idnododestino = System.Convert.ToInt32(oDesdeFichero.idnododestino);
        //else
        //    oDesdeFichero.t303_idnododestino = -1;

        return(oDesdeFichero);
    }