Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   calcular porcentaje (https://www.clubdelphi.com/foros/showthread.php?t=76969)

lucas05 09-12-2011 15:49:09

calcular porcentaje
 
Hola, estoy usando el QuickReport para imprimir el contenido de tablaA , previo filtrado.

Código Delphi [-]
QuickReport1:=TQuickReport1.Create(self);
QuickReport1.ADOQuery1.SQL.Add('select ta_fecha, ta_total');
QuickReport1.ADOQuery1.SQL.Add('from tablaA');
QuickReport1.ADOQuery1.SQL.Add('where  ta_fecha between'+QuotedStr(FormatDateTime('yyyy/mm/dd',DateTimePicker1.Date))
+'AND'+QuotedStr(FormatDateTime('yyyy/mm/dd',DateTimePicker2.Date)));

QuickReport1.ADOQuery1.Open;
QuickReport1.QRDBText1.DataField:='ta_fecha';
QuickReport1.QRDBText2.DataField:='ta_total';

QuickReport1.Preview;

Antes de imprimir el reporte como puedo aplicarle a cada uno de los valores del campo ta _total un descuento de 10%.
El 10% esta guardado en tablaB, en el campo tb _ porcentaje, este valor esta guardado en una tabla ya que el usuario puede modificarlo.

Espero haber sido claro. Muchas Gracias

oscarac 09-12-2011 16:22:04

y como relacionas la tablaA con la TablaB???

lucas05 09-12-2011 17:05:11

Hola, gracias por responder.
En tablaA tengo un campo ta_descuento que guarda la clave primaria tb_id de tablaB

ecfisa 09-12-2011 18:55:35

Hola Lucas.

Proba de este modo:
Código Delphi [-]
 ...
 with QuickReport1.ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select tablaA.ta_fecha,');
    SQL.Add('tablaA.ta_total-(tablaA.ta_total * TablaB.Dcto/100) as descuento ');
    SQL.Add('from tablaA, tablaB ');
    SQL.Add('where tablaA.ta_descuento = tablaB.ID');
    SQL.Add('and ta_fecha between :DESDE and :HASTA');
    Parameters.ParamByName('DESDE').Value:= DateTimePicker1.Date;
    Parameters.ParamByName('HASTA').Value:=DateTimePicker2.Date;
    Open;
  end;
  QuickReport1.QRDBText1.DataSet:= ADOQuery1;
  QuickReport1.QRDBText1.DataField:= 'descuento';
  ...

Saludos.

lucas05 09-12-2011 21:02:51

Hola, gracias por la ayuda, probe con tu codigo pero no muestra nada (no aparecen errores al compilar).
Agregue esta linea al final para poder visualizar antes de imprimir
Código:

QuickReport1.Preview;
Pregunta: que es descuento
Código Delphi [-]
SQL.Add('tablaA.ta_total-(tablaA.ta_total * TablaB.Dcto/100) as descuento ');
Código Delphi [-]
QuickReport1.QRDBText1.DataField:= 'descuento'

Muchas Gracias

oscarac 09-12-2011 21:07:34

descuento es el nombre que tendra la columna resultante de la operacion

mira la siguiente consulta

Código Delphi [-]
Select pr1 as Precio, x_nombre, x_n As Articulo from tabla1

el campo pr1 tendra como titulo "Precio"
el campo x_nombre aparecera igual x_nombre
el campo x_n tendra como titulo "Articulo"

ecfisa 09-12-2011 21:26:02

Hola Lucas.

El motivo que no te lo muestre puede ser por el tipo de banda donde se encuentre el TQRDBText. Si está ubicado en un TQRSubDetail con su propiedad DataSet = ADOQuery1, tiene que mostrarte los precios descontados.

Sobre que es el campo 'descuento', es un alias que se le dá como nombre al resultado de la consulta (columna) tal como te explicó el amigo oscarac.

por ejemplo:
Código SQL [-]
SELECT TABLA_A.TOTAL - (TABLA_A.TOTAL * TABLA_B.DESCUENTO/100) AS PRECIO_REBAJADO
FROM TABLA_A, TABLA_B
WHERE TABLA_A.DESCUENTO = TABLA_B.ID
  AND TABLA_A.FECHA BETWEEN :DESDE AND :HASTA
La columna resultado tiene como nombre: PRECIO_REBAJADO .

Saludos.

lucas05 10-12-2011 16:29:12

Hola, muchas gracias a todos por su ayuda, pero sigo sin poder hacer que funcione.
Este es el código que uso (al compilar no aparece ningún error), espero que puedan ayudarme a encontrar el problema.
Código Delphi [-]
   Try
       QuickReport1:=TQuickReport1.Create(self);
       QuickReport1.ADOQuery1.SQL.Add('select tablaA.ta_fecha');
      QuickReport1.ADOQuery1.SQL.Add('tablaA.ta_total-(tablaA.ta_total * tablaB.tb_porcentaje/100) as descuento');
       QuickReport1.ADOQuery1.SQL.Add('from tablaA, tablaB');
      QuickReport1.ADOQuery1.SQL.Add('where tablaA.ta_descuento = tablaB.tb_id');
       QuickReport1.ADOQuery1.SQL.Add('and ta_fecha between'+QuotedStr(FormatDateTime('yyyy/mm/dd',DateTimePicker1.Date))
       +'AND'+QuotedStr(FormatDateTime('yyyy/mm/dd',DateTimePicker2.Date)));


       QuickReport1.ADOQuery1.Open;
       QuickReport1.QRDBText1.DataField:='ta_fecha';
       QuickReport1.QRDBText2.DataField:='descuento';

       QuickReport1.Preview;
      finally
       QuickReport1.Free;
      end;

Gracias.

ecfisa 10-12-2011 17:11:01

Hola Lucas.

¿ Ya probaste poniendo el TQRDBText en un componente TQRSubDetail con la propiedad DataSet del mismo igual a ADOQuery1 como te sugerí ?

No te confundas con un componente TQRBand que tiene su propiedad BandType igual a rbSubDetail ya que no es lo mismo.

Saludos.

lucas05 10-12-2011 20:43:11

Hola ecfisa, si seguí tu consejo(gracias), el problema aparece cuando tiene que realizar el cálculo.
El problema esta en esta linea

Código Delphi [-]
QuickReport1.ADOQuery1.SQL.Add('tablaA.ta_total-(tablaA.ta_total * tablaB.tb_porcentaje/100) as descuento');

Gracias.

ecfisa 10-12-2011 20:55:22

Cita:

Empezado por lucas05 (Mensaje 420891)
Hola ecfisa, si seguí tu consejo(gracias), el problema aparece cuando tiene que realizar el cálculo.
El problema esta en esta linea

Código Delphi [-]
QuickReport1.ADOQuery1.SQL.Add('tablaA.ta_total-(tablaA.ta_total * tablaB.tb_porcentaje/100) as descuento');

Gracias.

Hola lucas.

¿ Que problema te aparece, te dá algún error en tiempo de ejecución ?


Saludos.

lucas05 11-12-2011 16:04:38

Hola, gracias por su ayuda, por fin pude hacerlo funcionar bien.
Pero apareció otro problemita, cuando el resultado es un número con decimales,como puedo hacer para que solo muestre hasta con dos decimales.

Muchas Gracias

ecfisa 11-12-2011 18:52:03

Hola Lucas.

Por favor, poné tu nueva pregunta en un nuevo hilo. (Guía de estilo punto ocho)


Un saludo y gracias por tu colaboración :)


La franja horaria es GMT +2. Ahora son las 07:00:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi