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.
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.
Que Homem. Meu Deus!
Ahoooo, valeu Edu.
Um grande abraço.
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.
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.
Boa tarde Ray, tudo joia?
Ah entendi, então para adicionar no Menu, caso você precise novamente em um futuro, nesse link tem um tutorial: https://terminaldeinformacao.com/2023/05/31/como-adicionar-uma-rotina-em-um-menu-do-protheus/ . E no nosso curso de Configurador é na aula 03 ( https://terminaldeinformacao.com/2022/03/14/curso-configurador-sigacfg/ ).
Quanto a ele ficar a tela vermelha, é devido a ele encerrar a thread (fechar a aba atual) através da função Final(). Pois ao alterar um parâmetro, você tem que fechar o sistema e abrir novamente manualmente.
Um grande abraço.
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.