/// <summary> /// Assinar e Validar todos os arquivos XML de notas fiscais encontrados na pasta informada por parâmetro /// </summary> /// <param name="oNfe">Objeto do UniNFeClass a ser utilizado</param> /// <param name="strPasta">Pasta onde está os XML´s</param> private void AssinarValidarNFe(Object oNfe, string strPasta) { //Definir o tipo do serviço Type tipoServico = oNfe.GetType(); //Monta a lista de XML´s encontrados na pasta List <string> lstArquivos = this.ArquivosPasta(strPasta, "*" + ExtXml.Nfe); //Assinar, Validar, Enviar ou somente processar os arquivos XML encontrados na pasta de envio for (int i = 0; i < lstArquivos.Count; i++) { //Se o arquivo estiver em uso eu pulo ele para tentar mais tarde if (Auxiliar.FileInUse(lstArquivos[i])) { continue; } string cError = ""; try { //Definir o arquivo XML tipoServico.InvokeMember("vXmlNfeDadosMsg", System.Reflection.BindingFlags.SetProperty, null, oNfe, new object[] { lstArquivos[i] }); //Assinar e Validar o XML de nota fiscal eletrônica e coloca na pasta de Assinados tipoServico.InvokeMember("AssinarValidarXMLNFe", System.Reflection.BindingFlags.InvokeMethod, null, oNfe, new Object[] { strPasta }); } catch (IOException ex) { //System.Windows.Forms.MessageBox.Show(ex.Message); cError = ex.Message; } catch (Exception ex) { //System.Windows.Forms.MessageBox.Show(ex.Message); cError = ex.Message; } /// /// danasa 9-2009 /// if (!string.IsNullOrEmpty(cError)) { Auxiliar oAux = new Auxiliar(); /// /// grava o arquivo de erro /// oAux.GravarArqErroERP(Path.GetFileNameWithoutExtension(lstArquivos[i]) + ".err", cError); /// /// move o arquivo para a pasta de erro /// oAux.MoveArqErro(lstArquivos[i]); } } }
/// <summary> /// Monta o um lote para cada NFe /// </summary> /// <param name="oNfe">Objeto referente a instância da classe UniNfeClass</param> /// <by>Wandrey Mundin Ferreira</by> /// <date>17/04/2009</date> private void MontarLoteUmaNfe(Object oNfe) { int emp = new FindEmpresaThread(Thread.CurrentThread).Index; //Definir o tipo do serviço Type tipoServico = oNfe.GetType(); List <string> lstArquivos = new List <string>(); FluxoNfe oFluxoNfe = new FluxoNfe(); lstArquivos = this.ArquivosPasta(Empresa.Configuracoes[emp].PastaEnvio + InfoApp.NomePastaXMLAssinado, "*" + ExtXml.Nfe); for (int i = 0; i < lstArquivos.Count; i++) { string cError = ""; try { LerXML.DadosNFeClass oDadosNfe = this.LerXMLNFe(lstArquivos[i]); if (!oFluxoNfe.NFeComLote(oDadosNfe.chavenfe)) { //Gerar lote tipoServico.InvokeMember("vXmlNfeDadosMsg", System.Reflection.BindingFlags.SetProperty, null, oNfe, new object[] { lstArquivos[i] }); tipoServico.InvokeMember("LoteNfe", System.Reflection.BindingFlags.InvokeMethod, null, oNfe, new object[] { lstArquivos[i] }); } } catch (IOException ex) { cError = (ex.InnerException != null ? ex.InnerException.Message : ex.Message); } catch (Exception ex) { cError = (ex.InnerException != null ? ex.InnerException.Message : ex.Message); } /// /// danasa 9-2009 /// if (!string.IsNullOrEmpty(cError)) { Auxiliar oAux = new Auxiliar(); /// /// grava o arquivo de erro /// oAux.GravarArqErroERP(Path.GetFileNameWithoutExtension(lstArquivos[i]) + ".err", cError); /// /// move o arquivo para a pasta de erro /// oAux.MoveArqErro(lstArquivos[i]); } } }
/// <summary> /// Gravar o XML de retorno com as informações do UniNFe para o aplicativo de ERP /// </summary> /// <param name="oNfe">Objeto da classe UniNfeClass para conseguir pegar algumas informações para gravar o XML</param> /// <by>Wandrey Mundin Ferreira</by> /// <date>29/01/2009</date> private void GravarXMLDadosCertificado(string ArquivoXml) { int emp = new FindEmpresaThread(Thread.CurrentThread).Index; string sArqRetorno = string.Empty; Auxiliar oAux = new Auxiliar(); if (Path.GetExtension(ArquivoXml).ToLower() == ".txt") { sArqRetorno = Empresa.Configuracoes[emp].PastaRetorno + "\\" + oAux.ExtrairNomeArq(ArquivoXml, ExtXml.ConsInf) + "-ret-cons-inf.txt"; } else { sArqRetorno = Empresa.Configuracoes[emp].PastaRetorno + "\\" + oAux.ExtrairNomeArq(ArquivoXml, ExtXml.ConsInf) + "-ret-cons-inf.xml"; } try { InfoApp oInfUniNfe = new InfoApp(); //Deletar o arquivo de solicitação do serviço FileInfo oArquivo = new FileInfo(ArquivoXml); oArquivo.Delete(); oInfUniNfe.GravarXMLInformacoes(sArqRetorno); } catch (Exception ex) { try { oAux.GravarArqErroERP(Path.GetFileNameWithoutExtension(sArqRetorno) + ".err", ex.Message); } catch { //Se também falhou gravar o arquivo de retorno para o ERP, infelizmente não posso fazer mais nada. Deve estar com algum problema na rede, HD, permissão de acesso as pastas, etc... Wandrey 09/03/2010 } } }
/// <summary> /// Grava XML com algumas informações do aplicativo, dentre elas os dados do certificado digital configurado nos parâmetros, versão, última modificação, etc. /// </summary> /// <param name="sArquivo">Pasta e nome do arquivo XML a ser gravado com as informações</param> public void GravarXMLInformacoes(string sArquivo, bool somenteConfigGeral) { int emp = Empresas.FindEmpresaByThread(); string cStat = "1"; string xMotivo = "Consulta efetuada com sucesso"; //Ler os dados do certificado digital string sSubject = ""; string sValIni = ""; string sValFin = ""; if (!somenteConfigGeral) { CertificadoDigital cert = new CertificadoDigital(); if (Empresas.Configuracoes[emp].UsaCertificado) { if (cert.PrepInfCertificado(Empresas.Configuracoes[emp])) { sSubject = cert.sSubject; sValIni = cert.dValidadeInicial.ToString("dd/MM/yyyy HH:mm:ss"); sValFin = cert.dValidadeFinal.ToString("dd/MM/yyyy HH:mm:ss"); } else { //if (!Empresas.Configuracoes[emp].UsaCertificado) // xMotivo = "Empresa sem certificado digital informado e/ou não necessário"; //else { cStat = "2"; xMotivo = "Certificado digital não foi localizado"; } } } else { xMotivo = "Empresa sem certificado digital informado e/ou não necessário"; } } //danasa 22/7/2011 //pega a data da ultima modificacao do 'uninfe.exe' diretamente porque pode ser que esteja sendo executado o servico //então, precisamos dos dados do uninfe.exe e não do servico string dtUltModif; URLws item; string tipo = ""; dtUltModif = File.GetLastWriteTime(Propriedade.NomeAplicacao + ".exe").ToString("dd/MM/yyyy - HH:mm:ss"); //Gravar o XML com as informações do aplicativo try { bool isXml = false; object oXmlGravar; if (Path.GetExtension(sArquivo).ToLower() == ".txt") { oXmlGravar = new System.IO.StringWriter(); } else { isXml = true; XmlWriterSettings oSettings = new XmlWriterSettings(); UTF8Encoding c = new UTF8Encoding(true); //Para começar, vamos criar um XmlWriterSettings para configurar nosso XML oSettings.Encoding = c; oSettings.Indent = true; oSettings.IndentChars = ""; oSettings.NewLineOnAttributes = false; oSettings.OmitXmlDeclaration = false; //Agora vamos criar um XML Writer oXmlGravar = XmlWriter.Create(sArquivo, oSettings); } //Abrir o XML if (isXml) { ((XmlWriter)oXmlGravar).WriteStartDocument(); ((XmlWriter)oXmlGravar).WriteStartElement("retConsInf"); } Functions.GravaTxtXml(oXmlGravar, NFe.Components.TpcnResources.cStat.ToString(), cStat); Functions.GravaTxtXml(oXmlGravar, NFe.Components.TpcnResources.xMotivo.ToString(), xMotivo); if (!somenteConfigGeral) { if (Empresas.Configuracoes[emp].UsaCertificado) { //Dados do certificado digital if (isXml) { ((XmlWriter)oXmlGravar).WriteStartElement("DadosCertificado"); } Functions.GravaTxtXml(oXmlGravar, "sSubject", sSubject); Functions.GravaTxtXml(oXmlGravar, "dValIni", sValIni); Functions.GravaTxtXml(oXmlGravar, "dValFin", sValFin); if (isXml) { ((XmlWriter)oXmlGravar).WriteEndElement(); //DadosCertificado } } } //Dados gerais do Aplicativo if (isXml) { ((XmlWriter)oXmlGravar).WriteStartElement("DadosUniNfe"); } Functions.GravaTxtXml(oXmlGravar, NFe.Components.TpcnResources.versao.ToString(), Propriedade.Versao); Functions.GravaTxtXml(oXmlGravar, "dUltModif", dtUltModif); Functions.GravaTxtXml(oXmlGravar, "PastaExecutavel", Propriedade.PastaExecutavel); Functions.GravaTxtXml(oXmlGravar, "NomeComputador", Environment.MachineName); Functions.GravaTxtXml(oXmlGravar, "UsuarioComputador", Environment.UserName); //danasa 22/7/2011 Functions.GravaTxtXml(oXmlGravar, "ExecutandoPeloServico", Propriedade.ServicoRodando.ToString()); Functions.GravaTxtXml(oXmlGravar, "ConexaoInternet", Functions.IsConnectedToInternet().ToString()); if (isXml) { ((XmlWriter)oXmlGravar).WriteEndElement(); //DadosUniNfe } //Dados das configurações do aplicativo if (isXml) { ((XmlWriter)oXmlGravar).WriteStartElement(NFeStrConstants.nfe_configuracoes); } //Functions.GravaTxtXml(oXmlGravar, NFe.Components.NFeStrConstants.DiretorioSalvarComo, Empresas.Configuracoes[emp].DiretorioSalvarComo.ToString()); if (!somenteConfigGeral) { bool hasFTP = false; foreach (var pT in Empresas.Configuracoes[emp].GetType().GetProperties()) { if (pT.CanWrite) { if (pT.Name.Equals("diretorioSalvarComo")) { continue; } if (isXml) { if (!hasFTP && pT.Name.StartsWith("FTP")) { ((XmlWriter)oXmlGravar).WriteStartElement("FTP"); hasFTP = true; } else if (hasFTP && !pT.Name.StartsWith("FTP")) { ((XmlWriter)oXmlGravar).WriteEndElement(); hasFTP = false; } } object v = pT.GetValue(Empresas.Configuracoes[emp], null); NFe.Components.Functions.GravaTxtXml(oXmlGravar, pT.Name, v == null ? "" : v.ToString()); } } if (hasFTP && isXml) { ((XmlWriter)oXmlGravar).WriteEndElement(); } /// /// o ERP poderá verificar se determinado servico está definido no UniNFe /// foreach (webServices list in WebServiceProxy.webServicesList) { if (list.ID == Empresas.Configuracoes[emp].UnidadeFederativaCodigo) { if (isXml) { ((XmlWriter)oXmlGravar).WriteStartElement(list.UF); } if (Empresas.Configuracoes[emp].AmbienteCodigo == 2) { item = list.LocalHomologacao; if (isXml) { ((XmlWriter)oXmlGravar).WriteStartElement("Homologacao"); } else { tipo = list.UF + ".Homologacao."; } } else { item = list.LocalProducao; if (isXml) { ((XmlWriter)oXmlGravar).WriteStartElement("Producao"); } else { tipo = list.UF + ".Producao."; } } switch (Empresas.Configuracoes[emp].Servico) { case TipoAplicativo.Nfse: Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.NFSeCancelar.ToString(), (!string.IsNullOrEmpty(item.CancelarNfse)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.NFSeConsultar.ToString(), (!string.IsNullOrEmpty(item.ConsultarNfse)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.NFSeConsultarLoteRps.ToString(), (!string.IsNullOrEmpty(item.ConsultarLoteRps)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.NFSeConsultarPorRps.ToString(), (!string.IsNullOrEmpty(item.ConsultarNfsePorRps)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.NFSeConsultarNFSePDF.ToString(), (!string.IsNullOrEmpty(item.ConsultarNFSePDF)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.NFSeConsultarNFSePNG.ToString(), (!string.IsNullOrEmpty(item.ConsultarNFSePNG)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.NFSeConsultarURL.ToString(), (!string.IsNullOrEmpty(item.ConsultarURLNfse)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.NFSeConsultarSituacaoLoteRps.ToString(), (!string.IsNullOrEmpty(item.ConsultarSituacaoLoteRps)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.NFSeRecepcionarLoteRps.ToString(), (!string.IsNullOrEmpty(item.RecepcionarLoteRps)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.NFSeInutilizarNFSe.ToString(), (!string.IsNullOrEmpty(item.InutilizarNFSe)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.NFSeObterNotaFiscal.ToString(), (!string.IsNullOrEmpty(item.ObterNotaFiscal)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.NFSeConsultaSequenciaLoteNotaRPS.ToString(), (!string.IsNullOrEmpty(item.ConsultaSequenciaLoteNotaRPS)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.NFSeSubstituirNfse.ToString(), (!string.IsNullOrEmpty(item.SubstituirNfse)).ToString()); break; default: if (Empresas.Configuracoes[emp].Servico == TipoAplicativo.NFCe || Empresas.Configuracoes[emp].Servico == TipoAplicativo.Nfe || Empresas.Configuracoes[emp].Servico == TipoAplicativo.Todos) { Functions.GravaTxtXml(oXmlGravar, tipo + "NFeConsulta", (!string.IsNullOrEmpty(item.NFeConsulta)).ToString()); //Functions.GravaTxtXml(oXmlGravar, tipo + "NFeRecepcao", (!string.IsNullOrEmpty(item.NFeRecepcao)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + "NFeRecepcaoEvento", (!string.IsNullOrEmpty(item.NFeRecepcaoEvento)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + "NFeConsultaCadastro", (!string.IsNullOrEmpty(item.NFeConsultaCadastro)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + "NFeInutilizacao", (!string.IsNullOrEmpty(item.NFeInutilizacao)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + "NFeManifDest", (!string.IsNullOrEmpty(item.NFeManifDest)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + "NFeStatusServico", (!string.IsNullOrEmpty(item.NFeStatusServico)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + "NFeAutorizacao", (!string.IsNullOrEmpty(item.NFeAutorizacao)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + "NFeRetAutorizacao", (!string.IsNullOrEmpty(item.NFeRetAutorizacao)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + "DFeRecepcao", (!string.IsNullOrEmpty(item.DFeRecepcao)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.LMCAutorizacao.ToString(), (!string.IsNullOrEmpty(item.LMCAutorizacao)).ToString()); } if (Empresas.Configuracoes[emp].Servico == TipoAplicativo.MDFe || Empresas.Configuracoes[emp].Servico == TipoAplicativo.Todos) { Functions.GravaTxtXml(oXmlGravar, tipo + "MDFeRecepcao", (!string.IsNullOrEmpty(item.MDFeRecepcao)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + "MDFeRecepcaoSinc", (!string.IsNullOrEmpty(item.MDFeRecepcaoSinc)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + "MDFeRetRecepcao", (!string.IsNullOrEmpty(item.MDFeRetRecepcao)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + "MDFeConsulta", (!string.IsNullOrEmpty(item.MDFeConsulta)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + "MDFeStatusServico", (!string.IsNullOrEmpty(item.MDFeStatusServico)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.MDFeRecepcaoEvento.ToString(), (!string.IsNullOrEmpty(item.MDFeRecepcaoEvento)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.MDFeConsultaNaoEncerrado.ToString(), (!string.IsNullOrEmpty(item.MDFeNaoEncerrado)).ToString()); } if (Empresas.Configuracoes[emp].Servico == TipoAplicativo.Cte || Empresas.Configuracoes[emp].Servico == TipoAplicativo.Todos) { Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.CTeRecepcaoEvento.ToString(), (!string.IsNullOrEmpty(item.CTeRecepcaoEvento)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + "CTeConsultaCadastro", (!string.IsNullOrEmpty(item.CTeConsultaCadastro)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + "CTeInutilizacao", (!string.IsNullOrEmpty(item.CTeInutilizacao)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + "CTeStatusServico", (!string.IsNullOrEmpty(item.CTeStatusServico)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + "CTeDistribuicaoDFe", (!string.IsNullOrEmpty(item.CTeDistribuicaoDFe)).ToString()); } if (Empresas.Configuracoes[emp].Servico == TipoAplicativo.EFDReinf || Empresas.Configuracoes[emp].Servico == TipoAplicativo.EFDReinfeSocial || Empresas.Configuracoes[emp].Servico == TipoAplicativo.Todos) { Functions.GravaTxtXml(oXmlGravar, tipo + NFe.Components.Servicos.RecepcaoLoteReinf.ToString(), (!string.IsNullOrEmpty(item.RecepcaoLoteReinf)).ToString()); } if (Empresas.Configuracoes[emp].Servico == TipoAplicativo.eSocial || Empresas.Configuracoes[emp].Servico == TipoAplicativo.Todos) { Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.ConsultarLoteeSocial.ToString(), (!string.IsNullOrEmpty(item.ConsultarLoteeSocial)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.RecepcaoLoteeSocial.ToString(), (!string.IsNullOrEmpty(item.RecepcaoLoteeSocial)).ToString()); } Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.CancelarCfse.ToString(), (!string.IsNullOrEmpty(item.CancelarCfse)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.ConfigurarTerminalCfse.ToString(), (!string.IsNullOrEmpty(item.ConfigurarTerminalCfse)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.ConsultarCfse.ToString(), (!string.IsNullOrEmpty(item.ConsultarCfse)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.ConsultarDadosCadastroCfse.ToString(), (!string.IsNullOrEmpty(item.ConsultarDadosCadastroCfse)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.ConsultarLoteCfse.ToString(), (!string.IsNullOrEmpty(item.ConsultarLoteCfse)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.EnviarInformeManutencaoCfse.ToString(), (!string.IsNullOrEmpty(item.EnviarInformeManutencaoCfse)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.InformeTrasmissaoSemMovimentoCfse.ToString(), (!string.IsNullOrEmpty(item.InformeTrasmissaoSemMovimentoCfse)).ToString()); Functions.GravaTxtXml(oXmlGravar, tipo + Servicos.RecepcionarLoteCfse.ToString(), (!string.IsNullOrEmpty(item.RecepcionarLoteCfse)).ToString()); break; } if (isXml) { ((XmlWriter)oXmlGravar).WriteEndElement(); //Ambiente ((XmlWriter)oXmlGravar).WriteEndElement(); //list.UF } } } } //Finalizar o XML if (isXml) { ((XmlWriter)oXmlGravar).WriteEndElement(); //nfe_configuracoes ((XmlWriter)oXmlGravar).WriteEndElement(); //retConsInf ((XmlWriter)oXmlGravar).WriteEndDocument(); ((XmlWriter)oXmlGravar).Flush(); ((XmlWriter)oXmlGravar).Close(); } else { ((StringWriter)oXmlGravar).Flush(); File.WriteAllText(sArquivo, ((StringWriter)oXmlGravar).GetStringBuilder().ToString()); ((StringWriter)oXmlGravar).Close(); } } catch (Exception ex) { Functions.DeletarArquivo(sArquivo); /// /// danasa 8-2009 /// Auxiliar oAux = new Auxiliar(); oAux.GravarArqErroERP(Path.GetFileNameWithoutExtension(sArquivo) + ".err", ex.Message); } }
private const int _Minutos = 12; //12 minutos para atender o consumo indevido da SEFAZ public void Analisar(int emp) { oAux = new Auxiliar(); try { if (string.IsNullOrEmpty(Empresas.Configuracoes[emp].PastaXmlEnviado) || !Directory.Exists(Empresas.Configuracoes[emp].PastaXmlEnviado)) { return; } // le todos os arquivos que estão na pasta em processamento string[] files = Directory.GetFiles(Empresas.Configuracoes[emp].PastaXmlEnviado + "\\" + PastaEnviados.EmProcessamento.ToString()).Where(w => w.EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.NFe).EnvioXML, StringComparison.InvariantCultureIgnoreCase) || w.EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.CTe).EnvioXML, StringComparison.InvariantCultureIgnoreCase) || w.EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.MDFe).EnvioXML, StringComparison.InvariantCultureIgnoreCase)).ToArray <string>(); // considera os arquivos em que a data do ultimo acesso é superior a 5 minutos DateTime UltimaData = DateTime.Now.AddMinutes(-_Minutos); foreach (string file in files) { if (!Functions.FileInUse(file)) { FileInfo fi = new FileInfo(file); //usar a última data de acesso, e não a data de criação if (fi.LastWriteTime <= UltimaData) { if (oLerXml == null) { oLerXml = new LerXML(); oGerarXml = new GerarXML(emp); fluxo = new FluxoNfe(emp); } try { XmlDocument doc = new XmlDocument(); doc.Load(file); TipoAplicativo tipoArquivo = TipoAplicativo.Nfe; string extNFe = Propriedade.Extensao(Propriedade.TipoEnvio.NFe).EnvioXML; string extProcNFe = Propriedade.ExtRetorno.ProcNFe; string arquivoSit = string.Empty; string chNFe = string.Empty; switch (doc.DocumentElement.Name) { case "MDFe": tipoArquivo = TipoAplicativo.MDFe; extNFe = Propriedade.Extensao(Propriedade.TipoEnvio.MDFe).EnvioXML; extProcNFe = Propriedade.ExtRetorno.ProcMDFe; oLerXml.Mdfe(doc); arquivoSit = oLerXml.oDadosNfe.chavenfe.Substring(4); chNFe = oLerXml.oDadosNfe.chavenfe.Substring(4); break; case "NFe": tipoArquivo = TipoAplicativo.Nfe; extNFe = Propriedade.Extensao(Propriedade.TipoEnvio.NFe).EnvioXML; extProcNFe = Propriedade.ExtRetorno.ProcNFe; oLerXml.Nfe(doc); arquivoSit = oLerXml.oDadosNfe.chavenfe.Substring(3); chNFe = oLerXml.oDadosNfe.chavenfe.Substring(3); break; case "CTe": tipoArquivo = TipoAplicativo.Cte; extNFe = Propriedade.Extensao(Propriedade.TipoEnvio.CTe).EnvioXML; extProcNFe = Propriedade.ExtRetorno.ProcCTe; oLerXml.Cte(doc); arquivoSit = oLerXml.oDadosNfe.chavenfe.Substring(3); chNFe = oLerXml.oDadosNfe.chavenfe.Substring(3); break; } //Ler a NFe //Verificar se o -nfe.xml existe na pasta de autorizados bool NFeJaNaAutorizada = oAux.EstaAutorizada(file, oLerXml.oDadosNfe.dEmi, extNFe, extNFe); //Verificar se o -procNfe.xml existe na past de autorizados bool procNFeJaNaAutorizada = oAux.EstaAutorizada(file, oLerXml.oDadosNfe.dEmi, extNFe, extProcNFe); //Se um dos XML´s não estiver na pasta de autorizadas ele força finalizar o processo da NFe. if (!NFeJaNaAutorizada || !procNFeJaNaAutorizada) { //Verificar se a NFe está no fluxo, se não estiver vamos incluir ela para que funcione //a rotina de gerar o -procNFe.xml corretamente. Wandrey 21/10/2009 if (!fluxo.NfeExiste(oLerXml.oDadosNfe.chavenfe)) { fluxo.InserirNfeFluxo(oLerXml.oDadosNfe.chavenfe, oLerXml.oDadosNfe.mod, file); } //gera um -ped-sit.xml mesmo sendo autorizada ou denegada, pois assim sendo, o ERP precisaria dele oGerarXml.Consulta(tipoArquivo, arquivoSit + Propriedade.Extensao(Propriedade.TipoEnvio.PedSit).EnvioXML, Convert.ToInt32(oLerXml.oDadosNfe.tpAmb), Convert.ToInt32(oLerXml.oDadosNfe.tpEmis), chNFe, oLerXml.oDadosNfe.versao); } else { //Move o XML da pasta em processamento para a pasta de XML´s com erro (-nfe.xml) oAux.MoveArqErro(file); //Move o XML da pasta em processamento para a pasta de XML´s com erro (-procNFe.xml) oAux.MoveArqErro(Empresas.Configuracoes[emp].PastaXmlEnviado + "\\" + PastaEnviados.EmProcessamento.ToString() + "\\" + Functions.ExtrairNomeArq(file, extNFe) + extProcNFe); //Tirar a nota fiscal do fluxo fluxo.ExcluirNfeFluxo(oLerXml.oDadosNfe.chavenfe); } } catch (Exception ex) { try { // grava o arquivo com extensao .ERR oAux.GravarArqErroERP(Path.GetFileNameWithoutExtension(file) + ".err", ex.Message); } catch { //Se deu erro na hora de gravar o erro para o ERP, infelizmente não posso fazer mais nada. Wandrey 28/04/2011 } } } } } } catch (Exception ex) { try { // grava o arquivo generico oAux.GravarArqErroERP(string.Format(Propriedade.NomeArqERRUniNFe, DateTime.Now.ToString("yyyyMMddTHHmmss")), ex.Message); } catch { //Se deu erro na hora de gravar o erro para o ERP, infelizmente não posso fazer mais nada. Wandrey 28/04/2011 } } }
public ConverterTXT(string arquivo) { Auxiliar oAux = new Auxiliar(); NFe.ConvertTxt.ConversaoTXT oUniTxtToXml = new NFe.ConvertTxt.ConversaoTXT(); string pasta = new FileInfo(arquivo).DirectoryName; pasta = pasta.Substring(0, pasta.Length - 5); //Retirar a pasta \Temp do final - Wandrey 03/08/2011 string ccMessage = string.Empty; string ccExtension = Propriedade.ExtRetorno.Nfe_ERR;// "-nfe.err"; var EXT = Propriedade.Extensao(Propriedade.TipoEnvio.NFe); try { int emp = Empresas.FindEmpresaByThread(); /// /// exclui o arquivo de erro /// Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlRetorno + "\\" + Path.GetFileName(Functions.ExtrairNomeArq(arquivo, EXT.EnvioTXT) + ccExtension)); Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlRetorno + "\\" + Path.GetFileName(Functions.ExtrairNomeArq(arquivo, EXT.EnvioTXT) + EXT.RetornoXML)); Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlErro + "\\" + Path.GetFileName(arquivo)); /// /// exclui o arquivo TXT original /// Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlRetorno + "\\" + Path.GetFileNameWithoutExtension(arquivo) + "-orig.txt"); /// /// processa a conversão /// oUniTxtToXml.Converter(arquivo, pasta);//Empresas.Configuracoes[emp].PastaRetorno); //Deu tudo certo com a conversão? if (string.IsNullOrEmpty(oUniTxtToXml.cMensagemErro)) { /// /// danasa 8-2009 /// if (oUniTxtToXml.cRetorno.Count == 0) { ccMessage = "cStat=02\r\n" + "xMotivo=Falha na conversão. Sem informações para converter o arquivo texto"; oAux.MoveArqErro(arquivo, ".txt"); } else { // // salva o arquivo texto original // if (pasta.ToLower().Equals(Empresas.Configuracoes[emp].PastaXmlEnvio.ToLower()) || pasta.ToLower().Equals(Empresas.Configuracoes[emp].PastaValidar.ToLower())) { FileInfo ArqOrig = new FileInfo(arquivo); string vvNomeArquivoDestino = Empresas.Configuracoes[emp].PastaXmlRetorno + "\\" + Path.GetFileNameWithoutExtension(arquivo) + "-orig.txt"; ArqOrig.MoveTo(vvNomeArquivoDestino); } ccExtension = "-nfe.txt"; ccMessage = "cStat=01\r\n" + "xMotivo=Conversão efetuada com sucesso." + (oUniTxtToXml.cRetorno.Count == 1 ? "" : " Foram convertidas " + oUniTxtToXml.cRetorno.Count.ToString() + " notas fiscais"); foreach (NFe.ConvertTxt.txtTOxmlClassRetorno txtClass in oUniTxtToXml.cRetorno) { /// /// monta o texto que será gravado no arquivo de aviso ao ERP /// ccMessage += Environment.NewLine + "Nota fiscal: " + txtClass.NotaFiscal.ToString("000000000") + " Serie: " + txtClass.Serie.ToString("000") + " - ChaveNFe: " + txtClass.ChaveNFe; // move o arquivo XML criado na pasta Envio\Convertidos para a pasta Envio // ou // move o arquivo XML criado na pasta Validar\Convertidos para a pasta Validar string nomeArquivoDestino = Path.Combine(pasta, Path.GetFileName(txtClass.XMLFileName)); Functions.Move(txtClass.XMLFileName, nomeArquivoDestino); Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlErro + "\\" + txtClass.ChaveNFe + EXT.EnvioXML); Functions.DeletarArquivo(Empresas.Configuracoes[emp].PastaXmlErro + "\\" + txtClass.ChaveNFe + EXT.EnvioTXT); } } } else { /// /// danasa 8-2009 /// ccMessage = "cStat=99\r\n" + "xMotivo=Falha na conversão\r\n" + "MensagemErro=" + oUniTxtToXml.cMensagemErro; } } catch (Exception ex) { ccMessage = ex.Message; ccExtension = Propriedade.ExtRetorno.Nfe_ERR;//"-nfe.err"; } if (!string.IsNullOrEmpty(ccMessage)) { oAux.MoveArqErro(arquivo, ".txt"); if (ccMessage.StartsWith("cStat=02") || ccMessage.StartsWith("cStat=99")) { /// /// exclui todos os XML gerados na pasta Envio\convertidos somente se houve erro na conversão /// foreach (NFe.ConvertTxt.txtTOxmlClassRetorno txtClass in oUniTxtToXml.cRetorno) { Functions.DeletarArquivo(pasta + "\\convertidos\\" + Path.GetFileName(txtClass.XMLFileName)); } } /// /// danasa 8-2009 /// /// Gravar o retorno para o ERP em formato TXT com o erro ocorrido /// oAux.GravarArqErroERP(Functions.ExtrairNomeArq(arquivo, EXT.EnvioTXT) + ccExtension, ccMessage); } }
/// <summary> /// Converter arquivos de NFe no formato TXT para XML /// </summary> /// <by>Wandrey Mundin Ferreira</by> /// <date>03/069/2009</date> protected void ConvTXT(string vPasta) { int emp = new FindEmpresaThread(Thread.CurrentThread).Index; Auxiliar oAux = new Auxiliar(); List <string> lstArquivos = this.ArquivosPasta(vPasta /*ConfiguracaoApp.vPastaXMLEnvio*/, "*-nfe.txt"); for (int i = 0; i < lstArquivos.Count; i++) { if (Auxiliar.FileInUse(lstArquivos[i])) { continue; } UnitxtTOxmlClass oUniTxtToXml = new UnitxtTOxmlClass(); string ccMessage = string.Empty; string ccExtension = "-nfe.err"; try { /// /// exclui o arquivo de erro /// oAux.DeletarArquivo(Empresa.Configuracoes[emp].PastaRetorno + "\\" + Path.GetFileName(oAux.ExtrairNomeArq(lstArquivos[i], "-nfe.txt") + ccExtension)); oAux.DeletarArquivo(Empresa.Configuracoes[emp].PastaRetorno + "\\" + Path.GetFileName(oAux.ExtrairNomeArq(lstArquivos[i], "-nfe.txt") + "-nfe-ret.xml")); oAux.DeletarArquivo(Empresa.Configuracoes[emp].PastaErro + "\\" + Path.GetFileName(lstArquivos[i])); /// /// exclui o arquivo TXT original /// oAux.DeletarArquivo(Empresa.Configuracoes[emp].PastaRetorno + "\\" + Path.GetFileNameWithoutExtension(lstArquivos[i]) + "-orig.txt"); /// /// processa a conversão /// oUniTxtToXml.Converter(lstArquivos[i], vPasta /*ConfiguracaoApp.vPastaXMLEnvio*/); //Deu tudo certo com a conversão? if (string.IsNullOrEmpty(oUniTxtToXml.cMensagemErro)) { /// /// danasa 8-2009 /// if (oUniTxtToXml.cRetorno.Count == 0) { ccMessage = "cStat=02\r\n" + "xMotivo=Falha na conversão. Sem informações para converter o arquivo texto"; oAux.MoveArqErro(lstArquivos[i], ".txt"); } else { /// /// salva o arquivo texto original /// FileInfo otxtArquivo = new FileInfo(lstArquivos[i]); if (vPasta.Equals(Empresa.Configuracoes[emp].PastaEnvio)) { string vvNomeArquivoDestino = Empresa.Configuracoes[emp].PastaRetorno + "\\" + Path.GetFileNameWithoutExtension(lstArquivos[i]) + "-orig.txt"; otxtArquivo.MoveTo(vvNomeArquivoDestino); } ccExtension = "-nfe.txt"; ccMessage = "cStat=01\r\n" + "xMotivo=Convertido com sucesso. Foi(ram) convertida(s) " + oUniTxtToXml.cRetorno.Count.ToString() + " nota(s) fiscal(is)"; foreach (txtTOxmlClassRetorno txtClass in oUniTxtToXml.cRetorno) { /// /// monta o texto que será gravado no arquivo de aviso ao ERP /// ccMessage += Environment.NewLine + "Nota fiscal: " + txtClass.NotaFiscal.ToString("000000000") + " Série: " + txtClass.Serie.ToString("000") + " - ChaveNFe: " + txtClass.ChaveNFe; /// /// move o arquivo XML criado na pasta Envio\Convertidos para a pasta Envio /// ou /// move o arquivo XML criado na pasta Validar\Convertidos para a pasta Validar /// FileInfo oArquivo = new FileInfo(vPasta /*ConfiguracaoApp.vPastaXMLEnvio*/ + "\\convertidos\\" + txtClass.XMLFileName); string vNomeArquivoDestino = vPasta /*ConfiguracaoApp.vPastaXMLEnvio*/ + "\\" + txtClass.XMLFileName; /// /// excluo o XML se já existe /// oAux.DeletarArquivo(vNomeArquivoDestino); /// /// move o arquivo da pasta "Envio\Convertidos" para a pasta "Envio" /// ou /// move o arquivo da pasta "Validar\Convertidos" para a pasta "Validar" /// oArquivo.MoveTo(vNomeArquivoDestino); } } } else { /// /// danasa 8-2009 /// ccMessage = "cStat=99\r\n" + "xMotivo=Falha na conversão\r\n" + "MensagemErro=" + oUniTxtToXml.cMensagemErro; } } catch (Exception ex) { ccMessage = ex.Message; ccExtension = "-nfe.err"; } if (!string.IsNullOrEmpty(ccMessage)) { oAux.MoveArqErro(lstArquivos[i], ".txt"); /// /// exclui todos os XML gerados na pasta Enviados\convertidos /// foreach (txtTOxmlClassRetorno txtClass in oUniTxtToXml.cRetorno) { oAux.DeletarArquivo(vPasta /*ConfiguracaoApp.vPastaXMLEnvio*/ + "\\convertidos\\" + txtClass.XMLFileName); } /// /// danasa 8-2009 /// /// Gravar o retorno para o ERP em formato TXT com o erro ocorrido /// oAux.GravarArqErroERP(oAux.ExtrairNomeArq(lstArquivos[i], "-nfe.txt") + ccExtension, ccMessage); } } }
private const int _Minutos = 10; //10 minutos? public NFeEmProcessamento() { int emp = new FindEmpresaThread(Thread.CurrentThread).Index; if (Empresa.Configuracoes[emp].UltimaVerificacaoEmProcessamento.Year > 1) { /// /// executa de 10x10 minutos para evitar ter que acessar o HD sem necessidade /// DateTime dCheck = Empresa.Configuracoes[emp].UltimaVerificacaoEmProcessamento.AddMinutes(_Minutos); if (dCheck > DateTime.Now) { return; } } Empresa.Configuracoes[emp].UltimaVerificacaoEmProcessamento = DateTime.Now; this.oAux = new Auxiliar(); try { /// /// le todos os arquivos que estão na pasta em processamento /// string[] files = Directory.GetFiles(Empresa.Configuracoes[emp].PastaEnviado + "\\" + PastaEnviados.EmProcessamento.ToString(), "*" + ExtXml.Nfe, SearchOption.TopDirectoryOnly); /// /// considera os arquivos em que a data do ultimo acesso é superior a 10 minutos /// DateTime UltimaData = DateTime.Now.AddMinutes(-_Minutos); foreach (string file in files) { if (!Auxiliar.FileInUse(file)) { FileInfo fi = new FileInfo(file); //usar a última data de acesso, e não a data de criação if (fi.LastWriteTime <= UltimaData) { if (this.oLerXml == null) { this.oLerXml = new LerXML(); this.oGerarXml = new GerarXML(emp); this.fluxo = new FluxoNfe(); } try { //Ler a NFe oLerXml.Nfe(file); //Verificar se o -nfe.xml existe na pasta de autorizados bool NFeJaNaAutorizada = oAux.EstaAutorizada(file, oLerXml.oDadosNfe.dEmi, ExtXml.Nfe); //Verificar se o -procNfe.xml existe na past de autorizados bool procNFeJaNaAutorizada = oAux.EstaAutorizada(file, oLerXml.oDadosNfe.dEmi, ExtXmlRet.ProcNFe); //Se um dos XML´s não estiver na pasta de autorizadas ele força finalizar o processo da NFe. if (!NFeJaNaAutorizada || !procNFeJaNaAutorizada) { //Verificar se a NFe está no fluxo, se não estiver vamos incluir ela para que funcione //a rotina de gerar o -procNFe.xml corretamente. Wandrey 21/10/2009 if (!fluxo.NfeExiste(oLerXml.oDadosNfe.chavenfe)) { fluxo.InserirNfeFluxo(oLerXml.oDadosNfe.chavenfe, oAux.ExtrairNomeArq(file, ExtXml.Nfe) + ExtXml.Nfe); } //gera um -ped-sit.xml mesmo sendo autorizada ou denegada, pois assim sendo, o ERP precisaria dele string vArquivoSit = oLerXml.oDadosNfe.chavenfe.Substring(3); oGerarXml.Consulta(vArquivoSit + ExtXml.PedSit, Convert.ToInt32(oLerXml.oDadosNfe.tpAmb), Convert.ToInt32(oLerXml.oDadosNfe.tpEmis), oLerXml.oDadosNfe.chavenfe.Substring(3)); } else { //Move o XML da pasta em processamento para a pasta de XML´s com erro (-nfe.xml) oAux.MoveArqErro(file); //Move o XML da pasta em processamento para a pasta de XML´s com erro (-procNFe.xml) oAux.MoveArqErro(Empresa.Configuracoes[emp].PastaEnviado + "\\" + PastaEnviados.EmProcessamento.ToString() + "\\" + oAux.ExtrairNomeArq(file, ExtXml.Nfe) + ExtXmlRet.ProcNFe); //Tirar a nota fiscal do fluxo fluxo.ExcluirNfeFluxo(oLerXml.oDadosNfe.chavenfe); } } catch (Exception ex) { /// /// grava o arquivo com extensao .ERR /// oAux.GravarArqErroERP(Path.GetFileNameWithoutExtension(file) + ".err", ex.Message); } } } } } catch (Exception ex) { /// /// grava o arquivo generico /// oAux.GravarArqErroERP(string.Format(InfoApp.NomeArqERRUniNFe, DateTime.Now.ToString("yyyyMMddThhmmss")), ex.Message); } }
/// <summary> /// Grava XML com algumas informações do aplicativo, /// dentre elas os dados do certificado digital configurado nos parâmetros, /// versão, última modificação, etc. /// </summary> /// <param name="sArquivo">Pasta e nome do arquivo XML a ser gravado com as informações</param> /// <param name="oAssembly">Passar sempre: Assembly.GetExecutingAssembly() pois ele vai pegar o Assembly do EXE ou DLL de onde está sendo chamado o método</param> /// <by>Wandrey Mundin Ferreira</by> /// <date>29/01/2009</date> public void GravarXMLInformacoes(string sArquivo) { int emp = new FindEmpresaThread(Thread.CurrentThread).Index; string cStat = "1"; string xMotivo = "Consulta efetuada com sucesso"; //Ler os dados do certificado digital string sSubject = ""; string sValIni = ""; string sValFin = ""; CertificadoDigital oDigCert = new CertificadoDigital(); oDigCert.PrepInfCertificado(Empresa.Configuracoes[emp].X509Certificado); if (oDigCert.lLocalizouCertificado == true) { sSubject = oDigCert.sSubject; sValIni = oDigCert.dValidadeInicial.ToString(); sValFin = oDigCert.dValidadeFinal.ToString(); } else { cStat = "2"; xMotivo = "Certificado digital não foi localizado"; } //Gravar o XML com as informações do aplicativo try { if (Path.GetExtension(sArquivo).ToLower() == ".txt") { StringBuilder aTXT = new StringBuilder(); aTXT.AppendLine("cStat|" + cStat); aTXT.AppendLine("xMotivo|" + xMotivo); //Dados do certificado digital aTXT.AppendLine("sSubject|" + sSubject); aTXT.AppendLine("dValIni|" + sValIni); aTXT.AppendLine("dValFin|" + sValFin); //Dados gerais do Aplicativo aTXT.AppendLine("versao|" + InfoApp.Versao()); aTXT.AppendLine("dUltModif|" + File.GetLastWriteTimeUtc(Application.ExecutablePath).ToString("dd/MM/yyyy hh:mm:ss")); aTXT.AppendLine("PastaExecutavel|" + InfoApp.PastaExecutavel()); aTXT.AppendLine("NomeComputador|" + Environment.MachineName); //Dados das configurações do aplicativo aTXT.AppendLine("PastaBackup|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaBackup) ? "" : Empresa.Configuracoes[emp].PastaBackup)); aTXT.AppendLine("PastaXmlEmLote|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnvioEmLote) ? "" : Empresa.Configuracoes[emp].PastaEnvioEmLote)); aTXT.AppendLine("PastaXmlAssinado|" + (string.IsNullOrEmpty(InfoApp.NomePastaXMLAssinado) ? "" : InfoApp.NomePastaXMLAssinado)); aTXT.AppendLine("PastaValidar|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaValidar) ? "" : Empresa.Configuracoes[emp].PastaValidar)); aTXT.AppendLine("PastaXmlEnviado|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnviado) ? "" : Empresa.Configuracoes[emp].PastaEnviado)); aTXT.AppendLine("PastaXmlEnvio|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnvio) ? "" : Empresa.Configuracoes[emp].PastaEnvio)); aTXT.AppendLine("PastaXmlErro|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaErro) ? "" : Empresa.Configuracoes[emp].PastaErro)); aTXT.AppendLine("PastaXmlRetorno|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaRetorno) ? "" : Empresa.Configuracoes[emp].PastaRetorno)); aTXT.AppendLine("DiasParaLimpeza|" + Empresa.Configuracoes[emp].DiasLimpeza.ToString()); aTXT.AppendLine("DiretorioSalvarComo|" + Empresa.Configuracoes[emp].DiretorioSalvarComo.ToString()); aTXT.AppendLine("GravarRetornoTXTNFe|" + Empresa.Configuracoes[emp].GravarRetornoTXTNFe.ToString()); aTXT.AppendLine("AmbienteCodigo|" + Empresa.Configuracoes[emp].tpAmb.ToString()); aTXT.AppendLine("tpEmis|" + Empresa.Configuracoes[emp].tpEmis.ToString()); aTXT.AppendLine("UnidadeFederativaCodigo|" + Empresa.Configuracoes[emp].UFCod.ToString()); File.WriteAllText(sArquivo, aTXT.ToString(), Encoding.Default); } else { XmlWriterSettings oSettings = new XmlWriterSettings(); UTF8Encoding c = new UTF8Encoding(false); //Para começar, vamos criar um XmlWriterSettings para configurar nosso XML oSettings.Encoding = c; oSettings.Indent = true; oSettings.IndentChars = ""; oSettings.NewLineOnAttributes = false; oSettings.OmitXmlDeclaration = false; //Agora vamos criar um XML Writer XmlWriter oXmlGravar = XmlWriter.Create(sArquivo, oSettings); //Abrir o XML oXmlGravar.WriteStartDocument(); oXmlGravar.WriteStartElement("retConsInf"); oXmlGravar.WriteElementString("cStat", cStat); oXmlGravar.WriteElementString("xMotivo", xMotivo); //Dados do certificado digital oXmlGravar.WriteStartElement("DadosCertificado"); oXmlGravar.WriteElementString("sSubject", sSubject); oXmlGravar.WriteElementString("dValIni", sValIni); oXmlGravar.WriteElementString("dValFin", sValFin); oXmlGravar.WriteEndElement(); //DadosCertificado //Dados gerais do Aplicativo oXmlGravar.WriteStartElement("DadosUniNfe"); oXmlGravar.WriteElementString("versao", InfoApp.Versao()); oXmlGravar.WriteElementString("dUltModif", File.GetLastWriteTimeUtc(Application.ExecutablePath).ToString("dd/MM/yyyy hh:mm:ss")); oXmlGravar.WriteElementString("PastaExecutavel", InfoApp.PastaExecutavel()); oXmlGravar.WriteElementString("NomeComputador", Environment.MachineName); oXmlGravar.WriteEndElement(); //DadosUniNfe //Dados das configurações do aplicativo oXmlGravar.WriteStartElement("nfe_configuracoes"); oXmlGravar.WriteElementString("PastaBackup", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaBackup) ? "" : Empresa.Configuracoes[emp].PastaBackup)); oXmlGravar.WriteElementString("PastaXmlEmLote", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnvioEmLote) ? "" : Empresa.Configuracoes[emp].PastaEnvioEmLote)); oXmlGravar.WriteElementString("PastaXmlAssinado", (string.IsNullOrEmpty(InfoApp.NomePastaXMLAssinado) ? "" : InfoApp.NomePastaXMLAssinado)); oXmlGravar.WriteElementString("PastaValidar", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaValidar) ? "" : Empresa.Configuracoes[emp].PastaValidar)); oXmlGravar.WriteElementString("PastaXmlEnviado", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnviado) ? "" : Empresa.Configuracoes[emp].PastaEnviado)); oXmlGravar.WriteElementString("PastaXmlEnvio", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnvio) ? "" : Empresa.Configuracoes[emp].PastaEnvio)); oXmlGravar.WriteElementString("PastaXmlErro", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaErro) ? "" : Empresa.Configuracoes[emp].PastaErro)); oXmlGravar.WriteElementString("PastaXmlRetorno", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaRetorno) ? "" : Empresa.Configuracoes[emp].PastaRetorno)); oXmlGravar.WriteElementString("DiasParaLimpeza", Empresa.Configuracoes[emp].DiasLimpeza.ToString()); oXmlGravar.WriteElementString("DiretorioSalvarComo", Empresa.Configuracoes[emp].DiretorioSalvarComo.ToString()); oXmlGravar.WriteElementString("GravarRetornoTXTNFe", Empresa.Configuracoes[emp].GravarRetornoTXTNFe.ToString()); oXmlGravar.WriteElementString("AmbienteCodigo", Empresa.Configuracoes[emp].tpAmb.ToString()); oXmlGravar.WriteElementString("tpEmis", Empresa.Configuracoes[emp].tpEmis.ToString()); oXmlGravar.WriteElementString("UnidadeFederativaCodigo", Empresa.Configuracoes[emp].UFCod.ToString()); oXmlGravar.WriteEndElement(); //nfe_configuracoes //Finalizar o XML oXmlGravar.WriteEndElement(); //retConsInf oXmlGravar.WriteEndDocument(); oXmlGravar.Flush(); oXmlGravar.Close(); } } catch (Exception ex) { /// /// danasa 8-2009 /// Auxiliar oAux = new Auxiliar(); oAux.GravarArqErroERP(Path.GetFileNameWithoutExtension(sArquivo) + ".err", ex.Message); } }