Ir para conteúdo
  • Cadastre-se

dev botao

Geração do ID dos eventos (pcesGerador.pas)


Ver Solução Respondido por Italo Giurizzato Junior,
  • Este tópico foi criado há 2045 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Olá a todos.

Temos um situação que ocorre esporadicamente no envio de informações ao eSocial.

O lote gerado pelo ACBr contém mais de um evento com o mesmo número de ID.

Ao fazer uma analise do código onde o ID é gerado (pcesGerador.pas linha 382) percebi que a função random é utilizada, mais o gerador de números aleatórios nunca foi inicializado, usando a função randomize como informado na ajuda do Delphi 2010 abaixo.

Citar

Generates random numbers within a specified range.

In Delphi code, Random returns a random number within the range 0 <= X < Range. If Range is not specified, the result is a real-type random number within the range:

0 <= X < 1.

To initialize the random number generator, add a single call Randomize or assign a value to the RandSeed variable before making any calls to Random.

 

Estou enviando em anexo a unit com a implementação aqui sugeridas, para se for o caso, seja incorporada ao repositório do ACBr.

Fico a disposição para qualquer esclarecimento necessário.

@Italo Jurisato Junior

pcesGerador.pas

Link para o comentário
Compartilhar em outros sites

Pessoal, fiz mais alguns testes aqui e está solução não funcionou corretamente.

Criei um programa para gerar e gravar no banco de dados 1.000.000 de IDs. Após executar por várias vezes tive uma média de 60.000 IDs repetidos.

A solução que encontrei foi criar um campo sequencial dentro do componente TeSocialEvento e utilizá-lo ao invés do número aleatório.

Seque em anexo a unit altera para apreciação.

Fico aberto a sugestões ou esclarecimentos.

pcesGerador.pas

Link para o comentário
Compartilhar em outros sites

  • Consultores
  • Solution

Bom dia Gustavo,

Se você analisar o programa exemplo vai notar que todos os eventos possui um campo chamado Sequencial.

No programa exemplo esse campo recebe o valor zero e o componente gera um numero aleatório.

Mas na sua aplicação você deve atribuir um valor diferente de zero.

Como é validado o ID dos eventos, veja a regra abaixo:

A identificação única do evento (Id) é composta por 36 caracteres, conforme o que segue:

IDTNNNNNNNNNNNNNNAAAAMMDDHHMMSSQQQQQ

ID - Texto Fixo "ID";

T - Tipo de Inscrição do Empregador (1 - CNPJ; 2 - CPF);

NNNNNNNNNNNNNN - Número do CNPJ ou CPF do empregador - Completar com zeros à direita. No caso de pessoas jurídicas, o CNPJ informado deve conter 8 ou 14 posições de acordo com o enquadramento do contribuinte para preenchimento do campo {ideEmpregador/nrInsc} do evento S-1000, completando-se com zeros à direita, se necessário.

AAAAMMDD - Ano, mês e dia da geração do evento;

HHMMSS - Hora, minuto e segundo da geração do evento;

QQQQQ - Número sequencial da chave. Incrementar somente quando ocorrer geração de eventos na mesma data/hora, completando com zeros à esquerda.

OBS.: No caso de pessoas jurídicas, o CNPJ informado deverá conter 8 ou 14 posições de acordo com o enquadramento do contribuinte para preenchimento do campo {ideEmpregador/nrInsc} do evento S-1000, completando-se com zeros à direita, se necessário. 

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2045 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
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.