Filtrar registros Mestre Detalhe com SimpleDataSet

07/01/2016

2

Bom dia. Tenho 2 tabelas, uma de ítens e outra de pedidos. Estou precisando fazer um filtro na tabela de ítens de pedido. Os parâmetros a serem passados são data inicial e final e status do pedido. Estes dados existem na tabela pedidos. Na tabela ítens o único dado que tenho é o número do pedido. Não tem data nem status. Fiz a consulta utilizando um clientdataset e funcionou perfeitamente. Como posso fazer?
Estou com dificuldades para executar essa pesquisa. Peguei um exemplo neste fórum, mas não consegui colocar para rodar. Se alguém puder me ajudar fico grato.
Tenho dois arquivos, um de pedidos e outro dos ítens desse pedido.
Não consigo filtrar no arquivo de vendas os PEDIDOS que estejam no intervalo de data selecionado e cujo Status esteja como 'FECHADO'.
Preciso filtrar com esses parâmetros para pegar no arquivo de ítens do pedido os registros com esses parâmetros. Consegui fazer o retorno da consulta com esses parâmetros em um ClientDataSet mas, não sei como filtrar os ítens do pedido.
Estou utilizando Delphi 7 e Firebird 2.5.
Pego a data inicial com DTP1 e a final com DTP2.

Tenho no form os seguintes componentes

TdateTimePicker = DTP1 (data inicial)
TdateTimePicker = DTP2 (data final)
SimpleDataSet = sdsPedidos (armazena os dados filtrado dos pedidos)
DataSource = dsPedidoItens ( conectado ao sdsPedidos)
SimpleDataSet = sdsItens ( ítens do pedido)
SpeedButton = GeraPesquisa ( passa parâmetros para o sdsPedidos)
DBrid = Dbgrid1 ( exibe o resultado do filtro)

Conectei o sdsPedidos a uma SQLConection bem como o sdsItens.
No DataSource dsPedidoItens, apontei a propriedade DataSet para sdsPedidos.

Na propreidade DataSet, CommandText do sdsPedidos coloquei o seguinte código:
select PEDIDOS.CODPEDIDO
,PEDIDOS.TELCLIENTE
,PEDIDOS.STATUSPEDIDO
,PEDIDOS.DTPEDIDO
,PEDIDOS.VALTOTPEDIDO
,PEDIDOITENS.NRPEDIDO
,PEDIDOITENS.NRITEM
,PEDIDOITENS.DESCRICAO
,PEDIDOITENS.QTVENDA
,PEDIDOITENS.VALPRODUTO
,PEDIDOITENS.VALPEDIDO
,PEDIDOITENS.NTIMESTAMP

,sum(PEDIDOITENS.QTVENDA * PEDIDOITENS.VALPRODUTO) as total_pedido

from PEDIDOS

,PEDIDOITENS

where PEDIDOS.DTPEDIDO between :DTP1 and :DTP2

and PEDIDOS.STATUSPEDIDO = :STATUS

and PEDIDOS.CODPEDIDO = PEDIDOITENS.NRPEDIDO


group by PEDIDOS.CODPEDIDO
,PEDIDOS.TELCLIENTE
,PEDIDOS.STATUSPEDIDO
,PEDIDOS.DTPEDIDO
,PEDIDOS.VALTOTPEDIDO
,PEDIDOITENS.NRPEDIDO
,PEDIDOITENS.NRITEM
,PEDIDOITENS.DESCRICAO
,PEDIDOITENS.QTVENDA
,PEDIDOITENS.VALPRODUTO
,PEDIDOITENS.VALPEDIDO
,PEDIDOITENS.NTIMESTAMP

order by PEDIDOS.DTPEDIDO desc


No SimpleDataSet sdsItens defini a propriedade DataSource dentro da propriedade DataSet para DsPedidosItens.

Na propriedade CommantText, dentro da propriedade DataSet o seguinte comando SQL:

Select PEDIDOITENS.NRITEM
,PEDIDOITENS.NRPEDIDO
,PEDIDOITENS.CODPRODUTO
,PEDIDOITENS.DESCRICAO
,PEDIDOITENS.QTVENDA
,PEDIDOITENS.VALPRODUTO
,PEDIDOITENS.VALPEDIDO
,PEDIDOITENS.NTIMESTAMP
,sum(PEDIDOITENS.QTVENDA * PEDIDOITENS.VALPRODUTO) as total_item

from PEDIDOITENS

where PEDIDOITENS.NRPEDIDO = :CODPEDIDO

group by PEDIDOITENS.NRITEM
,PEDIDOITENS.NRPEDIDO
,PEDIDOITENS.CODPRODUTO
,PEDIDOITENS.DESCRICAO
,PEDIDOITENS.QTVENDA
,PEDIDOITENS.VALPRODUTO
,PEDIDOITENS.VALPEDIDO
,PEDIDOITENS.NTIMESTAMP


order by PEDIDOITENS.NRPEDIDO
Responder