Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

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
Postado
  Em 18/07/2017 at 22:08, Juliomar Marchetti disse:

Hum. 

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

Expandir  

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

  • Moderadores
Postado
  Em 19/07/2017 at 01:35, 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

Expandir  

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: juliomar_m@yahoo.com.br
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

  • 1 mês depois ...
  • Moderadores
Postado
  Em 06/09/2017 at 20:17, 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.pasFetching info...

Expandir  

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: juliomar_m@yahoo.com.br
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado
  Em 06/09/2017 at 20:25, 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.

Expandir  

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

  • 1 mês depois ...
  • Membros Pro
Postado

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;

 

  • Membros Pro
Postado

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;

 

  • Membros Pro
Postado

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.

  • Moderadores
Postado
  Em 20/10/2017 at 19:21, 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.

Expandir  

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

 

 

  • Membros Pro
Postado

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 ?

  • Moderadores
Postado
  Em 21/10/2017 at 13:38, 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 ?

Expandir  

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

 

 

  • 2 semanas depois ...
  • Moderadores
Postado
  Em 01/11/2017 at 18:58, 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.

Expandir  

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

 

 

  • 4 meses depois ...
Postado

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

  • Moderadores
Postado
  Em 15/03/2018 at 20:34, 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.

Expandir  

Não compreendi a alteração.

Anexe o fonte modificado.

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

Projeto ACBr

 

 

  • Moderadores
Postado
  Em 16/03/2018 at 12:24, 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.

Expandir  

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

 

 

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