Função para alterar um parâmetro lógico (SX6)

Olá pessoal…

Hoje vou mostrar uma função que desenvolvi para alterar parâmetros do tipo lógico (que pode ser utilizada pelo usuário comum).

Imagine uma situação em que constatemente os usuários solicitama a alteração de um parâmetro para .T. ou para .F., para otimizar esse tempo, desenvolvi uma rotina que pode ser inserida no Ações Relacionadas ou que pode ser chamada em qualquer outro lugar, para a alteração do parâmetro.

Ela é simples, é uma tela com 3 botões, o de Habilitar, o de Desabilitar e o de Cancelar. Abaixo um print.

Função para alterar parâmetro

Função para alterar parâmetro

Sendo que após ela ser confirmada, ela encerra a thread atual, para a rotina ser re-aberta (recarregar o parâmetro na memória).

Abaixo o código fonte desenvolvido.

//Bibliotecas
#Include "Protheus.ch"

/*/{Protheus.doc} zAltPar
Função que altera parâmetros do tipo Lógico (deve ser um parâmetro com conteúdo lógico na SX6, por exemplo, "MV_CHVNFE")
@author Atilio
@since 25/04/2017
@version 1.0
@type function
	@param cParametro, Character, Código do parâmetro que será atualizado
/*/

User Function zAltPar(cParametro)
	Local aArea    := GetArea()
	Local lConsAtu := Nil
	Local lConsNov := Nil
	Local nOpcao   := 0
	Local aBotoes  := {}
	Local cMensag  := ""
	Default cParametro := ""
	
	//Se tiver parâmetro
	If !Empty(cParametro)
		lConsAtu := GetNewPar(cParametro, .F.)
		
		//Adiciona os botões
		aAdd(aBotoes, Iif(lConsAtu,  "Manter Habilitado",   "Habilitar"))   //Opção 1
		aAdd(aBotoes, Iif(!lConsAtu, "Manter Desabilitado", "Desabilitar")) //Opção 2
		aAdd(aBotoes, "Cancelar")                                           //Opção 3
		
		//Mostra o aviso e pega o botão
		cMensag := "Atualmente o parâmetro esta " + Iif(lConsAtu, "HABILITADO", "DESABILITADO") + "." + CRLF
		cMensag += "Deseja alterar?"
		nOpcao := Aviso("Atenção", cMensag, aBotoes, 2)
		
		//Definindo a opção nova
		If nOpcao == 1
			lConsNov := .T.
		ElseIf nOpcao == 2
			lConsNov := .F.
		EndIf
		
		//Se não for nulo
		If lConsNov != Nil
			//Se o conteúdo novo for diferente do atual
			If lConsNov != lConsAtu
				PutMV(cParametro, lConsNov)
				
				Final("Atenção", "A tela será fechada e deve ser aberta novamente!")
			EndIf
		EndIf
	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.

8 Responses

  1. Eduardo Amarante disse:

    Que Homem. Meu Deus!

  2. Ray disse:

    Preciso criar uma tela com três botões que chame essa função ou uma tela será criada em algum lugar, após compilar o fonte.

    • Boa tarde Ray, tudo bem?

      Acho que não entendi sua dúvida. Você quer criar uma tela similar a do print seria isso?

      É que a função Aviso() já cria para você automaticamente. Ai no exemplo acima, a única coisa que você iria precisar seria compilar e depois acionar a função com o nome do parâmetro.

      Por exemplo: u_zAltPar(“MV_X_PARAM”)

      Abraços.

  3. Ray disse:

    Daniel, obrigado pelo retorno. Eu não sabia como adicionar a função em um menu do Protheus após compilar, mas descobrir. Basta criar um item através do cadastro de menus e apontar para função u_zAltPar. Consegui implementar aqui no meu ambiente, mas após alterar o parâmetro, é apresentada uma tela vermelha e não volta para o menu inicial do Protheus sendo necessário voltar manualmente. Muito obrigado por disponibilizar o código, vou implementar aqui na minha empresa para o pessoal do fiscal.

  4. Wanderson disse:

    Boa Tarde Daniel tudo bem,

    E quando o SX6 esta no banco, como podemos proceder, eu fiz uma telinha porem ele não atualiza o parametro.

    • Bom dia Wanderson, tudo joia?

      As funções GetMV e PutMV funcionam com o dicionário no banco.

      Inclusive fiz alguns testes recentemente com a versão 12.1.2210 com o dicionário no SQL e funcionou.

      Tente fazer um teste, criando uma user function simples, e dando um putmv em qualquer parâmetro se atentando ao tipo do conteúdo.

      Um forte abraço.

Deixe uma resposta

Terminal de Informação