Pergunte aqui
0

Relatórios do Base travam o LibreOffice, como resolver?

perguntadas 2015-05-20 18:16:20 +0200

imagem do gravatar de LuizCarlos18RJ

Oi galera, meu dilema é o seguinte:

Quando eu crio uma consulta e um relatório baseado nela, se eu abri-los clicando direto no objeto, abre, tá tudo ok, mas ao criar macros que abrem o relatório através de um botão por exemplo, se o relatório abrir direto o Libreoffice "trava", ou seja, abre o LibreOffice Write ( é ele que exibe os relatórios do Base ) com tela totalmente em branco e fica assim "ad eternum", notei que tem que "conectar", abrir a consulta em que o relatório se baseia "na mão" para abrir uma conexão antes, para que assim que o relatório for aberto ele possa puxar os dados e abrir normalmente.

Para tentar corrigir isso eu criei nos formulários um controle de tabela ( Grid ) baseado em consultas qe geram esses relatórios e ao clicar no botão imprimir, uso sql dentro da macro para atualizar o grid, para ver se ao fazer essa conexão para atualizar os dados, o relatório abriria normalmente, e a princípio funcionou.

Mas se eu Reiniciar o pc e entrar de novo no Base, abrir o form e clicar direto em imprimir, mesmo ele atualizando o subform com a grid, trava tudo de novo na hora em que o Write é carregado.

ou seja, se eu previamente abrir as conexões as consultas tudo funciona, mas se for a primeira vez que uso o libre trava pq?

segue as macros:

1 - Macro generica para abrir qualquer report ( relatótio )

function getConnectionTC() as variant
getConnectionTC = thisComponent.Drawpage.Forms(0).ActiveConnection
end function

function OpenReport( reportContainer as variant, oConnection as variant, sReportName as string) as variant
Dim aProp(1) As New com.sun.star.beans.PropertyValue
aProp(0).Name = "ActiveConnection"
aProp(0).Value = oConnection
aProp(1).Name = "OpenMode"
aProp(1).Value = "open"
OpenReport=reportContainer.loadComponentFromURL(sReportName,"_blank",0,aProp())
end function

function getReportsTC() as variant
getReportsTC = thisComponent.Parent.getReportDocuments
end function

2 - Macro para abrir forms específicos:

sub OpenForm_frm_menu( oev as variant )

Dim Form1, cons_subtab, oConsulta As Object

Set Form1=Forms("frm_menu")
Set cons_subtab = Form1.Controls("Controle de tabela  1")
oConsulta = ThisDatabaseDocument.DataSource.QueryDefinitions.getByName ("cons_software_falta_licenca")
oConsulta.Command = "SELECT `nome` AS `nome`, `label_original` AS `label_original`, `label_backup` AS `label_backup`, `total_licencas_adquiridas` AS `total_licencas_adquiridas`, `licencas_restantes` AS `licencas_restantes`, `tipo` AS `tipo`, `versao` AS `versao`, `midia` AS `midia`, `fornecedor` AS `fornecedor`, `usuario` AS `usuario`, `proprietario` AS `proprietario`, `documentacao` AS `documentacao`, `plataforma` AS `plataforma`, `aplicabilidade` AS `aplicabilidade`, `manuais` AS `manuais`, `data_criacao` AS `data_criacao`, `data_cadastro` AS `data_cadastro`, `finalidade` AS `finalidade`, `obs` AS `obs` FROM `c06`.`tab_software` AS `tab_software` WHERE `licencas_restantes` < '0' ORDER BY `licencas_restantes` DESC"
Form1.Requery

end sub

3 - Macro para abrir reports específicos:

sub OpenReport_rel_licenca_falta( oEv as variant )
sReportName="rel_licenca_falta" ' Mude aqui o nome do seu Report
OpenReport( getReportsTC, getConnectionTC, sReportName )
end sub

Alguém aki pode me dizer como faço para abrir a conexão com a consulta ( embora já faço isso ), para abrir o relatório sem bug? Só adianta clicando nas consultas nas janelas dos objetos, mas se deixar tudo por macro na primeira vez que usa o LibreOffice Base fica em branco...

Desde já agradeço.

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

1 Resposta

1

respondidas 2015-05-24 19:37:40 +0200

imagem do gravatar de Grafeno

@LuizCarlos18RJ ,

Não consegui reproduzir seu problema no LibreOffice 4.4.3.2 no Linux Ubuntu 14.04.

Por isso, só posso sugerir uma rota alternativa, bem mais direta. A macro abaixo roda a consulta, depois abre o Relatório especificado sem precisar estar vinculada a um Form. Ou seja, vc pode executá-la diretamente no Menu Ferramentas > Macros > Executar macro...:

Sub GerarRelatoriodeConsulta
Dim oDocBD As Object, oCtrlador as Object, oFonteDados As Object
Dim oConsulta As Object, oRelatorios as Object
Dim sSQL As String

    oDocBD = ThisDataBaseDocument

    ' Garantir que controlador estará conectado
    oCtrlador = oDocBD.CurrentController
    If Not oCtrlador.isConnected then oCtrlador.Connect

    ' Instrução sql modificada para a consulta
    sSQL = "INSIRA_SUA_INSTRUÇÃO_SQL_AQUI"

    ' Rodar a Consulta modificada
    oFonteDados = oDocBD.DataSource
    oConsulta = oFonteDados.QueryDefinitions.getByName( "NOME_DA_CONSULTA" )
    oConsulta.Command = sSQL

    ' Abrir o Relatório
    oRelatorios = oDocBD.ReportDocuments
    oRelatorios.getByName("NOME_DO_RELATÓRIO").Open 
End Sub

Atte,
Grafeno

editar assinalar como ofensivo Excluir Link mais
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2015-05-20 18:16:20 +0200

Lidas: 381 vezes

Última atualização: May 24 '15