private void Validar(HttpPostedFile selectedFile)
    {
        //StringBuilder sbF = new StringBuilder();
        try
        {
            CargarArrayHT();

            iCont  = 0;
            iNumOk = 0;
            if (selectedFile.ContentLength != 0)
            {
                string sFichero = selectedFile.FileName;
                //Grabo el archivo en base de datos
                byte[] ArchivoEnBinario = new Byte[0];
                ArchivoEnBinario = new Byte[selectedFile.ContentLength];                        //Crear el array de bytes con la longitud del archivo
                selectedFile.InputStream.Read(ArchivoEnBinario, 0, selectedFile.ContentLength); //Forzar al control del archivo a cargar los datos en el array

                int iRows = FICHEROSMANIOBRA.Update(null, Constantes.FicheroDatos, "Fichero origen de CARGA DE DATOS", ArchivoEnBinario);
                if (iRows == 0)
                {
                    sErrores = "No existe entrada asociada a este proceso en el fichero de Maniobra";
                    return;
                }
                selectedFile.InputStream.Position = 0;
                StreamReader r = new StreamReader(selectedFile.InputStream, System.Text.Encoding.UTF7);
                //StreamReader r = new StreamReader(selectedFile.InputStream, System.Text.Encoding.Unicode);
                DesdeFichero oDesdeFichero = null;

                String strLinea = null;
                while ((strLinea = r.ReadLine()) != "")
                {
                    if (strLinea == null)
                    {
                        break;
                    }
                    iCont++;
                    oDesdeFichero = validarLinea(DesdeFichero.getFila(strLinea));
                    if (!validarCampos(oDesdeFichero, true))
                    {
                        continue;
                    }
                    iNumOk++;
                }
            }
            this.divB.InnerHtml    = cabErrores() + sbE + "</table>";
            cldLinProc.InnerText   = iCont.ToString("#,##0");
            cldLinOK.InnerText     = iNumOk.ToString("#,##0");
            cldLinErr.InnerText    = (iCont - iNumOk).ToString("#,##0");
            this.hdnIniciado.Value = "T";
        }
        catch (Exception)
        {
            sErrores = "El fichero no tiene el formato requerido para el proceso";
        }
    }
    private string Procesar(string sAnomes, string sCadena)
    {//En sCadena tenemos los nº de linea de facturas erróneas
        string sResul = "", lin = "", sLin = "";
        int    iNumLin = 1;

        byte[] linea = new byte[103];
        try
        {
            #region Obtenión de dataset con empresas, proyectos y clientes y creación de HASTABLES
            DataSet ds = INTERFACTSAP.EmpresasProyectos();

            htEmpEnlaceSAP = new Hashtable();
            foreach (DataRow oEmpresa in ds.Tables[0].Rows)//Recorro tabla de empresas
            {
                htEmpEnlaceSAP.Add(oEmpresa["t302_codigoexterno"].ToString(), new EmpFactSAP((int)oEmpresa["t313_idempresa"],
                                                                                             oEmpresa["t313_denominacion"].ToString(),
                                                                                             oEmpresa["t302_codigoexterno"].ToString()
                                                                                             //,(bool)oEmpresa["t313_ute"]
                                                                                             )
                                   );
            }
            //oEmpFactSAP = (EmpFactSAP)htEmpEnlaceSAP["IB01"];

            htProyEnlaceSAP = new Hashtable();
            foreach (DataRow oProy in ds.Tables[1].Rows)//Recorro tabla de proyectos
            {
                htProyEnlaceSAP.Add((int)oProy["t301_idproyecto"], new ProyFactSAP((int)oProy["t301_idproyecto"],
                                                                                   (int)oProy["t305_idproyectosubnodo"])
                                    );
            }
            //oProyFactSAP = (ProyFactSAP)htProyEnlaceSAP[20801];

            htCliEnlaceSAP = new Hashtable();
            foreach (DataRow oCliente in ds.Tables[2].Rows)//Recorro tabla de clientes
            {
                htCliEnlaceSAP.Add(oCliente["t302_codigoexterno"], new CliFactSAP((int)oCliente["t302_idcliente"],
                                                                                  oCliente["t302_codigoexterno"].ToString(),
                                                                                  ((int)oCliente["Interno"] == 1) ? true : false)
                                   );
            }
            //oCliFactSAP = (CliFactSAP)htCliEnlaceSAP[45946];

            ds.Dispose();
            #endregion

            #region Abro transaccion
            try
            {
                oConn = Conexion.Abrir();
                tr    = Conexion.AbrirTransaccion(oConn);
            }
            catch (Exception ex)
            {
                if (oConn.State == ConnectionState.Open)
                {
                    Conexion.Cerrar(oConn);
                }
                sResul = "Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex);
                return(sResul);
            }
            #endregion
            //Leo el fichero de base de datos
            FICHEROSMANIOBRA oFic = FICHEROSMANIOBRA.Select(tr, Constantes.FicheroFacturasSAP);
            if (oFic.t447_fichero.Length > 0)
            {
                //Borrar contenido de T445_INTERFACTSAP
                INTERFACTSAP.Borrar(tr);

                #region Leer fichero de BBDD
                MemoryStream mstr = new MemoryStream(oFic.t447_fichero);
                mstr.Seek(0, SeekOrigin.Begin);
                int    count     = 0;
                byte[] byteArray = new byte[mstr.Length];
                while (count < mstr.Length)
                {
                    byteArray[count++] = System.Convert.ToByte(mstr.ReadByte());
                }
                lin = FromASCIIByteArray(byteArray);
                #endregion

                string[] aArgs = Regex.Split(lin, "\r\n");
                FactSAP  oFact = null;
                //int nInserts = 0;
                //Recorrer lista de facturas e insertar en T445_INTERFACTSAP las que cuyo nº de línea no está en la lista de errores
                for (int iLinea = 0; iLinea < aArgs.Length - 1; iLinea++)
                {
                    if (aArgs[iLinea] != "")
                    {
                        sLin    = aArgs[iLinea];
                        iNumLin = iLinea + 1;
                        if (sCadena.IndexOf("##" + iNumLin.ToString() + "##") == -1)
                        {
                            //oFact = FactSAP.getFactura(sLin);
                            oFact = validarFactura(FactSAP.getFactura(sLin));
                            if (!validarCampos(oFact, sAnomes, false))
                            {
                                continue;
                            }
//, oFact.ute
                            INTERFACTSAP.Insert(tr, oFact.iCodEmpresa, oFact.iCodCliente, oFact.t305_idproyectosubnodo,
                                                oFact.grupo, oFact.serie.Replace(".", ""), oFact.iNumero, oFact.dtFecFact,
                                                oFact.dImpFfact, oFact.moneda, oFact.descri, oFact.refCliente);
                            //nInserts++;
                        }
                    }
                }
            }
            sResul = "OK@#@" + INTERFACTSAP.numFacturas(tr).ToString("#,##0");
            Conexion.CommitTransaccion(tr);
        }
        catch (Exception ex)
        {
            //Errores.mostrarError("Error al tramitar el fichero", ex);
            sResul = "Error@#@" + Errores.mostrarError("Error al tramitar el fichero en la línea " + iNumLin.ToString() + " : " + sLin, ex);
        }
        finally
        {
            Conexion.CerrarTransaccion(tr);
        }
        return(sResul);
    }
    private void Validar(HttpPostedFile selectedFile)
    {
        //StringBuilder sbF = new StringBuilder();
        try
        {
            #region Obtenión de dataset con empresas, proyectos y clientes y creación de HASTABLES
            DataSet ds = INTERFACTSAP.EmpresasProyectos();
            oEmpFactSAP    = null;
            oProyFactSAP   = null;
            oCliFactSAP    = null;
            htEmpEnlaceSAP = new Hashtable();
            foreach (DataRow oEmpresa in ds.Tables[0].Rows)//Recorro tabla de empresas
            {
                try
                {
                    htEmpEnlaceSAP.Add(oEmpresa["t302_codigoexterno"].ToString(), new EmpFactSAP((int)oEmpresa["t313_idempresa"],
                                                                                                 oEmpresa["t313_denominacion"].ToString(),
                                                                                                 oEmpresa["t302_codigoexterno"].ToString()
                                                                                                 //,(bool)oEmpresa["t313_ute"]
                                                                                                 )
                                       );
                }
                catch (Exception ex)
                {
                    sErrores = Errores.mostrarError("Error al existir en la tabla 'T313_EMPRESA' diferentes empresas con el mismo código externo ", ex);
                };
            }
            //oEmpFactSAP = (EmpFactSAP)htEmpEnlaceSAP["IB01"];

            htProyEnlaceSAP = new Hashtable();
            foreach (DataRow oProy in ds.Tables[1].Rows)//Recorro tabla de proyectos
            {
                htProyEnlaceSAP.Add((int)oProy["t301_idproyecto"], new ProyFactSAP((int)oProy["t301_idproyecto"],
                                                                                   (int)oProy["t305_idproyectosubnodo"]));
            }
            //oProyFactSAP = (ProyFactSAP)htProyEnlaceSAP[20801];

            htCliEnlaceSAP = new Hashtable();
            foreach (DataRow oCliente in ds.Tables[2].Rows)//Recorro tabla de clientes
            {
                try
                {
                    htCliEnlaceSAP.Add(oCliente["t302_codigoexterno"], new CliFactSAP((int)oCliente["t302_idcliente"],
                                                                                      oCliente["t302_codigoexterno"].ToString(),
                                                                                      ((int)oCliente["Interno"] == 1)? true : false)
                                       );
                }
                catch (Exception ex)
                {
                    sErrores = Errores.mostrarError("Error al existir en la tabla 'T302_CLIENTE' diferentes clientes con el mismo código externo ", ex);
                };
            }
            //oCliFactSAP = (CliFactSAP)htCliEnlaceSAP[45946];

            ds.Dispose();
            #endregion

            if (selectedFile.ContentLength != 0)
            {
                string sFichero = selectedFile.FileName;
                //Grabo el archivo en base de datos
                byte[] ArchivoEnBinario = new Byte[0];
                ArchivoEnBinario = new Byte[selectedFile.ContentLength];                        //Crear el array de bytes con la longitud del archivo
                selectedFile.InputStream.Read(ArchivoEnBinario, 0, selectedFile.ContentLength); //Forzar al control del archivo a cargar los datos en el array

                int iRows = FICHEROSMANIOBRA.Update(null, Constantes.FicheroFacturasSAP, "Fichero origen de INTERFACTSAP", ArchivoEnBinario);
                if (iRows == 0)
                {
                    sErrores = "No existe entrada asociada a este proceso en el fichero de Maniobra";
                    return;
                }

                selectedFile.InputStream.Position = 0;
                StreamReader r     = new StreamReader(selectedFile.InputStream, System.Text.Encoding.UTF7);
                FactSAP      oFact = null;
                while (r.Peek() > -1)
                {
                    iCont++;
                    //if (iCont==909)
                    //{
                    //    string sAux = "KK";
                    //}
                    //lin = r.ReadLine();
                    //oFact = FactSAP.getFactura(lin);
                    oFact = validarFactura(FactSAP.getFactura(r.ReadLine()));
                    if (!validarCampos(oFact, this.txtAnioMes.Text, true))
                    {
                        continue;
                    }

                    iNumOk++;
                }
            }
            this.divB.InnerHtml    = cabErrores() + sbE + "</table>";
            cldFacProc.InnerText   = iCont.ToString("#,##0");
            cldFacOK.InnerText     = iNumOk.ToString("#,##0");
            cldFacErr.InnerText    = (iCont - iNumOk).ToString("#,##0");
            this.hdnIniciado.Value = "T";
        }
        catch (Exception ex)
        {
            sErrores = Errores.mostrarError("El fichero no tiene el formato requerido para el proceso.\nRevisa la línea " + iCont.ToString(), ex);
        }
    }
    private string Procesar()
    {
        string sResul = "", lin = "", sLin = "";
        int    iNumLin = 1;

        try
        {
            CargarArrayHT();

            #region Apertura de conexión y transacción
            try
            {
                oConn = Conexion.Abrir();
                tr    = Conexion.AbrirTransaccion(oConn);
            }
            catch (Exception ex)
            {
                if (oConn.State == ConnectionState.Open)
                {
                    Conexion.Cerrar(oConn);
                }
                sResul = "Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex);
                return(sResul);
            }
            #endregion
            //Leo el fichero de base de datos
            FICHEROSMANIOBRA oFic = FICHEROSMANIOBRA.Select(tr, Constantes.FicheroDatos);
            if (oFic.t447_fichero.Length > 0)
            {
                #region Leer fichero de BBDD
                MemoryStream mstr = new MemoryStream(oFic.t447_fichero);
                mstr.Seek(0, SeekOrigin.Begin);
                int    count     = 0;
                byte[] byteArray = new byte[mstr.Length];
                while (count < mstr.Length)
                {
                    byteArray[count++] = System.Convert.ToByte(mstr.ReadByte());
                }
                lin = FromASCIIByteArray(byteArray);
                //lin = FromUnicodeByteArray(byteArray);
                #endregion

                string[]     aArgs         = Regex.Split(lin, "\r\n");
                DesdeFichero oDesdeFichero = null;

                string sEstadoMes  = "";
                int    nSegMesProy = 0;

                for (int iLinea = 0; iLinea < aArgs.Length - 1; iLinea++)
                {
                    if (aArgs[iLinea] != "")
                    {
                        sLin    = aArgs[iLinea];
                        iNumLin = iLinea + 1;

                        oDesdeFichero = validarLinea(DesdeFichero.getFila(sLin));
                        int?iProveedor = null;
                        if (oDesdeFichero.t315_idproveedor != 0)
                        {
                            iProveedor = oDesdeFichero.t315_idproveedor;
                        }

                        int?iNodoDestino = null;
                        if (oDesdeFichero.t303_idnododestino != 0)
                        {
                            iNodoDestino = oDesdeFichero.t303_idnododestino;
                        }

                        nSegMesProy = SEGMESPROYECTOSUBNODO.ExisteSegMesProy(tr, oDesdeFichero.t305_idproyectosubnodo, (int)oDesdeFichero.t325_annomes);
                        if (nSegMesProy == 0)
                        {
                            sEstadoMes  = SEGMESPROYECTOSUBNODO.EstadoMesACrear(tr, oDesdeFichero.t305_idproyectosubnodo, (int)oDesdeFichero.t325_annomes);
                            nSegMesProy = SEGMESPROYECTOSUBNODO.Insert(tr, oDesdeFichero.t305_idproyectosubnodo, (int)oDesdeFichero.t325_annomes, sEstadoMes, 0, 0, false, 0, 0);
                        }

                        DATOECO.Insert(tr, nSegMesProy, oDesdeFichero.t329_idclaseeco, oDesdeFichero.t376_motivo, (decimal)oDesdeFichero.t376_importe, (oDesdeFichero.t329_necesidad == "N") ? iNodoDestino : null, (oDesdeFichero.t329_necesidad == "P") ? iProveedor : null, Constantes.FicheroDatos, oDesdeFichero.t422_idmoneda);
                    }
                }
            }
            sResul = "OK@#@";
            Conexion.CommitTransaccion(tr);
        }
        catch (Exception ex)
        {
            //Errores.mostrarError("Error al tramitar el fichero", ex);
            sResul = "Error@#@" + Errores.mostrarError("Error al procesar el fichero en la línea " + iNumLin.ToString() + " : " + sLin, ex);
            Conexion.CerrarTransaccion(tr);
        }
        finally
        {
            Conexion.Cerrar(oConn);
        }
        return(sResul);
    }