Documento: Exemplo de Rotina Automática - Cadastro de Dependentes - GPEA020
A rotina automática, no cadastro de dependentes, tem a finalidade de efetuar o lançamento automático de dependentes para um ou mais funcionários (que devem estar previamente cadastrados na tabela SRA - Funcionários).
Basicamente, na chamada da rotina GPEA020, deverão ser informados 2 arrays:
aCabec -> Corresponde aos dados da tabela SRA - Funcionarios. Sintaxe: { {"RA_FILIAL" , conteudo1, NIL},; {"RA_MAT" , conteudo2, NIL}; }
aItens -> Corresponde aos dados a serem incluidos/deletados da tabela SRB - Dependentes. Sintaxe: { {"RB_FILIAL" , conteudo1, Nil},; {"RB_MAT" , conteudo2, Nil},; {"RB_COD" , conteudo3, Nil},; {"RB_NOME" , conteudo4, Nil},; {"RB_DTNASC" , conteudo5, Nil},; {"RB_SEXO" , conteudo6, Nil},; {"RB_GRAUPAR" , conteudo7, Nil},; {"RB_TIPIR" , conteudo8, Nil},; {"RB_TIPSF" , conteudo9, Nil},; {"RB_LOCNASC" , conteudo10, Nil},; {campoAdicional1 , conteudo11, Nil},; {campoAdicionalN , conteudoN, Nil}; }Observação: No array aItens podem ser informados os demais campos (campoAdicional1-campoAdicionalN) correspondentesaos demais campos da tabela SRB.
//No exemplo, abaixo, a chamada da funcao U_GP020AUT deverá ser realizada a partir do menu, como
demonstrado no extrato de um arquivo (*.XNU) qualquer:
// ... Parte anterior do menu ....
// <MenuItem Status="Enable">
// <Title lang="pt">Rotina Auto</Title>
// <Title lang="es">Rotina Auto</Title>
// <Title lang="en">Rotina Auto</Title>
// <Function>U_GP020AUT</Function>
// <Type>1</Type>
// <Access>xxxxxxxxxx</Access>
// <Module>07</Module>
// <Owner>0</Owner>
// </MenuItem>
// ... Continuacao do menu ...
User Function GP020AUT()
Local aCabec := {}
Local aItens := {}
Local aLinha := {}
PRIVATE lMsErroAuto := .F.
//******Primeiro Funcionario ****************************************** ////-- Inclusao de 2 dependentes para o funcionario da matricula '000001'
aCabec := {}aadd(aCabec,{"RA_FILIAL" ,"01" ,Nil })aadd(aCabec,{"RA_MAT" ,"000001" ,Nil })aLinha := {}aItens := {}aadd(aLinha,{"RB_FILIAL" , "01" , Nil })aadd(aLinha,{"RB_MAT" , "000001" , Nil })aadd(aLinha,{"RB_COD" , "01" , Nil })aadd(aLinha,{"RB_NOME" , "MARIA DA SILVA" , Nil })aadd(aLinha,{"RB_DTNASC" , Ctod("01/01/99") , Nil })aadd(aLinha,{"RB_SEXO" , "F" , Nil })aadd(aLinha,{"RB_GRAUPAR" , "F" , Nil })aadd(aLinha,{"RB_TIPIR" , "1" , Nil })aadd(aLinha,{"RB_TIPSF" , "1" , Nil })aadd(aLinha,{"RB_LOCNASC" , "SP" , Nil })
aadd(aItens,aLinha)aLinha := {}aadd(aLinha,{"RB_FILIAL" , "01" , Nil })aadd(aLinha,{"RB_MAT" , "000001" , Nil })aadd(aLinha,{"RB_COD" , "02" , Nil })aadd(aLinha,{"RB_NOME" , "PEDRO DA SILVA" , Nil })aadd(aLinha,{"RB_DTNASC" , Ctod("01/01/02") , Nil })aadd(aLinha,{"RB_SEXO" , "M" , Nil })aadd(aLinha,{"RB_GRAUPAR" , "F" , Nil })aadd(aLinha,{"RB_TIPIR" , "1" , Nil })aadd(aLinha,{"RB_TIPSF" , "1" , Nil })aadd(aLinha,{"RB_LOCNASC" , "SP" , Nil }) aadd(aItens,aLinha)
U_Envia(aCabec, aItens)//*** Segundo Funcionario ******************************************* //
//-- Inclusao de 1 dependentes para funcionario da matricula '000002'aCabec := {}aadd(aCabec,{"RA_FILIAL" ,"01" ,Nil })aadd(aCabec,{"RA_MAT" ,"000002" ,Nil })aLinha := {}aItens := {}aadd(aLinha,{"RB_FILIAL" , "01" , Nil })aadd(aLinha,{"RB_MAT" , "000002" , Nil })aadd(aLinha,{"RB_COD" , "01" , Nil })aadd(aLinha,{"RB_NOME" , "JOSE PEREIRA" , Nil })aadd(aLinha,{"RB_DTNASC" , Ctod("01/01/03") , Nil })aadd(aLinha,{"RB_SEXO" , "M" , Nil })aadd(aLinha,{"RB_GRAUPAR" , "F" , Nil })aadd(aLinha,{"RB_TIPIR" , "1" , Nil })aadd(aLinha,{"RB_TIPSF" , "1" , Nil })aadd(aLinha,{"RB_LOCNASC" , "PR" , Nil }) aadd(aItens,aLinha)
U_Envia(aCabec, aItens)Return(.T.)
//-- Funcao criada para exemplificar a chamada da execucao da rotina de cadastro de dependentes //-- Demonstra-se a inclusao e exclusao de dependentesUSER Function Envia(aCabec, aItens)Local nX
//-- 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)},NIL,aCabec,aItens,3) //-- Opcao 3 - Inclui registro//-- Retorno de erro na execução da rotinaIf lMsErroAuto MostraErro()Else Alert("Registro(s) Incluído(s) !!!") //-- Excluindo o(s) dependente(s) For nX:=1 to Len(aItens) aLinha:=aItens[nX] IF ( lRet:= APMSGYESNO("Deseja eliminar o dependente. Confirmar (S)im / (N)não ? ") ) //-- Faz chamada a rotina de cadastro de dependentes para eliminar os dependentes (opcao 5) MSExecAuto({|x,y,k,w,z| GPEA020(x,y,k,w,z)},NIL,aCabec,{aLinha},5) //-- Opcao 5 - Elimina registro If lMsErroAuto MostraErro() Else Alert("Registro Eliminado !!!") Endif Endif Next nX EndIfReturn(.T.)