Ir para conteúdo
  • Cadastre-se

dev botao

Eventos ECF


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

Recommended Posts

Pessoal,

Gostaria da opinião de vocês. Recentemente passei pela necessidade de ter mais eventos no componente ACBrECF, em anexo está o fonte alterado.

Desenvolvemos a aplicação baseada nestes eventos, reduzindo consideravelmente a quantidade de linhas de código.

Também auxilia nos novos requisitos do PAF Versão 1.05 (junho/2010) referente alteração de registros na base de dados, página 69 do manual (testes 104 a 113).

Segue a lista dos novos eventos:

OnBeforeAbreCupom

OnAfterAbreCupom

OnErrorAbreCupom

OnBeforeVendeItem

OnAfterVendeItem

OnErrorVendeItem

OnBeforeEfetuaPagamento

OnAfterEfetuaPagamento

OnErrorEfetuaPagamento

OnBeforeFechaCupom

OnAfterFechaCupom

OnErrorFechaCupom

OnBeforeCancelaCupom

OnAfterCancelaCupom

OnErrorCancelaCupom

OnBeforeCancelaItemVendido

OnAfterCancelaItemVendido

OnErrorCancelaItemVendido

OnBeforeAbreNaoFiscal

OnAfterAbreNaoFiscal

OnErrorAbreNaoFiscal

OnBeforeSubtotalizaNaoFiscal

OnAfterSubtotalizaNaoFiscal

OnErrorSubtotalizaNaoFiscal

OnBeforeEfetuaPagamentoNaoFiscal

OnAfterEfetuaPagamentoNaoFiscal

OnErrorEfetuaPagamentoNaoFiscal

OnBeforeFechaNaoFiscal

OnAfterFechaNaoFiscal

OnErrorFechaNaoFiscal

OnBeforeCancelaNaoFiscal

OnAfterCancelaNaoFiscal

OnErrorCancelaNaoFiscal

OnBeforeSangria

OnAfterSangria

OnErrorSangria

OnBeforeSuprimento

OnAfterSuprimento

OnErrorSuprimento

OnBeforeLeituraX

OnAfterLeituraX

OnErrorLeituraX

OnBeforeReducaoZ

OnAfterReducaoZ

OnErrorReducaoZ

OnBeforeAbreRelatorioGerencial

OnAfterAbreRelatorioGerencial

OnErrorAbreRelatorioGerencial

OnBeforeAbreCupomVinculado

OnAfterAbreCupomVinculado

OnErrorAbreCupomVinculado

OnBeforeFechaRelatorio

OnAfterFechaRelatorio

OnErrorFechaRelatorio

OnChangeEstado

ps: o forum está apresentando a mensagem "A extensão pas não é permitida.", por isso o arquivo está no formato txt

ACBrECF.pas.txt

Grato pela atenção

Franklin

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Oi Franklin

