Quantcast
Channel: SharpDevelop Community
Viewing all articles
Browse latest Browse all 1764

SharpDevelop Reports, una solución o un problema para bases de datos MySQL y PostgreSQL.

$
0
0

 

Con el paso del tiempo y en mi corta experiencia como desarrollador de sistemas, he utilizado múltiples herramientas de desarrollo(NetBeans, Eclipse, Bluefish, NuSphere, Quanta Plus, Microsoft Visual Studio, SharpDevelop, entre otros) y múltiple lenguajes de programación tales como C++, C#, VB, Scheme, Java, Python, Prolog, Php(mi preferido).

Un amigo del hermoso país de Argentina(saludos Fernando Piazza), me solicito que lo orientara un poco sobre la utilización de SharpDevelop en proyectos de gran peso, por lo que comento:

 

Como todos sabemos SharpDevelop(SD) es un IDE open source y libre para desarrollar en lenguajes de programación tales como C#, Visual Basic .NET y Boo. SD se puede ver como la competencia directa del famoso y también muy utilizado Microsoft Visual Studio.

 

Muchos desarrolladores al igual que yo(de la ola Open, Free, o como quieran llamarlo), decidimos la utilización de este IDE, claro sin mencionar los demás beneficios que nos trae el adquirir un software libre.

 

Yo he trabajado con SD a pequeña y gran escala, es decir, desde sistemas simples de transacciones, hasta sistemas para grandes empresas los cuales manejan toda la producción y gestión de las mismas.

SD no tiene nada que envidiarle a MVS, su agilidad e integración con otros componentes lo hacen aun mas llamativo para su utilización, claro sin mencionar el costo del Dark Microsoft(jejeje no podía quedarme sin decirlo).

Yo por ejemplo he utilizado SD integrado con los famosos Dev Components y con la Krypton Suite Components y han trabajado de la manera mejor esperada.

Por todo lo anterior no tendría ningún problema de usar y recomendar a SD para cualquier tipo de proyecto.

 

SharpDevelop y Talón de Aquiles llamado SD Reports

Lo llame el Talón de Aquiles, pero en realidad no es igual, ya que Aquiles no podía hacer nada para reparar su punto débil, sin embargo se que con el paso del tiempo SD y todos los desarrolladores interesados en el proyecto lo haran.

A mi parecer los Reportes en SD aun no están como para una utilización a gran escala, esto debido a que los SDR, están pensados, por ser .NET, en"bases de datos" MS SQL Server, y no en bases tipo MySQL(mi preferida) y PostgreSQL, por lo que la generación de reportes en este tipo de bases resulta un verdadero dolor de cabeza.

XSL, XML, Conexiones por aquí, por allá, .......... y al final ni siquiera obtenemos lo que buscábamos.

 

Una pequeña solución:

Esta solución sirve para reportes de tipo NO TABLA o LISTA, es decir solo muestra de información.

Se crea un reporte desde el asistente:

Ver PDF:http://www.mediafire.com/?m0g14s1gpnz2s9g

Una vez creado el reporte se crea una clase controladora en le formulario en donde esta el preview

por ejemplo frmReportes el cual contendra:

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using System.Collections;
using System.ComponentModel;
using System.IO;
using System.Text;
using ICSharpCode.Reports.Core;
using ICSharpCode.Reports.Core.Exporter;
using ICSharpCode.Reports.Core.Exporter.ExportRenderer;
using System.Data;
using OpenOfficeLib.Printer;//NO ES NECESARIA PARA ESTE EJEMPLO


namespace EtipresInterface.Reportes
{

    public partial class frmReportes : Form
    {
               
        public frmReportes()
        {
            InitializeComponent();   
        }
       
        public void reporteReport1(string parametro1, string parametro2, ....., string parametroN)
        {
            this.Text = "NOMBRE DEL FORMULARIO <REPORTE>";
           
           
            //Selecciono la plantilla del reporte
            ReportModel model =  ReportEngine.LoadReportModel("Reportes/Report1.srd");           
           
            //Encabezado de página del reporte
            BaseImageItem imageH = (BaseImageItem)model.ReportHeader.Items.Find("imgHeader");
            imageH.Image = Image.FromFile(@"Reportes\imagenes\imagen.jpg");
           
            //Cuerpo del reporte           
            BaseTextItem item = (BaseTextItem)model.DetailSection.Items.Find("pParameto1");//Nombre del campo del reporte  Report1.srd
            item.Text = parametro1;
           
            item = (BaseTextItem)model.DetailSection.Items.Find("pParameto2");//Nombre del campo del reporte  Report1.srd
            item.Text = parametro2;
           
            ...........
           
            item = (BaseTextItem)model.DetailSection.Items.Find("pParametoN");//Nombre del campo del reporte  Report1.srd
            item.Text = parametroN;       
           
            //Carga todos los paraetros al reporte       
           
            previewControl1.RunReport(model, new ReportParameters());
        }
    }
}

Ok una vez creado todo, al presionar un boton de otro form, se llama al reporte por ejemplo:

private void Boton_Click(object sender, System.EventArgs e)
{
    this.generaReporte();
}


public void generaReporte()
{
    try
    {
        frmReportes rp = new frmReportes();
       
        rp.reporteReport1("algo 1", "algo 2",...., "algo N");
        rp.Show();       
    }
    catch (Exception){}
}


y listo.


-----------------------------------------------------

Para otro tipos de reportes tipo grid, no me queda más que recomendarte otra opción de reportes, o por que no la generacion de PDFs

Bueno esto es todo espero haber no aburrido mucho y que sea de utilidad a la comunidad. XD

___________________________
Leonardo Sánchez Jiménez.
Costa Rica.
2011.


Viewing all articles
Browse latest Browse all 1764