Nesse vídeo demonstraremos em como incluir um registro em uma rotina que não possua ExecAuto e que não seja em MVC através das funções AxIncluiAuto e EnchAuto.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function zExe062
Exemplo de função para inclusão de registros quando a rotina não é em MVC e não tem ExecAuto
@type Function
@author Atilio
@since 06/12/2022
@see https://tdn.totvs.com/display/public/framework/EnchAuto
@obs
Função AxIncluiAuto
Parâmetros
+ cAlias , Caractere , Alias da Tabela
+ cTudoOk , Caractere , Função que será executada antes de confirmar a gravação (pra validar se está tudo ok)
+ cTransact , Caractere , Função que será executada dentro da transação
+ nOpcaoAuto , Numérico , Opção que será executada sendo 3 inclusão e 4 alteração
+ nLinha , Numérico , Número do RecNo caso seja uma alteração
Retorno
+ Retorna 1 em caso de sucesso ou 3 em caso de falha
Função EnchAuto
Parâmetros
+ cAlias , Caractere , Alias da Tabela
+ aField , Array , Campos utilizados sendo que as posições da linha devem ser [1] nome do campo; [2] conteúdo; [3] nulo
+ uTudoOk , Indefinido , Bloco de código ou função executada antes de confirmar a gravação (pra validar se esta tudo ok)
+ nOpc , Numérico , Opção que será executada sendo 3 inclusão; 4 alteração e 5 exclusão
+ aCpos , Array , Indica campos que serão considerados mesmo que não estejam usados na SX3
Retorno
+ lValido , Lógico , .T. em caso de sucesso ou .F. em caso de falha
**** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/
User Function zExe062()
Local aArea := FWGetArea()
Local cTabela := "RC1"
Local aDados := {}
Local cTudoOk := "Gpm660Vld(1)"
Local cTransact := "Gpm660_PCO()"
Local nRetorno := 0
Private lMsErroAuto := .F.
//Adiciona os campos para o ExecAuto
aAdd(aDados, {"RC1_FILTIT", "01", Nil})
aAdd(aDados, {"RC1_PREFIX", "GPE", Nil})
aAdd(aDados, {"RC1_NUMTIT", "000000006", Nil})
aAdd(aDados, {"RC1_CODTIT", "GPE", Nil})
aAdd(aDados, {"RC1_DESCRI", "GPE - Teste 3", Nil})
aAdd(aDados, {"RC1_VALOR", 250, Nil})
aAdd(aDados, {"RC1_EMISSA", dDataBase, Nil})
aAdd(aDados, {"RC1_VENCTO", DaySum(dDataBase, 5), Nil})
aAdd(aDados, {"RC1_VENREA", DaySum(dDataBase, 5), Nil})
aAdd(aDados, {"RC1_TIPO", "NF", Nil})
aAdd(aDados, {"RC1_NATURE", "NATDES0001", Nil})
aAdd(aDados, {"RC1_FORNEC", "F00003", Nil})
aAdd(aDados, {"RC1_LOJA", "01", Nil})
aAdd(aDados, {"RC1_DTBUSI", FirstDate(MonthSub(dDataBase, 1)), Nil})
aAdd(aDados, {"RC1_DTBUSF", LastDate(MonthSub(dDataBase, 1)), Nil})
//Inicializa a transação
Begin Transaction
//Joga a tabela para a memória (M->)
RegToMemory(;
cTabela,; // cAlias - Alias da Tabela
.T.,; // lInc - Define se é uma operação de inclusão ou atualização
.F.; // lDic - Define se irá inicilizar os campos conforme o dicionário
)
//Se conseguir fazer a execução automática
If EnchAuto(;
cTabela,; // cAlias - Alias da Tabela
aDados,; // aField - Array com os campos e valores
cTudoOk,; // uTUDOOK - Validação do botão confirmar
3; // nOPC - Operação do Menu (3=inclusão, 4=alteração, 5=exclusão)
)
//Aciona a efetivação da gravação
nRetorno := AxIncluiAuto(;
cTabela,; // cAlias - Alias da Tabela
,; // cTudoOk - Operação do TudoOk (se usado no EnchAuto não precisa usar aqui)
cTransact,; // cTransact - Operação acionada após a gravação mas dentro da transação
3; // nOpcaoAuto - Operação do Menu (3=inclusão, 4=alteração, 5=exclusão)
)
Else
AutoGrLog("Falha na geração da RC1!")
MostraErro()
DisarmTransaction()
EndIf
End Transaction
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.