Dúvida função de extenso
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...
e a função do dia registrado na tabela..
Tava querendo saber se tem como incorporar tudo em uma função ...para facilitar a localização do código posteriormente..vlw..t+
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
Curtidas 0
Respostas
Rjun
26/09/2005
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;
GOSTEI 0
Gigatel
26/09/2005
esquecí deste detalhe..
aí muda um pouco...
DecodeDate(Present,ano,mes,dia);
aí muda um pouco...
GOSTEI 0
Gigatel
26/09/2005
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 ?
GOSTEI 0
Marlon Spiess
26/09/2005
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.
GOSTEI 0
Gigatel
26/09/2005
A questão é esta..como associar estas duas funções..
e este
é só mesmo uma questão de num ficar repetindo muito o código...
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...
GOSTEI 0
Rjun
26/09/2005
Basta você passar o parâmetro que você deseja.
ou
DataPorExtenso(Data) ;
ou
DataPorExtenso(Present) ;
GOSTEI 0
Gigatel
26/09/2005
Basta você passar o parâmetro que você deseja.
ou
DataPorExtenso(Data) ;
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..
GOSTEI 0
Rjun
26/09/2005
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?
Eu não tinha reparado que os textos são diferentes. O problema é esse?
GOSTEI 0
Marlon Spiess
26/09/2005
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);
QRLabel15.Caption := DataPorExtenso(data);
// onde data é uma variavel ou field de table do tipo data TDate or TDateTime
QRLabel21.Caption := DataPorExtenso(Present);
GOSTEI 0
Gigatel
26/09/2005
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...
GOSTEI 0
Gigatel
26/09/2005
[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..
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..
GOSTEI 0
Rjun
26/09/2005
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.
Você chamaria as funções da seguinte forma:
e
Veja que dessa forma, você pode usar a função sempre que precisar.
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.
GOSTEI 0
Gigatel
26/09/2005
Fiz o seguinte..
deu este erro..
blzz
QRLabel27.Caption := DataPorExtenso(data);
deu este erro..
[Error] Unit42.pas(164): Undeclared identifier: ´data´
blzz
GOSTEI 0
Rjun
26/09/2005
Só uma correção, no retorno da função:
result := Format(Mensagem, [dia, meses[mes], ano]);
GOSTEI 0
Gigatel
26/09/2005
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.
Você chamaria as funções da seguinte forma:
e
Veja que dessa forma, você pode usar a função sempre que precisar.
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;
QRLabel15.Caption := DataPorExtenso(Date, Mensagem1);
QRLabel21.Caption:= DataPorExtenso(Present, Mensagem2);
Cara valeu pelo apoio..achei que era burrice minha más é meio complicado mesmo..más vou testar e posto o resultado..vlw..
GOSTEI 0
Gigatel
26/09/2005
deu este erro aki nesta linha
o erro...
[Error] Unit42.pas(150): Types of actual and formal var parameters must be identical
...
DecodeDate(Data, ano, mes, dia);
o erro...
[Error] Unit42.pas(150): Types of actual and formal var parameters must be identical
...
GOSTEI 0
Rjun
26/09/2005
Foi mal. Declarei os tipo das variáveis [b:4a53c7026a]ano[/b:4a53c7026a], [b:4a53c7026a]mes[/b:4a53c7026a] e [b:4a53c7026a]dia[/b:4a53c7026a] como [b:4a53c7026a]integer[/b:4a53c7026a]. O correto é [b:4a53c7026a]word[/b:4a53c7026a].
GOSTEI 0
Gigatel
26/09/2005
Foi mal. Declarei os tipo das variáveis [b:0e4110a106]ano[/b:0e4110a106], [b:0e4110a106]mes[/b:0e4110a106] e [b:0e4110a106]dia[/b:0e4110a106] como [b:0e4110a106]integer[/b:0e4110a106]. O correto é [b:0e4110a106]word[/b:0e4110a106].
Agora tá quase ( hehehe )..copilou..más deu este erro.
[img][URL=http://imageshack.us][img:0e4110a106]http://img281.imageshack.us/img281/4526/imagem2gf.jpg[/img:0e4110a106][/URL][/img]
GOSTEI 0
Rjun
26/09/2005
Você alterou a linha onde retorno o result? A linha deve ficar dessa maneira:
result := Format(Mensagem, [dia, meses[mes], ano]);
GOSTEI 0
Gigatel
26/09/2005
Você alterou a linha onde retorno o result? A linha deve ficar dessa maneira:
result := Format(Mensagem, [dia, meses[mes], ano]);
Coloquei do jeito q vc postou..más auterei pelo o q vc mensionou e deu certo...muito obrigado mesmo....vlw e t+
GOSTEI 0