Delphi - Ayuda con rave report y delphi

 
Vista:

Ayuda con rave report y delphi

Publicado por Belen (33 intervenciones) el 23/08/2016 20:05:37
Hola diseñe un formulario de venta utilizando query de zeos y mysql -5 en delphi 2010. en dicho formulario utilizo un stringgrid para visualizar los datos de dicha venta. lo que quiero es ahora al dar en el boton aceptar me genere un reporte utilizo rave report. El prolema que tengo es el siguiente en el stringgrid tengo el idproducto,nombre,precio,cantidad,subtotal de los cuales al guardar en la base de datos en la tabla detalle solo guardo el precio cantidad id producto, el subtotal lo trabajo como un campo carculado desde el query. Al general el reporte me visualiza los siguientes datos idproducto,cantidad,subtotal,precio lo que quiero es que me visualice tambien el nombre del producto. Como podria realizar dicha operacion sin agregar un nuevo campo a mi tabla detalle. Intente crear un campo carculado que sea string pero el prolema sigue igual. Dejo el codigo que trabaje

Tabla SQL [-]
tabla detalle_de_venta
idventa
cantidad
precio
idproducto


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
procedure TfVentas.bAceptarClick(Sender: TObject);
var
i:integer;
begin
 
 try
  fmodulo.conexion.StartTransaction;
    with fmodulo,self do
     fmodulo.qVentas.Active:=true;
     fmodulo.qCaja.Active:=true;
     fmodulo.qVentas.Insert;
     fmodulo.qVentas['idcliente']  := idcliente;
     fmodulo.qFecha.Open;
     fmodulo.qVentas['fechavent']  := fmodulo.qFecha['fecha'];
     fmodulo.qVentas['idcaja']:=fmodulo.qCaja['idcaja'];
     fmodulo.qVentas['horavent']:= fmodulo.qFecha['hora'];
     fmodulo.qVentas['totalventa']:= eTotal.text;
     fmodulo.qFecha.Close;
     fmodulo.qVentas.Post;
     with fmodulo,self,sgDetalle do
     begin
       fmodulo.qdetalle.Active:=true;
       fmodulo.qProductos.Active:=true;
       for i := 1 to rowcount - 2 do
         begin
           fmodulo.qdetalle.Insert;
           fmodulo.qdetalle['idventa']:= fmodulo.qVentas['idventa'];
           fmodulo.qdetalle['idproducto']:= strtoint(sgDetalle.Cells[0,i]);
           fmodulo.qdetalle.FieldByName('nombre').AsString:= sgDetalle.Cells[1,i]; //aqui probe usando un campo carculado pero no logro solucionar el inconveniente  
           fmodulo.qdetalle['precio_venta']:=  strtofloat(sgDetalle.Cells[2,i]);
           fmodulo.qdetalle['cantidad_venta']:= strtofloat(sgDetalle.Cells[3,i]);
           fmodulo.qdetalle.Post;
           fmodulo.rvFactura.Execute;
     end;
     end;
finally
  fmodulo.conexion.Commit;
  self.Close;
  end;

El campo carculado. En el evento onCalcFields del query tengo la siguiente linea

1
2
3
4
5
6
procedure TfModulo.qdetalleCalcFields(DataSet: TDataSet);
begin
   DataSet['subtotal']:=DataSet['precio_venta']*DataSet['cantidad_venta'];
   DataSet['nombre']:=fmodulo.qProductos['nombrepr'];
 
end;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Ayuda con rave report y delphi

Publicado por E.T. (1244 intervenciones) el 23/08/2016 23:29:30
Estás haciendo trabajo doble con los campos calculados, la solución está en tu query, ahi puedes hacer el enlace a tu tabla de articulos o productos y sacar el nombre. Si pudieras poner el codigo sql de tu query podría ayudarte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con rave report y delphi

