Ir para conteúdo
  • Cadastre-se

dev botao

ACBrECFVirtual VendeItem e IniciaFechamentoCupom com Desconto


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

Recommended Posts

  • Membros Pro

Estou tendo problemas ao finalizar uma NFC-e utilizando o ECFVirtual quando utilizo desconto no item ou desconto no cupom.

 

Para o desconto no cupom (nesse exemplo tentei dar um desconto de R$ 3,00) recebo o seguinte retorno: Rejeicao: NFC-e com somatorio dos pagamentos diferente do total da Nota Fiscal

 

Para o desconto no item (nesse exemplo tentei dar um desconto de R$ 0,50) recebo o seguinte retorno: '-0.50' violates pattern constraint of '0\.[0-9]{1}[1-9]{1}|0\.[1-9]{1}[0-9]{1}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?'.
The element '{http://www.portalfiscal.inf.br/nfe}vDesc' with value '-0.50' failed to parse.

 

Alguém já teve esse tipo de problema com o ECFVirtual para a NFC-e?

 

http://www.projetoacbr.com.br/forum/topic/25627-acbrecfvirtual-vendeitem-e-iniciafechamentocupom-com-desconto/#comment-166015

945757316_FantastsoftLogotipo100px.png.20c116e19bad4f7436640307ee0fa01a.png   Endrigo Rodrigues
Fantastsoft Sistemas

Node / Delphi 11.2
Belo Horizonte/MG

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
procedure TACBrECFVirtualNFCeClass.SubtotalizaCupomVirtual(
  DescontoAcrescimo: Double; MensagemRodape: AnsiString);
begin
  with fsACBrNFCe do
  begin
    //TODO: Precisa ratear desconto entre os itens
    if DescontoAcrescimo > 0 then
      NotasFiscais.Items[0].NFe.Total.ICMSTot.vOutro := DescontoAcrescimo
    else
      NotasFiscais.Items[0].NFe.Total.ICMSTot.vDesc  := DescontoAcrescimo;

    NotasFiscais.Items[0].NFe.InfAdic.infCpl := MensagemRodape;
  end;
end;

//TODO: Precisa ratear desconto entre os itens

 

Posso tentar fazer esse rateio ou já tem alguém fazendo?

 

945757316_FantastsoftLogotipo100px.png.20c116e19bad4f7436640307ee0fa01a.png   Endrigo Rodrigues
Fantastsoft Sistemas

Node / Delphi 11.2
Belo Horizonte/MG

 

Link para o comentário
Compartilhar em outros sites

Em 11/11/2015 14:59:27, Endrigo Fantastsoft disse:

procedure TACBrECFVirtualNFCeClass.SubtotalizaCupomVirtual(
  DescontoAcrescimo: Double; MensagemRodape: AnsiString);
begin
  with fsACBrNFCe do
  begin
    //TODO: Precisa ratear desconto entre os itens
    if DescontoAcrescimo > 0 then
      NotasFiscais.Items[0].NFe.Total.ICMSTot.vOutro := DescontoAcrescimo
    else
      NotasFiscais.Items[0].NFe.Total.ICMSTot.vDesc  := DescontoAcrescimo;

    NotasFiscais.Items[0].NFe.InfAdic.infCpl := MensagemRodape;
  end;
end;

//TODO: Precisa ratear desconto entre os itens

 

Posso tentar fazer esse rateio ou já tem alguém fazendo?

 

Bom dia,

Você está passando um valor negativo. Tente o seguinte:

NotasFiscais.Items[0].NFe.Total.ICMSTot.vDesc := DescontoAcrescimo * -1;
Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...
  • Moderadores

Boa tarde!

acredito que não se tenha chego até aqui!

ao conferir vi que o Daniel subiu algumas alterações dia 25!

pediria para que faça um backup de seu arquivo, atualize para o que está no svn e depois refaça os testes!

caso continue o problema aplique ele e rê teste e dai anexe novamente que irei confrontar e subir ao svn se necessário!

 

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

  • Membros Pro
36 minutos atrás, Juliomar Marchetti disse:

Boa tarde!

acredito que não se tenha chego até aqui!

