Fórum Dúvida função de extenso #297022

26/09/2005

0

tenho 2 funções que fazem praticamente a mesma coisa só que uma pega uma data de uma tabela e outra pega a data do dia de hoje..

a função do dia de hoje...

var
  meses: array[1..12] of String;
  dia, mes, ano: Word;
begin
  meses[1]:= ´Janeiro´;
  meses[2]:= ´Fevereiro´;
  meses[3]:= ´Março´;
  meses[4]:= ´Abril´;
  meses[5]:= ´Maio´;
  meses[6]:= ´Junho´;
  meses[7]:= ´Julho´;
  meses[8]:= ´Agosto´;
  meses[9]:= ´Setembro´;
  meses[10]:= ´Outubro´;
  meses[11]:= ´Novembro´;
  meses[12]:= ´Dezembro´;
  DecodeDate(DATE,ano,mes,dia);
  QRLabel15.Caption :=  INTTOSTR(dia)+´ dias, do mês de ´+meses[mes]+´ do ano de ´+INTTOSTR(ano);


e a função do dia registrado na tabela..


var
  meses: array[1..12] of String;
  Present: TDateTime;
  dia, mes, ano: Word;
begin
  meses[1]:= ´Janeiro´;
  meses[2]:= ´Fevereiro´;
  meses[3]:= ´Março´;
  meses[4]:= ´Abril´;
  meses[5]:= ´Maio´;
  meses[6]:= ´Junho´;
  meses[7]:= ´Julho´;
  meses[8]:= ´Agosto´;
  meses[9]:= ´Setembro´;
  meses[10]:= ´Outubro´;
  meses[11]:= ´Novembro´;
  meses[12]:= ´Dezembro´;
  Present:= Query1Vencimento.value;
  QRLabel16.Caption :=  INTTOSTR(dia)+´ dias, do mês de ´+meses[mes]+´ do ano de ´+INTTOSTR(ano);



Tava querendo saber se tem como incorporar tudo em uma função ...para facilitar a localização do código posteriormente..vlw..t+


Gigatel

Gigatel

Responder

Posts

26/09/2005

Rjun

function DataPorExtenso(Data: TDateTime): string;
var
  Meses: Array[1..12] of string;  
  Ano, Mes, Dia: Integer;
begin
  meses[1] := ´Janeiro´; 
  meses[2] := ´Fevereiro´; 
  meses[3] := ´Março´; 
  meses[4] := ´Abril´; 
  meses[5] := ´Maio´; 
  meses[6] := ´Junho´; 
  meses[7] := ´Julho´; 
  meses[8] := ´Agosto´; 
  meses[9] := ´Setembro´; 
  meses[10] := ´Outubro´; 
  meses[11] := ´Novembro´; 
  meses[12] := ´Dezembro´; 
  DecodeDate(Data, ano, mes, dia); 
  result := IntToStr(dia) + ´ dias, do mês de ´ + meses[mes]+´ do ano de ´ + IntToStr(ano); 
end;



Responder

Gostei + 0

26/09/2005

Gigatel

esquecí deste detalhe..
DecodeDate(Present,ano,mes,dia);


aí muda um pouco...


Responder

Gostei + 0

26/09/2005

Gigatel

function DataPorExtenso(Data: TDateTime): string;
var
  Meses: Array[1..12] of string;  
  Ano, Mes, Dia: Integer;
begin
  meses[1] := ´Janeiro´; 
  meses[2] := ´Fevereiro´; 
  meses[3] := ´Março´; 
  meses[4] := ´Abril´; 
  meses[5] := ´Maio´; 
  meses[6] := ´Junho´; 
  meses[7] := ´Julho´; 
  meses[8] := ´Agosto´; 
  meses[9] := ´Setembro´; 
  meses[10] := ´Outubro´; 
  meses[11] := ´Novembro´; 
  meses[12] := ´Dezembro´; 
  DecodeDate(Data, ano, mes, dia); 
  result := IntToStr(dia) + ´ dias, do mês de ´ + meses[mes]+´ do ano de ´ + IntToStr(ano); 
end;


este result é uma variável ?


Responder

Gostei + 0

26/09/2005

Marlon Spiess

Sim o retorno é uma variável, é uma string com o texto, vc chama a função passando um field ou uma veriável do tipo data.


Responder

