DADOS GERAIS
Linha de Produto: | Microsiga Protheus |
---|---|
Segmento: | RH |
Módulo: | SIGAGPE |
Função: | GPEM060.PRX |
Ticket: | 8243352 |
Requisito/Story/Issue (informe o requisito relacionado): | DRHPAG-33780 |
Pacotes: | 12.1.17: https://suporte.totvs.com/portal/p/10098/download?e=946342 12.1.23: https://suporte.totvs.com/portal/p/10098/download?e=946343 12.1.25: https://suporte.totvs.com/portal/p/10098/download?e=946344 |
02. SITUAÇÃO/REQUISITO
Solicita-se ponto de entrada para possibilitar o cálculo de mais de um período de férias programadas automaticamente. Atualmente, existindo um férias programadas em mais de um período aquisitivo, apenas o primeiro é calculado, tendo que executar a rotina novamente para calcular o segundo período.
03. SOLUÇÃO
Criação do ponto de entrada GP060MULT que deverá retornar um array contendo as seguintes informações:
Posição | Conteúdo | Tipo |
---|---|---|
1 | Dias de férias | Numérico |
2 | Data Inicio das férias | Data |
3 | Data Início do período aquisitivo | Data |
4 | Data de pagamento do período de cálculo (RCH_DTPAGO) | Data |
5 | Data do Recibo de férias | Data |
6 | Data do Aviso de férias | Data |
7 | Se possui abono pecuniário | Lógico |
8 | Dias de Abono Pecuniário | Numérico |
No momento da execução do array, a tabela SRH (Cabeçalho de férias) estará posicionada no último registro incluído, sendo possível saber qual foi o último período aquisitivo utilizado, ou programação de férias pelos campos SRH→RH_DATABAS, SRH→RH_DATAINI e SRH→RH_DATAFIM, além dos demais campos da tabela.
Exemplo de criação do ponto de entrada
Considerando a tabela de Dias de Direito a seguir:
E a seguinte parametrização de cálculo:
Hoje o sistema calcularia apenas as férias com início em 01/03/2019, para que o segundo período seja calculado o ponto de entrada terá que retorna as informações do segundo período aquisitivo, que poderia ser feito da seguinte forma:
#INCLUDE "PROTHEUS.CH" User Function GP060MULT() Local aArea := GetArea() Local aAreaSRF := SRF->(GetArea()) Local aRet := {} Local dDataBas := SRH->RH_DATABAS //Data inicio do período aquisitivo calculado Local dDataIni := SRH->RH_DATAINI //Data inicio das férias calculadas Local dDataFim := SRH->RH_DATAFIM //Data fim das férias calculadas Local dDataPago := CtoD("") //Data de pagamento do período Local dDataRec := CtoD("") //Data do recibo de férias Local dDataAvi := CtoD("") //Data do aviso de férias Local nDiasFer := 0 //Dias de Férias programadas Local nDiasAbo := 0 //Dias de Abono programados DbSelectArea("SRF") DbSetOrder(1) //RF_FILIAL, RF_MAT, RF_DATABAS, RF_PD, R_E_C_N_O_, D_E_L_E_T_ If SRF->(DbSeek(SRA->RA_FILIAL + SRA->RA_MAT + DtoS(dDataBas))) //Posiciona no período aquisitivo calculado SRF->(DbSkip()) //Vai para o próximo peeríodo aquisitivo If SRF->RF_FILIAL + SRF->RF_MAT == SRA->RA_FILIAL + SRA->RA_MAT dDataBas := SRF->RF_DATABAS dDataIni := SRF->RF_DATAINI nDiasFer := SRF->RF_DFEPRO1 nDiasAbo := SRF->RF_DABPRO1 dDataFim := dDataIni + nDiasFer + nDiasAbo dDataAvi := DataValida(dDataIni - 30,.F.) dDataPago := StoD(AnoMes(dDataIni)+StrZero(F_ULTDIA(dDataIni),2)) //Último dia do mês de inicio das férias dDataRec := DataValida(DataValida(dDataIni-1,.F.)-1,.F.) //Define a data do recibo como 2 dias úteis antes da data de inicio das férias aRet := {nDiasFer, dDataIni, dDataBas, dDataPago, dDataRec, dDataAvi, nDiasAbo > 0, nDiasAbo} EndIf EndIf RestArea(aAreaSRF) RestArea(aArea) Return aRet
Importante
1 - O código acima é um exemplo para demonstrar as possibilidades de uso do ponto de entrada. O conteúdo do ponto de entrada, bem como as regras para utilizá-lo, devem ser desenvolvidas de acordo com a necessidade de cada cliente.
2 - O ponto de entrada deve retornar apenas um período no array, após efetuar o novo cálculo, o ponto de entrada é chamado mais um vez para que, caso necessário, um novo período seja informado. Se o array for retornado sem dados, o cálculo prossegue para o próximo funcionário.