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 |
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas