[RESOLVIDO] Trigger ou UPC no CD0903 - Atualizar Item

Discussão em 'EMS , HCM e Totvs 11' iniciado por sbordin, Janeiro 24, 2013.

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

    sbordin Sem Pontuação

    Estou com um problema no programa CD0903, existe um campo dentro deste programa chamado ORIGEM sendo que este campo esta armazenado na tabela ITEM com o nome de CODIGO_ORIG sendo ele do tipo INTEGER.
    Ocorre que tenho um programa externo que interage (Integra) com o cadastro de itens, desta forma, toda vez que altero um item no programa externo a integração entre o programa externo e o datasul (EMS 2.04) altera o campo CODIGO_ORIG para um valor padrão, sendo assim o programa some com a informação anterior.
    Gostaria de um programa ou trigger onde eu tivesse a possibilidade de guardar o que esta no campo CODIGO_ORIG antes da atualização, sendo que após a atualização do CODIGO_ORIG para o valor padrão eu pudesse voltar com a informação que estava anteriormente.

    Alguem poderia me ajudar?

    BORDIN
  2. lima

    lima Membro Participativo

    Bom dia,

    Você pode criar uma UPC de Trigger para a tabela de item, ai lá você armazena o valor anterior.

    Ou pode armazenar no momento da atualização do valor. Como é feita esta atualização? Via ODBC? Esse programa externo não é padrão datasul ou específico?

    Abraços.
  3. sbordin

    sbordin Sem Pontuação

    Pensei na trigger mas tenho poucos conhecimentos no progress. Como posso fazê-la?
    Segue abaixo uma que eu fiz.. Mas essa é fácil.
    DEFINE PARAMETER BUFFER b-item FOR item.
    DEFINE PARAMETER BUFFER b-item-old FOR item.

    IF NEW(b-item) THEN
    ASSIGN b-item.ind-item-fat = NO.

    RETURN "OK":U.
  4. lima

    lima Membro Participativo

    Isso mesmo, está certo desta maneira que você fez.. na Trigger de Write você tem sempre o valor da tabela atual e o valor anterior, isso quando for uma alteração..quando for create a old não existe.

    Outra coisa que devo alertar, é que se você atualiza a tabela via ODBC, nenhuma trigger é executada.

    Para cadastrar a trigger que vc desenvolveu, entrar no programa btb\btb006aa.r e cadastrar esta sua trigger para a tabela item. Depois disso, é necessário executar o program de otimizador de performance para efetivar sua transação. Lembrando que para rodar o otimizador de performance não pode haver nenhum usuário ativo na base. O otimizador de performance pode ser encontrado no módulo básico do Datasul EMS.

    Espero ter ajudado.

    Abraços.
  5. sbordin

    sbordin Sem Pontuação

    ok. Mas como consigo o valor anterior? Veja que no exemplo que mandei eu verifico o valor novo. Certo?

    Bordin
  6. lima

    lima Membro Participativo

    Amigo, o valor anterior está na tabela old...segue exemplo abaixo.

    Código:
    DEFINE PARAMETER BUFFER b-item FOR item.
    DEFINE PARAMETER BUFFER b-item-old FOR item.
    
    IF NEW(b-item) THEN /*Este IF é um create na tabela de item*/
        ASSIGN b-item.ind-item-fat = NO.
    ELSE DO:
        message "Valor novo " b-item.codigo-orig skip
                     "Valor antigo " b-item-old.codigo-orig view-as alert-box.
    END.
    
    RETURN "OK":U.
    
    Se você deixar a mensagem acima, verá que na alteração caso você mude o valor do codigo-orig, os valores serão diferentes. Conseguiu entender?

    Abraços.
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página