01. DADOS GERAIS
| Linha de Produto: | Microsiga Protheus |
|---|---|
| Segmento: | Recursos Humanos |
| Módulo: | SIGAGPE |
| Função: | GPEM070 |
| Ticket: | 8581039 |
| Requisito/Story/Issue: | DRHPAG-35723 |
| Pacote: | 12.1.17: https://suporte.totvs.com/portal/p/10098/download?e=969469 12.1.23: https://suporte.totvs.com/portal/p/10098/download?e=969470 12.1.25: https://suporte.totvs.com/portal/p/10098/download?e=969471 12.1.27: https://suporte.totvs.com/portal/p/10098/download?e=969472 |
02. SITUAÇÃO/REQUISITO
Foi efetuado o procedimento para adiar o pagamento do 1/3 de férias no cálculo de férias do funcionário, conforme documentação disponível aqui. Ao efetuar o cálculo de provisão de férias, o valor do 1/3 de férias não é mais demonstrado no relatório. Da mesma forma, a baixa desse valor também não era gerada quando da quitação na folha de pagamento, através da geração do valor pela rotina PGTFER927, de acordo a este tutorial.
03. SOLUÇÃO
Para que na situação acima o saldo do valor do 1/3 de férias adiado seja mantido na conta até o seu efetivo pagamento na folha, quando efetivamente será efetuado a baixa do valor, foi feito uma alteração no cálculo da provisão (rotina GPEM070) e foi disponibilizado abaixo um arquivo .prx de exemplo contendo a implementação dos pontos de entrada GP070P13, GP070COD e GP070FBX. O arquivo deverá ser baixado, alterado conforme necessidade e compilado no RPO.
Obs.: NÃO é necessário cadastrá-lo no menu pois o arquivo somente contém implementações de pontos de entrada.
Informação
Cada ponto de entrada possui uma finalidade diferente:
- GP070P13: irá retornar o valor de 1/3 de férias adiado para o saldo da provisão.
- GP070COD: por padrão, o sistema somente considera as verbas dos IDs de cálculo 0077, 0079, 0090 e 0095 para efetuar a baixa de 1/3 de férias. Com o ponto de entrada, será possível considerar a verba gerada na folha através da rotina PGTFER927.
- GP070FBX: por padrão, o sistema somente verifica e realiza a baixa de férias em período que o funcionário está de férias. Como a quitação do 1/3 de férias na folha poderá ocorrer em período que o funcionário não está de férias, o ponto de entrada irá forçar a verificação da baixa mesmo nesse período.
Dessa forma, quando o sistema efetuar o cálculo da provisão de férias, através da execução do ponto de entrada GP070P13 será efetuado uma validação para buscar o valor da verba de base de 1/3 de férias adiado gerado no cálculo de férias e esse valor será retornado ao saldo da provisão de férias. Isso ocorrerá a partir do cálculo de férias que teve o 1/3 de férias adiado até o período em que ocorrer a quitação do 1/3 de férias na folha.
Quando for efetuado a quitação do 1/3 de férias adiado na folha, através do ponto de entrada GP070COD será adicionado o código da verba da folha para que o sistema efetue a baixa desse valor na coluna de 1/3 de férias. E, através do ponto de entrada GP070FBX, o sistema irá verificar e efetuar a baixa do 1/3 de férias mesmo em período em que o funcionário não esteja de férias, pois por padrão não ocorre essa verificação para evitar processamento desnecessário.
Importante
Conforme explicado acima, os pontos de entrada irão alterar o cálculo da provisão. Dessa forma, é necessário recalcular a provisão de férias a partir do período em que se iniciou o adiamento do 1/3 de férias.
O arquivo de exemplo pode ser baixado ao clicar no ícone abaixo:
Na parte superior do ponto de entrada, foram declaradas 5 variáveis auxiliares do tipo Static, que irão conter as definições de período inicial e verbas. Os valores devem ser alterados conforme o período de adiamento do 1/3 de férias e de acordo com o código das verbas que foram cadastradas no cadastro de verbas:
3 4 5 6 7 | Static cPIniMP927 := "202003"//Variável para definir o período inicial que começou o adiamento do 1/3 de fériasStatic cPFimMP927 := "202008"//Variável para definir o período final do adiamento do 1/3 de férias, ou seja, o término é quando foi realizado o pagamento em folha do 1/3 adiadoStatic cVbUmTFer := "014"//Variável para definir o código da verba de base de 1/3 mês gerada nas fériasStatic cVbUmTFMS := "065"//Variável para definir o código da verba de base de 1/3 mês seguinte gerada nas fériasStatic cVbUmTFol := "MP8"//Variável para definir o código da verba de base de 1/3 paga na folha |
No exemplo acima, foi definido que em 03/2020 foi iniciado o adiamento do 1/3 de férias e em 08/2020 será efetuado o pagamento em folha do valor de 1/3. As verbas 014 e 065 foram cadastradas como do tipo base referente ao 1/3 de férias mês e mês seguinte e são gerados no Cálculo de Férias e a verba MP8 foi cadastrada e é a verba de provento que será gerada na folha para o pagamento do 1/3 de férias.
O ponto de entrada irá efetuar os seguintes procedimentos:
Linha 25: se o cálculo da provisão está entre o período inicial e período final do adiamento do 1/3 de férias;
Linha 27: se o período estiver em aberto, efetua busca na tabela SRC para verba de quitação do 1/3 de férias adiado, ou se o período estiver fechado, efetua a busca na tabela SRD. Se encontrar a verba, significa que não é necessário retornar o saldo de 1/3 de férias;
Linha 35: se precisa retornar o saldo de 1/3 de férias e encontrar cálculo de férias para o funcionário na tabela SRH;
Linha 37: percorre todos os registros da tabela SRH para o funcionário;
Linha 39: se o cálculo de férias iniciou entre o período inicial e período final do adiamento do 1/3 de férias;
Linha 41: se encontrou na tabela SRR pela verba de base de 1/3 de férias;
Linha 43: percorre todos os registros da tabela SRR da verba de base de 1/3 de férias para o funcionário
Linha 44: pega o valor da verba através do campo RR_VALOR;
Linha 45: adiciona o valor da verba encontrada na posição do Array de férias vencidas correspondente ao saldo atual de 1/3 de férias;
Linha 46: adiciona o valor de INSS correspondente a verba encontrada na posição do Array de férias vencidas correspondente ao saldo atual de INSS;
Linha 47: adiciona o valor de FGTS correspondente a verba encontrada na posição do Array de férias vencidas correspondente ao saldo atual de FGTS;
Linha 48: adiciona o valor de PIS correspondente a verba encontrada na posição do Array de férias vencidas correspondente ao saldo atual de PIS;
Linha 53: se encontrou na tabela SRR pela verba de base de 1/3 de férias;
Linha 55: percorre todos os registros da tabela SRR da verba de base de 1/3 de férias mês seguinte para o funcionário
Linha 56: pega o valor da verba através do campo RR_VALOR;
Linha 57: adiciona o valor da verba encontrada na posição do Array de férias vencidas correspondente ao saldo atual de 1/3 de férias;
Linha 58: adiciona o valor de INSS correspondente a verba encontrada na posição do Array de férias vencidas correspondente ao saldo atual de INSS;
Linha 59: adiciona o valor de FGTS correspondente a verba encontrada na posição do Array de férias vencidas correspondente ao saldo atual de FGTS;
Linha 60: adiciona o valor de PIS correspondente a verba encontrada na posição do Array de férias vencidas correspondente ao saldo atual de PIS;
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | //Ponto de entrada para alterar o valor provisionado de férias vencidas para retornar o valor de 1/3 para o saldoUser Function GP070P13()Local aAreaSRC := SRC->( GetArea() )Local aAreaSRD := SRD->( GetArea() )Local aAreaSRH := SRH->( GetArea() )Local aAreaSRR := SRR->( GetArea() )Local lProvUmT := .T.Local nValUmT := 0SRC->( dbSetOrder(1) )//RC_FILIAL+RC_MAT+RC_PD+RC_CC+RC_SEMANA+RC_SEQSRD->( dbSetOrder(1) )//RD_FILIAL+RD_MAT+RD_DATARQ+RD_PD+RD_SEMANA+RD_SEQ+RD_CC+RD_PROCESSRH->( dbSetOrder(1) )//RH_FILIAL+RH_MAT+DTOS(RH_DATABAS)+DTOS(RH_DATAINI)SRR->( dbSetOrder(1) )//RR_FILIAL+RR_MAT+RR_TIPO3+DTOS(RR_DATA)+RR_PD+RR_CC+RR_PROCES//Se o cálculo da provisão estiver dentro do período do adiamento do 1/3If cAnoMes >= cPIniMP927 .And. cAnoMes <= cPFimMP927 //Pesquisa na tabela SRC a verba de pagamento do 1/3 adiado If SRC->( dbSeek(SRA->RA_FILIAL + SRA->RA_MAT + cVbUmTFol) ) .And. SRC->RC_PERIODO == cAnoMes lProvUmT := .F. EndIf //Pesquisa na tabela SRD a verba de pagamento do 1/3 adiado If SRD->( dbSeek(SRA->RA_FILIAL + SRA->RA_MAT + cAnoMes + cVbUmTFol) ) lProvUmT := .F. EndIf //Se não houve pagamento do 1/3 adiado realiza busca na tabela SRH para verificar se o funcionário possui férias calculadas If lProvUmT .And. SRH->( dbSeek(SRA->RA_FILIAL + SRA->RA_MAT) ) //Pesquisa por todos os registros existentes na tabela SRH para o funcionário While SRH->( !Eof() ) .And. SRA->RA_FILIAL+SRA->RA_MAT == SRH->RH_FILIAL+SRH->RH_MAT //Se o cálculo das férias estiver dentro do período do adiamento do 1/3 If cAnoMes >= AnoMes(SRH->RH_DATAINI) .And. AnoMes(SRH->RH_DATAINI) >= cPIniMP927 .And. AnoMes(SRH->RH_DATAINI) <= cPFimMP927 //Pesquisa nas verbas calculadas nas férias do funcionário pela verba de base de 1/3 If SRR->( dbSeek(SRA->RA_FILIAL + SRA->RA_MAT + "F" + dToS(SRH->RH_DATAINI) + cVbUmTFer ) ) //Pesquisa por todos os registros existentes na tabela SRR para o funcionário referente à verba de base de 1/3 While SRR->( !Eof() ) .And. SRA->RA_FILIAL+SRA->RA_MAT+"F"+dToS(SRH->RH_DATAINI)+cVbUmTFer == SRR->RR_FILIAL+SRR->RR_MAT+SRR->RR_TIPO3+dToS(SRR->RR_DATA)+SRR->RR_PD nValUmT := SRR->RR_VALOR aFerVenc[_Atual,_1Ter] += nValUmT//1/3 de férias aFerVenc[_Atual,_INSS] += NoRound(nValUmT * (nPercEmp+nPercTer+nPercAcTrab))//INSS aFerVenc[_Atual,_FGTS] += NoRound(nValUmT * nPercFgts)//FGTS aFerVenc[_Atual,_PIS] += NoRound(nValUmT * nPercPis)//PIS SRR->( dbSkip() ) End EndIf //Pesquisa nas verbas calculadas nas férias do funcionário pela verba de base de 1/3 mês seguinte If SRR->( dbSeek(SRA->RA_FILIAL + SRA->RA_MAT + "F" + dToS(SRH->RH_DATAINI) + cVbUmTFMS ) ) //Pesquisa por todos os registros existentes na tabela SRR para o funcionário referente à verba de base de 1/3 While SRR->( !Eof() ) .And. SRA->RA_FILIAL+SRA->RA_MAT+"F"+dToS(SRH->RH_DATAINI)+cVbUmTFMS == SRR->RR_FILIAL+SRR->RR_MAT+SRR->RR_TIPO3+dToS(SRR->RR_DATA)+SRR->RR_PD nValUmT := SRR->RR_VALOR aFerVenc[_Atual,_1Ter] += nValUmT//1/3 de férias aFerVenc[_Atual,_INSS] += NoRound(nValUmT * (nPercEmp+nPercTer+nPercAcTrab))//INSS aFerVenc[_Atual,_FGTS] += NoRound(nValUmT * nPercFgts)//FGTS aFerVenc[_Atual,_PIS] += NoRound(nValUmT * nPercPis)//PIS SRR->( dbSkip() ) End EndIf EndIf SRH->( dbSkip() ) End EndIfEndIfRestArea( aAreaSRC )RestArea( aAreaSRD )RestArea( aAreaSRH )RestArea( aAreaSRR )Return |
77 78 79 80 81 82 | //Ponto de entrada para adicionar uma verba específica nas variáveis que irão controlar a divisão da baixa de fériasUser Function GP070COD()cCodUmTer += cVbUmTFol+"*"Return |
Linha 90: se o cálculo da provisão está entre o período inicial e período final do adiamento do 1/3 de férias;
Linha 91: atribui .T. para a variável lBaixa para que indique ao sistema que seja forçado a busca pela baixa de férias;
84 85 86 87 88 89 90 91 92 93 94 | //Ponto de entrada para forçar a busca pela baixa de férias, mesmo em mês que o funcionário não está de fériasUser Function GP070FBX()Local lBaixa := .F.//Se o cálculo da provisão estiver dentro do período do adiamento do 1/3If cAnoMes >= cPIniMP927 .And. cAnoMes <= cPFimMP927 lBaixa := .T.EndIfReturn lBaixa |
