Relatório, SetVariableValue Não está Funcionando

Bom Dia;
Estou tendo problemas com o Relatório…

Tenho a seguinte consulta:

SELECT
	r_mov_dsc.descricao,
	relation_22.data_hora,
	relation_22.r_carga_id,
	relation_22.r_mov_dsc_id
FROM
	r_mov_dsc
	INNER JOIN relation_22 ON r_mov_dsc.id = relation_22.r_mov_dsc_id
WHERE
	relation_22.r_carga_id = <%COD_CARGA%>
ORDER BY
	relation_22.data_hora ASC

Em uma tela onde Seleciono a Carga, tenho o Script:

'' Define a Carga para o Relatório
	Set Query = Application.LoadReport("Relatorios.R_Carga").Query()
  	Query.SetVariableValue "COD_CARGA", Value

No Relatório, para testes, digitei um código na Query da consulta do Relatório, executei, e verifiquei o retorno… tudo correto, até mesmo pré visualizando ou pela tela, quando gero o relatório, está efetuando corretamente…

O problema é quando tento definir um código para a consulta, ele não aplica no momento em que o PDF é gerado…

Ex:

  • Na Query, para teste coloquei o código 39…
  • Através do script, mandei Set com valor de 45, ou qualquer outro… até nulo, etc…
  • Todos os PDF’s Gerados saem com o código 39…

Para verificação cheguei a fazer uma alteração,
no Script, adicionei após o SetVarriable… o GetADORecordset()
um MsgBox com o RecordCount

e conforme alterei o código, estava retornando quantidades diferentes de registros…

Assim, verifiquei que a consulta estava recebendo o novo código…

Para maior persistência, cheguei a definir todo o SQL pelo Script, e mesmo assim, no momento da geração do PDF, Sempre com o que tinha ficado na Query…

Um Ultimo teste foi renomear a consulta… eliminando outro script que estaria colocando um código.

@saimond, boa tarde.

Por favor, poderia disponibilizar o script que exporta o relatório para PDF?

Grato.

Segue;

'Verifica e Cria a Pasta
varPastas = Array(“C:”,“C:\Relatorios”, “C:\Relatorios\Carga - [”& codCarga &"]")
For varLoop = 0 To UBound(varPastas)
Set oFSO = CreateObject(“Scripting.FileSystemObject”)
If Not oFSO.FolderExists(varPastas(varLoop)) Then
oFSO.CreateFolder(varPastas(varLoop))
End If
Next

‘’ Controle para o Relatorio
arrayRelatoriosNomes = Array(“R_Carga”,“R_Carga_Dados_KOS_1”,“R_Carga_Dados_KOS_2”,“R_Carga_Dados_FCA”)
arrayRelatoriosDescricao = Array(""," - Dados Forno Austenitização, Câmara e Atmosfera"," - Dados Forno Austenitização, Óleo e Vazão de Metanol"," - Dados Forno Revenimento")
For forRelatorios = 0 To 3
‘’ Define o Relatório
Set Relatorio = Application.LoadReport(“Relatorios.” & arrayRelatoriosNomes(forRelatorios))

  	'' Define o Nome para o Relatório
  		NomeRelatorio = "Carga " & codCarga & arrayRelatoriosDescricao(forRelatorios)
  	
  	'' Gera o Relatório
  		Relatorio.Export "PDF", varPastas(UBound(varPastas)) & NomeRelatorio & ".pdf"		
  Next

'Pergunta se quer abrir a pasta após finalizar
If MsgBox(“Abrir pasta de Relatórios ?”, 4+32)=6 Then
Set Sh = CreateObject(“Shell.Application”)
Sh.Open varPastas(UBound(varPastas))
Set Sh = Nothing
End If

Sendo que no relatório R_Carga, que apresenta o problema relatado, Defino a Variável em outro local, tenho um ComboBox pra listar a selecionar a carga, e quando seleciona, atualiza Brower’s com a carga selecionada.

@saimond,

Obrigado pela resposta.

Faltou colocar o filtro no script de exportação também. Sugestão a inserir no script (logo após o "Define o Relatório"):

 '' Define a Consulta e o Filtro
      Set Consulta = Relatorio.Item("Consulta1")
      Consulta.SetVariableValue "COD_CARGA", Abs(codCarga)

Obs.: Utilizei o codCarga supondo que ele traga o valor numérico do filtro que precisa.
Obs.2: Utilizei Consulta1 como a consulta utilizada no Relatorio ‘R_Carga’.

Por favor, testar.

Sds.

Fiz ambas alterações e não teve mudança…

  • Alterando para item Consulta1;
  • Utilizando o Abs();
  • Colocando acima do código que gera o PDF;

Após estas 3 alterações, também adicionai outro teste…

  • Adicionei uma Busca na Consulta para Retorno do ID Setado
  	Set QueryDados = Query.GetADORecordset()
  	MsgBox QueryDados.Fields.Item("R_CARGA_ID").Value

No MsgBox Retorna o Valor que utilizei para o Set…
Mas, no PDF retorna nulo “Deixei na Query da consulta Nulo”

Para uma correção temporária, no relatório, utilizo o script para pegar algumas informações da tela…
É possível através do Script do Relatório definir a variável na consulta ?

Sim. Mudando o SQL da Consulta do Relatório.

Este erro ocorre apenas no relatório R_Carga?
Tentou inserir um valor de código no filtro que esteja funcionando sem utilizar objetos de tela?
Ex.: Consulta.SetVariableValue “COD_CARGA”, 2

Tenho apenas este relatório que precisa desta alteração…
Demais são Gráficos, com CopyConfig…

Ex.: Consulta.SetVariableValue “COD_CARGA”, 2

  • Não Funcionou

Segue arquivo do Relatório
*https://files.fm/u/bfjhgaf6

@saimond,

Só o arquivo RPX, neste caso, não ajudaria. Se possível, disponibilizar aplicação (pode enviar o link para fernando@elipse.com.br).

Sds.

Em Conversa com o Fernando, foi verificado o seguinte:

  • A Única maneira que funcionou foi utilizando o SetVariable junto com o Script que gerava o Relatório.
  • Sempre que mandava o SetVariable fora desta condição, ele gerava o PDF com o valor da Query.
  • Então entendo que sempre que tem o comando LoadReport, ele carrega os valores padrão…

Estava utilizando o SetVariable em outro script, onde atualizava gráficos, browsers, etc…
E Separado, após ter definido o SetVariable “Em outro botão / Script”, tinha o script para gerar o PDF.

Onde que percebi, que o LoadReport, provavelmente pega as configurações padrões “No caso o valor da variável que utilizei no query”, Colocando o SetVariable junto com o Script do PDF, resolveu o problema.

1 Like

Bom dia, desculpe reviver este tópico porém me encontrava com o mesmo problema e a solução não estava explícita.

A forma como encontrei para gerar o relatório utilizando um filtro definido foi a seguinte:

Set Report = Application.LoadReport("rel_ficha_prod")
Report.Item("Consulta1").SetVariableValue "COD", Screen.Item("codaux").Value
Report.Item("Consulta1").Execute(true)
Report.PrintPreview