[resolvido] Filtrar relatório com a Combo Dinâmica

Moderador: Avelino Sampaio

rafaelbatistadasilva
Mensagens: 19
Registrado em: 20 Jul 2016, 14:13

[resolvido] Filtrar relatório com a Combo Dinâmica

Mensagempor rafaelbatistadasilva » 23 Jul 2016, 20:55

Olá a todos, gostaria de saber o seguinte, o montaribbon tem por padrão a "tblComboDinamica" com um campo [idx] que armazena um valor constante e sequencial para identificar o relatório a ser aberto. Meu BD armazena dados de livros e minha "ComboDinamica" é usada para especificar os autores dos livros. Ao invés de criar um relatório para cada autor, tem como, por meio do Campo [idx], abrir um mesmo relatório, porem com filtro das Obras que correspondem ao respectivo autor (identificado pelo [idx])?

Por exemplo:

[idx]---[Autores]---[NomeRelatorio]
[ 0 ]---[ João ]---[ RLT_JOAO ]
[ 1 ]---[ Pedro ]---[ RLT_PEDRO ]
[ 2 ]---[ Carlo ]---[ RLT_ CARLOS ]
[ 3 ]---[ José ]---[ RLT_JOSE ]

Quero usar um Filtro em apenas um relatório com o campo a rotina (Ao clicar) abrir o relatório com a condição "idx="& idx a fim de especificar no Relatório as Obras do autor relacionado ao registro.

Grato pessoal.

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.


Avatar do usuário
Avelino Sampaio
Mensagens: 1875
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Filtrar relatório com a Combo Dinâmica

Mensagempor Avelino Sampaio » 23 Jul 2016, 22:14

Rafael,

pelo que eu entendi, sua combobox dinãmica seria formada apenas pelos nomes dos autores.

[idx]---[Autores]
[ 0 ]---[ João ]
[ 1 ]---[ Pedro ]
[ 2 ]---[ Carlo ]
[ 3 ]---[ José ]

Na função fncOnChangeCbx() vc pode chamar pelo relatório, filtrando pelo autor. Exemplo:

Código:
Sub fncOnChangeCbx(control As IRibbonControl, strText As String)
'strText possui o valor digitado ou selecionado da combo.
Select Case control.Id
Case "cbx1" 'Nome da Combobox dinâmica
docmd.OpenReport "NomeDoRelatório",acViewPreview ,,"NomeCampoAutor = '" & strText & "'"
'dispara os gets da combo dinâmica, revalidando todos os campos da combo.
objRibbon.InvalidateControl ("cbx1")
End Select
End Sub


Aguardamos
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

rafaelbatistadasilva
Mensagens: 19
Registrado em: 20 Jul 2016, 14:13

Re: Filtrar relatório com a Combo Dinâmica

Mensagempor rafaelbatistadasilva » 25 Jul 2016, 13:48

Olá Avelino, obrigado por responder. Dá um erro que não consegue localizar a função fncOnChange. Desculpa a ignorância.
Olha só, no módulo Dynamicmenu deixei assim:
Código:
Sub fncGetContent(control As IRibbonControl, ByRef XMLString)
Dim lngDin As Long
Dim intCont As Integer
Dim strXml As String
'Observe abaixo, que os botões, inseridos no menu, são criados em tempo de execução.
intCont = Nz(DCount("*", "TBL_AUTORES"), 0)
strXml = "<menu xmlns='http://schemas.microsoft.com/office/2006/01/customui'>"
For lngDin = 0 To intCont - 1
strXml = strXml & "<button id='btDyna" & lngDin
strXml = strXml & "' label='" & DLookup("AUTOR", "TBL_AUTORES", "idx =" & lngDin)
strXml = strXml & "' imageMso='ViewsReportView' "
strXml = strXml & "onAction='=fncOnChange' />" 'fncAbrirObjeto(""" & DLookup("NOME_RELATORIO", "TBL_AUTORES", "idx =" & lngDin) & """,2)' />"
Next
XMLString = strXml & " </menu>"
End Sub

