Calcular tolerância do cartão ponto

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
wilkemaia
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 18 Dez 2013 9:40 am

Bom dia Pessoal ,gostaria da ajuda de vocês eu preciso calcular a batidas diarias de um funcionário já contanto os
10 minutos diários. alguém tem algum exemplo de como fazer?
:cry: eu tenho por exemplo a batida 07:55 ,12:05 ,14:00,18:00 nesse caso gerou os 10 minutos de tolerância
no caso funcionário entrou 08:06,12:06,14:06,18:06 nesse caso teria que ficar 24 negativos
estou fazendo assim na minha select

Selecionar tudo

hr_hist_inicio:=08:00,hr_hist_intervalo:=12:00,hr_hist_retorno:=14:00,

select hr_inicial,HR_INICIO_INTERVALO,HR_FINAL_INTERVALO,hr_final,hr_hist_saida=18:06
 
 ((subStr(hr_hist_inicio,1,2)*60) + subStr(hr_hist_inicio,4,2))- ((subStr(hr_inicial,1,2)*60) + subStr(hr_inicial,4,2)) +
 ((subStr(hr_hist_intervalo,1,2)*60) + subStr(hr_hist_intervalo,4,2))-((subStr(hr_inicio_intervalo,1,2)*60) + TO_NUMBER(REPLACE(substr(HR_INICIO_INTERVALO,4,2),':',''), '99')) +
 ((subStr(hr_hist_retorno,1,2)*60) + subStr(hr_hist_retorno,4,2))-((subStr(hr_final_intervalo,1,2)*60) + subStr(hr_final_intervalo,4,2)) +
 ((subStr(hr_hist_saida,1,2)*60) + subStr(hr_hist_saida,4,2)) -((subStr(hr_final,1,2)*60) + subStr(hr_final,4,2))min

from tb_ponto_diario
where cd_chapa='5794' and dt_ponto=fn_conv_data('26/09/2014')
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Não entendi muito bem o que é pra fazer. Você quer saber o atraso baseado num horário FIXO ?
(ou apenas a quantidade de minutos que ele trabalhou a menos?)

Neste exemplo: 08:06,12:06,14:06,18:06
Teoricamente, se ele chegou 6 minutos atrasado, mas em compensação, trabalhou 6 minutos a mais ao meio dia. (saldo Zero). O mesmo na tarde. Na minha opinião, ele ficou com saldo ZERO, pois recuperou suas horas.
wilkemaia
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 18 Dez 2013 9:40 am

Sim, seria em minutos de atraso mas com o cálculo dos 10 minutos de tolerância, só que também não posso compensar. você teria algum exemplo ?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Já que o objetivo é saber o atraso baseado num horário fixo, creio que o ideal é testar sempre:

Na chegada:
* HORA_QUE_CHEGOU - HORA_CORRETA

Na saída:
* HORA_CORRETA - HORA_QUE_SAIU

Dessa forma, se esse valor retornado for positivo, significa que ele chegou atrasado ou saiu antes, e esse valor deve contar como não trabalhado.

Vamos testar um exemplo:

08:06 - 08:00 = 6 minutos (chegou atrasado 6 minutos, conforme a fórmula.)
12:00 - 12:06 = -6 minutos (ou seja, saiu depois do horário ao meio dia, neste caso, não interessa, pois não vai ser compensado! Se saiu depois, perdeu, hehehe)
14:06 - 14:00 = 6 minutos (chegou atrasado de tarde).
18:00 - 18:06 = -6 minutos (negativo denovo, saiu depois do horário, perdeu).

Neste caso, ele deve apenas considerar os numeros positivos!

No caso, vai somar 6 + 6 = 12 minutos de atraso!
Os outros horários, devem ser ignorados porque não compensa.

Como tem 10 de tolerância, tem que descontar apenas 2 minutos dele.

Seria isso ?
wilkemaia
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 18 Dez 2013 9:40 am

seria mais ou menos assim.
se o funcionário chegou 08:06- 12:06 - 14:06- 18:06 . teria que dar aqui 12 minutos positivos já que não compensa.
quanto a forma de checar o horário, eu pensei usar decode , mas não consegui usar .

exemplo das tolerância 07:55 - 11:55-13:55-17:55
08:05 - 12:05- 14:05-18:05 creio eu que teria que checar se o horário da batida está dentro
dessa tolerância.
você teria alguma ideia
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Como que ta organizado as horas na tabela?
Manda pra gente um exemplo.
wilkemaia
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 18 Dez 2013 9:40 am

Amigo a tabela de horas tem essa estrutura.

Selecionar tudo

