[RESOLVIDO] Impressão de E3Chart no Relatório utilizando Quadros

Saudações.

Segui o KB abaixo para realizar a impressão de um gráfico em um relatório.
Link: http://kb.elipse.com.br/pt-br/questions/4218/Impressão+de+E3Chart.

Só que obtive o seguinte problema:
Error 5800 : Scripting Error.
[ Extended Info:Scripting Error. [ Extended Info:Section : PageHeader , Event : OnBeforePrint , Line number: 4 Description:Chamada de procedimento ou argumento inválido]]

Pelo que pesquisei e testei, isto se deve ao fato de estar utilizando Quadros e não uma simples tela.
Qual caminho que devo utilizar quando utilizo quadro?

Nota: Não consigo fazer upload de imagens pois sou user novo, portanto, não consigo enviar a visualização do erro.

att,
Robson Pontin

Olá Robson,

O nome do Quadro deve ser passado como argumento no método GetFrame().
Por exemplo:

Chart.CopyConfig(Application.GetFrame("nomequadro").Screen.Item("E3Chart1"))

@Robson, complementando a resposta do Kotres, caso não seja possível identificar o nome do quadro, pode-se utilizar um comando similar ao do KB: http://kb.elipse.com.br/pt-br/questions/2011/

No evento Click de um botão na tela onde está o E3Chart, inserir o seguinte script:

Dim FrameName
FrameName = Screen.Frame.Name

MsgBox FrameName

Desta forma aparecerá o nome do Quadro no MsgBox. Este nome será inserido no campo “nomequadro” do script citado acima.

Certo! Funcionou!

Neste caso o script que usei para encontrar o nome/caminho do quadro foi:

Sub CommandButton2_Click()
DIM frameName
frameName = Screen.Frame.Name
MsgBox frameName
End Sub

e retornou o nome do quadro: Inferior

Acrescentei no script do relatório as seguintes declarações:

Sub OnBeforePrint

Set Chart = Report.Sections(“PageHeader”).Controls(“E3Chart1”)
Chart.CopyConfig(Application.GetFrame(“Inferior”).Screen.Item(“E3Chart1”))
Chart.LoadData()

End Sub

Obrigado pela breve ajuda!
Abs

No meu caso retorna o Seguinte erro.
Error 5800 : Scripting Error.
[ Extended Info:Scripting Error. [ Extended Info:Section : PageHeader , Event : OnBeforePrint , Line number: 1 Description:Objeto necessário: ‘Application’]]

e o script é esse:

set ChartTela = Application.GetFrame("Divisor1").Screen.Item("E3Chart1")
set chartfrom = Report.Sections("PageHeader").Controls("E3ChartREL")
chart.CopyConfig(ChartTela)
chart.LoadData()
chart.FitAll

Já pensei que fosse o caminho do objeto na tela, mas não deu certo

Olá @Alex_Aquino,

Observe que no script você criou uma variável chamada “chartfrom”, mas tentou chamá-la usando o nome “chart” nas linhas abaixo.
O script correto é:

set ChartTela = Application.GetFrame(“Divisor1”).Screen.Item(“E3Chart1”)
set chart = Report.Sections(“PageHeader”).Controls(“E3ChartREL”)
chart.CopyConfig(ChartTela)
chart.LoadData()
chart.FitAll

1 Like

:cry: continua [ Extended Info:Scripting Error. [ Extended Info:Section : PageHeader , Event : OnBeforePrint , Line number: 1 Description:Objeto necessário: ‘Application’]]

Fiz o script pra identificar o quadro, estava correto. e agora retirei o quadro não estou mais chamando as telas dentro dele. Só tenho duas telas na aplicação.

set ChartTela = Application.GetFrame().Screen.Item(“E3Chart1”)
set chart = Report.Sections(“PageHeader”).Controls(“E3ChartREL”)
chart.CopyConfig(ChartTela)
chart.LoadData()
chart.FitAll

Olá @Alex_Aquino,

Você pode verificar também se inseriu o objeto E3Chart na seção PageHeader do relatório, e ainda se o nome dos objetos é “E3Chart1” e “E3ChartREL”.
Se ainda não estiver conseguindo imprimir, envie sua aplicação para o email kotres@elipse.com.br. Vou dar uma olhada e te respondo.

