Como criar uma rotina para atualizar somente um campo de uma tabela

Hoje vou mostrar uma forma de como atualizar um campo de uma tabela, sem precisar abrir a tela padrão de alteração.

Existem algumas telas do Protheus, que não permitem a alteração de alguns campos, ou outras que para alterar é necessário abrir a tela, acionar a opção Alterar e procurar o campo em questão.

Pensando nisso, e em facilitar para o usuário, quando ele precisa alterar um único campo, ou ele não tenha acesso a alteração, podemos fazer um processo paliativo.

Adicionar uma opção no Outras Ações, que chama uma tela para informar o campo em um ParamBox.

Então, imagina o cenário, o usuário não tem acesso para alterar clientes (tabela SA1), mas ele deve informar o e-Mail atualizado do cliente. Então foi criado uma função com um ParamBox, que ao ser confirmado irá atualizar o cliente atualizado.

Abaixo o exemplo.

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zAltMail
Função de exemplo para alterar e-Mail do cadastro de clientes
@type  Function
@author Atilio
@since 27/03/2021
@version version
/*/

User Function zAltMail()
	Local aArea    := GetArea()
	Local aPergs   := {}
	Local cEmail   := SA1->A1_EMAIL
	
	//Adiciona os parâmetros da pergunta
	aAdd(aPergs, {1, "e-Mail",  cEmail,  "", ".T.", "", ".T.", 120,  .T.})
	
	//Se a pergunta for confirmada
	If ParamBox(aPergs, "Informe os parâmetros", , , , , , , , , .F., .F.)
		
		//Aqui é feito a alteração no cadastro da SA1 Posicionada
		RecLock('SA1', .F.)
			SA1->A1_EMAIL := MV_PAR01
		SA1->(MsUnlock())
	EndIf

	RestArea(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.

2 Responses

  1. Edivaldo Duque de Souza disse:

    Excelente dica!

Deixe uma resposta

Terminal de Informação