No vídeo de hoje vamos demonstrar como incluir registros em uma rotina que não tem ExecAuto, e sem utilizar RecLock nem MVC.
Essa dúvida, foi feita pelo grande Rone, onde ele precisava incluir registros na tabela RC1 onde a rotina padrão para inclusão é a GPEM660.
Porém essa rotina não tem ExecAuto e ela é muito antiga (não esta em MVC). Então como poderíamos fazer a inclusão sem utilizar o RecLock? Nós utilizamos o recurso da AxIncluiAuto junto com EnchAuto.
E abaixo o código fonte desenvolvido para exemplificar:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function zVid0045
Teste de inclusão usando AxIncluiAuto
@type Function
@author Atilio
@since 20/08/2022
/*/
User Function zVid0045()
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", "000000005", Nil})
aAdd(aDados, {"RC1_CODTIT", "GPE", Nil})
aAdd(aDados, {"RC1_DESCRI", "GPE - Teste 5", 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.