Autor Tópico: ajuda com auto numeração  (Lida 4296 vezes)

Sergio

  • Newbie
  • *
  • Mensagens: 43
  • Karma: +0/-0
ajuda com auto numeração
« Online: Outubro 21, 2011, 03:05:08 pm »
Ola a todos... Estou iniciando no windev


Encontrei aqui no fórum essa rotina pra auto numeração, segui os passos e não deu certo, ela ate pega o próximo numero mas não salva no banco de dados, estou utilizando o windev 15 e hyperfile.

Ex: Tenho um cadastro de clientes, na tabela cliente na anlysis eu coloquei o código id_cliente como numeric, não sendo automatic ID
e nesse cadastro tem um EDT_id_cliente, onde no mesmo eu quero que a medida que eu for cadastrando os clientes ele vá gerando a sequência.

Grato pela atenção



////////////////////////////////////////////////////////


para auto numeração

faça o seguinte


//função para auto numerar

PROCEDURE proximonumero()
  Hreadlast(nomedatabela,codigo)
  RESULT= nomedatabela + 1


pronto, cria essa função em local procedures e quando clicar no botão novo ou em alum outro evento que desejar

vc coloca assim:

nomedocampo..value =  proximonumero()

zerloti

  • Jr. Member
  • **
  • Mensagens: 78
  • Karma: +0/-0
Re:ajuda com auto numeração
« Responder #1 Online: Outubro 21, 2011, 06:54:30 pm »
Ola Sergio,
Tambem estou iniciando no WINDEV, uma Duvida por que vc não usa o automatic id ?

Quanto a sua duvida , acredito que vc teria que usar o controle ao invés do nome do campo exemplo
EDTnomedocampo =  proximonumero()

para quando salvar buscar os dados do controle da tela ...

outro detalhe não sei se estou certo mas esta procedure só funcionária em mono usuário...
imagine a situação de 2 usuários incluindo registro e buscando o ultimo numero livre na tabela ?

uma solução seria utilizar uma tabela com acumuladores e tratar esta situação ...

Espero ter ajudado ...
boa sorte ...
 

Sergio

  • Newbie
  • *
  • Mensagens: 43
  • Karma: +0/-0
Re:ajuda com auto numeração
« Responder #2 Online: Outubro 24, 2011, 09:07:13 am »
Ola Grato pela atenção

Sobre o pq não utilizar o a numeração automática? Aqui na empresa é usado esse padrão, o código do cliente tem que ser editável e sequencial.

Estou fazendo da seguinte maneira:

PROCEDURE autoid()

HReadLast(Cliente,id_cliente)
RESULT = Cliente.id_cliente  + 1

No botão novo e estou adicionado: EDT_Cliente = autoid() ou EDT_Cliente..value = autoid()

Quando clico em novo ele gera próximo número na tela, quando salvo ele não cria um novo registo mas altera o que já existia!

Davi

  • Global Moderator
  • *****
  • Mensagens: 426
  • Karma: +0/-0
Re:ajuda com auto numeração
« Responder #3 Online: Outubro 24, 2011, 10:43:51 am »
esta colocando o Hreset(nomedatabela) ao clicar no novo?

Se não resetar a tabela, quando cria um novo registro ele sempre vai alterar o ultimo ou algum outro registro

Sergio

  • Newbie
  • *
  • Mensagens: 43
  • Karma: +0/-0
Re:ajuda com auto numeração
« Responder #4 Online: Outubro 24, 2011, 01:45:39 pm »
Consegui resolver da seguinte forma


PROCEDURE autoid()

HReadLast(Cliente,id_cliente)
RESULT = Cliente.id_cliente  + 1
HReset(Cliente)
FileToScreen()

Botão salvar abaixo de FileToScreen()

EDT_Cliente..Value = autoid()

O problema era na procedure

Valeu.. grato a todos

Socrates.Gambarra

  • Visitante
Re:ajuda com auto numeração
« Responder #5 Online: Novembro 14, 2011, 10:11:28 am »
Uma solução para a auto numeração seria, assim que entrar na tela de cadastro, checar o último registro, e adicionar +1 e gravá-lo. Ou seja você vai gravar de inicio só este campo e o restante dos campos da tabela ficariam em branco, e no final do cadastro faz a alteração gravando o resto dos dados. Com isso vários usuários poderão adicionar ao mesmo tempo, pois cada um esta adicionando +1 e gravando. Outra coisa, caso você queira cancelar o cadastro no meio do caminho, você deleta o registro da tabela.

Exemplo.
Último registro = 100
  Manoel entra na tela de cadastro, adiciona 100+1 e grava, último registro agora é 101
  João entra na tela de cadastro, adiciona 101+1 e grava, último registro agora é 102. E assim por diante.

Espero ter ajudado em alguma coisa.

Sócrates Gambarra

Davi

  • Global Moderator
  • *****
  • Mensagens: 426
  • Karma: +0/-0
Re:ajuda com auto numeração
« Responder #6 Online: Novembro 16, 2011, 08:12:30 am »
Eu trabalho um pouco diferente na minha rotina de auto numeração  ( no caso a minha auto numeração trabalha com letra e numero)

se dois usuários abrir o cadastro de cliente por exemplo e começar a cadastrar os dois vão estar com o mesmo código de registro

porém quando for gravar, o sistema vai verificar se aquele número realmente esta livre ainda, caso estiver grava, se não estiver o sistema
emite um aviso na tela avisando que esta trocando o código para o próximo código livre.

Fiz dessa maneira para não ter que sempre usar uma gravação e uma alteração ao gravar o registros.

No final o resultado é o mesmo.