Fórum Lock Registro Dbexpress + FireBird 2.1 #414391
22/03/2012
0
Tenho um sistema Ordem de Serviço que roda em rede e ultimamente vinha apresentando um
problema no valor total da conta, logo descobri q em alguns terminais
o programa ficava editado com o mesma registro.
A primeira (TA) com valor 50,00,
o segunda (TB) com valor 200,00 e
o terceira (TC) com valor 500,00 todos editando.
O terminal (TC) lancava pecas e fechava total 500,00, logo o termina
(TB) fecha valor tal R$ 200,00.
O Termnal (Tc) voltava a consulta a mesma venda e la tinha o valor
total de R$ 200,00 mas se somasse o valor do itens o valor seria 700,00.
Então pergunto tem como eu fazer um lock (como em Paradox ou Clipper) no
registro editado para q um segundo usuario não o edit ?
Obs: Usuarios q editam ao mesmo tempo, Recepcionista, Usuario-Dep-Pecas (Estoque) e o Caixa que fecha a OS.
Caso tenha uma outra solução, bem vinda.
desde já meus agradecimentos a quem puder ajudar.
100+
ANT.CARLOS/SP
Antonio Jesus
Curtir tópico
+ 0Posts
28/03/2012
Diego Lusa
Este é um típico caso de concorrência transacional. Acredito que você deva utilizar a transação com nível de isolamento Serializable. Assim, as operações concorrentes serão ordenadas de forma que a sua execução seja equivalente à execução sequencial das mesmas.
Gostei + 0
29/03/2012
Antonio Jesus
Há muito tempo já vinha pessando nisto q um dia poderia ocorrer.
Quando comecei a estudar BD Distribuidos, ai q vi claramente uma falha no meu sistema.
Vc de ter entendido bem o q eu disse.
Então como ficaria:
To falando de Ordem de Serviço:
o Term-1 abri a OS No 2500 e informou 1 produto R$ 100,00 e ficou editando,
o Term-2 abri a OS No 2500 e informou + 2 produto R$ 200,00 e ficou editando,
o Term-3 abri a OS No 2500 e informou + 3 produto R$ 300,00 e ficou editando, finalizou a OS, valor total : R$ 300,00.
o term-2 finalizou a OS e foi calculado R$ 200,00 no total dos serviços e assim aconteceria com o Term-1.
no final o term-3 iria abrir a Os 2500 novamente e viria 6 produtos e valor Total da OS igual a R$ 100,00.
Claro q no meu sistema ao fecha a OS o valor total é recalculado, mas o caixa passaria para o cliente o valor de R$ 100,00 e ao fecha seria apresentado do valor real de R$ 600,00.
Mas se eu serealizar o ultimo update será o q permanecer, então não vai continuar errado.
Por enquanto deu um jeito em logo apos salvar recalcular lendo os itens no banco e recalculando isto pq uso ClientDataSet.
100+
ANT.CARLOS/SP
Gostei + 0
31/03/2012
Diego Lusa
Uma vez bloqueado, os demais terminais que tentarem adiquirir o bloqueio sobre o registro já bloqueado serão impedidos de fazê-lo. Somente após quem adiquiriu o bloqueio comitar a transação, o próximo será liberado para editar o registro
Gostei + 0
10/06/2013
Daniel Capelari
vc está gravando o valor do pedido e é esse o problema. vc não precisa gravar o valor do pedido. vc deve calcular com base nos seus produtos. vc não precisa de um campo com o total gravado. no máximo vc pode ter um campo calculado.
se vc bloquear o registro pra alteração vai "resolver" o problema do banco de dados e estragar totalmente o processo da loja... imagina cada terminal esperando sua vez de trabalhar...
Gostei + 0
10/06/2013
Antonio Jesus
To falando de Ordem de Serviço: o Term-1 abri a OS No 2500 e informou 1 produto R$ 100,00 e ficou editando, o Term-2 abri a OS No 2500 e informou + 2 produto R$ 200,00 e ficou editando, o Term-3 abri a OS No 2500 e informou + 3 produto R$ 300,00 e ficou editando, finalizou a OS, valor total : R$ 300,00. o term-2 finalizou a OS e foi calculado R$ 200,00 no total dos serviços e assim aconteceria com o Term-1.
Então descobri qual era o problema e resolvi-o.
1-era o seguinte o Term-1 abria uma Ord.Serviço N.5200 e alterava lançando mais serviços e não salvava,
o caixa TERM-CX abria esta mesma OS e fazia o fechamento com valores já salvos, mais tarde o TERM-1 salva as
alterações efetuadas, e a merda, a OS já tinha sido fechada e os valores da OS fechada as 12:00hs R$ 200,00 as 13:00hs TERM-1 salvava as alterações e os valores eram de R$ 300,00.
Solução, tive q fazer uma rotina p/ q o caixa só feche uma OS se a mesma tiver sido finaliza pelos frentistas.
Obrigado pela atenção.
100+
ANT.CARLOS/SP
Gostei + 0
31/07/2013
José
Sendo assim estou dando o tópico por concluído.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)