Fórum Sequencia numérica de romaneio [MYSQL] #332673

05/11/2006

0

Salve, salve gurus !!!

Passada a ressaca de feriado e eleições, cá estamos novamente...
Eu emperrei aqui numa ideologia simples, porém complexa (hehe)...

vou tentar ilustrar meu cenário:

15 caixas operando um sistema de vendas, todos acessando a mesma base simultaneamente... lindo, maravilha....

Minha duvida é a seguinte... como eu consigo gerar antecipadamente um numero de controle no caso da emissão de um romaneio ou um orçamento ?

digamos que a sequencia inicie em 1000

caixa 1 abre registro, sequencia 1000 atribuida.
caixa 2 abre registro, sequencia 1001 atribuida.
caixa 1 cancela processo, sequencia 1000 fica indisponivel.
caixa 2 fecha registro, sequencia 1001 utilizada.
caixa 3 abre registro, sequencia 1002 atribuida.

e a 1000 ? :?

existe alguma maneira de resolver isso ?

espero ter conseguido me expressar.

abraços !


Campsoft

Campsoft

Responder

Posts

06/11/2006

Uildenei

Tive este mesmo problema (usandofirebird) e nao achei uma forma simples de controlar aih deixei pra criar o numero na hora de gravar...

Uildenei


Responder

Gostei + 0

06/11/2006

Leonardoffsilva

Amigo, não faça desse jeito. Faça assim :

Caixa 1 abre registro, sequencia 1000 atribuida.
caixa 2 abre registro, sequencia 1001 atribuida.
caixa 1 cancela processo, sequencia 1000 fica MARCADA COMO CANCELADA.
caixa 2 fecha registro, sequencia 1001 MARCADA COMO CONCLUIDA.
caixa 3 abre registro, sequencia 1002 atribuida.

- Dessa forma obtem-se controle sobre os processo concluidos e cancelados.


Responder

Gostei + 0

06/11/2006

Motta

Crie uma tabela que vai guardar a última sequencia válida,
esta fica locada até a conclusão do processo (usar transaction), ela só é atualizada ao fim do processo e qq outro que tente acessa-la fica aguardando a liberação do registro (o bd precisa suportar esta implementação)

O problema é gerar deadlocks se o nº de acesso simultaneos for grande e a transação demorada, mas é única forma que garante que não haverá ´banguelas´ .

Outra solução seria buscar a 1ª seq. disponível , mas creio ser mais complicada em geral não pode ser feita pois a sequencia deve crescer com o tempo.


Responder

Gostei + 0

06/11/2006

Campsoft

Então Leonardo, no caso de sequencias canceladas eu estaria atribuindo para um romaneio ou orçamento que já foi processado, e cancelado de fato posteriormente. No cenário que eu tentei ilustrar, o operador nem chegou se quer a concluir o processo. seria como se a ação nao existisse.

Da forma que voce mostrou, eu de qualquer maneira teria sequencias não utilizadas, e não canceladas.


Motta, este é meu medo, os malditos deadlocks... eu sinceramente não faço a minima ideia de como proceder.


...ainda quebrando a cuca e aguardando novas ideias....

Abraços !


Responder

Gostei + 0

07/11/2006

Campsoft

Galera, eu andei dando uma consultada na net, achei uma saida que não sei se é a ideal, mais logicamente tem fundamento.


[url]http://www.clubedelphi.net/artigos/sequenciadorFB.asp[/url]

Pelo que entendi, ele trabalha com uma outra tabela onde faz
um ´catch´ e armazena todos os numeros descartados.

E no momento da atribuição da sequencia, ele dá uma olhada nesta base de descarte, se existir algum numero ele aproveita, se a base estiver vazia, retorna ao modo normal de incremento.

Eu estou tentando implementar isso por aqui, qualquer novidade eu posto.

Abraços.


Responder

Gostei + 0

07/11/2006

Campsoft

Na pior das hipóteses, numa queda de energia ou um travamento inesperado do server, cai naquele triste dilema que o Motta apontou... DeadLock.


Responder

Gostei + 0

07/11/2006

Motta

Galera, eu andei dando uma consultada na net, achei uma saida que não sei se é a ideal, mais logicamente tem fundamento. [url]http://www.clubedelphi.net/artigos/sequenciadorFB.asp[/url] Pelo que entendi, ele trabalha com uma outra tabela onde faz um ´catch´ e armazena todos os numeros descartados. E no momento da atribuição da sequencia, ele dá uma olhada nesta base de descarte, se existir algum numero ele aproveita, se a base estiver vazia, retorna ao modo normal de incremento. Eu estou tentando implementar isso por aqui, qualquer novidade eu posto. Abraços.


Tem de ver se isto pode ser feito , às vezes há até retrições legais de usar um nº anterior.

Já fiz esta solução da tabela para nº sequencial é não tive maiores problemas, mas já vi um sistema que travava pois a transação que gravava o registro era demorada ,tornando o tempo de espera pela tabela um gargalo.


Responder

Gostei + 0

08/11/2006

Campsoft

Então... andei consultando amigos, e um deles me disse uma coisa que me chamou atenção.

Ele trabalha com duas sequencias em paralelo, sendo uma ´não-oficial´ que é exibida e utilizada como controle interno da loja, e outra OFICIAL, que será utilizada no momento de uma eventual impressão de nota fiscal.

Essa me parece uma ideia interessante...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar