Casas decimais diferentes em um mesmo relatorio c/ Quick Rep

Delphi

09/07/2003

Tenho uma query com os campos PRODUTO, UNIDADE, VALOR, sendo que a unidade varia de Kg, g, m, h, ton e muitos outros. Gostaria que no relatório as casas decimais do VALOR fosse diferente conforme o campo UNIDADE. Ex. Produto A - Unid. Kg - Valor 10,88 // Produto B - Unid. ton - Valor 11,891 - Produto C - Unid. g - Valor 0,8895.


Lazaro Capel

Lazaro Capel

Curtidas 0

Respostas

Aroldo Zanela

Aroldo Zanela

09/07/2003

#,,.


GOSTEI 0
Lazaro Capel

Lazaro Capel

09/07/2003

#.., realmente parace ser fácil ou até pode não ser díficil
mas . . . oque realmente preciso saber é como mudar de mascara a cada linha do relatório, variando conform o cadastro do produto que esta sendo listado.


GOSTEI 0
Kfe

Kfe

09/07/2003

O campo valor deve ser do tipo numérico. Então faça o seguinte:
Ponha um qrlabel na detail banda
no evento before print faça o seguinte:

if datasetUNIDADE.value=´kg´ then
qrlabel1.caption:=formatfloat(´mascaraKG´,datasetVALOR.value)
else
if datasetUNIDADE.value=´g´ then
qrlabel1.caption:=formatfloat(´mascaraG´,datasetVALOR.value)

e assim por diante. Só não esqueça de trocar onde está mascararKG pela mascara de kilograma (#,0.00 ou a que vc escolher)
Espero qeui ajude
até mais


GOSTEI 0
Jairroberto

Jairroberto

09/07/2003

Olá, LazaroCapel!

Seguindo os conselhos de alguns desenvolvedores experientes, sempre dou preferência por manter as regras de negócio separadas da camada de exibição e manipulação das informações. Sendo assim, acho mais adquado escrever a rotina de exibição do valor em um lugar que seja acessível tanto para o relatório como para o DBEdit ou DBGrid do formulário de exibição e entrada de dados, ou mesmo para a rotina de exportação.

Por isso, acho bastante conveniente, neste caso, usar o evento [b:0863ae2166]OnGetText[/b:0863ae2166] do objeto TField que representa o campo VALOR. Este evento ocorre sempre que o campo precisa ser exibido. Veja um exemplo:

procedure TForm1.Query1VALORGetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
  if DisplayText then
  begin
    if Query1UNIDADE.AsString = ´Kg´ then
      Text := FormatFloat(´,0.00´, Sender.AsFloat)
    else
    if Query1UNIDADE.AsString = ´ton´ then
      Text := FormatFloat(´,0.000´, Sender.AsFloat)
    else
    if Query1UNIDADE.AsString = ´g´ then
      Text := FormatFloat(´,0.0000´, Sender.AsFloat)
    else
      Text := Sender.AsString;
  end
  else
    Text := Sender.AsString;
end;


Os parâmetros recebidos pelo evento são:

Sender: TField = objeto correspondente ao campo cujo texto de exibição deve ser retornado

var Text: String = string à qual deverá ser atribuído o texto de exibição desejado

DisplayText: Boolean = indica se o evento deve retornar a propriedade DisplayText (formatado pela máscara informada em DisplayMask ou EditFormat) ou AsString do campo


Um abraço,
Jair


GOSTEI 0
POSTAR