Forum
See question

NR de Horas trabalhadas na V10 Profissional no ERP   

72 views
1
0

Como obter o número total de horas trabalhadas na V10 profissional no para o anexo D

Devolve o número total de horas efetivamente trabalhadas (incluindo as suplementares) durante o ano, pelos trabalhadores declarados.? quais os passos a dar na V10?

Faça login para poder traduzir
Recursos Humanos
Marked as spam
Criado há 4 anos e 2 meses jooribeiro
j
jooribeiro Loyal Contributor
1 answers
-1
Private answer

O número de horas trabalhadas está disponível no relatório único (Anexo D - o valor do n.º de horas trabalhadas do quadro I, ponto 4).

Em alternativa pode utilizar a seguinte query para criar uma SP no SQL e adicionar como lista no ERP:

DECLARE @DataI        AS DATETIME
,    @DataF        AS DATETIME
,    @DiasUteis    AS INT

SET  @DataI = '01-01-2020'
SET  @DataF = '12-31-2020'

SELECT NumFuncs = SUM(ISNULL(NumFuncs,0))
FROM (
--Funcionários presentes durante TODO o ano
SELECT NumFuncs = SUM( ISNULL(P.DiasUteis,0) *      CASE    CAST(NumHorasSemInstrumentos AS INT)
WHEN 1 THEN HorasSemana/5
ELSE        NumHoras/5
END)

FROM        Funcionarios        F (NoLock)
LEFT JOIN    PeriodoDetalhado    P (NoLock) ON P.Periodo = F.Periodo
INNER JOIN    Instrumentos        I (NoLock) ON I.Instrumento = F.Instrumento
WHERE (DataFimContrato >= @DataF OR DataFimContrato IS NULL)
AND (DataAdmissao <= @DataI)
AND (DataDemissao >= @DataF OR DataDemissao IS NULL)
AND P.Ano = 2020

UNION ALL

--Funcionários com data de fim de contrato no ano e com data de demissão nula ou no mesmo ano
SELECT NumFuncs = SUM( ISNULL(P.DiasUteis,0) *      CASE    CAST(NumHorasSemInstrumentos AS INT)
WHEN 1 THEN HorasSemana/5
ELSE        NumHoras/5
END)

FROM        Funcionarios        F (NoLock)
LEFT JOIN    PeriodoDetalhado    P (NoLock) ON P.Periodo = F.Periodo
INNER JOIN    Instrumentos        I (NoLock) ON I.Instrumento = F.Instrumento
WHERE (DataFimContrato > @DataI AND DataFimContrato < @DataF)
AND (DataDemissao IS NULL)
AND (DataAdmissao <= @DataI)
AND P.Ano = 2020 AND P.MesFiscal <= Month(DataFimContrato)

UNION ALL

--Funcionários com data de demissão no ano
SELECT NumFuncs = SUM( ISNULL(P.DiasUteis,0) *      CASE    CAST(NumHorasSemInstrumentos AS INT)
WHEN 1 THEN HorasSemana/5
ELSE        NumHoras/5
END)

FROM        Funcionarios        F (NoLock)
LEFT JOIN    PeriodoDetalhado    P (NoLock) ON P.Periodo = F.Periodo
INNER JOIN    Instrumentos        I (NoLock) ON I.Instrumento = F.Instrumento
WHERE (DataDemissao > @DataI AND DataDemissao < @DataF)
AND (DataAdmissao <= @DataI)
AND P.Ano = 2020 AND P.MesFiscal <= Month(DataDemissao)
UNION ALL

--Funcionários admitidos durante o ano
SELECT NumFuncs = SUM( ISNULL(P.DiasUteis,0) *      CASE    CAST(NumHorasSemInstrumentos AS INT)
WHEN 1 THEN HorasSemana/5
ELSE        NumHoras/5
END)

FROM        Funcionarios        F (NoLock)
LEFT JOIN    PeriodoDetalhado    P (NoLock) ON P.Periodo = F.Periodo
INNER JOIN    Instrumentos        I (NoLock) ON I.Instrumento = F.Instrumento
WHERE (DataFimContrato >= @DataF OR DataFimContrato IS NULL)
AND (DataAdmissao > @DataI AND DataAdmissao <= @DataF)
AND (DataDemissao >= @DataF OR DataDemissao IS NULL)
AND P.Ano = 2020 AND P.MesFiscal >= Month(DataAdmissao)

UNION ALL

--Funcionários admitidos e demitidos no ano
SELECT NumFuncs = SUM( ISNULL(P.DiasUteis,0) *      CASE    CAST(NumHorasSemInstrumentos AS INT)
WHEN 1 THEN HorasSemana/5
ELSE        NumHoras/5
END)

FROM        Funcionarios        F (NoLock)
LEFT JOIN    PeriodoDetalhado    P (NoLock) ON P.Periodo = F.Periodo
INNER JOIN    Instrumentos        I (NoLock) ON I.Instrumento = F.Instrumento
WHERE ((DataFimContrato > @DataI AND DataFimContrato < @DataF)
OR (DataDemissao > @DataI AND DataDemissao < @DataF))
AND (DataAdmissao > @DataI) AND (DataAdmissao < @DataF)
AND P.Ano = 2020 AND (P.MesFiscal >= Month(DataAdmissao) AND (P.MesFiscal <= month(DataFimContrato) OR P.MesFiscal <= month(DataDemissao)))
) TEMP

--Deverá subtrair o resultado desta segunda query que diz respeito aos tempos de férias.

SELECT SUM((IsNull(Ferias.TotalDias,0) - IsNull(Ferias.DiasAnoAnterior,0)) *
CASE CAST(F.NumHorasSemInstrumentos AS INT)
WHEN 1
THEN F.HorasSemana/5
ELSE        I.NumHoras/5
END ) AS Ferias
FROM FuncinfFerias ferias (NoLock)
INNER JOIN funcionarios F (NoLock) ON F.codigo = ferias.Funcionario
INNER JOIN Instrumentos I (NoLock) ON I.Instrumento = F.Instrumento
WHERE ferias.Ano = 2020

Faça login para poder traduzir
Marked as spam
Criado há 4 anos e 2 meses maria
maria Most Valuable Professional
    Comments
    Estive a testar a query mas nao devolve os mesmos valores que devolve no relatorio unico no anexo D , falei com o suporte mas disseram que era fora do ambito de suporte visto ser uma query do forum. Pode analisar? A diferença entre a sua query e a o que é devolvido no relatório unico é elevada.
    2 anos e 5 meses
    carlosleite