Ir para conteúdo
  • Cadastre-se

Ronaldo Cesar Bim

Membros
  • Total de ítens

    39
  • Registro em

  • Última visita

Tudo que Ronaldo Cesar Bim postou

  1. Pessoal, se eu utilizar um arquivo fonte em projetos delphi e lazarus e não precisar de suporte a delphis antigos(d7) teria algum problema em converter o formato do fonte para utf-8 ? pois pelo que entendi se eu manter o arquivo em cp1252 preciso converter as strings para UTF8 quando utilizadas no lazarus. Seria isso mesmo ?
  2. Eu que agradeço, ainda esta semana estarei testando e te notifico caso tenha algum problema.
  3. Boa noite, segue a alteração sugerida, basicamente alterei para aceitar definir no componente cópias = 0, quando estiver setada copias = 0 não fará a verificação deste trecho if RLPrinter.Copies <> AConfig.NumCopias then, pois é exatamente neste if onde ocorre o problema. ACBrDANFCeFortesFr.pas ACBrDFeReport.pas ACBrDFeReportFortes.pas
  4. Administradores do ACBR, fiz a leitura do post ( ) constatei que temos o mesmo problema na impressão da DANFE nfe e nfc-e, estou desenvolvendo um servidor rest compilando pra ISAPI no IIS e está ocorrendo o mesmo problema ao executar este código (if RLPrinter.Copies <> AConfig.NumCopias then) no método AjustarReport do fonte (ACBRDFeFortesReport.pas) e no método ImprimirInterno do fonte (ACBrDANFCeFortesFr.pas). Fiz localmente um pequeno ajuste para aceitar NumCopias com valor zero e adicionei neste if para testar se NumCopias > 0 para evitar a chamada de RLPrinter.Copies. Pelos testes que fiz resolveu, inclusive fiz teste em massa realizando várias chamadas simultâneas ao servidor e ele gerou todos os PDFs corretamente, porém para que isso seja possível precisei adicionar uma sessão crítica no meu servidor no momento da geração do PDF, pois o FortesReport não é Thread Safe. Seria possível disponibilizar este ajuste no RLPrinter.Copies nas impressões do Acbr para que toda a comunidade consiga utilizar em modo ISAPI as impressões com Fortes Report ?
  5. Bom dia Daniel, obrigado pela dica, referente o caso de ontem, testei utilizando um e-mail gmail e funcionou perfeitamente, então acredito que seja algum tipo de bloqueio do meu provedor de e-mail quando recebe a conexão do meu servidor, ainda não descobri o motivo mas irei entrar em contato com o provedor para me auxiliar. Por hora irei utilizar este gmail até que o caso seja resolvido.
  6. Blz, obrigado pelo apoio, vou tentar entrar no meu provedor e ver algumas configurações, caso eu encontre a solução irei postar aqui
  7. Daniel, implementei um memo na tela para logar conforme sugestão, segue os resultados. Meu PC, SSL=True, TLS=True Resultado: email enviado com sucesso, sem nenhum log Meu PC, SSL=True, TLS=False Resultado: email enviado com sucesso, sem nenhum log Meu PC, SSL=False Resultado: não envia e-mail e log: Unable to Login Servidor Nuvem, SSL=True, TLS=True Resultado: não envia e-mail, sem nenhum log Servidor Nuvem, SSL=True, TLS=False Resultado: não envia e-mail, sem nenhum log Servidor Nuvem, SSL=False Resultado: não envia e-mail e log: Unable to Login Implementei um exemplo usando Indy que achei na internet e ocorre a mesma coisa, no meu pc funciona e no servidor não loga nada de erro e não chega o e-mail. A empresa que fornece o servidor me passou que não existe nenhum bloqueio, o que acabei confirmando usando o Thunderbird.
  8. Boa tarde Daniel, não ocorre mensagem de erro.
  9. Senhores, comecei a usar o AcbrMail em um projeto novo, fiz um aplicativo de teste usando meu provedor de email na porta 465 com ssl/tls, o aplicativo de teste funciona normalmente aqui no meu PC, mas em um servidor novo na nuvem com windows 2008R2 não vai, não ocorre erro algum, o e-mal simplesmente não chega, já testei todas versões de dlls que estão na pasta OpenSSL , atualizei o windows, e nada. Instalei um client de e-mail neste servidor para testar e funciona normalmente, testei o meu aplicativo em outros servidores de clientes, em outros PCs e ele funciona, mas neste servidor na nuvem não vai. O que pode estar acontecendo ? seria algum certificado que tenho no meu PC que não tem no servidor ?
  10. Alguém sabe me dizer qual é a relação desta lei com a lei 12741/12 (de olho no imposto) ? Será que podemos utilizar a mesma tabela IBPT para apresentar os cálculos de impostos por produto ?
  11. Quando fui testar, percebi que esta alteração talvez gere um impacto indesejado, se mudarmos de CancelarTransacoesPendentesClass para TACBrTEFD(Owner).CancelarTransacoesPendentes, pq em CancelarTransacoesPendentes é realizado um loop na lista de TEF habilitados, podendo assim Cancelar Transações de outros TEF que não seja o da SiTef. E talvez ocorra de existir transações ao mesmo tempo em SiTef, Pay&Go e outros... Sera que a melhor forma não é chamar o evento "OnDepoisCancelarTransacoes" após processar o "TACBrTEFDClass.CancelarTransacoesPendentesClass"? Deixando dessa maneira, ou algo do genero: with TACBrTEFD(Owner) do begin if Assigned( OnDepoisCancelarTransacoes ) then try OnDepoisCancelarTransacoes( RespostasPendentes ) ; except { Nao deixa interromper } end; end; Já o caso de CancelarTransacoesPendentesClass estar chamando o evento "OnAntesCancelarTransacao" apenas uma vez, existe a validação: JaCancelado := (Resp.DocumentoVinculado = DocumentoVinculado) ; Como o SiTef cancela todas as transações vinculados com o documento, entendo que esta validação esteja certa, porém quebrou o fluxo do OnAntesCancelarTransacao, já que a segunda transação cancelada não irá disparar o evento, pq na validação acima é retornado True. Por enquanto ainda não alterei nada no ACBr, mas resolvi a questão ajusta a minha implementação para o evento OnAntesCancelarTransacao, deixando dessa maneira: Resposta Pendente é CRT? Percorre minha lista de pagamento; Pagamento é Cartao? Pagamento.DocVinculado = RespostaPendente.DocVinculado? Excluir Pagamento; A principio assim está funcionando, sem mexer no ACBr, porém estou correndo risco do NCN não dar certo, e eu perder o histórico do pagamento, pois já foi deletado do banco... O que vc acha Daniel, da questão de chamar o "OnDepoisCancelarTransacoes" após processar o "TACBrTEFDClass.CancelarTransacoesPendentesClass"?
  12. Olá, Implementei o evento "OnDepoisCancelarTransacoes" do ACBrTEFD, para fazer a manutenção das transações no meu banco de dados depois que elas são canceladas... até aqui tudo certo, quando chamo o "TACBrTEFD.CancelarTransacoesPendentes", as transações pendentes são canceladas e consigo manipular os dados no meu banco... Porém, ao chamar o TACBrTEFDCliSiTef.Inicializar, no final do método existe a seguinte condição: // Cupom Ficou aberto ?? Se SIM, Cancele tudo... // if (Est in ['V','P','N','O']) then CancelarTransacoesPendentesClass else // NAO, Cupom Fechado, Pode confirmar e Mandar aviso para re-imprimir // ConfirmarESolicitarImpressaoTransacoesPendentes ; Note que quando o "if" é satisfeito, por exemplo Est = 'O', será chamado o método CancelarTransacoesPendentesClass E quando as transações são canceladas direto pelo CancelarTransacoesPendentesClass, o evento OnDepoisCancelarTransacoes não é disparado... Seria uma sugestão? Subistituir o "CancelarTransacoesPendentesClass" por "TACBrTEFD(Owner).CancelarTransacoesPendentes"? Assim o evento OnDepoisCancelarTransacoes seria disparado.... Outro caso, dentro do evento CancelarTransacoesPendentesClass, quando tenho mais de uma transação para o mesmo Cupom (Multiplos Cartoes) e envio um TACBrTEFD.CancelarTransacoesPendentes, o evento "OnAntesCancelarTransacao" esta sendo disparado apenas uma vez... Nesse caso, como tenho 2 transações pendentes, teria que disparar 2 vezes? Ou, estou implementando os eventos de manutenção no meu banco de dados no lugar errado?
  13. Pra interceptar quando o ACBr/SiTef Solicita a Tela de Autorização você deve Implementar no Metodo "ObtemCampoCliSiTef" do ACBrTEFD Olha a declaração: ObtemCampoCliSiTef(Titulo: String; TamanhoMinimo, TamanhoMaximo: Integer; TipoCampo: Integer; Operacao: TACBrTEFDCliSiTefOperacaoCampo; var Resposta: AnsiString; var Digitado: Boolean; var VoltarMenu: Boolean); // TipoCampo = 500, Solicitação de Senha do Supervisor para Transação TEF if (TipoCampo = 500) then begin Digitado := TMinhaTelaSolicitacaoPersonalizada.Autoriza(); end else ( ... ) Para prosseguir a var Digitado := True, para Abortar o Processo (Nao Autorizado) var Digitado := False;
  14. Olá, No Metodo TACBrTEFD.FinalizarCupom, existe o seguinte tratamento de except: on EACBrTEFDECF do ImpressaoOk := False ; try ... Finalizar Cupom ... except on EACBrTEFDECF do ImpressaoOk := False ; else raise ; end; Quando desligo a impressora (Bematech) essa except (EACBrTEFDECF) está sendo gerada, fazendo entrar nessa parte do código: if not ImpressaoOk then begin if DoExibeMsg( opmYesNo, CACBrTEFD_Erro_ECFNaoResponde ) <> mrYes then begin try ComandarECF(opeCancelaCupom); except {Exceção Muda} end ; break ; end; end; Caso o Usuario escolha a opção "Não" do DoExibeMsg, vai ser disparado o Cancelamento do Cupom... Minha duvida é referente a este cancelamento, por falha de comunicação com a impressora no momento do FinalizarCupom, Ja imaginou uma venda com 999 itens e o Usuario selecionar a opção "Não", o cupom vai ser cancelado e vai ter que passar todos os 999 itens novamente.... Realmente o cupom deve ser cancelado por falta de comunicação com a impressora no FinalizarCupom?
  15. Régys Obrigado pela resposta. Mas o problema está um pouco antes.... Seria encontrar uma maneira de identificar que no ADM do CliSiTef o Usuario escolheu a opção 3:Cancelamento de transacao, e assim poderei fazer uma validação se o Usuario tem acesso pra ação de 3:Cancelamento de transacao... A principio estou fazendo assim: type TefAcaoAtual = (TesteDeComunicacao = 0, ReimpressaoComprovante = 1, CancelamentoTransacao = 2, PreAutorizacao = 3, ConsultaParcelaCDC = 4, ConsultaPrivateLabel = 5, ConsultaSaqueFinivest = 6, ConsultaSaqueBancoIBI = 7, ConsultaSaldoDebito = 8, ConsultaSaldoCredito = 9, RecargaCelular = 10, PetrobrasPremmia = 11, OutrosCielo = 12); Depois do OnTefCliSiTefExibeMenu(Titulo: String; Opcoes: TStringList; var ItemSelecionado: Integer; var VoltarMenu: Boolean); TEF.AcaoAtual := TefAcaoAtual(ItemSelecionado); // CancelamentoTransacao Boolean := ValidarAcessoAcao('Usuario', TEF.AcaoAtual); So que tem um problema isso funciona apenas quando mando o ADM (110) pro ACBrTEFD... Pq quando o ACBrTEFD solicitar o OnTefCliSiTefExibeMenu pra escolher por exemplo a opção se é Cartao Magnetico/Chip ou Digitado, e o usuario escolher o tipo Magnetico/Chip o fluxo vai disparar TEF.AcaoAtual := TefAcaoAtual(ItemSelecionado); onde ItemSelecionado é 0 ao fazer TefAcaoAtual(ItemSelecionado) sera retornado TesteDeComunicacao, mas na realidade seria o Magnetico/Chip
  16. Olá, Alguém poderia me ajudar em uma duvida? Estou usando o ACBrTEF (SiTef) Vou explicar um pouco do meu processo: É um Cancelamento de Transação. Solicito um ADM, (Modalidade: 110) Então é disparado o evento ExibeMenuCliSiTef; No Menu escolho a Opção de 3:Cancelamento de Transação; (Buffer = 3); Então é disparado o evento ObtemCampoCliSiTef com Tipo Campo = 500 (código do supervisor); Na implementação do ObtemCampoCliSiTef, é disparado o ShowModal de uma tela para solicitar a senha do supervisor. Na minha rotina de solicitação de autorização eu tenho que passar qual é a ação desejada e a função retorna se tem acesso sim/não. Ex: Boolean := AutorizaAcaoUsuario('User', paCancelaProduto); Agora vem minha duvidas: 1º - No evento ObtemCampoCliSiTef quando o Tipo Campo for 500, sempre será do tipo 3:Cancelamento de Transação; (Buffer = 3)? 2º - De que maneira eu conseguiria identificar que o usuario escolheu a opção 3:Cancelamento de Transação; (Buffer = 3) no ADM (ExibeMenuCliSiTef)? Já verifiquei que no ExibeMenuCliSiTef existe a var ItemSelecionado, que retornar qual opção o usuario escolheu... seria por aqui msmo? Para que eu consiga fazer mais ou menos isso: if (TipoCampo = 500) then begin Digitado := AutorizaAcaoUsuario('User', Ord(paCancelaTransacao); if Digitado then Resposta := 'OK'; end
  17. Depois de muita batalha consegui descobrir o motivo, são os caracteres de quebra de linha que no linux é diferente do windows. Então para resolver isso setei a seguinte propriedade no meu StringList. sl.TextLineBreakStyle := tlbsCRLF;//padrão windows
  18. Sim a chave é a mesma, a chave fica em uma constante no código fonte, e os fontes da minha aplicação são únicos independente da plataforma, tanto é que quando compilados no windows a assinatura é válida. Segunda feira vou analisar melhor qual é o ponto do código fonte que gera diferenças, talvez seja nas dlls/so que utiliza.
  19. Pessoal, estou com a seguinte situação. O mesmo arquivo assinado com o AcbrEAD, no windows gera um registro diferente do gerado no linux. O eECF não valida a assinatura do registro gerado no Linux, apenas o gerado no windows. Alguém mais com este problema ?
  20. Problema resolvido, o suporte da Bematech me enviou os arquivos (libbemamfd2.so, libbemamfd2.so.0, libbemamfd2.so.0.10.4) e instruiu a colocar na pasta /usr/lib.
  21. Estou testando a função PafMF_LMFC_Cotepe1704. O download.mfd é gravado no diretório, porém o arquivo txt não é gerado, o retorno da função é -1. Tentei copiar os arquivos bemamfd e bemamfd2(versão suse, versão ubuntu que vem com a libbemafiscal libbemafiscal-2.6.2-0ubuntu10-i386) no mesmo diretório da libbemafiscal.so, mas no log continua dizendo que não encontra os arquivos. De qualquer forma vou tentar entrar em contato com o suporte da bematech para ver se eles me ajudam, mas também estou adicionando a baixo o log de retorno e a minha configuração do bemafi.xml Arquivo de log:
  22. Daniel, qual versão da libbemafiscal.so vc está usando ? pra mim está dando erro que não encontra a função Bematech_FI_VersaoDll em LoadDLLFunctions. Pelo que depurei, na function FunctionDetect ele consegue carregar a biblioteca porém não acha a função no ponto abaixo. GetProcAddress(LibHandle, PChar(FuncName));{Procura a função}
  23. Daniel Obrigado, resolvi testar com o utilitário linuxmfd para Suse e aparentemente o arquivo foi gerado. Agora vou fazer os testes comparativos com o windows para ver se o arquivo é o mesmo e posto o resultado.
×
×
  • 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.

The popup will be closed in 10 segundos...