Árvore de páginas

Correção da rotina automática do Lançamento de Ausências

Linha de Produto:

Microsiga Protheus Versão 12

Segmento:

Serviços

Módulo:

SIGAGPE

Função:

GPEA240

Situação/Requisito:

Rotina automática não funcionava corretamente.

Solução/Implementação:

Correções necessárias para que seja possível se instanciar o modelo de dados do GPEA240 por outros fontes e com isso utilizar-se da rotina automática. Disponibilizado exemplo de utilização no documento técnico.

 

Exemplo de ExecAuto de Lançamento de Ausências
#INCLUDE 'PROTHEUS.CH'
#INCLUDE "TBICONN.CH"
/*/{Protheus.doc} MvcSR8
	Código que exemplifica a execução do ExecAuto de Ausências do Módulo de Gestão de Pessoal;
	É possível usar a rotina automática via ExecAuto utilizando a estrutura MVC
@author PHILIPE.POMPEU
@since 26/04/2016
@version P12
@param cMat, caractere, Matrícula do Funcionário
@param nTipo, numérico, tipo do teste
@return nil, nulo
/*/
User Function MvcSR8(cMat,nTipo)
	Local oModel	:= Nil
	Local oSubMdl	:= Nil
	Local nTam		:= 0
	Local nSeq		:= 0
	Local dStart := nil
	Local nI := 0
	Local aCab := {}
	Local aItem:= {}
	Local aItens:={}
	Local aSeek:= {}
	
	Private cProcesso := ""
	Default nTipo := 3
	Default cMat	:= Nil
	
	RpcSetType(3)
	OpenSm0()
	PREPARE ENVIRONMENT EMPRESA (SM0->M0_CODIGO) FILIAL (SM0->M0_CODFIL) MODULO "GPE"
	__cInternet := Nil	
	aEval({'SRA','SR8'},{|x|CHKFILE(x)})
	
	SRA->(DbSetOrder(1))
	
	if(cMat == Nil)
		SRA->(DbSeek(xFilial("SRA")))
		cMat := SRA->RA_MAT
	endIf	
	
	dStart := cToD("18/04/2016")
	nTam 	:= TamSx3("R8_SEQ")[1]
	
	if(SRA->(DbSeek(xFilial("SRA") + cMat)))	
		if(nTipo == 1) /*Exemplo Insert instanciando o Model manualmente*/
			oModel := FWLoadModel("GPEA240")
			oModel:SetOperation(4)			 
			if(oModel:Activate())				
				oSubMdl := oModel:GetModel("GPEA240_SR8")			
				dStart := dStart + 1
				if(oSubMdl:Length() > 1)					
					nSeq := oSubMdl:AddLine()
				else
					if(oSubMdl:IsInserted())
						nSeq := 1
					else
						nSeq := oSubMdl:AddLine()
					endIf
				endIf
				oSubMdl:SetValue("R8_FILIAL", xFilial("SR8"))
				oSubMdl:SetValue("R8_MAT"	, SRA->RA_MAT)
				oSubMdl:SetValue("R8_DATA"	, dStart)
				oSubMdl:SetValue("R8_SEQ"	, StrZero(nSeq,nTam))
				oSubMdl:SetValue("R8_TIPOAFA"	, "004")
				oSubMdl:SetValue("R8_PD"			, "122")
				oSubMdl:SetValue("R8_DATAINI"	, dStart)
				oSubMdl:SetValue("R8_DATAFIM"	, dStart)				
				oSubMdl:SetValue("R8_DURACAO"	, 1)
				oSubMdl:SetValue("R8_PROCES"	, SRA->RA_PROCES)
				oSubMdl:SetValue("R8_PER"		, AnoMes(dStart))
				oSubMdl:SetValue("R8_NUMPAGO"	, "01")
				
				dStart := dStart + 1
				nSeq := oSubMdl:AddLine()
				oSubMdl:SetValue("R8_FILIAL", xFilial("SR8"))
				oSubMdl:SetValue("R8_MAT"	, SRA->RA_MAT)
				oSubMdl:SetValue("R8_DATA"	, dStart)
				oSubMdl:SetValue("R8_SEQ"	, StrZero(nSeq,nTam))
				oSubMdl:SetValue("R8_TIPOAFA"	, "004")
				oSubMdl:SetValue("R8_PD"			, "122")
				oSubMdl:SetValue("R8_DATAINI"	, dStart)
				oSubMdl:SetValue("R8_DATAFIM"	, dStart)				
				oSubMdl:SetValue("R8_DURACAO"	, 1)
				oSubMdl:SetValue("R8_PROCES"	, SRA->RA_PROCES)
				oSubMdl:SetValue("R8_PER"		, AnoMes(dStart))
				oSubMdl:SetValue("R8_NUMPAGO"	, "01")
				
				if(oModel:VldData())
					oModel:CommitData()
				else
					aLog := oModel:GetErrorMessage()				
					aEval(aLog,{|x|ConOut(x)})								
				endIf			
			endIf
		elseif(nTipo == 2)/*Exemplo Update instanciando o Model manualmente*/
			oModel := FWLoadModel("GPEA240")
			oModel:SetOperation(4)			 
			if(oModel:Activate())
				oSubMdl := oModel:GetModel("GPEA240_SR8")			
				dStart := dStart + 1
				
				aAdd(aSeek,{"R8_FILIAL"	,xFilial("SR8")})
				aAdd(aSeek,{"R8_MAT"		,SRA->RA_MAT})
				aAdd(aSeek,{"R8_DATAINI"	,dStart})
				
				oSubMdl:GoLine(1)//Volta ao topo pra pra buscar!!
				if!(oSubMdl:SeekLine(aSeek) .And. !oSubMdl:IsDeleted())
					nSeq := oSubMdl:AddLine()					
					oSubMdl:SetValue("R8_FILIAL", xFilial("SR8"))
					oSubMdl:SetValue("R8_MAT"	, SRA->RA_MAT)
					oSubMdl:SetValue("R8_SEQ"	, StrZero(nSeq,nTam))
					oSubMdl:SetValue("R8_TIPOAFA"	, "003")
					oSubMdl:SetValue("R8_DATAINI", dStart)
				endIf
				//Para deletar a linha em questão bastaria usar o metodo DeleteLine()
				oSubMdl:SetValue("R8_DATA"	, dStart)
				oSubMdl:SetValue("R8_PD"			, "122")
				oSubMdl:SetValue("R8_DATAFIM"	, dStart)				
				oSubMdl:SetValue("R8_DURACAO"	, 1)
				oSubMdl:SetValue("R8_PROCES"	, SRA->RA_PROCES)
				oSubMdl:SetValue("R8_PER"		, AnoMes(dStart))
				oSubMdl:SetValue("R8_NUMPAGO"	, "01")				
				
				if(oModel:VldData())
					oModel:CommitData()
				else
					aLog := oModel:GetErrorMessage()				
					aEval(aLog,{|x|ConOut(x)})								
				endIf			
			endIf				
		endIf		
	else
		ConOut("Matrícula inválida -> "+cMat)
	endIf	
Return

 

Chamados relacionados:

TUTLLI

Observação:

Para uso da rotina de execauto do GPEA240 em versões anteriores a 12, deve-se considerar a documentação presente no link abaixo:

Exemplo de Rotina Automática - Cadastro de Afastamentos - GPEA240