Leandro Peixoto Postado 23 de Março de 2012 Tópicos Que Criei: 5 Tópicos/Dia: 0.00 Meu Conteúdo: 29 Conteúdo/Dia: 0.01 Reputação: 0 Pontos/Conquistas: 198 Conteúdo Resolvido: 0 Dias Ganho: 0 Status: Offline Denunciar Compartilhar Postado 23 de Março de 2012 Prezados, Estou com uma dificuldade em um relatório e cinte da funcionalidade desse canal, peço a ajuda de todos. O relatório mencionado traz a informação da quantidade de horas executada por um determinado associado em um dia quando ela for superior a 2hs por dia, como item de controle sobre a quantodade máxima permitida por lei. No entanto este relatório não traz a informação fidedigna quando o horário de associado não está cadastrado corretamente. Assim fizemos uma análise e identificamos que o campo mais correto para essa apuração é da quantidade de horas trabalhadas por dia (AAFHTFUN.HTRAB). Com isso colocamos esse campo no relatório e o mesmo traz a informação em minutos. Preciso de uma sentença que converta esse nº em horas no formato (00:00) e traga apenas as pessoas que tenham trabalhado mais que 10:00 no dia. A clausula usada para essa conversão no parâmetro anterior (horas extras executadas) é este abaixo. Já tentei substituir o campo EXTRAEXECUTADO por HTRAB e não funcionou. select CASE WHEN ( :EXTRAEXECUTADO )>=60 THEN CASE WHEN ( :EXTRAEXECUTADO )%60 <> 0 then RIGHT('00'+CONVERT(VARCHAR,CONVERT(INTEGER,( :EXTRAEXECUTADO )/60)),2) +':'+ RIGHT('00'+CONVERT(VARCHAR,( :EXTRAEXECUTADO %60)),2) else RIGHT('00'+CONVERT(VARCHAR,CONVERT(INTEGER,( :EXTRAEXECUTADO )/60)),2) +':00' end WHEN :EXTRAEXECUTADO <60 THEN '000:'+RIGHT('00'+CONVERT(VARCHAR,( :EXTRAEXECUTADO )),2) end EXTRAEXECUTADO, CASE WHEN ( :EXTRAAUTORIZADO )>=60 THEN CASE WHEN ( :EXTRAAUTORIZADO )%60 <> 0 then RIGHT('00'+CONVERT(VARCHAR,CONVERT(INTEGER,( :EXTRAAUTORIZADO )/60)),2) +':'+ RIGHT('00'+CONVERT(VARCHAR,( :EXTRAAUTORIZADO %60)),2) else RIGHT('00'+CONVERT(VARCHAR,CONVERT(INTEGER,( :EXTRAAUTORIZADO )/60)),2) +':00' end WHEN :EXTRAAUTORIZADO <60 THEN '000:'+RIGHT('00'+CONVERT(VARCHAR,( :EXTRAAUTORIZADO )),2) end EXTRAAUTORIZADO FROM GCOLIGADA WHERE CODCOLIGADA = 0 Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Frederico Postado 23 de Março de 2012 Tópicos Que Criei: 11 Tópicos/Dia: 0.00 Meu Conteúdo: 1.140 Conteúdo/Dia: 0.21 Reputação: 60 Pontos/Conquistas: 6.161 Conteúdo Resolvido: 0 Dias Ganho: 33 Status: Offline Idade: 42 Dispositivo: Windows Denunciar Compartilhar Postado 23 de Março de 2012 Prezados, Estou com uma dificuldade em um relatório e cinte da funcionalidade desse canal, peço a ajuda de todos. O relatório mencionado traz a informação da quantidade de horas executada por um determinado associado em um dia quando ela for superior a 2hs por dia, como item de controle sobre a quantodade máxima permitida por lei. No entanto este relatório não traz a informação fidedigna quando o horário de associado não está cadastrado corretamente. Assim fizemos uma análise e identificamos que o campo mais correto para essa apuração é da quantidade de horas trabalhadas por dia (AAFHTFUN.HTRAB). Com isso colocamos esse campo no relatório e o mesmo traz a informação em minutos. Preciso de uma sentença que converta esse nº em horas no formato (00:00) e traga apenas as pessoas que tenham trabalhado mais que 10:00 no dia. A clausula usada para essa conversão no parâmetro anterior (horas extras executadas) é este abaixo. Já tentei substituir o campo EXTRAEXECUTADO por HTRAB e não funcionou. select CASE WHEN ( :EXTRAEXECUTADO )>=60 THEN CASE WHEN ( :EXTRAEXECUTADO )%60 <> 0 then RIGHT('00'+CONVERT(VARCHAR,CONVERT(INTEGER,( :EXTRAEXECUTADO )/60)),2) +':'+ RIGHT('00'+CONVERT(VARCHAR,( :EXTRAEXECUTADO %60)),2) else RIGHT('00'+CONVERT(VARCHAR,CONVERT(INTEGER,( :EXTRAEXECUTADO )/60)),2) +':00' end WHEN :EXTRAEXECUTADO <60 THEN '000:'+RIGHT('00'+CONVERT(VARCHAR,( :EXTRAEXECUTADO )),2) end EXTRAEXECUTADO, CASE WHEN ( :EXTRAAUTORIZADO )>=60 THEN CASE WHEN ( :EXTRAAUTORIZADO )%60 <> 0 then RIGHT('00'+CONVERT(VARCHAR,CONVERT(INTEGER,( :EXTRAAUTORIZADO )/60)),2) +':'+ RIGHT('00'+CONVERT(VARCHAR,( :EXTRAAUTORIZADO %60)),2) else RIGHT('00'+CONVERT(VARCHAR,CONVERT(INTEGER,( :EXTRAAUTORIZADO )/60)),2) +':00' end WHEN :EXTRAAUTORIZADO <60 THEN '000:'+RIGHT('00'+CONVERT(VARCHAR,( :EXTRAAUTORIZADO )),2) end EXTRAAUTORIZADO FROM GCOLIGADA WHERE CODCOLIGADA = 0 Leandro, Utilizo essa função para fazer conversão de numero para hora, exemplo 60 equivale a 1 hora CREATE FUNCTION FORMATO_HORA (@TEMPO INT, @FORMATO INT) RETURNS VARCHAR(20) AS BEGIN DECLARE @HORARIO VARCHAR(20) DECLARE @HORA INT DECLARE @MINUTO INT DECLARE @SEGUNDO INT DECLARE @NEGATIVO BOOLEAN SET @NEGATIVO = 0 -- VARIÁVEL @NEGATIVO PARA CONTROLE DE RESULTADOS NEGATIVOS. IF @TEMPO < 0 -- TESTA SE A VARIÁVEL DE ENTRADA É NEGATIVA. BEGIN SET @TEMPO = @TEMPO * -1; -- CONVERTE A VARIÁVEL DE ENTRADA EM POSITIVO. SET @NEGATIVO = 1 -- ALTERA O STATUS DA VARIÁVEL DE CONTROLE. END --FORMATO DE HH:MM:SS IF @FORMATO = 1 BEGIN SET @HORA = (@TEMPO/3600) SET @MINUTO = (@TEMPO%3600) / 60 SET @SEGUNDO = (@TEMPO%3600) % 60 SELECT @HORARIO = CASE WHEN @TEMPO/3600 >= 1 THEN CASE LEN(CAST((@HORA) AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END + CAST ((@HORA) AS VARCHAR) + ':' + CASE LEN(CAST((@MINUTO) AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END + CAST((@MINUTO) AS VARCHAR) + ':' + CASE LEN(CAST((@SEGUNDO) AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END + CAST((@SEGUNDO) AS VARCHAR) ELSE CASE LEN(CAST((@MINUTO) AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END + CAST((@MINUTO) AS VARCHAR) + ':' + CASE LEN(CAST((@SEGUNDO) AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END + CAST((@SEGUNDO) AS VARCHAR) END END --FORMATO DE HH:MM ELSE IF @FORMATO = 2 BEGIN SET @HORA = (@TEMPO/60) SET @MINUTO = (@TEMPO%60) SELECT @HORARIO = CASE LEN(CAST((@HORA) AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END + CAST ((@HORA) AS VARCHAR) + ':' + CASE LEN(CAST((@MINUTO) AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END + CAST((@MINUTO) AS VARCHAR) END --TRATA O RESULTADO NEGATIVO IF @NEGATIVO = 1 SET @HORARIO = ('-' + @HORARIO) RETURN (@HORARIO) END select dbo.FORMATO_HORA(60,2) Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Leandro Peixoto Postado 23 de Março de 2012 Tópicos Que Criei: 5 Tópicos/Dia: 0.00 Meu Conteúdo: 29 Conteúdo/Dia: 0.01 Reputação: 0 Pontos/Conquistas: 198 Conteúdo Resolvido: 0 Dias Ganho: 0 Status: Offline Autor Denunciar Compartilhar Postado 23 de Março de 2012 Leandro, Utilizo essa função para fazer conversão de numero para hora, exemplo 60 equivale a 1 hora CREATE FUNCTION FORMATO_HORA (@TEMPO INT, @FORMATO INT) RETURNS VARCHAR(20) AS BEGIN DECLARE @HORARIO VARCHAR(20) DECLARE @HORA INT DECLARE @MINUTO INT DECLARE @SEGUNDO INT DECLARE @NEGATIVO BOOLEAN SET @NEGATIVO = 0 -- VARIÁVEL @NEGATIVO PARA CONTROLE DE RESULTADOS NEGATIVOS. IF @TEMPO < 0 -- TESTA SE A VARIÁVEL DE ENTRADA É NEGATIVA. BEGIN SET @TEMPO = @TEMPO * -1; -- CONVERTE A VARIÁVEL DE ENTRADA EM POSITIVO. SET @NEGATIVO = 1 -- ALTERA O STATUS DA VARIÁVEL DE CONTROLE. END --FORMATO DE HH:MM:SS IF @FORMATO = 1 BEGIN SET @HORA = (@TEMPO/3600) SET @MINUTO = (@TEMPO%3600) / 60 SET @SEGUNDO = (@TEMPO%3600) % 60 SELECT @HORARIO = CASE WHEN @TEMPO/3600 >= 1 THEN CASE LEN(CAST((@HORA) AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END + CAST ((@HORA) AS VARCHAR) + ':' + CASE LEN(CAST((@MINUTO) AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END + CAST((@MINUTO) AS VARCHAR) + ':' + CASE LEN(CAST((@SEGUNDO) AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END + CAST((@SEGUNDO) AS VARCHAR) ELSE CASE LEN(CAST((@MINUTO) AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END + CAST((@MINUTO) AS VARCHAR) + ':' + CASE LEN(CAST((@SEGUNDO) AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END + CAST((@SEGUNDO) AS VARCHAR) END END --FORMATO DE HH:MM ELSE IF @FORMATO = 2 BEGIN SET @HORA = (@TEMPO/60) SET @MINUTO = (@TEMPO%60) SELECT @HORARIO = CASE LEN(CAST((@HORA) AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END + CAST ((@HORA) AS VARCHAR) + ':' + CASE LEN(CAST((@MINUTO) AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END + CAST((@MINUTO) AS VARCHAR) END --TRATA O RESULTADO NEGATIVO IF @NEGATIVO = 1 SET @HORARIO = ('-' + @HORARIO) RETURN (@HORARIO) END select dbo.FORMATO_HORA(60,2) Frederico. Primeiramente muito obrigado pelo retorno, mas como faria para colocar em meu relatório. Criaria uma sentença copiando e colando o que você colocou acima? Em que local colocaria o campo HTRAB do meu relatório? Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Frederico Postado 23 de Março de 2012 Tópicos Que Criei: 11 Tópicos/Dia: 0.00 Meu Conteúdo: 1.140 Conteúdo/Dia: 0.21 Reputação: 60 Pontos/Conquistas: 6.161 Conteúdo Resolvido: 0 Dias Ganho: 33 Status: Offline Idade: 42 Dispositivo: Windows Denunciar Compartilhar Postado 23 de Março de 2012 Frederico. Primeiramente muito obrigado pelo retorno, mas como faria para colocar em meu relatório. Criaria uma sentença copiando e colando o que você colocou acima? Em que local colocaria o campo HTRAB do meu relatório? Leandro, Essa é uma função que precisa ser criada no banco de dados do Corpore, depois de criado a função no banco de dados ai dentro do relatório você pode usar da seguinte forma select dbo.Formato_Hora(HTRAB,1) from AAFHTFUN ou select dbo.Formato_Hora(HTRAB,2) from AAFHTFUN 1 depois da virgula é para o formato HH:MM:SS 2 depois da virgula é para o formato HH:MM []'s Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Lucas Acovre Postado 31 de Outubro de 2012 Tópicos Que Criei: 6 Tópicos/Dia: 0.00 Meu Conteúdo: 36 Conteúdo/Dia: 0.01 Reputação: 0 Pontos/Conquistas: 240 Conteúdo Resolvido: 0 Dias Ganho: 0 Status: Offline Idade: 34 Denunciar Compartilhar Postado 31 de Outubro de 2012 Tem um bem simples... Select LPAD(TRUNC(:HORA/60), 2, '0')||':'|| LPAD((:HORA-TRUNC(:HORA/60)*60), 2, '0') from dual Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Jair - Fórmula Postado 31 de Outubro de 2012 Tópicos Que Criei: 899 Tópicos/Dia: 0.14 Meu Conteúdo: 8.842 Conteúdo/Dia: 1.34 Reputação: 310 Pontos/Conquistas: 106.579 Conteúdo Resolvido: 0 Dias Ganho: 195 Status: Offline Idade: 52 Dispositivo: Windows Denunciar Compartilhar Postado 31 de Outubro de 2012 Tem um bem simples... Select LPAD(TRUNC(:HORA/60), 2, '0')||':'|| LPAD((:HORA-TRUNC(:HORA/60)*60), 2, '0') from dual Pra ORACLE neste caso... Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Lucas Acovre Postado 1 de Novembro de 2012 Tópicos Que Criei: 6 Tópicos/Dia: 0.00 Meu Conteúdo: 36 Conteúdo/Dia: 0.01 Reputação: 0 Pontos/Conquistas: 240 Conteúdo Resolvido: 0 Dias Ganho: 0 Status: Offline Idade: 34 Denunciar Compartilhar Postado 1 de Novembro de 2012 Pra SQL só trocar o TRUNC por ROUND, o negocio é a lógica usada fica mais simples do que usar uma função. Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Posts Recomendados
Participe da conversa
Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.