Abraços!

Encontrei o problema, pelo menos eu acho. A copia estava sendo realizada a aprtir de uma tela modal. Quando eu mudei pra uma tela comum funcionou.

No meu caso, o erro é esse… Já tentei de tudo e não consigo imprimir o gráfico

Error 5800 : Scripting Error.
[ Extended Info:Scripting Error. [ Extended Info:Section : PageHeader , Event : OnBeforePrint , Line number: 2 Description:O objeto não dá suporte para a propriedade ou método: ‘Application.GetFrame’]]

Oi @Wendhel,

Verifique se o nome do divisor do script é o mesmo do divisor do quadro que está o E3Chart.

Obs:. Letras maiúsculas e minúsculas fazem diferença.

Qualquer dúvida, estou à disposição.

Atenciosamente,
Lucas Angelo

1 Like

Consegui. Muito brigado.

Estou com Um problema parecido, mas não resolve, acho que deve ser pelo motivo que tenho muitas subdivisões no quadro. e no fim tenho 2 quadros com o mesmo nome, segue a imagem abaixo

o e3chart que eu tenho esta no quadro da divisão ComAlarme.Inferior.Area_Central

@Raphael_pecontrol, boa tarde.

Neste caso, sugiro colocar nomes distintos para cada Divisão.

Sds.

No quadro sem alarme, eu alterei o nome da Area_Central, para Area_Central2, para que dessa maneira não tivesse problema e mantive o script da foto mostrado acima, e mesmo assim não deu certo

Tentou este procedimento?

Sds.

1 Like

Resolvido, o erro foi no entendimento do script…
Set Chart = Report.Sections(“PageHeader”).Controls(“E3Chart1”) Nessa linha o E3chart1 se refere ao E3chart criado dentro do relatório
Set ChartTela = Application.GetFrame(“Area_Central”).Screen.Item(“E3Chart2”) nessa linha o E3chart criado dentro da tela na Area_Central, que no meu caso é o E3chart2, quando fiz essa alteração, o código funcionou, Obrigado

Entendido. Obrigado pelo feedback! :v:

1 Like

Boa tarde pessoal!

Tenho uma aplicação que trabalha com duas telas, desta forma possuo os quadros “Sinotico” (Tela da esquerda) e “Sinotico2” (Tela da direita).

Para a navegação das telas, consigo trabalhar normalmente, porém como a tela de gráfico (E3Chart) pode ser aberta em qualquer um dos lados, estou com dificuldade de fazer com que o meu relatório identifique de qual quadro está sendo impresso o gráfico.

Tentei incluir no script OnReportStart do Relatório, os comandos abaixo, porém está sendo reportada a mensagem - Error 5800 : Scripting Error.
[ Extended Info:Scripting Error. [ Extended Info:Section : ReportHeader , Event : OnBeforePrint , Line number: 2 Description:Objeto necessário: ‘Screen’]]

Sub OnBeforePrint
Dim FrameName
FrameName = Screen.Frame.Name
If FrameName = “Sinotico” Then
Set Chart = Report.Sections(“ReportHeader”).Controls(“E3chart1”)
Chart.CopyConfig(Application.GetFrame(“Sinotico”).Screen.Item(“E3chart1”))
Chart.LoadData()
Else If FrameName = “Sinotico2” Then
Set Chart = Report.Sections(“ReportHeader”).Controls(“E3chart1”)
Chart.CopyConfig(Application.GetFrame(“Sinotico2”).Screen.Item(“E3chart1”))
Chart.LoadData()
End If
End If
End Sub

Alguém tem alguma ideia de como fazer o relatório identificar qual o quadro correto?

Att.

Boa tarde Euler,

Uma sugestão seria simplificar essa lógica, e criar um tag interno no Viewer para receber o nome do quadro.
Desta forma ao executar o script para gerar o relatório, o nome do frame seria atribuido ao tag:

Application.Item("NomeQuadro").Value = Screen.Frame.Name

Já o script do relatório poderia ser o seguinte:

set tag = Application.Item("NomeQuadro")
set chart = Report.Sections("ReportHeader").Controls("E3Chart1")
set chartTela = Application.GetFrame(tag.Value).Screen.Item("E3Chart1")
chart.CopyConfig(chartTela)
chart.LoadData