Home

Linha Microsiga Protheus

Páginas filhas
  • PNMDDSR2 - Tratamento de eventos -- 10436

Ponto-de-Entrada: PNMDDSR2 - Tratamento de eventos
Versões: Microsiga Protheus 8.11 , Microsiga Protheus 10
Compatível Países: Todos
Sistemas Operacionais: Todos
Compatível às Bases de Dados: Todos
Idiomas: Espanhol , Inglês
Descrição:

O processo de desconto do DSR é realizado conforme as etapas:

a) Tratamento dos eventos de desconto de DSR e ocorrências

* Identificação do tipo do dia, isto é, se um dia é normal, feriado ou de dsr.
* Identificação se no dia o funcionário está afastado.
* Agrupamento dos dias do período conforme a apuração do desconto do DSR (conforme o campo da regra ‘Apur.Des.DSR.’ - PA_PERDDSR). Ou seja, se a apuração for semanal, os dias serão agrupados conforme a semana a que pertence, se for quinzenal, a quinzena.
* Identificação dos eventos de desconto (conforme campo ‘DESC.DSR’ - P9_DESCDSR, no cadastro de eventos) para cada dia e os abonos correspondentes.
* Totalização das ocorrências de eventos de desconto e das horas apuradas já deduzidas das horas abonadas.

b) Cálculo do desconto do DSR (conforme a apuração do mesmo)

* Cálculo do desconto do DSR para cada período do DSR.

O ponto de entrada referido é executado na etapa ‘b) Cálculo do desconto do DSR’. Ele permite que seja implementada uma customização para substituir o cálculo padrão do desconto. Contudo, criamos um mecanismo que permite que o cálculo padrão também seja executado em seguida, mas isso somente deverá ser realizado numa situação especial, para não correr o risco de se gerar um resultado indesejado.

Eventos

Na rotina de Cálculo Mensal, na apuração do Desconto do DSR, foi criado o ponto de entrada PNMDDSR02.
 

Programa Fonte
PONM070.PRX
Sintaxe

PNMDDSR2 - Tratamento de eventos ( [ aTabCalend ], [ aResult ], [ aTotais ], [ aArred ], [ cPeriodo ], [ lDsrProp ], [ lLimDSR ], [ lDsrPPer ], [ lMvDDSRFer ], [ cDSR ], [ nNumAtra ], [ aTabPer ], [ nPeriodo ], [ nHrsOcorr ], [ nNumOcorr ], [ nDiaDSR ] ) --> aRetorno

Parâmetros:
Nome Tipo Descrição Default Obrigatório Referência
aTabCalend Array of Record Array com calendário do turno
aResult Array of Record Array com os resultados do apontamento
aTotais Array of Record Array com os eventos para valores de desconto de DSR
aArred Array of Record Array com os arredondamento para DSR
cPeriodo Caracter Indica o período para o cálculo ( (S)emanal, (Q)uinzenal ou (M)ensal )
lDsrProp Lógico Verifica se o desconto será baseado no arredondamento ou em 1 dia de trabalho (parâmetro 'MV_DSRPROP')
lLimDSR Lógico Indica se limita desc de dsr ao periodo de apuração do mesmo (parâmetro 'MV_LIMDSR')
lDsrPPer Lógico Verifica se será gerado evento para desconto de DSR no próximo período (parâmetro 'MV_DSRPPER')
lMvDDSRFer Lógico Define se realiza o desconto para dias de feriado conforme o parâmetro 'MV_DDSRFER' - criado para v.811 e superiores (para a versão 710 o Param9 sempre será .T.)
cDSR Caracter Código do evento de desconto do DSR
nNumAtra Numérico Contreudo do campo PA_NUMATRA
aTabPer Array of Record Array com as informações do período para cálculo do desc. de DSR
nPeriodo Numérico Posição do elemento corrente do array do período para o cálculo do desc. de DSR
nHrsOcorr Numérico Total de horas de eventos de desconto para o período de apuração do desc de DSR
nNumOcorr Numérico Qtde de ocorrências dos eventos de desconto para o periodo de apuracao do desc DSR
nDiaDSR Numérico Horas para desconto do DSR
Retorno
    aRetorno(array_of_record)
  • Deverá ser retornado um array com 3 elementos conforme detalhado abaixo.
Observações
  • Parâmetros retornados

 

Deverá ser retornado um array com 3 elementos correspondendo:

 

Elemento 1  - Lógico  (retorne .T. para executar o cálculo padrão do desconto de DSR)   

Elemento 2 – Numérico  (retorne um número diferente de 0 (zero) para indicar que não foi encontrado feriado ou DSR no período de apuração do desconto e que as horas para desconto deverão ser consideradas no próximo perído de desconto do DSR).

