Executar script de dentro de outro script


(Kelvin Ângelus) #1

Bom dia. É possível chamar um script de dentro de outro script?
Preciso dar um pulso em uma variável de reset ao clicar ‘sim’ em um ‘MsgBox’. Ao retornar o valor 6 no MsgBox eu gostaria de atribuir true para a variável e logo em seguida false. Quando fiz isso de dentro do mesmo script ora funciona, ora não, devido à velocidade de execução do script. Pensei em criar dois picks de alterar valor e chamá-los em sequência a depender do valor retornado do MsgBox.
O ideal seria atribuir scripts aos botões do MsgBox, porém não sei se isso é possível também.

Muito obrigado.


(Luiz Fernando Freire dos Reis) #2

@kelvin, boa tarde.

Talvez um espaço de tempo entre os comandos resolva. Se for o caso, este artigo poderá lhe ajudar: https://kb.elipse.com.br/kb28712-criando-botao-de-pulso-com-pergunta-de-confirmacao/

Sds.


(Kelvin Ângelus) #3

Muito obrigado, Fernando. Isso funcionou. Porém desse jeito eu terei que criar um tag contador para cada botão, sendo que terei vários botões. Eu estou tentando fazer de uma maneira que utilize somente um tag contador e um tag interno para salvar o caminho de cada tag externo, para que o pulso seja dado somente nele. Eu criei o seguinte script no click de um botão:

Sub CommandButton1_Click()
dim reset, caminho
reset = MsgBox = (“Deseja zerar o contador de sacos?”, 68, “Atenção!”)
If reset = 6 Then
Application.GetObject(“Dados.Pulso”).Enable = true
set caminho = Application.GetObject(“DriverUA1.Assinatura1.UN63.[BL_CONFERENCIA].RESET_CONT”) 'RESET_CONT é um tag externo
caminho.Value = true
Application.GetObject(“Dados.Ref_pulso”).Value = caminho 'Ref_pulso é um tag interno
End If
End Sub

E criei o seguinte script no evento OnPreset() do tag contador:
Sub Pulso_OnPreset()
Parent.Item(“Ref_Pulso”).Value = false '& Parent.Item(“Ref_Pulso”).Value = false dá erro de sintaxe
End Sub


(Luiz Fernando Freire dos Reis) #4

@kelvin,

Certo, entendido. O que me preocupa na forma que fez é ter que realizar pulsos seguidos, pois pegará o caminho do último clicado.

É uma opção criar um objeto de biblioteca para isso, pois trabalhará de forma independente.

Sds.


(Kelvin Ângelus) #5

Bom dia, Luiz Fernando.

Para cada botão eu vou passar o caminho do tag externo correspondente. Você sabe o que está errado nos scripts acima? Como uso o operador ‘&’? Não vi uma explicação nos manuais.


(Luiz Fernando Freire dos Reis) #6

@kelvin , bom dia.

Sim, mas se está utilizando o mesmo tag interno para receber o caminho da tag de qualquer botão que clicar, quando ocorrer o OnPreset, apenas o último que foi clicado será executado.
Entretanto, se isto for uma possibilidade remota, ignorar o aviso.


Tem alguns erros:

  1. O MsgBox:

O correto é:
reset = MsgBox ("Deseja zerar o contador de sacos?", 68, "Atenção!")

  1. O nome da propriedade é Enabled:

O correto é:
Application.GetObject("Dados.Pulso").Enabled = true

  1. Quando atribuir valores a tags de comunicação, utilizar Write ou WriteEX ao invés do Value.

caminho.WriteEx True

  1. Para pegar o caminho, deve-se utilizar o PathName

O correto é:
Application.GetObject("Dados.Ref_pulso").Value = caminho.PathName

  1. No script do TagContador não há referência ao tag de comunicação.

O correto é:
Application.GetObject(Parent.Item("Ref_Pulso").Value).WriteEx False

  1. Após realizar o Preset, é necessário retornar o tag Pulso para o estágio inicial. Passa a propriedade Enabled para False:

Application.GetObject(Parent.Item("Ref_Pulso").Value).WriteEx False
Enabled = False


O ‘&’ serve para concatenar variáveis, geralmente strings (conforme este artigo). Exemplo:

For i=0 to 3
   MsgBox "Número: "&i
Next

Porém, no script que apresentou, não parece ter usabilidade.

Sds.


(Kelvin Ângelus) #7

Muito obrigado, Luiz Fernando. Funcionou perfeitamente!