CD_FAIXA_HORARIO    NOT NULL VARCHAR2(6)  
HR_INICIAL          NOT NULL VARCHAR2(10) 
HR_INICIO_INTERVALO NOT NULL VARCHAR2(10) 
HR_FINAL_INTERVALO  NOT NULL VARCHAR2(10) 
HR_FINAL            NOT NULL VARCHAR2(10) 

AS HORAS PRINCIPAIS SÃO
08:00 12:00 14:00 18:00
07:00 11:00 13:00 16:20
11:30 15:00 17:00 20:50
08:00 12:00 13:00 16:20
wilkemaia
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 18 Dez 2013 9:40 am

Resolvido, Graças a Deus e com ajuda do espirito santo eu consegui fazer os decodes deixo aqui os códigos caso
alguém precise.
Eu crie duas funções uma horas positivas e a outra horas negativas

Selecionar tudo

create or replace
FUNCTION fn_extranegativo(HR_INICIAL_ IN VARCHAR2 ,HR_INICIO_INTERVALO_ in varchar2,HR_FINAL_INTERVALO_ in varchar2,HR_FINAL_ in varchar2 ,HR_HIST_INICIO_ in varchar2 ,HR_HIST_INTERVALO_ in varchar2 ,HR_HIST_RETORNO_  in varchar2,HR_HIST_SAIDA_ in varchar2)
RETURN number IS  /*Zerar as batidas que estão dentro 10 minutos diários, 5 minutos para mais  e 5 minutos para menos.Wilke 21/10/2014*/
vs_saida varchar2(10);
vsaidanegativo number;
hr_inicial varchar2(10);
hr_hist_inicio VARCHAR2(5);

