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] RPW - Valor do campo não atualiza

Discussão em 'EMS , HCM e Totvs 11' iniciado por afarns, Fevereiro 19, 2019.

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

    bootstrapmaster Moderator Moderador Equipe de Suporte

    não, vc tem que criar um bloco de transação pra sua rotina, no caso, dentro desse .p, faz tudo dentro de um DO TRANSACTION:
    afarns curtiu isso.
  2. afarns

    afarns Sem Pontuação

    Fiz a alteração indicada pelos colegas mas não adiantou, não sei se pelo fato de o campo estar em um banco externo ele não consegui "commitar" a alteração do campo e continua mantendo "cache" do valor antes da alteração, já estou pensando em criar um programa especifico aos moldes do cd0433 para ficar de RPW apenas para essa rotina, complicado..
  3. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Porque você não troca sua lógica de funcionamento?, ou seja, ao invés de usar um campo lógico de controle, criar um registro de controle, como "Importei pedidos até o ID 10.000" (Claro que não em texto assim, rsrs, se é que vc me entende), e das próximas vezes você importa após o "10.000" e assim sucessivamente.
  4. afarns

    afarns Sem Pontuação

    No primeiro momento tentei simplificar a logica do programa, mas na verdade esse campo é uma campo character com o seguinte funcionamento.
    Nele temos 3 valores possíveis, A,P e L.

    Alteração
    Processando
    Livre

    Essa tabela está no banco de dados de um terceiro ( externo ao nosso servidor ), nosso programa acessa esse banco via conexão ODBC.
    4 rotinas utilizam esse campo, 2 rotinas de um terceiro, 2 rotinas internas.
    Uma das rotinas do terceiro lê essa tabela, já no inicio seta o parâmetro para "P" para que nossas rotinas entendam que algo está sendo processado, ela então coloca nessa tabela pedidos de compras e cadastros de novos clientes feitos via tablet pelo representante, ao final dessa rotina ela volta o parâmetro para "L".
    Nossas duas rotinas internas funcionam da seguinte forma, uma roda ao meio dia e a meia noite, ela seta o parâmetro para "P" no inicio, faz a leitura dos pedidos e clientes pendentes de cadastro e realiza a implantação deles no ERP, depois disso retorna o parâmetro para "L".
    A outra rotina interna roda de 10 em 10 minutos, altera o parâmetro para "P" no inicio, atualiza nessa tabela a quantidade de itens no estoque e ao final coloca este campo para "A" que indica para o terceiro que existe atualização de estoque para ser repassada para o tablet.
    Ai então a segunda rotina do terceiro identifica o parâmetro como "A" e atualiza a quantidade no estoque no tablet, e volta para "L".

    Não consegui imaginar como aplicar sua sugestão @rafael.andrade
    Agradeço atenção de vocês nessa questão.
  5. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Pois é, o processo é mais complexo do que imaginava.

    Você vai precisar fazer o que o Richard falou, setar esse campo de controle fora da transação, antes de tudo, e depois da transação, também fora, colocando como livre novamente.

    Só que essa solução corre o risco de ficar Processando pra sempre, caso, tipo caia a energia no meio, visto que está fora da transação. Neste caso teria que setar como livre manualmente numa eventual fechamento do processo antes da conclusão (seja por falta de energia, outra falha no sistema operacional, falha de internet, ...).
    afarns curtiu isso.
  6. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Quando falo fora da transação, seria algo do tipo:

    [Abre conexão SQL]
    UPDATE minhaTabela SET controle = "P";
    [Fecha conexão SQL]

    [Abre conexão SQL]
    [Ativa a transação na conexão]
    [FAZ TODOS OS PROCEDIMENTOS DE IMPORTAÇÃO E EXPORTAÇÃO]
    [Faz COMMIT ou ROLLBACK]
    [Fecha conexão SQL]

    [Abre conexão SQL]
    UPDATE minhaTabela SET controle = "L";
    [Fecha conexão SQL]

    Repare que abre a conexão e fecha várias vezes, coloquei isso porque uma vez ativado a transação
    na conexão, não tem como fazer operações fora da transação na mesma conexão.
    (Pelo menos é assim no driver MySQL em dotNet)
    afarns curtiu isso.
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página