Elemento 3 -    Array (Retorne o array de valores do desconto do DSR  (Parâmetro 3 de envio modificado).


 

Procedimentos para Implementação

1.      Desenvolver um Rdmake para obter o array enviado.

2.      Realizar os procedimentos necessários.

3.      Retornar o array com as informações de retorno.

 

Abaixo, segue um exemplo de customização onde o desconto é realizado quando a quantidade de ocorrências para o período de apuração do desconto superar a tolerância do desconto (conforme a regra) ou quando o total de horas dos eventos de descontos estiver compreendido pelas faixas da tabela de arredondamento do desconto de DSR.

Importante 

Esse exemplo está utilizando o parâmetro MV_LIMDSR  com conteúdo 'S', limitando a ocorrência de descontos por período. Assim, a solução, por ser um exemplo, não atende todas as situações.

Exemplos
#Include 'rwmake.ch'User Function PNmddsr02() Local _aTabCalend := ParamIxb[01]  //01 - Array com Calendario do turnoLocal _aResult    := ParamIxb[02]  //02 - Array com os Resultados do apontamentoLocal _aTotais    := ParamIxb[03]  //03 - Array com os eventos para Valores de Desconto de DSRLocal _aArred_D   := ParamIxb[04]  //04 - Array com os Arredondamento para DSRLocal _cPeriodo   := ParamIxb[05]  //05 - Indica o per¡odo para calculo (S, Q ou M)      Local _lDsrProp   := ParamIxb[06]  //06 - Verifica se o Desconto Sera Baseado no Arredondamento ou em 1 Dia de Trabalho (parametro 'MV_DSRPROP')Local _lLimDSR    := ParamIxb[07]  //07 - Indica se Limita Desc de DSR ao Periodo de Apuracao do Mesmo (parametro 'MV_LIMDSR').Local _lDsrPPer   := ParamIxb[08]  //08 - Verifica se sera Gerado Evento para desconto de DSR no Proximo Periodo (parametro 'MV_DSRPPER').Local _lMvDDSRFer := ParamIxb[09]  //09 - Define se realiza o desconto para dias de Feriado (parametro 'MV_DDSRFER').Local _cDSR       := ParamIxb[10]  //10 - Codigo do Evento de Desconto do DSR.        Local _nNumAtra   := ParamIxb[11]  //11 - Contreudo do Campo PA_NUMATRA Local _aTabPer    := ParamIxb[12]  //12 - Array com as informacoes do Periodo para Calculo do Desc. de DSRLocal _nPeriodo   := ParamIxb[13]  //13 - Posicao do arrayLocal _nHrsOcorr  := ParamIxb[14]  //14 - Total de Horas de Eventos de Desconto para o Periodo de Apuracao do Desc DSRLocal _nNumOcorr  := ParamIxb[15]  //15 - Qtde de ocorrencias dos Eventos de Desconto para o Periodo de Apuracao do Desc DSRLocal _nDiaDSR    := ParamIxb[16]  //16 - Horas para desconto do DSRLocal aRetorno    := {.F., 0,aClone(_aTotais)}Local dData          Local nArredLocal nArreds     := Len(_aArred_D) Local nDesc  Local nGravaDesc  := 0Local nHoras  Local nPerItemLocal nPerItens                 //-- Se o Parametro de Desconto de DSR for 'Nao', Calcula o Desconto baseado//-- na Tabela de Arredondamento.IF !( _lDsrProp )    //-- Para cada Faixa de Arredondamento de DSR	For nArred := 1 To nArreds    	nDesc  := 0       	nHoras := _aArred_D[ nArred , 3 ] // Valor  do Desconto de DSR       	//-- Desconto de 1 DSR a cada ocorrˆncia de DSR ou Feriado por Per¡odo       	nPerItens := Len( _aTabPer[ _nPeriodo ] )       	       	//-- Para cada parte do Periodo (ou seja para cada semana, ou quinzena, ou ...)       	For nPerItem := 1 To nPerItens        	dData  := _aTabPer[ _nPeriodo , nPerItem , 1 ]            //-- Verifica se o dia eh um feriado ou dia de DSR            IF ( ( _aTabPer[ _nPeriodo , nPerItem , 2 ] $ 'D/F' ) .and. ( dData >= SRA->RA_ADMISSA ) )            	++nDesc // Contador de quantidade de dias de DSR ou Feriado				//-- Verifica se a quantidade de ocorrencias ultrapassar a tolerancia de ocorrencias de eventos de desconto para o periodo (semana, quinzena, etc)                //-- ou se nao houver tolerancia e                //-- As horas de desconto estiver compreendida pelos limites de arredondamento                //-- Gera as horas de Desconto de DSR para na data.                IF (;		                (;	                        ( _nNumOcorr > _nNumAtra );                         );	                         .OR.;                        (;                             ( _nHrsOcorr >= _aArred_D[ nArred , 1 ] );	                             .and.;	                         ( _nHrsOcorr <= _aArred_D[ nArred , 2 ] );                         );                             .and.;                         ( _aTabPer[ _nPeriodo , nPerItem , 4 ] <> 'A' );                     ) 	                    IF _nNumOcorr > _nNumAtra	                        nHoras:= _nDiaDSR						EndIF	                    //-- Se Limita o Desc de DSR a um Por Periodo e ainda nao o calculou                        //-- ou Se Desconta 1 DSR a cada ocorrˆncia de DSR por Per¡odo                        IF ( ( ( _lLimDSR ) .and. Empty( nGravaDesc ) ) .or. !( _lLimDSR ) )	                        fGeraTot(        _aTotais      ,;    //01 -> Array com os Totais do Ponto                                             dData         ,;    //02 -> Data para Pesquisa e Gravacao no aTotais                                             nHoras        ,;    //03 -> Horas para Soma ou Geracao                                             0             ,;    //04 -> Valor para Soma ou Geracao                                             _cDsr         ,;    //05 -> Evento do Ponto para Pesquisa                                             SRA->RA_CC    ,;    //06 -> Centro de Custo para Comparacao                                             SRA->RA_FILIAL ;    //07 -> Filial para Pesquisa no SP9                                     )                             ++nGravaDesc                         EndIF                     EndIF                EndIF        Next nPerItem    Next nArredEndifaRetorno[1] := .F.                // Executa Calculo Padrao do Desconto de DSR      aRetorno[2] := nDesc              // Em per¡odo sem DSR/Feriado as horas de ocorrencia de Desconto de DSR v„o para o pr¢ximo Per¡odoaRetorno[3] := aClone(_aTotais)   // Retorna o Array de Valores do Desconto do DSR modificado.Return(aRetorno)