![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
#1
|
||||
|
||||
Reporte Anual
Hola...
Tengo un poco de dificultad en desarrollar un reporte anual. Para ello tengo una tabla de mis clientes y otra con los ingresos que van aportando durante el mes durante un año. algo asi... Tabla Cliente Código:
cod_client | Nombre -----------+------- 1 | pedro 2 | Juan 3 | Cesar Tabla Ingresos Código:
cod_Ingr | Nombre | Fecha | Monto ---------+--------+------------+------- 1 | Juan | 02/01/2012 | 120.00 2 | Cesar | 03/01/2012 | 100.00 3 | Juan | 03/01/2012 | 80.00 4 | Pedro | 07/01/2012 | 100.00 5 | Cesar | 02/02/2012 | 20.00 Solo unos pocos ingresos para una prueba. Lo que necesito es que me muestre si es posible de la siguiente forma. Código:
Nombre ... | Enero | Febrero | Marzo | ...... hasta | Diciembre -----------+--------+---------+-------+------------------------- Cesar .... | 100.00 | 20.00 | - | ...... - Juan .... | 200.00 | - | - | ...... - Pedro .... | 100.00 | - | - | ...... - Gracias de antemano a cualquier tipo de ayuda. Última edición por ecfisa fecha: 06-09-2012 a las 23:17:50. Razón: presentar datos tabulados |
#2
|
||||
|
||||
Hola jooooseph.
Una forma sencilla de mostrar los datos tabulados es organizarlos en el block de notas, copiarlos y luego pegarlos entre las etiquetas [code] [/code] . Para que pudieras ver el efecto lo hice sobre tu mensaje, tiene la ventaja de ahorrarte el tiempo de preparar las imágenes ![]() Saludos. ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
|||
|
|||
No se si esta es una manera correcta, pero es lo que yo hago.
1º - Creo una tabla temporal con los campos nombre(string) y los 12 campos meses(decimal). 'TCientDataset'. 2º - Con un bucle recorro tu tabla y busco en la tabla temporal el nombre, y hago un append o un edit (Si existe ó No). 3º - Con la función MonthOf(campo fecha de tu tabla) determino el mes. 4º - En tabla temporal edito el campo del mes obtenido con el importe. Saludos. |
#4
|
||||
|
||||
¿Qué motor de base de datos utilizas?
Me parece que lo que necesitas es armar un PivotTable, pero cada motor de BD trabaja de diferente manera. Saludos |
#5
|
||||
|
||||
Hola jooooseph.
Para hacer esto tienes muchas posibilidades y como no das mucha información acerca de como estás construyendo el reporte si con un reporteador o si debe ir en archivos de texto, si lo debes hacer desde algun programa o desde un procedimiento almacenado. ni siquiera dices que motor de DB usas... en fin. Si lo hicieras con una consulta (sería complicado pero se podria contemplar) tendrias que hacer primero una consulta base de clientes esto dejarla en una subconsulta y sobre esta hacer subconsultas por cada mes. Algo así:
Claro está esta consulta tendrá un costo bastante alto por lo que me iria a la siguiente opción si tu motor lo permite Si lo hicieras desde un sp que alimente una tabla podrias primero buscar los clientes que tuvieron registros a lo largo del año y luego procesarlos en los meses respectivos y obtenida la linea de registro llevarla a la tabla para despues procesarla en algun programa. En el caso de que lo hicieras desde el programa seria lo mismo que el SP pero obviando el registro en tabla y llevandolo directamente al diseño del reporte. Espero poder haberte colaborado. Un saludo.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com |
#6
|
||||
|
||||
GRACIAS A AMBOS...
Ya voy a poder enviar mejor mis consultas.. Con respecto a usar una tabla tempora.... es correcto lo que dices, antiguamente lo realizaba de esa forma. Pero me imagino que se puede crear algun storProcedure o algun select complejo que lo pueda hacer. ahora estoy trabajando es eso. Cuando tenga la respuesta se los paso... Pero si alguien mas tiene alguna de como hacerlo, le estare agradecido. ![]() Estoy usando Firebird... en delphi EX2... |
#7
|
||||
|
||||
Cita:
que, me parece, da el resultado que quieres y sin usar subconsultas ni tablas temporales. Supongo que en Firebird se puede hacer algo similar si tiene un condicional IF y alguna función para extraer las partes de una fecha. Por cierto, tu tabla de ingresos debería llevar el código del cliente en lugar de su nombre, ¿no crees? // Saludos Última edición por roman fecha: 07-09-2012 a las 18:59:51. |
#8
|
||||
|
||||
Mira este hilo ver qué te parece.
Tira por lo que indi ca Román. http://www.clubdelphi.com/foros/show...ighlight=pivot saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#9
|
||||
|
||||
Cita:
Código:
cod_Ingr | cod_cliente | Fecha | Monto ---------+-------------+------------+------- 1 | 2 | 02/01/2012 | 120.00 2 | 3 | 03/01/2012 | 100.00 3 | 2 | 03/01/2012 | 80.00 4 | 1 | 07/01/2012 | 100.00 5 | 3 | 02/02/2012 | 20.00
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#10
|
||||
|
||||
Cita:
// Saludos |
#11
|
||||
|
||||
Sí tiene la functión extract.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#12
|
||||
|
||||
Cita:
Edito: Ya lo habia respondido Casimiro ![]()
__________________
Buena caza y buen remar... http://mivaler.blogspot.com |
#13
|
||||
|
||||
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#14
|
||||
|
||||
Sí, yo lo comentaba porque en el hilo que cita fjcg02, la solucíon pasa por hacer un CAST de la fecha a string y luego un SUBSTR para extraer el mes.
Y, ¿firebird tiene función IF o sólo el CASE? // Saludos |
#15
|
||||
|
||||
Creo que solo tiene CASE...
Algo así funcionaria? hace rato no trabajo firebird y la idea está como confusa... yo me iria mejor por el lado del SP o de trabajar todo en el programa si a la final no se debe almacenar en ningun lado y si es un reporte de datos anuales la sentencia va a ser bastante costosa. Un amigo DBA de oracle me dice mejor hacer muchas sentencias efectivas y con poco costo y no una gran sentencia con un costo excesivo.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com |
#16
|
||||
|
||||
Pero con el CASE también funciona y evitas las subconsultas.
// Saludos |
#17
|
||||
|
||||
Cita:
Este tipo de consulta me hace el reporte anual de diferentes años, claro esta que el 2012 debera ser ingresado como variable. Voy a modificar mi consulta por una de tu tipo ROMAN. Gracias por la AYUDA a todos ![]() |
#18
|
||||
|
||||
Cierto. En la consulta que puse habría que añadir una condición WHERE para el año. La consulta que pones puede servir, pero el problem es que las subconsultas siempre son más lentas.
// Saludos |
#19
|
||||
|
||||
Cita:
![]() |
#20
|
||||
|
||||
Cita:
// Saludos Última edición por roman fecha: 07-09-2012 a las 20:23:58. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Reporte en PDF | lucasarts_18 | Varios | 4 | 31-03-2008 19:27:23 |
Resumen anual del Club Delphi 2006! | Héctor Randolph | La Taberna | 4 | 19-12-2006 00:19:02 |
Reporte | carols018 | Varios | 4 | 11-12-2006 09:02:00 |
Encuesta Anual Delphi | xander | Noticias | 0 | 30-10-2006 20:09:03 |
Reporte | erick_jesus | Conexión con bases de datos | 1 | 31-05-2006 17:22:50 |
![]() |
|