Muito bom... Eu já havia pensado em fazer algo semelhante a algum tempo... mas nunca transformei em açao :(

Se me permitir, algumas sugestões...

Todos os eventos do tipo:

procedure( var Tratado : Boolean) of object ;

Podem ser do mesmo tipo...

(opcional)

traduzir os eventos:

OnBeforeLeituraX -> OnAntesLeituraX

OnAfter -> OnDepoisLeituraX

Exemplo:

TACBrECFEvent = procedure( var Tratado : Boolean) of object ;

e teríamos:

    property OnAntesLeituraX                 : TACBrECFEvent                  read FOnBeforeLeituraX                 write FOnBeforeLeituraX;
property OnDepoisLeituraX : TACBrECFEvent read FOnAfterLeituraX write FOnAfterLeituraX;[/code]

Isso permitiria atribuir uma procedure a vários eventos com a mesma assinatura

PS: habilitei o anexo de .PAS

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 para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Consultores

Se quiserem eu posso aproveitar que estou mexendo no ACBrECF e implementar essas alterações.

[]'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.
Link para o comentário
Compartilhar em outros sites

  • Consultores

Eu estava aqui analisando o código. Pra muitos eventos, não faz sentido o parâmetro "Tratado:Boolean" que está sendo declarado. Exemplo: OnAntesCancelaCupom. Se o Valor tratado for false ou true não vai fazer diferença nenhuma. O que vocês acham de remover isso?

Pensando bem, talvez eles pudessem até ser do tipo TNotifyEvent.

[]'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.
Link para o comentário
Compartilhar em outros sites

  • Consultores

Blz.

Pensei em adicionar um Evento onError que fosse mais geral, pra qualquer comando. Tipo o ACBrPAF. Mas ainda não consegui imaginar a melhor forma de estruturar os tratamentos em todos os casos. Acham que poderia ser uma boa idéia?

EDIT: achei no meio das alterações para os Eventos, uma alteração no método ACBrECF.LinhaRelatorioGerencial. Esse método também é pra ser implementado? Ele é pra corrigir aquele erro dos 2 minutos na impressão do TEF?

Edit: Anexei o arquivo de como está até agora. Só não adicionei as alterações do LinhaRelatorioGerencial.

Ah ele também já tem as propriedades que faltavam no ACBrECF e que implementei.

ACBrECF.zip

[]'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.
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Oi Elton,

Acho que poderíamos por em alguns eventos OnAfert, como por exemplo o OnAfterAbreCupom, um parâmetro onde seja possível capturar as informações NumCupom, COO entre outros sem a necessidade de fazer uma nova requisição ao ECF

Esse parâmetro poderia ser um tipo record, pensei num TACBrECF mais ele sempre faz um requisição ao ECF para obter os dados, Percebi que a maioria dos ECFs retornam um string com os dados e nesse caso o evento poderia obter os dados

no ato do evento destas string e com isso otimizar a comunicação e reduzir requisições ao ECF!

Waldir Paim

Link para o comentário
Compartilhar em outros sites

  • Consultores

Olá Waldir,

A intenção de otimizar o acesso ao ECF é muito boa sim! Precisamos minimizar o acesso ao ECF pois isso torna os nossos programas finais muito lento. Mas temos que tomar cuidado com a possibilidade de informações incorretas. Nesse caso do abreCupom, as funções que fazem a abertura de cupom das impressoras Bematech não retornam o COO do cupom aberto. Logo, se acrescentarmos o parâmetro para capturar o COO, o componente vai fazer uma nova requisição ao ECF para esse tipo de impressora. Acho que fica um pouco complicado implementar algo que só funcione pra algumas impressoras. Precisamos ouvir nesse caso a opnião de outros programadores.

[]'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.
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Elton, como te disse foi apenas um exemplo, sei que as informações devem serem as mais consistentes possíveis! e sei tambêm que isso não seria uma simples inclusão de eventos e que causaria uma serie de alterações nas sub classes de cada ECF, pois o evento teria que agir diretamente na ação e capturar esses valores do retorno do ECF;

Mais se a coisa for pensada assim acho que com o tempo os eventos consigam efetivamente esse objetivo final de minimizar os a comunicação direta com os ECF;

Conte comigo se resolver seguir em frente nesse ponto de vista!

Abraço.

Waldir Paim

Link para o comentário
Compartilhar em outros sites

  • Consultores

Conte comigo se resolver seguir em frente nesse ponto de vista!

Abraço.

Waldir Paim

Olá Waldir,

Que bom se puder ajudar. Nesse caso, teríamos que fazer um grande trabalho. Primeiro seria necessário estabelecer quais métodos das impressoras retornam valores assim como no exemplo que você citou. Depois, fazer um esquema desses métodos e calcular as alterações necessárias nas classes e subclasses. Finalmente poderíamos implementar numa pasta branches, pois poderia ficar incompatível com o componente no estado atual e seria necessário então uma nova versão. Se tiver interesse em uma iniciativa assim, você pode fazer como o franklin, dando o pontapé inicial e postando numa nova trhead os códigos iniciais.

Se os outros usuários acharem que vale a pena, com certeza vamos ter apoio necessário pra fazer. Meu tempo está bem reduzido esses dias, então não posso fazer todo esse trabalho.

abraços,

[]'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.
Link para o comentário
Compartilhar em outros sites

  • Consultores

Daniel e outros,

estou anexando aqui as alterações dos eventos, a adição do ParamHabilitaISSQN e das alterações para Dados Redução Z e Dados ultima redução Z (daquele outro tópico), incluindo alterações que fiz no DEMO. Em tudo isso, eu já fiz um pré merge, com a intenção de facilitar seu trabalho.

Sei que está muito apertado e eu poderia até fazer o commit, mas talvez você queira dar uma conferida antes?

Se alguém tiver dúvida, sugestão ou se tiver alguma coisa nesses códigos que eu possa fazer, avisem.

ACBrECF_EventoseETC.zip

[]'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.
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Fundadores

Bom... demorou um pouco mais, mas finalmente consegui fazer um Merge das alterações propostas pelo Franklin e modificadas pelo Elton...

Modifiquei alguns poucos detalhes como:

- Todas as variáveis de parâmetros do evento são declaradas como "const"

- todos eventos começam com TACBrECF (e não epenas TACBr)

- Removi alguns eventos repetidos

Achei a modificação significativa o suficiente para promover o ACBrECF para a versão 1.0.0 :)

