Checar dados

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

  1. LFBuozi

    LFBuozi Membro Participativo

    Peraí, vamos desenhar aqui porque está ficando confuso.

    Temos que garantir que os dados inputados sejam desta forma em relação aos outros registros:
    Código:
           registro inicio                       registro final
                 |                                    |
    -------------+------------------------------------+------+-------------------------------+--------
                                                             |                               |
                                                        input inicio                    input final
    Não podemos deixar que seja assim:
    Código:
           registro inicio                       registro final
                 |                                    |
    -------------+-------------------------+----------+--------------------+--------------------------
                                           |                               |
                                      input inicio                    input final
    Código:
            registro inicio                       registro final
                 |                                    |
    -------------+---+---------------------------+----+-----------------------------------------------
                     |                           |
                input inicio                input final
    Código:
                                   registro inicio                    registro final
                                           |                               |
    -------------+-------------------------+----------+--------------------+--------------------------
                 |                                    |
              input inicio                      input final
    Código:
              registro inicio              registro final
                     |                           |
    -------------+---+---------------------------+----+-----------------------------------------------
                 |                                    |
             input inicio                         input final
    Também acho que não poderemos deixar que o intervalo de datas do input seja menor que dos registros, ou seja, não pode haver data final do input menor que a data inicial do registro.

    Concordam?
  2. leozuriel

    leozuriel Sem Pontuação

    LFBuozi,

    É exatamante isso que você desenhou.

    Porém preciso que seja no formato que o rogério e o leandrosantos escreveu o código, não usamos smartobject aqui estamos trabalhando com o progress caracter.


    Obrigado
  3. LFBuozi

    LFBuozi Membro Participativo

    Código:
    PROMPT tabela-item.it-codigo tabela-item.periodo-ini tabela-item.periodo-fim.
    
    IF INPUT tabela-item.periodo-ini > INPUT tabela-item.periodo-fin THEN DO:
        MESSAGE "Data final deve ser maior ou igual que data inicial"
            VIEW-AS ALERT-BOX INFO BUTTONS OK.
        LEAVE.
    END.
    ELSE DO:
    /*     /*--- Alternativa 1 - permite cadastrar qualquer periodo, maior ou menor, desde que não intercale ---*/ */
    /*     FIND LAST tabela-item WHERE tabela-item.it-codigo = INPUT tabela-item.it-codigo                         */
    /*                             AND ((tabela-item.periodo-ini >= INPUT tabela-item.periodo-ini                  */
    /*                             AND tabela-item.periodo-ini <= INPUT tabela-item.periodo-fim)                   */
    /*                              OR (tabela-item.periodo-fim >= INPUT tabela-item.periodo-ini                    */
    /*                             AND tabela-item.periodo-fim <= INPUT tabela-item.periodo-fim)) NO-ERROR.        */
        /*--- Alternativa 2 - considero a melhor, pois permite apenas períodos maiores ---*/
        FIND LAST tabela-item WHERE tabela-item.it-codigo = INPUT tabela-item.it-codigo
                                AND tabela-item.periodo-ini <= INPUT tabela-item.periodo-fim NO-ERROR.
    
        /*--- Continuando o código ---*/
        IF AVAIL tabela-item THEN DO:
            MESSAGE "Período já cadastrado"
                VIEW-AS ALERT-BOX INFO BUTTONS OK.
        END.
        ELSE DO:
            CREATE tabela-item.
            ASSIGN tabela-item.it-codigo   = INPUT tabela-item.it-codigo   
                   tabela-item.periodo-ini = INPUT tabela-item.periodo-ini 
                   tabela-item.periodo-fim = INPUT tabela-item.periodo-fim .
        END.
    END.
    
  4. LeandroSantos

    LeandroSantos Membro Participativo

    Da maneira como eu fiz acima funciona pefeitamente, é so fazer o teste.
    Código:
    def temp-table tt-projeto
       field item as int
       field cliente as int
       field dt-ini as date
       field dt-fin as date.
    
    def buffer bff-projeto for tt-projeto.
    
    repeat on endkey undo, retry:
    
       create tt-projeto.
       update tt-projeto with frame f1 1 col.
       if can-find ( first bff-projeto
                     where bff-projeto.item = tt-projeto.item
                     and   bff-projeto.cliente = tt-projeto.cliente
                     and   bff-projeto.dt-ini <= tt-projeto.dt-fin
                     and   bff-projeto.dt-fin >= tt-projeto.dt-ini
                     and   rowid(bff-projeto) <> rowid(tt-projeto) )
                     then do:
                        message
                           "Ja existe projeto neste periodo."
                           view-as alert-box.
                        undo, retry.
                     end.
    end.
  5. leozuriel

    leozuriel Sem Pontuação

    Leandro,

    O seu está funcionando porém única coisa que está falhando é no seguinte:

    Caso eu tenha um registro já existente ou seja eu queira edita-lo quando vai salvar ele cai nessa consistência e isso não pode acontecer.


    Também estou quebrando a cabeça para isso.
  6. LeandroSantos

    LeandroSantos Membro Participativo

    Se você for editar o registro voce não vai fazer validação nenhuma?
    Fiz o teste aqui e concegui editar o registro normal, somente travou se o intervalo de datas existir em outro registro.
    Voce usou o sengundo codigo que passei?
    O primeiro codigo que passe não estava verificando o rowid dos registros, ai quando vai editar ele trava.

Compartilhe esta Página