Jump to content
weverton dias

Erro consulta sql retorno dados outra tabela sub query RM automação de ponto

Recommended Posts

Bom dia Pessoal! Estou com problemas na consulta abaixo, preciso retornar as horas extras a 70% em uma coluna, e 100% em outra coluna, através da tabela AMOVFUNDIA… e incorporar a consulta abaixo… alguém pode ajudar…
 

 

 

SELECT F.CHAPA,

       P.NOME,

       S.DESCRICAO,

       LEFT(FORMAT(Sum(H.ATRASO) / 60'00') + ':'

            FORMAT((Sum(H.ATRASO) / 60.0 Sum(H.ATRASO) / 60) * 60'00'), 5)                                   AS ATRASO,

       LEFT(FORMAT(Sum(H.FALTA) / 60'00') + ':'

            FORMAT((Sum(H.FALTA) / 60.0 Sum(H.FALTA) / 60) * 60'00'), 5)                                     AS FALTA,

       LEFT(FORMAT(Sum(H.COMPENSADO) / 60'00') + ':'

            FORMAT((Sum(H.COMPENSADO) / 60.0 Sum(H.COMPENSADO) / 60) * 60'00'), 5)                           AS COMPENSADO,

       LEFT(FORMAT(Sum(H.EXTRAEXECUTADO) / 60'00')

            + ':'

            FORMAT((Sum(H.EXTRAEXECUTADO) / 60.0 Sum(H.EXTRAEXECUTADO) / 60) * 60'00'), 6)                   AS TOTAL_EXTRA_100_70,

       

       /*DEVERÁ RETORNA O EVENTO DE HORAS EXTRAS A 70% E SOMA-LOS*/

       (SELECT LEFT(FORMAT(Sum(M.NUMHORAS) / 60'00') + ':'

                    FORMAT((Sum(M.NUMHORAS) / 60.0 Sum(M.NUMHORAS) / 60) * 60'00'), 5AS EXTRA70

        FROM   AMOVFUNDIA M

        WHERE  CODEVE 0122

               AND M.DATA >= H.DATA

               AND M.DATA <= H.DATA),

               

       /*DEVERÁ RETORNA O EVENTO DE HORAS EXTRAS A 100% E SOMA-LOS*/

       /*(SELECT M.NUMHORAS AS EXTRA100

       FROM   AMOVFUNDIA M

       WHERE  CODEVE = 0122

       AND M.DATA >= H.DATA

       AND M.DATA <= H.DATA),*/

 

       LEFT(FORMAT(Sum(H.BASE) / 60'00') + ':'

            FORMAT((Sum(H.BASE) / 60.0 Sum(H.BASE) / 60) * 60'00'), 5)                                       AS HORASTRAB_SEM_EXTRAS,

       LEFT(FORMAT(Sum(H.BASE H.EXTRAEXECUTADO) / 60'00')

            + ':'

            FORMAT((Sum(H.BASE H.EXTRAEXECUTADO) / 60.0 Sum(H.BASE H.EXTRAEXECUTADO) / 60) * 60'00'), 6AS HORASTRABALHADAS,

       LEFT(FORMAT(Sum(H.ADICIONAL) / 60'00') + ':'

            FORMAT((Sum(H.ADICIONAL) / 60.0 Sum(H.ADICIONAL) / 60) * 60'00'), 5)                             AS ADICIONAL,

       LEFT(FORMAT(Sum(H.ABONO) / 60'00') + ':'

            FORMAT((Sum(H.ABONO) / 60.0 Sum(H.ABONO) / 60) * 60'00'), 5)                                     AS ABONO,

       F.CHAPA                                                                                                     AS CHAPA_BASE

FROM   PPESSOA AS P

       INNER JOIN PFUNC AS F

               ON P.CODIGO F.CODPESSOA

       INNER JOIN PSECAO AS S

               ON F.CODCOLIGADA S.CODCOLIGADA

                  AND F.CODSECAO S.CODIGO

       INNER JOIN AAFHTFUN AS H

               ON F.CHAPA H.CHAPA

WHERE  F.CODCOLIGADA :COLIGADA

       AND H.DATA >= :DATA_INICIAL )

       AND H.DATA <= :DATA_FINAL )

GROUP  BY F.CHAPA,

          P.NOME,

          S.DESCRICAO,

          H.DATA

Edited by weverton dias

Share this post


Link to post
Share on other sites

@weverton dias, boa tarde!

Segue, possível solução. 

 

TOTVS-RM/UTL_GET_HORA.sql at master · luisgustavogomes/TOTVS-RM (github.com)

