Condição de filtro no Progress.

Discussão em 'Progress 4GL' iniciado por AndersonApdo, Janeiro 3, 2013.

  1. AndersonApdo

    AndersonApdo Membro Participativo

    Bom dia pessoal.
    No código abaixo estou com o seguinte problema:
    A variável chamada piCCusto recebe o código dos Centros de Custo que possuo aqui na empresa, mas, nem sempre ela será utilizada, queria saber se existe outra forma a não ser criar um IF dentro do meu código para verificar esta condição.
    No Oracle eu consigo analisar se o parâmetro que estou passando possui valor ou não na hora de atribuir no campo de comparação. O Progress possui um valor especifico que eu possa comparar e ele desconsiderar determinada comparação?

    Código:
    DEF VAR piCCusto AS CHARACTER FORMAT "X(50)" INITIAL "50300".
    
    FOR EACH pim_pedido WHERE pim_pedido.pim_cod_estab = "UFL" AND                                                    
        pim_pedido.pim_ccusto = piCCusto  AND                             
        pim_pedido.pim_ped_nivel < 2 AND 
        pim_pedido.pim_situacao <> "E" AND
        pim_pedido.pim_situacao <> "A" AND
        pim_pedido.pim_situacao <> "R" NO-LOCK:                             
           
        IF AVAIL pim_pedido THEN DO:
                
                    DISP pim_pedido.pim_ccusto.
        END.   
        
    END.
  2. LeandroSantos

    LeandroSantos Membro Participativo

    Voce pode fazer assim:
    Código:
    DEF VAR piCCusto AS CHARACTER FORMAT "X(50)" INITIAL "50300".
    
    FOR EACH pim_pedido WHERE pim_pedido.pim_cod_estab = "UFL" AND                                                    
        (if piCCusto <> "" then pim_pedido.pim_ccusto = piCCusto else pim_pedido.pim_ccusto <> "") AND                             
        pim_pedido.pim_ped_nivel < 2 AND 
        pim_pedido.pim_situacao <> "E" AND
        pim_pedido.pim_situacao <> "A" AND
        pim_pedido.pim_situacao <> "R" NO-LOCK:                             
           
        DISP pim_pedido.pim_ccusto.
        
    END.
    
    Ou utilizar uma query.
    Código:
    def var qh        as handle.
    def var vtemp     as char.
    DEF VAR piCCusto  AS CHARACTER FORMAT "X(50)" INITIAL "50300".
    
    if piCCusto <> "" then 
       vtemp = "FOR EACH pim_pedido WHERE pim_pedido.pim_cod_estab = "UFL" AND
                   pim_pedido.pim_ccusto = " + quoter(piCCusto).
    else
       vtemp = "FOR EACH pim_pedido WHERE pim_pedido.pim_cod_estab = "UFL" AND.
    
    
    vtemp = vtemp + "pim_pedido.pim_ped_nivel < 2 AND 
                     pim_pedido.pim_situacao <> "E" AND
                     pim_pedido.pim_situacao <> "A" AND
                     pim_pedido.pim_situacao <> "R" NO-LOCK".
    
    create query qh.
    qh:set-buffers( buffer pim_pedido:handle ).
    qh:query-prepare(vtemp).
    qh:query-open.
    
    do while qh:get-next.
       
       DISP pim_pedido.pim_ccusto.
       
    END.
    
    PS: Em ambos os casos não precisa utilizar o "if avail" dentro do "for each" ou "do while".
  3. AndersonApdo

    AndersonApdo Membro Participativo

    Muito obrigado!! :D

Compartilhe esta Página