Ir para conteúdo
  • Cadastre-se

dev botao

Mesclagem de INI + Dados Redução + Redução Otimizada


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

Recommended Posts

Prezados, implementado o fechamento do dia, me deparei com informações importantes aqui do fórum e bem espalhadas sobre a redução Z.

  • Alguns modelos pedem totalizadores depois da redução z (Alguns tópicos confirmam isso, conversei com o regys ele também afirmou).
  • O ideal é utilizar tanto o DadosReducaoZ como UltimoDadosReducaoZ como em alguns tópicos.
  • Na chamada da redução Z é interessante uma configuração de timeout para evitar problemas (blog do regys).
  • Em algum tópico o Daniel posta um código para mesclar arquivos INI para permitir utilizar de forma mais simplificada as funções DadosReducaoZ e UltimoDadosReducaoZ.

Diante dessas informações nós iniciamos uma solução para as questões acima, e tentamos inserir ela dentro da classe ACBrECFClass.

Vou tentar explicar de forma simples.

type
    TACBrECFDadosRZ = class
    public
        procedure CarregaINIReducaoZ(const DadosReducaoINI: TMemIniFile);
        procedure CarregaMesclandoINIReducoesZ(const Origem, Destino: string);
    end;
    
    TACBrECFClass
    public
        function ReducaoZ_Otimizada(  DataHora : TDateTime = 0 ): TACBrECFDadosRZ;
    end;
  • O procedimento CarregaINIReducaoZ foi implementada para fazer a leitura do arquivo INI gerado pela própria classe TACBrECFDadosRZ e se auto alimentar as informações, recuperando alíquotas e totalizadores, auto alimentando a classe, no meu ponto de vista a implementação ficou bem segura e respeitando os critérios do procedimento responsável pela geração MontaDadosReducaoZ.
  • O procedimento CarregaMesclandoINIReducoesZ foi criado do zero mas usando a ideia da função já postada aqui no fórum, ela sempre tenta permanecer o valor do destino caso o valor da redução de origem seja nula, zero ou etc...
  • A função ReducaoZ_Otimizada, realiza o procedimento de aumento de TimeOut postado pelo Regys além de armazenar o INI da função DadosReducaoZ, armazenar o INI da função DadosUltimaReducaoZ, mesclar os dois e carregar para o retorno da função a redução Z completo e acessível por pela classe TACBrECFDadosTZ, combinando as implementações anterior.

Vantagens

  • Utilizando a leitura pela classe e não pelo INI resultante do processo de mesclagem, as futuras alterações realizadas na classe são sentidas no momento da compilação (quando alterado no svn e atualizado), diferente da leitura pelo INI dentro do seus sistema, que somente depois que ser executado que uma alteração de tipo ou objeto seria identificada.
  • Simplifica o processo da redução Z para quem não conhece os problemas de compatibilidade das impressoras.
  • Evita o problema com TimeOut nas reduções Z.

Função ReducaoZ Otimizada:

function TACBrECFClass.ReducaoZ_Otimizada(DataHora: TDateTime): TACBrECFDadosRZ;
var
  OldTimeOut: integer;
  ReducaoAntes, ReducaoDepois: string;
begin
  ReducaoAntes := DadosReducaoZ;

  OldTimeOut := TimeOut;
  try
    TimeOut := 600; // 10 minutos
    ReducaoZ( DataHora );
  finally
    TimeOut := OldTimeOut;
  end;

  ReducaoDepois := DadosUltimaReducaoZ;

  Result := TACBrECFDadosRZ.Create;
  Result.CarregaMesclandoINIReducoesZ(ReducaoAntes, ReducaoDepois);
end;

Como Utilizar:

procedure TForm3.Button1Click(Sender: TObject);
var
  Reducao: TACBrECFDadosRZ;
begin
 Reducao := ACBrECF1.ECF.ReducaoZ_Otimizada(Now);
 try
    //Leitura das variáveis desejadas aqui.
 finally
   Reducao.Free;
 end;
end;

Estou anexando as units, e um demo que sem realizar a redução z, alimenta 3 memos e compara o arquivo ini Antes da Redução, Depois da Redução e o Arquivo Final Mesclado.

(Demo em firemonkey²)

 ACBrSerial.zip DemoUtilizaçãoReducaoMesclagem.zip

Editado por Data Lider
  • Curtir 1

 www.datalider.com.br - [email protected] - Macgayver Armini

 

Link para o comentário
Compartilhar em outros sites

O código vai ser analisado para verificar se pode ser subido? precisa dessa confirmação caso contrário temos que tirar do nosso componente da acbr e passar para o sistema, porque sempre usamos a versão do svn original do acbr, não mantemos alterações próprias nos fontes.

Desculpa o incômodo, obrigado.

 www.datalider.com.br - [email protected] - Macgayver Armini

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Queira aguardar até terça feira por favor, acabei de voltar e estou averiguando.

  • Curtir 1

[]'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

Fiz uma analise das modificações...

Não acho que seja bom incorporar nos fontes originais...

A ReduçãoZ é uma operação muito sensível, e introduzir um novo método, que faz muitos tratamentos no lado do componente, transfere muita responsabilidade para o ACBr...

Sempre haverá questionamentos em como as informações são mescladas, e opiniões divergentes em qual campo deve ser mantido ou sobreposto... Portanto, acho que essa implementação deve sempre estar do lado do Programa, e não dentro do componente...

  • Curtir 3
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

Fiz uma analise das modificações...

Não acho que seja bom incorporar nos fontes originais...

A ReduçãoZ é uma operação muito sensível, e introduzir um novo método, que faz muitos tratamentos no lado do componente, transfere muita responsabilidade para o ACBr...

Sempre haverá questionamentos em como as informações são mescladas, e opiniões divergentes em qual campo deve ser mantido ou sobreposto... Portanto, acho que essa implementação deve sempre estar do lado do Programa, e não dentro do componente...

OK.

 www.datalider.com.br - [email protected] - Macgayver Armini

 

Link para o comentário
Compartilhar em outros sites

Não tem como editar mais a resposta anterior, então estou adicionando em outro post.

Poderia remover o procedimento da Z, e a operação da classe carregar o arquivo INI que ela mesmo gera poderia permanecer na classe, O mesclar poderia permanecer também, se a pessoa achar que precisa de um ajuste, então o código está lá, mas a função de mesclar sobrepõe apenas valores maior que zero, isso vale para Data, Inteiro e Float, ou seja, até o COO se for zerado não é sobreposto.  

 www.datalider.com.br - [email protected] - Macgayver Armini

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

A função de Mesclar INIs, se fosse incorporada, deveria ser algo mais genérico, que se adaptasse a modificações no .INI...

Veja essa implementação:

http://www.projetoacbr.com.br/forum/topic/9378-erro-ao-pegar-os-títulos-pagos-da-ultima-rz/?do=findComment&comment=54339

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

A função de Mesclar INIs, se fosse incorporada, deveria ser algo mais genérico, que se adaptasse a modificações no .INI...

Veja essa implementação:

http://www.projetoacbr.com.br/forum/topic/9378-erro-ao-pegar-os-títulos-pagos-da-ultima-rz/?do=findComment&comment=54339

Nesse caso do exemplo, para a redução Z não acho interessante, porque considera qualquer valor, se o destino é "000010" e a origem (Antes da Redução Z) é "00000" ele vai substituir mesmo assim, o mesmo vale para a situação de Data Nula na origem e no destino não nulo, no exemplo acima também trocaria. Mas de qualquer forma então o consenso é somente para a classe que realiza a operação inversa(Re-alimenta a classe com o ini gerado por elá própria) correto? 

 www.datalider.com.br - [email protected] - Macgayver Armini

 

Link para o comentário
Compartilhar em outros sites

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