Ir para conteúdo
  • Cadastre-se

dev botao

Duvida na emissão NFC-e em contingencia


  • Este tópico foi criado há 1186 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Tenha uma duvida na questão e Contingencia de NFC-e

se eu coloco o tipo de emissão com ide.tpEmis    := teOffLine; ele faz a verificação se tiver tudo certo ele emiti a NFC-e caso não, ele emite em Contingencia até aí perfeito, único detalhe é que desse jeito envia a tag do XML Ide.xJust     := 'Erro Tecnico NFC-e Contigencia'; (Jutificativa da emissão em contingencia ) mesmo que a Nota seja transmitida, isso da problema ?

na duvida eu achei melhor deixar ide.tpEmis := teNormal, mas se eu deixo a tag Ide.Xjust := 'Erro Tecnico NFC-e Contigencia'; ela me da um retorno que a justificativa não pode ser preenchido quando o tipo for normal.

 

uso essa condição a baixo

 

begin
      if ACBrNFCe1.WebServices.Enviar.cStat = 539 then
        begin
           ShowMessage('erro nota já enviada com outro numero de XML '); //marca a flag da nota como enviada.
        end;

        if ACBrNFCe1.WebServices.Enviar.cStat = 100 then
          Begin
             //ShowMessage('Nota Transmitida pode salvar ');
             nNFCeRecebida    := IntToStr(ACBrNFCe1.NotasFiscais.Items[0].NFe.Ide.nNF);
             nchave           := ACBrNFCe1.NotasFiscais.Items[0].NFe.procNFe.chnfe;
             codNFCe          := IntToStr(ACBrNFCe1.NotasFiscais.Items[0].NFe.Ide.cNF);
             dataHoraRetorno  := DateTimeToStr(ACBrNFCe1.NotasFiscais.Items[0].NFe.procNFe.dhRecbto);
             numeroProtoco    := ACBrNFCe1.NotasFiscais.Items[0].NFe.procNFe.nProt;

             ACBrNFCe1.NotasFiscais.Imprimir;
             editarEConcluirNFCe;
             salvarPagamentos;
          End;

              if (ACBrNFCe1.WebServices.Enviar.cStat <> 100) and (ACBrNFCe1.WebServices.Enviar.cStat <> 539) then
               begin

                  ACBrNFCe1.NotasFiscais.GerarNFe;
                  ACBrNFCe1.NotasFiscais.Assinar;
                  ACBrNFCe1.NotasFiscais.Validar;

                  ACBrNFCe1.NotasFiscais.Add.NFe.ide.tpEmis    := teOffLine; //StrToTpEmis(ok, normalouContingencia);
                  ACBrNFCe1.NotasFiscais.Add.NFe.Ide.xJust     := 'Erro Tecnico NFC-e Contigencia';
                  ACBrNFCe1.NotasFiscais.Add.NFe.ide.dhCont    := now();

                  nchave := copy(ACBrNFCe1.NotasFiscais.Items[0].NFe.infNFe.ID, 4, 44);
                  ACBrNFCe1.NotasFiscais.Imprimir;

                  editarNFCeEmCONTINGENCIA;
                  salvarPagamentos;
               end;

        end
 

 

estou fazendo o que de errado ?

Link para o comentário
Compartilhar em outros sites

Paulo, Boa Noite!

Vou explicar como eu faço com notas emitidas em contingência.

1) No método de transmissão verifico que a nota em questão será em contingência ou normal. Sendo em contingência, faço a inclusão das duas tag (Justificativa e data/hora); Preencho o componente Acbr e faço a impressão em duas vias. e salvo o XML no banco de dados e gravo no banco de dados que esta nota foi emitida em contingência e que esta aguardando transmissão; O que seria basicamente a mesma rotina sua;

2) Quando vou fazer a transmissão dessa nota que esta aguardando transmissão, carrego o xml do banco de dados para o componente ACBR, altero a propriedade do componente para emissão normal (ACBR.Configuracoes.Geral.FormaEmissao:= Normal;) e chamo o método enviar, no retorno do enviar eu gravo atualizo os campos (PROTOCOL_NFE,  DT_HR_PROTOCOL);

 

Link para o comentário
Compartilhar em outros sites

10 horas atrás, FabianoCunha disse:

Paulo, Boa Noite!

Vou explicar como eu faço com notas emitidas em contingência.

1) No método de transmissão verifico que a nota em questão será em contingência ou normal. Sendo em contingência, faço a inclusão das duas tag (Justificativa e data/hora); Preencho o componente Acbr e faço a impressão em duas vias. e salvo o XML no banco de dados e gravo no banco de dados que esta nota foi emitida em contingência e que esta aguardando transmissão; O que seria basicamente a mesma rotina sua;

2) Quando vou fazer a transmissão dessa nota que esta aguardando transmissão, carrego o xml do banco de dados para o componente ACBR, altero a propriedade do componente para emissão normal (ACBR.Configuracoes.Geral.FormaEmissao:= Normal;) e chamo o método enviar, no retorno do enviar eu gravo atualizo os campos (PROTOCOL_NFE,  DT_HR_PROTOCOL);

 

tipo entendi, minha duvida é o seguinte eu tenho o método gerarEnviarNFCe; na Forma de emissão tá como teNormal, só que se tiver um retorno diferente a 100(Autorizado), ele tente reenviar em contingência mas nesse caso eu tenho que enviar teOFFLine, mas minha duvida é só add as duas tag Justificativa e data/hora ou tenho que executar o método gerarEnviarNFCe do zero; isso é a primeira questão a questão que você me falou é pra a transmissão da NFC-e que já foi transmitida em contingência e agora vai ser enviada pra sefaz...   

