void oFrmChave_DoOnOkClick(object sender, EventArgs e)
        {
            //consulta status do servidor
            ClientEnvironment manager = null;

            try
            {
                manager = Conexao.CreateManager(Program.ConAux);
                FuncaoAutomacao oFuncao = new FuncaoAutomacao(Program.empresaSelecionada, manager, Program.enviarInformacoesSobreErros);

                if (!oFuncao.ConsultaProcNFe(oFrmChave.TextResposta.Text))
                {
                    throw new Exception("Erro não mapeado. Verificar o LOG do sistema.");
                }
                else
                {
                    //arquivo de retorno estara em oParam.pastaRecibo + ChaveNFe + "-sit.xml",
                    ITRetConsSitNFe oRetConsSitNFe =
                        (ITRetConsSitNFe)XMLUtils.CarregaXML_HD(Program.GetParametro(Program.empresaSelecionada, manager).pastaRecibo + oFrmChave.TextResposta.Text + "-sit.xml",
                                                                oFuncao.oParam.versao,
                                                                "TRetConsSitNFe");

                    oFrmChave.Close();
                    oFrmChave.Dispose();

                    FrmVisualizaXML oFrmXML = new FrmVisualizaXML(XMLUtils.GetXML(oRetConsSitNFe, oFuncao.oParam.versao));
                    oFrmXML.ShowDialog();

                    oRetConsSitNFe = null;
                    oFuncao        = null;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                Conexao.DisposeManager(manager);
            }
        }
        public static ResultadoAssinatura AssinaXML(String arqxml, String SUri, X509Certificate2 cert, VersaoXML versao)
        {
            var retorno = new ResultadoAssinatura();

            string _stringXml;
            string newArqXml;
            var    stType = string.Empty;

            if (SUri == "infNFe")
            {
                stType    = "TNFe";
                newArqXml = arqxml.Substring(0, arqxml.Length - 51) + "ass" + arqxml.Substring(arqxml.Length - 51, 51);
            }
            else if (SUri == "infCanc")
            {
                stType    = "TCancNFe";
                newArqXml = arqxml.Substring(0, arqxml.Length - 7) + "-ped-can.xml";
            }
            else if (SUri == "infInut")
            {
                stType    = "TInutNFe";
                newArqXml = arqxml.Substring(0, arqxml.Length - 7) + "-ped-inu.xml";
            }
            else if (SUri == "infEvento")
            {
                stType    = "TEvento";
                newArqXml = arqxml.Substring(0, arqxml.Length - 7) + "-ass-env.xml";
            }
            else
            {
                retorno.codigoRetorno = TRetornoAssinatura.RefURiNaoExiste;// 4; //erro refURi
                return(retorno);
            }


            //Verifica se arquivo da nota Existe;
            if (File.Exists(arqxml))
            {
                _stringXml = XMLUtils.GetXML(XMLUtils.CarregaXML_HD(arqxml, versao, stType), versao);

                // realiza assinatura
                AssinaturaDigital AD = new AssinaturaDigital();

                retorno.codigoRetorno = AD.AssinarNFe(_stringXml, SUri, cert);

                //limpar certificado
                cert.Reset();

                //assinatura bem sucedida
                if (retorno.codigoRetorno == TRetornoAssinatura.Assinada)
                {
                    if (File.Exists(newArqXml))
                    {
                        File.Delete(newArqXml);
                    }

                    XMLUtils.SalvaXML(newArqXml, (XMLUtils.CarregaXML_STR(AD.XMLStringAssinado, versao, stType)), versao);
                }
                else
                {
                    retorno.mensagem = AD.mensagemResultado;
                }

                return(retorno); //Retorna o resultado da assinatura
            }
            else
            {
                retorno.codigoRetorno = TRetornoAssinatura.ArquivoNaoEncontrado;// 11;//Arquivo nao encontrado
                return(retorno);
            }
        }
        private void btInutiliza_Click(object sender, EventArgs e)
        {
            ClientEnvironment manager = null;
            Parametro         oParam  = null;
            FuncaoAutomacao   oFuncao = null;

            try
            {
                manager = Conexao.CreateManager(Program.ConAux);
                oParam  = Program.GetParametro(Program.empresaSelecionada, manager);
                oFuncao = new FuncaoAutomacao(Program.empresaSelecionada, manager, Program.enviarInformacoesSobreErros);

                if (Int32.Parse(tbNotaInicial.Text) > Int32.Parse(tbNotaFinal.Text))
                {
                    throw new Exception("Nota Inicial deve ser menor que Nota Final.");
                }


                //Código da UF + CNPJ + modelo + série + nro inicial e nro final precedida do literal “ID”
                ITInutNFe oInutilizacao = (ITInutNFe)XMLUtils.XMLFactory(oParam.versao, "TInutNFe");

                oInutilizacao.versao       = oParam.versaoDados;
                oInutilizacao.infInut      = (ITInutNFeInfInut)XMLUtils.XMLFactory(oParam.versao, "TInutNFeInfInut");
                oInutilizacao.infInut.ano  = tbAno.Text;
                oInutilizacao.infInut.CNPJ = tbCNPJ.Text;

                oInutilizacao.infInut.cUF = NFeUtils.DefineUF(cbUF.SelectedValue.ToString());

                oInutilizacao.infInut.Id = "ID" + cbUF.SelectedValue.ToString() + tbAno.Text.PadLeft(2, '0') + tbCNPJ.Text + tbMod.Text +
                                           tbSerie.Text.PadLeft(3, '0') + tbNotaInicial.Text.PadLeft(9, '0') + tbNotaFinal.Text.PadLeft(9, '0');

                oInutilizacao.infInut.mod    = oParam.conexao == TipoConexao.NFCe ? TMod.Item65 : TMod.Item55;
                oInutilizacao.infInut.nNFIni = tbNotaInicial.Text;
                oInutilizacao.infInut.nNFFin = tbNotaFinal.Text;
                oInutilizacao.infInut.serie  = tbSerie.Text;

                oInutilizacao.infInut.tpAmb = (TAmb)NFeUtils.DefineEnum(cbTipoAmbiente.SelectedValue.ToString(), typeof(TAmb));
                oInutilizacao.infInut.xJust = tbJust.Text;
                oInutilizacao.infInut.xServ = TInutNFeInfInutXServ.INUTILIZAR;

                String cStat   = String.Empty;
                String xMotivo = String.Empty;

                oFuncao.InutilizaNumeracao(oInutilizacao, ref cStat, ref xMotivo, oParam.versao);


                if (cStat == String.Empty && xMotivo == String.Empty) //recebeu resposta da sefaz
                {
                    throw new Exception("Não foi possível executar Inutilização. Consulte o LOG do sistema.");
                }

                if (cStat != "102")
                {
                    throw new Exception(xMotivo);
                }

                ITRetInutNFe oRetInut = (ITRetInutNFe)
                                        XMLUtils.CarregaXML_HD(oParam.pastaRecibo + oInutilizacao.infInut.Id + "-inu.xml",
                                                               oParam.versao, "TRetInutNFe");

                oInutilizacao = (ITInutNFe)XMLUtils.CarregaXML_HD(oParam.pastaRecibo + oInutilizacao.infInut.Id + "-ped-inu.xml",
                                                                  oParam.versao, "TInutNFe");



                Int32 notaInicial = Int32.Parse(oInutilizacao.infInut.nNFIni);
                Int32 notaFinal   = Int32.Parse(oInutilizacao.infInut.nNFFin);

                while (notaInicial <= notaFinal)
                {
                    NotaInutilizada oNota = new NotaInutilizada();
                    oNota.numeroNota = notaInicial.ToString();

                    //setar a serie da nota
                    oNota.serieNota = oInutilizacao.infInut.serie;
                    oNota.data      = DateTime.Today;
                    oNota.empresa   = oParam.empresa;

                    oNota.XMLResposta = XMLUtils.GetXML(oRetInut, oParam.versao);
                    oNota.XMLPedido   = XMLUtils.GetXML(oInutilizacao, oParam.versao);

                    oNota.Save(manager);

                    notaInicial++;
                }

                MessageBox.Show(xMotivo);
            }
            catch (Exception ex)
            {
                if (oFuncao != null)
                {
                    oFuncao.CriaLog(999, "Inutilização de Notas", ex);
                }
                MessageBox.Show(ex.Message);
            }
            finally
            {
                oParam  = null;
                oFuncao = null;
                Conexao.DisposeManager(manager);
            }
        }