É possível desenhar relatórios num editor em separado, gravá-los a um arquivo .RDL e depois importar diretamente no KRATOM o seu conteúdo para geração final da aplicação. O KRATOM ao sincronizar o conteúdo do código API também sincroniza os relatórios de origem das respectivas pastas.
O RdlDesigner.exe (FyiReporting Designer) é um editor especial para os relatórios que serão exportados para o KRATOM, ele vem como parte da distribuição padrão do ProtoBase e serve para criar todos os relatórios da aplicação.
Para adicionar campos de totais ou de média ao relatório:
Observação importante: A filtragem será executada localmente (no PC do usuário), ponderar o trade-off entre performance x facilidades.
Entre em Data / DataSources e adicione um DataSource de qualquer nome, depois no campo Connection string digite os dados corretos para poder acessar a base de dados. A string correta é a seguinte:
Após digitar a string, clique no botão Test Connection para ver se a conexão foi feita corretamente.
Observação: Este procedimento deve ser feito toda a vez que se quiser acessar uma base para poder formatar um relatório.
Tag: ConnectionString, {?ConnectionString}
Após o relatório estar finalizado em testes e design deve-se trocar o conteúdo de Connection string para a variável que aponta para a string de conexão da aplicação , a janela de DataSources ficará desta forma:
Após fazer isso o relatório estará pronto para ser definitivamente importado pelo KRATOS e usado pela aplicação KRATOM.
Para criar um relatório 1-N:
Para passar parâmetros para um relatório contido na tupla 2622 e executá-lo use o seguinte código.
CoreApp.RepParametros p = new CoreApp.RepParametros();
int IdProduto = CoreApp.ParamManager.Instance().GetParamInteiro(2617);
if (IdProduto > 0)
{
p.AdParam("IdProduto", IdProduto);
CoreApp.RepManager.Instance().GerarEAbrirRelatorio(2622, p);
}
else
throw new Exception(DefMessages.errNecSelProdGerEstoq);
Obs 1. O relatório tem um parâmetro IdProduto requerido do tipo Inteiro que será usado para o Query interno. Obs 2. O Relatório .rdl deve estar importado no KRATOS e já acondicionado na base de execução.
Às vezes a complexidade de Querys e variações de relatórios resultantes podem nos obrigar a criar vários relatórios .RDL o que acaba sendo trabalhoso. Uma alternativa é via C# gerar um DataTable e passar para o gerador do relatório, substituindo a Query interna do relatório pela alternativa. Desta forma você só passa parâmetros (caso necessários) para o relatório que não alimentem diretamente as Queries, pois elas estarão sendo supridas de outra forma via Datatable. O resultado é que um único modelo .RDL pode-se emitir um relatório filtrado de infinitas formas, preservando a formatação. Ex.:
DataTable dt = bo.GetLctosContaCxMov( CoreApp.Global.gl_IDEMP, IdConta, DataIni, DataFin);
CoreApp.RepManager.Instance().GerarEAbrirRelatorio(idTuplaRelatorio, p, dt , "ExtratoContaCaixa" ); <<--- ExtratoContaCaixa é o nome do DATASET dentro do relatório para ser substituido.
public DataTable GetLctosContaCxMov(int gl_IDEMP, int idConta, DateTime dataIni, DateTime dataFin)
{
var dbc = CoreApp.DBdirect.DBdirectCore.Instance().NovaConexao(true);
try
{
CoreApp.DBdirect.SelecaoComplexa sc = new CoreApp.DBdirect.SelecaoComplexa(dbc, 3014);
sc.TipoDataFill = TipoDataFill.FillDataTable;
sc.SetParamInt("@EMP", CoreApp.Global.gl_IDEMP);
sc.SetParamInt("@IDCONTA", idConta);
sc.SetParamLogico("@ATIVO", true);
sc.SetParamData("@dataini", dataIni);
sc.SetParamData("@datafin", dataFin);
sc.Exec();
return sc.GetDataTable();
}
finally
{
dbc.Close();
}
}
Dados adicionais: System.NullReferenceException Message=Referência de objeto não definida para uma instância de um objeto. Source=RdlEngine StackTrace: fyiReporting.RDL.RenderBase.RunPages(Pages pgs)
Motivo: Um Parâmetro string passado como null ou em branco pode disparar este erro.
Resolução: Setar o ALLOW BLANK na configuração do parâmetro dentro do editor CASO A STRING POSSA SER PASSADA SEM CONTEÚDO.