alerta('Atenção! Não foi possível concretizar esta venda. Por favor confirme novamente ou tente mais tarde. Obrigado!');
abort;
end;
o problema que ocorre é que a maquina1 gera o mesmo codigo no mesmo segundo em que esta transacao está sendo realizada pela maquina2 antes dela sofrer o commit e quando a maquina2 finaliza seu commit, ela altera o registro da venda da maquina1 e sobrescreve os registros, ou seja a venda da maquina1 é perdida.
infelizmente isso já ocorreu 2 vezes....
antes utilizava o trigger mas ele não gera id sequencialmente. ele gera um codigo que mesmo que não tenha sido gravado, não é gerado mais. acho estao entendedo o q estou falando.
Pergunta
Felipee
Galera,
vou procurar detalhar o maximo.
vejo que o pessoal acaba rodando em circulo neste assunto. li outros post e percebo que acaba ficando na mesmo.
se algume passou por isso e puder me ajudar agradeceria imensamente.
tenho tres tabelas em rede relacionadas a cadastro de nf:
tab1-cabecalho
tab2-itens nf
tab3-parcelas nf
temos que ter o mesmo id para as tres tabelas para manter a integridade.
o q faço:
1-dou um append em todas realizando os respectivos cadastros;
2-num botao de confirmacao para gravar os lancamento da nf faço:
tab1.edit;
tab1.filedbyname('codtab1').value:=geracod(tab1, codtab1);
tab1.post;
geracod - possui um select max
tab2.first;
while not tab2.eof do
begin
tab2.edit;
tab2.filedbyname('codtab2').value:=tab1.filedbyname('codtab1').value;
tab2.post;
end;
tab3.first;
while not tab2.eof do
begin
tab3.edit;
tab3.filedbyname('codtab3').value:=tab1.filedbyname('codtab1').value;
tab3.post;
end;
//inicia transacao para gravar os registros
TudoOK:= False;
Transacao.TransactionID:= 1;
Transacao.IsolationLevel:= xilReadCommitted;
dm.conexao.StartTransaction(Transacao);
//grava os registros
if tab1.ApplyUpdates(0) = 0 then
if tab2.ApplyUpdates(0) = 0 then
if tab3.ApplyUpdates(0) = 0 then
TudoOK:= True;
if TudoOK then
begin
dm.conexao.Commit(Transacao);
baixaestoque;
end
else
begin
dm.conexao.Rollback(Transacao);
alerta('Atenção! Não foi possível concretizar esta venda. Por favor confirme novamente ou tente mais tarde. Obrigado!');
abort;
end;
o problema que ocorre é que a maquina1 gera o mesmo codigo no mesmo segundo em que esta transacao está sendo realizada pela maquina2 antes dela sofrer o commit e quando a maquina2 finaliza seu commit, ela altera o registro da venda da maquina1 e sobrescreve os registros, ou seja a venda da maquina1 é perdida.
infelizmente isso já ocorreu 2 vezes....
antes utilizava o trigger mas ele não gera id sequencialmente. ele gera um codigo que mesmo que não tenha sido gravado, não é gerado mais. acho estao entendedo o q estou falando.
a emissao de nf tem que ser sequencial.
uso d7, firebird 1.5 e dbexpress.
agradeço qualquer ajuda e aguardo.
felipee.
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.