Pular para o conteúdo
  • Este tópico contém 6 respostas, 3 vozes e foi atualizado pela última vez 1 ano, 7 meses atrás por Avatar de regreg.
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #156954
    Avatar de regreg
    Participante

      Boa tarde, pessoal!
      Sou novo em SQL e PLsql, por isso, busca sua ajuda.
      Preciso de uma function para calcular se o periodo aquisitivo de férias corresponde a 1 ano. Obs: precisa calcular para todos os períodos aquisitivos do funcionário.
      Envio abaixo function que montei.

      create or replace function calculo_total_dias (p_func_id in number)
      return varchar is

      v_tot_dias number;
      v_retornavalor varchar2(500);

      Begin

      select sum((nvl( r.fimper, sysdate) – r.iniper)+ 1)total_dias
      into v_tot_dias
      from rp_reg_ferias r
      where r.func_id = p_func_id;

      if v_tot_dias = 365 then
      v_retornavalor := ‘periodo aquisitivo completo’;

      else v_retornavalor := ‘periodo aquisitivo incompleto’;

      end if;

      return v_retornavalor;

      end calculo_total_dias;

      #156956
      Avatar de José Laurindo ChiappaJosé Laurindo Chiappa
      Moderador

        Blz ? Então, vamos comentar/criticar o seu código, Justamente pra tentar te dar a orientação que vc precisa e vc poder melhorar…
        Bem, não conhecemos a sua modelagem, mas SUPONDO que REALMENTE um funcionário PODE ter vários períodos nessa tabela RP_REG_FERIAS e que as colunas FIMPER e INIPER ** REALMENTE ** são o fim e o início do período ok, o cálculo de intervalor de dias está correto E a soma de dias também… Falando de questões técnicas, o ponto que eu RECOMENDO que vc revise é essa comparação de 365 dias – por causa de anox bissextos nós podemos SIM ter um ano com 366 dias, com CERTEZA tua lógica de “v_tot_dias = 365 ” NÃO VAI PEGAR esses casos….

        A única Dúvida que fica aqui NÃO É técnica, não é de PL/SQL mas sim de lógica : não conheço regras de RH mas me parece, pelo pouco que ouvi falar, que na verdade CASO a soma de dias de intervalo seja MAIOR que um ano, o funcionário TEM SIM DIREITO, então imho a comparação deveria ser :

        v_tot_dias >= 365

        O que Já pegaria o caso de anos bissextos, right ???

        Obs : não é nada Exigível e que faça tanta diferença, mas Saiba que se vc quiser vc absolutamente não precisa de ter uma variável só pra guardar o valor de retorno, vc poderia codificar :

        if v_tot_dias = 365 then
        return ‘periodo aquisitivo completo’;
        else
        return ‘periodo aquisitivo incompleto’;
        end if;

        end calculo_total_dias;

        Abraços,

        José Laurindo Chiappa

        #156975
        Avatar de regreg
        Participante

          Olá! Bom dia!
          Obrigado pelos comentários/críticas do código.
          Ajudou bastante. Compilado com sucesso!

          #156981
          Avatar de José Laurindo ChiappaJosé Laurindo Chiappa
          Moderador

            Tudo jóia ? Então, veja que COMPILADO COM SUCESSO absolutamente não Isenta de bugs de lógica – não deixe de CONFIRMAR se, como eu disse, realmente não deveria ser v_tot_dias MAIOR OU IGUAL a 365 , e não IGUAL apenas como vc codificou, e CONFIRME que realmente todos os períodos são retornados se vc fizer a consulta sem o SUM….
            Isso ok, tá jóia, fofoca feita…

            Abraços,

            Chiappa

            #156996
            Avatar de MottaMotta
            Participante

              Sugiro você levantar melhor a questão , no RH ou com alguém que conheça a legislação (1), tive de adequar o relatória de férias onde trabalho na pandemia , só o relatório pois o ERP faz o cálculo , e já tinnha n capa pi poréns , a SP no fim deve ser o problema menor.

              1 é o Sistena de sua empresa ou um sistema de rh geral ?

              #157131
              Avatar de regreg
              Participante

                Boa tarde!
                Realmente o v_tot_dias deve ser >= 365.
                Obrigado pela dica.
                Att,
                Reginaldo.

                #157132
                Avatar de regreg
                Participante

                  Boa tarde!
                  Trata-se de um sistema em fase de desenvolvimento.
                  Obrigado pela dica!
                  Att,
                  Reginaldo.

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