Ir para conteúdo
  • Cadastre-se

dev botao

Sugestão ajuste para exibir Troco na NFC-e (versão 4.00)


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

Recommended Posts

Boa tarde,

considerando que o componente ACBrNFe já está preparado para a nova versão 4.00, e que o pessoal do fórum já está "a milhão" testando a nova versão em homologação, gostaria de compartilhar o ajuste nos componentes de impressão da NFC-e (modelo 65), TACBrNFeDANFeESCPOSTACBrNFeDANFCeFortes, para ler o troco do componente ACBrNFe (tag NFe.pag.vTroco) e usar na impressão (mantendo a devida compatibilidade com a propriedade original vTroco que já tinha na classe TACBrNFeDANFEClass).

Seguem units em anexo para análise...

Att

Ricardo

ACBrNFeDANFeESCPOS.pas

ACBrDANFCeFortesFr.pas

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

3 horas atrás, Juliomar Marchetti disse:

Hum. 

estive pensando. deixou a compatibilidade com as versões antigas dos xml?

A princípio sim.... pois a propriedade nova pag.vTroco foi disponibilizada no componente ACBrNFe independente da versão do XML/NFe carregado (3.10 ou 4.00).

Ao carregar um XML da versão 3.10, hoje esta propriedade é carregada com valor zero no ACBrNFe, pois esta não existe no XML...

Att

Ricardo

Link para o comentário
Compartilhar em outros sites

  • Moderadores
9 horas atrás, RicardoVoigt disse:

A princípio sim.... pois a propriedade nova pag.vTroco foi disponibilizada no componente ACBrNFe independente da versão do XML/NFe carregado (3.10 ou 4.00).

Ao carregar um XML da versão 3.10, hoje esta propriedade é carregada com valor zero no ACBrNFe, pois esta não existe no XML...

Att

Ricardo

Certo mas a pergunta é a quem for usar ainda mesmo atualizando com a versão antiga e estiver usando a propriedade vai funcionar?

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

@Juliomar Marchetti

Foi isso q eu quis dizer...

19 horas atrás, RicardoVoigt disse:

(mantendo a devida compatibilidade com a propriedade original vTroco que já tinha na classe TACBrNFeDANFEClass)

Pelo teste que fiz aqui funcionou dessa forma:  se troco tiver zerado no NFe (tag pag), o componente de impressao continua pegando a propriedade vTroco original.

Att

Ricardo

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...
  • Moderadores
7 minutos atrás, RicardoVoigt disse:

Boa tarde,

eu não uso este DANFCe em A4, mas segue unit para análise da alteração.

 

OBS: verifiquei neste DANFCe a mesma situação que relatei no tópico abaixo:

Assim que possível, vou anexar naquele tópico a alteração para análise.

 

Att

Ricardo

ACBrDANFCeFortesFrA4.pas

Hum. confere mas acho que não vai mudar nada viu srsrsrsr pelo menos pelo que entendi do código ao olhar rapidamente.

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Juliomar Marchetti disse:

Hum. confere mas acho que não vai mudar nada viu srsrsrsr pelo menos pelo que entendi do código ao olhar rapidamente.

Ops... agora achei onde faltou implementar a impressão do troco, além da definição do PrintIt.

No caso do acréscimo (outro tópico), acho que ficou certo...

Segue novo fonte atualizado.

Att

Ricardo

 

ACBrDANFCeFortesFrA4.pas

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...

Bom dia;

  Eu notei que diversos estabelecimentos colocam, somente na impressão do danfe NFCe,, o valor total em dinheiro, e não o que vai no XML, diversos supermercados grandes aqui usam esse procedimento, fiz essa pequena mudança, que esta em produção a um certo tempo, acredito que deva ser de interesse para todos

 


procedure TACBrNFeDANFeESCPOS.GerarPagamentos;
var
  i: Integer;
  Troco: Real;
