Olá pessoal…
Como é de conhecimento de muitos analistas, o Fórmulas foi bloqueado no Protheus 12 para execução de blocos de código, pensando nisso, criei uma função bem prática para executar blocos de código.
Antes de mais nada, eu sei que é possível executar no lançamento padrão, porém essa rotina foi criada devido a praticidade de apenas colocar no menu e executar quantas vezes quiser a expressão digitada.
Essa função, você consegue colocar em um menu (cuidado para deixar exposto para qualquer usuário), e nela você consegue executar a fórmula digitada (até mais de uma vez). A tela é bem simples, tem um campo para digitação e o botão de execução.
UPDATE – Setembro de 2023:
Pessoal, como algumas rotinas poderiam travar e ficar em loop eterno, o Begin Sequence, não encerrava, visto que não dava a mensagem de Thread Error.
Foi criado então um checkbox, se deve inibir o Error Log (passando pelo Begin Sequence como era antigamente), ou se deve forçar a execução, mesmo com erros (sem passar pelo Begin Sequence)
Abaixo o código fonte criado:
//Bibliotecas #Include "Protheus.ch" /*/{Protheus.doc} zMiniForm Funcao Mini Formulas, para executar formulas @author Atilio @since 17/12/2017 @version 1.0 @type function @obs Assim como o formulas foi bloqueado no Protheus 12, cuidado ao deixar exposto no menu o Mini Formulas /*/ User Function zMiniForm() Local aArea := GetArea() //Variaveis da tela Private oDlgForm Private oGrpForm Private oGetForm Private cGetForm := Space(250) Private oGrpAco Private oBtnExec Private oInibErro, lInibErro := .F. //Tamanho da Janela Private nJanLarg := 500 Private nJanAltu := 120 Private nTamBtn := 048 //Criando a janela DEFINE MSDIALOG oDlgForm TITLE "zMiniForm - Execucao de Formulas" FROM 000, 000 TO nJanAltu, nJanLarg COLORS 0, 16777215 PIXEL //Grupo Formula com o Get @ 003, 003 GROUP oGrpForm TO 30, (nJanLarg/2)-1 PROMPT "Formula: " OF oDlgForm COLOR 0, 16777215 PIXEL @ 010, 006 MSGET oGetForm VAR cGetForm SIZE (nJanLarg/2)-9, 013 OF oDlgForm COLORS 0, 16777215 PIXEL //Grupo Acoes com o Botao @ (nJanAltu/2)-30, 003 GROUP oGrpAco TO (nJanAltu/2)-3, (nJanLarg/2)-1 PROMPT "Acoes: " OF oDlgForm COLOR 0, 16777215 PIXEL @ (nJanAltu/2)-18, 006 CHECKBOX oInibErro VAR lInibErro PROMPT "Inibe Error Log (utilizar Begin Sequence)" SIZE 200, 010 OF oDlgForm COLORS 0, 16777215 PIXEL @ (nJanAltu/2)-24, (nJanLarg/2) - (nTamBtn + 6) BUTTON oBtnExec PROMPT "Executar" SIZE nTamBtn, 018 OF oDlgForm ACTION(fExecuta()) PIXEL //Ativando a janela ACTIVATE MSDIALOG oDlgForm CENTERED RestArea(aArea) Return /*---------------------------------------* | Func.: fExecuta | | Desc.: Executa a formula digitada | *---------------------------------------*/ Static Function fExecuta() Local aArea := GetArea() Local cFormula := Alltrim(cGetForm) Local cError := "" Local bError := Nil //Se tiver conteudo digitado If ! Empty(cFormula) //Se tiver habilitado para inibir erros If lInibErro bError := ErrorBlock({ |oError| cError := oError:Description}) //Inicio a utilizacao da tentativa Begin Sequence &(cFormula) End Sequence //Restaurando bloco de erro do sistema ErrorBlock(bError) //Se houve erro, sera mostrado ao usuario If ! Empty(cError) MsgStop("Houve um erro na formula digitada: "+CRLF+CRLF+cError, "Atencao") EndIf //Senão, simplesmente executa a fórmula conforme ela foi digitada Else &(cFormula) EndIf EndIf RestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
essa ficou show em mestre… topp!
Opa, eu que agradeço mano Gui.
Abraços jovem.
Ótimo, continua com este Blog sucesso…
Opa, eu que agradeço Erick.
Um grande abraço.
Desculpa, mas eu não entendi… usamos o P12 desde a versão 12.1.7 hoje estamos na 12.1.17 e eu sempre usei o Fórmulas para testar várias rotinas…. Quando que ele foi bloqueado??? Foi esses dias???
Bom dia Lucimar, tudo bem?
Nas libs mais novas do 12.1.17, a macro execução do Fórmulas foi bloqueada por questões de segurança.
Um grande abraço.
Que ótima ferramenta, Atilião!
Sucesso!
Eu que agradeço Achoa san.
Aquele abraço.
Muito Bom meu mano!
Parabéns pelo conteúdo.
Um abraço
ATT
Eu que agradeço mano Rubem.
Um grande abraço.
Atilio, hoje coloquei essa função em um cliente e está me ajudando muito.
Você sempre preciso nos seus desenvolvimentos criando as ferramentas que nos ajudam na execução do trabalho.
Obrigado, parabéns.
Att.
Mozart.
Grande Mozart.
Muito obrigado jovem, se precisar é só falar.
Um grande abraço.
Parabéns meu amigo, garanto que vai ajudar muito!!
Eu que agradeço jovem.
Um grande abraço.
Muito top Dan !! Me ajudou e muito !
Opa, eu que agradeço pelo comentário jovem.
Grande abraço.
Como executar no configurador?
Então Daniel, no Configurador, atualmente com o dicionário no banco, acho que não tem como adicionar no menu.
Porém o que você pode testar, é criar o ponto de entrada AfterLogin, colocar em um atalho, por exemplo, Shift+F7 a chamada para o mini fórmulas, e ao logar no configurador, vc pressionar o Shift+F7.
Obrigado Dan. Deu certo aqui! Sou iniciante nesse mundo ADVPL
Eu que agradeço pelo comentário Cassio.
Grande abraço.