Desdobrar por datas, cfe. período de data lançados?
Pessoal, tenho um form de baixa que esta com a tabela assim:
Bom neste form eu digito a ID_Matricula para chamar o associado referente esta ID, ai nos campos mesrefini e mesreffim digito as datas da baixa, no caso 01/2008 a 03/2008 (Neste caso tenho uma função que n ão precisa digitar os dias do mes apenas o mes/ano) ai digito o valor R$, e opcional multas/juros e nos campos refmesini e refmesfim apareçe automaticamente assim 01/01/2008 a 31/03/2008
Bom tudo certo ai, ou seja se eu digitar 01/2008 a 01/2008 aparece 01/01/2008 a 31/01/2008 se eu digitar 02/2008 a 03/2008 aparece 01/02/2008 a 31/03/2008, ou seja sempre vai mostrar a primeira e ultima data dos campos mesrefini e mesreffim que eu digitar.
Bom agora o que eu estou precisando é fazer uma tabeal com o desdobramento por mes destes valor lançados com os seguintes campos
{Os tipos são o mesmo da tabela acima}
Ai vamos supor que eu digitei no form baixa assim
[b:5b5f4773b4]001 - adriano - 01/2008 a 03/2008 - 150,00 - 01/01/2008 a 31/03/2008[/b:5b5f4773b4]
e nesta outra tabela ter alguma função que jogue assim
[b:5b5f4773b4]001-adriano-01/01/2008-31/01/2008-B
001-adriano-01/02/2008-29/02/2008-B
001-adriano-01/03/2008-31/03/2008-B[/b:5b5f4773b4]
Bom os exceptions pode deixar que eu sei criar caso repita algum destes valores gerar uma unique. Apenas não sei como fazer uma função para desdobrar estas datas.
Depois se eu tiver que dar uma nova baixa deste ID ele dar continuidade.
Bom espero ter explicado certo o que eu preciso.
Valeu pessoal
ID_matricula varchar (10)
Associado varchar (60)
mesrefini date
mesreffim date
valor numeric 15,2
juros numeric 15,2
multa numeric 15,2
refmesini date
refmesfim date
Bom neste form eu digito a ID_Matricula para chamar o associado referente esta ID, ai nos campos mesrefini e mesreffim digito as datas da baixa, no caso 01/2008 a 03/2008 (Neste caso tenho uma função que n ão precisa digitar os dias do mes apenas o mes/ano) ai digito o valor R$, e opcional multas/juros e nos campos refmesini e refmesfim apareçe automaticamente assim 01/01/2008 a 31/03/2008
Bom tudo certo ai, ou seja se eu digitar 01/2008 a 01/2008 aparece 01/01/2008 a 31/01/2008 se eu digitar 02/2008 a 03/2008 aparece 01/02/2008 a 31/03/2008, ou seja sempre vai mostrar a primeira e ultima data dos campos mesrefini e mesreffim que eu digitar.
Bom agora o que eu estou precisando é fazer uma tabeal com o desdobramento por mes destes valor lançados com os seguintes campos
{Os tipos são o mesmo da tabela acima}
ID_Matricula (FK)
Associado
RefMesIini
RefMesFim
Status Char (1)
Ai vamos supor que eu digitei no form baixa assim
[b:5b5f4773b4]001 - adriano - 01/2008 a 03/2008 - 150,00 - 01/01/2008 a 31/03/2008[/b:5b5f4773b4]
e nesta outra tabela ter alguma função que jogue assim
[b:5b5f4773b4]001-adriano-01/01/2008-31/01/2008-B
001-adriano-01/02/2008-29/02/2008-B
001-adriano-01/03/2008-31/03/2008-B[/b:5b5f4773b4]
Bom os exceptions pode deixar que eu sei criar caso repita algum destes valores gerar uma unique. Apenas não sei como fazer uma função para desdobrar estas datas.
Depois se eu tiver que dar uma nova baixa deste ID ele dar continuidade.
Bom espero ter explicado certo o que eu preciso.
Valeu pessoal
Adriano_servitec
Curtidas 0
Respostas
Adriano_servitec
23/03/2008
sobe
GOSTEI 0
José Henrique
23/03/2008
Adriano,
Voce deve fazer, dentro de um loop pelos mesrefini e mesreffim:
1 - calcular o último dia do mês atual (que no início do loop é mesrefini);
2 - gravar na tabela desdobramento;
3 - comparar com mesreffim se igual, fim loop;
4 - caso contrário, incrementar de 1 (neste caso teremos dia 1º do próximo mês). Voltar ao passo 1, ie, next.
Voce deve fazer, dentro de um loop pelos mesrefini e mesreffim:
1 - calcular o último dia do mês atual (que no início do loop é mesrefini);
2 - gravar na tabela desdobramento;
3 - comparar com mesreffim se igual, fim loop;
4 - caso contrário, incrementar de 1 (neste caso teremos dia 1º do próximo mês). Voltar ao passo 1, ie, next.
GOSTEI 0
Adriano_servitec
23/03/2008
[quote:c3d01c45ca=´José Henrique´]Adriano,
Voce deve fazer, dentro de um loop pelos mesrefini e mesreffim:
1 - calcular o último dia do mês atual (que no início do loop é mesrefini);
2 - gravar na tabela desdobramento;
3 - comparar com mesreffim se igual, fim loop;
4 - caso contrário, incrementar de 1 (neste caso teremos dia 1º do próximo mês). Voltar ao passo 1, ie, next.[/quote:c3d01c45ca]
Olá José Henrique, bom já é um começo, mais vc poderia me ajudar? Como é que eu faria isso? Não tenho idéia de como seja.
Obrigado
Adriano
Voce deve fazer, dentro de um loop pelos mesrefini e mesreffim:
1 - calcular o último dia do mês atual (que no início do loop é mesrefini);
2 - gravar na tabela desdobramento;
3 - comparar com mesreffim se igual, fim loop;
4 - caso contrário, incrementar de 1 (neste caso teremos dia 1º do próximo mês). Voltar ao passo 1, ie, next.[/quote:c3d01c45ca]
Olá José Henrique, bom já é um começo, mais vc poderia me ajudar? Como é que eu faria isso? Não tenho idéia de como seja.
Obrigado
Adriano
GOSTEI 0
José Henrique
23/03/2008
Adriano,
ficaria assim:
Cole e teste.
ficaria assim:
procedure TForm1.Button1Click(Sender: TObject); var dtMesRefFim : TDateTime; dtMesIni, dtMesFim : TDateTime; strRes : string; begin dtMesIni := StrToDate(´01/01/2008´); dtMesRefFim := StrToDate(´31/12/2008´); repeat dtMesFim := FDM(dtMesIni); //aqui grava na tabela strRes := strRes + ´I: ´ + DateToStr(dtMesIni) + ´ - F: ´ + DateToStr(dtMesFim) + chr(10) + chr(13); dtMesIni := dtMesFim + 1; until (dtMesIni > dtMesRefFim); ShowMessage(strRes); end; function FDM (Data : TDateTime) : TDateTime; //Devolve o último dia do mês var Ano, Mes, Dia : word; begin DecodeDate(Data, Ano, Mes, Dia); if Mes = 12 then Result := EncodeDate(Ano, 12, 31) else Result := EncodeDate(Ano, Mes+1, 1)-1; end;
Cole e teste.
GOSTEI 0
Adriano_servitec
23/03/2008
[quote:d2df10b8a0=´José Henrique´]Adriano,
ficaria assim:
Cole e teste.[/quote:d2df10b8a0]Obrigado amigão, assim que eu testar retorno o resultado, mais acho que deve ser isso mesmo, valeu José Henrique, muito obrigado.
ficaria assim:
procedure TForm1.Button1Click(Sender: TObject); var dtMesRefFim : TDateTime; dtMesIni, dtMesFim : TDateTime; strRes : string; begin dtMesIni := StrToDate(´01/01/2008´); dtMesRefFim := StrToDate(´31/12/2008´); repeat dtMesFim := FDM(dtMesIni); //aqui grava na tabela strRes := strRes + ´I: ´ + DateToStr(dtMesIni) + ´ - F: ´ + DateToStr(dtMesFim) + chr(10) + chr(13); dtMesIni := dtMesFim + 1; until (dtMesIni > dtMesRefFim); ShowMessage(strRes); end; function FDM (Data : TDateTime) : TDateTime; //Devolve o último dia do mês var Ano, Mes, Dia : word; begin DecodeDate(Data, Ano, Mes, Dia); if Mes = 12 then Result := EncodeDate(Ano, 12, 31) else Result := EncodeDate(Ano, Mes+1, 1)-1; end;
Cole e teste.[/quote:d2df10b8a0]Obrigado amigão, assim que eu testar retorno o resultado, mais acho que deve ser isso mesmo, valeu José Henrique, muito obrigado.
GOSTEI 0
Adriano_servitec
23/03/2008
Não consegui ainda, qualquer dica é bem vinda.
Preciso apenas saber como fazer aparecer num listbox, memo, richedit, ou qualquer outro componente assim
Vamos supor que tenho dois maskeditsedits e digito neles campos tipo data
Mask1-01/01/2008
Mask2-31/03/2008
Então no listbox ou outro componente apareça desta forma
01/01/2008 - 31/01/2008
01/02/2008 - 29/02/2008
01/03/2008 - 31/03/2008
Apenas isso já esta de bom tamanho, pra eu começar
Pegar a primeira e a ultima data de cada ms eu sei, mais não estou sabendo como fazer num intervalo entre datas
Acho que precisa ser criado um FOR, mais como é que vou sabe entre estes intervalos de mes????
No aguardo
Adriano.
Preciso apenas saber como fazer aparecer num listbox, memo, richedit, ou qualquer outro componente assim
Vamos supor que tenho dois maskeditsedits e digito neles campos tipo data
Mask1-01/01/2008
Mask2-31/03/2008
Então no listbox ou outro componente apareça desta forma
01/01/2008 - 31/01/2008
01/02/2008 - 29/02/2008
01/03/2008 - 31/03/2008
Apenas isso já esta de bom tamanho, pra eu começar
Pegar a primeira e a ultima data de cada ms eu sei, mais não estou sabendo como fazer num intervalo entre datas
Acho que precisa ser criado um FOR, mais como é que vou sabe entre estes intervalos de mes????
No aguardo
Adriano.
GOSTEI 0
Martins
23/03/2008
Não consegui ainda, qualquer dica é bem vinda.
Preciso apenas saber como fazer aparecer num listbox, memo, richedit, ou qualquer outro componente assim
Vamos supor que tenho dois maskeditsedits e digito neles campos tipo data
Mask1-01/01/2008
Mask2-31/03/2008
Então no listbox ou outro componente apareça desta forma
01/01/2008 - 31/01/2008
01/02/2008 - 29/02/2008
01/03/2008 - 31/03/2008
Apenas isso já esta de bom tamanho, pra eu começar
Pegar a primeira e a ultima data de cada ms eu sei, mais não estou sabendo como fazer num intervalo entre datas
Acho que precisa ser criado um FOR, mais como é que vou sabe entre estes intervalos de mes????
No aguardo
Adriano.
[b:afee90234f]Adriano[/b:afee90234f], tente usando um laço [b:afee90234f]FOR.. TO .. DO[/b:afee90234f]
Algo mais ou menos assim.
var
i, a, b: integer;
begin
//Supondo que nos Edit´s vc informe apenas o mês e ano ex: 01/2008 04/2008
a:= StrToInt(Copy(Edit1.Text,1 ,2));
b:= StrToInt(Copy(Edit2.Text,1 ,2));
for i := a to b do
begin
{ if i = 1 then
begin
Memo1.Lines.Add(´01/01/2008 - 31/01/2008 - B´);
end;
if i = 2 then
begin
Memo1.Lines.Add(´01/02/2008 - 29/02/2008 - B´);
end;
if i = 3 then
begin
Memo1.Lines.Add(´01/03/2008 - 31/03/2008 - B´);
end;}
{Substitua o bloco comentado por sua função que traz o primeiro e o último dia de cada mês, pois essas linhas com memo foram meramente ilustrativas e só serviram como base para teste}
end;
end;
Boa sorte e bons códigos.
GOSTEI 0
Martins
23/03/2008
Trocando os IF´s por sua função deve funcionar, qualquer coisa é só retornar aqui no fórum.
procedure TForm1.Button1Click(Sender: TObject); var i, a, b: integer; begin a:= StrToInt(Copy(Edit1.Text,1 ,2)); b:= StrToInt(Copy(Edit2.Text,1 ,2)); for i := a to b do begin if i = 1 then Memo1.Lines.Add(´01/01/2008 - 31/01/2008 - B´); if i = 2 then Memo1.Lines.Add(´01/02/2008 - 29/02/2008 - B´); if i = 3 then Memo1.Lines.Add(´01/03/2008 - 31/03/2008 - B´); if i = 4 then Memo1.Lines.Add(´01/04/2008 - 30/04/2008 - B´); end; end;
GOSTEI 0
Adriano_servitec
23/03/2008
Olá Martins, entendi, vou testar e depois falo o resultado, pois preciso vur num cyber para postar ...hehehehe
Abraços
T+
Abraços
T+
GOSTEI 0
Martins
23/03/2008
Olá Martins, entendi, vou testar e depois falo o resultado, pois preciso vur num cyber para postar ...hehehehe
Abraços
T+
Tranquilo [b:c62a9704b4]Adriano[/b:c62a9704b4], qualquer coisa, é só postar ok!
GOSTEI 0
Adriano_servitec
23/03/2008
[quote:0e945e526f=´Adriano_Servitec´]Olá Martins, entendi, vou testar e depois falo o resultado, pois preciso vur num cyber para postar ...hehehehe
Abraços
T+
Tranquilo [b:0e945e526f]Adriano[/b:0e945e526f], qualquer coisa, é só postar ok![/quote:0e945e526f]
Olá [b:0e945e526f]Martins[/b:0e945e526f], bom tá quase lá, o problema agora é se tiver datas entre anos diferentes tipo
01/2008 a 03/2009
Não estou sabendo como fazer
Olhe a procedure meio gambiarra que eu fiz
procedure TForm1.Button3Click(Sender: TObject);
var
f, i, dataini, datafin, anoini : integer;
vjan, vfev, vmar, vabr, vmai, vjun,
vjul, vago, vset, vout, vnov, vdez : String;
begin
{:Limpa as variaveis antes de começar novamente}
dataini := StrToInt(Copy(MaskEdit1.Text, 1, 2));
datafin := StrToInt(Copy(MaskEdit2.Text, 1, 2));
anoini := StrToInt(Copy(MaskEdit1.Text, 4, 7));
{:tem que limpar o memo fora do lacço FOR}
memo1.Clear;
{:Primeiro um laço num FOR dos meses}
for f := dataini to datafin do
begin
if f = 1 then
vjan := ´01/01/´+inttostr(anoini);
if f = 2 then
vfev := ´01/02/´+inttostr(anoini);
if f = 3 then
vmar := ´01/03/´+inttostr(anoini);
if f = 4 then
vabr := ´01/04/´+inttostr(anoini);
if f = 5 then
vmai := ´01/05/´+inttostr(anoini);
if f = 6 then
vjun := ´01/06/´+inttostr(anoini);
if f = 7 then
vjul := ´01/07/´+inttostr(anoini);
if f = 8 then
vago := ´01/08/´+inttostr(anoini);
if f = 9 then
vset := ´01/09/´+inttostr(anoini);
if f = 10 then
vout := ´01/10/´+inttostr(anoini);
if f = 11 then
vnov := ´01/11/´+inttostr(anoini);
if f = 12 then
vdez := ´01/12/´+inttostr(anoini);
end;
{:Depois um laço no FOR do resultado do maskedits}
for i := dataini to datafin do
begin
if i = 1 then
memo1.lines.add(vjan+´-´+DateToStr(EndOfTheMonth(strtodate(vJan)))+´ - B´);
if i = 2 then
memo1.Lines.add(vfev+´-´+DateToStr(EndOfTheMonth(strtodate(vFev)))+´ - B´);
if i = 3 then
memo1.lines.add(vmar+´-´+DateToStr(EndOfTheMonth(strtodate(vMar)))+´ - B´);
if i = 4 then
memo1.lines.add(vabr+´-´+DateToStr(EndOfTheMonth(strtodate(vabr)))+´ - B´);
if i = 5 then
memo1.Lines.add(vmai+´-´+DateToStr(EndOfTheMonth(strtodate(vmai)))+´ - B´);
if i = 6 then
memo1.lines.add(vjun+´-´+DateToStr(EndOfTheMonth(strtodate(vjun)))+´ - B´);
if i = 7 then
memo1.lines.add(vjul+´-´+DateToStr(EndOfTheMonth(strtodate(vJul)))+´ - B´);
if i = 8 then
memo1.Lines.add(vago+´-´+DateToStr(EndOfTheMonth(strtodate(vago)))+´ - B´);
if i = 9 then
memo1.lines.add(vset+´-´+DateToStr(EndOfTheMonth(strtodate(vset)))+´ - B´);
if i = 10 then
memo1.lines.add(vout+´-´+DateToStr(EndOfTheMonth(strtodate(vout)))+´ - B´);
if i = 11 then
memo1.Lines.add(vnov+´-´+DateToStr(EndOfTheMonth(strtodate(vnov)))+´ - B´);
if i = 12 then
memo1.lines.add(vdez+´-´+DateToStr(EndOfTheMonth(strtodate(vdez)))+´ - B´);
end;
end;Mais não esta ainda 100¬
Valeu amigo
GOSTEI 0
José Henrique
23/03/2008
Adriano,
Vamos de novo
txtDtIni e txtDtFim são maskedits que recebem o mês e o ano.
Vamos de novo
txtDtIni e txtDtFim são maskedits que recebem o mês e o ano.
procedure TForm1.Button1Click(Sender: TObject); var dtMesRefFim, dtMesIni, dtMesFim : TDateTime; strRes : string; begin dtMesIni := StrToDate(´01/´ + txtDtIni.EditText); dtMesRefFim := EndOfTheMonth(StrToDate(´01/´ + txtDtFim.EditText)); Memo1.Clear; repeat dtMesFim := EndOfTheMonth(dtMesIni); Memo1.Lines.Add(DateToStr(dtMesIni) + ´ - ´ + DateToStr(dtMesFim) + ´ - B´); dtMesIni := dtMesFim + 1; until (dtMesIni > dtMesRefFim); end;
GOSTEI 0
Emerson Nascimento
23/03/2008
o José Herique matou a pau!!!
eu só trocaria o DateToStr por FormatDateTime:
eu só trocaria o DateToStr por FormatDateTime:
procedure TForm1.Button1Click(Sender: TObject); var dtMesRefFim, dtMesIni, dtMesFim : TDateTime; strRes : string; begin dtMesIni := StartOfTheMonth(StrToDate(MaskEdit1.Text)); dtMesRefFim := EndOfTheMonth(StrToDate(MaskEdit2.Text)); Memo1.Clear; repeat dtMesFim := EndOfTheMonth(dtMesIni); Memo1.Lines.Add( FormatDateTime(´dd/mm/yyyy´,dtMesIni) + ´ - ´ + FormatDateTime(´dd/mm/yyyy´,dtMesFim) + ´ - B´ ); dtMesIni := dtMesFim + 1; until (dtMesIni > dtMesRefFim); end;
GOSTEI 0
Martins
23/03/2008
o José Herique matou a pau!!!
eu só trocaria o DateToStr por FormatDateTime:
procedure TForm1.Button1Click(Sender: TObject); var dtMesRefFim, dtMesIni, dtMesFim : TDateTime; strRes : string; begin dtMesIni := StartOfTheMonth(StrToDate(MaskEdit1.Text)); dtMesRefFim := EndOfTheMonth(StrToDate(MaskEdit2.Text)); Memo1.Clear; repeat dtMesFim := EndOfTheMonth(dtMesIni); Memo1.Lines.Add( FormatDateTime(´dd/mm/yyyy´,dtMesIni) + ´ - ´ + FormatDateTime(´dd/mm/yyyy´,dtMesFim) + ´ - B´ ); dtMesIni := dtMesFim + 1; until (dtMesIni > dtMesRefFim); end;
Esse código aqui não compilei ainda mas me parece muito funcional, valew [b:7a60bce8d7]Emerson.en[/b:7a60bce8d7], [b:7a60bce8d7]José Henrique[/b:7a60bce8d7] seu código tb ficou muito bom.
Ops! lembrando que vc vai ter q declarar a unit [b:7a60bce8d7]DateUtils[/b:7a60bce8d7] caso não esteja declarada, pq acredito q as funções [b:7a60bce8d7]StartOfTheMonth[/b:7a60bce8d7] e [b:7a60bce8d7]EndOfTheMonth[/b:7a60bce8d7] pertençam a ela.
Boa sorte e bons códigos.
GOSTEI 0
Adriano_servitec
23/03/2008
Olá pessoal, obrigado por responder, vou testar estes códigos ai tambem, pq tentei com o MonthsBetween, mais não deu certo para o que eu preciso, olhem.
E o help do MontsBetween
Bom vou testar os códigos postados pra ver o resultado. Depois informo se funcionou.
Valeu pessoal, mais uma vez obrigado pela ajuda.
procedure TForm1.Button4Click(Sender: TObject);
var
i,
meses : Integer;
mesAnoIni,
mesAnoFim: String; // variáveis que conterão o mês e ano por ex. ´01/2008´
dias : Word; // apenas para descobrir quantos dias tem no mês
data,
dataInicial, dataFinal : TDateTime;
anos : integer;
anoini, anofin : TDateTime;
begin
mesAnoIni := maskedit1.text;
mesanofim := maskedit2.text;
dataInicial := StrToDate( ´01/´ + mesAnoIni );
dataFinal := StrToDate( ´01/´ + mesAnoFim );
meses := MonthsBetween( dataInicial, dataFinal ) +1;
{anoini := StrToDate( ´01/´ + mesAnoIni );
anoFin := StrToDate( ´01/´ + mesAnoFim );
anos := YearsBetween(anoini, anofin);
meses := StrToInt(Copy(MaskEdit2.Text, 1, 2)) - StrToInt(Copy(MaskEdit1.Text, 1, 2)) + 1;
anos := YearsBetween(anoini, anofin);}
label3.caption := IntToStr(meses);
{:tem que limpar o memo fora do laço FOR}
memo1.Clear;
for i := 1 to meses do
begin
memo1.Lines.Add( DateToStr( dataInicial ) + ´-´ + DateToStr( EndOfTheMonth( dataInicial )) + ´-B´ );
dias := DaysInMonth( dataInicial );
dataInicial := IncDay( dataInicial, dias );
end;
end;E o help do MontsBetween
MonthsBetween Routine
Returns the approximate number of months between two specified TDateTime values.
Unit
DateUtils
Syntax
[Delphi] function MonthsBetween(const ANow: TDateTime; const AThen: TDateTime): Integer;
Description
Call MonthsBetween to obtain the difference, in months, between two TDateTime values.
Because months are not all the same length, MonthsBetween returns an approximation
based on an assumption of 30.4375 days per month. Fractional months are not counted.
Thus, for example, MonthsBetween reports the difference between Feb 1 and Mar 1 as 0.
Bom vou testar os códigos postados pra ver o resultado. Depois informo se funcionou.
Valeu pessoal, mais uma vez obrigado pela ajuda.
GOSTEI 0
Adriano_servitec
23/03/2008
Perfeito o código, mais pra ficar 100¬ gostaria de saber se tem como eu contar a quantidade que vem no listbox
Exemplo
se no maskedit colocar 01/2008 a 04/2008
vai mostrar assim no listbox
01/01/2008 - 31/01/2008 - B
01/02/2008 - 29/02/2008 - B
01/03/2008 - 31/03/2008 - B
01/04/2008 - 30/04/2008 - B
Então gostaria de saber como faço para contar o total destes 4 meses e jogar num edit por exemplo
edttotal.text := inttostr(vartotal);
vartotal seria uma variavel
É só um exemplo
no caso se tiver desdobrado 23 meses por exemplo queria que aparecesse no edit 23.
Bom é + ou - isso que eu preciso.
Valeu pessoal
Exemplo
se no maskedit colocar 01/2008 a 04/2008
vai mostrar assim no listbox
01/01/2008 - 31/01/2008 - B
01/02/2008 - 29/02/2008 - B
01/03/2008 - 31/03/2008 - B
01/04/2008 - 30/04/2008 - B
Então gostaria de saber como faço para contar o total destes 4 meses e jogar num edit por exemplo
edttotal.text := inttostr(vartotal);
vartotal seria uma variavel
É só um exemplo
no caso se tiver desdobrado 23 meses por exemplo queria que aparecesse no edit 23.
Bom é + ou - isso que eu preciso.
Valeu pessoal
GOSTEI 0
Adriano_servitec
23/03/2008
Há, sobre este post podem esquecer, ficou certinho do modo que vcs postaram aqui.
Bom vou testar os códigos postados pra ver o resultado. Depois informo se funcionou.
Valeu pessoal, mais uma vez obrigado pela ajuda.[/quote:1a9db5ab2a]
Olá pessoal, obrigado por responder, vou testar estes códigos ai tambem, pq tentei com o MonthsBetween, mais não deu certo para o que eu preciso, olhem.
E o help do MontsBetween
[quote:1a9db5ab2a]MonthsBetween Routine
Returns the approximate number of months between two specified TDateTime values.
Unit
DateUtils
Syntax
[Delphi] function MonthsBetween(const ANow: TDateTime; const AThen: TDateTime): Integer;
Description
Call MonthsBetween to obtain the difference, in months, between two TDateTime values.
Because months are not all the same length, MonthsBetween returns an approximation
based on an assumption of 30.4375 days per month. Fractional months are not counted.
Thus, for example, MonthsBetween reports the difference between Feb 1 and Mar 1 as 0.
procedure TForm1.Button4Click(Sender: TObject);
var
i,
meses : Integer;
mesAnoIni,
mesAnoFim: String; // variáveis que conterão o mês e ano por ex. ´01/2008´
dias : Word; // apenas para descobrir quantos dias tem no mês
data,
dataInicial, dataFinal : TDateTime;
anos : integer;
anoini, anofin : TDateTime;
begin
mesAnoIni := maskedit1.text;
mesanofim := maskedit2.text;
dataInicial := StrToDate( ´01/´ + mesAnoIni );
dataFinal := StrToDate( ´01/´ + mesAnoFim );
meses := MonthsBetween( dataInicial, dataFinal ) +1;
{anoini := StrToDate( ´01/´ + mesAnoIni );
anoFin := StrToDate( ´01/´ + mesAnoFim );
anos := YearsBetween(anoini, anofin);
meses := StrToInt(Copy(MaskEdit2.Text, 1, 2)) - StrToInt(Copy(MaskEdit1.Text, 1, 2)) + 1;
anos := YearsBetween(anoini, anofin);}
label3.caption := IntToStr(meses);
{:tem que limpar o memo fora do laço FOR}
memo1.Clear;
for i := 1 to meses do
begin
memo1.Lines.Add( DateToStr( dataInicial ) + ´-´ + DateToStr( EndOfTheMonth( dataInicial )) + ´-B´ );
dias := DaysInMonth( dataInicial );
dataInicial := IncDay( dataInicial, dias );
end;
end;Bom vou testar os códigos postados pra ver o resultado. Depois informo se funcionou.
Valeu pessoal, mais uma vez obrigado pela ajuda.[/quote:1a9db5ab2a]
GOSTEI 0
Martins
23/03/2008
Perfeito o código, mais pra ficar 100¬ gostaria de saber se tem como eu contar a quantidade que vem no listbox
Exemplo
se no maskedit colocar 01/2008 a 04/2008
vai mostrar assim no listbox
01/01/2008 - 31/01/2008 - B
01/02/2008 - 29/02/2008 - B
01/03/2008 - 31/03/2008 - B
01/04/2008 - 30/04/2008 - B
Então gostaria de saber como faço para contar o total destes 4 meses e jogar num edit por exemplo
edttotal.text := inttostr(vartotal);
vartotal seria uma variavel
É só um exemplo
no caso se tiver desdobrado 23 meses por exemplo queria que aparecesse no edit 23.
Bom é + ou - isso que eu preciso.
Valeu pessoal
Tenta isso aqui.
var vartotal :Integer; begin ... vartotal := ListBox1.Items.Count; edttotal.text := IntToStr(vartotal); ... end;
Boa sorte e bons códigos!
GOSTEI 0
Adriano_servitec
23/03/2008
[quote:003df20245=´Adriano_Servitec´]Perfeito o código, mais pra ficar 100¬ gostaria de saber se tem como eu contar a quantidade que vem no listbox
Exemplo
se no maskedit colocar 01/2008 a 04/2008
vai mostrar assim no listbox
01/01/2008 - 31/01/2008 - B
01/02/2008 - 29/02/2008 - B
01/03/2008 - 31/03/2008 - B
01/04/2008 - 30/04/2008 - B
Então gostaria de saber como faço para contar o total destes 4 meses e jogar num edit por exemplo
edttotal.text := inttostr(vartotal);
vartotal seria uma variavel
É só um exemplo
no caso se tiver desdobrado 23 meses por exemplo queria que aparecesse no edit 23.
Bom é + ou - isso que eu preciso.
Valeu pessoal
Tenta isso aqui.
var vartotal :Integer; begin ... vartotal := ListBox1.Items.Count; edttotal.text := IntToStr(vartotal); ... end;
Boa sorte e bons códigos![/quote:003df20245]
Valeu Martins, muito obrigado perfeito.
Pessoal valeu pela ajuda neste post....Caso encerrado. :D
GOSTEI 0