Select de morrer!!!!!!!
Ola colegas...
este mesmo select ja postei varias vezes e ainda nao consegui uma solução...
estou criando um relatorio de clientes inativos no qual tem que obedecer os seguintes parametros
Ex:
os resultados são os campos
o que estou tendo problemas ha dias e nao consigo resolver é como chegar ao calculo de dias inativos e dias em atraso.
uma pq o padra das datas esta assim [b:9b8ded1475]01.01.2003[/b:9b8ded1475], usando ponto al invez de barra
esse select ja me retorna os campos acima marcados em verde
sera que alguem pode me ajudar
um abraço a todos
[i:9b8ded1475]Título editado. Leia as [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=6689&sid=add834b4ed94967502cf2381c38e751a][u:9b8ded1475]Regras de Conduta[/u:9b8ded1475][/url]. (marcelo.c – Moderador)[/i:9b8ded1475]
este mesmo select ja postei varias vezes e ainda nao consegui uma solução...
estou criando um relatorio de clientes inativos no qual tem que obedecer os seguintes parametros
Ex:
Cliente Inicial : 00001 Cliente Final: 00100
Representante Inicial : 00001 Representante Final: 00800
Numero de dias inativo maior que : 10
Maior numero de dias em atrso : 45
Data Base : 01.08.2003
os resultados são os campos
codigo do cliente
[color=green:9b8ded1475]Nome do cliente
Codigo do representante
Nome do representante
municipio
UF
contato
fone[/color:9b8ded1475]
[color=red:9b8ded1475][b:9b8ded1475]dias inativos[/b:9b8ded1475][/color:9b8ded1475]nº da nota
[b:9b8ded1475]dias em atraso[/b:9b8ded1475]
[color=green:9b8ded1475]valor da nota
data da nota[/color:9b8ded1475]
o que estou tendo problemas ha dias e nao consigo resolver é como chegar ao calculo de dias inativos e dias em atraso.
uma pq o padra das datas esta assim [b:9b8ded1475]01.01.2003[/b:9b8ded1475], usando ponto al invez de barra
esse select ja me retorna os campos acima marcados em verde
sera que alguem pode me ajudar
um abraço a todos
[i:9b8ded1475]Título editado. Leia as [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=6689&sid=add834b4ed94967502cf2381c38e751a][u:9b8ded1475]Regras de Conduta[/u:9b8ded1475][/url]. (marcelo.c – Moderador)[/i:9b8ded1475]
Macario
Curtidas 0
Respostas
Macario
09/10/2003
oops esqueci de postar o select
with QryTemp do
begin
Close;
DatabaseName := DM.TArqEmpr.DatabaseName;
SQL.Clear;
SQL.Add(´select C.v1 as Cod,´);
SQL.Add(´ C.v2 as Cliente,´);
SQL.Add(´ C.v4 as Municipio,´);
SQL.Add(´ C.v5 as UF,´);
SQL.Add(´ C.v12 as Contato,´);
SQL.Add(´ C.v13 as Telefone,´);
SQL.Add(´ R.v1 as codrep,´);
SQL.Add(´ R.v2 as Representante,´);
SQL.Add(´ C.Datacad,´);
SQL.Add(´ N.Dnf as Data,´);
SQL.Add(´ N.nnf as Nota,´);
SQL.Add(´ Sum(N.vlr * N.qte + n.ipi+n.encpro+n.encipi) as Valor´);
// SQL.Add(´ cast ((substring (n.dnf from 1 for 2))+´´/´´+´);
// SQL.Add(´ (substring (n.dnf from 3 for 2))+´´/´´+´);
// SQL.Add(´ (substring (n.dnf from 5 for 4))as date)´);
SQL.Add(´from arqclie C,´);
SQL.Add(´ arqprnf N,´);
SQL.Add(´ arqrepr R´);
SQL.Add(´where (C.v1 = N.ncl)´);
SQL.Add(´ and (R.v1 = N.nre)´);
SQL.Add(´ and (N.nnf = (select max(NF.nnf)´);
SQL.Add(´ from arqprnf NF´);
SQL.Add(´ where NF.ncl = C.v1 and nf.nre = r.v1))´);
SQL.Add(´ and (C.v1 between :cli1 and :cli2)´);
SQL.Add(´ and (N.nre between :rep1 and :rep2)´);
SQL.Add(´Group by C.v1, C.v2, C.v4, C.v5, C.v12, C.v13,R.v1, R.v2, C.datacad, n.dnf, n.nnf ´);
SQL.Add(´order by R.v1,´);
SQL.Add(´ C.v1´);
Params[0].Value := mdtCliIni.Text;
Params[1].Value := mdtCliFim.Text;
Params[2].Value := mdtRepIni.Text;
Params[3].Value := mdtRepFim.Text;
Open;
end;
GOSTEI 0
Marcelo.c
09/10/2003
Está meio confuso, qual a sua dúvida:
a. Alterar o formato da Data ?
b. Efetuar cálculos sobre datas ?
c. Exibir os campos na consulta ?
d. Todas as Alternativas Acima ?
e. Outra não listada ?
a. Alterar o formato da Data ?
b. Efetuar cálculos sobre datas ?
c. Exibir os campos na consulta ?
d. Todas as Alternativas Acima ?
e. Outra não listada ?
GOSTEI 0
Fava
09/10/2003
Com SQL você pode fazer muita coisa, inclusive acho que uma UDF pode resolver este problema para você, no entanto SQL não é tudo, experimente um pouco de programação para resolver este tido de problema.
Crie campos calculados em seu TQuery e no evento oncalcfields faça a conversão dos campos para data e faça os calculos que tiver que fazer.
Crie campos calculados em seu TQuery e no evento oncalcfields faça a conversão dos campos para data e faça os calculos que tiver que fazer.
GOSTEI 0
Macario
09/10/2003
Está meio confuso, qual a sua dúvida:
a. Alterar o formato da Data ?
b. Efetuar cálculos sobre datas ?
c. Exibir os campos na consulta ?
d. Todas as Alternativas Acima ?
e. Outra não listada ?
bom no caso são quase todas
veja primeiro eu tenho que converter a data pq se nao eu acho que nao
conseguirei fazer os calculos, lembrando que o padrão das datas é
01.01.2003 usando ´.´ (ponto ao invez de ´/´
ai eu tenho que verificar a partir de quantos dias inativos eu devo listar,
[b:6bd88a61f9]Ex: se o cliente tiver comprado pela ultima vez há 09/09/2003 e o parametro dias inativos for apenas 10 esse cliente nao deve ser listado[/b:6bd88a61f9]
eu ate tava tentando usar Cast mas nao consegui pq ele aponta um erro no group by
outra coisa seria mostrar so os clientes com o maior numero em atrso segundo o parametro tambem...
nao sei se isso tem que ser feito com if ou outra instrução...
eu ja to pirando....até pra tentar explicar melhor..rs..rs..rs
grato pela atenção
GOSTEI 0
Macario
09/10/2003
Crie campos calculados em seu TQuery e no evento oncalcfields faça a conversão dos campos para data e faça os calculos que tiver que fazer.
vc pode me daru um exemplo..outra coisa...nem queira saber qual é o banco..rs..rs..rs...usado
GOSTEI 0
Marcelo.c
09/10/2003
Se você não pode alterar a Data do sistema, pode fazer com que o Delphi utilize um formato independente.
No início da sua aplicação utilize:
ShortDateFormat=´dd/mm/yy´;
Este seria o primeiro passo.
Daqui a pouco eu volto e complemento. (Vou ter que sair)
No início da sua aplicação utilize:
ShortDateFormat=´dd/mm/yy´;
Este seria o primeiro passo.
Daqui a pouco eu volto e complemento. (Vou ter que sair)
GOSTEI 0
Macario
09/10/2003
colegas é exatamente o contrario
quando a aplicação é iniciada é passado DateSeparator := ´.´;
e isso eu nao posso tirar
quando a aplicação é iniciada é passado DateSeparator := ´.´;
e isso eu nao posso tirar
GOSTEI 0
Marcelo.c
09/10/2003
Para calcular as datas, tente assim:
var d, u, a: TdateTime; dinat, datraso: extended; begin d:=Date(); r:=TabelaDataUltimacompra.Value; a:=TabelaDataVence.Value; dinat:=d-r; datraso:=d-a; Showmessage(´O pagamento do Cliente está ´+currtoStr(datraso)+ ´ dias atrasado´); Showmessage(´O Cliente está inativo a ´+currtoStr(dinat)+´ dias´); end;
GOSTEI 0