Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   ¿como hacer query que muestre factura y detalle? (https://www.clubdelphi.com/foros/showthread.php?t=83938)

JXJ 18-08-2013 06:20:31

¿como hacer query que muestre factura y detalle?
 
hola.

tengo un problema con MSSQL Server 2005 express win 64
Estoy usando para hacer las querys el SQL Server Management Studio que viene con SQL Server 2005 y el

MS SQL Maestro
www.sqlmaestro.com/products/mssql/maestro

Tengo una tabla con los encabezados de la factura es decir.
datos de emisor receptor, folio , fecha ,
y otra tabla con el detalle de la factura.
que son los conceptos.
cantidad precio nombre producto costo total.

se puede hacer una query que me de una lista de las facturas y enseguida el detalle y subdetalle
de la siguiente manera.


FACTURA 001 RFC EMISOR RFC RECEPTOR
1 10.00 jabon en polvo 10.00
1 10.00 jabon en polvo 10.00
1 10.00 jabon en polvo 10.00
1 10.00 jabon en polvo 10.00
1 10.00 jabon en polvo 10.00
FACTURA 002 RFC EMISOR RFC RECEPTOR
1 10.00 jabon en polvo 10.00
1 10.00 jabon en polvo 10.00
10 10.00 Aceite 10.00
FACTURA 003 RFC EMISOR RFC RECEPTOR
1 10.00 jabon en polvo 10.00
1 10.00 jabon en polvo 10.00
1 10.00 jabon en polvo 10.00
1 10.00 jabon en polvo 10.00
1 10.00 jabon en polvo 10.00


Esta informacion siempre la he obtenido con un reporteador como fastreport.
o con el uso de una query que jala las facturas y un subquery que obtiene el detalle enlazado a la factura con una clave.
segun el id de la factura

Código Delphi [-]
  Query.Open  "selecto * from facturas."
   for i to query -1 do
begin
        IDFactura = Query.ParamByNAME("id");
      query.Open" select * from detallefactura where FacturaID = " IDFactura.
end

Gracias.

Casimiro Noteví 18-08-2013 09:40:36

Tendrás que hacerlo con un Stored Procedure en la base de datos, o bien, crear en delphi un bucle para los encabezados y dentro recorrer las líneas de cada uno de ellos.

oscarac 19-08-2013 03:00:32

No entiendo
dices que esta informacion la sacas con un query en el fast report
y pq no la puedes sacar ahora?

Casimiro Noteví 19-08-2013 09:15:22

Se supone que quiere hacerlo él, ya que el fastreport, al igual que todos los reporteadores, hacen la burrada de join entre todas las tablas y luego filtran para crear los grupos que se le indique, en este caso, cabecera y líneas.
O sea, con el FR se "dibujan" los datasets y se unen mediante líneas los campos que relacionan las tablas y luego él, internamente, crea algo así:
Código SQL [-]
select cab.* from cabeceras cab join lineas lin on lin.codigocabecera=cab.codigo
Por lo que se trae todo en una línea:
Cita:

cabecera1-linea1
cabecera1-linea2
cabecera1-linea3
cabecera2-linea1
cabecera2-linea2
cabecera3-linea1
cabecera3-linea2
cabecera3-linea3
cabecera3-linea4
...
Totalmente ineficiente, pero es eso lo que hacen.

oscarac 19-08-2013 16:47:51

Cita:

Empezado por Casimiro Notevi (Mensaje 465753)
Se supone que quiere hacerlo él, ya que el fastreport, al igual que todos los reporteadores, hacen la burrada de join entre todas las tablas y luego filtran para crear los grupos que se le indique, en este caso, cabecera y líneas.
O sea, con el FR se "dibujan" los datasets y se unen mediante líneas los campos que relacionan las tablas y luego él, internamente, crea algo así:
Código SQL [-]select cab.* from cabeceras cab join lineas lin on lin.codigocabecera=cab.codigo

Por lo que se trae todo en una línea:

Totalmente ineficiente, pero es eso lo que hacen.


Pero Casimiro, no hay otra forma, con un query definitivamente los datos saldran como tu dices
otra forma seria q pueda crear un ClientDataSet, con los campos q crea conveniente y armalos como el quiere

JXJ 21-08-2013 06:45:28

Gracias

Casimiro Notevi
oscarac

Voy a revisar como hacer el stored procedure
con sql server y firebird
creo que lo voy a necesitar en unos dias.

termine haciendolo con el mismo metodo

Código Delphi [-]
 Query.Open  "selecto * from facturas."
   for i to query -1 do
begin
        IDFactura = Query.ParamByNAME("id");
      query.Open" select * from detallefactura where FacturaID = " IDFactura.
end

con la query y los resultados genere unos archivos csv,
y luego procesarlos con excel.

pense que con un query me podia aligerar el procesamiento.
y como el

MS SQL Maestro
www.sqlmaestro.com/products/mssql/maestro

Tiene la opcion de que una query la puedes exportar en csv o excel
de ahi mi interes en que se mostara los resultados en esa orden.


La franja horaria es GMT +2. Ahora son las 14:33:21.

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