hr_inicio_intervalo varchar2(5);
hr_hist_intervalo varchar2(5);
hr_final_intervalo varchar2(5);
hr_hist_retorno varchar2(5);
hr_final varchar2(5);
hr_hist_saida varchar2(5);
saldonegativo number;
BEGIN
      hr_inicial:=HR_INICIAL_;
      hr_hist_inicio:=HR_HIST_INICIO_;
      
      hr_inicio_intervalo:=HR_INICIO_INTERVALO_;
      hr_hist_intervalo:=HR_HIST_INTERVALO_;
      hr_final_intervalo:=HR_FINAL_INTERVALO_;
      hr_hist_retorno:=HR_HIST_RETORNO_;
      hr_final:=HR_FINAL_;
      hr_hist_saida:=HR_HIST_SAIDA_; 
      saldonegativo:=0;
       select   decode(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') -5/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') +5/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') -4/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') +4/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') -3/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') +3/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') -2/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') +2/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') -1/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') +1/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial))))))))))into hr_inicial
                from dual;
                
       select         
                decode(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') -5/(24*60),'hh24:mi')),hr_hist_intervalo,hr_inicio_intervalo,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') +5/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') -4/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') +4/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') -3/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') +3/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') -2/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') +2/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') -1/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') +1/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO))))))))))INTO HR_INICIO_INTERVALO
                                             
                from dual;
          
          select 
                decode(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') -5/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') +5/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') -4/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') +4/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') -3/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') +3/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') -2/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') +2/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') -1/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') +1/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo))))))))))into hr_final_intervalo
           from dual;
          
        select
                (decode(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') -5/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') +5/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') -4/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') +4/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') -3/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') +3/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') -2/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') +2/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') -1/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') +1/(24*60),'hh24:mi')),hr_hist_saida,hr_final)))))))))))into hr_final
           from dual;
          
    select    
          
          
          decode(SIGN(((subStr(hr_hist_retorno,1,2)*60) + subStr(hr_hist_retorno,4,2))-((subStr(hr_final_intervalo,1,2)*60) + subStr(hr_final_intervalo,4,2))),-1,   
          ((subStr(hr_hist_retorno,1,2)*60) + subStr(hr_hist_retorno,4,2))-((subStr(hr_final_intervalo,1,2)*60) + subStr(hr_final_intervalo,4,2)),
          decode(SIGN(((subStr(hr_hist_retorno,1,2)*60) + subStr(hr_hist_retorno,4,2))-((subStr(hr_final_intervalo,1,2)*60) + subStr(hr_final_intervalo,4,2))),-1,NULL,0))+
          
          DECODE(((subStr(hr_final_intervalo,1,2)*60) + subStr(hr_final_intervalo,4,2)),NULL,((subStr(hr_hist_retorno,1,2)*60) + subStr(hr_hist_retorno,4,2))-((subStr(hr_hist_saida,1,2)*60) + subStr(hr_hist_saida,4,2)),0)+

          DECODE(SIGN(((subStr(hr_hist_inicio,1,2)*60) + subStr(hr_hist_inicio,4,2))-((subStr(hr_inicial,1,2)*60) + subStr(hr_inicial,4,2))),-1,
         ((subStr(hr_hist_inicio,1,2)*60) + subStr(hr_hist_inicio,4,2))-((subStr(hr_inicial,1,2)*60) + subStr(hr_inicial,4,2)),
          DECODE(SIGN(((subStr(hr_hist_inicio,1,2)*60) + subStr(hr_hist_inicio,4,2))-((subStr(hr_inicial,1,2)*60) + subStr(hr_inicial,4,2))),-1,NULL,0))+
          DECODE(((subStr(hr_inicial,1,2)*60) + subStr(hr_inicial,4,2)),NULL,((subStr(hr_hist_inicio,1,2)*60) + subStr(hr_hist_inicio,4,2))-((subStr(hr_hist_intervalo,1,2)*60) + subStr(hr_hist_intervalo,4,2)),0)+
         
          DECODE(((subStr(HR_INICIO_INTERVALO,1,2)*60) + subStr(HR_INICIO_INTERVALO,4,2)),NULL,((subStr(hr_hist_inicio,1,2)*60) + subStr(hr_hist_inicio,4,2))-((subStr(hr_hist_intervalo,1,2)*60) + subStr(hr_hist_intervalo,4,2)),0) +   

           DECODE(SIGN(((subStr(hr_final,1,2)*60) + subStr(hr_final,4,2))-((subStr(hr_hist_saida,1,2)*60) + subStr(hr_hist_saida,4,2))),-1,
         ((subStr(hr_final,1,2)*60) + subStr(hr_final,4,2))-((subStr(hr_hist_saida,1,2)*60) + subStr(hr_hist_saida,4,2)),
          DECODE(SIGN(((subStr(hr_final,1,2)*60) + subStr(hr_final,4,2))-((subStr(hr_hist_saida,1,2)*60) + subStr(hr_hist_saida,4,2))),-1,NULL,0))+
          
          DECODE(((subStr(hr_final,1,2)*60) + subStr(hr_final,4,2)),NULL,((subStr(hr_hist_retorno,1,2)*60) + subStr(hr_hist_retorno,4,2))-((subStr(hr_hist_saida,1,2)*60) + subStr(hr_hist_saida,4,2)),0)+
          
          DECODE(SIGN(((subStr(hr_inicio_intervalo,1,2)*60) + TO_NUMBER(REPLACE(substr(HR_INICIO_INTERVALO,4,2),':',''), '99'))-((subStr(hr_hist_intervalo,1,2)*60) + subStr(hr_hist_intervalo,4,2))),-1,
         ((subStr(hr_inicio_intervalo,1,2)*60) + TO_NUMBER(REPLACE(substr(HR_INICIO_INTERVALO,4,2),':',''), '99'))-((subStr(hr_hist_intervalo,1,2)*60) + subStr(hr_hist_intervalo,4,2)),
         DECODE(SIGN(((subStr(hr_inicio_intervalo,1,2)*60) + TO_NUMBER(REPLACE(substr(HR_INICIO_INTERVALO,4,2),':',''), '99'))-((subStr(hr_hist_intervalo,1,2)*60) + subStr(hr_hist_intervalo,4,2))),-1,NULL,0))into saldonegativo
       from dual;

          
         vsaidanegativo:=saldonegativo; 
         
               
                
        
    return vsaidanegativo;
end;

Selecionar tudo

create or replace
FUNCTION fn_extrapositivo(HR_INICIAL_ IN VARCHAR2 ,HR_INICIO_INTERVALO_ in varchar2,HR_FINAL_INTERVALO_ in varchar2,HR_FINAL_ in varchar2 ,HR_HIST_INICIO_ in varchar2 ,HR_HIST_INTERVALO_ in varchar2 ,HR_HIST_RETORNO_  in varchar2,HR_HIST_SAIDA_ in varchar2)
RETURN number IS  /*Zerar as batidas que estão dentro 10 minutos diários, 5 minutos para mais  e 5 minutos para menos.Wilke 21/10/2014*/
vs_saida varchar2(10);
vSALDOPOSITIVO number;
hr_inicial varchar2(10);
hr_hist_inicio VARCHAR2(5);

