Wilke1 0 Denunciar post Postado Novembro 11, 2006 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
thalesoli 0 Denunciar post Postado Novembro 11, 2006 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
marcio.theis 3 Denunciar post Postado Novembro 12, 2006 Teria como você colocar a forma que esta criando e cálculando no seu fonte ? Compartilhar este post Link para o post Compartilhar em outros sites
Pantoja 5 Denunciar post Postado Novembro 14, 2006 mas cara você criou ela como variant?ou esse array ai foi criado como Real mesmo? Compartilhar este post Link para o post Compartilhar em outros sites
thalesoli 0 Denunciar post Postado Novembro 14, 2006 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
Pantoja 5 Denunciar post Postado Novembro 14, 2006 Variant é um tipo de variavel q aceita qualquer valorde word a objetosentao você q determina o q vai estar lafalowsim 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
thalesoli 0 Denunciar post Postado Novembro 14, 2006 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
Wilke1 0 Denunciar post Postado Novembro 14, 2006 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 parcelaseria 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
marcio.theis 3 Denunciar post Postado Novembro 14, 2006 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... Compartilhar este post Link para o post Compartilhar em outros sites
Wilke1 0 Denunciar post Postado Novembro 14, 2006 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
Wilke1 0 Denunciar post Postado Novembro 17, 2006 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