ACESSAR FORMULAFIELD EM SUBRELATORIO CRYSTAL REPOR

LUIS.HERRERA 03/11/2015 15:12:37
#453359
Boa tarde!
Já procurei tudo no google, mas não consigo encontrar a solução.

Tenho alguns relatórios Crystal 10.5 (VS 2008 com C#) que possuem subrelatórios. [txt-color=#0000f0](( Ok ))[/txt-color].

Porém preciso trocar os textos exibidos nas legendas de alguns campos no subrelatório e não consigo. Para exibir as legendas estou usando FormulaFields, pois elas são alteradas dinamicamente.

No relatório principal funciona fácil. Faço assim:

cr.DataDefinition.FormulaFields[[Ô]NomeMeuCampo[Ô]].Text = [Ô][ô]Meu texto para exibir[ô][Ô];


Porém ao tentar acessar os campos dentro do subrelatório não funciona.
Não dá erro na compilação, mas em runtime gera, dependendo do código que uso, um destes 2 erros:
[Ô]Índice não é válido[Ô]
OU
[Ô]Objeto não definido para uma instância de um objeto[Ô].

Tentativas:

1) cr.Subreports[[Ô]Subreport3[Ô]].DataDefinition.FormulaFields[[Ô]NomeMeuCampo[Ô]].Text = [Ô][ô]Meu texto para exibir[ô][Ô];
ou
2) cr.Subreports[[Ô]DocDepto.rpt[Ô]].DataDefinition.FormulaFields[[Ô]NomeMeuCampo[Ô]].Text = [Ô][ô]Meu texto para exibir[ô][Ô];

3) ReportDocument mySubReportDepto = cr.Subreports[[Ô]DocDepto.rpt[Ô]];
mySubReportDepto.DataDefinition.FormulaFields[[Ô]TituloEmpresa[Ô]].Text = [Ô][ô]Meu texto para exibir[ô][Ô];




cr.SetDataSource(myDataReaderDados); //Passa dados ao relatório
cr.Subreports[[Ô]DocNorma.rpt[Ô]].SetDataSource(listaNormas); //Passa dados subreport2
cr.Subreports[[Ô]DocDepto.rpt[Ô]].SetDataSource(listaDepto); //Passa dados subreport3
crystalReportViewer1.ReportSource = cr;
crystalReportViewer1.Show();


Nenhuma das 03 funcionam.

Nota: Os relatórios funcionam perfeitamente com os dados do banco, Só não consigo trocar o texto nas legendas dos subrelatórios.

Não sei se há relação, mas a estrutura dos relatórios ficou assim:

Relatório principal
DocFolhaRosto cr = new DocFolhaRosto();

Section1 (Report Header)
Section2 (Page Header)
Section3 (Details a)
Subrelatório Normas (Name = Subreport2)
DetailSection4 (Details b)
Subrelatório Departamentos (Name = Subreport3)
DetailSection2 (Details c)
Legendas sem vínculo com dados (assinaturas)
Section4 (Report Footer)
Section5 (Page Footer)


O Subrelatório que estou tentando acessar é o Subreport3, mas terei de fazer o mesmo para o 2 também.
A estrutura deste subreport está assim:

Section1 (Report Header)
Section2 (Page Header)
GroupHeaderSection1

Aqui tenho as FormulasFields que preciso acessar: TituloEmpresa; TituloDepartamento; etc...

GroupFooterSection1
Section4 (Report Footer)
Section5 (Page Footer)


Nota: Não uso campo parâmetro, pode ser FormulaField ou TextField, pois o que preciso é só trocar o texto exibido nesse campo que não tem nenhuma relação com os valores do banco de dados.

Alguém tem ideia de onde estou errando?

LUIS.HERRERA 04/11/2015 08:46:04
#453396
Bom dia, depois de perder 03 dias pesquisando e testando, consegui achar a solução para passagem de valores do relatório principal para o subrelatório.

O conceito é usar variáveis compartilhadas do CR.
No relatório principal crie uma variável com nome PassarValor e dentro o código abaixo:
WhilePrintingRecords;
shared stringVar VariavelCompartilhada := [Ô]Meu Texto a ser exibido aqui[Ô]


Agora no subrelatório crie a mesma variável, e inclua o código:
WhilePrintingRecords;
Shared StringVar VariavelCompartilhada ;
VariavelCompartilhada


O detalhe para funcionar é que a variável (FormulaField que você criou = PassarValor ) deve obrigatoriamente estar dentro do relatório principal, não apenas declarada. Se não quiser que ela fique visível no relatório principal (impressa), basta incluí-la em alguma seção oculta e pronto.
Tópico encerrado , respostas não são mais permitidas