Pular para o conteúdo
  • Este tópico contém 3 respostas, 3 vozes e foi atualizado pela última vez 17 anos, 4 meses atrás por Rodrigo Mesquita.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #83841
    Rodrigo Mesquita
    Participante

      Senhores,

      Estou com um problema e gostaria de sugestões.Tenho uma tabela de cadastro de formato de documentos.Nela eu cadastro os períodos em que cada formato estará válido.

      Ex.:
      COD_FORMATO, DATA_INICIO, DATA_FIM
      001 01/11/2008 15/12/2008
      002 15/12/2008 23/12/2008
      003 24/12/2008

      A aplicação pesquisa durante o período que eu estiver utilizando qual o documento que estará válido naquele momento.Notem que se eu tiver trabalhando no dia 15/12/2008. De acordo com os dados acima eu vou ter o modelo 001 e o 002 válido.

      O que preciso é de uma idéia de como validar para que toda vez que eu for inserir um formato novo, eu não permita colocar um período em que algum dia deste período caia no mesmo dia que um período já cadastrado.

      #83842
      Avatar photoLeonardo Litz
      Participante

        Cara isso é muito fodastico… ja trabalhei em um projetim que tinha data de vigencia, vc tem que validar o seguinte:

        Periodo

        01/01/2000 a 01/12/2000

        o novo periodo nao pode esta contido dentro do periodo antigo
        exemplo: nao pode ser 01/06/2000 a 01/10/2000

        o novo periodo nao pode abranger o periodo antigo
        exemplo: nao pode ser 01/12/1999 a 01/01/2001

        o novo periodo nao pode intercalar o periodo antigo
        exemplo: nao pode ser 01/12/1999 a 10/06/2000
        ou : nao pode ser 10/10/2000 a 01/02/2001

        É teoria dos conjuntos pura.

        Teste o seguinte:

        Se a menor data do periodo a ser inserido é maior que a maior data do periodo existente

        ou
        Se a maior data do periodo a ser inserido é menor que a menor data do periodo existente.

        Lógico que vc tem que consistir que no periodo a data inicial deve ser menor que a data final.

        Blz? Qualquer duvida posta ai…

        Vlw Leonardo Litz

        #83844
        Avatar photoRegis Araujo
        Participante

          Ola Rodrigo, boa tarde!

          Bom, acho que isto deve ser validado no momento da inserção de um novo período, onde você deverá validar se o valor que será inserido na DATA_INICIO já existe na DATA_FIM, se sim, você deve acrescentar +1 no valor, mas ai também vai depender de qual o período de validade deste formato, se for período pré-determinado, você também terá que somar +1 no DATA_FIM.

          Bom, se eu entendi bem.. é isto..

          Abraços…

          #83856
          Rodrigo Mesquita
          Participante

            Senhores,

            Consegui efetuar a validação, segue abaixo para quem precisar

            function VERIFICA_PERIODO(pInicio in Date, pTermino in Date) return boolean is
            Cursor cPeriodo Is (Select data_inicio,
            data_termino
            From Modelos_Documentos M
            Where (m.data_inicio Between pInicio And pTermino Or
            m.data_Termino Between pInicio And pTermino));
            vResult Boolean;
            Begin
            vResult := True;
            For i In cPeriodo Loop
            If i.data_inicio Is Not Null And i.data_termino Is Null Then
            If pInicio Is Not Null Then
            If pInicio > i.data_inicio Then
            vResult := False;
            End If;
            End If;
            If pTermino Is Not Null Then
            If pTermino > i.data_inicio Then
            vResult := False;
            End If;
            End If;
            Else
            If pInicio Between i.data_inicio And i.data_termino Then
            vResult := False;
            End If;
            If pTermino Between i.data_inicio And i.data_termino Then
            vResult := False;
            End If;
            End If;
            End Loop;
            return(vResult);
            end VERIFICA_PERIODO;

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.