ZeusAutomacao / DFe.NET

Biblioteca para Geração de NFe(2.0, 3.10 e 4.0) e NFCe(3.10 e 4.0) e consumo dos serviços necessários à sua manutenção, conforme descritos em http://www.nfe.fazenda.gov.br/portal/principal.aspx
GNU Lesser General Public License v2.1
754 stars 478 forks source link

Opção Download NFe no AppTeste está funcionando? #568

Closed ThalisonSantos closed 7 years ago

ThalisonSantos commented 7 years ago

Boa tarde senhores, sempre que uso essa opção da retorno 109 serviço paralisado sem previsão

robertorp commented 7 years ago

Não esta. Agora você tem que fazer uma manifestação com ciência da operação e depois um distribuição passando a chave. No appTeste tem esse exemplo.

Se quiser remover para nós fique a vontade. Vou colocar sua issue como melhoria para remover isso do componente.

Obrigado.

ThalisonSantos commented 7 years ago

pensei que era tipo a opção de download do xml no site da sefaz

ThalisonSantos commented 7 years ago

robertorp, aproveitando sua ilustre presença você saberia dizer que tipo de método posso usar para ver as notas emitidas para um CNPJ especifico?

robertorp commented 7 years ago

Melhor criar outra issue para essa pergunta, se misturarmos as coisas fica confuso para uma pessoa que pegar essa issue para resolver

ThalisonSantos commented 7 years ago

ok vou fechar esse e abrir outra issue

orochasamuel commented 7 years ago

@ThalisonSantos veja a issue https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe/issues/472.

Agora deve ser usado o método de Distribuição DF-e.

ThalisonSantos commented 7 years ago

onde consigo o nsu?

orochasamuel commented 7 years ago

Cada documento possui um NSU (Número Sequencial Único), você pode buscar os documentos por NSU ou pela Chave de Acesso de cada documento. Para descobrir o NSU faça a consulta ao webservice que ele irá retornar os dados e entre eles o número do último NSU disponível, você pode ir baixando um a um.

ThalisonSantos commented 7 years ago

@samuelrochaoliveira

eu consultei a nota pela chave mais não retornou nenhum NSU vc poderia me explicar pq estou voando

orochasamuel commented 7 years ago

Vamos lá, você está consultando direto no AppTeste? Ou está consultando dentro do seu sistema? A nota pode ser do ambiente de Produção e você pode estar consultando no ambiente de Homologação.

ThalisonSantos commented 7 years ago

estou consultando pelo AppTeste a nota é de produção

orochasamuel commented 7 years ago

Primeiro manifeste a nota fiscal com Ciência da Operação. Só após você consegui efetuar o download.

Você pode consultar mais informações no FAQ oficial em: http://www.nfe.fazenda.gov.br/portal/perguntasFrequentes.aspx?tipoConteudo=yjOJMwFOkA0=

marcosgerene commented 7 years ago

@ThalisonSantos eu particularmente não uso o NSU.

Pelo que eu entendi sobre ele, quando alguém emite um documento que referência minha NFe (CTe, MDFe, outra nfe para devolução) gera um novo NSU e para controlar a unica forma seria toda vez que foi fazer o download da NFe consultar ela antes para obter o NSU.

Posso estar redondamente enganado, são 7 da manhã e eu ainda to com fome, mas se não me engano é isso, acredito que o @samuelrochaoliveira ou o @robertorp podem te auxiliar melhor sobre o NSU, mas de qualquer forma segue minha rotina para download

using (var servicoNFe = new NFe.Servicos.ServicosNFe(ZeusConfig))
{
    var retornoManifestacao = servicoNFe.RecepcaoEventoManifestacaoDestinatario(idlote: 1,
                                                                                sequenciaEvento: 1,
                                                                                chavesNFe: lote.ToArray(),
                                                                                tipoEventoManifestacaoDestinatario: NFe.Classes.Servicos.Tipos.TipoEventoManifestacaoDestinatario.TeMdCienciaDaEmissao,
                                                                                cpfcnpj: Sessao.EmpresaLogada.Cnpj,
                                                                                justificativa: null);

    //Por algum motivo depois da ciencia da operação deve-se aguardar um pouco ou vai dar erro no download
    Thread.Sleep(1500); 

    foreach (string chaveNFe in lote)
    {
        try
        {
            var retornoNFeDistDFe = servicoNFe.NfeDistDFeInteresse(Sessao.EmpresaLogada.Endereco.Cidade.Uf.ToString(), 
                                                                    Sessao.EmpresaLogada.Cnpj, chNFE: chaveNFe);

            if (retornoNFeDistDFe.Retorno.loteDistDFeInt == null)
                throw new Exception(retornoNFeDistDFe.Retorno.xMotivo);

            if ((retornoNFeDistDFe.Retorno.loteDistDFeInt.Count()) > 0)
            {
                var xmlBytes = retornoNFeDistDFe.Retorno.loteDistDFeInt[0].XmlNfe;
                string xmlStr = NFe.Utils.Compressao.Unzip(xmlBytes);
                GArquivos.ExcluirArquivo(GArquivos.CombinarDiretorio(path, $"{chaveNFe}.xml"));
                GArquivos.EscreverTexto(GArquivos.CombinarDiretorio(path, $"{chaveNFe}.xml"), xmlStr);
                resposta.AppendLine($"{chaveNFe} - OK");                                    
            }
        }
        catch(Exception ex)
        {
            resposta.AppendLine($"{chaveNFe} - {ex.Message}");
        }
    }
}

Aonde: "Lotes" é uma List com as chaves.

Repare que não precisei informar o NSU, ultimoNSU e afins pois eu informei a chave.

Abraço

orochasamuel commented 7 years ago

É isso mesmo que o Marcos Gerene falou.. toda vez que um evento é registrado a um DFe, um novo NSU é gerado, quer dizer que para o CNPJ consultado podem ter 500 NSUs disponíveis e só 50 serem notas fiscais. Eu faço da seguinte maneira, PRIMEIRO consulto pelo NSU armazeno e obtenho a chave de acesso SÓ DEPOIS eu faço a consulta pela chave e baixo os documentos, faço isso para manter o histórico das consultas. Espero ter ajudado, abraços.

ThalisonSantos commented 7 years ago

@marcosgerene e @samuelrochaoliveira entendi obrigado pela dicas

marcosgerene commented 7 years ago

@ThalisonSantos se o seu problema foi resolvido por favor feche a issue

orochasamuel commented 7 years ago

@marcosgerene só para complementar este issue, o Thread.Sleep() é necessário pois se tentar baixar o documento no mesmo instante que manifestar ele não estará "disponível" para download, seu tempo médio de espera foi menor, fiz testes com 5 segundos enquanto estava desenvolvendo mas realmente o caminho é esse.

Se já tiver manifestado alguma vez não tem problema, mas se for a primeira vez o documento não estará elegível para download ainda, é só aguardar um pouco até o evento "bater" na SEFAZ que já pode baixar.

Abraços.