begin
  // Total := 0;
  FPosPrinter.Buffer.Add('<c>' + PadSpace('FORMA DE PAGAMENTO | VALOR PAGO R$', FPosPrinter.ColunasFonteCondensada, '|'));

  for i := 0 to FpNFe.pag.Count - 1 do
  begin
    if (UpperCase(FpNFe.pag.Items[i].tPag) = 'DINHEIRO') then
      FPosPrinter.Buffer.Add('<c>' + ACBrStr(PadSpace(FormaPagamentoToDescricao(FpNFe.pag.Items[i].tPag) + '|' + FormatFloatBr(FpNFe.pag.Items[i].vPag +
        FpNFe.pag.vTroco), FPosPrinter.ColunasFonteCondensada, '|')))
    else
      FPosPrinter.Buffer.Add('<c>' + ACBrStr(PadSpace(FormaPagamentoToDescricao(FpNFe.pag.Items[i].tPag) + '|' + FormatFloatBr(FpNFe.pag.Items[i].vPag),
        FPosPrinter.ColunasFonteCondensada, '|')));
  end;

  Troco := IIf(FpNFe.pag.vTroco > 0, FpNFe.pag.vTroco, vTroco);

  if Troco > 0 then
    FPosPrinter.Buffer.Add('<c>' + PadSpace('Troco R$|' + FormatFloatBr(Troco), FPosPrinter.ColunasFonteCondensada, '|'));

end;

 

Link para o comentário
Compartilhar em outros sites

Pessoal,

  Despresem o codigo acima, faltou um pequeno comando, segue corrigido agora

 


procedure TACBrNFeDANFeESCPOS.GerarPagamentos;
var
  i: Integer;
  Troco: Real;
begin
  // Total := 0;
  FPosPrinter.Buffer.Add('<c>' + PadSpace('FORMA DE PAGAMENTO | VALOR PAGO R$', FPosPrinter.ColunasFonteCondensada, '|'));

  for i := 0 to FpNFe.pag.Count - 1 do
  begin
    if (UpperCase(FormaPagamentoToDescricao(FpNFe.pag.Items[i].tPag)) = 'DINHEIRO') then
      FPosPrinter.Buffer.Add('<c>' + ACBrStr(PadSpace(FormaPagamentoToDescricao(FpNFe.pag.Items[i].tPag) + '|' + FormatFloatBr(FpNFe.pag.Items[i].vPag +
        FpNFe.pag.vTroco), FPosPrinter.ColunasFonteCondensada, '|')))
    else
      FPosPrinter.Buffer.Add('<c>' + ACBrStr(PadSpace(FormaPagamentoToDescricao(FpNFe.pag.Items[i].tPag) + '|' + FormatFloatBr(FpNFe.pag.Items[i].vPag),
        FPosPrinter.ColunasFonteCondensada, '|')));
  end;

  Troco := IIf(FpNFe.pag.vTroco > 0, FpNFe.pag.vTroco, vTroco);

  if Troco > 0 then
    FPosPrinter.Buffer.Add('<c>' + PadSpace('Troco R$|' + FormatFloatBr(Troco), FPosPrinter.ColunasFonteCondensada, '|'));

end;

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Já que vc quer imprimir algo que não está no XML, basta antes de chamar a impressão alterar o valor do campo pag.Items.vPag

djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link para o comentário
Compartilhar em outros sites

Opa Andre;

  Mas foi isso que fiz no codigo, estou fazendo isso ja a uns 3 meses, mas sempre que atualizo, tenho que fazer a alteração novamente no ACBr

Segue codigo que eu modifico

if (UpperCase(FormaPagamentoToDescricao(FpNFe.pag.Items[i].tPag)) = 'DINHEIRO') then
      FPosPrinter.Buffer.Add('<c>' + ACBrStr(PadSpace(FormaPagamentoToDescricao(FpNFe.pag.Items[i].tPag) + '|' + FormatFloatBr(FpNFe.pag.Items[i].vPag + FpNFe.pag.vTroco), FPosPrinter.ColunasFonteCondensada, '|')))
    else
      FPosPrinter.Buffer.Add('<c>' + ACBrStr(PadSpace(FormaPagamentoToDescricao(FpNFe.pag.Items[i].tPag) + '|' + FormatFloatBr(FpNFe.pag.Items[i].vPag),
        FPosPrinter.ColunasFonteCondensada, '|')));

 

O Codigo anterior não temo if de dinheiro, segue como é originalmente

      FPosPrinter.Buffer.Add('<c>' + ACBrStr(PadSpace(FormaPagamentoToDescricao(FpNFe.pag.Items[i].tPag) + '|' + FormatFloatBr(FpNFe.pag.Items[i].vPag),
        FPosPrinter.ColunasFonteCondensada, '|')));

 

