Jump to content

dev botao

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


  • Este tópico foi criado há 2594 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.