Na função onAction chamei a fncOnChange que esta no módulo mod_ribbon.
No mod_ribbon está assim:
Código:
Sub fncOnChange(control As IRibbonControl, strText As String)
On Error GoTo trataerro
'strText possui o valor digitado ou selecionado da combo.
Select Case control.ID
Case "dmn1" 'Nome da Combobox dinâmica
DoCmd.OpenReport "RLTJROC", acViewPreview, , "AUTOR = '" & strText & "'"
'dispara os gets da combo dinâmica, revalidando todos os campos da combo.
objRibbon.InvalidateControl ("dmn1") 'Nome do menu
Case Else
MsgBox "Valor do campo: " & strText, vbInformation, "Aviso"
End Select
sair:
Exit Sub
trataerro:
MsgBox "Erro: " & Err.Number & vbCrLf & Err.Description, vbCritical, "Aviso", Err.HelpFile, Err.HelpContext
Resume sair:
End Sub

rafaelbatistadasilva
Mensagens: 19
Registrado em: 20 Jul 2016, 14:13

Re: Filtrar relatório com a Combo Dinâmica

Mensagempor rafaelbatistadasilva » 28 Jul 2016, 02:14

Não gostaria de importunar, mas alguém poderia me ajudar a descobrir uma solução para esse problema?

Obrigado pessoal pela a ajuda até então recebida.

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.


Avatar do usuário
Avelino Sampaio
Mensagens: 1875
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Filtrar relatório com a Combo Dinâmica

Mensagempor Avelino Sampaio » 28 Jul 2016, 13:41

Rafael,

imaginel que se tratava de combobox dinâmica. Como se trata de botões no menu dinâmico, sugiro retornar com a função fncAbrirObjeto().

Código:
Sub fncGetContent(control As IRibbonControl, ByRef XMLString)
Dim lngDin As Long
Dim intCont As Integer
Dim strXml As String
dim strAutor as String
'Observe abaixo, que os botões, inseridos no menu, são criados em tempo de execução.
intCont = Nz(DCount("*", "TBL_AUTORES"), 0)
strXml = "<menu xmlns='http://schemas.microsoft.com/office/2006/01/customui'>"
For lngDin = 0 To intCont - 1
strAutor = DLookup("AUTOR", "TBL_AUTORES", "idx =" & lngDin)
strXml = strXml & "<button id='btDyna" & lngDin
strXml = strXml & "' label='" & strAutor
strXml = strXml & "' imageMso='ViewsReportView' "
strAutor = "autor = '" & strAutor & "'"
strXml = strXml & "onAction='=fncAbrirObjeto(""RLTJROC"",2,strAutor)' />"
Next
XMLString = strXml & " </menu>"
End Sub


Altere a função fncAbrirObjeto() conforme abaixo:

Código:
Public Function fncAbrirObjeto(NomeObjeto As String, tipoObjeto As Byte, Optional Filtro as string)
On Error GoTo trataerro

Select Case tipoObjeto
Case 1 'formulário
DoCmd.OpenForm NomeObjeto
Case 2 'relatório
DoCmd.OpenReport NomeObjeto, acViewPreview,,filtro
Case 3 'Consulta
DoCmd.OpenQuery NomeObjeto
End Select

sair:
Exit Function
trataerro:
MsgBox "Erro: " & Err.Number & vbCrLf & Err.Description, vbCritical, "Aviso", Err.HelpFile, Err.HelpContext
Resume sair:
End Function


Aguardamos
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

rafaelbatistadasilva
Mensagens: 19
Registrado em: 20 Jul 2016, 14:13

Re: Filtrar relatório com a Combo Dinâmica

Mensagempor rafaelbatistadasilva » 30 Jul 2016, 21:34

Olá Avelino, obrigado pela resposta. Continua dando erro, mas chegou bem mais perto. fiz alguns testes.