Link para o comentário
Compartilhar em outros sites

Paulo, Bom dia! 

Essa estratégia de qualquer erro de retorno, mudar para off-line e fazer a impressão e transmissão em seguida, deve ser avaliada com critério, pois se for erro de preenchimento ou alguma validação da sefaz, mesmo ao fazer a transmissão em off-line a sefaz vai recusar a nota. E se essa nota já tiver sido entregue para algum cliente é preciso trocar a nota com o cliente.  Eu evito o que posso de fazer emissão de nota OFF-line.

Da forma que esta fazendo, entendo que você deve preencher as duas propriedades no próprio componente, mudar a forma de emissão, assinar e gravar o xml no banco de dados e fazer a impressão das duas cópias. 

E depois você precisa fazer a transmissão dessa nota a sefaz. E para fazer essa transmissão é da maneira que eu falei no post acima.  

Link para o comentário
Compartilhar em outros sites

17 minutos atrás, FabianoCunha disse:

Paulo, Bom dia! 

Essa estratégia de qualquer erro de retorno, mudar para off-line e fazer a impressão e transmissão em seguida, deve ser avaliada com critério, pois se for erro de preenchimento ou alguma validação da sefaz, mesmo ao fazer a transmissão em off-line a sefaz vai recusar a nota. E se essa nota já tiver sido entregue para algum cliente é preciso trocar a nota com o cliente.  Eu evito o que posso de fazer emissão de nota OFF-line.

Da forma que esta fazendo, entendo que você deve preencher as duas propriedades no próprio componente, mudar a forma de emissão, assinar e gravar o xml no banco de dados e fazer a impressão das duas cópias. 

E depois você precisa fazer a transmissão dessa nota a sefaz. E para fazer essa transmissão é da maneira que eu falei no post acima.  

Primeiramente muito obrigado pro sua orientação realmente é muito importante tratar essa situação com cuidado e realmente entendo perfeitamente o que você me disse por isso que estou tendo o cuidado por exemplo se for me retornado o erro 539 -> (erro nota já enviada com outro numero de XML) essa NFC-e não seja impressa em contingencia pra se evitados esses erros que você mesmo citou, tem algum outros erros que ainda irei incrementar pra que esse tipo de problema não venha ocorrer, mas voltando ao assunto da emissão em contingencia, caso passe por as exceções o envio da NFC-e em contingencia eu devo limpar o componente e enviar novamente todo o método de envio da NFC-e  ? mas a maior precaução agora é só eu manter as boas praticas de desenvolvimento e não ter que criar duas procedures, tipo envio NFCeOnline e NFCeOffLine e acabar estendendo muito o código.

Link para o comentário
Compartilhar em outros sites

Paulo, acho que pode fazer em apenas um método. Colocando dentro dele um IF, pois se já deu erro na emissão normal e para não ficar sem tirar a nota para o cliente, você vai fazer emissão  em off-line. Mas depois em um segundo momento você vai ter que fazer a transmissão da Off-line, pois se deu erro de rede ou time out, vai ter que rodar novamente o envio da off-line para a sefaz. 

Link para o comentário
Compartilhar em outros sites

13 minutos atrás, FabianoCunha disse:

Paulo, acho que pode fazer em apenas um método. Colocando dentro dele um IF, pois se já deu erro na emissão normal e para não ficar sem tirar a nota para o cliente, você vai fazer emissão  em off-line. Mas depois em um segundo momento você vai ter que fazer a transmissão da Off-line, pois se deu erro de rede ou time out, vai ter que rodar novamente o envio da off-line para a sefaz. 

entendi, ficou claro pra mim toda essa questão, o meu maior problema ta no codigo, quando eu faço o IF e pra alterar o tipo de emissão pra OFFLine e que coloco as Tag dentro do meu IF da um erro de preencher a 'UF'  só que já foi preenchida anterior mente e não tem nem um metodo de limpar o componente então na logica não tem nem um problema de tenta enviar sem preencher novamente. meu if ficou assim:

 

  if (ACBrNFCe1.WebServices.Enviar.cStat <> 100) and (ACBrNFCe1.WebServices.Enviar.cStat <> 539) then
               begin

                  ACBrNFCe1.NotasFiscais.Add.NFe.ide.tpEmis    := teOffLine; //StrToTpEmis(ok, normalouContingencia);
                  ACBrNFCe1.NotasFiscais.Add.NFe.Ide.xJust     := 'Erro Tecnico NFC-e Contigencia';
                  ACBrNFCe1.NotasFiscais.Add.NFe.ide.dhCont    := now();

                  ACBrNFCe1.NotasFiscais.GerarNFe;
                  ACBrNFCe1.NotasFiscais.Assinar;
                  ACBrNFCe1.NotasFiscais.Validar;

                 

                  nchave := copy(ACBrNFCe1.NotasFiscais.Items[0].NFe.infNFe.ID, 4, 44);
                  ACBrNFCe1.NotasFiscais.Imprimir;

                  editarNFCeEmCONTINGENCIA;
                  salvarPagamentos;
               end;

 

Link para o comentário
Compartilhar em outros sites

3 horas atrás, FabianoCunha disse:

Paulo, 
Tenta não usar o ADD, pois creio que esteja criando um novo elemento na collection de nota fiscais. 
NFe.ide.tpEmis    := teOffLine; //StrToTpEmis(ok, normalouContingencia);
NFe.Ide.xJust     := 'Erro Tecnico NFC-e Contigencia';
NFe.ide.dhCont    := now();

foi Justamente isso, feito e deu certo !

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1186 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.