O que meus clientes reclamam, é que na forma original, sai por exemplo, que o cliente pagou uma conta de R$ 45,00, sai, total dos produtos R$ 45,00, se pagar com uma nota de R$ 50,00, vai sair impresso , dinheiro R$ 45,00 e troco R$ 5,00, se pagar com uma nota de R$ 100,00, sai dinheiro R$ 45,00 e troco R$ 55,00.

E o que vemos na maioria dos outros sistema de supermercado é sair tipo Total produtos R$ 45,00 (que ja sai em todos os casos correto), Dinheiro R$ 100,00 e Troco R$ 55,00, por isso fiz a modificação nos fontes do ACBr.

Mas se não for possivel colocar no SVN por algum motivo, sem problemas, fico fazendo a alteração aqui mesmo sempre que atualizar.

Link para o comentário
Compartilhar em outros sites

  • Moderadores
16 horas atrás, andrefaria disse:

Mas se não for possivel colocar no SVN por algum motivo, sem problemas, fico fazendo a alteração aqui mesmo sempre que atualizar.

O que o André quis dizer é que você não precisa alterar o código do ACBr pra isso, pode fazer diretamente pela sua aplicação.

  ACBrNFe1.NotasFiscais.LoadFromFile('C:\PATH\TO\ARQUIVO.XML');
  
  if ACBrNFe1.NotasFiscais.Items[0].NFe.pag.vTroco > 0 then
  begin
    for I := 0 to ACBrNFe1.NotasFiscais.Items[0].NFe.pag.Count - 1 do
    begin
      if ACBrNFe1.NotasFiscais.Items[0].NFe.pag.Items[I].tPag = fpDinheiro then
      begin
        ACBrNFe1.NotasFiscais.Items[0].NFe.pag.Items[I].vPag := ACBrNFe1.NotasFiscais.Items[0].NFe.pag.Items[I].vPag +
          ACBrNFe1.NotasFiscais.Items[0].NFe.pag.vTroco;
        Break;
      end;
    end;
  end;

  ACBrNFe1.NotasFiscais.Imprimir;

 

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

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

Bom dia;

  Não sei como poderia fazer isso na minha aplicação, pois eu mando imprimir atravez do load do  XML que recebo apos a transmissão, ja com protocolo, se eu mandar o fpDinheiro  maior, é rejeitado, se eu mandar certo, e quando for imprimir alterar o XML, vou estar corrompendo o mesmo, pois a assinatura vai ficar invalida.

  Ou existe outro meio que não conheco ?

Link para o comentário
Compartilhar em outros sites

  • Moderadores
35 minutos atrás, andrefaria disse:

Bom dia;

  Não sei como poderia fazer isso na minha aplicação, pois eu mando imprimir atravez do load do  XML que recebo apos a transmissão, ja com protocolo, se eu mandar o fpDinheiro  maior, é rejeitado, se eu mandar certo, e quando for imprimir alterar o XML, vou estar corrompendo o mesmo, pois a assinatura vai ficar invalida.

  Ou existe outro meio que não conheco ?

Não precisa alterar o XML, apenas alterar os valores do componente em memória antes de imprimir.

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

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Moderadores
1 hora atrás, daniel_paixao disse:

Depois dessa ultima atualização, a NFC-e está saindo com os centavos cortados no total. Não mudei nada no sistema, apenas atualizei o ACBr, compilei e atualizei no cliente, começou com isso.

Favor manter-se no assunto do tópico.

Seu problema tem a haver com alterações mais recentes no componente.

Acompanhe o tópico a seguir:

 

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

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

  • 4 meses depois ...

