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á! Quote
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. Quote
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 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.