Filtrar registros Mestre Detalhe com SimpleDataSet
07/01/2016
0
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
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
Paulo Cavalcanti
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)