Árvore de páginas

Ponto de Entrada PONAPO4 - Alteração das horas apontadas

Descrição:

Este ponto de entrada é utilizado para alteração ou inclusão de novos eventos na tabela de apontamentos (SPC)

Eventos:

É chamado após o apontamento das marcações, antes da gravação da tabela de apontamentos (SPC)

Programa Fonte:

PONXAPO.PRX

Função:

Aponta()

Retorno:

Nenhum. O array "aEventos" é declarado como PRIVATE no programa PONXAPO.PRX e, por isso, pode ter seu conteúdo modificado pelo Ponto de Entrada. Caso tenha sido modificado, serão assumidas as modificações realizadas.


 

 Observações 

 O Ponto de Entrada PONAPO4 receberá o ParamIxb como parâmetro ‚ um Array com quatro Elementos, sendo o primeiro a cópia do array "aMarcacoes", o segundo a cópia do array "aTabCalend", o terceiro a cópia do array  "aCodigos" e o quarto a cópia do array "aEvesIds

Exemplo de como incluir um evento especifico em todos os dias trabalhados que houver marcação:

#INCLUDE 'PROTHEUS.CH'
// Exemplo de Uso do PE PONAPO4 para gerar novos eventos conforme o tipo de dia e quantidade de horas desejada.
/*----------------------*/
User Function PONAPO4()
/*----------------------*/
 	
Local __aMarcacoes 	:= aClone( ParamIxb[1] )
Local __aTabCalend 	:= aClone( ParamIxb[2] )
Local __aCodigos   	:= aClone( ParamIxb[3] )
Local __aEvesIds   	:= aClone( ParamIxb[4] )
Local __aEventos    := aClone( aEventos )
Local __aResult		:= aClone( aEventos )
Local cEvedeFaltas	:= __aEvesIds[ 009 , 02 ]+'/'+__aEvesIds[ 010 , 02 ]//Faltas Nao Autorizadas e Autorizadas
Local cFilRegra		:= fFilFunc("SPA")
Local cFilSRA		:= AllTrim(SRA->RA_FILIAL)
Local cCCusto		:= SRA->RA_CC
Local cRegras		:= '01/24/09/06'
//No configurador é possivel criar o parametro MV_CREGRA (tipo caracter) e informar as regras para apurar as horas 
//Abaixo basta retirar os sinais '//'. E coloca-los na instrucao acima.
//Local cRegras			:= SuperGetMv("MV_CREGRA",,"",cFilSRA)
Local cFilGeraHrs:= 'D MG 01/D MG 02'
//Local cFilGeraHrs			:= SuperGetMv("MV_CFilhrsIT",,"",cFilSRA)
//Codigos dos eventos validos para todas as filiais
//substitui-los pelos codigos desejados
Local cEveTrab		:= '010'
Local cEveComp		:= '011'
Local cEveFeriado 	:= '012'
Local cEveDSR 		:= '013'
Local cEveNTrab 	:= '014'
//Qtde horas a pagar para cada tipo de dia
//alterar conforme a filial
Local nEveTrab		:= 1 //Trabalhado
Local nEveComp 		:= 1 //Compensado
Local nEveFeriado 	:= 1 //Feriado
Local nEveDSR 		:= 1 //DSR
Local nEveNTrab		:= 1 //Nao Trabalhado
Local aSpaFields	:={}
Local aSpaInfo		:={}
Local dDataApo   	:= CTOD('//')
Local cTipodia 		:= ''
Local cRegra		:= ''
Local cNewRegra		:= ''
Local cOrdem		:= ''
Local cEvento		:= ''
Local cTurno		:= ''
Local cSeqTurno		:= ''
Local lTrbFeriado	:=.F.
Local nX			:= 0
Local nHrsGera		:= 0
//Verifica se a Regra do funcionario nao está entre as possiveis de se gerar horas
If !(cFilSRA $ cFilGeraHrs)
	Return
