Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Na impressora Bematech MP-2100 TH-FI, eu faço um pagamentos de um título no valor

de 20R$ uma sangria de 10R$ e um lastro de 5R$, quando tiro

a Redução Z no totalizador ele aparece correto o valor dos três,

porém quando vou pegar os dados da última redução z, no totalizador dos 

títulos pagos está vindo zerado.

Aparece assim:

 

SA SANGRIA   10

SU SUPRIMENTO  5

09 PAGTO DE TITULO 0

 

Sendo que eu fiz o pagamento de título de 20R$.

Alguém poderia me ajudar, só está faltando isso para eu terminar o registro R03.

 

  • Consultores
Postado

Você está usando o DadosUltimaReducaoZ ou DadosReducaoZ?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Fundadores
Postado

Nem todos os ECFs respondem com informações completas APÓS a Z.... (Veja os comentários nos fontes desse método, da classe Bematech) 

É muito mais seguro se você chamar ACBrECF.DadosReducaoZ antes de comandar a Red.Z

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.

Postado

Mas Daniel Simões, o R02 e R03 não é relativa a última redução z (no caso a que acabou de ser tirada)? Estou pegando as informações de acordo

com esse exemplo: http://www.regys.com.br/lendo-dados-da-reducao-z-utilizando-o-acbr/

 