Criei um formulário, pra fazer um teste de erro, coloquei um botão para chamar função fncAbrirObjeto, fiz assim:
Código:
Call fncAbrirObjeto("RLTJROC", 2, "AUTOR =" & "'José Roberto de Oliveira Chagas'") 'OBS: filtro com aspas e apóstrofes.
a fncAbrirObjeto funciona tranquilo.

Porem, quando chamo pela função no menu dinâmico aparece o erro abaixo:
Sem título.png

dessa forma descobri que a rotina abaixo não está atribuindo o valor na variável do filtro da fncAbrirObjeto:
Código:
strAutor = "autor = '" & strAutor & "'"
strXml = strXml & "onAction='=fncAbrirObjeto(""RLTJROC"",2,strAutor)' />"

Coloquei aspas duplas no filtro e o relatório abriu porem pedindo para digitar o parâmetro strAutor eu digitei o nome do autor e, só assim filtrou.

segue imagem da função:
COD.png


Avelino, tentei de varias formas abrir o relatório filtrado, coloquei aspas, apóstrofe, escrevi o nome do auto direto no filtro (nessa caso o menu nem abriu). Por gentileza, aguardo ajuda.
Você deve estar registrado e autenticado para ter acesso ao arquivo anexo.

Avatar do usuário
Avelino Sampaio
Mensagens: 1875
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Filtrar relatório com a Combo Dinâmica

Mensagempor Avelino Sampaio » 31 Jul 2016, 07:52

Rafael,

segue um exemplo. Utilizei a propria tabela de autores para montar a lista com o nome dos autores.

Código:
Sub fncGetContent(control As IRibbonControl, ByRef XMLString)
Dim strXml As String
Dim rs As DAO.Recordset
Dim strFiltro As String
'carrega a tabela autores em ordem alfabética
Set rs = CurrentDb.OpenRecordset("SELECT * FROM tblAutores ORDER BY NomeAutor;", 8)
'inicio do menu dinâmico, versão 2010 a 2016. Para a versão 2007 altere para "../2006/01/.."
strXml = "<menu xmlns='http://schemas.microsoft.com/office/2009/07/customui'>"
'cria os botões do menu, um para cada autor
Do While Not rs.EOF
strXml = strXml & "<button id='btDyna" & rs!idAutor
strXml = strXml & "' label='" & rs!nomeAutor
strXml = strXml & "' imageMso='ViewsReportView' "
strFiltro = """=fncAbrirObjeto('rltListaAutores',2,'nomeautor = ''" & rs!nomeAutor & "''')"""
strXml = strXml & "onAction=" & strFiltro & "/>"
rs.MoveNext
Loop
'fecha o recordset e limpa a memória
rs.Close
Set rs = Nothing
'passa a montagem do menu para a ribbon
XMLString = strXml & " </menu>"
End Sub


Aguardamos
Você deve estar registrado e autenticado para ter acesso ao arquivo anexo.
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

rafaelbatistadasilva
Mensagens: 19
Registrado em: 20 Jul 2016, 14:13

Re: Filtrar relatório com a Combo Dinâmica

Mensagempor rafaelbatistadasilva » 31 Jul 2016, 22:03

Avelino, resolveu mano. Muito obrigado mesmo. Esse problema me incentivou a estudar mais sobre filtragem. Preciso aprender muito sobre VBA ainda.

Fiz a adaptação na função que usava e filtrou de boa.

:D :D :D :D :D :D :D :D :D

Não quero deixar por isso, o fórum me ensinou muito sobre access. Avelino, me passa o nr de sua conta bancária, quero corresponder a ajuda recebida.

muito obrigado.

Avatar do usuário
Avelino Sampaio
Mensagens: 1875
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Filtrar relatório com a Combo Dinâmica

Mensagempor Avelino Sampaio » 01 Ago 2016, 07:07

Rafa,

obrigado pelo feedback e sucesso!
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.



Voltar para “Ribbons”

Quem está online

Usuários neste fórum: Nenhum usuário registrado e 2 visitantes