EndIf  
//Se desejar maior flexibilidade é possível criar campos na tabela de regras SPA
//para o usuario informar os eventos para cada tipo de dia:
//Por exemplo: Criar o campo PA_EVETRAB através do Configurador na tabela SPA - Regra de Apontamento.
//Titulo: Evento Trabalhado 
//Tipo: Caracter
//Tamanho: 3
//Criar na tabela SPA campo para conter a quantidade de horas a serem pagas para cada Tipo de Dia
//Titulo: Evento Trabalhado 
//Tipo: Numerico
//Tamanho: 5
//Decimais: 2
//Picture:  99.99
//Na variavel cEveTrab, substitua o conteúdo de exemplo, pelo conte´´udo do campo criado.
//Por exemplo: cEveTrab	:= SPA->PA_EVETRAB
//Faca o mesmo para os demais Tipos de dia.
//Da mesma forma, na variavel nEveTrab, substitua o conteudo exemplo, pelo conteudo do campo criado.
//Por exemplo: nEveTrab	:= SPA->PA_HRSTRAB
//Faca o mesmo para os demais Tipos de dia.
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Carrega os Campos para a PosSpa()							   ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ*/
aAdd( aSpaFields , "PA_FERIADO" )	//01 - Se funcionario trabalha em Feriado
/*Eventos para cada tipo de dia
aAdd( aSpaFields , "PA_EVTRAB" )	//02 - Trabalhado
aAdd( aSpaFields , "PA_EVCOMP" )	//03 - Compensado
aAdd( aSpaFields , "PA_EVDSR"  )	//04 - DSR
aAdd( aSpaFields , "PA_EVNTRAB" )	//05 - Nao Trabalhado
aAdd( aSpaFields , "PA_EVFERDO" )	//06 - Feriado
//Horas a serem pagas para cada tipo de dia
aAdd( aSpaFields , "PA_HRTRAB" )	//07 - Trabalhado
aAdd( aSpaFields , "PA_HRCOMP" )	//08 - Compensado
aAdd( aSpaFields , "PA_HRDSR"  )	//09 - DSR
aAdd( aSpaFields , "PA_HRNTRAB" )	//10 - Nao Trabalhado
aAdd( aSpaFields , "PA_HRFERDO" )	//11 - Feriado
*/  	
//Se forem criados pelo configurador os campos acima, não será necessario o bloco de instruções abaixo onde se define os eventos e quantidades de horas 
//para cada filial.
//Abaixo toma-se como codigo da Filial o conteudo 'D MG 01'. Substitua-o pelo conteúdo correspondente a filial do sistema. Por exemplo: "01" ou '103', etc,
//para a qual se pode gerar horas
//=== Bloco de Instrucao para Tratamento por Filial ===
If cFilSRA = 'D MG 01'
//Codigos dos eventos validos para a Filial "01"
//substitutui-los pelos codigos desejados ou campo do configurador (cEveTrab	:= PosSPA( cRegra , cFilRegra , "PA_EVETRAB" , 1 , .F. )
	cEveTrab	:= '010'
	cEveComp 	:= '011'
	cEveFeriado := '012'
	cEveDSR 	:= '013'
	cEveNTrab 	:= '014'
//Qtde horas a pagar para cada tipo de dia
//alterar conforme a filial	
	nEveTrab	:= 1
	nEveComp 	:= 0
	nEveFeriado := 0
	nEveDSR 	:= 0
	nEveNTrab	:= 0 //Nao Trabalhado
ElseIf cFilSRA = 'D MG 02' //'Informar outro codigo de filial caso possua alguma configuracao diferente'
	//Duplique aqui as variaveis cEVe??? e nEve se os valores forem diferentes
