{"id":305,"date":"2019-03-25T17:30:13","date_gmt":"2019-03-25T20:30:13","guid":{"rendered":"http:\/\/xexeu.elipse.com.br\/pt\/trabalhando-com-formulas-no-elipse-e3\/"},"modified":"2019-05-27T17:01:44","modified_gmt":"2019-05-27T20:01:44","slug":"trabalhando-com-formulas-no-elipse-e3","status":"publish","type":"post","link":"https:\/\/kb.elipse.com.br\/en\/trabalhando-com-formulas-no-elipse-e3\/","title":{"rendered":"Trabalhando com F\u00f3rmulas no Elipse E3."},"content":{"rendered":"<div align=\"justify\">\n<p><u><b>1) Introdu\u00e7\u00e3o<\/b><\/u><\/p>\n<p>As <b>F\u00f3rmulas <\/b>s\u00e3o m\u00f3dulos destinados ao armazenamento e transfer\u00eancia de conjuntos de valores para determinados agrupamentos de vari\u00e1veis, de forma a criar configura\u00e7\u00f5es pr\u00e9-definidas. O m\u00f3dulo de F\u00f3rmulas do E3 fornece todas as ferramentas necess\u00e1rias para a cria\u00e7\u00e3o destes conjuntos de valores (as F\u00f3rmulas) e associ\u00e1-los a um Template. Um <b>Template <\/b>\u00e9 a formata\u00e7\u00e3o das tabelas de um Banco de Dados, e informa quantas vari\u00e1veis far\u00e3o parte da f\u00f3rmula, o tipo de dados que poder\u00e1 ser armazenado em cada vari\u00e1vel, e os tipos de permiss\u00f5es e restri\u00e7\u00f5es. As F\u00f3rmulas criadas para um determinado Template podem ser enviadas\u00a0e\/ou carregadas em um Template ou em grupos de vari\u00e1veis, desde que obede\u00e7am a uma rela\u00e7\u00e3o 1:1 com cada elemento do template.<\/p>\n<p>Os grupos de vari\u00e1veis s\u00e3o tamb\u00e9m chamados <b>Unidades<\/b>, e v\u00e1rias unidades podem ser definidas para um mesmo Template. Assim, ao enviar valores de uma F\u00f3rmula para um conjunto de tags, a F\u00f3rmula \u00e9 a origem dos dados e as Unidades s\u00e3o o destino dos dados. J\u00e1 ao guardar em uma F\u00f3rmula os valores atuais de certos tags, estes \u00faltimos s\u00e3o a origem dos dados e a f\u00f3rmula \u00e9 o destino. O Template apenas define a quantidade, tipos e restri\u00e7\u00f5es dos dados nessas opera\u00e7\u00f5es.<\/p>\n<p>Para utilizar este recurso, clique com o bot\u00e3o direito do mouse no nome do projeto e selecione o item <b>F\u00f3rmula<\/b>.<\/p>\n<p><b>Exemplos de utiliza\u00e7\u00e3o de f\u00f3rmulas no E3<\/b><\/p>\n<p>As f\u00f3rmulas podem ser utilizadas em alguns casos de aplica\u00e7\u00e3o. Por exemplo:<\/p>\n<ul>\n<li>Quando o cliente precisa armazenar valores e carreg\u00e1-los em tags num determinado momento.<\/li>\n<li>Quando o cliente precisa de tags retentivos, ou seja, tags que, mesmo quando o dom\u00ednio \u00e9 finalizado, n\u00e3o perdem o \u00faltimo valor adquirido.<\/li>\n<\/ul>\n<p>Para mostrar o uso de f\u00f3rmulas no E3, vamos criar um projeto que reproduza o primeiro exemplo de aplica\u00e7\u00e3o citado. Este projeto simula o carregamento de valores a serem utilizados para a fabrica\u00e7\u00e3o de balas por tr\u00eas m\u00e1quinas. Inicialmente teremos cinco tipos de balas.<\/p>\n<p><b><u>2) Cria\u00e7\u00e3o do projeto<\/u><\/b><\/p>\n<p>Para iniciar, crie um projeto padr\u00e3o com o nome <b>TreinaFormulas <\/b>dentro da pasta <span style=\"font-family: Courier New;\">C:TreinaFormulas<\/span>, selecionando apenas a op\u00e7\u00e3o de armazenar dados em disco. O nome do banco de dados deve ser <b>Formulas.mdb<\/b>. Depois, renomeie a tela criada para <b>Formulas <\/b>e configure o Viewer para abrir esta tela.<\/p>\n<p><b>Cria\u00e7\u00e3o dos dados e da f\u00f3rmula<\/b><\/p>\n<p>Dentro do servidor de dados, crie tr\u00eas pastas com os seguintes nomes: <b>Maquina1<\/b>, <b>Maquina2 <\/b>e <b>Maquina3<\/b>. Dentro de cada uma dessas pastas, crie quatro tags internos com os nomes <b>Acucar<\/b>, <b>Agua<\/b>, <b>Glicose <\/b>e <b>Xarope<\/b>.<\/p>\n<p>Depois, insira uma f\u00f3rmula no seu projeto com uma tabela chamada <b>Balas <\/b>e selecione o banco de dados <b>ServidorDB<\/b>. Todos os dados da f\u00f3rmula, como formata\u00e7\u00e3o e valores, ser\u00e3o gravados nesta tabela.<\/p>\n<p>Na \u00e1rea de trabalho, insira quatro templates com os nomes <b>Acucar<\/b>, <b>Agua<\/b>, <b>Glucose <\/b>e <b>Xarope<\/b>. Para demonstrar o uso das restri\u00e7\u00f5es, ser\u00e3o selecionados limites absolutos para os dois primeiros itens, e um limite restrito para o quarto item. Os valores devem ser setados conforme a figura 1. Cada restri\u00e7\u00e3o \u00e9 explicada na respectiva janela de sele\u00e7\u00e3o, que \u00e9 acessada atrav\u00e9s do bot\u00e3o com retic\u00eancias, localizado ao lado direito da \u00e1rea de edi\u00e7\u00e3o da restri\u00e7\u00e3o. Estas restri\u00e7\u00f5es impedem que valores inv\u00e1lidos sejam colocados nos tags e possam causar algum problema no processo, como desperd\u00edcio e produto com defeito, entre outros.<\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID35\/Figura1.PNG\" alt=\"\" width=\"516\" height=\"143\" align=\"baseline\" border=\"0\" \/><br \/>\n<span style=\"font-size: xx-small;\"><b>Figura 1<\/b>: Criando restri\u00e7\u00f5es<\/span><\/div>\n<p>Feito isso, selecione a aba <b>Unidades <\/b>e crie tr\u00eas itens: <b>Maquina1<\/b>, <b>Maquina2 <\/b>e <b>Maquina3<\/b>. Depois, referencie cada um dos itens com respectivos tags, conforme mostrado na figura 2. Estas associa\u00e7\u00f5es ser\u00e3o tamb\u00e9m gravadas na tabela do banco de dados, juntamente com os dados da f\u00f3rmula.<\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID35\/Figura2.PNG\" alt=\"\" width=\"550\" height=\"125\" align=\"baseline\" border=\"0\" \/><br \/>\n<span style=\"font-size: xx-small;\"><b>Figura 2: <\/b>Associando os tags<\/span><\/div>\n<p>Para finalizar a configura\u00e7\u00e3o da f\u00f3rmula, crie cinco conjuntos de valores e configure-os conforme mostrado na figura 3. Estes conjuntos ser\u00e3o os produtos e valores iniciais que utilizaremos, e podem ser modificados depois.<\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID35\/Figura3.PNG\" alt=\"\" width=\"394\" height=\"144\" align=\"baseline\" border=\"0\" \/><br \/>\n<span style=\"font-size: xx-small;\"><b>Figura 3<\/b>: Ajustando os valores<\/span><\/div>\n<p><b>Configura\u00e7\u00e3o da tela para manipula\u00e7\u00e3o da f\u00f3rmula<\/b><\/p>\n<p>Para manipula\u00e7\u00e3o da f\u00f3rmula, crie uma tela conforme mostrado na figura 4.<\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID35\/Figura4.PNG\" alt=\"\" width=\"461\" height=\"297\" align=\"baseline\" border=\"0\" \/><br \/>\n<span style=\"font-size: xx-small;\"><b>Figura 4:<\/b> Tela de manipula\u00e7\u00e3o da f\u00f3rmula<\/span><\/div>\n<p>Todos os textos desta tela s\u00e3o Labels. Ao lado de cada texto &#8220;Bala de&#8221;, deve ser colocado um Display que ir\u00e1 mostrar qual bala est\u00e1 selecionada. Os ret\u00e2ngulos brancos s\u00e3o SetPoints para a manipula\u00e7\u00e3o dos valores dos tags. O ideal \u00e9 que sejam criados os objetos para uma das m\u00e1quinas e depois copiados para as outras duas, modificando-se apenas o nome da m\u00e1quina.<\/p>\n<p>Depois de criar a tela, crie um tag interno dentro de cada pasta do servidor de dados (<b>Maquina1<\/b>, <b>Maquina2 <\/b>e <b>Maquina3<\/b>) chamado <b>BalaAtual<\/b>. Referencie cada Display posicionado ao lado dos textos &#8220;Bala de&#8221; ao respectivo tag. Referencie os SetPoints aos seus respectivos tags. Lembre que todos os tags est\u00e3o dentro das pastas de dados referentes \u00e0s m\u00e1quinas.<\/p>\n<p>Para carregar os itens na ComboBox, insira o item <b>Consulta <\/b>na tela e configure-o para buscar a tabela <b>Balas_Values<\/b>, selecionado apenas o campo <b>Name <\/b>desta. Depois, configure o seguinte script no evento <i>OnStartRunning <\/i>da ComboBox:<\/p>\n<div align=\"left\"><span style=\"font-family: Courier New;\">Sub ComboBox1_OnStartRunning()<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0Set RS = Screen.Item(&#8220;Consulta1&#8221;).GetADORecordset()<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0For aux = 1 To RS.RecordCount<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0 AddItem CStr(RS.Fields(&#8220;Name&#8221;))<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0 RS.MoveNext<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0Next<\/span><br \/>\n<span style=\"font-family: Courier New;\">End Sub<\/span><\/div>\n<p>Feito isso, precisamos criar um procedimento para que os valores do item selecionado na ComboBox sejam carregados nos tags. Para isto, devemos criar um novo evento para a ComboBox que seja chamado quando o \u00edndice for mudado, ou seja, quando o item selecionado for mudado.<\/p>\n<p>Para criar este novo evento, deve-se selecionar a op\u00e7\u00e3o <b>Outros Eventos<\/b> na \u00e1rea de script da ComboBox. Para adicionar um novo evento, basta clicar no bot\u00e3o com o sinal de adi\u00e7\u00e3o. O evento dever\u00e1 ser criado conforme mostrado na figura abaixo.<\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID35\/Figura5.PNG\" alt=\"\" width=\"455\" height=\"316\" align=\"baseline\" border=\"0\" \/><br \/>\n<span style=\"font-size: xx-small;\"><b>Figura 5<\/b>: Criando o evento<\/span><\/div>\n<p>No evento criado na ComboBox, adicione o seguinte script:<\/p>\n<div align=\"left\"><span style=\"font-family: Courier New;\">Sub ComboBox1_ListIndexChange()<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0If Value <> &#8220;&#8221; Then<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0 Set RS = Screen.Item(&#8220;Consulta1&#8221;).GetADORecordset()<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0 For aux = 1 To RS.RecordCount<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0\u00a0 If Value = RS.Fields.Item(&#8220;Name&#8221;) then<\/span><br \/>\n<span style=\"font-family: Courier New;\">Application.GetObject(&#8220;Formula1&#8221;).LoadFormulaValuesQuiet &#8220;Maquina1&#8221;, Value<\/span><br \/>\n<span style=\"font-family: Courier New;\">Application.GetObject(&#8220;Dados.Maquina1.BalaAtual&#8221;).Value = Value <\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0\u00a0 Exit Sub<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0 End If<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0 RS.MoveNext<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0Next<\/span><br \/>\n<span style=\"font-family: Courier New;\">End If<\/span><br \/>\n<span style=\"font-family: Courier New;\">End Sub<\/span><\/div>\n<p>Feito este script, a ComboBox j\u00e1 est\u00e1 terminada. Siga este padr\u00e3o para fazer os scripts para as outras duas ComboBox. Agora, precisamos configurar os bot\u00f5es para manipula\u00e7\u00e3o dos valores e das balas.<\/p>\n<p>Para o bot\u00e3o <b>Criar Nova<\/b>, o script dever\u00e1 navegar atrav\u00e9s dos RecordSets do Banco de Dados para saber se o nome da bala a ser criada j\u00e1 existe, atrav\u00e9s de uma vari\u00e1vel auxiliar chamada <b>igual <\/b>e, neste caso, n\u00e3o permitir que a mesma seja adicionada. Caso contr\u00e1rio, ela ser\u00e1 adicionada normalmente. Para isto, siga o script abaixo:<\/p>\n<div align=\"left\">\n<p><span style=\"font-family: Courier New;\">Sub CommandButton1_Click()<\/span><\/p>\n<p>igual = 0<br \/>\nSet RS = Screen.Item(&#8220;Consulta1&#8221;).GetADORecordset()<br \/>\nSet TagName = Application.GetObject(&#8220;Dados.Maquina1.BalaAtual&#8221;)<br \/>\nSetFocus()<br \/>\nFor aux = 1 To RS.RecordCount<br \/>\nIf Screen.Item(&#8220;ComboBox1&#8221;).Value = RS.Fields(&#8220;Name&#8221;) Then<br \/>\nigual = 1<br \/>\nMsgBox &#8220;Receita ja existe!&#8221;<br \/>\nEnd If<br \/>\nRS.MoveNext<br \/>\nNext<\/p>\n<p>If igual = 0 And Screen.Item(&#8220;ComboBox1&#8221;).Value <> &#8220;&#8221; Then<br \/>\nTagname.Value = Screen.Item(&#8220;ComboBox1&#8221;).Value<br \/>\nApplication.GetObject(&#8220;Formula1&#8221;).CreateValue(TagName.Value)<br \/>\nRS.MoveLast<br \/>\nScreen.Item(&#8220;ComboBox1&#8221;).AddItem Tagname.Value<br \/>\nScreen.Item(&#8220;ComboBox2&#8221;).AddItem Tagname.Value<br \/>\nScreen.Item(&#8220;ComboBox3&#8221;).AddItem Tagname.Value<br \/>\nApplication.GetObject(&#8220;Dados.Maquina1.Acucar&#8221;).Value = 0<br \/>\nApplication.GetObject(&#8220;Dados.Maquina1.Glicose&#8221;).Value = 0<br \/>\nApplication.GetObject(&#8220;Dados.Maquina1.Xarope&#8221;).Value = 0<br \/>\nApplication.GetObject(&#8220;Dados.Maquina1.Agua&#8221;).Value = 0<br \/>\nEnd If<br \/>\nEnd Sub<\/p>\n<p>&nbsp;<\/p>\n<p>O script acima funciona como padr\u00e3o para a cria\u00e7\u00e3o dos scripts para os outros dois bot\u00f5es. Para criar uma nova bala, deve-se digitar o nome na ComboBox e depois clicar no bot\u00e3o <b>Criar Nova<\/b>. Depois disso, dever\u00e3o ser configurados os valores para os ingredientes da bala. Para isso, devemos configurar um script no bot\u00e3o <b>Salvar<\/b>, conforme mostrado abaixo.<\/p>\n<\/div>\n<div align=\"left\"><span style=\"font-family: Courier New;\">Sub CommandButton8_Click()<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0SetFocus()&#8217;tira o foco dos setpoints para validar o valor<br \/>\nIf Application.GetObject(&#8220;Dados.Maquina1.Agua&#8221;).Value >= 5 and _<br \/>\nApplication.GetObject(&#8220;Dados.Maquina1.Agua&#8221;).Value <= 15 then'filtra os valores\nApplication.GetObject(\"Formula1\").SetValueData _\nApplication.GetObject(\"Dados.Maquina1.BalaAtual\").Value, \"Agua\", _\nApplication.GetObject(\"Dados.Maquina1.Agua\").Value\nElse\nMsgBox(\"O valor digitado para \u00e1gua \u00e9 inv\u00e1lido,\"&#038; _\n\"pois este item possui restri\u00e7\u00f5es!\")\nEnd If\n\nIf Application.GetObject(\"Dados.Maquina1.Acucar\").Value >= 5 and _<br \/>\nApplication.GetObject(&#8220;Dados.Maquina1.Acucar&#8221;).Value <= 20 then'filtra os valores\nApplication.GetObject(\"Formula1\").SetValueData _\nApplication.GetObject(\"Dados.Maquina1.BalaAtual\").Value, \"Acucar\", _\nApplication.GetObject(\"Dados.Maquina1.Acucar\").Value\nElse\nMsgBox(\"O valor digitado para a\u00e7\u00facar \u00e9 inv\u00e1lido,\"&#038;_\n\" pois este item possui restri\u00e7\u00f5es!\")\nEnd If\n\nApplication.GetObject(\"Formula1\").SetValueData _\nApplication.GetObject(\"Dados.Maquina1.BalaAtual\").Value, \"Glicose\", _\nApplication.GetObject(\"Dados.Maquina1.Glicose\").Value\nApplication.GetObject(\"Formula1\").SetValueData _\nApplication.GetObject(\"Dados.Maquina1.BalaAtual\").Value, \"Xarope\", _\nApplication.GetObject(\"Dados.Maquina1.Xarope\").Value\n\nIF Screen.Item(\"ComboBox1\").Value = _\nApplication.GetObject(\"Dados.Maquina1.BalaAtual\").Value then\nApplication.GetObject(\"Formula1\").LoadFormulaValuesQuiet \"Maquina1\", _\nScreen.Item(\"ComboBox1\").Value\nEnd If\nIf Screen.Item(\"ComboBox1\").Value = _\nApplication.GetObject(\"Dados.Maquina1.BalaAtual\").Value then\nApplication.GetObject(\"Formula1\").LoadFormulaValuesQuiet \"Maquina1\", _\nScreen.Item(\"ComboBox1\").Value\nEnd If\n<\/span><span style=\"font-family: Courier New;\">End Sub<\/span><\/div>\n<p>Este script tamb\u00e9m verifica se os valores ajustados para os itens est\u00e3o dentro dos limites configurados, mostrando uma mensagem de erro quando estes estiverem fora.<\/p>\n<p>Agora j\u00e1 podemos criar e modificar os valores para as balas. Entretanto, ainda precisamos configurar a aplica\u00e7\u00e3o para permitir a exclus\u00e3o da bala que selecionarmos. Para isso, vamos configurar um script para o bot\u00e3o <b>Deletar Sele\u00e7\u00e3o<\/b>. Este script requer prote\u00e7\u00f5es e alguns outros procedimentos para que a bala seja acidentalmente exclu\u00edda de todos os locais onde ela estiver selecionada. Portanto, o script ser\u00e1 o seguinte:<\/p>\n<div align=\"left\"><span style=\"font-family: Courier New;\">Sub CommandButton9_Click()<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0VarDel = Screen.Item(&#8220;ComboBox1&#8221;).Value<\/p>\n<p>if MsgBox (&#8220;Deseja deletar a formula de &#8220;&#038; VarDel &#038; &#8220;?&#8221;, 4) = 6 then&#8217;verifica se deseja deletar a formula<br \/>\nindice = Screen.Item(&#8220;ComboBox1&#8221;).ListIndex<br \/>\nApplication.GetObject(&#8220;Formula1&#8221;).DeleteValue (Screen.Item(&#8220;ComboBox1&#8221;).Value)<\/p>\n<p>if Screen.Item(&#8220;ComboBox2&#8221;).Value = Screen.Item(&#8220;ComboBox1&#8221;).Value then<br \/>\nScreen.Item(&#8220;ComboBox2&#8221;).Enabled = false<br \/>\nScreen.Item(&#8220;ComboBox2&#8221;).Value = &#8220;&#8221;<br \/>\nScreen.Item(&#8220;ComboBox2&#8221;).Enabled = true<br \/>\nApplication.GetObject(&#8220;Dados.Maquina2.BalaAtual&#8221;).Value = &#8220;&#8221;<br \/>\nApplication.GetObject(&#8220;Dados.Maquina2.Acucar&#8221;).Value = 0<br \/>\nApplication.GetObject(&#8220;Dados.Maquina2.Glicose&#8221;).Value = 0<br \/>\nApplication.GetObject(&#8220;Dados.Maquina2.Xarope&#8221;).Value = 0<br \/>\nApplication.GetObject(&#8220;Dados.Maquina2.Agua&#8221;).Value = 0<br \/>\nend if<\/p>\n<p>if Screen.Item(&#8220;ComboBox3&#8221;).Value = Screen.Item(&#8220;ComboBox1&#8221;).Value then<br \/>\nScreen.Item(&#8220;ComboBox3&#8221;).Enabled = false<br \/>\nScreen.Item(&#8220;ComboBox3&#8221;).Value = &#8220;&#8221;<br \/>\nScreen.Item(&#8220;ComboBox3&#8221;).Enabled = true<br \/>\nApplication.GetObject(&#8220;Dados.Maquina3.BalaAtual&#8221;).Value = &#8220;&#8221;<br \/>\nApplication.GetObject(&#8220;Dados.Maquina3.Acucar&#8221;).Value = 0<br \/>\nApplication.GetObject(&#8220;Dados.Maquina3.Glicose&#8221;).Value = 0<br \/>\nApplication.GetObject(&#8220;Dados.Maquina3.Xarope&#8221;).Value = 0<br \/>\nApplication.GetObject(&#8220;Dados.Maquina3.Agua&#8221;).Value = 0<br \/>\nend if<\/p>\n<p>Screen.Item(&#8220;ComboBox1&#8221;).RemoveItem(indice)<br \/>\nScreen.Item(&#8220;ComboBox1&#8221;).Enabled = false<br \/>\nScreen.Item(&#8220;ComboBox1&#8221;).Value = &#8220;&#8221;<br \/>\nScreen.Item(&#8220;ComboBox1&#8221;).Enabled = true<br \/>\nApplication.GetObject(&#8220;Dados.Maquina1.BalaAtual&#8221;).Value = &#8220;&#8221;<br \/>\nApplication.GetObject(&#8220;Dados.Maquina1.Acucar&#8221;).Value = 0<br \/>\nApplication.GetObject(&#8220;Dados.Maquina1.Glicose&#8221;).Value = 0<br \/>\nApplication.GetObject(&#8220;Dados.Maquina1.Xarope&#8221;).Value = 0<br \/>\nApplication.GetObject(&#8220;Dados.Maquina1.Agua&#8221;).Value = 0<br \/>\nScreen.Item(&#8220;ComboBox2&#8221;).RemoveItem(indice)<br \/>\nScreen.Item(&#8220;ComboBox3&#8221;).RemoveItem(indice)<br \/>\nend if<br \/>\n<\/span><span style=\"font-family: Courier New;\">End Sub<\/span><\/div>\n<p>Note que o script procura e apaga o item selecionado da tabela do banco de dados, e ent\u00e3o configura todos os valores como 0 para ent\u00e3o remover o item selecionado de todos os ComboBox. Este script deve ser seguido como padr\u00e3o para os outros dois bot\u00f5es de remo\u00e7\u00e3o.<\/p>\n<p>Agora podemos executar o dom\u00ednio e fazer os testes de funcionamento de todos os recursos da aplica\u00e7\u00e3o.<\/p>\n<p><u><b>3) Considera\u00e7\u00f5es finais<\/b><\/u><\/p>\n<p>Esta aplica\u00e7\u00e3o n\u00e3o visa mostrar a melhor maneira de se configurar a aplica\u00e7\u00e3o, mas sim uma das maneiras de utiliza\u00e7\u00e3o de f\u00f3rmulas com o maior n\u00famero de recursos sem a utiliza\u00e7\u00e3o das ferramentas prontas do m\u00f3dulo de f\u00f3rmulas. Tamb\u00e9m procuramos mostrar a atualiza\u00e7\u00e3o dos dados da f\u00f3rmula utilizando uma outra ferramenta do E3 muito \u00fatil para a busca de dados nas tabelas de bancos de dados que \u00e9 o E3Query, a consulta do E3.<\/p>\n<p>Toda e qualquer d\u00favida referente a f\u00f3rmulas ou, especificamente, a esta aplica\u00e7\u00e3o, podem ser esclarecidas com o <a href=\"http:\/\/www.elipse.com.br\/port\/suporte.aspx\" target=\"_blank\" rel=\"noopener noreferrer\">suporte t\u00e9cnico da Elipse Software<\/a>.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>1) Introdu\u00e7\u00e3o As F\u00f3rmulas s\u00e3o m\u00f3dulos destinados ao armazenamento e transfer\u00eancia de conjuntos de valores para determinados agrupamentos de vari\u00e1veis, de forma a criar configura\u00e7\u00f5es pr\u00e9-definidas. O m\u00f3dulo de F\u00f3rmulas&hellip;<\/p>\n","protected":false},"author":22,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0},"categories":[593],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Trabalhando com F\u00f3rmulas no Elipse E3. - Elipse Knowledgebase<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Trabalhando com F\u00f3rmulas no Elipse E3.\" \/>\n<meta property=\"og:description\" content=\"1) Introdu\u00e7\u00e3o As F\u00f3rmulas s\u00e3o m\u00f3dulos destinados ao armazenamento e transfer\u00eancia de conjuntos de valores para determinados agrupamentos de vari\u00e1veis, de forma a criar configura\u00e7\u00f5es pr\u00e9-definidas. O m\u00f3dulo de F\u00f3rmulas&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/\" \/>\n<meta property=\"og:site_name\" content=\"Elipse Knowledgebase\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/www.facebook.com\/elipsesoftware\" \/>\n<meta property=\"article:published_time\" content=\"2019-03-25T20:30:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-05-27T20:01:44+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID35\/Figura1.PNG\" \/>\n<meta name=\"author\" content=\"Samir Lima\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Samir Lima\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/\"},\"author\":{\"name\":\"Samir Lima\",\"@id\":\"https:\/\/kb.elipse.com.br\/#\/schema\/person\/6187f4add11d5e8b204dc7032d2f15cf\"},\"headline\":\"Trabalhando com F\u00f3rmulas no Elipse E3.\",\"datePublished\":\"2019-03-25T20:30:13+00:00\",\"dateModified\":\"2019-05-27T20:01:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/\"},\"wordCount\":2842,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/kb.elipse.com.br\/#organization\"},\"articleSection\":[\"F\u00f3rmulas\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/\",\"url\":\"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/\",\"name\":\"[:pt]Trabalhando com F\u00f3rmulas no Elipse E3.[:en]Trabalhando com F\u00f3rmulas no Elipse E3.[:] - Elipse Knowledgebase\",\"isPartOf\":{\"@id\":\"https:\/\/kb.elipse.com.br\/#website\"},\"datePublished\":\"2019-03-25T20:30:13+00:00\",\"dateModified\":\"2019-05-27T20:01:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/kb.elipse.com.br\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Trabalhando com F\u00f3rmulas no Elipse E3.\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kb.elipse.com.br\/#website\",\"url\":\"https:\/\/kb.elipse.com.br\/\",\"name\":\"Elipse Knowledgebase\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/kb.elipse.com.br\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kb.elipse.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kb.elipse.com.br\/#organization\",\"name\":\"Elipse Software\",\"url\":\"https:\/\/kb.elipse.com.br\/\",\"sameAs\":[\"http:\/\/www.facebook.com\/elipsesoftware\"],\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/kb.elipse.com.br\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kb.elipse.com.br\/wp-content\/uploads\/2019\/05\/schererelipse-com-br\/logoElipse.png\",\"contentUrl\":\"https:\/\/kb.elipse.com.br\/wp-content\/uploads\/2019\/05\/schererelipse-com-br\/logoElipse.png\",\"width\":161,\"height\":58,\"caption\":\"Elipse Software\"},\"image\":{\"@id\":\"https:\/\/kb.elipse.com.br\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/kb.elipse.com.br\/#\/schema\/person\/6187f4add11d5e8b204dc7032d2f15cf\",\"name\":\"Samir Lima\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/kb.elipse.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e9f438f26a32e9429a4f6073c6598fae?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e9f438f26a32e9429a4f6073c6598fae?s=96&d=mm&r=g\",\"caption\":\"Samir Lima\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/samirlima\"],\"url\":\"https:\/\/kb.elipse.com.br\/en\/author\/samir\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Trabalhando com F\u00f3rmulas no Elipse E3. - Elipse Knowledgebase","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/","og_locale":"en_US","og_type":"article","og_title":"[:pt]Trabalhando com F\u00f3rmulas no Elipse E3.[:en]Trabalhando com F\u00f3rmulas no Elipse E3.[:] - Elipse Knowledgebase","og_description":"1) Introdu\u00e7\u00e3o As F\u00f3rmulas s\u00e3o m\u00f3dulos destinados ao armazenamento e transfer\u00eancia de conjuntos de valores para determinados agrupamentos de vari\u00e1veis, de forma a criar configura\u00e7\u00f5es pr\u00e9-definidas. O m\u00f3dulo de F\u00f3rmulas&hellip;","og_url":"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/","og_site_name":"Elipse Knowledgebase","article_publisher":"http:\/\/www.facebook.com\/elipsesoftware","article_published_time":"2019-03-25T20:30:13+00:00","article_modified_time":"2019-05-27T20:01:44+00:00","og_image":[{"url":"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID35\/Figura1.PNG"}],"author":"Samir Lima","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Samir Lima","Est. reading time":"17 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/#article","isPartOf":{"@id":"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/"},"author":{"name":"Samir Lima","@id":"https:\/\/kb.elipse.com.br\/#\/schema\/person\/6187f4add11d5e8b204dc7032d2f15cf"},"headline":"Trabalhando com F\u00f3rmulas no Elipse E3.","datePublished":"2019-03-25T20:30:13+00:00","dateModified":"2019-05-27T20:01:44+00:00","mainEntityOfPage":{"@id":"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/"},"wordCount":2842,"commentCount":1,"publisher":{"@id":"https:\/\/kb.elipse.com.br\/#organization"},"articleSection":["F\u00f3rmulas"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/","url":"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/","name":"[:pt]Trabalhando com F\u00f3rmulas no Elipse E3.[:en]Trabalhando com F\u00f3rmulas no Elipse E3.[:] - Elipse Knowledgebase","isPartOf":{"@id":"https:\/\/kb.elipse.com.br\/#website"},"datePublished":"2019-03-25T20:30:13+00:00","dateModified":"2019-05-27T20:01:44+00:00","breadcrumb":{"@id":"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/kb.elipse.com.br\/trabalhando-com-formulas-no-elipse-e3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/kb.elipse.com.br\/en\/"},{"@type":"ListItem","position":2,"name":"Trabalhando com F\u00f3rmulas no Elipse E3."}]},{"@type":"WebSite","@id":"https:\/\/kb.elipse.com.br\/#website","url":"https:\/\/kb.elipse.com.br\/","name":"Elipse Knowledgebase","description":"","publisher":{"@id":"https:\/\/kb.elipse.com.br\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kb.elipse.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/kb.elipse.com.br\/#organization","name":"Elipse Software","url":"https:\/\/kb.elipse.com.br\/","sameAs":["http:\/\/www.facebook.com\/elipsesoftware"],"logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/kb.elipse.com.br\/#\/schema\/logo\/image\/","url":"https:\/\/kb.elipse.com.br\/wp-content\/uploads\/2019\/05\/schererelipse-com-br\/logoElipse.png","contentUrl":"https:\/\/kb.elipse.com.br\/wp-content\/uploads\/2019\/05\/schererelipse-com-br\/logoElipse.png","width":161,"height":58,"caption":"Elipse Software"},"image":{"@id":"https:\/\/kb.elipse.com.br\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/kb.elipse.com.br\/#\/schema\/person\/6187f4add11d5e8b204dc7032d2f15cf","name":"Samir Lima","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/kb.elipse.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e9f438f26a32e9429a4f6073c6598fae?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e9f438f26a32e9429a4f6073c6598fae?s=96&d=mm&r=g","caption":"Samir Lima"},"sameAs":["https:\/\/www.linkedin.com\/in\/samirlima"],"url":"https:\/\/kb.elipse.com.br\/en\/author\/samir\/"}]}},"_links":{"self":[{"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/posts\/305"}],"collection":[{"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/users\/22"}],"replies":[{"embeddable":true,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/comments?post=305"}],"version-history":[{"count":3,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/posts\/305\/revisions"}],"predecessor-version":[{"id":6645,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/posts\/305\/revisions\/6645"}],"wp:attachment":[{"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/media?parent=305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/categories?post=305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/tags?post=305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}