1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

[RESOLVIDO] LOCK Tabela saldo-terc

Discussão em 'EMS , HCM e Totvs 11' iniciado por matheusfalco, Dezembro 10, 2014.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. matheusfalco

    matheusfalco Sem Pontuação

    Bom dia pessoal.

    Estou com um problema e vou compartilhar com vocês para caso alguém já tenha passado por isso.

    Temos um programa específico que fatura reportes de produção com baixa de saldo em terceiro.

    Temos um cenário onde o nosso CD envia as peças para a fábrica como terceiro, a fábrica produz e retorna o acabado, esse programa que faz esse faturamento de retorno de remessa, e faz a baixa do terceiro.

    Até ai tudo bem, o problema é que quando 2 meninas faturam juntas, e o programa vai realizar a baixa da mesma nota, me retorna a mensagem de trava da tabela saldo-terc.

    Busco as notas por fifo no sistema, e infelizmente tem que ser assim.

    Abaixo segue clientlog, ele trava no momento da chamada Run atualizaQtAlocadaSaldoTerc na boin404te.

    Essa procedure, até onde vi, faz a alocação e desalocação do saldo.

    [14/12/09@18:07:25.780-0200] P-186120 T-025044 3 4GL 4GLTRACE Return from localizaWtDocto "yes" [dibo/bodi317pr.p]
    [14/12/09@18:07:25.780-0200] P-186120 T-025044 2 4GL 4GLTRACE Run trataErros "yes bodi317pr 1331" [geraWtItDoctoPartindoDoTtItTercNf - dibo/bodi317sd.p @ 38764]
    [14/12/09@18:07:25.780-0200] P-186120 T-025044 2 4GL 4GLTRACE Run devolveErrosbodi317pr in dibo/bodi317pr.p [trataErros - dibo/bodi317sd.p @ 21195]
    [14/12/09@18:07:25.780-0200] P-186120 T-025044 3 4GL 4GLTRACE Return from devolveErrosbodi317pr "localizaWtDocto~dibo/bodi317pr.p RowErrors" [dibo/bodi317pr.p]
    [14/12/09@18:07:25.780-0200] P-186120 T-025044 2 4GL 4GLTRACE Run copiaRowErrors2ParaRowErrors [trataErros - dibo/bodi317sd.p @ 21198]
    [14/12/09@18:07:25.780-0200] P-186120 T-025044 3 4GL 4GLTRACE Return from copiaRowErrors2ParaRowErrors [dibo/bodi317sd.p]
    [14/12/09@18:07:25.780-0200] P-186120 T-025044 3 4GL 4GLTRACE Return from trataErros [dibo/bodi317sd.p]
    [14/12/09@18:07:25.790-0200] P-186120 T-025044 2 4GL 4GLTRACE Run geraItensPartindoDoComponente in inbo/boin404te.p "0x000000003eec618b 0 590201 63,751 0 no 09/12/14 290" [geraWtItDoctoPartindoDoTtItTercNf - dibo/bodi317sd.p @ 38879]
    [14/12/09@18:07:26.030-0200] P-186120 T-025044 2 4GL 4GLTRACE Run atualizaQtAlocadaSaldoTerc "yes 949 0074756 30 190101 003049C 10 63,751" [geraItensPartindoDoComponente - inbo/boin404te.p @ 21015]
    [14/12/09@18:07:26.030-0200] P-186120 T-025044 2 4GL 4GLMESSAGE saldo-terc em uso por matheus.prad,709 em PR-S093. Espere ou pressione CANCEL para sair. (2624)


    Se alguém tiver uma luz, pq eu não sei muito o que fazer.

    Abraço!
  2. Eilleen

    Eilleen Membro Ativo

  3. fernandofarah

    fernandofarah Membro Participativo

    Bom dia.

    Acho que um find com share-lock somente no registro a utilizar funcionaria, mas seria preciso avaliar os risco de um share-lock nesse processo como um todo.

    :D
  4. SAC

    SAC Membro Participativo

    Eu tenho uma convicção pessoal. Consultas e Relatórios (que não atualizam tabelas) = NO-LOCK, precisa de atualização = EXCLUSIVE-LOCK, sempre...
    O que é saudavel é diminuir o máximo possível o tamanho da transação e tirar qualquer interação de usuário durante a transação, com isso você diminui e possibilidade de lock e quando houver, você vai saber o bloco que ocorre.
    Exemplo hipotético: Gerar um Pedido... testar saldos estoque, limites de créditos, demais calculos e impostos em uma temp-table like tabela_pedido, depois de tudo feito abre uma transação a partir de um buffer-copy para a tabela REAL de pedidos, atualizando apenas o número do mesmo, com isso a transação é pequena e rápida... e nada perguntas para o usuário no meio da transação, tipo "confirma geração.... ou algo assim". Com estes pequenos cuidados diminui drásticamente a possibilidade de lock.
    Não é definitivo, mas é uma forma de evitar stress.
  5. matheusfalco

    matheusfalco Sem Pontuação

    O problema é que se vcs repararem no clientlog, esse erro ocorre quando eu chamo uma procedure do produto padrão totvs, geraWtItDoctoPartindoDoTtItTercNf na dibo/bodi317sd.p, e eu não tenho o fonte dela.

    :-(
  6. VNardi

    VNardi Sem Pontuação

    Boa tarde Matheus, você conseguiu resolver? Estou com esse mesmo problema, tentou ajuda com a Totvs?
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página