hr_inicio_intervalo varchar2(5);
hr_hist_intervalo varchar2(5);
hr_final_intervalo varchar2(5);
hr_hist_retorno varchar2(5);
hr_final varchar2(5);
hr_hist_saida varchar2(5);
SALDOPOSITIVO number;
BEGIN
      hr_inicial:=HR_INICIAL_;
      hr_hist_inicio:=HR_HIST_INICIO_;
      
      hr_inicio_intervalo:=HR_INICIO_INTERVALO_;
      hr_hist_intervalo:=HR_HIST_INTERVALO_;
      hr_final_intervalo:=HR_FINAL_INTERVALO_;
      hr_hist_retorno:=HR_HIST_RETORNO_;
      hr_final:=HR_FINAL_;
      hr_hist_saida:=HR_HIST_SAIDA_; 
      SALDOPOSITIVO:=0;
       select   decode(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') -5/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') +5/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') -4/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') +4/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') -3/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') +3/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') -2/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') +2/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') -1/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial,
                DECODE(hr_inicial,(to_char(to_date(hr_hist_inicio,'hh24:mi') +1/(24*60),'hh24:mi')),hr_hist_inicio,hr_inicial))))))))))into hr_inicial
                from dual;
                
       select         
                decode(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') -5/(24*60),'hh24:mi')),hr_hist_intervalo,hr_inicio_intervalo,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') +5/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') -4/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') +4/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') -3/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') +3/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') -2/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') +2/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') -1/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO,
                DECODE(hr_inicio_intervalo,(to_char(to_date(hr_hist_intervalo,'hh24:mi') +1/(24*60),'hh24:mi')),hr_hist_intervalo,HR_INICIO_INTERVALO))))))))))INTO HR_INICIO_INTERVALO
                                             
                from dual;
          
          select 
                decode(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') -5/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') +5/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') -4/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') +4/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') -3/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') +3/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') -2/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') +2/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') -1/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo,
                DECODE(hr_final_intervalo,(to_char(to_date(hr_hist_retorno,'hh24:mi') +1/(24*60),'hh24:mi')),hr_hist_retorno,hr_final_intervalo))))))))))into hr_final_intervalo
           from dual;
          
        select
                (decode(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') -5/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') +5/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') -4/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') +4/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') -3/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') +3/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') -2/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') +2/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') -1/(24*60),'hh24:mi')),hr_hist_saida,hr_final,
                 DECODE(hr_final,(to_char(to_date(hr_hist_saida,'hh24:mi') +1/(24*60),'hh24:mi')),hr_hist_saida,hr_final)))))))))))into hr_final
           from dual;
          
    select       
          DECODE(SIGN( ((subStr(hr_hist_inicio,1,2)*60) + subStr(hr_hist_inicio,4,2))-((subStr(hr_inicial,1,2)*60) + subStr(hr_inicial,4,2))),+1,
         ((subStr(hr_hist_inicio,1,2)*60) + subStr(hr_hist_inicio,4,2))-((subStr(hr_inicial,1,2)*60) + subStr(hr_inicial,4,2)),
          DECODE(SIGN(((subStr(hr_hist_inicio,1,2)*60) + subStr(hr_hist_inicio,4,2))-((subStr(hr_inicial,1,2)*60) + subStr(hr_inicial,4,2))),+1,NULL,0))+

          DECODE(SIGN(((subStr(hr_final,1,2)*60) + subStr(hr_final,4,2))-((subStr(hr_hist_saida,1,2)*60) + subStr(hr_hist_saida,4,2))),+1,
         ((subStr(hr_final,1,2)*60) + subStr(hr_final,4,2))-((subStr(hr_hist_saida,1,2)*60) + subStr(hr_hist_saida,4,2)),
         DECODE(SIGN(((subStr(hr_final,1,2)*60) + subStr(hr_final,4,2))-((subStr(hr_hist_saida,1,2)*60) + subStr(hr_hist_saida,4,2))),+1,NULL,0))+

         DECODE(SIGN(((subStr(hr_inicio_intervalo,1,2)*60) + TO_NUMBER(REPLACE(substr(HR_INICIO_INTERVALO,4,2),':',''), '99'))-((subStr(hr_hist_intervalo,1,2)*60) + subStr(hr_hist_intervalo,4,2))),+1,
         ((subStr(hr_inicio_intervalo,1,2)*60) + TO_NUMBER(REPLACE(substr(HR_INICIO_INTERVALO,4,2),':',''), '99'))-((subStr(hr_hist_intervalo,1,2)*60) + subStr(hr_hist_intervalo,4,2)),
        DECODE(SIGN(((subStr(hr_inicio_intervalo,1,2)*60) + TO_NUMBER(REPLACE(substr(HR_INICIO_INTERVALO,4,2),':',''), '99'))-((subStr(hr_hist_intervalo,1,2)*60) + subStr(hr_hist_intervalo,4,2))),+1,NULL,0))into SALDOPOSITIVO
       from dual;

          
         vSALDOPOSITIVO:=SALDOPOSITIVO; 
                    
               
                
        
    return vSALDOPOSITIVO;
end;


Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 20 visitantes