Jump to content

Assista click.png tectoy.png

C6 chamada_c6.png botao.png

ACBrECFVirtual VendeItem e IniciaFechamentoCupom com Desconto


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

Delphi XE2 / 10.4
Belo Horizonte/MG

 

Link to comment
Share on other sites

  • Consultores

Veja não é problema em ECF virtual mas sim ao validar os schemas e os dados no campo!

Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

Link to comment
Share on other 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

Delphi XE2 / 10.4
Belo Horizonte/MG

 

Link to comment
Share on other 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 to comment
Share on other sites

  • 2 months later...
  • Consultores

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
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

Link to comment
Share on other 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.

Edited by endrigo
945757316_FantastsoftLogotipo100px.png.20c116e19bad4f7436640307ee0fa01a.png   Endrigo Rodrigues
Fantastsoft Sistemas

Delphi XE2 / 10.4
Belo Horizonte/MG

 

Link to comment
Share on other sites

  • Consultores

Sim isso mesmo foi removido essa informação !

Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

Link to comment
Share on other 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 to comment
Share on other 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

Delphi XE2 / 10.4
Belo Horizonte/MG

 

Link to comment
Share on other 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 to comment
Share on other 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

Delphi XE2 / 10.4
Belo Horizonte/MG

 

Link to comment
Share on other 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

Delphi XE2 / 10.4
Belo Horizonte/MG

 

Link to comment
Share on other 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 to comment
Share on other 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.

 

Edited by endrigo
945757316_FantastsoftLogotipo100px.png.20c116e19bad4f7436640307ee0fa01a.png   Endrigo Rodrigues
Fantastsoft Sistemas

Delphi XE2 / 10.4
Belo Horizonte/MG

 

Link to comment
Share on other 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 to comment
Share on other 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?

Edited by endrigo
945757316_FantastsoftLogotipo100px.png.20c116e19bad4f7436640307ee0fa01a.png   Endrigo Rodrigues
Fantastsoft Sistemas

Delphi XE2 / 10.4
Belo Horizonte/MG

 

Link to comment
Share on other sites

  • 3 weeks later...
  • Membros Pro

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 to comment
Share on other sites

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