EXIBIR SÓ AS VENDAS FEITAS NAQUELE DIA
Boa tarde, Amigos
Estou desenvolvendo um sistema de vendas mas presciso que e fiz um form onde o usuário teria um tela onde será exibido a data e as vendas naquele dia. Mas infelizmente não tenho noção de como poderia proceder.
Fiz uma tabela chamada formpag e nela coloquei além das formas de pagamento um campo data que esta interagindo com outro campo data da tabela venda.
Ai na quando se faz uma venda ele da um StrToDate (now) e grava a data nas respectivas tabelas mas quando vou lá no resumo e abro o dbgrid mostrar todas as vendas e não só daquele dia.
Estou desenvolvendo um sistema de vendas mas presciso que e fiz um form onde o usuário teria um tela onde será exibido a data e as vendas naquele dia. Mas infelizmente não tenho noção de como poderia proceder.
Fiz uma tabela chamada formpag e nela coloquei além das formas de pagamento um campo data que esta interagindo com outro campo data da tabela venda.
Ai na quando se faz uma venda ele da um StrToDate (now) e grava a data nas respectivas tabelas mas quando vou lá no resumo e abro o dbgrid mostrar todas as vendas e não só daquele dia.
Fabiosus
Curtidas 0
Respostas
Lightshine
04/07/2009
Você terá que fazer uma consulta sql para exibir apenas as vendas com a data corrente. No oncreate ou no on Show do formulário de resumo você filtra os dados da tabela.
Query.close;
Query.SQL. Clear;
Query.SQL.Add(´Select * from NomeTabela´);
Query.SQL.Add(´Where DATAPAGTO = :Data´);
Query.SQL.ParamByName(´Data´).asDate := Date();
Query.Open;
E liga o dbgrid a está consulta. (SQLQuery, IBQuery, Query... enfim, ao componente que vc está utilizando).
Assim só será apresentadas as vendas cujo DATAPAGTO for igual a data corrente.
Respodi de forma bem generica essa pergunta, caso ainda reste duvidas, preciso de mais dados para auxiliá-lo. Como:
Qual o banco de dados vc utiliza?
Qual paleta de componentes vc usa para acesso aos dados?
Passa tbm a estrutura da tabela que onde vc salva as vendas.
Só ressaltando, que não estou com o delphi aberto e nem testei o codigo, dei apenas um exemplo de como você deverá fazer, tento que adaptá-lo ao seu projeto.
Lightshine
Query.close;
Query.SQL. Clear;
Query.SQL.Add(´Select * from NomeTabela´);
Query.SQL.Add(´Where DATAPAGTO = :Data´);
Query.SQL.ParamByName(´Data´).asDate := Date();
Query.Open;
E liga o dbgrid a está consulta. (SQLQuery, IBQuery, Query... enfim, ao componente que vc está utilizando).
Assim só será apresentadas as vendas cujo DATAPAGTO for igual a data corrente.
Respodi de forma bem generica essa pergunta, caso ainda reste duvidas, preciso de mais dados para auxiliá-lo. Como:
Qual o banco de dados vc utiliza?
Qual paleta de componentes vc usa para acesso aos dados?
Passa tbm a estrutura da tabela que onde vc salva as vendas.
Só ressaltando, que não estou com o delphi aberto e nem testei o codigo, dei apenas um exemplo de como você deverá fazer, tento que adaptá-lo ao seu projeto.
Lightshine
GOSTEI 0
Fabiosus
04/07/2009
Bom dia tentei fazer aqui em meu formulário mas a 5 linha não esta mostrando a opção: ´Query.SQL.ParamByName(´Data´).asDate := Date(); ´
Pq será que não aparece o ParamByName?
Estou utilizando da paleta ADO o ADOQUERY e o BD é ACCESS.
datamodule1.QData.Close;
datamodule1.QData.SQL.Clear;
datamodule1.QData.SQL.Add(´Select * from data´);
datamodule1.QData.SQL.Add(´Where data =:data´);
datamodule1.QData.SQL.
datamodule1.QData.Close;
Pq será que não aparece o ParamByName?
Estou utilizando da paleta ADO o ADOQUERY e o BD é ACCESS.
datamodule1.QData.Close;
datamodule1.QData.SQL.Clear;
datamodule1.QData.SQL.Add(´Select * from data´);
datamodule1.QData.SQL.Add(´Where data =:data´);
datamodule1.QData.SQL.
datamodule1.QData.Close;
GOSTEI 0
Emerson Nascimento
04/07/2009
a linha da passagem de valor para o parâmetro não deve ter o .SQL.
o correto é:
Query.ParamByName(´Data´).asDate := Date();
o correto é:
Query.ParamByName(´Data´).asDate := Date();
GOSTEI 0
Fabiosus
04/07/2009
Boa tarde.
Fiz como assim:
datamodule1.QData.Parameters.ParamByName(´data´)
Quando chamei parameters. ai sim veio o ParamByname só que no que coloquei o (´data´) ele não aparece depois o asdate := date();
e da erro undeclared indetifiquer: AsDate.
Fiz como assim:
datamodule1.QData.Parameters.ParamByName(´data´)
Quando chamei parameters. ai sim veio o ParamByname só que no que coloquei o (´data´) ele não aparece depois o asdate := date();
e da erro undeclared indetifiquer: AsDate.
GOSTEI 0
Lightshine
04/07/2009
Tenta assim:
Query.Parameters.ParamByName(´Data´).Value := Date();
Lightshine
Query.Parameters.ParamByName(´Data´).Value := Date();
Lightshine
GOSTEI 0
Fabiosus
04/07/2009
Obrigado Lightshine.
Graças a sua ajuda comsegui solucionar esta dúvida.
Bom o código ficou assim para quem precisar:
Eu fiz um form aonde coloquei 4 dbgrid e em cada um deles o nº do cupom e a data assim:
DBGRI1:
CUPOM/ DATA DA VENDA / DINHEIRO
DBGRI2
CUPOM/ DATA DA VENDA / CARTÃO DE DEBITO
DBGRI3
CUPOM/ DATA DA VENDA / CARTÃO DE CRÉDITO
DBGRI4
CUPOM/ DATA DA VENDA / CHEQUE
Ai em onshow Eu coloquei o seguinte código
procedure ResumoVendas.FormShow(Sender: TObject);
begin
datamodule1.Qpaga.Close;
datamodule1.Qpaga.SQL.Clear;
datamodule1.Qpaga.SQL.Add(´Select * from formPagamento´);
datamodule1.Qpaga.SQL.Add(´Where data_venda = :data_venda´);
datamodule1.Qpaga.Parameters.ParamByName(´data_venda´).Value := date ();
datamodule1.Qpaga.Open;
end;
Muito obrigado
Graças a sua ajuda comsegui solucionar esta dúvida.
Bom o código ficou assim para quem precisar:
Eu fiz um form aonde coloquei 4 dbgrid e em cada um deles o nº do cupom e a data assim:
DBGRI1:
CUPOM/ DATA DA VENDA / DINHEIRO
DBGRI2
CUPOM/ DATA DA VENDA / CARTÃO DE DEBITO
DBGRI3
CUPOM/ DATA DA VENDA / CARTÃO DE CRÉDITO
DBGRI4
CUPOM/ DATA DA VENDA / CHEQUE
Ai em onshow Eu coloquei o seguinte código
procedure ResumoVendas.FormShow(Sender: TObject);
begin
datamodule1.Qpaga.Close;
datamodule1.Qpaga.SQL.Clear;
datamodule1.Qpaga.SQL.Add(´Select * from formPagamento´);
datamodule1.Qpaga.SQL.Add(´Where data_venda = :data_venda´);
datamodule1.Qpaga.Parameters.ParamByName(´data_venda´).Value := date ();
datamodule1.Qpaga.Open;
end;
Muito obrigado
GOSTEI 0
Cruyahoo
04/07/2009
Aproveitando o título do tópico segue esta procedure muito útil que desenvolvi para quem for filtrar Tables.
{Filtra no periodo, registros com campo data ,assignados ou nao ou todos no periodo}
{OBS. O único diferenciador é a tupla > para Assig, e < para NaoAssig, em so 2 pontos da funcao}
procedure FiltraDataAssign(Tabela:Tdataset;edInicio,edFim:TDate;DataPeriodo,DataAssign,Situacao:string);
// edInicio e edFim : pode ser um DateTimePicker
// DataPeriodo : Informar a data que o filtro vai enxergar em formato de string
// DataAssignada : Informar a data que estará ou nao preenchida Ex. dia que pagou. Tambem em formato string ´01/02/2009´
// Situação : Informar ´Assig´ p/ data assignada e ´NaoAssig´ p/ data nao assignada. Ou apenas todos os registros no periodo lido por DataIni e DataFim.
var tupla,VedInicio,VedFim : string;
begin
VedInicio:=DateToStr(edInicio);
VedFim:=DateToStr(edFim);
{Seleciona tupla que diferencia situacao em dois pontos da funcao}
If situacao = ´Assig´ then tupla:=´>´;//Assignado é preenchido
If situacao = ´NaoAssig´ then tupla:=´<´;// Não preenchido
// ´TodosNoPeriodo´ = Ver no if relacionado abaixo;
Tabela.Filtered:=False;
{Se estiver preenchido}
if (edInicio <> null) and (edFim <> null) then
//Se for geral do periodo
if situacao=´TodosNoPeriodo´ then
begin
Tabela.Filter:=DataPeriodo+ ´>=´ +QuotedStr(VedInicio)+ ´ and ´ +DataPeriodo+ ´<=´ +QuotedStr(VedFim);
end
else //Se for Assignado ou Nao Assignado
begin
Tabela.Filter:=DataPeriodo+ ´>=´ +QuotedStr(VedInicio)+ ´ and ´ + DataPeriodo+ ´<=´+QuotedStr(VedFim)+´ and ´ +DataAssign+tupla +QuotedStr(´01/01/1990´);//ou data que nao exista na base
end
{Se estiver em branco}
else
Tabela.Filter:=DataAssign+tupla + QuotedStr(´01/01/1990´);
Tabela.filtered:=True;
end;
Esta procedure elimina todo trabalho braçal de ficar compondo filtros,
separados, em caso deste tipo de filtro que abrange um determinado range de datas, e ainda checando se o campo de maior relevancia foi ou
nao assignado.
Espero que seja util
{Filtra no periodo, registros com campo data ,assignados ou nao ou todos no periodo}
{OBS. O único diferenciador é a tupla > para Assig, e < para NaoAssig, em so 2 pontos da funcao}
procedure FiltraDataAssign(Tabela:Tdataset;edInicio,edFim:TDate;DataPeriodo,DataAssign,Situacao:string);
// edInicio e edFim : pode ser um DateTimePicker
// DataPeriodo : Informar a data que o filtro vai enxergar em formato de string
// DataAssignada : Informar a data que estará ou nao preenchida Ex. dia que pagou. Tambem em formato string ´01/02/2009´
// Situação : Informar ´Assig´ p/ data assignada e ´NaoAssig´ p/ data nao assignada. Ou apenas todos os registros no periodo lido por DataIni e DataFim.
var tupla,VedInicio,VedFim : string;
begin
VedInicio:=DateToStr(edInicio);
VedFim:=DateToStr(edFim);
{Seleciona tupla que diferencia situacao em dois pontos da funcao}
If situacao = ´Assig´ then tupla:=´>´;//Assignado é preenchido
If situacao = ´NaoAssig´ then tupla:=´<´;// Não preenchido
// ´TodosNoPeriodo´ = Ver no if relacionado abaixo;
Tabela.Filtered:=False;
{Se estiver preenchido}
if (edInicio <> null) and (edFim <> null) then
//Se for geral do periodo
if situacao=´TodosNoPeriodo´ then
begin
Tabela.Filter:=DataPeriodo+ ´>=´ +QuotedStr(VedInicio)+ ´ and ´ +DataPeriodo+ ´<=´ +QuotedStr(VedFim);
end
else //Se for Assignado ou Nao Assignado
begin
Tabela.Filter:=DataPeriodo+ ´>=´ +QuotedStr(VedInicio)+ ´ and ´ + DataPeriodo+ ´<=´+QuotedStr(VedFim)+´ and ´ +DataAssign+tupla +QuotedStr(´01/01/1990´);//ou data que nao exista na base
end
{Se estiver em branco}
else
Tabela.Filter:=DataAssign+tupla + QuotedStr(´01/01/1990´);
Tabela.filtered:=True;
end;
Esta procedure elimina todo trabalho braçal de ficar compondo filtros,
separados, em caso deste tipo de filtro que abrange um determinado range de datas, e ainda checando se o campo de maior relevancia foi ou
nao assignado.
Espero que seja util
GOSTEI 0