Francisco Correias Posted August 19, 2013 Topic Count: 2 Topics Per Day: 0.00 Content Count: 3 Content Per Day: 0.00 Reputation: 0 Achievement Points: 35 Solved Content: 0 Days Won: 0 Status: Offline Report Posted August 19, 2013 Bom dia!! Os dias das Faltas aquisitivas dos funcionários está sendo calculado errado, devido que Seg a Qui trabalhamos 9 horas e de sexta 8. Para resolver o problema elaborei duas formulas para colocar na parametrização das férias, que são “Números de dias de direito de férias” e “Dias de Férias X Faltas”. Onde a primeira formula retorna os dias totais de férias que o funcionário tem direito sem descontar as faltas. E a segunda formula mostra os dias de férias que o funcionário tem direito. As duas formulas estão funcionando quando são testadas na desenvolvedor de formulas, porem quando é colocado na parametrização e é verificada no modulo de férias aparecem valores incompressíveis. Estou na versão 11.52.57. Obrigado desde já!
Luciano DP Posted August 19, 2013 Topic Count: 21 Topics Per Day: 0.00 Content Count: 269 Content Per Day: 0.05 Reputation: 15 Achievement Points: 1,574 Solved Content: 0 Days Won: 12 Status: Offline Age: 43 Report Posted August 19, 2013 Francisco, bom dia! Fica mais fácil te ajudar se vc disponibilizar as fórmulas criadas.
Francisco Correias Posted August 19, 2013 Topic Count: 2 Topics Per Day: 0.00 Content Count: 3 Content Per Day: 0.00 Reputation: 0 Achievement Points: 35 Solved Content: 0 Days Won: 0 Status: Offline Author Report Posted August 19, 2013 (edited) Ok, Segue as formulas e as consultas SQL. Formula: 1 - NÚMEROS DE DIAS DE DIREITO DE FÉRIAS SE EXECSQL('99.02') = 1 ENTAO SE RESULTSQL('99.02','CHAPA') <> CHAPA ENTAO REPITA PROXREGSQL('99.02') ATE RESULTSQL('99.02','CHAPA') = CHAPA FIMSE FIMSE; SE RESULTSQL('99.02','MES') = 2 ENTAO SE RESULTSQL('99.02','ANO')%4 = 0 ENTAO SE RESULTSQL('99.02','DIA') > 15 ENTAO ARRED(RESULTSQL('99.02','RESUL') - 2.5) SENAO ARRED(RESULTSQL('99.02','RESUL')) FIMSE SENAO SE RESULTSQL('99.02','DIA') > 14 ENTAO ARRED(RESULTSQL('99.02','RESUL') - 2.5) SENAO ARRED(RESULTSQL('99.02','RESUL')) FIMSE FIMSE FIMSE; SE RESULTSQL('99.02','MES') = 4 OU RESULTSQL('99.02','MES') = 6 OU RESULTSQL('99.02','MES') = 9 OU RESULTSQL('99.02','MES') = 11 ENTAO SE RESULTSQL('99.02','DIA') > 16 ENTAO ARRED(RESULTSQL('99.02','RESUL') - 2.5) SENAO ARRED(RESULTSQL('99.02','RESUL')) FIMSE SENAO SE RESULTSQL('99.02','DIA') > 17 ENTAO ARRED(RESULTSQL('99.02','RESUL') - 2.5) SENAO ARRED(RESULTSQL('99.02','RESUL')) FIMSE FIMSE SQL: 99.02 - Dias total de férias SELECT CHAPA, DATEPART ( DAY , DTINIPERAQUIS ) AS DIA, DATEPART ( MONTH , DTINIPERAQUIS ) AS MES, DATEPART ( YEAR , DTINIPERAQUIS ) AS ANO, DATEDIFF(MONTH,DTINIPERAQUIS,GETDATE())* 2.5 AS RESUL FROM PFHSTFER WHERE DTINIGOZO IS NULL Formula: 4 - DIAS DE FÉRIAS X FALTAS SE FOR ('0.0.03') <= 5 ENTAO FOR ('0.0.01') SENAO SE FOR ('0.0.03') >= 6 E FOR ('0.0.03') <= 14 ENTAO FOR ('0.0.01') - 6 SENAO SE FOR ('0.0.03') >= 15 E FOR ('0.0.03') <= 23 ENTAO FOR ('0.0.01') - 12 SENAO SE FOR ('0.0.03') >= 24 E FOR ('0.0.03') <= 32 ENTAO FOR ('0.0.01') - 18 SENAO SE FOR ('0.0.03') > 32 ENTAO CHR (48) FIMSE FIMSE FIMSE FIMSE FIMSE Formula: 3 – Números de Falta DECL CT; DECL CT1; SETVAR(CT, 0); SETVAR(CT1, 0); SE FOR ('0.0.02')%9 = 0 ENTAO FOR ('0.0.02')/9 SENAO REPITA SETVAR(CT,CT+8); SETVAR(CT1,CT1+1) ATE (FOR ('0.0.02')-CT)%9=0; ((FOR ('0.0.02')-CT)/9)+CT1 FIMSE Formula: 2 - Qtde de horas faltadas SE EXECSQL('99.01') = 1 ENTAO SE RESULTSQL('99.01','CHAPA') = CHAPA ENTAO RESULTSQL('99.01','HORAS') SENAO REPITA PROXREGSQL('99.01') ATE RESULTSQL('99.01','CHAPA') = CHAPA; RESULTSQL('99.01','HORAS') FIMSE FIMSE SQL: 99.01 - Horas de Faltas durante o periodo de férias ;WITH UNIAO AS ( SELECT DISTINCT CHAPA FROM PFHSTFER UNION SELECT DISTINCT CHAPA FROM PFUNC), CHAFUNC AS (SELECT PFUNC.CHAPA FROM PFUNC), CHAPHOR AS ( SELECT PFFINANC.CHAPA, TOTAL = SUM(REF) FROM PEVENTO INNER JOIN PFFINANC ON PEVENTO.CODIGO = PFFINANC.CODEVENTO INNER JOIN PFHSTFER ON PFFINANC.CHAPA = PFHSTFER.CHAPA WHERE (PEVENTO.CODIGOCALCULO = '8') AND (PFFINANC.CODCOLIGADA = '1') AND (PFHSTFER.DTINIGOZO IS NULL) AND (PFHSTFER.DTFIMGOZO IS NULL) AND (PFFINANC.DTPAGTO BETWEEN DATEADD(MONTH,1,PFHSTFER.DTINIPERAQUIS) AND DATEADD(MONTH,1,PFHSTFER.DTFIMPERAQUIS)) GROUP BY PFFINANC.CHAPA ) SELECT A.CHAPA, ISNULL(C.TOTAL,0) AS HORAS FROM UNIAO A LEFT JOIN CHAFUNC B ON (A.CHAPA = B.CHAPA) LEFT JOIN CHAPHOR C ON (A.CHAPA = C.CHAPA) Considerações: Formulas: - NÚMEROS DE DIAS DE DIREITO DE FÉRIAS: Mostra quantos dias o funcionário tem direito as férias, se no mês de admissão o funcionário tiver trabalhado mais que 15 dias, ele tem direito as férias no mês que entrou caso contrário não, a formula também calcula o anos bixesto. - Qtde de horas faltadas: Pega a quantidade de horas faltadas através da consulta SQL 99.01 - Números de Falta: Acha o número de faltas para uma carga horaria de seg a qui 9 horas trabalhadas e de sexta 8h. - DIAS DE FÉRIAS X FALTAS: Pega a quantidade de dias que faltou e tira do direito das férias. SQL: 99.01 - Horas de Faltas durante o período de férias: Retorna quantas horas o funcionário faltou, caso o funcionário não teve faltas retorna 0. 99.02 - Dias total de férias: Retorna os dias totais de férias. Edited August 19, 2013 by Francisco Correias
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now