none
Gerar relatorio criando um periodo de data atraves do parametro RRS feed

  • Pergunta

  • Boa tarde pessoal estou com um impasse para criar um novo relatório, busco informação em uma tabela de pedidos quais os pedidos que estão em aberto a partir da data atual buscando automaticamente 60 dias que configurei nas propriedades do parâmetro e com isso está me trazendo as informações, porém o encarregado não quer que eu mostre somente as datas que tem pedido em aberto no banco ele precisa que eu mostre todos os dias mesmo não tendo pedido em aberto mas não sei como fazer na hora da geração para que o reporting gere as linhas com as datas que não tenho informação no banco.

    Alguém poderia me dar uma ajuda?

    segunda-feira, 22 de agosto de 2016 17:47

Todas as Respostas

  • Você pode utilizar a CTE abaixo e realizar um Left Join com a sua tabela de pedidos.

    DECLARE @DTINI DATE = '20160801'
    DECLARE @DTFIM DATE = '20160830';
    
    WITH CTE (DATA,CONT)
    AS (
    
    SELECT CONVERT(CHAR,@DTINI,112) AS DATA, 1 AS CONT
    UNION ALL 
    SELECT CONVERT(CHAR,DATEADD(DD,CONT,@DTINI),112) AS DATA, CONT+1 AS CONT 
    FROM CTE WHERE DATA < @DTFIM
    )
    
    SELECT CTE.DATA, PED.* FROM CTE LEFT JOIN
    PEDIDOS PED ON PED.DATA = CTE.DATA

    No caso você precisará tratar as funções de agregação necessárias de acordo com a estrutura da sua tabela de pedidos, mas a ideia geral é essa.

    Caso tenha algum problema em montar a query final posta a estrutura dessa tabela de pedidos que poderemos te ajudar de forma mais eficiente.

    abraço!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    segunda-feira, 22 de agosto de 2016 18:28
  • Boa tarde Kanaãm

    Minha Query de consulta as tabelas está da seguinte forma:

    SELECT        pv0131.status_pv0131, pv0130.dt_fatur_pv0130, pv0131.num_ped_pv0131, pv0131.cod_prod_pv0131, pv0131.qtde_prod_pv0131, pv0131.qt_estoque_pv0131, pr5030.descr_abrev_pr5030,
                             sa5030.desc_sa5030, pr5033.est_ini_pr5033, pr5033.est_fis_pr5033, pr5033.campo3_pr5033, pr5033.pto_req_pr5033, pr5033.tempo_repos_pr5033
    FROM            pv0131 INNER JOIN
                             pv0130 ON pv0131.num_ped_pv0131 = pv0130.num_ped_pv0130 INNER JOIN
                             pr5030 ON pv0131.cod_prod_pv0131 = pr5030.cod_prd_pr5030 INNER JOIN
                             sa5030 ON pr5030.sales_group_pr5030 = sa5030.cod_sa5030 INNER JOIN
                             pr5033 ON pv0131.cod_prod_pv0131 = pr5033.cod_prd_pr5033
    WHERE        (pv0130.dt_fatur_pv0130 >= @Data_Incial) AND (pv0130.dt_fatur_pv0130 <= @Data_Final) AND (pv0131.status_pv0131 = '0')

    Aonde as tabelas PV0130 e PV0131 estão relacionadas aos pedidos, as tabelas PR5030 e SA5030 são do cadastro dos produtos e a PR5033 são os dados de estoque dos produtos.

    Os parâmetros estão da seguinte forma para ficar automatizado:

    @Data_Inicial "=Today()"

    @Data_Final "=DateAdd("d",60,today())"

    terça-feira, 23 de agosto de 2016 17:08
  • Acho que seria algo mais ou menos assim:

    WITH CTE (DATA,CONT)
    AS (
    
    SELECT CONVERT(CHAR,@Data_Incial,112) AS DATA, 1 AS CONT
    UNION ALL 
    SELECT CONVERT(CHAR,DATEADD(DD,CONT,@Data_Incial),112) AS DATA, CONT+1 AS CONT 
    FROM CTE WHERE DATA < @Data_Final
    )
    
    SELECT			ISNULL(pv0131.status_pv0131,'') status_pv0131, 
    				ISNULL(pv0130.dt_fatur_pv0130,'') dt_fatur_pv0130, 
    				ISNULL(pv0131.num_ped_pv0131,'') num_ped_pv0131, 
    				ISNULL(pv0131.cod_prod_pv0131,'') cod_prod_pv0131, 
    				ISNULL(pv0131.qtde_prod_pv0131,'') qtde_prod_pv0131, 
    				ISNULL(pv0131.qt_estoque_pv0131,'') qt_estoque_pv0131, 
    				ISNULL(pr5030.descr_abrev_pr5030,'') descr_abrev_pr5030, 
                    ISNULL(sa5030.desc_sa5030,'') desc_sa5030, 
    				ISNULL(pr5033.est_ini_pr5033,'') est_ini_pr5033, 
    				ISNULL(pr5033.est_fis_pr5033,'') est_fis_pr5033, 
    				ISNULL(pr5033.campo3_pr5033,'') campo3_pr5033, 
    				ISNULL(pr5033.pto_req_pr5033,'') pto_req_pr5033, 
    				ISNULL(pr5033.tempo_repos_pr5033,'') tempo_repos_pr5033
    FROM            
    CTE LEFT JOIN 
                             pv0130 ON pv0130.dt_fatur_pv0130 = CTE.DATA AND pv0131.status_pv0131 = '0' INNER JOIN
    						 pv0131 ON pv0131.num_ped_pv0131 = pv0130.num_ped_pv0130  INNER JOIN
    						 pr5030 ON pv0131.cod_prod_pv0131 = pr5030.cod_prd_pr5030 INNER JOIN
                             sa5030 ON pr5030.sales_group_pr5030 = sa5030.cod_sa5030 INNER JOIN
                             pr5033 ON pv0131.cod_prod_pv0131 = pr5033.cod_prd_pr5033
    WHERE        DATA BETWEEN @Data_Incial AND @Data_Final
    
    
    

    Verifique se funciona.

    Talvez tenha que realizar alguma tratativa de conversão nas datas do CTE.


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    terça-feira, 23 de agosto de 2016 17:36
  • Kanaãm eu realmente não conhecia o funcionamento de CTE estou até pegando algum conteúdo na internet para estudar e entender melhor como funciona. Tentei utilizar essa que você montou porém está dando erro com um dos campos

    SQL Execution Error

    Executed SQL statement: WITH CTE(DATA, CONT) AS (SELECT CONVERT(CHAR, @Data_Incial, 112) AS DATA, 1 AS CONT UNION ALL SELECT CONVERT(CHAR, DATEADD(DD, CONT, @Data_Incial), 112) AS DATA, CONT + 1 AS CONT FROM CTE AS CTE_2 WHERE (DATA < @Data_Final)) SELECT ISNULL(pv0131.st...

    Error Source: .Net SqlClient Data Provider

    Error Message: O identificador de várias partes "pv0131.status_pv0131" não pôde ser associado.

    quarta-feira, 24 de agosto de 2016 12:41
  • Fabio,

    Você testou a CTE que o Kanaãm montou no Management Studio ou na sua aplicação?

    Qual é a versão do SQL Server que você esta utilzando?


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 24 de agosto de 2016 13:18
  • Estava fazendo direto no SQL Server Business Intelligence Development Studio, estou usando a SQL 2008 R2.
    quarta-feira, 24 de agosto de 2016 14:50
  • Fabio,

    Certo, com qual componente?


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 24 de agosto de 2016 15:14
  • Estou tentando criar um Relatório para Projeção de Estoque, no meu dataset copiei o que o Kanaãm passou na minha consulta.
    quarta-feira, 24 de agosto de 2016 16:29