Até nesse próprio exemplo quando baixei os fontes (http://www.regys.com.br/downloads/) e testei não apareceu

o título pago. Eu estava vendo o código do ACBR por dentro e cheguei aqui:

 

Classe: ACBrECFBematech

 

 

      S :=  copy(RetCmd,1103,28) +  // Sangria(14) + Suprimento(14)
              copy(RetCmd,739,364) ;  // Não ICMS  (392)  28 * 14 (2 primeiros vem vazios ??)
      SS := copy(RetCmd,161,8)   +  // Contadores: Sangria(4) + Suprimento(4)
            copy(RetCmd,57,104);    // Não ICMS(112) 28 * 4  (2 primeiros vem vazios ??)
 
      // aqui ele pega os totais de cada comprovante não fiscal e adiciona ao TotalizadoresNaoFiscais;
 
      for I := 0 to fpComprovantesNaoFiscais.Count - 1 do
      begin
        Clipboard.AsText := S;     // EU COLOQUEI !!!
        CNFZ := TACBrECFComprovanteNaoFiscal.Create ;
        CNFZ.Assign( fpComprovantesNaoFiscais );
        CNFZ.Total    := RoundTo( StrToFloatDef( copy(S,(I*14)+1,14),0) / 100, -2) ;
        CNFZ.Contador := StrToIntDef( copy(SS,(I*4)+1,4), 0);
 
        TotalizadoresNaoFiscais.Add( CNFZ ) ;
      end;
 
 
Por meio do clipboard peguei essa informação:
 
Ele pega de 14 em 14, a sangria que foi de 5 reais e o suprimento que foi de 10 está correto, pois ele conta com duas casas decimais depois do valor
mas o título pago que foi 12,15 que está lá na frente não está pegando...
 
00000000000500000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 
Se alguém puder dar uma conferida na classe para me ajudar, serei muito grato.
Postado

Na redução z tem uma parte que é destinada aos totalizadores não fiscais: ex: Borderô, Cheques, Sangria, Suprimento, despesas, Pagamento de títulos (pagamento de vendas a prazo). O problema é que após a redução z não estou conseguindo recuperar o valor do pagamento de títulos, para colocar no totalizador não fiscal (OPNF) da tabela R03. Entendeu agora?

  • Consultores
Postado

O que você chama de título pago?

R02 e R03 são respectivamente a redução Z e as aliquotas dela, não estou entendendo a tua dúvida.

Régys, acho que é um Totalizador Não Fiscal, pois ele alistou junto com Sangria e Suprimento.

 

 

Anderson,

 

Acho que sei o motivo. Seu comprovante não fiscal está fora da ordem. Ele deveria ter um índice menor, (como 01por exemplo), mas está com índice 09. Pelo que me lembro do código de cabeça e o que você postou aí, o código não leva isso em conta...

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado

ok, só para concluir...

 

essa parte do código que era para retornar os títulos pagos está vindo zerado.

 

 

  for I := 0 to ReducaoZ.TotalizadoresNaoFiscais.Count - 1 do
  begin
    with ReducaoZ.TotalizadoresNaoFiscais do
    begin
      Indice
      Descricao
      PermiteVinculado
      FormaPagamento
      Total
      Contador
    end;
  end;
 
Vou continuar procurando o problema. Valeu.
Postado

Resolvi modificando o ACBrECFBematech, usei um copy e peguei diretamente o valor do título recebido por meio da sua posição nos dados da redução z. Se

alguém tiver uma forma melhor, fico no aguardo, para poder melhorar.

  • Consultores
Postado

Se você postar o código a gente pode analisar.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Fundadores
Postado

Por favor anexe a unit modificada para analise...

 

Lembre-se que nem todos os ECFs retornam essa informação em DadosUltimaReducaoZ, ou seja, seu código pode não funcionar em outros modelos...

 

Por isso que eu uso algo como:

 

A := ACBrECF1.DadosReducaoZ
ACBrECF1.ReducaoZ
B := ACBrECF1.DadosUltimaReducaoZ
C := Merge( A, B ) 
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.

  • Fundadores
Postado

Sim... segue o código;

 

 

procedure MergeInis(const IniSource, IniDest : TIniFile ; ReplaceKeys : Boolean;
                        IgnoreZeros : Boolean) ;
Var
  Sections, Keys : TStringList ;
  I, J : Integer ;
  Section, Key, NewValue : String ;
begin
  Sections := TStringList.Create;
  Keys     := TStringList.Create;
  try
     Sections.Clear;
     IniSource.ReadSections( Sections );
     For I := 0 to Sections.Count-1 do
     begin
        Section := Sections[i];

        Keys.Clear;
        IniSource.ReadSection( Section, Keys );
        For J := 0 to Keys.Count-1 do
        begin
           Key      := Keys[J] ;
           NewValue := IniSource.ReadString(Section, Key, '' );
           if IgnoreZeros and (NewValue = '0') then
              NewValue := '';

           if (NewValue <> '') then
           begin
              if ReplaceKeys or (IniDest.ReadString(Section, Key, '' ) = '') then
                 IniDest.WriteString( Section, Key, NewValue );
           end ;
        end ;
     end ;
  finally
     Sections.Free;
     Keys.Free ;
  end ;

end; 
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.

Postado
Só alterei no ACBrECFBematech...
 
Antes estava assim, porém por causa da ordem do título recebido estava vindo zerado:
for I := 0 to fpComprovantesNaoFiscais.Count - 1 do
      begin
        CNFZ := TACBrECFComprovanteNaoFiscal.Create ;
        CNFZ.Assign( fpComprovantesNaoFiscais );
        CNFZ.Total    := RoundTo( StrToFloatDef( copy(S,(I*14)+1,14),0) / 100, -2) ;
        CNFZ.Contador := StrToIntDef( copy(SS,(I*4)+1,4), 0);
 
        TotalizadoresNaoFiscais.Add( CNFZ ) ;
      end;
 
apenas mudei para pegar os títulos recebidos de acordo com a posição que ele se encontra na variável RetCmd.
 
for I := 0 to fpComprovantesNaoFiscais.Count - 1 do
      begin
        CNFZ := TACBrECFComprovanteNaoFiscal.Create ;
        CNFZ.Assign( fpComprovantesNaoFiscais );
 
        if pos('PAGTO DE T', CNFZ.Descricao) > 0 then 
        begin
          CNFZ.Total := RoundTo(StrToCurr(copy(RetCmd,823,14)) / 100, -2);  {aqui, ele pega de acordo com a posição na variável RetCmd...}
          CNFZ.Contador := StrToInt(copy(RetCmd,81,4));
        end
        else
        begin
          CNFZ.Total    := RoundTo(StrToFloatDef( copy(S,(I*14)+1,14),0) / 100, -2) ;
          CNFZ.Contador := StrToIntDef( copy(SS,(I*4)+1,4), 0);
        end;
 
        TotalizadoresNaoFiscais.Add( CNFZ ) ;
      end;
  • Fundadores
Postado

Não consegui compreender corretamente as suas modificações...

 

Acredito que a linha:

 

 

        if pos('PAGTO DE T', CNFZ.Descricao) > 0 then

 

Não seja uma implementação muito segura... o texto pode variar de um ECF para outro...
 
Qual é a sua ideia no geral ? Ou melhor, o que está errado no código atual do ACBr ? Em qual posição ele está lendo atualmente, e qual seria a posição correta ?
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.

Postado

mas Daniel Simões eu estou alterando na unit ACBrECFBematech. Que é a implementação expecífica da bematech. Ou seja só estou alterando

para a bematech, essa alteração não vai impactar nas outras impressoras.

  • Fundadores
Postado

O que quis dizer é que a maneira que está implementado, pesquisando por uma String "Hard Coded", pode quebrar para outros modelos de ECF Bematech...

 

infelizmente não posso subir a modificação para o SVN da maneira que está...

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.

Postado

O problema é um pouco difícil de explicar mas vou tentar...

 

Para testar eu fiz:

1 sangria de 5 R$

1 suprimento de 10 R$

1 pagamento de título de 12,15 R$

 

No ECF estão cadastrado assim os totalizadores não fiscais:

 

06 BORDERO

07 CHEQUES

08 DESPESAS

09 PAGTO DE TITULO

29 SANGRIA

30 SUPRIMENTO

 

 

Esse " for "  faz um loop nos comprovantes não fiscais

 

 

for I := 0 to fpComprovantesNaoFiscais.Count - 1 do
      begin
        Clipboard.AsText := S;     // EU COLOQUEI !!!
        CNFZ := TACBrECFComprovanteNaoFiscal.Create ;
        CNFZ.Assign( fpComprovantesNaoFiscais );
        CNFZ.Total    := RoundTo( StrToFloatDef( copy(S,(I*14)+1,14),0) / 100, -2) ;
        CNFZ.Contador := StrToIntDef( copy(SS,(I*4)+1,4), 0);
 
        TotalizadoresNaoFiscais.Add( CNFZ ) ; 
      end;
 
o texto que ele extrai o valor dos totalizadores não fiscais é esse abaixo, que eu peguei por meio do clipboard que acrescentei no código acima:
 
00000000000500000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 
No " for " ele pega os valores de 14 em 14 digitos, sendo que os últimos dois dígitos reservados para casas decimais
No primeiro loop o CNFZ.Total recebe 00000000000500 que é referente a sangria que eu fiz, até ai está ok, fiz uma sangria de 5 R$.
No segundo loop o CNFZ.Total recebe 00000000001000 que é referente ao suprimento que eu fiz, também está ok.
No terceiro loop ele continua de 14 em 14, ai o CNFZ.Total recebe 00000000000000 que é referente ao borderô, também está ok, não realizei borderô.
No quarto loop o CNFZ.Total recebe 00000000000000 que é referente aos cheques, também está ok, não fiz cheques.
No quinto loop o CNFZ.Total recebe 00000000000000 que é referente as despesas, também está ok, não fiz despesas.
No sexto loop o CNFZ.Total recebe 00000000000000 que deveria ser referente aos títulos pagos, está errado paguei títulos no valor de 12,15.
 
Se prestar atenção o valor 1215 está bem a frente, precisaria de mais uns três loops para pegar corretamente. 
 
Ai, fiz isso para pegar o valor correto:
 
 if pos('PAGTO DE T', CNFZ.Descricao) > 0 then 
        begin
          CNFZ.Total := RoundTo(StrToCurr(copy(RetCmd,823,14)) / 100, -2);  {aqui, ele pega de acordo com a posição na variável RetCmd...}
          CNFZ.Contador := StrToInt(copy(RetCmd,81,4));
        end
 
pegando direto da posição correta da String.
Ufa! Espero ter explicado melhor.   
Postado

Daniel Simões entendi a sua posição, realmente há uma falha pois se na impressora for cadastrado o totalizador não fiscal de pagamento de títulos de outra forma esse código possivelmente irá falhar... Vou pensar em outra solução melhor.

  • Fundadores
Postado

Obrigado pelo post... agora compreendi.. e realmente concordo que deve ser um problema em relação a posição de programação do Registrador não iniciar em 1...

 

Observe por favor se no Indice do REgistrados está a posição correta... Se estiver talvez o loop abaixo funcione:

 

 

  for I := 0 to fpComprovantesNaoFiscais.Count - 1 do
      begin
        CNFZ := TACBrECFComprovanteNaoFiscal.Create ;
        CNFZ.Assign( fpComprovantesNaoFiscais[I] );
        P := StrToIntDef(CNFZ.Indice,0)-1
        CNFZ.Total    := RoundTo( StrToFloatDef( copy(S,(P*14)+1,14),0) / 100, -2) ;
        CNFZ.Contador := StrToIntDef( copy(SS,(P*4)+1,4), 0);

        TotalizadoresNaoFiscais.Add( CNFZ ) ;
      end;        
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.

Postado

Daniel Simões, encontrei a forma, de como já está funcionando no sistema:

 

Primeiro vou te mostrar uma coisa:

esse comentário tem mais em cima do código que postei anteriormente, falando os índices de onde estão os totalizadores:

 

{ do índice 711 ao 1130 são destinados aos totalizadores não fiscais }

 

 

 //   TPNS Totalizadores Parciais Não sujeitos ao ICMS 28x7 (28x14)       711 ,1102  
 //   Sangria Totalizador de Sangria 7 (14)                                               1103,1116
 //   Suprimento Totalizador de Suprimento 7 (14)                                    1117,1130
 
O R03 ele pede o valor total dos comprovantes não fiscais, ou seja não importa qual o totalizador não fiscal, o que importa é o valor total que dará.
 
Então, para resolver é só fazer um loop entre o índice 711 ao 1130 pegando de 14 em 14 e somando o valor, no final esse valor total pode
ser retornado de alguma forma, no caso, o loop seria feito nessa string:
 
00000000000500000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 
Acho que assim vai dar certo. O que tu achas?
  • Fundadores
Postado

Parece que vc está focado em resolver o seu problema apenas... a minha preocupação é fazer com que a classe funcione sempre, mesmo no caso de ECFs que não estão programados corretamente...  A sua sugestão não corrige o problema de preenchimento dos valores dos registradores específicos...

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.

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