Publicado por Belen (33 intervenciones) el 24/08/2016 01:53:42
Hola gracias por responder aqui te dejo las consulas de los query
SELECT
`detalle_venta`.`idventa`,
`detalle_venta`.`idproducto`,
`detalle_venta`.`cantidad_venta`,
`detalle_venta`.`precio_venta`,
`detalle_venta`.`estado_detalleventa`
FROM
`detalle_venta`
INNER JOIN producto on (producto.idproducto=detalle_venta.idproducto)


y aqui la consulta del query productos
SELECT
`producto`.`idproducto`,
`producto`.`cantidadpr`,
`producto`.`nombrepr`,
`producto`.`precio_unit`,
`producto`.`precio_reparto`,
`producto`.imagen,
`producto`.`estadoproducto`
FROM
`producto`
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Ayuda con rave report y delphi

Publicado por E.T. (1244 intervenciones) el 24/08/2016 19:37:58
Puedes usar alias para tus tablas, así podrias ahorrarte escribir tanto
Tu primer query debería quedar asi:
SELECT
d.`idventa`,
d.`idproducto`,
d.`cantidad_venta`,
d.`precio_venta`,
d.`estado_detalleventa`,
p.`nombrepr`
d.`cantidad_venta` * d.`precio_venta` as importe
FROM
`detalle_venta` d
INNER JOIN producto p on (p.idproducto=d.idproducto)

Con esto, te agregaría los campos de nombre de producto y el precio por cantidad, asi te ahorras los campos calculados.
Solo debes agregar los campos nuevos a tu query
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con rave report y delphi

Publicado por Belen (33 intervenciones) el 24/08/2016 22:45:44
Hola gracias por responder. pero ahora me da un error "Cannot update a complex query with more then one table" cuando agregue "p.`nombrepr`"
ya no me deja realizar el post
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Ayuda con rave report y delphi

Publicado por E.T. (1244 intervenciones) el 25/08/2016 01:46:58
Mmmm... yo pensé que solo era consulta, en este caso no se puede hacer de la forma en que mencioné, tendrias que dejarlo como lo tenias para tu registro de datos y agregar un nuevo query de consulta modificado a como te dije y enlazar ese a tu reporte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con rave report y delphi

Publicado por Belen (33 intervenciones) el 25/08/2016 03:08:57
acabo de intentar tu respuesta haciendo un nuevo query luego del post de la venta muestro el reporte. Al estar asociado al nuevo query me trae todas las ventas realizadas abria alguna forma de que solo me muestre la venta actual que acabo de realizar como una factura normal de venta.
o tal vez alguna forma de guardar mis campos del string grid y pasarlos al reporte ? esto ultimo e intentado como mencione antes pero no tuve solucion :(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Ayuda con rave report y delphi

Publicado por E.T. (1244 intervenciones) el 25/08/2016 17:52:48
Solo debes filtrar tu venta:

SELECT
d.`idventa`,
d.`idproducto`,
d.`cantidad_venta`,
d.`precio_venta`,
d.`estado_detalleventa`,
p.`nombrepr`
d.`cantidad_venta` * d.`precio_venta` as importe
FROM
`detalle_venta` d
INNER JOIN producto p on (p.idproducto=d.idproducto)
WHERE d.`idventa` = X

Donde X es tu venta a mostrar.
Siguiendo esta solucion tendrias que modificar el sql de tu query cada vez que ejecutes el reporte

algo así:

1
2
3
4
5
6
7
fmodulo.qdetalle.close;
fmodulo.qdetalle.sql.clear;
fmodulo.qdetalle.sql.add('select campos');
fmodulo.qdetalle.sql.add('from tablas');
fmodulo.qdetalle.sq.add('where id =' + inttostr(10));//en este caso debes poner tu id, desde tu otro query o tabla de venta
fmodulo.qdetalle.open;
//ejecutar tu reporte aqui

Aqui tomé tu qdetalle, tu debes usar el otro que creaste para el reporte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar