NUMERO SEQUENCIAIS
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
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
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).
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