Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

flavioavilela

[Resolvido] somar número de dias a uma data

Recommended Posts

galera, eu novamente precisndo da ajuda de vcs... é o seguinte:

estou tentando fazer o seguinte: tenho uma rotina que gera parcelas, está gerando belezinha, as parcelas saem todas e tal... só que, eu não estou conseguindo gerar as datas certas de vencimento... por exemplo: eu tenho uma caixa de texto que informo quantas parcelas que é o boleto e outra caixa de texto que informo de quantos em quantos dias é pra pagar, mas não estou conseguindo gerar essas datas em todas as parcelas... o meu código é mais ou menos assim:

for i := 1 to StrtoInt(EdtParcela.Text) do
				with dm.SPParcelas_Contas_Pagar do
				  begin
					Params[1].AsInteger:= 1;
					Params[2].AsInteger:= StrtoInt(EdtCodigo.Text);
					Params[3].AsString:= EdtN_Nota_Fiscal.Text;
					Params[4].AsDateTime:= Strtodatetime(MEdtData_Compra.Text);
					Params[5].AsDateTime:= incday(StrtoDateTime(MEdtData_Vencimento), StrtoInt(EdtDias.Text));
					Params[6].AsInteger:= i;
					if (EdtParcela.Text = '1') then
					  Params[7].AsString:= 'Parcela Única'
					else
					  Params[7].AsString:= 'Aberto';
					Params[8].AsFloat:= (StrtoFloat(EdtValor_Total.Text)/StrtoFloat(EdtParcela.Text));
					ExecProc;
				  end;
alguém pode me ajudar? http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

O comando IncDay aparenta estar correto, acho somente que você precisa criar uma variável para guardar a última data de vencimento, para que ela seja incrementada na próxima, algo como:

 

ultDtVencto:=MEdtData_Vencimento;
for i := 1 to StrtoInt(EdtParcela.Text) do
	begin
	with dm.SPParcelas_Contas_Pagar do
		begin
		Params[1].AsInteger:= 1;
		Params[2].AsInteger:= StrtoInt(EdtCodigo.Text);
		Params[3].AsString:= EdtN_Nota_Fiscal.Text;
		Params[4].AsDateTime:= Strtodatetime(MEdtData_Compra.Text);
		ultDtVencto:=DateToStr(incday(StrtoDateTime(ultDtVencto), StrtoInt(EdtDias.Text)));
		Params[5].AsDateTime:=StrToDate(ultDtVencto);
		Params[6].AsInteger:= i;
		if (EdtParcela.Text = '1') then
			Params[7].AsString:= 'Parcela Única'
		else
			Params[7].AsString:= 'Aberto';
		Params[8].AsFloat:= (StrtoFloat(EdtValor_Total.Text)/StrtoFloat(EdtParcela.Text));
		ExecProc;
		end;
	end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá marcio.. vlw demais pela dica... funcionou as datas agora... só tem um probleminha: eu informo a data de vencimento da primeira parcela, certo? então, ele deveria gerar pra mim as parcelas, e a data de vencimento da primeira sendo a que eu informei na caixa de texto... só que, quando gera as parcelas, a primeira data de vencimento já é somada com os dias que eu quero, saca? conclusão: eu preciso que, assim que a pessoa informar a data de vencimento lá na janela, quando mandar gerar as parcelas, a primeira data de vencimento ser a que eu informei na caixa texto mesmo, e a partir da segunda, ser somado com a quantidade que eu informar....... oq pode ser feito nisso???

 

e mais uma vez, obrigado pela sua atenção...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, usando um pouquinho de lógica :P basta trocar de posição a atribuição de valores, ficando:

 

ultDtVencto:=MEdtData_Vencimento;
for i := 1 to StrtoInt(EdtParcela.Text) do
	begin
	with dm.SPParcelas_Contas_Pagar do
		begin
		Params[1].AsInteger:= 1;
		Params[2].AsInteger:= StrtoInt(EdtCodigo.Text);
		Params[3].AsString:= EdtN_Nota_Fiscal.Text;
		Params[4].AsDateTime:= Strtodatetime(MEdtData_Compra.Text);		
		Params[5].AsDateTime:=StrToDate(ultDtVencto);
		ultDtVencto:=DateToStr(incday(StrtoDateTime(ultDtVencto), StrtoInt(EdtDias.Text)));
		Params[6].AsInteger:= i;
		if (EdtParcela.Text = '1') then
			Params[7].AsString:= 'Parcela Única'
		else
			Params[7].AsString:= 'Aberto';
		Params[8].AsFloat:= (StrtoFloat(EdtValor_Total.Text)/StrtoFloat(EdtParcela.Text));
		ExecProc;
		end;
	end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

kra, te confesso que sou ruim tanto na programação quanto na lógica hehehehe... funcionou perfeitamente....

só uma outra dúvida: na minha janela de lançar contas a pagar, tem lá o valor da nota.... e tem as parcelas.... se eu coloco o valor da nota de R$1000,00 e dividido em 3 parcelas, ele grava no banco 333,33333333333333333333..... como faço pra limitar só 333,33???????? ou seja, somente duas casas decimais...??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso você pode limitar na criação do campo, dependendo da base de dados você pode criar o campo com somente duas casas decimais, ou então truncar para duas casas decimais...

Exemplo de função:

 

 

function TruncarValor(vlr: Extended): Extended;
var
	aux: string;
begin
aux:=FloatToStrF(vlr,ffFixed,15,10);
aux:=copy(aux,1,length(aux) - 8);
TruncarValor:=StrToFloat(aux);
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.