Histórico da Página
Composition Setup |
---|
import.css=/download/attachments/327912/newLayout.css |
Portuguese | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Ponto-de-Entrada: PNMDDSR2 - Tratamento de eventos
Descrição:
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:
Retorno
Observações
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) |