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 |
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.
Na rotina de Cálculo Mensal, na apuração do Desconto do DSR, foi criado o ponto de entrada PNMDDSR02.
PONM070.PRX
PNMDDSR2 - Tratamento de eventos ( [ aTabCalend ], [ aResult ], [ aTotais ], [ aArred ], [ cPeriodo ], [ lDsrProp ], [ lLimDSR ], [ lDsrPPer ], [ lMvDDSRFer ], [ cDSR ], [ nNumAtra ], [ aTabPer ], [ nPeriodo ], [ nHrsOcorr ], [ nNumOcorr ], [ nDiaDSR ] ) --> aRetorno
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 |
-
aRetorno(array_of_record)
- Deverá ser retornado um array com 3 elementos conforme detalhado abaixo.
- 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.
#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)