/*

USE CORPORERM
GO 


DECLARE @CODCOLIGADA INT = 1 ;
DECLARE @DATAINCIAL DATETIME = '2021-08-16'
DECLARE @DATAFINAL DATETIME = '2021-09-15'

;WITH TAB_DADOS_FUNC
AS
(
    SELECT 
         F.CODCOLIGADA
        ,F.CHAPA
        ,P.NOME
        ,S.DESCRICAO
        ,H.[DATA]
        ,SUM(H.ATRASO) AS 'ATRASO'
        ,SUM(H.FALTA) AS 'FALTA'
        ,SUM(H.COMPENSADO) AS 'COMPENSADO'
        ,SUM(H.EXTRAEXECUTADO) AS 'TOTAL_EXTRA'
        ,SUM(H.BASE) AS 'HORASTRAB_SEM_EXTRAS'
        ,SUM(H.BASE + H.EXTRAEXECUTADO) AS 'HORASTRABALHADAS'
        ,SUM(H.ADICIONAL) AS 'ADICIONAL'
        ,SUM(H.ABONO) AS 'ABONO'
    FROM DBO.PPESSOA AS P
    INNER JOIN DBO.PFUNC  AS F ON ( P.CODIGO = F.CODPESSOA )
    INNER JOIN DBO.PSECAO AS S ON (F.CODCOLIGADA = S.CODCOLIGADA AND F.CODSECAO = S.CODIGO)
    INNER JOIN DBO.AAFHTFUN AS H ON (F.CODCOLIGADA = H.CODCOLIGADA AND F.CHAPA = H.CHAPA)
    WHERE  F.CODCOLIGADA = @CODCOLIGADA
    AND ( F.CODSITUACAO = 'D' OR F.DATADEMISSAO >= @DATAINCIAL)
    AND ( H.[DATA] >= @DATAINCIAL )
    AND ( H.[DATA] <= @DATAFINAL )
    GROUP BY F.CODCOLIGADA
        ,F.CHAPA
        ,P.NOME
        ,S.DESCRICAO
        ,H.[DATA]
)
, TAB_DADOS
AS
(
    SELECT 
         TD.CODCOLIGADA
        ,TD.CHAPA
        ,TD.NOME
        ,TD.DESCRICAO
        ,TD.[DATA]
        ,TD.ATRASO
        ,TD.FALTA
        ,TD.COMPENSADO
        ,TD.TOTAL_EXTRA
        ,TD.HORASTRAB_SEM_EXTRAS
        ,TD.HORASTRABALHADAS
        ,TD.ADICIONAL
        ,TD.ABONO
        ,ISNULL(E1.VALOR,0) AS 'E1VALOR'
        ,ISNULL(E2.VALOR,0) AS 'E2VALOR'
    FROM TAB_DADOS_FUNC TD
    OUTER APPLY 
    (
        SELECT M.VALOR 
        FROM DBO.AMOVFUNDIA M
        WHERE M.CODCOLIGADA = TD.CODCOLIGADA 
        AND M.CHAPA = TD.CHAPA 
        AND M.[DATA] = TD.[DATA]
        AND M.CODEVE = '0051' /*TESTE*/
    ) E1
    OUTER APPLY 
    (
        SELECT M.VALOR 
        FROM DBO.AMOVFUNDIA M
        WHERE M.CODCOLIGADA = TD.CODCOLIGADA 
        AND M.CHAPA = TD.CHAPA 
        AND M.[DATA] = TD.[DATA]
        AND M.CODEVE = '0040'/*TESTE*/
    ) E2
    /*CRIAÇÃO DOS EVENTOS*/
)
SELECT 
     TD.CODCOLIGADA
    ,TD.CHAPA
    ,TD.NOME
    ,TD.DESCRICAO
    ,[dbo].[UTL_GET_HORA](SUM(TD.ATRASO)) AS 'ATRASO'
    ,[dbo].[UTL_GET_HORA](SUM(TD.FALTA)) AS 'FALTA'
    ,[dbo].[UTL_GET_HORA](SUM(TD.COMPENSADO)) AS 'COMPENSADO'
    ,[dbo].[UTL_GET_HORA](SUM(TD.TOTAL_EXTRA)) AS 'TOTAL_EXTRA'
    ,[dbo].[UTL_GET_HORA](SUM(TD.HORASTRAB_SEM_EXTRAS)) AS 'HORASTRAB_SEM_EXTRAS'
    ,[dbo].[UTL_GET_HORA](SUM(TD.HORASTRABALHADAS)) AS 'HORASTRABALHADAS'
    ,[dbo].[UTL_GET_HORA](SUM(TD.ADICIONAL)) AS 'ADICIONAL'
    ,[dbo].[UTL_GET_HORA](SUM(TD.ABONO)) AS 'ABONO'
    ,[dbo].[UTL_GET_HORA](SUM(TD.E1VALOR)) AS 'E2VALOR'
    ,[dbo].[UTL_GET_HORA](SUM(TD.E2VALOR)) AS 'E2VALOR'
FROM TAB_DADOS TD
GROUP BY TD.CODCOLIGADA
    ,TD.CHAPA
    ,TD.NOME
    ,TD.DESCRICAO
 

 

/*

 

abraços.

Share this post


Link to post
Share on other sites

Muito bom Luis!!!! 😀

 

@weverton dias para o uso dessa sentença que o Luis postou, observe que terá que gravar antes  no seu banco de dados, a função que ele deixou no link logo no início ok ? Senão, a consulta não irá funcionar. 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.