Esses dias precisei criar um sub-report para um determinado relatório que estava desenvolvendo, como já havia passado por um projeto onde vi alguns relatórios feitos dessa maneira fui atrás para saber como funciona e como fazer, não achei nenhuma referência na web além do MSDN Library e por isso estou escrevendo esse novo post.
Os sub-reports são relatórios que o usuário abre clicando em um item relacionado no relatório principal abrindo um detalhamento do registro.
Para exemplificar vou criar algo bem prático e simples que é o relatório baseado em Diários.
Criei uma query simples apenas com a LedgerJournalTable, ordenado pelo JournalNum e uma query com a LedgerJournalTrans ordenado pelo AccountNum:
Em seguida no Visual Studio criei um novo projeto em C# com o template Dynamics AX Reporting Project, renomeei o projeto para AeDX_SubReport.
Utilizei um layout padrão que existe no AX, para isso precisamos fazer o seguinte:
- No menu File > Add > Existing Project from Dynamics AX.
- Uma nova janela abrirá com os Report Library que existem na AOT.
- Vamos selecionar Shared Library.
- No Solution Explorer, vamos clicar com o botão direito no projeto AeDX_SubReport e selecionar AddReference.
- Na tab Projects, vamos selecionar o projeto Shared Library, clicar em Add e depois em OK.
Em seguida vamos criar nossos relatórios: um relatório de nível superior e um relatório de detalhamento. O relatório superior irá conter uma lista com todos os diários da tabela LedgerJournalTable. E o relatório de detalhamento sera um relatório mais detalhado que irá exibir as informações das linhas dos diários selecionado no relatório de nível superior. Vamos adicionar um parâmetro e um filtro para o relatório de detalhamento. O filtro vai filtrar os dados no relatório de análise com base no valor do parâmetro.
Para criar o relatório de nível superior:
- Na Solution Explorer no projeto AeDX_SubReport vamos renomear o relatório Report1.moxl para LedgerJournalTable.moxl.
- Vamos adicionar um novo Dataset.
- Dê um duplo clique e vamos selecionar a nossa query AeDX_LedgerJournalTable e os campos que iremos utilizar, nesse exemplo vou selecionar os campos JournalNum, JournalName, JournalTotalCredit, JournalTotalDebit.
- Selecione o Dataset e clique com o botão direto e vá em Properties e vamos alterar a propriedade Name para: LedgerJournalTable.
- Agora vamos gerar o design do nosso relatório arrastando nosso Dataset para o nó Design, o design automaticamente é nomeado AutoDesign1.
- Selecione o nó AutoDesign1, clique com o botão direito e selecione Properties.
- Na propriedade LayoutTemplate vamos selecionar ReportLayoutStyleTemplate e na propriedade Title vamos alterar para Diários.
- Agora vamos expandir o nó AutoDesign1 e selecionar o nó table LedgerJournalTableTable e em Properties, defina o modelo Style Template para TableStyleTemplate e alterar para LedgerJournalTable a propriedade Title.
Para criar o relatório de detalhamento:
- Na Solution Explorer vamos clicar com o botão direito no projeto AeDX_SubReport > Add > New Item.
- Vamos selecionar Report e renomeá-lo para LedgerJournalTrans.moxl e clicar em Add.
- Vamos adicionar um novo Dataset.
- Dê um duplo clique e vamos selecionar a nossa query AeDX_LedgerJournalTrans e os campos que iremos utilizar, nesse exemplo vou selecionar os campos JournalNum, AccountNum, BankAccountId, AmountCurCredit, AmountCurDebit.
- Selecione o Dataset e clique com o botão direto e vá em Properties e vamos alterar a propriedade Name para: LedgerJournalTrans e a propriedade Default Layout para TopDownList.
- Agora vamos gerar o design do nosso relatório arrastando nosso Dataset para o nó Design, o design automaticamente é nomeado AutoDesign1.
- Selecione o nó AutoDesign1, clique com o botão direito e selecione Properties.
- Na propriedade LayoutTemplate vamos selecionar ReportLayoutStyleTemplate e na propriedade Title vamos alterar para Linhas do Diário.
- Agora vamos expandir o nó AutoDesign1 e selecionar o nó table LedgerJournalTransList e em Properties, defina o modelo Style Template para ListStyleTemplate e alterar para LedgerJournalTrans a propriedade Title.
Para criar o parâmetro que será usado para transmitir os dados para o relatório de detalhamento:
- No relatório LedgerJournalTrans.moxl selecione o nó Parameters e clique com o botão direito e Add Parameter.
- Selecione o parâmetro criado e clique com o botão direito em Propriedades altere as propriedades Data Type para System.String, Name para JournalNum, e Prompt String para Número do Diário:.
Para definir um filtro para o relatório de detalhamento:
- Vamos expandir o nó Design em seguida expandir o nó LedgerJournalTransList e adicionar um novo filtro clicando com o botão direito sobre Filter > Add Filter.
- Selecione o novo filtro e com o botão direito selecione Properties e especifique nas propriedades Expression =Fields!JournalNum.Value, Name para JornalNum, Operator para Equals e na propriedade Value =Parameters!JournalNum.Value.
Adicionando ao relatório Drill Through Action:
Agora que criamos o relatório de nível superior e o relatório de detalhamento, vamos adicionar uma ação drill through, através de uma ação para ligar os dois relatórios. Uma ação drill through é definida sobre o relatório de nível superior.
Para adicionar a ação drill through:
- Na Solution Explorer vamos dar um duplo clique no relatório LedgerJournalTable.moxl.
- Vamos expandir o nó Designs, expandir o nó AutoDesign1, expandir o nó LedgerJournalTable e expandir o nó Data.
- Vamos selecionar o campo JournalNum e clicar com o botão direito Add > Report Drill Through Action.
- Selecione o nó criado e clique com o botão direito em Properties.
- Na propriedade ReportDesign clique no botão (…) selecione o relatório de detalhamento (LedgerJournalTrans) e selecione o design AutoDesing1 e em seguida clique em OK.
- Selecione o parâmetro JournalNum e especifique na propriedade Value =Fields!JournalNum.Value.
- Selecione o parâmetro AX_CompanyName e especifique na propriedade Value =Parameters! AX_CompanyName.Value.
Essa é a visão dos relatórios de nível superior e detalhamento:
Para visualizarmos o relatório de detalhamento:
- Dê um duplo clique no relatório LedgerJournal.moxl clique com o botão direito no AutoDesign1 > Preview. O relatório é exibido com todos os diários criados.
- Clique no número do diário e o relatório de detalhamento é exibido. O relatório de detalhamento exibe os detalhes do diário selecionado.
O resultado é o seguinte:
Diário (Relatório de Nível Superior) |
Quando clico no Journal Num 000002_008:
Linhas do Diário (Relatório Detalhamento) |
PS. Deixo uma dica, no momento em que estiver criando a query aproveite para criar o range ao invés de criá-lo no Visual Studio pois melhora e muito a performance, pois no momento em que executa a query ele retorna os resultados filtrados.
[]'s
Alexssander