Checar dados

Discussão em 'Progress 4GL' iniciado por leozuriel, Julho 6, 2011.

  1. leozuriel

    leozuriel Sem Pontuação

    Estou desenvolvendo um programa de manutenção de projetos
    A única coisa que preciso é que ele faça uma checagem de dados no seguinte sentido:


    Um Projeto cadastrado com:

    item A + cliente A - no período de 01/01/11 até 01/02/11

    Se eu tentar cadastrar qualquer outro projeto com esse mesmo item e mesmo cliente em um intervalo de datas que passem por essa data já cadastrada ele deve barrar. ex:

    item A + cliente A - no período de 01/01/11 até 05/05/11 - ERRADO
    item A + cliente A - no período de 25/01/11 até 13/03/11 - ERRADO

    Só será válido caso seja:

    item A + cliente A - no período de 02/02/11 em diante - CERTO

    Lembrando que somente se o item e o cliente forem iguais que deve se checar o período cadastrado, para ITEM A + CLIENTE B e vice-versa deve deixar passar.
  2. Rogerio

    Rogerio Moderator Moderador Equipe de Suporte

    Acho que isso pode te auxiliar a um começo!!! Falta fazer mais algumas validações!!!

    Código:
    IF item-tabela = item-novo AND
        cliente-tabela = cliente-novo THEN
         IF periodo-fim-tabela = ? THEN
              MESSAGE 'Ja existe projeto aberto para este cliente'
        ELSE
            IF (periodo-ini-novo >= periodo-ini-tabela and
                 periodo-ini-novo <= periodo-ini-novo) THEN
                MESSAGE 'Ja existe projeto para esse cliente neste periodo'.
    
    
  3. leozuriel

    leozuriel Sem Pontuação

    Rogerio,

    Fiz esta linha para verificar a consistencia e mesmo assim ele deixou passar na validação.

    Não consegui fazer o que eu estava precisando, o chato é que falta apenas isto para eu entregar este trabalho.

    Já estou há alguns dias atrasado por conta disso.

    Não sei mais a que recorrer.
  4. jdchaves

    jdchaves Membro Participativo

    Cara tem que ver como é a tua programação, se for com smartobject tenta assim:

    Código:
    FIND tabela-item
                WHERE tabela-item.it-codigo = INPUT FRAME {&FRAME-NAME} tabela-item.it-codigo
                  AND tabela-item.cod-cliente = INPUT FRAME {&FRAME-NAME} tabela-item.cod-cliente
                  AND tabela-item.periodo-ini >= INPUT FRAME {&FRAME-NAME} tabela-item.periodo-ini
                  AND tabela-item.periodo-fin <= INPUT FRAME {&FRAME-NAME} tabela-item.periodo-fin NO-LOCK NO-ERROR.
    IF AVAIL tabela-item THEN DO:
                {utp/ut-table.i mgesp ldc_item_param_int 1}.
                RUN utp/ut-msgs.p (INPUT "show",
                                   INPUT 17006,
                                   INPUT "Verificar Intervalo de data").
                APPLY 'entry' TO tabela-item.it-codigo IN FRAME {&FRAME-NAME}.
                RETURN 'adm-error'.
            END.
    

    Jeferson de Chaves
    @x_jeferson
    jdchaves@live.com
    jchaves@szsolucoes.com.br
    skype: jeferson.de.chaves
  5. LFBuozi

    LFBuozi Membro Participativo

    Continuando o que o jdchaves fez, pode ser assim:
    Código:
    {utp/ut-table.i mgesp ldc_item_param_int 1}.
    /*--- Verifica se a data final é maior que a inicial ---*/
    IF INPUT FRAME {&FRAME-NAME} tabela-item.periodo-ini > INPUT FRAME {&FRAME-NAME} tabela-item.periodo-fin THEN DO:
        RUN utp/ut-msgs.p (INPUT "show",
                       INPUT 17006,
                       INPUT "Data final deve ser maior ou igual que data inicial").
        RETURN 'adm-error'.
    END.
    ELSE DO:
        /*--- Procura registro onde a data final é maior do que a data inicial que estou digitando ---*/
        /*--- Se achar, acusa erro, senão cadastra ---*/
        FIND tabela-item
                    WHERE tabela-item.it-codigo = INPUT FRAME {&FRAME-NAME} tabela-item.it-codigo
                      AND tabela-item.cod-cliente = INPUT FRAME {&FRAME-NAME} tabela-item.cod-cliente
                      AND tabela-item.periodo-fin >= INPUT FRAME {&FRAME-NAME} tabela-item.periodo-ini NO-LOCK NO-ERROR.
        IF AVAIL tabela-item THEN DO:
            RUN utp/ut-msgs.p (INPUT "show",
                               INPUT 17006,
                               INPUT "Verificar Intervalo de data").
            APPLY 'entry' TO tabela-item.it-codigo IN FRAME {&FRAME-NAME}.
            RETURN 'adm-error'.
        END.
        ELSE DO:
            CREATE tabela-item.
            ...
        END.
    END.
  6. LeandroSantos

    LeandroSantos Membro Participativo

    Código:
    def buffer bff-tabela for tabela.
    
    if can-find( first bff-tabela
                 where bff-tabela.item    = <novo item>
                 and   bff-tabela.cliente = <novo cliente>
                 and   bff-tabela.dt_ini <= <nova dt fin>
                 and   bff-tabela.dt_fin >= <nota dt ini> )
                 then do:
                    message
                       "Ja existe projeto para este cliente neste periodo."
                       view-as alert-box info.
                    return no-apply.
                 end.
    

Compartilhe esta Página