Exemplo de como executar a rotina de cadastramento de programação de rateio através da execauto (rotina automática).
A rotina automática tem a finalidade de efetuar o cadastramento automático de rateios para um ou mais funcionários (que devem estar previamente cadastrados na tabela SRA - Funcionários).
Na chamada do execauto pelo rdmake deverão ser informados 2 arrays:
aCabec := {
{"RA_MAT" , conteudo2, NIL};
}
Corresponde aos dados a serem incluídos/deletados da tabela RHQ - Programação de Rateio.
aItens := { {"RHQ_DEMES" , conteudo1 , Nil},;
{"RHQ_AMES" , conteudo2 , Nil},;
{"RHQ_CC" , conteudo3 , Nil},;
{"RHQ_ITEM" , conteudo4 , Nil},;
{"RHQ_CLVL" , conteudo5 , Nil},;
{"RHQ_PERC" , nValor , Nil};
}
Observação: No array aItens podem ser informados os demais campos correspondentes aos campos da tabela RHQ.
Segue um exemplo de montagem da execauto para a rotina GPEA056:
User Function GPEA056EAUT
Local aCabec := {}
Local aItens := {}
Local aItemAux := {}
Local nOpc := 4 //Manutenção
Local
Local cFil := "D MG 01 "
Local cMat := "000002"
Private lMsErroAuto := .F. // Se .F., não exibe erros automáticos
SRA->(DbSeek(cFil + cMat)) //Posiciona no funcionário
aAdd(aCabec, {"RA_MAT", SRA->RA_MAT, Nil })
aAdd(aItemAux, {"RHQ_DEMES", "022025", NIL})
aAdd(aItemAux, {"RHQ_AMES", "032025", NIL})
aAdd(aItemAux, {"RHQ_CC", "000000001", NIL})
aAdd(aItemAux, {"RHQ_ITEM", "000000001", NIL})
aAdd(aItemAux, {"RHQ_CLVL", "000000100", NIL})
aAdd(aItemAux, {"RHQ_PERC", 50, NIL})
aAdd(aItens, aItemAux)
aItemAux := {}
aAdd(aItemAux, {"RHQ_DEMES", "022025", NIL})
aAdd(aItemAux, {"RHQ_AMES", "032025", NIL})
aAdd(aItemAux, {"RHQ_CC", "000000002", NIL})
aAdd(aItemAux, {"RHQ_ITEM", "800000000", NIL})
aAdd(aItemAux, {"RHQ_CLVL", "000000100", NIL})
aAdd(aItemAux, {"RHQ_PERC", 50, NIL})
aAdd(aItens, aItemAux)
MSExecAuto({|x, y, z| GPEA056(x, y, z)}, aCabec, aItens, nOpc)
// Verifica se houve erro na execução automática
If lMsErroAuto
MostraErro() // Exibe mensagem de erro
EndIf
Return Nil
// Função para enviar via ExecAuto
USER Function Envia(aCabec, aItens)
//-- Faz chamada a rotina de cadastro de dependentes para incluir os dependentes (opcao 3)
MSExecAuto({|x,y,k,w,z| GPEA020(x,y,k,w,z)},4,aCabec,aItens,4) //-- Opcao 3 - Inclui registro
//Retorno de erro na execução da rotina
If lMsErroAuto
MostraErro()
Else
Alert("Registro(s) Incluido(s) !!!")
EndIf
Return(.T.)
//Função para enviar via MVC
USER Function EnvMVC(aCabec, aItens)
Local aErro := {}
Local oModel := Nil
Local oSubMdl := ""
Local cArqErrAuto := ""
Local cCodigo := ""
Local cNome := ""
Local nX := 0
Local nY := 0
cFilMat := aCabec[1][2]
cMat := aCabec[2][2]
SRA->(DbSetOrder(1))
SRA->(DbSeek(cFilMat+cMat))
oModel := FWLoadModel("GPEA020")
oModel:SetOperation(3)
If(oModel:Activate())
oSubMdl := oModel:GetModel("GPEA020_SRB")
For nX := 1 to Len(aItens)
If (oSubMdl:Length() > 0)
oSubMdl:AddLine()
EndIf
For nY := 1 to Len(aItens[nX])
If !(aItens[nX][nY][1] $ "RB_MAT")
oSubMdl:SetValue(aItens[nX][nY][1], aItens[nX][nY][2])
EndIf
Next nY
// Performa validação da linha
If !oSubMdl:VldLineData()
lRet := .F.
cCodigo := aItens[nX][3][2]
cNome := aItens[nX][4][2]
Exit
EndIf
Next nX
If lRet .And. (oModel:VldData())
oModel:CommitData()
Else
aErro := oModel:GetErrorMessage()
cArqErrAuto := "Id do formulário de origem:" + ' [' + AllToChar( aErro[1] ) + ']' + Chr(13) + Chr(10)
cArqErrAuto += "Id do campo de origem: " + ' [' + AllToChar( aErro[2] ) + ']' + Chr(13) + Chr(10)
cArqErrAuto += "Id do formulário de erro: " + ' [' + AllToChar( aErro[3] ) + ']' + Chr(13) + Chr(10)
cArqErrAuto += "Mensagem do erro: " + ' [' + AllToChar( aErro[6] ) + ']' + Chr(13) + Chr(10)
cArqErrAuto += "Chave: Filial - Matricula - Código - Nome " + ' [' + cFilMat + ' - ' + cMat + ' - ' + cCodigo + ' - ' + cNome + ']'
Alert ('Falha no ExecAuto MVC: ' + (Chr(13) + Chr(10)) + cArqErrAuto)
EndIf
oModel:DeActivate()
oModel:Destroy()
oModel := Nil
EndIf
Return(.T.)
No exemplo, acima, a chamada da função GP020AUT deverá ser realizada a partir do menu via configurador:
Execução da rotina via menu do modulo SIGAGPE:
Caso de sucesso:
Caso de erro:
<!-- esconder o menu --> <style> div.theme-default .ia-splitter #main { margin-left: 0px; } .ia-fixed-sidebar, .ia-splitter-left { display: none; } #main { padding-left: 10px; padding-right: 10px; overflow-x: hidden; } .aui-header-primary .aui-nav, .aui-page-panel { margin-left: 0px !important; } .aui-header-primary .aui-nav { margin-left: 0px !important; } </style> |