Ir para conteúdo
  • Cadastre-se

dev botao

Evento S-2221 - Identificação do evento - Refatoração parcial da unit pcesConversaoeSocial


MSS
Ver Solução Respondido por MSS,

Recommended Posts

Por ocasião da realização de algumas alterações na unit pcesConversaoeSocial, que foram aplicadas na revisão 24464, de 19/02/2022; foi criada uma constante (__ARRAY_MATRIX_EVENTO_INFO) para mapear e centralizar algumas das informações relacionadas aos eventos e versões do eSocial.

A expectativa com essa implementação era que com a ocorrência de novas intervenções esse mapeamento poderia ser atualizado e aprimorado, possibilitando assim a refatoração de diversos códigos, migrando-os pouco a pouco para uma codificação mais dinâmica e flexível. Porém, a expectativa não correspondeu a realidade e o que aconteceu com o mapeamento foi simplesmente um copiar e colar, a cada nova versão do eSocial.

A falta de alteração/refatoração/analise mais aprofundada além de não permitir a ampliação de uso do recurso, ainda pode gerar uma quebra de código, consumo elevado de recursos, multiplicidade desnecessária de informações, etc... (Ex: a versão atual do array __ARRAY_MATRIX_EVENTO_INFO já estava com 163 elementos definidos quando precisa de 77)

Para adicionar o evento S-2221 corretamente na matriz; foi refatorado partes especificas de código, conforme detalhes a seguir:

1. Encapsulamento da constante __ARRAY_MATRIX_EVENTO_INFO dentro do unico metodo (GetMatrixEventoInfo) que a utiliza.
2. Adicionado o conceito de faixa/validade/range de versões para os eventos, no record TRecMatrixEventoInfo.
3. Adicionado o conceito de faixa/validade/range de versões para os eventos na constante (__ARRAY_MATRIX_EVENTO_INFO).
4. Adicionado uma constante para identificar o ultimo item do enumerador TVersaoeSocial (__LAST_VERSION).
5. Os blocos de códigos alterados estão delimitadas com os comentários:
    // [MSS - 19/08/2024 - Start] - #  
    // [MSS - 19/08/2024 - End] - #  

Em anexo a unit pcesConversaoeSocial para analise, estudos, testes, uso e/ou eventual update no repositório do Projeto ACBr.
*** Alterações efetuadas no arquivo base: p/acbr/code - Revision 34924: /trunk2/Fontes/ACBrDFe/ACBreSocial/PCNeSocial/pcesConversaoeSocial.pas

[]s,
Mário

pcesConversaoeSocial.pas

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Consultores

Obrigado pela contribuição, em breve será validada para possível inclusão ao svn #TK-5890

  • Curtir 1
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...

Olá, @Renato Rubinho!

Não respondi anteriormente, porque estava em licença pós-operatória.

Não me recordo da existência específica de um problema que tenha gerado essa demanda.

Fui implementar o evento S-2221 no nosso sistema e percebi o que explanei no inicio do post.

Visando aprimorar, refatorei o código mencionado e passei para o nosso setor de Qualidade validar a geração e envio de TODOS os eventos do eSocial.

Após homologação do departamento; encaminhei o código para a apreciação da ACBr.

[]s,
Mário

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solution
Em 06/09/2024 at 15:57, Renato Rubinho disse:

Olá @MSS

O Fórum passou por algumas instabilidades estes dias e alguns anexos foram corrompidos, não estando mais disponíveis para acessarmos.
Você pode anexar novamente a contribuição para análise?
 

Olá, @Renato Rubinho!

Anexo o arquivo da unit alterada.

[]s,
Mário

pcesConversaoeSocial.pas

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Consultores

Olá,

Sua implementação me parece ok, apenas voltei as costantes para o local original, Rev-31479
Por favor atualize os fontes, reinstale os componentes, verifique se o problema foi resolvido e, se possível, nos informe se foi o resultado esperado.

Fiz um teste com o código a seguir e os retornos foram corretos.
 

var
  ok: boolean;
  i: integer;
  j: integer;
  tipoEvento: TTipoEvento;
  tsRetorno: TStringList;
  str: string;
begin
  tsRetorno := TStringList.Create;

  for j := Integer(Low(TVersaoeSocial)) to Integer(High(TVersaoeSocial)) do
  begin
    tsRetorno.Add('----------------------------');
    tsRetorno.Add(VersaoeSocialToStrEX(TVersaoeSocial(j)));
    tsRetorno.Add('----------------------------');

    for i := Integer(Low(TTipoEvento)) to Integer(High(TTipoEvento)) do
    begin
      str := Trim(TipoEventoToStrEvento(TTipoEvento(i),  TVersaoeSocial(j)));

      if str <> '' then
      begin
        tipoEvento := StringINIToTipoEvento(ok, '[' + str + ']', TVersaoeSocial(j));

        if ok and (tipoEvento = TTipoEvento(i)) then
          tsRetorno.Add(GetEnumName(TypeInfo(TTipoEvento), i) + '===' + str);
      end;
    end;
  end;

  tsRetorno.SaveToFile('C:\TEMP\TESTE.TXT');
  tsRetorno.Free;
end;

 

Link para o comentário
Compartilhar em outros sites

11 horas atrás, Renato Rubinho disse:

Olá,

Sua implementação me parece ok, apenas voltei as costantes para o local original, Rev-31479
Por favor atualize os fontes, reinstale os componentes, verifique se o problema foi resolvido e, se possível, nos informe se foi o resultado esperado.

Fiz um teste com o código a seguir e os retornos foram corretos.

Bom dia, @Renato Rubinho!

Comparei a unit commit [r35193] com a que estamos utilizando e confirmei que houve apenas a realocação das constantes (da entrada do método para entrada da unit) e essa alteração não afeta a funcionalidade do método.

Substitui a nossa versão, fork da unit, pela versão atualizada da ACBr e estaremos liberando novas releases do nosso sistema nos próximos dias.

Surgindo qualquer tipo de necessidade de correção informo a ACBr.

Obrigado.

[]s,Mário

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.