Boa tarde, @André Ferreira de Moraes e @BigWings gostaria de ver com vocês a possibilidade de subir esse código, pois o exemplo que você postou de como resolver não serve para que usar o conjunto de componentes ACBrECF + ACBrECFVirtualNFCe pois quando a NFCe é aprovada o cupom e impresso automaticamente pelo componente pois o método  "TACBrECFVirtualNFCeClass.FechaCupomVirtual" executa o .imprimir, ou seja não tem a possibilidade de fazer a alteração do vPag antes de chegar no imprimir do fecharCupomVirtual Segue o trecho do código.

      with fsACBrNFCe do
      begin
        NotasFiscais.Items[0].NFe.InfAdic.infCpl := NotasFiscais.Items[0].NFe.InfAdic.infCpl + sLineBreak + Observacao;

        if Configuracoes.Geral.FormaEmissao = teOffLine then
        begin
          NotasFiscais.Assinar;
          NotasFiscais.Validar;
          //NotasFiscais.Items[0].Confirmada := True;

          // imprimir obrigatoriamente duas vias quando em off-line
          // uma para consumidor e outra para o estabelecimento
          DANFE.ViaConsumidor := True;
          aqui===============>NotasFiscais.Items[0].Imprimir;

          if fsImprimir2ViaOffLine then
          begin
            DANFE.ViaConsumidor := False;
            NotasFiscais.Items[0].Imprimir;
          end;
        end
        else
        begin
          Enviar(NotasFiscais.Items[0].NFe.Ide.nNF, false, true);

          if WebServices.Enviar.cStat <> 100 then
          begin
            cStat := IntToStr(WebServices.Enviar.cStat);
            xMotivo := ACBrStrToAnsi(WebServices.Enviar.xMotivo);

            raise EACBrNFeException.Create('Erro ao enviar Dados da Venda:' + sLineBreak +
              'cStat: ' + cStat + sLineBreak +
              'xMotivo: ' + xMotivo);
          end;
        end;

        ChaveCupom := NotasFiscais.Items[0].NFe.infNFe.ID;

        if NotasFiscais.Items[0].Confirmada then
          aqui===============> NotasFiscais.Items[0].Imprimir;
      end;

 

Warquia Pereira
Analista de Sistemas e Desenvolvedor

Link para o comentário
Compartilhar em outros sites

  • Moderadores
40 minutos atrás, Warquia Pereira disse:

Boa tarde, @André Ferreira de Moraes e @BigWings gostaria de ver com vocês a possibilidade de subir esse código, pois o exemplo que você postou de como resolver não serve para que usar o conjunto de componentes ACBrECF + ACBrECFVirtualNFCe pois quando a NFCe é aprovada o cupom e impresso automaticamente pelo componente pois o método  "TACBrECFVirtualNFCeClass.FechaCupomVirtual" executa o .imprimir, ou seja não tem a possibilidade de fazer a alteração do vPag antes de chegar no imprimir do fecharCupomVirtual Segue o trecho do código.

Não compreendi a alteração.

Anexe o fonte modificado.

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

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

@BigWings Obrigado por responder, Segue em anexo conforme solicitado, também estou anexando como será impresso vPag e Troco nessa correção proposta.

Obs: Ficou compatível com a versão 3.10 e 4.00

IMG_20180316_091136379.jpg.a9b32c8383cf21caab9739ebd9e4d309.jpg

ACBrNFeDANFeESCPOS.pas

Editado por Warquia Pereira

Warquia Pereira
Analista de Sistemas e Desenvolvedor

Link para o comentário
Compartilhar em outros sites

  • Moderadores
11 minutos atrás, Warquia Pereira disse:

 Obrigado por responder, Segue em anexo conforme solicitado, também estou anexando como será impresso vPag e Troco nessa correção proposta.

Compreendi a intenção, mas de minha parte, não será implementado no componente.

A NFCe deve ser impressa com os dados do XML, foi criada uma exceção para que se seja impresso o valor do troco na 3.10, mas essa  questão já foi solucionada oficialmente na versão 4.00.

Basta informar o valor pago pelo cliente e o valor do troco que é feita a validação se vPag - vTroco = vNF. Nenhuma alteração no componente é necessária.

A sugestão dada neste tópico foi para o desenvolvedor que insistir em informar o vPag diferente do valor do XML na 3.10.

Sua implementação também afeta todas as emissões de NFCe pelo DANFE ESC/Pos e não apenas as emitidas pelo ACBrECFVirtualNFCe que você disse que não tinha como alterar antes da impressão.

Então minha sugestão nesse caso é que crie um evento OnAntesDeImprimir no ACBrECFVirtualNFCe que permita o acesso ao objeto NFe para que cada um altere se desejar.

  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2204 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.