Gostei + 0

26/09/2005

Gigatel

A questão é esta..como associar estas duas funções..



DecodeDate(Data, ano, mes, dia);


e este

DecodeDate(Present,ano,mes,dia); 


é só mesmo uma questão de num ficar repetindo muito o código...


Responder

Gostei + 0

26/09/2005

Rjun

Basta você passar o parâmetro que você deseja.

DataPorExtenso(Data) ;

ou
DataPorExtenso(Present) ;



Responder

Gostei + 0

26/09/2005

Gigatel

Basta você passar o parâmetro que você deseja.
DataPorExtenso(Data) ;
ou
DataPorExtenso(Present) ;


Peguei a idéia, más acho que vc num captou o esquema não...função q vc fez é somente para a data de hoje, eu presciso que a função funcione tanto para o dia de hoje ( dia da emissão da nota ) e tbm uma vindo de um banco de dados ( pois são notas, e são gravados datas diferentes ) e ambas funciona simultaniamente...pois um vai para um lugar e a outra va pa outra...

Aki a função do dia de hoje
QRLabel15.Caption :=  INTTOSTR(dia)+´ dias, do mês de ´+meses[mes]+´ do ano de ´+INTTOSTR(ano);



Aki a função do banco de dados..

QRLabel21.Caption:=  INTTOSTR(dia)+´ de ´+meses[mes]+´ de ´+INTTOSTR(ano);



...ou entaum quem num entendeu fui eu... e tem mais dá este erro na função..
[Error] Unit42.pas(146): Types of actual and formal var parameters must be identical


Desculpe o encomodo.. to trabalhando no programa desde ontem, fiz um monte de coisa..acho que num estou raciocinado direito...hehheeh é osso..


Responder

Gostei + 0

26/09/2005

Rjun

Gigatel, no parâmetro você passa a data que você quer o extenso. Tanto faz se for a data de hoje, de ontem, do banco de dados....basta você passar uma data para a função que ela gera o extenso.

Eu não tinha reparado que os textos são diferentes. O problema é esse?


Responder

Gostei + 0

26/09/2005

Marlon Spiess

Caro colega, vamos por partes, o companheiro Rjun escreveu uma function, vc pode definila no form local (do relatório) ou eu outro .pas onde vc tenha outras funções padrão. Portanto, considerando q a mesma está definida e criada, basta pra vc fazer o seguinte:

QRLabel15.Caption := DataPorExtenso(data);
// onde data é uma variavel ou field de table do tipo data TDate or TDateTime

QRLabel21.Caption := DataPorExtenso(Present);


Responder

Gostei + 0

26/09/2005

Gigatel

Gigatel, no parâmetro você passa a data que você quer o extenso. Tanto faz se for a data de hoje, de ontem, do banco de dados....basta você passar uma data para a função que ela gera o extenso. Eu não tinha reparado que os textos são diferentes. O problema é esse?


São diferentes e funciona ao mesmo tempo...prescisava de algo depois de pronto igual a isto Label1.caption := A e Label2.caption := B..num, pode ser naquela primeira função... algo assim
var
  meses: array[1..12] of String;
  DataBD: TDateTime;
  dia, mes, ano: Word;
begin
  meses[1]:= ´Janeiro´;
  meses[2]:= ´Fevereiro´;
  meses[3]:= ´Março´;
  meses[4]:= ´Abril´;
  meses[5]:= ´Maio´;
  meses[6]:= ´Junho´;
  meses[7]:= ´Julho´;
  meses[8]:= ´Agosto´;
  meses[9]:= ´Setembro´;
  meses[10]:= ´Outubro´;
  meses[11]:= ´Novembro´;
  meses[12]:= ´Dezembro´;
  DecodeDate(DATE,ano,mes,dia);
  DecodeDate(DataBD,ano,mes,dia);
 QRLabel15.Caption := DataPorExtenso(Data) ;
  QRLabel15.Caption := result.DataPorExtenso(Present) ;
  DataBD:= StrToDate(BD_CONT_RECGS_COR_DATA_VENC.Value);
  QRLabel15.Caption :=  INTTOSTR(dia)+´ dias, do mês de ´+meses[mes]+´ do ano de ´+INTTOSTR(ano);



Algo parecido isto só vai funcionar no evento QuickRep1BeforePrint do qreport mesmo...


