Ir para conteúdo
  • Cadastre-se

dev botao

É possível mudar o FormaEmissao depois de gerar o XML


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

Recommended Posts

Minha duvida surgiu em um momento de besteirol, rsrsrsrs. Mas se fez real. Exemplo: Um cliente inicia as vendas do dia normalmente e então fica sem internet, ou seja vai passar a emitir de forma off-line mas o sistema continua tentando enviar normalmente até que seja alterado manualmente. Eu pensei em fazer o sistema, na negativa do envio,  trocar a forma de emissão. Em teste verifiquei que não adianta apenas mudar a forma de emissão no componente, tenho que gerar toda a nota novamente com a forma de emissão teOffLine. É isso ou eu estou marcando?

Segue exemplos do código:

   if (bTransmitiu) and (abFormaemissao<>0) then begin
   {2}
      case abFormaemissao of
        0: frmPrincipal.AcbrNFCe.Configuracoes.Geral.FormaEmissao := teNormal;
        1: frmPrincipal.AcbrNFCe.Configuracoes.Geral.FormaEmissao := teContingencia;
        2: frmPrincipal.AcbrNFCe.Configuracoes.Geral.FormaEmissao := teSCAN;
        3: frmPrincipal.AcbrNFCe.Configuracoes.Geral.FormaEmissao := teDPEC;
        4: frmPrincipal.AcbrNFCe.Configuracoes.Geral.FormaEmissao := teFSDA;
        5: frmPrincipal.AcbrNFCe.Configuracoes.Geral.FormaEmissao := teOffLine;
      end;

    frmPrincipal.NFCeDANFeESCPOS1.ViaConsumidor:=true;
    ImprimeDanfe;

 

Porem isso ai não funciona. Pra funcionar eu tenho que fazer assim:

    GerarNFCeByFabio(5);
    try
      frmPrincipal.AcbrNFCe.NotasFiscais.Assinar;
    except
      on e : exception do
      begin
        MessageDlg(pChar('Erro: ' + E.Message), mtInformation, [mbOk], 0);
        Exit;
      end;
    end;

    try
      frmPrincipal.AcbrNFCe.NotasFiscais.Validar;
    except
      on e : exception do begin
        MessageDlg(pChar('Erro: ' + E.Message), mtInformation, [mbOk], 0);
        Exit;
      end;
    end;

    frmPrincipal.NFCeDANFeESCPOS1.ViaConsumidor:=true;
    ImprimeDanfe;
 

Isso causa a geração de dois arquivos xml com o mesmo número porém com digito verificador diferente com na primeira tentativa com emissão  normal e a outra com a emissão de forma off-line.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Fábio,

Um XML depois de gerado e principalmente assinado não se deve alterar nada, pois isso o invalida.

Agora se ao gerar novamente com a informação correta, esta gerando um segundo XML isso é devido ao cNF (Código Aleatório da Nota Fiscal) que você deve esta atribuindo o valor zero, isso faz com que o componente gere automaticamente um numero aleatório, numero este que ira compor a chave da NFe.

O seu sistema tem um erro de projeto.

Ao salvar no banco de dados a nota (antes de gerar o XML) você deve gerar um numero aleatório com até 8 dígitos e que seja diferente de zero.

Salve esse numero com os demais dados da nota.

Ao alimentar o componente com os dados da nota, atribua ao campo cNF o numero que foi previamente gerado e guardado no banco de dados juntamente com os demais dados da nota.

Dessa forma você vai poder gerar o XML de uma mesma nota quantas vezes desejar, pois a chave sempre será a mesma.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Moderadores
9 horas atrás, FabioMachado disse:

Isso causa a geração de dois arquivos xml com o mesmo número porém com digito verificador diferente com na primeira tentativa com emissão  normal e a outra com a emissão de forma off-line.

Complementando a resposta do Italo, mesmo que você use o mesmo cNF será gerada uma chave diferente caso você mude o tipo de emissão, já que ele também faz parte da chave de acesso.

Sugiro que leia o Manual de Contingência Off-Line da NFCe que dá orientações para evitar essa duplicidade:

Sempre que houver tentativa de transmissão da NFCe e houver falha de comunicação com a SEFAZ autorizadora, seja por problemas na SEFAZ ou do próprio emitente, deve ser gerada uma nova NFCe, com nova numeração, em contingência Off-Line. A primeira nota deve ser marcada para cancelamento.

Assim que a comunicação for reestabelecida, consultar a NFCe marcada para cancelamento, caso ela tenha sido autorizada, cancelar a NFCe, caso contrário, inutilizar a numeração.

https://www.nfe.fazenda.gov.br/portal/exibirArquivo.aspx?conteudo=YbZEjEHCuHQ=

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

10 horas atrás, FabioMachado disse:

Minha duvida surgiu em um momento de besteirol, rsrsrsrs. Mas se fez real. Exemplo: Um cliente inicia as vendas do dia normalmente e então fica sem internet, ou seja vai passar a emitir de forma off-line mas o sistema continua tentando enviar normalmente até que seja alterado manualmente. Eu pensei em fazer o sistema, na negativa do envio,  trocar a forma de emissão. Em teste verifiquei que não adianta apenas mudar a forma de emissão no componente, tenho que gerar toda a nota novamente com a forma de emissão teOffLine. É isso ou eu estou marcando?

Segue exemplos do código:

   if (bTransmitiu) and (abFormaemissao<>0) then begin
   {2}
      case abFormaemissao of
        0: frmPrincipal.AcbrNFCe.Configuracoes.Geral.FormaEmissao := teNormal;
        1: frmPrincipal.AcbrNFCe.Configuracoes.Geral.FormaEmissao := teContingencia;
        2: frmPrincipal.AcbrNFCe.Configuracoes.Geral.FormaEmissao := teSCAN;
        3: frmPrincipal.AcbrNFCe.Configuracoes.Geral.FormaEmissao := teDPEC;
        4: frmPrincipal.AcbrNFCe.Configuracoes.Geral.FormaEmissao := teFSDA;
        5: frmPrincipal.AcbrNFCe.Configuracoes.Geral.FormaEmissao := teOffLine;
      end;

    frmPrincipal.NFCeDANFeESCPOS1.ViaConsumidor:=true;
    ImprimeDanfe;

 

Porem isso ai não funciona. Pra funcionar eu tenho que fazer assim:

    GerarNFCeByFabio(5);
    try
      frmPrincipal.AcbrNFCe.NotasFiscais.Assinar;
    except
      on e : exception do
      begin
        MessageDlg(pChar('Erro: ' + E.Message), mtInformation, [mbOk], 0);
        Exit;
      end;
    end;

    try
      frmPrincipal.AcbrNFCe.NotasFiscais.Validar;
    except
      on e : exception do begin
        MessageDlg(pChar('Erro: ' + E.Message), mtInformation, [mbOk], 0);
        Exit;
      end;
    end;

    frmPrincipal.NFCeDANFeESCPOS1.ViaConsumidor:=true;
    ImprimeDanfe;
 

Isso causa a geração de dois arquivos xml com o mesmo número porém com digito verificador diferente com na primeira tentativa com emissão  normal e a outra com a emissão de forma off-line.

Bom dia,

preste atenção no seguinte detalhe: o campo tpEmis (1=Normal e 9=OFFLINE) faz parte da chave de acesso.

Att

Ricardo

Link para o comentário
Compartilhar em outros sites

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.