none
Gerar relatório a partir de um SELECT dinâmico RRS feed

  • Pergunta

  • Eu tenho uns campos de filtro e gostaria de gerar um relatório montando um SELECT dinamicamente, dependendo se os campos de texto ou combos estão com valor ou não para filtro. 

    Eu tentei por meio de uma FUNCTION que criei no BD, porém com a function ou procedure eu já defino todos os parâmetros e meus parâmetros vão depender se tem valor nos campos para filtro. Com View também não serve, pois não aceita parâmetros até onde eu pesquisei.

    O meu ReportViewer precisa ter um ObjectDataSource? Porque se for obrigatório eu tenho que selecionar um método para pegar os dados "SelectMethod" não é? 

    Para exemplificar:

    Tenho uns campos para filtro e um botão para gerar o relatório a partir desses filtros. Só que nem todos os campos de filtro são obrigatórios. 

    Aqui o código que tenho hoje:

    relatório.aspx

     <asp:UpdatePanel ID="up_relatorio" runat="server">
                                    <ContentTemplate>
                                        <rsweb:ReportViewer ID="rp_extMensal" runat="server" Width="873px" Font-Names="Verdana" Font-Size="8pt" WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt">
                                            
                                            <LocalReport ReportPath="Report1.rdlc">
                                                <DataSources>
                                                    <rsweb:ReportDataSource DataSourceId="ObjectDataSource1" Name="DataSet1" />
                                                </DataSources>
                                            </LocalReport>
                                            
                                        </rsweb:ReportViewer>
                                        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData" TypeName="SCM.WEBApp.SCMDataSetTableAdapters.funExtratoMensalReportTableAdapter">
                                            <FilterParameters>
                                                <
                                            </FilterParameters>
                                            <SelectParameters>
                                                <asp:FormParameter DefaultValue="16" FormField="rel_filtro_unidade" Name="cod_unidade" Type="Int32" />
                                                <asp:FormParameter DefaultValue="10" FormField="rel_filtro_fornecedor" Name="cod_fornecedor" Type="Int32" />
                                                <asp:FormParameter DefaultValue="8086" FormField="rel_filtro_profissional" Name="cod_profissional" Type="Int32" />
                                                <asp:FormParameter DefaultValue="4" FormField="rel_filtro_especialidade" Name="cod_especialidade" Type="Int32" />
                                                <asp:FormParameter DefaultValue="30" FormField="rel_filtro_competencia" Name="cod_competencia" Type="Int32" />
                                            </SelectParameters>
                                        </asp:ObjectDataSource>
                                    </ContentTemplate>
                                </asp:UpdatePanel>

    Eu inicio com DefaultValue só pra ver um resultado assim que abro a página e está exibindo certinho. 

    FormField="rel_filtro_unidade" é o controle que ele vai pegar o value pra gerar o relatório, correto? Sempre que eu clicar em atualizar ele vai atualizar com o que tem nesses campos definidos no FomField? Poque não tá acontecendo isso, mesmo estando com o mesmo ID dos Combos e TextBox.

    Agora minha function no BD:

    	SELECT uni_nome, for_nome, pro_nome, pro_cpf, esp_descricao, lan_data, tpt_descricao, 
    	lan_qtd_procedimento
    	FROM lancamento
    	JOIN tipo_plantao_turno as tipo_turno ON tipo_turno.tpt_cod = lan_cod_tipo_plantao_turno
    	JOIN especialidade ON esp_cod = lan_cod_especialidade 
    	JOIN fornecedor ON for_cod = lan_cod_fornecedor
    	JOIN profissional ON pro_cod = lan_cod_profissional
    	JOIN unidade ON uni_cod = lan_cod_unidade
    	JOIN competencia ON com_cod = lan_cod_competencia
    	WHERE lan_cod_unidade = @cod_unidade 
    	AND lan_cod_fornecedor = @cod_fornecedor
    	AND lan_cod_profissional = @cod_profissional 
    	AND lan_cod_especialidade = @cod_especialidade	
    	AND lan_cod_competencia = @cod_competencia
    Só que nem sempre vou passar por exemplo o código do profissional. Desse jeito fica amarrado a ter todos os parâmetros, correto?

    terça-feira, 10 de fevereiro de 2015 13:37

Todas as Respostas