NUMERO SEQUENCIAIS

ERLANMG 21/11/2012 21:21:28
#414555
Caros colegas, boa noite!

Estou com um sistema para emissão de Conhecimentos de Transporte Eletronico, o sistema é multi-empresa e multi-usuarios, ou seja, vários usuarios um em cada cidade utiliza o sistema escolhendo qual empresa (CNPJ da Filial vai utilizar), após a escolha ele faz todo o processo de cadastro e após clicar em enviar ele gera o NÚMERO DO DOCUMENTO e envia para WS.

O problema é o seguinte este número que é gerado ele precisa ser sequencial.
Esou usando como segue abaixo:

rs.Open [Ô]SELECT * FROM cte WHERE Data BETWEEN [ô][Ô] & datai & [Ô][ô] AND [ô][Ô] & dataf & [Ô][ô]and serie like [ô][Ô] & text3.Text & [Ô]%[ô] order by numero[Ô], conn (Vou incluir na SQL o CNPJ da emprresa também)

iIf rs.EOF = True Then
text2.Text = geracodigo([Ô]1[Ô], 9)
[ô]Else
rs.MoveLast
text2.Text = geracodigo(rs!numero + 1, 9)
[ô]End If

Ou voces acham melhor criar um campo na tabela da empresa como ultimo CT-e emitido, todas que clicarem em enviar ele consultar o ultimo ct-e emitido da tabela empresa e soma um.

Gostaria da opinião de voces, pois o sistema está rodando em ambiente de homologação mas em janeiro entrará em produção e não quero ter problemas desse tipo.

Observação: BD em MYSQL hospedado em servidor UOL e VB6.

Desde já gardeço a todos.

Abraços



SINCLAIR 21/11/2012 21:38:10
#414556
Resposta escolhida
Camarada,

Cada CTe é um documento que foi impresso com determinado número. Assim, na tabela que grava as CTe, além do cliente, data e outros campos, deve guardar o número do cte. Pegue o número do último CTe e adicione 1, mas faça isto somente quando for gravar novo CTe.

Quando estiver fazendo um NOVO CTe, não forme o número ainda, faça só antes do insert into porque enquanto o usuário estiver fazendo o CTe, outro usuário, talvez da mesma filial esteja fazendo CTe também, então assim:

Usuario 1: Fazendo CTe, pegou o número 123 porque o último era 122 e usuário demorando para gravar, clicar no botão gravar CTe
Usuario 2: Fazendo CTe, o último ainda é 122 porque o usuário 1 ainda não gravou, então o numero será 123 e usuário 2 grava rapidinho
Usuario 1: Depois de muito tempo grava o CTe que tinha deixado na tela, e grava com numero 123 que confunde/apaga o CTe do usuario 2.

Faça um select para pegar o último numero de CTe e adicione 1, apenas no momento da gravação, logo antes do INSERT INTO, que resolve (claro a tabela de CTe precisa ter o campo para gravar o numero do mesmo).
Tópico encerrado , respostas não são mais permitidas