Será bem mais simples implementar rotinas para gravar tudo que o ECF faz, usando os eventos... e com isso atender aos requisitos do PAF-ECF

(Elton, por favor edite o Change-Log.txt com as modificações que vc fez, (com as novas propriedades e métodos))

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 para o comentário
Compartilhar em outros sites

  • Consultores

Bom... demorou um pouco mais, mas finalmente consegui fazer um Merge das alterações propostas pelo Franklin e modificadas pelo Elton...

(Elton, por favor edite o Change-Log.txt com as modificações que vc fez, (com as novas propriedades e métodos))

Obrigado pelas correções Daniel.

Acabei de subir o change-log.

Só gostaria de dar mais um incentivo aos usuários de todas as outras impressoras pra ajudarem na implementação das propriedades adicionadas nas units específicas de cada uma das impressoras.

[]'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.
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Oi Elton,

Acho que seria bom anexar uma mini explicação sobre a finalidade de cada um desses registradores novos... Pois alguns manuais de ECF podem chama-los de outras siglas..

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 para o comentário
Compartilhar em outros sites

  • Consultores

Ahh sim, faz sentido. Eu até pensei nisso mas acabei querendo economizar espaço no change-log.

Vou providenciar.

[]'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.
Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom, esse dado CCDC é retornado pelo DadosUltimaReducaoZ. Muito estranho que essas impressoras não possuam ele. :S

Coloquei lá a descrição dos registradores. Não achei muita explicação de cada, mas acho que ficou bem mais claro pra quem está acostumado a usar um ECF.

[]'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.
Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...
  • Moderadores

Segue uma pequena correção abaixo em negrito!

{ Vende o Item }

procedure TACBrECF.VendeItem(Codigo, Descricao: String; AliquotaICMS : String ;

Qtd: Double; ValorUnitario: Double; ValorDescontoAcrescimo: Double;

Unidade: String; TipoDescontoAcrescimo : String; DescontoAcrescimo : String);

Var AliquotaECF : String ;

Aliquota : TACBrECFAliquota ;

Tratado : Boolean;

{$IFNDEF CONSOLE}

Linha, Buffer, StrQtd, StrPreco, StrDescAcre : String ;

Total, PorcDesc, ValDesc : Double ;

{$ENDIF}

begin

...

if Assigned( fOnAntesVendeItem ) then

fOnAntesVendeItem( Codigo, Descricao, AliquotaECF, Qtd, ValorUnitario,

ValorDescontoAcrescimo, Unidade, TipoDescontoAcrescimo,

DescontoAcrescimo);

try

Tratado := False;

fsECF.VendeItem( Codigo, Descricao, AliquotaECF, Qtd, ValorUnitario,

ValorDescontoAcrescimo, Unidade, TipoDescontoAcrescimo,

DescontoAcrescimo );

except

if Assigned( FOnErrorVendeItem ) then

FOnErrorAbreCupom(Tratado); //possivelmente errado

FOnErrorVendeItem(Tratado); //corrigido

if not Tratado then

raise;

end;

end;

...

end;

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...

Daniel, creio que esteja faltando declarar as seguintes propriedades logo abaixo da property OnErrorVendeItem:


property OnAntesSubtotalizaCupom: TACBrECFOnSubtotalizaCupom write FOnAntesSubtotalizaCupom read FOnAntesSubtotalizaCupom;

property OnDepoisSubtotalizaCupom: TACBrECFOnSubtotalizaCupom write FOnDepoisSubtotalizaCupom read FOnDepoisSubtotalizaCupom;

property OnErrorSubtotalizaCupom: TACBrECFEventoOnError write FOnErrorSubtotalizaCupom read FOnErrorSubtotalizaCupom;

O fonte esta todo certo, só faltou declarar estas propriedades.

Abraço

Marciano Lizzoni

Priori Sistemas

http://www.priori.com.br

Link para o comentário
Compartilhar em outros sites

  • Consultores

Tem razão Marciano, vou verificar.

EDIT: Já subi no SVN. Muito obrigado.

[]'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.
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Apenas relembrando...

É necessário re-instalar o Package ACBrSerial para que esses novos eventos apareçam no ObjectInspector

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 para o comentário
Compartilhar em outros sites

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

The popup will be closed in 10 segundos...