FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Reporte tipo Maestro /Detalle!!!
Hola gente del foro pues en esta ocasion los molesto con algo que puede verse sencillo pero que a mi me ha dado muchos problemas.
Primero que nada quiero decir lo que pretendo hacer y esto es un reporte tipo Maestro Detalle de la siguiente forma: Nombre_Trabajador1 sueldo_total1 laborquerealizo1 importe1 laborquerealizo2 importe2 ... laborquerealizon importen Nombre_Trabajador2 sueldo_total2 laborquerealizo1 importe1 laborquerealizo2 importe2 ... laborquerealizon importen El sueldo total seria la suma de todos los importes, pues les quiero decir que todo me sale bien menos lo de el Sueldo_Total ya que no me lo muestra correctamente. El Codigo que pongo en el QuickReport (utilizo Delphi 7) es el siguiente: Código:
procedure TfrmRepNominaOperador.RepNominaOperaBeforePrint( Sender: TCustomQuickRep; var PrintReport: Boolean); var cSql : String; var cSql2 : String; begin cSql := ' select nomina_operador.n_registro,operador.nombre,inspectores.nombre_inspector,labores.nombre_labor,maquinas.descripcion, nomina_operador.ano, nomina_operador.numero,det_nomina_operador.superficie, ' + ' det_nomina_operador.tarifa,det_nomina_operador.total_operador '+ ' from operador, labores,det_nomina_operador,nomina_operador,maquinas,inspectores '+ ' where operador.clave_operador=det_nomina_operador.clave_operador AND inspectores.clave_inspector=nomina_operador.clave_inspector AND maquinas.clave_maquina=det_nomina_operador.clave_maquina AND labores.clave_labor= det_nomina_operador.clave_labor ' + ' AND det_nomina_operador.n_registro=nomina_operador.n_registro AND maquinas.clave_sociedad=det_nomina_operador.clave_sociedad and nomina_operador.numero='+ quotedstr(frmnominaoperador.semana.text) + ' and nomina_operador.ano=' + quotedstr(frmnominaoperador.edzafra.Text) + ' group by nomina_operador.n_registro,operador.nombre,inspectores.nombre_inspector, labores.nombre_labor,maquinas.descripcion, nomina_operador.ano, nomina_operador.numero, det_nomina_operador.superficie, det_nomina_operador.tarifa, ' + ' det_nomina_operador.total_operador '+ ' Order BY nomina_operador.n_registro'; Datos.qryBuscar.SQL.Clear; Datos.QryBuscar.SQL.ADD(cSql); Datos.QryBuscar.Open; cSql2:= ' select nomina_operador.n_registro,operador.clave_operador,sum(det_nomina_operador.total_operador) as sueldo ' + ' from det_nomina_operador,nomina_operador,operador,maquinas,labores,inspectores '+ ' where operador.clave_operador=det_nomina_operador.clave_operador AND inspectores.clave_inspector=nomina_operador.clave_inspector AND maquinas.clave_maquina=det_nomina_operador.clave_maquina AND labores.clave_labor= det_nomina_operador.clave_labor ' + ' AND det_nomina_operador.n_registro=nomina_operador.n_registro AND maquinas.clave_sociedad=det_nomina_operador.clave_sociedad and nomina_operador.numero='+ quotedstr(frmnominaoperador.semana.text) + ' and nomina_operador.ano=' + quotedstr(frmnominaoperador.edzafra.Text) + ' GROUP BY nomina_operador.n_registro,operador.clave_operador'+ ' Order BY nomina_operador.n_registro'; Datos.qryauxbuscar.SQL.Clear; Datos.QryauxBuscar.SQL.ADD(cSql2); Datos.QryauxBuscar.Open; end; Con el QyAuxBuscar intento que me ponga la suma de los importes de las labores para ese empleado y tambien la tengo en la banda QrGroup, pero lo malo es que para todos los nombres de persona me pone la misma cantidad: Ejemplo: Nombre:Sergio Sueldo total: 50--> Eso Esta bien limpia importe=25 limpia2 importe=25 nombre: Juan Sueldo Total: 50-->Esto debria ser 200 Quema importe=50 Quema2 importe=150 Y pues la neta no se que pasa por que el codigo del QryAuxBuscar probado en el ISQL funciona bien. Bueno espero comprendan este post que parece mas una carta anticipada a Santa. Esperando y agradeciendo de antemano su respuesta, me despido quedando de ustedes su amigo:SERGIO A. L.
__________________
La inteligencia me persigue, pero yo soy más rápido que ella. |
#2
|
||||
|
||||
¿porque no traes todos los datos en una sola consulta? ¿porque tienen que ser dos?
Sería más fácil traer todos los datos en una sola consulta y las agrupaciones y sumatorias hacerlas en el reporte.
__________________
|
#3
|
|||
|
|||
Se me complica mucho!!!
La verdad yo para el lenguaje SQL no soy muy bueno, lo intente hacer en una sola pero la neta se me complico demasiado, es decir no me salio, asi k mejor opte por hacerla con dos. Le movi y movi a la sentencia pero simplemente no puede hacerla con una. Esa es la verdad y pues me da algo de cosa ya que aqui hay puro experto.
__________________
La inteligencia me persigue, pero yo soy más rápido que ella. |
#4
|
||||
|
||||
Bueno, expertos, expertos, lo que se dice expertos, pues no... Bueno, la mayoría si, yo no soy experto. Pero entre todos nos ayudamos un poco y espero llegar a ese nivel.
En fin. Según veo, tu primer consulta y la segunda consulta son exactamente lo mismo, solo que en la segunda haces una suma. Esa suma es la que podrías hacer en el reporte; en otras palabras, no habría necesidad de hacer la segunda consulta. Luego en tu primer consulta, estas agrupando, pero no utilizas ninguna función de agrupación; es decir, tienes el Group By por todos los campos en el select, pero no tienes ningún Sum, Avg o Max. Ahora, en tu código podrías ahorrarte las variables cSQL y cSQL2 y podrías agregar tu consulta directo con la función Add. Así como lo tienes, si quisieras extraer la consulta a un archivo o un stream, toda la consulta estaría en una sola línea. En tu código la ves en varias linéas, pero realmente (al utilizar +) lo estas haciendo en una sola línea. Si utilizas directamente la función Add, la consulta estará dividida en líneas (como un TStringList) y es mucho más fácil hacer otras cosas. Y por último, realizas la consulta en el evento BeforePrint, lo cuál puede funcionar, pero no te lo recomendaría. Sería mejor realizar la consulta antes de mandar la vista previa. Y en el evento BeforePrint, hacer ajustes menores en el reporte. Pero no es recomendable ejecutar la consulta en ese evento. En resumen, lo que yo haría, sería lo siguiente:
La idea es que en la consulta traigas todos los datos que necesites, sin agrupar, sin sumar. Y ya en el reporte hacer todas las agrupaciones y/o sumatorias necesarias.
__________________
|
#5
|
|||
|
|||
Error en Suma!!!
hola gente:
Pues quiero decirles que pude traer los datos en una sola consulta,algo mas o menos asi Código:
SELECT Nomina.folio,det_nomina.dia,Labores.nombre_labor,Ejidos.nombre_ejido,Nomina.clave_inspector,Inspectores.nombre_inspector,semana.inicio,semana.fin,semana.mes,Nomina.numero,Nomina.ano,Det_Nomina.clave_jornal, ' + ' Jornales.nombre_jornal,det_nomina.clave_zona,Det_Nomina.tarifa,det_nomina.total_pagar,sum(det_nomina.total_pagar) as sueldo '+ ' FROM Det_Nomina,Jornales,Inspectores,Nomina,labores,ejidos,semana '+ ' WHERE Nomina.folio=Det_nomina.folio AND Det_Nomina.clave_jornal=Jornales.clave_jornal AND Nomina.Clave_inspector=Inspectores.Clave_Inspector and nomina.numero=semana.numero and det_nomina.clave_productor=''2'' AND nomina.clave_inspector=' + quotedstr(frmrep_nomina.cbinspector.KeyValue)+ ' AND nomina.numero='+ quotedstr(frmrep_nomina.edsemana.text) + ' AND nomina.ano='+ quotedstr(frmrep_nomina.edzafra.Text) + ' AND det_nomina.clave_labor=Labores.clave_labor And det_nomina.Clave_ejido=Ejidos.Clave_ejido '+ ' GROUP BY Nomina.folio,det_nomina.dia,Labores.nombre_labor,Ejidos.nombre_ejido,Nomina.clave_inspector,Inspectores.nombre_inspector,semana.inicio,semana.fin,semana.mes,Nomina.numero,Nomina.ano,Det_Nomina.clave_jornal, ' + ' Jornales.nombre_jornal,det_nomina.clave_zona,Det_Nomina.tarifa,det_nomina.total_pagar '+ ' Order BY nomina.folio Nombre: Sergio Sueldo:0 --Deberia ser 400 Quema importe:250 Abonada importe:150 Nombre: Sergio Sueldo:400-- deberia ser 250 Quema importe: 250 Como ven en el primer sueldo siempre me pone 0(cero) y en el segundo me pone el total del primero.En el Group Header tengo la propiedad Expression:QryBuscar.folio .En que creen que falle? PD. intente en la consulta poner la suma: select ...... ,sum(det_nomina.total_operador) as sueldo from... where... pero tampoco jalo asi,como hacer la suma ya con los datos en una sola consulta?, lo recomendable segun he visto es con un qrexpr pero no quiere funcionar con eso, por lo dicho arriba. sin mas me despido por el momento
__________________
La inteligencia me persigue, pero yo soy más rápido que ella. |
#6
|
||||
|
||||
Pues sí, lo recomedable es hacer las sumas con un qrexpr, colocado en el group footer. Eso sería lo correcto.
¿porque no salía nada? pues no se, no estaría bien enlazado, no estaría apuntando al campo correcto. Podrían haber sido muchas cosas. Pero en fin, lo correcto es eso. Una consulta, un TQRExpr en un GroupFooter con su propiedad ResetAfterPRint a verdadero.
__________________
|
#7
|
|||
|
|||
Solucionado
Señor ContraVeneno quiero agradecerle toda la ayuda que me proporcionó, ya que sin esta no hubiera sido posible encontrarle solución a un problema que me habia aquejado durante mucho tiempo. Quiero decirle que lo del Group Footer era por un mal linkeado de las bandas, todo lo demás estaba bien. Pues sin más que decir, me despido no sin antes reiterarle mis más sinceras gracias.
ATTE Sergio A.L. PD. Cuando pueda y sepa como voy a subir mi codigo para que gente como ustedes lo vean y critiquen pero de manera sana, esto para en un futuro poder mejorarlo.
__________________
La inteligencia me persigue, pero yo soy más rápido que ella. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
maestro-detalle en rave reporte | hob | Impresión | 4 | 10-08-2006 17:30:28 |
Reporte Maestro Detalle | Caro | Impresión | 1 | 14-06-2005 20:18:47 |
Reporte Maestro detalle FastReport | IVAND | Impresión | 1 | 23-03-2005 13:52:31 |
Reporte Maestro/Detalle/Detalle de 4 Tablas | jovehe | Impresión | 2 | 23-03-2005 01:25:02 |
reporte maestro/detalle/subdetalle | dphmariano | Impresión | 1 | 24-03-2004 07:21:24 |
|