Ir para conteúdo
  • Cadastre-se

Daniel Simoes

Fundadores
  • Total de ítens

    27.046
  • Registro em

  • Última visita

  • Days Won

    758

Tudo que Daniel Simoes postou

  1. Edson, Acompanhe os históricos de atualização através dos arquivos ACBrxxx-Chage-Log.txt (em cada pasta dos fontes) Você tb pode usar o TortoiseSVN para comparar os fontes atuais com a qq outra versão anterior...
  2. Vc poderia ancorar os componentes Left/Right para que eles se ajustem ao tamanho da tela... mas isso não mudaria a fonte... No meu caso, fiz um editor de Skins, onde posiciono os componentes visualmente, e esse programa gera um .INI com as coordenadas e características de cada componente (uma re-invenção do .DFM )
  3. Isso realmente ocorre... Vc precisa cancelar a transação TEF independente de ter tido sucesso na comunicação com o ECF... O que geralmente é feito... e verificar o estado do ECF antes de iniciar uma nova venda... Ou seja, apenas quando realmente for necessário vc se preocupa com o estado do ECF... E se o estado não for livre, vc trata o documento em aberto... No ACBrECF o método CorrigeEstadoErro já faz isso
  4. - Experimente remover o Path do nome do arquivo... Deixe apenas: "nomearquivo.so" - O que é "SharedSuffix" ? Lembre-se que o Linux é CaseSensitive, ou seja, o nome deve ser idêntico ao do arquivo - No Lazarus/FPC, Tenho usado o método: dynlibs.LoadLibrary(LibName) ; - Tenha certeza de que a Lib está em algum diretório do LibPath do Linux (apenas os .SO existente nos diretórios previamente autorizados são carregados) (provavelmente /usr/lib é correto) - Verifique se essa LIB depende de outras (que ainda não foram instaladas)... tente o comando: ldd "nomearquivo.so"
  5. Isso realmente acontece... (pois os dados foram lidos antes)... o mesmo será verdade para o CRZ... basta vc lembrar disso e adicionar +1
  6. Acho que é a hora de aposentar essa IF do código function TACBrECFBematech.GetTotalPago: Double; begin { O Bug no comando 35 + 22 ainda persiste na versao 010101... Enquanto nao obter uma correção da Bematech vou ignorar o uso do 35+22 na MPTH e MP25 } if fs25MFD then // if NumVersao = '010000' then Result := fsTotalPago else Result := StrToFloatDef( RetornaInfoECF( '22' ),0 ) / 100 ; end;[/code] para simplesmente: [code] function TACBrECFBematech.GetTotalPago: Double; begin Result := StrToFloatDef( RetornaInfoECF( '22' ),0 ) / 100 ; end;
  7. Consegui resolver o problema, lendo direto o Flag de Tipo de documento... function TACBrECFBematech.GetSubTotal: Double; Var RetCmd : AnsiString ; B2 : Integer ; ENaoFiscal : Boolean ; begin ENaoFiscal := False; if fpMFD then begin RetCmd := RetornaInfoECF( '65' ) ; B2 := ord( RetCmd[1] ) ; ENaoFiscal := TestBit( B2 ,0) ; end ; if not ENaoFiscal then begin BytesResp := 7 ; RetCmd := BcdToAsc( EnviaComando( #29 ) ) ; end else RetCmd := RetornaInfoECF('66') ; Result := StrToFloatDef( RetCmd, 0) / 100 ; end; [/code] O problema porém agora foi transferido para o método [b]GetTotalPago[/b]... ao que parece a Bematech não tem um registrador que informe o total já pago em um comprovante não fiscal
  8. Em um IF acima ele faz o teste de Visible... deve ser o suficiente para o Delphi.. mas no caso do FPC, ainda é possível saber se o controle está realmente sendo pintado... Por exemplo: IsVisible pode ser False, se um TTabShet está oculto...
  9. Realmente essa propriedade não existe no Delphi.. deve ser exclusiva do lazarus/FPC... Inseri um IFDEF... por favor atualize e verifique se resolve...
  10. A modificação é recente... estou verificando se no Delphi não existe essa propriedade (IsVisible)
  11. podemos usar uma variável private... (na Daruma é usado isso pois em alguns casos não é possível detectar o estado de pagamento) Mas isso só funciona enquanto o Flag estiver na memória... ou seja, sair e carregar novamente o programa, o flag perderá o valor...
  12. Estranho, pois não há modificação no tipo de código de Barras usado pelo Gerador em Quick por Banco... Ou seja, todos os Bancos usam o mesmo formato de código de barras.... e não temos reclamação semelhante de outros bancos Imprima um boleto com outro programa, com os mesmos dados, e verifique se realmente há diferença Tente tb em outra impressora...
  13. Por favor tente mudar para: ANossoNumero := OnlyNumber(NossoNumero);
  14. Em qual linha do código, e de qual Unit ocorre o erro ? Qual banco / carteira, etc ?? Não há uma homologação do componente... cada conta de cliente em que vc solicitar a impressão do Boleto precisará solicitar a homologação novamente diretamente com o banco...
  15. Pode ser que ajude... O método abaixo calcula um Hash baseado em todos os campos de um DataSet, menos os campos informados na lista de Campos a ignorar Uses ACBrUtil ; ... function CalcHashDataSet(const ADataSet : TDataSet ; Chave : AnsiString = ''; IgnoreFields : TSetOfByte = [] ) : Word ; var NFields, I : Integer; Buffer : AnsiString ; begin Buffer := ''; Result := 0; NFields := ADataSet.FieldCount - 1 ; For I := 0 to NFields do begin if (not (I in IgnoreFields)) and (LowerCase( ADataSet.Fields[I].FieldName ) 'hash') then Buffer := Buffer + ADataSet.Fields[I].AsString; end ; if Chave '' then Buffer := StrCrypt( Buffer, Chave ); Result := StringCrc16( Buffer ) ; end; [/code] Exemplo: sqlDocumento.FieldByName('HASH').AsInteger := CalcHashDataSet(DataSet, 'SuaChave' );
  16. Não... Atualmente o ACBr não faz comunicação com nenhum micro-terminal por TCP/IP
  17. Veja na Unit ACBrBoleto.pas o seguinte método: procedure TACBrBanco.SetNumero(const AValue: Integer); begin if fNumeroBanco = AValue then exit; fBancoClass.Free; case AValue of 001 : fBancoClass := TACBrBancoBrasil.create(Self); 033,353,008 : fBancoClass := TACBrBancoSantander.create(Self); 041 : fBancoClass := TACBrBanrisul.create(Self); 104 : fBancoClass := TACBrCaixaEconomica.create(Self); 237 : fBancoClass := TACBrBancoBradesco.create(Self); 341 : fBancoClass := TACBrBancoItau.Create(self); 389 : fBancoClass := TACBrBancoMercantil.create(Self); 748 : fBancoClass := TACBrBancoSicredi.Create(self); 756 : fBancoClass := TACBrBancoob.create(self) else fBancoClass := TACBrBancoClass.create(Self); end; fNumeroBanco := AValue; end; [/code]
  18. Veja as instruções de instalação do Fortes... Acredito que a página oficial seja: http://sourceforge.net/projects/fortesreport/
  19. Cada banco tem suas próprias peculiaridades.... Por favor seja mais específico no problema... O componente não lê um arquivo de Retorno que é lido com sucesso por outro programa ?
  20. Por favor seja mais específico... se possível escreva passos para reproduzirmos o erro usando o demo do ACBrBoleto
  21. Provavelmente isso será realmente necessário... Vou estudar com a Juliana como podemos implementar... É um saco esse tal de "padrão" FEBRABAN... simplesmente não existe padrão
  22. Já deste uma olhada no Manual do ACBrMonitor ?? http://acbr.sourceforge.net/ACBrMonitor ... dente.html
  23. A unit sndkey32 sempre funcionou para mim... Veja esse post: viewtopic.php?f=16&t=116&p=592&hilit=sndkey32#p592
  24. Por favor anexe as Units modificadas... trataremos suas modificações comparando as Units com um programa de Merge, como por exemplo o WinMerge
  25. Qual numero de Banco vc está atribuindo... Observe os fontes em ACBrBoleto.pas com os Bancos implementados procedure TACBrBanco.SetNumero(const AValue: Integer); begin if fNumeroBanco = AValue then exit; fBancoClass.Free; case AValue of 001 : fBancoClass := TACBrBancoBrasil.create(Self); 033,353,008 : fBancoClass := TACBrBancoSantander.create(Self); 041 : fBancoClass := TACBrBanrisul.create(Self); 104 : fBancoClass := TACBrCaixaEconomica.create(Self); 237 : fBancoClass := TACBrBancoBradesco.create(Self); 341 : fBancoClass := TACBrBancoItau.Create(self); 389 : fBancoClass := TACBrBancoMercantil.create(Self); 748 : fBancoClass := TACBrBancoSicredi.Create(self); 756 : fBancoClass := TACBrBancoob.create(self) else fBancoClass := TACBrBancoClass.create(Self); end; fNumeroBanco := AValue; end;[/code]
×
×
  • 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.