ao conferir vi que o Daniel subiu algumas alterações dia 25!

pediria para que faça um backup de seu arquivo, atualize para o que está no svn e depois refaça os testes!

caso continue o problema aplique ele e rê teste e dai anexe novamente que irei confrontar e subir ao svn se necessário!

 

Juliomar, estou fazendo isso agora mas observo que foi retirado o parâmetro DescontoAcrescimo no procedimento SubtotalizaCupomVirtual, necessário para fazer o rateio que eu havia feito do desconto/acréscimo do cupom para os itens.

Existe algum outro lugar onde posso capturar o desconto ou acréscimo aplicado ao cupom para poder realizar o rateio no momento do SubtotalizaCupomVirtual? Esquece já descobri, agora é no fpCupom.DescAcresSubtotal.

Editado por endrigo
945757316_FantastsoftLogotipo100px.png.20c116e19bad4f7436640307ee0fa01a.png   Endrigo Rodrigues
Fantastsoft Sistemas

Node / Delphi 11.2
Belo Horizonte/MG

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Leia o post... e compreenda o que mudou... o componente que vc usa é filho dele..

Veja como o "Pai" dele, usa esse método:

procedure TACBrECFVirtualBufferClass.SubtotalizaCupomVirtual(
  MensagemRodape: AnsiString);
var
  S: String;
begin
  ZeraBuffer;
  fsBuffer.Add('</linha_simples>');

  if fpCupom.DescAcresSubtotal <> 0 then
  begin
    if fpCupom.DescAcresSubtotal < 0 then
.......                                  

reparou em "fpCupom.DescAcresSubtotal" ??

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
31 minutos atrás, Daniel Simoes disse:

Leia o post... e compreenda o que mudou... o componente que vc usa é filho dele..

Veja como o "Pai" dele, usa esse método:


procedure TACBrECFVirtualBufferClass.SubtotalizaCupomVirtual(
  MensagemRodape: AnsiString);
var
  S: String;
begin
  ZeraBuffer;
  fsBuffer.Add('</linha_simples>');

  if fpCupom.DescAcresSubtotal <> 0 then
  begin
    if fpCupom.DescAcresSubtotal < 0 then
.......                                  

reparou em "fpCupom.DescAcresSubtotal" ??

Sim Daniel, isso eu já havia compreendido. Porém a questão da NFC-e não está realizando o cálculo do desconto do item corretamente, e não tem codificação para rateio dos itens quando desconto ou acréscimo no cupom.

No arquivo ACBrECFVirtualNFCe.pas

Linha 496:

Está assim:

       Det.Prod.vDesc  := ItemCupom.DescAcres;

Deveria estar assim:

       Det.Prod.vDesc  := ItemCupom.DescAcres * -1;

 

Linha 519:

Está assim:

      Det.Imposto.ICMS.vBC   := RoundABNT(ItemCupom.Qtd*ItemCupom.ValorUnit,2);

Deveria estar assim:

      Det.Imposto.ICMS.vBC   := RoundABNT((ItemCupom.Qtd*ItemCupom.ValorUnit)+ItemCupom.DescAcres,2);

 

O procedimento SubtotalizaCupomVirtual que se inicia na linha 545 que deveria realizar o rateio do desconto ou acréscimo do cupom para os itens, não faz.

Avalie se esse procedimento para o rateio seria o correto:

procedure TACBrECFVirtualNFCeClass.SubtotalizaCupomVirtual(
  MensagemRodape: AnsiString);
var
  i, ItMaior: Integer;
  ItDescAcre: Array of Extended;
  Total, Valor, TotDescAcre, VlItMaior: Extended;
