CONTEÚDO

  1. Visão Geral
  2. Exemplo de utilização
  3. Configuração e execução
  4. Tabelas utilizadas


01. VISÃO GERAL

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.

02. EXEMPLO DE UTILIZAÇÃO

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.) 

03. CONFIGURAÇÃO E EXECUÇÃO

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:

04. TABELAS UTILIZADAS


<!-- 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>