EndIf	
//=== Fim do Bloco de Instrucao para Tratamento por Filial ===
//Trata cada dia de apontamento
For nX := 1 To Len(__aTabCalend)
    
    //Se a data de apontamento foi tratada vai para o proximo dia
    If dDataApo == __aTabCalend[nX,48]
    	Loop
    EndIf
	dDataApo 	:= __aTabCalend[nX,48]
	cOrdem		:= __aTabCalend[nX,02]
    cRegra		:= __aTabCalend[nX,23]
  	cTipoDia	:= __aTabCalend[nX,06]
  	cTurno		:= __aTabCalend[nX,14]
  	cSeqTurno	:= __aTabCalend[nX,08]
  	
  	//===== Bloco para Tratamento por Regra definida em variavel =====================
  	//Se a regra  nao define o pagamento das horas ou se nenhum dia possui horas  para pagar
  	//vai para o proximo dia
  	If 	! (cRegra  $ cRegras) .and. ( (nEveTrab + nEveComp + nEveFeriado + nEveDSR) > 0 )
  		Loop
  	EndIf
  	//===== Fim do Bloco para Tratamento por Regra definida em variavel =====================
  	
  	If cRegra <> cNewRegra
  		cNewRegra	:= cRegra
  		aSpaInfo 	:= PosSPA( cRegra , cFilRegra , aSpaFields , 1 , .F. )
  		lTrbFeriado	:= aSpaInfo[01] == "S" 
   	EndIf
  	
  	//Se estiver demitido ou transferido e a data de apontamento for depois da  demissao/transferencia ou
  	//se esta em situacao normal mas a data de apontamento for anterior a data de admissao
  	//entao vai para o proximo dia
  	If SRA->( ( RA_SITFOLH $ 'D.T' .and. dDataApo > RA_DEMISSA) .or. ( Empty(RA_SITFOLH).and. dDataApo < RA_ADMISSA) )
  		Loop
  	Endif
  	  	
  	 // *** Verifica Tipo Dia ***
    //-- Se Feriado 
         //-- Se Excecao
              //Tipo Dia
         //--Senao Excecao     
	         //-- Se NaoTrabalha Feriado
	         //   Tipo dia  = "Feriado"
	         //---Senao NaoTrabalha Feriado
	         //   Tipo dia     
	         //-- Fim se Nao Trabalha Feriado
         //-- Fim se Excecao
    //Senao
    //   Tipo Dia
    //-- Fim se Feriado
    
	cTipoDia	:= IF(  __aTabCalend[ nX , 19 ] , IF(   __aTabCalend[ nX , 10 ]  == "E" ,  __aTabCalend[ nX , 06 ] , IF(!lTrbFeriado,"F", __aTabCalend[ nX , 06 ] ) ) ,  __aTabCalend[ nX , 06 ] )                  
    
  	If 	( cTipoDia == "S" .and. Empty(nEveTrab) ) 		.or.;
  		( cTipoDia == "C" .and. Empty(nEveComp) ) 		.or.;
  		( cTipoDia == "F" .and. Empty(nEveFeriado) ) 	.or.;
  		( cTipoDia == "D" .and. Empty(nEveDSR) ) 		.or.;
  		( cTipoDia == "N" .and. Empty(nEveNTrab) ) 
  		Loop
  	EndIf
  	
  	//-- Se não tem marcacoes para o dia vai para o proximo dia 
  	If  !(( aScan( __aMarcacoes , { |x| x[3] == cOrdem }  ) ) > 0 )
  		Loop
  	EndIf	
  	
  	If ( cTipoDia == "S" )
  		nHrsGera	:= 	nEveTrab
  		cEvento		:=  cEveTrab
  	ElseIf ( cTipoDia == "C" )
  		nHrsGera	:= nEveComp
  		cEvento		:= cEveComp
  	ElseIf ( cTipoDia == "F"  )
  		nHrsGera	:=	nEveFeriado
  		cEvento		:=  cEveFeriado
  	ElseIf ( cTipoDia == "D" )
  		nHrsGera	:= nEveDSR
  		cEvento		:= cEveDSR
  	ElseIf ( cTipoDia == "N" )
  		nHrsGera	:= nEveNTrab
  		cEvento		:= cEveNTrab 
   	EndIf
	
	fGeraRes(	__aResult				,;	//01 -> Array com os Resultados do Dia
				dDataApo				,;	//02 -> Data da Geracao
				nHrsGera				,;	//03 -> Numero de Horas Resultantes
				cEvento					,;	//04 -> Codigo do Evento
				cCCusto					,;	//05 -> Centro de Custo a ser Gravado
				NIL						,; //06 -> Tipo de Marcacao
				.F.						,; //07 -> True para Acumular as Horas
				NIL						,; //08 -> Periodo de Apuracao
				NIL						,; //09 -> Tolerancia
				NIL						,; //10 -> Tipo de Arredondamento a Ser Utilizado
				.T.			 			,; //11 -> Substitui a(s) Hora(s) Existente(s) ( Garanto Apenas 1 DSR por Data )
				/*cFuncao	*/			,; //12 -> Funcao  
				/*cDepto	*/			,; //13 -> Depto para gravacao
				/*cPosto	*/			,; //14 -> Posto para gravacao
				/*cProcesso	*/			,; //15 -> Periodo para Gravacao
				/*cRoteiro	*/			,; //16 -> Processo para Gravacao
				/*cPerApo	*/			,; //17 -> Periodo para Gravacao
				/*cNumPagto	*/ 			,; //18 -> NumPagto para Gravacao
				cTurno				    ,; //19 -> Turno de Trabalho
				cSeqTurno				;  //20 -> Semana/Sequencia do Turno
			)
	
		
		aEventos := aClone( __aResult )
Next nX
Return (Nil)