Elipse Knowledgebase Trabalhando com Fórmulas no Elipse E3. 1) Introduà à o As Fórmulas sã o mã³dulos destinados ao armazenamento e transferãªncia de conjuntos de valores para determinados agrupamentos de variã veis, de forma a criar configuraã ões prã -definidas. O mã³dulo de Fórmulas do E3 fornece todas as ferramentas necessã rias para a criaã à o destes conjuntos de valores (as Fórmulas) e associã -los a um Template. Um Template à a formataã à o das tabelas de um Banco de Dados, e informa quantas variã veis farã o parte da fã³rmula, o tipo de dados que poderã ser armazenado em cada variã vel, e os tipos de permissãµes e restriã ões. As Fórmulas criadas para um determinado Template podem ser enviadas e/ou carregadas em um Template ou em grupos de variã veis, desde que obedeã am a uma relaã à o 1:1 com cada elemento do template. Os grupos de variã veis sã o tambã m chamados Unidades, e vã rias unidades podem ser definidas para um mesmo Template. Assim, ao enviar valores de uma Fórmula para um conjunto de tags, a Fórmula à a origem dos dados e as Unidades sã o o destino dos dados. Jà ao guardar em uma Fórmula os valores atuais de certos tags, estes últimos sã o a origem dos dados e a fã³rmula à o destino. O Template apenas define a quantidade, tipos e restriã ões dos dados nessas operaã ões. Para utilizar este recurso, clique com o botã o direito do mouse no nome do projeto e selecione o item Fórmula. Exemplos de utilizaã à o de fã³rmulas no E3 As fã³rmulas podem ser utilizadas em alguns casos de aplicaã à o. Por exemplo: Quando o cliente precisa armazenar valores e carregã -los em tags num determinado momento. Quando o cliente precisa de tags retentivos, ou seja, tags que, mesmo quando o domã nio à finalizado, nã o perdem o último valor adquirido. Para mostrar o uso de fã³rmulas no E3, vamos criar um projeto que reproduza o primeiro exemplo de aplicaã à o citado. Este projeto simula o carregamento de valores a serem utilizados para a fabricaã à o de balas por trãªs mã quinas. Inicialmente teremos cinco tipos de balas. 2) Criaà à o do projeto Para iniciar, crie um projeto padrã o com o nome TreinaFormulas dentro da pasta C:\TreinaFormulas, selecionando apenas a opã à o de armazenar dados em disco. O nome do banco de dados deve ser Formulas.mdb. Depois, renomeie a tela criada para Formulas e configure o Viewer para abrir esta tela. Criaà à o dos dados e da fã³rmula Dentro do servidor de dados, crie trãªs pastas com os seguintes nomes: Maquina1, Maquina2 e Maquina3. Dentro de cada uma dessas pastas, crie quatro tags internos com os nomes Acucar, Agua, Glicose e Xarope. Depois, insira uma fã³rmula no seu projeto com uma tabela chamada Balas e selecione o banco de dados ServidorDB. Todos os dados da fã³rmula, como formataã à o e valores, serã o gravados nesta tabela. Na à rea de trabalho, insira quatro templates com os nomes Acucar, Agua, Glucose e Xarope. Para demonstrar o uso das restriã ões, serã o 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ã à o à explicada na respectiva janela de seleã à o, que à acessada atravã s do botã o com reticãªncias, localizado ao lado direito da à rea de ediã à o da restriã à o. Estas restriã ões impedem que valores invã lidos sejam colocados nos tags e possam causar algum problema no processo, como desperdã cio e produto com defeito, entre outros. Figura 1: Criando restriã ões 1/5
Feito isso, selecione a aba Unidades e crie trãªs itens: Maquina1, Maquina2 e Maquina3. Depois, referencie cada um dos itens com respectivos tags, conforme mostrado na figura 2. Estas associaã ões serã o tambã m gravadas na tabela do banco de dados, juntamente com os dados da fã³rmula. Figura 2: Associando os tags Para finalizar a configuraã à o da fã³rmula, crie cinco conjuntos de valores e configure-os conforme mostrado na figura 3. Estes conjuntos serã o os produtos e valores iniciais que utilizaremos, e podem ser modificados depois. Figura 3: Ajustando os valores Configuraà à o da tela para manipulaã à o da fã³rmula Para manipulaã à o da fã³rmula, crie uma tela conforme mostrado na figura 4. Figura 4: Tela de manipulaã à o da fã³rmula Todos os textos desta tela sã o Labels. Ao lado de cada texto "Bala de", deve ser colocado um Display que irã mostrar qual bala estã selecionada. Os retã ngulos brancos sã o SetPoints para a manipulaã à o dos valores dos tags. O ideal à que sejam criados os objetos para uma das mã quinas e depois copiados para as outras duas, modificando-se apenas o nome da mã quina. Depois de criar a tela, crie um tag interno dentro de cada pasta do servidor de dados (Maquina1, Maquina2 e Maquina3) chamado BalaAtual. Referencie cada Display posicionado ao lado dos textos "Bala de" ao respectivo tag. Referencie os SetPoints aos seus respectivos tags. Lembre que todos os tags estã o dentro das pastas de dados referentes à s mã quinas. Para carregar os itens na ComboBox, insira o item Consulta na tela e configure-o para buscar a tabela Balas_Values, selecionado apenas o campo Name desta. Depois, configure o seguinte script no evento OnStartRunning da ComboBox: Sub ComboBox1_OnStartRunning() AddItem CStr(RS.Fields("Name")) 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 à ndice for mudado, ou seja, quando o item selecionado for mudado. Para criar este novo evento, deve-se selecionar a opã à o Outros Eventos na à rea de script da ComboBox. Para adicionar um novo evento, basta clicar no botã o com o sinal de adiã à o. O evento deverã ser criado conforme mostrado na figura abaixo. Figura 5: Criando o evento No evento criado na ComboBox, adicione o seguinte script: Sub ComboBox1_ListIndexChange() If Value <> "" Then If Value = RS.Fields.Item("Name") then Application.GetObject("Formula1").LoadFormulaValuesQuiet "Maquina1", Value Application.GetObject("Dados.Maquina1.BalaAtual").Value = Value Exit Sub 2/5
Feito este script, a ComboBox jã estã terminada. Siga este padrã o para fazer os scripts para as outras duas ComboBox. Agora, precisamos configurar os botãµes para manipulaã à o dos valores e das balas. Para o botã o Criar Nova, o script deverã navegar atravã s dos RecordSets do Banco de Dados para saber se o nome da bala a ser criada jã existe, atravã s de uma variã vel auxiliar chamada igual e, neste caso, nã o permitir que a mesma seja adicionada. Caso contrã rio, ela serã adicionada normalmente. Para isto, siga o script abaixo: Sub CommandButton1_Click() igual = 0 Set TagName = Application.GetObject("Dados.Maquina1.BalaAtual") SetFocus() If Screen.Item("ComboBox1").Value = RS.Fields("Name") Then igual = 1 MsgBox "Receita ja existe!" If igual = 0 And Screen.Item("ComboBox1").Value <> "" Then Tagname.Value = Screen.Item("ComboBox1").Value Application.GetObject("Formula1").CreateValue(TagName.Value) RS.MoveLast Screen.Item("ComboBox1").AddItem Tagname.Value Screen.Item("ComboBox2").AddItem Tagname.Value Screen.Item("ComboBox3").AddItem Tagname.Value Application.GetObject("Dados.Maquina1.Acucar").Value = 0 Application.GetObject("Dados.Maquina1.Glicose").Value = 0 Application.GetObject("Dados.Maquina1.Xarope").Value = 0 Application.GetObject("Dados.Maquina1.Agua").Value = 0 O script acima funciona como padrã o para a criaã à o dos scripts para os outros dois botãµes. Para criar uma nova bala, deve-se digitar o nome na ComboBox e depois clicar no botã o Criar Nova. Depois disso, deverã o ser configurados os valores para os ingredientes da bala. Para isso, devemos configurar um script no botã o Salvar, conforme mostrado abaixo. Sub CommandButton8_Click() SetFocus()'tira o foco dos setpoints para validar o valor If Application.GetObject("Dados.Maquina1.Agua").Value >= 5 and _ Application.GetObject("Dados.Maquina1.Agua").Value <= 15 then'filtra os valores Application.GetObject("Dados.Maquina1.BalaAtual").Value, "Agua", _ Application.GetObject("Dados.Maquina1.Agua").Value Else MsgBox("O valor digitado para à gua à invã lido,"& _ "pois este item possui restriã ões!") If Application.GetObject("Dados.Maquina1.Acucar").Value >= 5 and _ Application.GetObject("Dados.Maquina1.Acucar").Value <= 20 then'filtra os valores 3/5
Application.GetObject("Dados.Maquina1.BalaAtual").Value, "Acucar", _ Application.GetObject("Dados.Maquina1.Acucar").Value Else MsgBox("O valor digitado para aã úcar à invã lido,"&_ " pois este item possui restriã ões!") Application.GetObject("Dados.Maquina1.BalaAtual").Value, "Glicose", _ Application.GetObject("Dados.Maquina1.Glicose").Value Application.GetObject("Dados.Maquina1.BalaAtual").Value, "Xarope", _ Application.GetObject("Dados.Maquina1.Xarope").Value IF Screen.Item("ComboBox1").Value = _ Application.GetObject("Dados.Maquina1.BalaAtual").Value then Application.GetObject("Formula1").LoadFormulaValuesQuiet "Maquina1", _ Screen.Item("ComboBox1").Value If Screen.Item("ComboBox1").Value = _ Application.GetObject("Dados.Maquina1.BalaAtual").Value then Application.GetObject("Formula1").LoadFormulaValuesQuiet "Maquina1", _ Screen.Item("ComboBox1").Value Este script tambã m verifica se os valores ajustados para os itens estã o dentro dos limites configurados, mostrando uma mensagem de erro quando estes estiverem fora. Agora jã podemos criar e modificar os valores para as balas. Entretanto, ainda precisamos configurar a aplicaã à o para permitir a exclusã o da bala que selecionarmos. Para isso, vamos configurar um script para o botã o Deletar Seleà à o. Este script requer proteã ões e alguns outros procedimentos para que a bala seja acidentalmente excluã da de todos os locais onde ela estiver selecionada. Portanto, o script serã o seguinte: Sub CommandButton9_Click() VarDel = Screen.Item("ComboBox1").Value if MsgBox ("Deseja deletar a formula de "& VarDel & "?", 4) = 6 then'verifica se deseja deletar a formula indice = Screen.Item("ComboBox1").ListIndex Application.GetObject("Formula1").DeleteValue (Screen.Item("ComboBox1").Value) if Screen.Item("ComboBox2").Value = Screen.Item("ComboBox1").Value then Screen.Item("ComboBox2").Enabled = false Screen.Item("ComboBox2").Value = "" Screen.Item("ComboBox2").Enabled = true Application.GetObject("Dados.Maquina2.BalaAtual").Value = "" Application.GetObject("Dados.Maquina2.Acucar").Value = 0 Application.GetObject("Dados.Maquina2.Glicose").Value = 0 Application.GetObject("Dados.Maquina2.Xarope").Value = 0 Application.GetObject("Dados.Maquina2.Agua").Value = 0 4/5
if Screen.Item("ComboBox3").Value = Screen.Item("ComboBox1").Value then Screen.Item("ComboBox3").Enabled = false Screen.Item("ComboBox3").Value = "" Screen.Item("ComboBox3").Enabled = true Application.GetObject("Dados.Maquina3.BalaAtual").Value = "" Application.GetObject("Dados.Maquina3.Acucar").Value = 0 Application.GetObject("Dados.Maquina3.Glicose").Value = 0 Application.GetObject("Dados.Maquina3.Xarope").Value = 0 Application.GetObject("Dados.Maquina3.Agua").Value = 0 Screen.Item("ComboBox1").RemoveItem(indice) Screen.Item("ComboBox1").Enabled = false Screen.Item("ComboBox1").Value = "" Screen.Item("ComboBox1").Enabled = true Application.GetObject("Dados.Maquina1.BalaAtual").Value = "" Application.GetObject("Dados.Maquina1.Acucar").Value = 0 Application.GetObject("Dados.Maquina1.Glicose").Value = 0 Application.GetObject("Dados.Maquina1.Xarope").Value = 0 Application.GetObject("Dados.Maquina1.Agua").Value = 0 Screen.Item("ComboBox2").RemoveItem(indice) Screen.Item("ComboBox3").RemoveItem(indice) Note que o script procura e apaga o item selecionado da tabela do banco de dados, e entã o configura todos os valores como 0 para entã o remover o item selecionado de todos os ComboBox. Este script deve ser seguido como padrã o para os outros dois botãµes de remoã à o. Agora podemos executar o domã nio e fazer os testes de funcionamento de todos os recursos da aplicaã à o. 3) Consideraà ões finais Esta aplicaã à o nã o visa mostrar a melhor maneira de se configurar a aplicaã à o, mas sim uma das maneiras de utilizaã à o de fã³rmulas com o maior nãºmero de recursos sem a utilizaã à o das ferramentas prontas do mã³dulo de fã³rmulas. Tambà m procuramos mostrar a atualizaã à o dos dados da fã³rmula utilizando uma outra ferramenta do E3 muito útil para a busca de dados nas tabelas de bancos de dados que à o E3Query, a consulta do E3. Toda e qualquer dãºvida referente a fã³rmulas ou, especificamente, a esta aplicaã à o, podem ser esclarecidas com o suporte tã cnico da Elipse Software. http://kb.elipse.com.br/pt-br/questions/35/ 5/5