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

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()
 Set RS = Screen.Item("Consulta1").GetADORecordset()
 For aux = 1 To RS.RecordCount
  AddItem CStr(RS.Fields("Name"))
  RS.MoveNext
 Next
End Sub

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
  Set RS = Screen.Item("Consulta1").GetADORecordset()
  For aux = 1 To RS.RecordCount
   If Value = RS.Fields.Item("Name") then
Application.GetObject("Formula1").LoadFormulaValuesQuiet "Maquina1", Value
Application.GetObject("Dados.Maquina1.BalaAtual").Value = Value 
   Exit Sub
  End If
  RS.MoveNext
 Next
End If
End Sub

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 RS = Screen.Item("Consulta1").GetADORecordset()
Set TagName = Application.GetObject("Dados.Maquina1.BalaAtual")
SetFocus()
For aux = 1 To RS.RecordCount
 If Screen.Item("ComboBox1").Value = RS.Fields("Name") Then
 igual = 1
 MsgBox "Receita ja existe!"
 End If
 RS.MoveNext
Next

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
End If
End Sub



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("Formula1").SetValueData _
 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!")
 End If
 
 If Application.GetObject("Dados.Maquina1.Acucar").Value >= 5 and _
 Application.GetObject("Dados.Maquina1.Acucar").Value <= 20 then'filtra os valores
 Application.GetObject("Formula1").SetValueData _
 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!")
 End If
 
 Application.GetObject("Formula1").SetValueData _
 Application.GetObject("Dados.Maquina1.BalaAtual").Value, "Glicose", _
 Application.GetObject("Dados.Maquina1.Glicose").Value
 Application.GetObject("Formula1").SetValueData _
 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
 End If
 If Screen.Item("ComboBox1").Value = _
 Application.GetObject("Dados.Maquina1.BalaAtual").Value then
 Application.GetObject("Formula1").LoadFormulaValuesQuiet "Maquina1", _
 Screen.Item("ComboBox1").Value
 End If 
End Sub

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
  end if
  
  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
  end if
 
 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)
 end if
End Sub

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.

Print Friendly, PDF & Email

Este artigo foi útil? Was this helpful?

Classificação média - Average rating 0 / 5. Count: 0

Comentários em “Trabalhando com Fórmulas no Elipse E3.

Deixe seu Comentário

Seu endereço de e-mail não será publicado. Campos marcados com asterisco são obrigatórios *