Definindo um Buffer

Discussão em 'Progress 4GL' iniciado por homerswat, Novembro 18, 2010.

  1. homerswat

    homerswat Sem Pontuação

    Como definir um Buffer dentro de um programa.

    Meu caso: Dentro do EMS5 tenho os títulos de Antecipação. Mediante o EMS2 esses títulos são prestados conta.
    No EMS5 ele tem a tabela de Movimentos do AP (movto_tit_ap).

    Nesta programa na parte de Titulos Relac ele faz uma for each da Tit_ap e da Movto_tit_ap. Porem nos movimentos ele tem um Buffer da Tit_ap para poder buscar a chave da nota que abateu a antecipação.

    Como Definir o Buffer para tirar uma cópia da Tit_ap. para poder ler novamente a Tit_ap.

    Ex de como eu gostaria que ficasse esse relatório. NO CAMPO NOTA, como eu consigo buscar a nota que abateu um título, sendo que a informação é gravada dentro da mesma tabela.

    Nota Data Valor Original Saldo
    0001 18/11/2010 100,00 10,00

    Dt Trans Nota Valor Abat Abrev Transação
    18/11/2010 0452 90,00 BXA Baixa
  2. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Caro colega, eu não consegui entender bem a sua dúvida, mas um buffer pode ser usado no exemplo seguinte:

    01) Preciso ler um título qualquer e depois buscar todos os títulos relacionados a este que está na memória, ou seja:
    Código:
    find first titulo(1) where <condição> no-lock no-error.
    for each titulo(2) of titulo(1) where <condicao> no-lock:
          disp titulo(1).<campos>
                 titulo(2).<campos>.
    end.
    
    02) Neste caso, a rotina se perderia pois ao dar um FIND guardou-se na memória o registro do titulo(1), porém ao fazer o FOR EACH na titulo(2) perde-se os dados da titulo(1), ocasionando erro na rotina, neste caso usamos o buffer, que é uma cópia exata da tabela titulo na memoria, ou seja, eu consigo trabalhar com 2 insdtâncias da tabela em tempo de execução:

    Código:
    def buffer bf-titulo for titulo.
    find first titulo where <condição> no-lock no-error.
    for each bf-titulo of titulo where <condicao> no-lock:
          disp titulo.<campos>
                 bf-titulo.<campos>.
    end.
    
    A diferença do BUFFER da TEMP-TABLE, é que o Buffer mantem todas as caracteristicas da tabela, inclusive ao fazer inclusão/modificação/exclusão afetará diretamente na tabela do banco de dados, já a TEMP-TABLE é somente na memória da sessão, porém você terá que sempre popular ela.
  3. homerswat

    homerswat Sem Pontuação

    Obrigado pela ajuda, estive fazendo um outro relatório e o Buffer funcionou perfeitamente.

    Precise listar uma ordem de produção, e os itens da composição.

    Usei o buffer para listar a descrição destes itens. e funcionou perfeitamente.

    Obrigado

Compartilhe esta Página