Árvore de páginas

Descrição

Este ponto de entrada possibilita, por exemplo, a redefinição dos eventos para banco de horas através
de critérios que diferem dos estabelecidos no cadastro de eventos.
Observações

Será enviado um array com 2 elementos via variável ParamIXB.

Param1 =  aTotais: Eventos para Folha de Pagamento. Tipo array. Criado pela função fGeraTot:

aTotais[ nPos , ATOTAIS_DATA   ]                   := dData    //01 - Data do Evento
aTotais[ nPos , ATOTAIS_EVENTO_PONTO ]           := cEvento   //02 - Codigo do Evento
aTotais[ nPos , ATOTAIS_HORAS   ]                 := nHoras    //03 - Quantidade do Evento
aTotais[ nPos , ATOTAIS_CODIGO_FOLHA ]           := cVerba    //04 - Codigo para a Folha
aTotais[ nPos , ATOTAIS_CENTO_DE_CUSTO ]      := cCusto    //05 - Centro de Custo do Evento
aTotais[ nPos , ATOTAIS_VALOR   ]                  := nValor    //06 - Valor do Evento
aTotais[ nPos , ATOTAIS_DTOS_DATA  ]              := Dtos( dData )  //07 - String de Data

 

fGeraTot( @aTotais ,; //01 -> Array com os Totais do Ponto. Deverá ser passado por referência.
dData ,; //02 -> Data para Pesquisa e Gravacao no aTotais
nHoras ,; //03 -> Horas para Soma ou Geracao
nValor ,; //04 -> Valor para Soma ou Geracao
cEvento ,; //05 -> Evento do Ponto para Pesquisa
cCusto ,; //06 -> Centro de Custo para Comparacao
cFil ,; //07 -> Filial para Pesquisa no SP9
cVerba ,; //08 -> Verba da Folha
lSubstitui ) //09 -> Substitui a(s) Hora(s) Existente(s) em aTotais

 

Conteúdo padrão assumido quando não for informado :
aTotais := {}
dData := Ctod('//')
nHoras := 0
nValor := 0
cEvento := Space( GetSx3Cache( 'PB_PD' , 'X3_TAMANHO' ) )
cCusto := Space( GetSx3Cache( 'PB_CC' , 'X3_TAMANHO' ) )
cFil := fFilFunc( 'SP9' )
cVerba := PosSP9( cEvento , cFil , 'P9_CODFOL' , 1 )
lSubstitui := .F.

 

Param2 = aBHAcum - Eventos para banco de horas. Tipo array. Herdado do array aTotais. Atualmente, obedece a estrutura abaixo, mas poderá ser modificada no futuro:

            Elemento 1 – Data do evento

            Elemento 2 – Código do Evento

            Elemento 3 – Totais de Horas

            Elemento 4 – Percentual de Valorizacao para banco, quando houver senão é 0.

            Elemento 5 – Centro de Custo

            Elemento 6 – Tipo de Hora Extra (Valor padrão é "")

            Elemento 7 – Percentual de Hora Extra (Valor padrão é 0)

  • Deverá ser retornado um array com 2 elementos:

            Retorno 1 –  aTotais       :  Eventos para Folha de Pagamento. Tipo array. Estrutura conforme o Param1 enviado.

            Retorno 2 –   aBHAcum:   Eventos para banco de horas. Tipo array. Estrutura conforme o Param2 enviado.

Exemplos

 

