![]() |
Reporte Anual
1 Archivos Adjunto(s)
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 Tabla Ingresos Código:
cod_Ingr | Nombre | Fecha | Monto 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 Gracias de antemano a cualquier tipo de ayuda. |
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. :) |
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. |
¿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 |
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. |
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... |
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 |
Mira este hilo ver qué te parece.
Tira por lo que indi ca Román. http://www.clubdelphi.com/foros/show...ighlight=pivot saludos |
Cita:
Código:
cod_Ingr | cod_cliente | Fecha | Monto |
Cita:
// Saludos |
Cita:
|
Cita:
Edito: Ya lo habia respondido Casimiro :D |
Cita:
|
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 |
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.
|
Pero con el CASE también funciona y evitas las subconsultas.
// Saludos |
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^\||/ |
Cita:
// Saludos |
Cita:
|
Cita:
// Saludos |
La franja horaria es GMT +2. Ahora son las 21:59:16. |
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