Ir para conteúdo

POWERED BY:

Arquivado

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

Wilke1

tem como mudar uma variavel do tipo arraydereal

Recommended Posts

ola pessoaltem como eu mudar a varialvel do tipo tarraydereal? e que ela receber a quantidade de parcelas ,e agora eu preciso dividir ela ,mas dar error de converssão de variant desde ja agradeço ajuda de voces :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

pq você não declara o array do tipo Variant... assim você pode utiliza-lo do tipo q quiser?falow

Compartilhar este post


Link para o post
Compartilhar em outros sites

Variant é um tipo de variavel q aceita qualquer valorde word a objetosentao você q determina o q vai estar lafalow

Compartilhar este post


Link para o post
Compartilhar em outros sites

Variant é um tipo de variavel q aceita qualquer valorde word a objetosentao você q determina o q vai estar lafalow

sim sim Thales, mas queria saber ao certo o q o membro ali fez entende? se ele usou uma varialvel deste tipo.. parece q sim...e Wilke, tente dar mais info aee pra facilitar amigo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Complentando entao a explicacao

 

o tipo variant é uma variavel que pode assumir a forma de armazenamento que for necessário, desde o tipo mais simples word que armazena de 0 a 254 ate uma varialvel de armazene objetos.

 

no seu caso você esta usando um array de variant no qual você armazenou um determinado valor. esse valor para ser convertido no tipo real deve seguir a seguinte regra:

 

- ser um valor inteiro ou seja, um número positivo ou negativo;

- ser um valor real e que o simbolo de casa decimal seja igual ao encontrado na variavel DecimalSeparator. este caracter é o mesmo q esta configurado no windows. tambem nao pode existir separadores de milhares.

 

ai você pode forçar o typecast(mudança de tipo) da seguinte maneira

 

varr: real;v: array[1..2] of variant;begin v[1] := '1,2'; v[2] := 5; r := Real(v[1]); r := Real(v[2]);end;
espero ter ajudado...

 

falow

 

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Complentando entao a explicacao

 

o tipo variant é uma variavel que pode assumir a forma de armazenamento que for necessário, desde o tipo mais simples word que armazena de 0 a 254 ate uma varialvel de armazene objetos.

 

no seu caso você esta usando um array de variant no qual você armazenou um determinado valor. esse valor para ser convertido no tipo real deve seguir a seguinte regra:

 

- ser um valor inteiro ou seja, um número positivo ou negativo;

- ser um valor real e que o simbolo de casa decimal seja igual ao encontrado na variavel DecimalSeparator. este caracter é o mesmo q esta configurado no windows. tambem nao pode existir separadores de milhares.

 

ai você pode forçar o typecast(mudança de tipo) da seguinte maneira

 

varr: real;v: array[1..2] of variant;begin v[1] := '1,2'; v[2] := 5; r := Real(v[1]); r := Real(v[2]);end;
espero ter ajudado...

 

falow

 

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

amigo e que eu tó querendo colocar a diferença na ultima parcela

seria assim

for x:= 0 to parcela1-1 do

total:=total+parcdiv;

parcela1:=parcdiv;

difi:=roundto(entrada-parcdiv*parcpend,-2);

if total < entrada then

parcela1:=parcdiv+difi;

esse parcela1 era do tipo arrayde real, ai agora ela variant

so que eu não tó consiguindo coocar a diferença na ultima parcela

eu agradeço ajuda de voces :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você puder, coloca exatamente o que o seu fonte faz, no caso desde a declaração das variáveis até o end final deste procedimento...

varI: SmallInt;parcel:integer;parc,liquida,parcelado,dif:real;//parcela1:tarraydereal;parcela1:variant;w,x,y:integer;rest:string;modo:TFpuroundingmode;vData, data:tdatetime;data1,data2:tdatetime;dia,NumDeParcelas,parcpend,total,tot:integer;pergunta:dword;parcdiv,vltotal,valorparcelas,valorentrada,parcquitadas,vlrestentr,vlproxparc,calculo,restante,entrada,vlrestante,difi:variant;begin	 data1:=dbedit7.Field.AsDateTime;	 data2:=dbedit7.Field.AsDateTime;	 dia:=strtoint(diasint.Text);	 parcel:=strtoint(editnuparcela.Text);	 editparcel.Value:=strtoint(editnuparcela.Text);	 NumDeParcelas:= StrToInt(EditNuParcela.text);	 MaskEditVencimento.Enabled := True;	 MaskEditVencimento.Color := clWhite;	 if strtoint(EditNuParcela.text) = 1 then begin		EditValorParcela.Value := QryFiscal['VL_NF'];		EditValorParcela.Enabled := False;		EditValorParcela.Color := clBtnFace;		maskeditvencimento.Text:= qryfiscal.FieldByName('dt_emissao_nf').Value+30;		 Qrymovpagar.Open;		 Qrymovpagar.Insert;		 Qrymovpagar.FieldByName('cd_parcela').Value:='1';		 Qrymovpagar.FieldByName('vl_parcela').Value:= Qryfiscal.FieldByName('vl_nf').Value;		 vData :=dbedit7.Field.AsDateTime;		 if dia > 0 then		 Qrymovpagar.FieldByName('dt_vencimento').Value:=incday(vData,dia)		 else		 Qrymovpagar.FieldByName('dt_vencimento').Value:=maskeditvencimento.Text;		 editnuparcela.Enabled:=false;		 diasint.Enabled:=false;		 diasint.Text:='0';		 editnuparcela.Text:='0';		 Maskeditvencimento.Enabled:=false;		 editparcela.Enabled:=false;	   end else begin	   if (application.MessageBox('Deseja Realmente Formar as parcelas com essas condições.''?','Confirme',mb_yesno+mb_iconquestion)=idyes) then begin		maskeditvencimento.Text:=qryfiscal.FieldByName('dt_emissao_nf').Value+30;		EditValorParcela.Enabled := True;		EditValorParcela.Color := clWhite;		modo:=getroundmode;		setroundmode(rmtruncate);		if checkliquida.Checked=true then begin		   try		   parcelado:=roundto(Qryfiscal.FieldByName('vl_nf').Value/editparcel.Value,-2);		   valorentrada:=editliquida.Value;		   valorparcelas:=parcelado;		   parcquitadas:= valorentrada div valorparcelas;			  if parcquitadas >=1 then			  else			  parcquitadas:=1;			  vltotal :=Qryfiscal.FieldByName('vl_nf').Value;			  parcpend:=numdeparcelas-parcquitadas;			  entrada:= vltotal-valorentrada;			  restante:= roundto(entrada/parcpend,-2);			  vlrestante:= valorentrada mod restante;			  parcela1:=VarArrayCreate([1,100],VarOleStr);			  parcela1:=numdeparcelas;			  vlproxparc:= restante-vlrestante;			   parcela1:=numdeparcelas-1;			   parcdiv:= roundto(entrada/parcela1,-2);			 total:=0;			 for  x:= 0 to parcela1-1 do					 parcela1:=parcdiv;					 difi:=roundto(entrada-parcdiv*parcpend,-2);					 parcela1:=parcdiv+difi;					 finally					  setroundmode(modo);		   for w := 0 to numdeparcelas-1  do begin				  Qrymovpagar.Open;				  Qrymovpagar.Insert;				  Qrymovpagar.FieldByName('cd_parcela').Value:='0'+inttostr(w+1)+'/'+'0'+inttostr(w+1);			 if   Qrymovpagar.FieldByName('cd_parcela').Value='01/01' then begin				  Qrymovpagar.FieldByName('dt_vencimento').Value:=dbedit7.Field.Text;			 end;			 if   Qrymovpagar.FieldByName('cd_parcela').Value='01/01' then begin				  Qrymovpagar.FieldByName('dt_liquidacao').Value:=dbedit7.Field.Text;			 end;			 if   Qrymovpagar.FieldByName('cd_parcela').Value='01/01' then begin				  Qrypagar.FieldByName('fl_posicao').AsString:='L';			 end;				   Qrymovpagar.fieldbyname('vl_parcela').Value:=parcela1;			 if	Qrymovpagar.FieldByName('cd_parcela').Value='01/01' then				   Qrymovpagar.FieldByName('vl_parcela').Value:=valorentrada;			 if Qrymovpagar.FieldByName('cd_parcela').Value='010/010' then begin				Qrymovpagar.FieldByName('cd_parcela').Value:=''+inttostr(x+1)+'/'+''+inttostr(x+1);			 end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você puder, coloca exatamente o que o seu fonte faz, no caso desde a declaração das variáveis até o end final deste procedimento...