begin
  with fsACBrNFCe do
  begin
    if fpCupom.DescAcresSubtotal > 0 then
      Valor := fpCupom.DescAcresSubtotal
    else
      Valor  := fpCupom.DescAcresSubtotal * -1;
    if Valor <> 0 then
    begin
      Total := 0;
      ItMaior := -1;
      VlItMaior := 0;
      TotDescAcre := 0;
      SetLength(ItDescAcre, NotasFiscais.Items[0].NFe.Det.Count);
      for i := 0 to NotasFiscais.Items[0].NFe.Det.Count - 1 do
        Total := Total + NotasFiscais.Items[0].NFe.Det[i].Prod.vProd;
      for i := 0 to NotasFiscais.Items[0].NFe.Det.Count - 1 do
      begin
        ItDescAcre[i] := RoundABNT(Valor * (NotasFiscais.Items[0].NFe.Det[i].Prod.vProd / Total),2);
        TotDescAcre := TotDescAcre + ItDescAcre[i];
        if ItDescAcre[i] > VlItMaior then
        begin
          VlItMaior := ItDescAcre[i];
          ItMaior := i;
        end;
      end;
      if TotDescAcre <> Valor then
        ItDescAcre[ItMaior] := ItDescAcre[ItMaior] - (TotDescAcre - Valor);

      for i := 0 to NotasFiscais.Items[0].NFe.Det.Count - 1 do
      begin
        if fpCupom.DescAcresSubtotal > 0 then
           NotasFiscais.Items[0].NFe.Det[i].Prod.vOutro := NotasFiscais.Items[0].NFe.Det[i].Prod.vOutro + ItDescAcre[i]
        else
           NotasFiscais.Items[0].NFe.Det[i].Prod.vDesc := NotasFiscais.Items[0].NFe.Det[i].Prod.vDesc + ItDescAcre[i];
      end;
    end;

    if fpCupom.DescAcresSubtotal > 0 then
      NotasFiscais.Items[0].NFe.Total.ICMSTot.vOutro := Valor
    else
      NotasFiscais.Items[0].NFe.Total.ICMSTot.vDesc  := Valor;

    NotasFiscais.Items[0].NFe.InfAdic.infCpl := MensagemRodape;
  end;
end;

 

Já passei para o pessoal do departamento de depuração realizar os testes, mas ainda estou aguardando respostas. Mas já vou adiantando para vocês avaliarem as alterações.

 

945757316_FantastsoftLogotipo100px.png.20c116e19bad4f7436640307ee0fa01a.png   Endrigo Rodrigues
Fantastsoft Sistemas

Node / Delphi 11.2
Belo Horizonte/MG

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

sim, vc precisará fazer um Merge da sua Unit com a atual... realizando as modificações necessárias...

Basicamente, basta fazer uso de fpCupom e suas propriedades...

Após esse Merge, por favor envie a Unit modificada, que analiso para subirmos no SVN

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
1 minuto atrás, Daniel Simoes disse:

sim, vc precisará fazer um Merge da sua Unit com a atual... realizando as modificações necessárias...

Basicamente, basta fazer uso de fpCupom e suas propriedades...

Após esse Merge, por favor envie a Unit modificada, que analiso para subirmos no SVN

Essa já são alterações da atual. Vou aguardar os testes do pessoal da depuração daqui da empresa para passar o arquivo para vocês.

945757316_FantastsoftLogotipo100px.png.20c116e19bad4f7436640307ee0fa01a.png   Endrigo Rodrigues
Fantastsoft Sistemas

Node / Delphi 11.2
Belo Horizonte/MG

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Segue em anexo os arquivos com as respectivas modificações.

@Juliomar Marchetti, peço que faça as devidas confrontações e quando possível subir para o SVN.

Obrigado.

ACBrECFVirtualNFCe.zip

ACBrECFVirtual.zip

945757316_FantastsoftLogotipo100px.png.20c116e19bad4f7436640307ee0fa01a.png   Endrigo Rodrigues
Fantastsoft Sistemas

Node / Delphi 11.2
Belo Horizonte/MG

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Endrigo,

Em ACBrECFVirtual.pas, Notei que você sugere mover o bloco de envio do desconto (abaixo), para antes da chamada de "VendeItemVirtual( ItemCupom );"

    { Se o desconto é maior que zero envia o comando de desconto/acrescimo de item anterior }
    if ValorDescontoAcrescimo > 0 then
       DescontoAcrescimoItemAnterior( ValorDescontoAcrescimo, DescontoAcrescimo,
          TipoDescontoAcrescimo);

Isso causará problemas... o Desconto do Item será impresso antes da Venda do Item...

