Incluir registros em uma tela sem ExecAuto, sem RecLock e sem ser MVC | Ti Responde 045

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.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta