ExecAuto no Cadastro de Filiais (tabela SM0) | Ti Responde 0181

No vídeo de hoje, vamos demonstrar em como criar um registro na tabela de filiais (SM0 / SYS_COMPANY) através de um ExecAuto em MVC.

A dúvida de hoje, nos perguntaram, se era possível criar filiais (tabela SM0 / SYS_COMPANY), via código fonte.

 

Pensando nisso, montamos um exemplo, onde vamos mostrar em como fazer essa inclusão via ExecAuto MVC carregando o modelo da rotina APCFG230 e definindo os campos da SIGAMAT_XX8 e SIGAMAT_SM0.

 

Segue abaixo o vídeo exemplificando:

 

E abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "TOTVS.ch"
#Include "FWMVCDef.ch"

/*/{Protheus.doc} User Function zVid0181
Exemplo de ExecAuto do cadastro de Filiais (SM0 / SYS_COMPANY)
@type  Function
@author Atilio
@since 26/06/2024
@example u_zVid0181()
/*/

User Function zVid0181()
    Local aArea     := FWGetArea()
    Local oModel
    Local oModelXX8
    Local oModelSM0
    Local lDeuCerto := .F.
    Local aErro     := {}

    //Pegando o modelo de dados, setando a operação de inclusão
	oModel := FWLoadModel("APCFG230")
	oModel:SetOperation(MODEL_OPERATION_INSERT)
	oModel:Activate()

    //Define os campos do cabeçalho
    oModelXX8 := oModel:GetModel("SIGAMAT_XX8")
    oModelXX8:SetValue("XX8_GRPEMP", "99"                ) //Grupo de Empresas
    oModelXX8:SetValue("XX8_CODIGO", "03"                ) //Código da Filial
    oModelXX8:SetValue("XX8_DESCRI", "Filial de Teste"   ) //Descrição da FIlial

    //Define os campos das abas abaixo
    oModelSM0 := oModel:GetModel("SIGAMAT_SM0")
    oModelSM0:SetValue("M0_NOMECOM", "Filial Teste em Bauru")
    oModelSM0:SetValue("M0_TEL",     "14 91234 5678")
    oModelSM0:SetValue("M0_ENDENT",  "Rua de Teste 3-21")
    oModelSM0:SetValue("M0_BAIRENT", "Jardim de Teste")
    oModelSM0:SetValue("M0_CIDENT",  "Bauru")
    oModelSM0:SetValue("M0_ESTENT",  "SP")     

	//Se conseguir validar as informações e realizar o commit
	If oModel:VldData() .And. oModel:CommitData()
		lDeuCerto := .T.

	//Se não conseguir validar as informações, altera a variável para false
	Else
		lDeuCerto := .F.
	EndIf

	//Se não deu certo a inclusão, mostra a mensagem de erro
	If ! lDeuCerto
		//Busca o Erro do Modelo de Dados
		aErro := oModel:GetErrorMessage()

		//Monta o Texto que será mostrado na tela
		AutoGrLog("Id do formulário de origem:"  + ' [' + AllToChar(aErro[01]) + ']')
		AutoGrLog("Id do campo de origem: "      + ' [' + AllToChar(aErro[02]) + ']')
		AutoGrLog("Id do formulário de erro: "   + ' [' + AllToChar(aErro[03]) + ']')
		AutoGrLog("Id do campo de erro: "        + ' [' + AllToChar(aErro[04]) + ']')
		AutoGrLog("Id do erro: "                 + ' [' + AllToChar(aErro[05]) + ']')
		AutoGrLog("Mensagem do erro: "           + ' [' + AllToChar(aErro[06]) + ']')
		AutoGrLog("Mensagem da solução: "        + ' [' + AllToChar(aErro[07]) + ']')
		AutoGrLog("Valor atribuído: "            + ' [' + AllToChar(aErro[08]) + ']')
		AutoGrLog("Valor anterior: "             + ' [' + AllToChar(aErro[09]) + ']')

		//Mostra a mensagem de Erro
		MostraErro()
	EndIf

	//Desativa o modelo de dados
	oModel:DeActivate()

    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

Terminal de Informação