Responder

Gostei + 0

26/09/2005

Gigatel

[quote:768c1ec07e=´Marlon Henrique Spiess´]Caro colega, vamos por partes, o companheiro Rjun escreveu uma function, vc pode definila no form local (do relatório) ou eu outro .pas onde vc tenha outras funções padrão. Portanto, considerando q a mesma está definida e criada, basta pra vc fazer o seguinte:

QRLabel15.Caption := DataPorExtenso(data);
// onde data é uma variavel ou field de table do tipo data TDate or TDateTime

QRLabel21.Caption := DataPorExtenso(Present);[/quote:768c1ec07e]

entaum deixa fazer uns testes aki..


Responder

Gostei + 0

26/09/2005

Rjun

Pode ser assim, embora você acabe criando uma solução totalmente especifica, que só funciona nesse caso. Uma saida seria vc passar junto com a data, a mensagem, ficaria mais ou menos assim.

resourcestring
  Mensagem1 = ´ ¬d dias, do mês de ¬s do ano de ¬d´;
  Mensagem2 = ´ ¬d de ¬s de ¬d´;

function DataPorExtenso(Data: TDateTime; Mensagem: string): string; 
var 
  Meses: Array[1..12] of string;  
  Ano, Mes, Dia: Integer; 
begin 
  meses[1] := ´Janeiro´; 
  meses[2] := ´Fevereiro´; 
  meses[3] := ´Março´; 
  meses[4] := ´Abril´; 
  meses[5] := ´Maio´; 
  meses[6] := ´Junho´; 
  meses[7] := ´Julho´; 
  meses[8] := ´Agosto´; 
  meses[9] := ´Setembro´; 
  meses[10] := ´Outubro´; 
  meses[11] := ´Novembro´; 
  meses[12] := ´Dezembro´; 
  DecodeDate(Data, ano, mes, dia); 
  result := Format(Mensagem, [dia, mes, ano]);
end; 


Você chamaria as funções da seguinte forma:

QRLabel15.Caption :=  DataPorExtenso(Date, Mensagem1);


e

QRLabel21.Caption:=  DataPorExtenso(Present, Mensagem2);


Veja que dessa forma, você pode usar a função sempre que precisar.


Responder

Gostei + 0

26/09/2005

Gigatel

Fiz o seguinte..
 QRLabel27.Caption := DataPorExtenso(data);

deu este erro..
[Error] Unit42.pas(164): Undeclared identifier: ´data´


blzz


Responder

Gostei + 0

26/09/2005

Rjun

Só uma correção, no retorno da função:

result := Format(Mensagem, [dia, meses[mes], ano]); 



Responder

Gostei + 0

26/09/2005

Gigatel

Pode ser assim, embora você acabe criando uma solução totalmente especifica, que só funciona nesse caso. Uma saida seria vc passar junto com a data, a mensagem, ficaria mais ou menos assim.
resourcestring
  Mensagem1 = ´ ¬d dias, do mês de ¬s do ano de ¬d´;
  Mensagem2 = ´ ¬d de ¬s de ¬d´;

function DataPorExtenso(Data: TDateTime; Mensagem: string): string; 
var 
  Meses: Array[1..12] of string;  
  Ano, Mes, Dia: Integer; 
begin 
  meses[1] := ´Janeiro´; 
  meses[2] := ´Fevereiro´; 
  meses[3] := ´Março´; 
  meses[4] := ´Abril´; 
  meses[5] := ´Maio´; 
  meses[6] := ´Junho´; 
  meses[7] := ´Julho´; 
  meses[8] := ´Agosto´; 
  meses[9] := ´Setembro´; 
  meses[10] := ´Outubro´; 
  meses[11] := ´Novembro´; 
  meses[12] := ´Dezembro´; 
  DecodeDate(Data, ano, mes, dia); 
  result := Format(Mensagem, [dia, mes, ano]);
end; 
Você chamaria as funções da seguinte forma:
QRLabel15.Caption :=  DataPorExtenso(Date, Mensagem1);
e
QRLabel21.Caption:=  DataPorExtenso(Present, Mensagem2);
Veja que dessa forma, você pode usar a função sempre que precisar.


Cara valeu pelo apoio..achei que era burrice minha más é meio complicado mesmo..más vou testar e posto o resultado..vlw..


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar