Ir para conteúdo
  • Cadastre-se

renesul

Membros
  • Total de ítens

    59
  • Registro em

  • Última visita

Posts postados por renesul

  1. E aí pessoal.

    Com a situação atual de abandono de IDEs não unicode tive que atualizar todos os sistemas para delphi 10.

    Ai surgiu a necessidade de botar a mão no bolso para atualizar outros componentes como a devexpress.

     

    Alguém conhece algum componente de grid para delphi (funcionalidades semelhantes) que seja grátis ou mais barato que o pacote da dev que está por volta de R$ 4500,00?

  2. Linux 64 funcionando 100%

    sudo apt-get install libxmlsec1-dev libltdl-dev  <--instala pacotes básicos

    Em 20/02/2015 at 16:03, William Duarte disse:

    Baixe no site : https://www.aleksey.com/xmlsec/download.html(versão .20)

     

    Extrai em uma pasta e fiz no terminal o seguinte :

     

    1) ./configure

    2) make

    3) make install

     

    Não precisa criar links simbólicos pois a versão baixada é normal, diferentemente da que vem com o debian, que é modificada sem a parte da carga dinâmica da biblioteca ativa e por isto o lazarus falha em achar a biblioteca...

    Só compilar o ACBR

    • Curtir 2
  3. Pssss decepcionante este compilador do delphi 7....

    O FPC do lazarus funcionou 100%

     

    Analisando o restante dos casos de uso da função RoundABNT no fonte ACBR me arrisco a dizer que é o único lugar onde a função pode receber um argumento com valor negativo é nesta classe ACBrECFVirtual.

    Estaremos migrando o sistema em breve pro Delphi Seatle ai espero que estes casos minimizem.

    Obrigado.

  4. --- ACBrECFVirtual.pas    (revision 11135)
    +++ ACBrECFVirtual.pas    (working copy)
    @@ -1008,6 +1008,7 @@
       );
     var
       ItemCupom: TACBrECFVirtualClassItemCupom;
    +  Desconto : Boolean;
     begin
       VerificaFaixaItem(NumItem);
     
    @@ -1016,9 +1017,15 @@
       if ItemCupom.DescAcres <> 0 then
         raise EACBrECFERRO.create(ACBrStr('Item ('+IntToStrZero(NumItem,3)+') já recebeu Desconto ou Acrescimo.')) ;
     
    +  if ADescAcres < 0 then
    +  begin
    +     Desconto   := True;
    +     ADescAcres := ADescAcres * -1;
    +  end;
    +
       ItemCupom.DescAcres := RoundABNT( ADescAcres, -2);
     
    -  fpSubTotal := fpSubTotal + ItemCupom.DescAcres;  // Atualiza SubTotal Cupom
    +  fpSubTotal := fpSubTotal + (ItemCupom.DescAcres * IfThen(Desconto, -1, 1));  // Atualiza SubTotal Cupom
     end;
     
     procedure TACBrECFVirtualClassCupom.CancelaItem(NumItem: Integer);

    ACBrECFVirtual.pas

  5. Uso o ecfvirtual para gerar NFC-e e SAT com o delphi 7.

    Ao aplicar um desconto de por exemplo R$ 2,00 na venda de um item é enviado pela procedure   TACBrECFVirtualClassCupom.DescAresItem(NumItem: Integer; ADescAcres: Double

    O desconto de 2 reais é passado como -2 para a função  RoundABNT que retorna o valor de -1,99 e não -2 que é esperado. 

    Passar número negativo para para  função RoundABNT pode retornar erro enquanto números positivos funcionam normal.

    Abaixo alteração que resolveu o problema pontualmente.

    --- ACBrECFVirtual.pas    (revision 11135)
    +++ ACBrECFVirtual.pas    (working copy)
    @@ -1016,8 +1016,14 @@
       if ItemCupom.DescAcres <> 0 then
         raise EACBrECFERRO.create(ACBrStr('Item ('+IntToStrZero(NumItem,3)+') já recebeu Desconto ou Acrescimo.')) ;
     
    +  if ADescAcres < 0 then
    +     ADescAcres := ADescAcres * -1;
    +
       ItemCupom.DescAcres := RoundABNT( ADescAcres, -2);
     
    +  if ADescAcres > 0 then
    +     ADescAcres := ADescAcres * -1;
    +
       fpSubTotal := fpSubTotal + ItemCupom.DescAcres;  // Atualiza SubTotal Cupom
     end;
     
     

  6. Exemplo: Após finalizar uma venda de R$ 200,00 e tentar realizar um pagamento de parcela com um valor menor, gera uma falha no meu sistema. 

    Investigando a situação pude constatar que ao usar (ACBrEcf.Subtotal - ACBrEcf.TotalPago) estava com os seguintes valores (200,00 - 50,00) = 150

    sendo que neste caso o valor de R$ 200,00 referente ao ACBrEcf.Subtotal da venda anterior não foi zerado e os R$ 50,00 são do cupom não fiscal atual.

    Solução: Ao realizar o comando ACBrEcf.AbreNaoFiscal definir o valor da variável fsSubTotal := 0.

    No meu caso uso o ecf daruma e ficou 100% notei pelo código que outras impressoras terão o mesmo problema. Uso o repositório trunk2 atualizado de ontem.

    Qualquer dúvida só mandar.

  7. Boa tarde.

     

    A alteração da revisão 6980 gerou um problema no retorno do método novo.

     

    function TACBrECFDaruma.GetNumLoja: String;
    Var
      RetCmd : AnsiString ;
    begin
      if Trim(fsNumECF) = '' then   o fsNumECF sempre vem com informação correta portanto nunca está pegando o número da loja
      begin
        if fpMFD then
           fsNumLoja := RetornaInfoECF('129')
        else
           fsNumLoja := inherited GetNumLoja ;
      end ;
     
      Result := fsNumLoja ;
    end;
     
     
    Não entendi o motivo do if mas ele está evitando a leitura na impressora Mach II. Se comentado funcionou 100%
     
     
    Até mais.
  8. Perfeito convergimos para a solução. Só que da uma olhada no código da revisão 6988 verá que o meu exemplo tentou explorar que a alteração feita não surtirá efeito almejado bastando adicionar o "Epsilon" para resolver conforme seu comentário.

     

    Valeu... É bom comentarmos no fórum este tipo de assuntos enriquece os conhecimentos.

    • Curtir 1
  9. Olá Daniel.

     

    A utilização da biblioteca math não resolveu o problema no código em questão para exemplificar coloquei um código de teste para a situação ser melhor compreendida.

     

    Volto a ressaltar que a questão é a soma de double com casas decimais "diferentes" dentro do if o que só vi acontecer no delphi.

     

     teste.zip

     

    Complementando http://en.wikipedia.org/wiki/Floating_point#Accuracy%5Fproblems dentro do if até a ordem afeta o resultado.

  10. Sim.

     

    Da uma olhada neste daqui http://www.planetadelphi.com.br/dica/6886/evitando-erro-de-compara%C3%A7%C3%A3o-com-calculo-no-if-ou-no-repeat-until

     

    No nosso sistema já tivemos um problema semelhante que no caso usava comparação de dados de datasets.

     

    A solução mais "profissional" que encontramos foi fazer o cálculo fora do if que ai funciona em todos os momentos. 

     

    No exemplo representado no link acima para resolver o problema poderia-se criar uma outra variável D : Double; e definir D:= A + B; que a comparação sairia perfeita. No caso do tópico garantir que a variável "TrocoMaximo" venha com precisão de 2 casas.

  11. Tenho uma Daruma Mach 2 e notei que usando a dll  se consegue adicionar o CPF no meio da venda e é registrado na impressora.

     

    No ACBR não está funcionando! Fui verificar o motivo e o encontrei veja no trecho do código abaixo.

     

    procedure TACBrECFDaruma.FechaCupom(Observacao: AnsiString; IndiceBMP : Integer); <- linha 2030

    ....

     

    if fsNumVersao = '2000' then  <---- a variável vem com valor "010000" para a mach 2
          begin
            StrConsumidor := PadL( PadL(Consumidor.Documento,27) +
                                   PadL(Consumidor.Nome,42)+
                                   PadL(Consumidor.Endereco,42), 153) ;
     
            EnviaComando( ESC + #208 + StrConsumidor ) ;  <----- este comando funciona
          end
          else
          begin
            StrConsumidor := PadL(Consumidor.Nome,84) +
                             PadL(Consumidor.Endereco,84) +
                             PadL(Consumidor.Documento,84) ;
     
            EnviaComando( ESC + #201 + StrConsumidor ) ; <----- este não funciona
          end ;
     

     

    O if acima não seria (fsNumVersao <> '2000') ? Pergunto isto pois notei que existem processos específicos para este modelo (FS2000) em várias partes da classe.

     

    Obrigado pela atenção. 

×
×
  • 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.