consultando pedidos do mes
pessoal estou tentando fazr uma consulta em q resulte na exibição de todos os pedidos feitos no mês desejado. c/ a rotina q estou utilizando tras este resultado. só q ñ esta exibindo todos os itens do pedido apenas um item. e o total do pedido [por cliente] tb ñ esta exibindo. já qbrei a kbeça e ñ consegui encontrar este erro, se alguem podr ajudar fico muito grato. a rotina q estou usando é a seguinte:
var part: string;
dataini,datafin : string;
begin
ShortDateFormat:=´dd/mm/yyyy´;
part := datetostr(date);
begin
dataini := MaskEdit1.text;
datafin := MaskEdit2.text;
//Transforma em data estilo Americano, usado pela instrução SQL
dataini:=FormatDateTime(´mm/dd/yyyy´,StrToDate(dataini));
datafin:=FormatDateTime(´mm/dd/yyyy´,StrToDate(datafin));
with DtmContVendas.Query3 do
begin
Close;
sql.Clear;
sql.add(´select codped,nped,clienteped,dataped,subtotal,desconto,totgeral,produto,preco,qtditem,totiten,descricao from produtos,clientes,Pedidos,itens´);
sql.add(´where produtos.descricao=itens.produto and itens.codped=pedidos.codped and pedidos.dataped between ´´+ dataini + ´´and ´´ + datafin + ´´´);
sql.add(´group by codped,nped,clienteped,dataped,subtotal,desconto,totgeral,produto,preco,qtditem,totiten,descricao order by pedidos.dataped´);
Open;
Application.CreateForm(TFrmrelpedmes,Frmrelpedmes); // cria o formulário
Frmrelpedmes.qreprelpedmes.Preview; // exibe a consulta
por favor se alguem podr ajudar
var part: string;
dataini,datafin : string;
begin
ShortDateFormat:=´dd/mm/yyyy´;
part := datetostr(date);
begin
dataini := MaskEdit1.text;
datafin := MaskEdit2.text;
//Transforma em data estilo Americano, usado pela instrução SQL
dataini:=FormatDateTime(´mm/dd/yyyy´,StrToDate(dataini));
datafin:=FormatDateTime(´mm/dd/yyyy´,StrToDate(datafin));
with DtmContVendas.Query3 do
begin
Close;
sql.Clear;
sql.add(´select codped,nped,clienteped,dataped,subtotal,desconto,totgeral,produto,preco,qtditem,totiten,descricao from produtos,clientes,Pedidos,itens´);
sql.add(´where produtos.descricao=itens.produto and itens.codped=pedidos.codped and pedidos.dataped between ´´+ dataini + ´´and ´´ + datafin + ´´´);
sql.add(´group by codped,nped,clienteped,dataped,subtotal,desconto,totgeral,produto,preco,qtditem,totiten,descricao order by pedidos.dataped´);
Open;
Application.CreateForm(TFrmrelpedmes,Frmrelpedmes); // cria o formulário
Frmrelpedmes.qreprelpedmes.Preview; // exibe a consulta
por favor se alguem podr ajudar
Marquinhospe
Curtidas 0
Respostas
Emerson Nascimento
23/08/2007
qual o banco de dados utilizado ?
outra coisa: você está certo do resultado que deseja? porque não é possível retornar numa instrução simples, os itens do pedido e ainda o total dos pedidos [b:cb82dd9e88]por cliente[/b:cb82dd9e88]. sem contar a incoerência de exibir ´todos os pedidos feitos no mês desejado´ e ter uma data inicial e uma data final.
outra coisa: você está certo do resultado que deseja? porque não é possível retornar numa instrução simples, os itens do pedido e ainda o total dos pedidos [b:cb82dd9e88]por cliente[/b:cb82dd9e88]. sem contar a incoerência de exibir ´todos os pedidos feitos no mês desejado´ e ter uma data inicial e uma data final.
GOSTEI 0
Nasguone
23/08/2007
bem eu ápenas modificaria seu tipode consulta para a seguinte forma...declarar a data ao invez de utilizar between....
segue abaixo um exemplo de como utilizo
DATAINI := (FormatDateTime(´mm/dd/yyyy´,dtpIni.DateTime));
DATAFIN := (FormatDateTime(´mm/dd/yyyy´,dtpFin.DateTime +1));
dm.cdproducao.Close;
dm.dsProducao.CommandText :=
´DECLARE @ApontIni As DateTime,´+´ ´+
´@ApontFin As DateTime;´+´ ´+
´SET @ApontIni =´´´+DATAINI+´´´;´+´ ´+
´SET @ApontFin =´´´+DATAFIN+´´´;´+´ ´+
´SELECT A.* FROM CONSULTA_PRODUCAO A´+´ ´+
´where´+´ ´+
´(A.Apont_Date >=@ApontIni) and ´+´ ´+
´(A.Apont_Date <=@ApontFin)´+´ ´+
´and A.Apont_Status = ´´AP´´´+´ ´+
´order by A.Apont_Date desc´;
dm.cdproducao.Open;
ode os dtp são componentes de data TdateTime
dsprodução = datasource
E o script e para SQL Server...se vc utiliza outro banco não sei se funciona a forma de declarar as datas.
No geral a logica do seu script esta correta, não vejo nada de anormal.
Apenas no where coloque entre parentese cada clausula dos and.
Espero que te ajude
E.C.S
segue abaixo um exemplo de como utilizo
DATAINI := (FormatDateTime(´mm/dd/yyyy´,dtpIni.DateTime));
DATAFIN := (FormatDateTime(´mm/dd/yyyy´,dtpFin.DateTime +1));
dm.cdproducao.Close;
dm.dsProducao.CommandText :=
´DECLARE @ApontIni As DateTime,´+´ ´+
´@ApontFin As DateTime;´+´ ´+
´SET @ApontIni =´´´+DATAINI+´´´;´+´ ´+
´SET @ApontFin =´´´+DATAFIN+´´´;´+´ ´+
´SELECT A.* FROM CONSULTA_PRODUCAO A´+´ ´+
´where´+´ ´+
´(A.Apont_Date >=@ApontIni) and ´+´ ´+
´(A.Apont_Date <=@ApontFin)´+´ ´+
´and A.Apont_Status = ´´AP´´´+´ ´+
´order by A.Apont_Date desc´;
dm.cdproducao.Open;
ode os dtp são componentes de data TdateTime
dsprodução = datasource
E o script e para SQL Server...se vc utiliza outro banco não sei se funciona a forma de declarar as datas.
No geral a logica do seu script esta correta, não vejo nada de anormal.
Apenas no where coloque entre parentese cada clausula dos and.
Espero que te ajude
E.C.S
GOSTEI 0
Nasguone
23/08/2007
E verdade não me atentei ao que vc quer mostrar.....
para este tipode resultado vc teria que usar uma instrução de WITH ROLLUP ai sim vc teria numped por quantidade total de itens, pois os resultados seriam como um cubo.
para este tipode resultado vc teria que usar uma instrução de WITH ROLLUP ai sim vc teria numped por quantidade total de itens, pois os resultados seriam como um cubo.
GOSTEI 0
Marquinhospe
23/08/2007
estou trabalhando c/ paradox. e preciso gerar um relatorio c/ todos os pedidos feito no mês c/ seus respectivos itens e totais dos pedidos. monto o relatorio mas em um pedido c/ + d 1 item ele ñ exib todos os itens (como já citei) ñ sei + o q fazr. tm um erro no cadastro dos itens q ñ sei se implik no relatorio os itens estão sendo cadastrados na tblitens c/ o codigo sempre repetindo o codigo do pedido. ex.: pedido codigo 5 os coditens sempre são inseridos como 5
GOSTEI 0
Nasguone
23/08/2007
select A.nped
, COUNT(*) AS´TOTAL GERAL ´
FROM tabela_pedidos A
where
A.Apont_Date >=´05/05/2007´ and A.Apont_Date <=´09/05/2007´
group by A.nped WITH ROLLUP
Order by A.nped DESC
tente usar este select para ver se reporta numped por totais de itens....
se sim basta vc incluir as clausulas que vc quiser
, COUNT(*) AS´TOTAL GERAL ´
FROM tabela_pedidos A
where
A.Apont_Date >=´05/05/2007´ and A.Apont_Date <=´09/05/2007´
group by A.nped WITH ROLLUP
Order by A.nped DESC
tente usar este select para ver se reporta numped por totais de itens....
se sim basta vc incluir as clausulas que vc quiser
GOSTEI 0
Emerson Nascimento
23/08/2007
tente assim:
begin with DtmContVendas.Query3 do begin Close; sql.Text := ´select codped, nped, clienteped, dataped, subtotal, desconto, totgeral, ´+ ´ produto, preco, qtditem, totiten, descricao ´+ ´from pedidos, clientes, itens, produtos ´+ ´where clientes.codcli = pedidos.codcli and itens.codpedido = pedidos.codpedido ´+ ´ and produtos.codproduto = itens.codproduto and extract(month from pedidos.dataped) = :mes ´+ ´ and extract(year from pedidos.dataped) = :ano ´+ ´order by pedidos.dataped ´; ParamByName(´mes´).asinteger := monthof(strtodate(dataini)); ParamByName(´ano´).asinteger := yearof(strtodate(dataini)); Open; if IsEmpty then ShowMessage(´Não há pedidos no mês´) else begin Application.CreateForm(TFrmrelpedmes,Frmrelpedmes); // cria o formulário Frmrelpedmes.qreprelpedmes.Preview; // exibe a consulta end; end; end;
GOSTEI 0
Emerson Nascimento
23/08/2007
corrigindo:
begin with DtmContVendas.Query3 do begin Close; sql.Text := ´select codped, nped, clienteped, dataped, subtotal, desconto, totgeral, ´+ ´ produto, preco, qtditem, totiten, descricao ´+ ´from pedidos, clientes, itens, produtos ´+ ´where clientes.codcli = pedidos.codcli and itens.codpedido = pedidos.codpedido ´+ ´ and produtos.codproduto = itens.codproduto and extract(month from pedidos.dataped) = :mes ´+ ´ and extract(year from pedidos.dataped) = :ano ´+ ´order by pedidos.dataped ´; ParamByName(´mes´).asinteger := monthof(strtodate(MASKEDIT1.TEXT)); ParamByName(´ano´).asinteger := yearof(strtodate(MASKEDIT1.TEXT)); Open; if IsEmpty then ShowMessage(´Não há pedidos no mês´) else begin Application.CreateForm(TFrmrelpedmes,Frmrelpedmes); // cria o formulário Frmrelpedmes.qreprelpedmes.Preview; // exibe a consulta end; end; end;
GOSTEI 0