varI: SmallInt;parcel:integer;parc,liquida,parcelado,dif:real;//parcela1:tarraydereal;parcela1:variant;w,x,y:integer;rest:string;modo:TFpuroundingmode;vData, data:tdatetime;data1,data2:tdatetime;dia,NumDeParcelas,parcpend,total,tot:integer;pergunta:dword;parcdiv,vltotal,valorparcelas,valorentrada,parcquitadas,vlrestentr,vlproxparc,calculo,restante,entrada,vlrestante,difi:variant;begin	 data1:=dbedit7.Field.AsDateTime;	 data2:=dbedit7.Field.AsDateTime;	 dia:=strtoint(diasint.Text);	 parcel:=strtoint(editnuparcela.Text);	 editparcel.Value:=strtoint(editnuparcela.Text);	 NumDeParcelas:= StrToInt(EditNuParcela.text);	 MaskEditVencimento.Enabled := True;	 MaskEditVencimento.Color := clWhite;	 if strtoint(EditNuParcela.text) = 1 then begin		EditValorParcela.Value := QryFiscal['VL_NF'];		EditValorParcela.Enabled := False;		EditValorParcela.Color := clBtnFace;		maskeditvencimento.Text:= qryfiscal.FieldByName('dt_emissao_nf').Value+30;		 Qrymovpagar.Open;		 Qrymovpagar.Insert;		 Qrymovpagar.FieldByName('cd_parcela').Value:='1';		 Qrymovpagar.FieldByName('vl_parcela').Value:= Qryfiscal.FieldByName('vl_nf').Value;		 vData :=dbedit7.Field.AsDateTime;		 if dia > 0 then		 Qrymovpagar.FieldByName('dt_vencimento').Value:=incday(vData,dia)		 else		 Qrymovpagar.FieldByName('dt_vencimento').Value:=maskeditvencimento.Text;		 editnuparcela.Enabled:=false;		 diasint.Enabled:=false;		 diasint.Text:='0';		 editnuparcela.Text:='0';		 Maskeditvencimento.Enabled:=false;		 editparcela.Enabled:=false;	   end else begin	   if (application.MessageBox('Deseja Realmente Formar as parcelas com essas condições.''?','Confirme',mb_yesno+mb_iconquestion)=idyes) then begin		maskeditvencimento.Text:=qryfiscal.FieldByName('dt_emissao_nf').Value+30;		EditValorParcela.Enabled := True;		EditValorParcela.Color := clWhite;		modo:=getroundmode;		setroundmode(rmtruncate);		if checkliquida.Checked=true then begin		   try		   parcelado:=roundto(Qryfiscal.FieldByName('vl_nf').Value/editparcel.Value,-2);		   valorentrada:=editliquida.Value;		   valorparcelas:=parcelado;		   parcquitadas:= valorentrada div valorparcelas;			  if parcquitadas >=1 then			  else			  parcquitadas:=1;			  vltotal :=Qryfiscal.FieldByName('vl_nf').Value;			  parcpend:=numdeparcelas-parcquitadas;			  entrada:= vltotal-valorentrada;			  restante:= roundto(entrada/parcpend,-2);			  vlrestante:= valorentrada mod restante;			  parcela1:=VarArrayCreate([1,100],VarOleStr);			  parcela1:=numdeparcelas;			  vlproxparc:= restante-vlrestante;			   parcela1:=numdeparcelas-1;			   parcdiv:= roundto(entrada/parcela1,-2);			 total:=0;			 for  x:= 0 to parcela1-1 do					 parcela1:=parcdiv;					 difi:=roundto(entrada-parcdiv*parcpend,-2);					 parcela1:=parcdiv+difi;					 finally					  setroundmode(modo);		   for w := 0 to numdeparcelas-1  do begin				  Qrymovpagar.Open;				  Qrymovpagar.Insert;				  Qrymovpagar.FieldByName('cd_parcela').Value:='0'+inttostr(w+1)+'/'+'0'+inttostr(w+1);			 if   Qrymovpagar.FieldByName('cd_parcela').Value='01/01' then begin				  Qrymovpagar.FieldByName('dt_vencimento').Value:=dbedit7.Field.Text;			 end;			 if   Qrymovpagar.FieldByName('cd_parcela').Value='01/01' then begin				  Qrymovpagar.FieldByName('dt_liquidacao').Value:=dbedit7.Field.Text;			 end;			 if   Qrymovpagar.FieldByName('cd_parcela').Value='01/01' then begin				  Qrypagar.FieldByName('fl_posicao').AsString:='L';			 end;				   Qrymovpagar.fieldbyname('vl_parcela').Value:=parcela1;			 if	Qrymovpagar.FieldByName('cd_parcela').Value='01/01' then				   Qrymovpagar.FieldByName('vl_parcela').Value:=valorentrada;			 if Qrymovpagar.FieldByName('cd_parcela').Value='010/010' then begin				Qrymovpagar.FieldByName('cd_parcela').Value:=''+inttostr(x+1)+'/'+''+inttostr(x+1);			 end;
resolvidoobrigado pessoal

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.