#INCLUDE 'RWMAKE.CH'
#DEFINE EVE_HREXTR      '200' //-- Evento escolhido pelo usuario para tratamento do ponto de entrada.   
User Function PNM07001   
Local aTotais := Paramixb[1] //-- Array de eventos totalizados para Folha de Pagamento
Local aBHACum := Paramixb[2] //-- Array de eventos para o banco de horas   
Local nTotHe  := 90          //-- SRA->RA_HEXTRA1                                        //-- Campo de Usuario para conter a quantidade de Horas Extras Fixas                               //   por mes.Local nLimHe  := 60          //-- Limite fixo para tratamento de hr.extras
Local nLimBh  := 90          //-- Limite fixo de BH
Local nTotBH  := 0
Local nT1     := 0   
If lFuncAcBh   //Se funcionario acumuala banco de horas   
	nTotais  := Len(aTotais)  
	nPercFol := 100  
	nPercBco := 0  
	
	For nT1 := 1 To nTotais      
		If ( aTotais[nT1,2] == EVE_HREXTR )      // Verifica evento de hora extra      
		/*         Verifica se o Total de Horas Extras esta dentro do Limite */          
			If nTotHe > nLimHe .and. nTotBH <= nLimBH               
				nPercFol := 0               
				nPercBco := 100           
			ElseIf __TimeSum(aTotais[nT1,3],nTotHe) > nLimHe .and. nTotBH <= nLimBH                
				nHoras := Round(fConvHr(aTotais[nT1,3],'D'),2)                
				nResto := Round(fConvHr(__TimeSub(nLimHe,nTotHe),'D'),2)                
				nPercFol := nResto / nHoras * 100                
				nPercBco := 100 - nPercFol           
			EndIf       
			/*         Verifica se o Total de Horas Extras esta dentro do Limite do Banco de Horas */          
			If nTotBH > nLimBH             
				nPercFol := 100             
				nPercBco := 0          
			ElseIf __TimeSum(aTotais[nT1,3],nTotBH) > nLimBh              
				nHoras := Round(fConvHr(aTotais[nT1,3],'D'),2)              
				nResto := Round(fConvHr(__TimeSub(nLimBH,nTotBH),'D'),2)              
				nPercBco := nResto / nHoras * 100              
				nPercFol := 100 - nPercBco          
			EndIf         
			
			nTotHe := __TimeSum(aTotais[nT1,3],nTotHe)         
			nValCalcB := 0         
			nValCalcF := 0      // Percentual para Banco de Horas         
			nValCalcB := Round(fConvHr(aTotais[nT1,3],'D')*(nPercBco/100),2)         
			nValCalcB := fConvhr(nValCalcB,'H')       // Percentual para Folha          
			nValCalcF := Round(fConvHr(aTotais[nT1,3],'D')*(nPercFol/100),2)          
			nValCalcF := fConvhr(nValCalcF,'H')         
			
			If ( nValCalcB > 0 )           
				If ( cArrCalc == 'F' )               
					nValCalcF := __TimeSub( aTotais[nT1,3],nValCalcB)           
				Else                
					nValCalcB := __TimeSub( aTotais[nT1,3],nValCalcF)            
				Endif        
			Endif                        
			
			If ( nValCalcB > 0 )            
				If ( nPos := aScan(aBHAcum, {|x| x[1] == aTotais[nT1,1] .and.x[2] == aTotais[nT1,2] .and. x[5] == aTotais[nT1,5] } ) ) > 0               
					aBHAcum[nPos,3] := __TimeSum(aBHAcum[nPos,3],nValCalcB)            
				Else                
					aAdd(aBHAcum,{ aTotais[nT1,1], aTotais[nT1,2], nValCalcB, 100,aTotais[nT1,5], "", 0})             
				EndIf             
				nTotBH := __TimeSum(nValCalcB,nTotBH)        
			Endif        
			If ( nValCalcF > 0 )            
				aTotais[nT1,3] := nValCalcF        
			Else            
				aTotais[nT1,2] := 0            
				aTotais[nT1,2] := Space(3)         
			Endif   
		Endif                
	Next
EndIf
Return({aTotais,aBHAcum})

 

Idioma

Português(Brasil)

Versões

Microsiga Protheus 11 e superiores

Compatível com as Bases de Dados

Todas

Retorno

aTotais, aBHAcum
    (array_of_record)
  • Deverá ser retornado array com 2 elementos: Retorno 1 - Eventos para Folha de Pagamento. Tipo array. Estrutura conforme o Param1 enviado. Retorno 2 - Eventos para banco de horas. Tipo array. Estrutura conforme o Param2 enviado.

Programa Fonte

PONM070.PRX