Qual o motivo dessa modificação ?

 

Em relação a ACBrECFVirtualNFCe.pas, já enviei para o SVN, com pequenos ajustes de endentação... Muito obrigado pela implementação...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
Em 08/02/2016 at 12:08, Daniel Simoes disse:

Endrigo,

Em ACBrECFVirtual.pas, Notei que você sugere mover o bloco de envio do desconto (abaixo), para antes da chamada de "VendeItemVirtual( ItemCupom );"


    { Se o desconto é maior que zero envia o comando de desconto/acrescimo de item anterior }
    if ValorDescontoAcrescimo > 0 then
       DescontoAcrescimoItemAnterior( ValorDescontoAcrescimo, DescontoAcrescimo,
          TipoDescontoAcrescimo);

Isso causará problemas... o Desconto do Item será impresso antes da Venda do Item...

Qual o motivo dessa modificação ?

 

Em relação a ACBrECFVirtualNFCe.pas, já enviei para o SVN, com pequenos ajustes de endentação... Muito obrigado pela implementação...

@Daniel Simoes, é que o processo de cálculo do desconto é feito sempre na venda do item, se não é definido os valores de desconto ou acréscimo para o item antes da venda, o XML é gerado sem os mesmos.

 

Editado por endrigo
945757316_FantastsoftLogotipo100px.png.20c116e19bad4f7436640307ee0fa01a.png   Endrigo Rodrigues
Fantastsoft Sistemas

Node / Delphi 11.2
Belo Horizonte/MG

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Mas se mudarmos isso, irá quebrar o funcionamento do ECFVirtualNaoFiscal...

Acho que uma possível solução, seria implementar o Desconto/Acréscimo ao Item no método:

procedure TACBrECFVirtualNFCeClass.DescontoAcrescimoItemAnteriorVirtual( ItemCupom: TACBrECFVirtualClassItemCupom; PorcDesc: Double); override

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
1 hora atrás, Daniel Simoes disse:

Experimente com a Unit em anexo...

ACBrECFVirtualNFCe.pas

Voltei a unit ACBrECFVirtual.pas para o original, com o desconto após o VendeItem, peguei a unit que você passou e testamos, deu tudo certo.

Tem uma previsão de quando subirá para o svn?

Editado por endrigo
945757316_FantastsoftLogotipo100px.png.20c116e19bad4f7436640307ee0fa01a.png   Endrigo Rodrigues
Fantastsoft Sistemas

Node / Delphi 11.2
Belo Horizonte/MG

 

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...

Olá,

Ao vender um produto com desconto estou recebendo a seguinte rejeição: 531 - Total da BC ICMS (id:W03) difere do somatório do valor dos itens (id:N15).

O produto que esta sendo vendido é Isento, então no evento QuandoVenderItem faço o seguinte tratamento:

  with Det.Imposto do
  begin    
    ICMS.pICMS := 0;
    ICMS.vICMS := 0;
    ICMS.vBC := 0
  end;

Porém, após esse tratamento está sendo chamado o DescontoAcrescimoItemAnteriorVirtual: 

procedure TACBrECFVirtualNFCeClass.DescontoAcrescimoItemAnteriorVirtual(ItemCupom: TACBrECFVirtualClassItemCupom; PorcDesc: Double);
var
  Det: TDetCollectionItem;
begin
  .....	

  if fsACBrNFCe.NotasFiscais.Items[0].NFe.Emit.CRT <> crtSimplesNacional then
  begin
    Det.Imposto.ICMS.vBC   := RoundABNT((ItemCupom.Qtd*ItemCupom.ValorUnit)+ItemCupom.DescAcres,2);
    Det.Imposto.ICMS.vICMS := RoundABNT( Det.Imposto.ICMS.vBC*(Det.Imposto.ICMS.pICMS/100),2);
  end; 
end;

 

Nesse caso, se o emitente não for do Simples, está sendo recalculado o vBC, vICMS, porém meu produto é Isento. vBC e vICMS não deveriam ir vazios no XML? Que procedimento deve-se fazer nesse caso?

 

[]'s

 

 

 

Link para o comentário
Compartilhar em outros sites

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