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); } }