Vous êtes sur la page 1sur 53

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 535 -

7 CREANDO REPORTES DE DATOS


1. Trabajando con Impresiones mediante Drawing
Para habilitar la impresin de reportes desde el .NET Framework hay que usar el
Namespace System.Drawing.Printing que contiene objetos tiles para manejar tareas de
impresin.
1.1. Usando el Objeto de Impresin
El objeto de impresin permite crear un documento a imprimir, configurar sus
caractersticas, enlazarlo a controles o dilogos para realizar su presentacin preliminar
(preview) y finalmente habilita la impresin.
1.1.1. Clase PrintDocument
La clase PrintDocument es la que permite crear el objeto de impresin, por lo cual describimos
sus principales caractersticas:
Propiedades
Mtodos
Eventos
1.1.2. Creando las Pginas del Documento a Imprimir
1.1.3. Realizando un Preview con el PrintPreviewControl
Una vez construido el documento a imprimir en el evento PrintPage, lo que sigue es
realizar la presentacin preliminar del documento (Preview). Esta se puede hacer de dos
formas:
Usando un control (PrintPreviewControl).
Usando un dilogo (PrintPreviewDialog).
1.1.4. Imprimiendo el Documento
Despus de crear el documento y realizar la presentacin preliminar el siguiente paso es
imprimirlo, para lo cual se hace uso del mtodo Print del objeto PrintDocument,
pdt.Print()
Ejemplo 1. (Demo 65 simplificado)
crear una pgina a imprimir con un simple mensaje mediante el objeto PrintDocument y
realizar un preview de sta mediante el control PrintPreviewControl.
El ejemplo trabaja con un simple formulario conteniendo un texto y dos botones donde se
debe ingresar un mensaje, el cual se puede ver como saldr impreso mediante el botn
"Preview" o imprimir mediante el botn "Print".

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 536 -

1. En el diseador de formularios Windows, arrastrar 1 control Label, 1 TextBox, 2 Button y 1


PrintDocument, luego configurar las propiedades, tal como se muestra en el siguiente
cuadro:
Objeto
Form1
Label1
TextBox1
Button1
Button2
PrintDocument

Propiedad
Text
Text
Multiline
Tex
Name
Text
Name
Text
Name

Valor
Impresin en .NET con Drawing
Mensaje a imprimir
true
btnPreview
Preview
btnPrint
Print
PrintDocument1

2. Escribir un texto cualquiera en el cuadro de texto y clic en el botn "Preview" para ver
como aparecer la salida.

Advertencia: Si no tiene impresoras instaladas se generar una Excepcin al mostrar el

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 537 -

Preview o mandar a imprimir.


3. Cierre la ventana del Preview y luego si tiene una impresora instalada clic en el botn
"Print" para realizar la impresin.
CODIGO DE FORMULARIO
Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub CrearPaginaImprimir(ByVal sender As System.Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim Brocha As New SolidBrush(TextBox1.ForeColor)
Dim X As Integer = e.MarginBounds.Left
Dim Y As Integer = e.MarginBounds.Top
With e.Graphics
.DrawString(TextBox1.Text, TextBox1.Font, Brocha, X, Y)
End With
End Sub
Private Sub PreviewConControl(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnPreview.Click
Dim ppcMensaje As New PrintPreviewControl()
With ppcMensaje
.Document = PrintDocument1
.Dock = DockStyle.Fill
.Zoom = 2
End With
Dim frmPreview As New Form()
With frmPreview
.Controls.Add(ppcMensaje)
.Text = "Preview con el PrintPreviewControl"
.WindowState = FormWindowState.Maximized
.ShowDialog()
End With
End Sub
Private Sub ImprimirDocumento(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnPrint.Click
PrintDocument1.Print()
End Sub
End Class
TAREA
Modifque otras propiedades del preview por ejemplo, como imprimir valores de un cuadro
de lista o estos valores
.Dock = DockStyle.Left
.Zoom = 10
Dim Brocha As New SolidBrush(Color.FromArgb(255, 0, 0))
Ejemplo 2 .- Mostrar un consulta SQL de BD ( Demo 66)

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 538 -

Esta demostracin tiene por objetivo ensear a crear una pagina a imprimir con datos desde
una base de datos mediante el objeto PrintDocument y realizar un preview de sta mediante
el control PrintPreviewControl.
El ejemplo trabaja con un formulario que al cargar se conecta a la base de datos "alumnos"
de SQL Server y ejecuta un comando que llena una tabla de un DataSet con los cdigos,
nombres y FechaNac de la tabla alumnos. A partir de esta tabla se crea una vista la cual se
enlaza a un control DataGridview..
La aplicacin tiene un men principal con una opcin de Reporte donde se puede realizar
Preview de los datos usando el PrintPreviewControl o imprimirlos usando el mtodo Print
del objeto PrintDocument.
Para ver la demostracin debemos realizar los siguientes pasos:
1.

En el diseador de formularios Windows, arrastrar 1


control DataGridView1, MenuStrip y PrintDocument, luego configurar las propiedades,
tal como se muestra en el siguiente cuadro:
Objeto
Form1
DataGridView
MainMenu
PrintDocument

2.

Valor
fReporte de Empleados
DataGridView1
MainMenu1
PrintDocument

Seleccione el componente MenuStrip1 y en la parte


superior donde dice "escriba aqu escriba directamente los textos del men y configure
sus propiedades, tal como se muestra en el siguiente cuadro:
Objeto
MenuItem1
MenuItem11
MenuItem12

3.

Propiedad
Text
Name
Name
Name

Propiedad
Name
Text
Name
Text
Name
Text

Valor
mnuReporte
Reporte
mnuPreview
Preview
mnuPrint
Print

En la ventana explorador de soluciones dar clic en el


botn "ver codigo". Y copie el siguiente cdigo

Imports System.Data.SqlClient
Imports System.Text 'StringBuilder maneja cadenas
Public Class Form1
Inherits System.Windows.Forms.Form
Private dvw As DataView
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\SI2011\DATOS\ALUMNOS2.mdf;Integrate
d Security=True;Connect Timeout=30;User Instance=True"

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 539 -

Private Sub CargarDatos(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select CodAlumno,NombreAlumno,FechaNac
From Alumnos", con)
Dim dst As New DataSet()
dap.Fill(dst, "Alumnos")
dvw = dst.Tables("Alumnos").DefaultView
DataGridView1.DataSource = dvw
End Sub
Private Sub CrearPagina(ByVal sender As System.Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim i As Integer
Dim stb As New StringBuilder()
Dim Texto As String
Dim Fuente As New Font("Courier New", 12)
Dim Brocha As Brush = Brushes.Blue
Dim X As Integer = e.MarginBounds.Left
Dim Y As Integer = e.MarginBounds.Top
e.Graphics.DrawString("REPORTE DE ALUMNOS", Fuente, Brocha, X, Y)
Y = Y + 30
For i = 0 To dvw.Count - 1
stb.Append(dvw(i)(0).ToString.PadRight(10))
stb.Append(dvw(i)(1).ToString.PadRight(25))
stb.Append(dvw(i)(2).ToString.PadRight(15))
Texto = stb.ToString
e.Graphics.DrawString(Texto, Fuente, Brocha, X, Y)
Y = Y + Fuente.GetHeight
stb.Length = 0
Next
End Sub
Private Sub MostrarPreview(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuPrevio.Click
Dim ppc As New PrintPreviewControl()
ppc.Document = PrintDocument1
ppc.Zoom = 1
ppc.Dock = DockStyle.Fill
Dim frmPreview As New Form()
With frmPreview
.Text = "Preview del Reporte de Alumnos"
.WindowState = FormWindowState.Maximized
.Controls.Add(ppc)
.ShowDialog()
End With
End Sub
Private Sub ImprimirReporte(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuPrint.Click
PrintDocument1.Print()
End Sub

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

End Class
Ejecute el programa y vera lo siguiente

- 540 -

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 541 -

Modifique las siguientes propiedades y vea los resultados


ppc.Zoom = 2
como poner nombres de columna
Ejemplo 3. Modifique el ejemplo anterior de tal manera que obtenga reportes de acuerdo
a una consulta ingresada por el usuario en un inputbox por ejemplo listar los subtotales por
ao

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 542 -

CODIGO DEL FORMULARIO


Imports System.Data.SqlClient
Imports System.Text 'StringBuilder maneja cadenas
Public Class Form1
Inherits System.Windows.Forms.Form
Private dvw As DataView
Dim dst As New DataSet()
Dim cadenaSQL As String
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\SI2011\DATOS\ALUMNOS2.mdf;Integrate
d Security=True;Connect Timeout=30;User Instance=True"
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("", con)
Private Sub CargarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
dst.Tables.Clear()
cadenaSQL = "SELECT * FROM ALUMNOS"
dap.SelectCommand.CommandText = cadenaSQL
dap.Fill(dst, "CONSULTA")
DataGridView1.DataSource = dst.Tables(0)
dvw = dst.Tables(0).DefaultView
DataGridView1.DataSource = dvw
End Sub
Private Sub CrearPagina(ByVal sender As System.Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim i As Integer, ncol As Integer, ne = 20
Dim stb As New StringBuilder()
Dim Texto As String
Dim Fuente As New Font("Courier New", 12)
Dim Brocha As Brush = Brushes.Red
Dim X As Integer = e.MarginBounds.Left
Dim Y As Integer = e.MarginBounds.Top

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 543 -

e.Graphics.DrawString("REPORTE DE " & Chr(10) & cadenaSQL, Fuente, Brocha, X, Y)


Y = Y + 50
ncol = dst.Tables(0).Columns.Count
stb.Length = 0
For j = 0 To ncol - 1
If j = 0 Then
ne = 10
else
ne = 20
End If
stb.Append(dst.Tables(0).Columns(j).ColumnName.ToString.PadRight(ne))
Next
Texto = stb.ToString
e.Graphics.DrawString(Texto, Fuente, Brocha, X, Y)
Y = Y + Fuente.GetHeight
stb.Length = 0
Dim Brocha1 As Brush = Brushes.Blue
For i = 0 To dvw.Count - 1
For j = 0 To ncol - 1
If j = 0 Then
ne = 10
Else
ne = 20
End If
stb.Append(dvw(i)(j).ToString.PadRight(ne))
Next j
Texto = stb.ToString
e.Graphics.DrawString(Texto, Fuente, Brocha1, X, Y)
Y = Y + Fuente.GetHeight
stb.Length = 0
Next
End Sub
Private Sub MostrarPreview(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuPrevio.Click
Dim ppc As New PrintPreviewControl()
ppc.Document = PrintDocument1
ppc.Zoom = 1
ppc.Dock = DockStyle.Fill
Dim frmPreview As New Form()
With frmPreview
.Text = "CONSULTA = " & cadenaSQL
.WindowState = FormWindowState.Maximized
.Controls.Add(ppc)
.ShowDialog()
End With
End Sub

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 544 -

Private Sub ImprimirReporte(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles mnuPrint.Click
PrintDocument1.Print()
End Sub
Private Sub BtnGenerar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnGenerar.Click
cadenaSQL = InputBox("Ingrese consulta SQL", "consultaSQL", "SELECT * FROM
ALUMNOS")
dst.Tables.Clear()
dap.SelectCommand.CommandText = cadenaSQL
dap.Fill(dst, "CONSULTA")
DataGridView1.DataSource = dst.Tables(0)
dvw = dst.Tables(0).DefaultView
DataGridView1.DataSource = dvw
End Sub
End Class
Nota en caso que la tabla tenga muchos registros solo se puede mostrar una pagina del
reporte como se ve en la figura

1.2. Usando Dilogos de Impresin


Ls dilogos de impresin se pueden usar junto al objeto PrintDocument para realizar una
mejor presentacin y configuracin de la impresin.
Los dilogos de impresin son 3:
Dilogo de Presentacin Preliminar de Impresin (PrintPreviewDialog).
Dilogo de Configuracin de Pgina de Impresin (PageSetupDialog).
Dilogo de Impresin (PrintDialog).

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 545 -

1.2.1. Realizando un Preview con el PrintPreviewDialog


Despus de crear el documento a imprimir en el evento PrintPage del objeto
PrintDocument podemos realizar una mejor presentacin preliminar de ste, usando el
dilogo de preview, el cual tiene funcionalidad preconstruida para poder hacer zoom, ver
varias pginas, imprimir, etc.
Como todo dilogo, el objeto PrintPreviewDialog hereda de la clase CommonDialog, pero
tiene las siguientes propiedades adicionales:
Document

Obtiene o establece el documento del que se desea la vista previa.

UseAntiAlias

Obtiene o establece un valor que indica si la impresin utiliza la


caractersticas de alisado del sistema operativo.

Para trabajar con el dilogo de Preview, tan slo hay que configurar la propiedad Document
del dilogo en el objeto Prin Document, tal como sigue:
objPrintPreviewDialog.Document objPrintDocument
1.2.2. Configurando la Pgina con el PageSetupDialog
Tambin podemos configurar la pgina a imprimir mediante un dilogo, en donde podemos
modificar el tipo de papel, el margen, la orientacin, etc.
Para trabajar con el dilogo de configuracin de pgina hay que configurar la propiedad
Document del dilogo en el objeto PrintDocument, tal como sigue:
objPageSetupDialog.Document = objPrintDocument
Para mostrar el dilogo de configuracin de pgina llamar al mtodo ShowDialog:
obj PageSetupDialog.ShowDialog()
Adems para recuperar toda la configuracin del dilogo para que pueda ser usada por la
impresin, asignar en la propiedad DefaultPageSettings del objeto PrintDocument la
propiedad PageSettings del dilogo, tal como sigue:
obj PrintDocument.DefaultPageSettings = obj PageSetupDialog.PageSettings
Nota: El dilogo de configuracin de pgina automticamente realiza este ltimo paso, es
decir, toda la configuracin seleccionada por el usuario en el dilogo es automticamente
asignada al objeto PrintDocument.
1.2.3. Configurando la Impresin con el PrintDialog
Finalmente, podemos presentar un dilogo de impresin donde podamos seleccionar la
impresora, el nmero de pginas, el rango de pginas, el nmero de copias, guardar en un

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 546 -

archivo, etc. Usando las propiedades del objeto PrintDialog,


Para trabajar con el dilogo de impresin, tambin hay que configurar la propiedad Document
del dilogo en el objeto PrintDocument, tal como sigue:
objPrintDialog.Document = objPrintDocument
Ejemplo 4 crear una pagina a imprimir con un simple mensaje mediante el objeto
PrintDocument y usar los dilogos de presentacin preliminar, de configuracin de pgina y
de impresin. ( Demo 67)
El ejemplo es similar al Demo65, es decir, trabaja con un simple formulario conteniendo un texto
y tres botones donde se debe ingresar un mensaje, el cual se puede ver como saldr impreso
mediante el botn "Preview", configurar la pgina mediante el botn "Page Setup" o imprimir
mediante el botn "Print".
Para ver la demostracin debemos realizar los siguientes pasos:
1. En el diseador de formularios Windows, arrastrar un control Label, un TextBox, tres
Button, un PrintDocument, un PrintPreviewDialog, un PageSetupDialog y un PrintDialog,
luego configurar las propiedades, tal como se muestra en el siguiente cuadro:
En la propiedad cursor de los botones ponga hand
Objeto
Form1
Label1
TexBox1
Button1
Button2
Button3
PrintDocument
PrintPreviewDialog
PageSetupDialog
PrintDialog

Propiedad
Name
Text
Text
Text
Name
Text
Name
Text
Name
Text
Name
Name
Name
Name

Valor
frmImpresion
Impresiones en .NET con Drawing
Mensaje a Imprimir
btnPreview
Preview
btnPageSetup
Page Setup
btnPrint
Print
PrintDocument1
PrintPreviewDialog1
PageSetupDialog
PrintDialog1

2 En la ventana explorador de soluciones dar clic en el botn "Ver Cdigo".


Y copiar el siguiente cdigo
Public Class frmImpresion
Inherits System.Windows.Forms.Form
Private Sub CrearPaginaImprimir(ByVal sender As System.Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim Brocha As New SolidBrush(TextBox1.ForeColor)
Dim X As Integer = e.MarginBounds.Left

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 547 -

Dim Y As Integer = e.MarginBounds.Top


With e.Graphics
.DrawString(TextBox1.Text, TextBox1.Font, Brocha, X, Y)
End With
End Sub
Private Sub PreviewConDialogo(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnPreview.Click
With PrintPreviewDialog1 'Dialogo de Preview
.Document = PrintDocument1
.Text = "Preview usando PrintPreviewDialog"
.WindowState = FormWindowState.Maximized
.ShowDialog()
End With
End Sub
Private Sub ConfigurarPagina(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnPageSetup.Click
With PageSetupDialog1 'Dialogo de Page Setup
.Document = PrintDocument1
.ShowDialog()
End With
End Sub
Private Sub ImprimirDocumento(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnPrint.Click
With PrintDialog1 'Dialogo de Print
.Document = PrintDocument1
.AllowPrintToFile = False
.AllowSelection = True
.AllowSomePages = True
If .ShowDialog() = DialogResult.OK Then
PrintDocument1.PrinterSettings = .PrinterSettings
PrintDocument1.Print()
End If
End With
End Sub
End Class
Nota:
En el cdigo anterior las variables X e Y son usadas para imprimir el texto a partir
del margen actual.
b) En el cdigo anterior no se configura el zoom por cdigo ya que el dilogo automticamente
presenta botones de Zoom y otros botones.
c)
En el cdigo anterior no se configura el DefaultPageSettings del PrntDocument ya que
el dilogo lo realiza en forma automtica.
d) En el cdigo anterior se configura las propiedades Allow del dilogo para permitir mostrar
seleccin de pginas en el dilogo de impresin. Tambin si el . usuario da clic en el botn
"OK" del dialogo de imprimir, entonces, se imprime el contenido del cuadro de texto.
a)

Ejecute el programa y ver los siguiente

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 548 -

3 Escribir un texto cualquiera en el cuadro de texto, clic en el botn "Preview" y se


presentar un dilogo similar a la figura
Observacin: Vea como el dilogo trae botones de impresin, zoom, nmero de
pginas a ver y cerrar ventana.

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 549 -

.
4 Proceda a configurar la pgina cambiando el tamao del papel, la orientacin y los
mrgenes, luego clic en "Aceptar" para cerrar el dilogo y realizar los cambios.
5 Nuevamente de clic en el botn "Preview" para ver la presentacin de la pgina con los
cambios realizados, despus cierre el dilogo de Preview.
6 Clic en el botn "Print" y se presentar el dilogo de impresin, similar al mostrado en la
figura

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 550 -

Ejemplo 3 . Esta demostracin tiene por objetivo ensear a crear un documento con varias
pginas de datos obtenidos desde una base de datos. En sta trabajaremos con todos los
dilogos de impresin. (Demo 68)
El ejemplo trabaja con un formulario que al cargar se conecta a la base de datos
"ALUMNOS2" de SQL Server y ejecuta un comando que llena una tabla de un DataSet con
los cdigos de alumnos , nombres y fechas de nacimientos generados para ese efecto en
la tabla Alumnos2 A partir de esta tabla se crea una vista la cual se enlaza a un control
DataGrid.
La aplicacin tiene un men principal con una opcin de Reporte donde se puede realizar
Preview de los datos usando el PrintPreviewDialog, configurar la pgina usando el
PageSetupDialog o imprimir usando el PrintDialog.
Para ver la demostracin debemos realizar los siguientes pasos:
1. En el diseador de formularios Windows, arrastrar un control DataGridView, un
MenuStrip y un PrintDocument, un PrintPreviewDialog, un PageSetupDialog y un
PrintDialog, luego configurar las propiedades, tal como se muestra en el siguiente
cuadro
:
Objeto
Form1
DataGridvView1
MenuStrip1
PrintDocument1
PrintPreviewDialog1
PageSetupDialog
PrintDialog1

Propiedad
Name
Text
Name
Name
Name
Name
Name
Name

Valor
frmReporteAlumnos2
Reporte de Alumnos2
DataGridvView1 (dgdOrden
mnuPrincipal
PrintDocument1
PrintPreviewDialog1
PageSetupDialog
PrintDialog1

2 Seleccione el componente MainMenu y en la parte superior donde dice "Escriba


Aqui", escriba directamente los textos del men y configure sus propiedades, tal como
se muestra en el siguiente cuadro:
Objeto
MenuItem1
MenuItem11
MenuItem12
MenuItem13

Propiedad
Name
Text
Name
Text
Name
Text
Name
Text

Valor
MnuReporte
Reporte
MnuPreview
Preview
MnuPageSetup
PageSetup
MnuPrint
Print

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 551 -

3 En la ventana explorador de soluciones dar clic en el botn "View Code".


Y copie el siguiente cdigo:
Imports System.Data.SqlClient
Imports System.Text 'StringBuilder maneja cadenas
Public Class frmReporteAlumnos2
Inherits System.Windows.Forms.Form
Private dvw As DataView
Private cr As Integer
Dim CadenaConexion As String = "Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\SI2011\DATOS\ALUMNOS2.mdf;Integrate
d Security=True;Connect Timeout=30;User Instance=True"
Private Sub CargarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection(CadenaConexion)
Dim dap As New SqlDataAdapter("Select * From Alumnos2", con)
Dim dst As New DataSet()
dap.Fill(dst, "Alumnos2")
dvw = dst.Tables("ALumnos2").DefaultView
DataGridView1.DataSource = dvw
End Sub
Private Sub CrearDocumento(ByVal sender As System.Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim i As Integer
Dim stb As New StringBuilder()
Dim Texto As String
Dim Fuente As New Font("Courier New", 10)
Dim Brocha As Brush = Brushes.Blue
Dim X As Integer = e.MarginBounds.Left
Dim Y As Integer = e.MarginBounds.Top
Dim LP As Integer = e.MarginBounds.Height \ Fuente.GetHeight
For i = 0 To LP
If cr = dvw.Count - 1 Then Exit Sub
stb.Append(dvw(cr)(0).ToString.PadRight(15))
stb.Append(dvw(cr)(1).ToString.PadRight(30))
stb.Append(dvw(cr)(2).ToString.PadRight(15))
Texto = stb.ToString
e.Graphics.DrawString(Texto, Fuente, Brocha, X, Y)
Y = Y + Fuente.GetHeight
stb.Length = 0
cr = cr + 1
Next
e.HasMorePages = cr < dvw.Count - 1
End Sub
Private Sub MostrarPreview(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuPreview.Click
PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.ShowDialog()
End Sub

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 552 -

Private Sub ConfigurarPagina(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MnuPageSetup.Click
PageSetupDialog1.Document = PrintDocument1
PageSetupDialog1.ShowDialog()
End Sub
Private Sub ImprimirReporte(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuPrint.Click
PrintDialog1.Document = PrintDocument1
If PrintDialog1.ShowDialog() = DialogResult.OK Then
PrintDialog1.PrinterSettings = PrintDialog1.PrinterSettings
PrintDocument1.Print()
End If
End Sub
End Class

La cantidad de lneas a imprimir de una pgina (LP) es obtenida dividiendo el alto del
margen entre el alto de la fuente.
Para crear una nueva pgina se usa la propiedad HasMorePage en True slo cuando el
contador de registros (cr) sea menor al ndice del ltimo registro (dvw.Count-1).
El proceso de creacin termina cuando no haya ms registros que mostrar, es decir
cuando el contador de registros llegue a la ltima posicin.
4 Grabar y ejecutar la aplicacin pulsando F5.

5 Del men "Reporte" seleccionar la opcin "Preview" y se mostrar el dilogo de


presentacin preliminar similar a la figura

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 553 -

Observacin: Vea como.el documento tiene 2 pginas creadas para imprimir


6 Cierre la ventana del Preview, luego si desea configure la pgina o realize la impresin
mediante las otras opciones del men de Reportes.

2 TRABAJANDO REPORTES CON CRYSTAL REPORTS


2.1.1.

Introduccin

Con Crystal Reports para Visual Studio .NET, puede crear rpidamente informes complejos
de apariencia profesional. En lugar de utilizar programacin, la interfaz de Crystal Report
Designer le permite crear y dar formato al informe que desee. El eficaz motor de informes
procesa los criterios de formato, agrupamiento y creacin de grficos que especifique.
2.1.2.

Asistente de Informes

Los asistentes de Crystal Report permiten crear rpidamente informes en funcin de las
necesidades de desarrollo:
Seleccionar la opcin de diseo de informes que le interese, desde informes estndar
hasta cartas modelo, o bien cree sus propios informes partiendo de cero.
Mostrar grficos en los que los usuarios puedan profundizar con el fin de ver datos
detallados de los informes.
Calcular resmenes, subtotales y porcentajes de datos agrupados.
Mostrar resultados de datos de N Superiores y N Inferiores.
Dar formato al texto y rotar objetos de texto cuando se cumplan determinadas
condiciones.

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 554 -

2.1.3. Ventajas de Informes


1.

Para Programadores:
Seleccin del lenguaje y del proyecto:
Uso de los visores de informes: sin clientes (Web) y varios clientes (Windows):
Crystal Reports para Visual Studio .NET proporciona dos visores de informes con los
que puede ver informes en aplicaciones: utilice Web Forms Viewer para las
aplicaciones Web y Windows Forms Viewer para las aplicaciones de Windows.
Personalizacin de visores para interactuar con otros controles:
Modelo de objetos enriquecido:
2.

Para Usuarios:
Visualizacin de Crystal Reports en el Web.
Acceso a informes perfectamente integrados:
Fcil interaccin con los informes:
Exportacin de informes:
o Los usuarios pueden exportar informes a formatos de Microsoft Word y Excel, as como
a formatos PDF, HTML y Crystal Reports para Visual Studio .NET.

2.2. Arquitectura de Crystal Reports


2.2.1. Objeto ReportDocument
El nivel superior del modelo de objetos de Crystal Reports es el objeto ReportDocument.
Este objeto contiene todas las propiedades y todos los mtodos necesarios para
interactuar con un informe y personalizarlo. Puede utilizar su mtodo Load para abrir un
archivo de informe o asignarle un informe con tipos declarados.
Para utilizar ReportDocument, en primer lugar debe hacer referencia al espacio de
nombres CrystalDecisions.CrystalReports.Engine, que se encuentra en el archivo
CrystalDecisions.CrystalReports.Engine.dll. Si ha insertado un informe en la aplicacin,
esta referencia se agregar automticamente

Propiedades
Database:
DataDefinition:
ExportOptions:
PrintOptions:
ReportDefinition:
ReportOptions:
Summarylnfo

2.2.2. Windows Forms Viewer


Si programa una aplicacin Windows, puede almacenar un informe en Windows Forms con

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 555 -

"Crystal Reports Windows Forms Viewer", que est disponible como control en el cuadro de
herramientas de Visual Stiudio (CrystalReportView).

Propiedades
TableLogOnInfos:
ParameterFields:
ReportSource:

2.3. Creando Reportes con Crystal Reports


2.3.1. Diseando el Informe con Crystal Report Designer
Esta herramienta puede programarse directamente desde Visual Studio .NET. No es
necesario distribuir Report Designer con el informe.
Para crear un reporte usando el Crystal Report Designer debemos realizar los siguientes
pasos:
1.

Crear un DataSet con Tipo (Typed DataSet) que sirva de origen de datos para disear el
reporte (siga la indicaciones dadas en adaptador de datos en SI2011A 3VB20112008
pag 228)

.
2. Del men "Project", seleccionar "Add New tem..." o pulsar las teclas [Ctrl] + [Shift] + [A].
3. Del dilogo de Aadir Nuevo Elemento seleccionar "Crystal Report".

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 556 -

4. Escribir el nombre del reporte y clic en el botn "Open".


5. Aparecer un dilogo de "Registro del Software", clic en el botn "Register Later" para
indicar que despus se registrar.
6. Se mostrar la ventana de dilogo de Galera de Reportes, similar al de la figura

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 557 -

.
7. En la seccin "Crar un nuevo documento en Crystai Report Document" seleccionar
la primera opcin "Usar asistente de informes" para indicar que el reporte se
generar con el asistente de reportes.
8. En la seccin "Elegir un asistente "Standard" para indicar que se desea crear un reporte
estndar (hoja A4).
9. Clic en el botn "OK" y aparecer la ficha "Data" de la ventana del "Report Expert",
similar a la figura

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 558 -

10. Expandir el icono de "Project Data", "ADO .NET DataSets" y luego el DataSet creado.
11. Seleccionar la tabla que se desea usar en el reporte y clic en el botn "Insert Table".
Nota: Pueden usarse ms de una tabla en el caso de crear reportes agrupados.
12. Clic en el botn "Next" y se mostrar la ficha "Fields" del "Report Expert", similar a la de
la figura 10.15.

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 559 -

Figura 10.15: Ficha "Fields" de la Ventana del "Report Expert'


13. Seleccionar los campos que se mostrarn en el reporte y clic en el botn "Add", si se
desean pasa todos clic en "Add All
Nota: Despus de pasar los campos, se pueden seleccionar y cambiar el ttulo de
las cabeceras en la opcin "Column Heading".
14. Clic en el botn "Next" y se mostrar la ficha "Group" del "Report Expert", similar a la de la
figura 10.16

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 560 -

15. Si desea agrupar los registros por algn campo en comn que tengan stos
seleccionar dicho campo y clic en el botn "Add"
16. Clic en el botn "Next" y si eligi Agrupar por algn campo se ver la ficha "Total" del
"Report Expert", similar a la de la figura 10.17.

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 561 -

17. Seleccionar los campos que se mostrarn como clculos en el pie de los
detalles, luego seleccionar cada uno y elegir la funcin que se quiere mostrar;
contar, suma, promedio, mximo, mnimo, etc.

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 562 -

18. Clic al botn "Next" y si eligi Agrupar por algn campo se ver la ficha "Top N"
del "Report Expert", similar a la de la figura 10.18

Figura 10.18: Ficha "Top N" de la Ventana del "Report Expert"


19. Si desea puede sspecificar ordenar los datos agrupados basados en un total o
clculo creado.

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 563 -

20. Clic al botn "Next" y se ver la ficha "Chart" del Report Expert", similar a la de
la figura 10.19.

21.

Si desea puede crear un grfico de datos, seleccionando el tipo de grfico, los datos a
graficar y los ttulos del grfico.
22. Clic al botn "Next" y se ver la ficha "Select" del "Report Expert", similar a la de la
figura

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 564 -

23. Si desea puede seleccionar un campo por el cual se desea filtrar los datos, escribiendo
la condicin del filtro.
24. Clic al botn "Next" y se ver la ficha "Style" del "Report Expcrt", similar a la de la figura
10.21

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 565 -

25. Escribir el ttulo que ir en el informe y seleccionar el estilo de informe deseado y


clic en el botn "Finish" para crear el reporte
26. Inmediatamente se presentar sobre el diseador de reportes el reporte
creado, similar a la figura 10.22

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

Ver vista previa del informe principal

- 566 -

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 567 -

27. Para modificar el reporte puede usar los controles de la ficha "Crystal Reports" del
"ToolBox", similar a la vista en la figura

Nota: Los controles del cuadro de herramientas slo permiten insertar cuadros de
texto, lneas y recuadros. Si desea insertar otro tipo de objetos use las barras de
herramientas que a continuacin explicamos.
Tambin puede usar las barras de herramientas del Crystal Report, similar a las
mostradas en las figuras 10.24 y 10.25:

Figura 10.24: Barra de herramienta Principal de "Crystal Reports".


Nota: para obtener barra de herramientas use el men ver barra de herramientas y luego
Cristal Report Principal
Nota: La barra de herramientas principal permite modificar las caractersticas de los
controles diseados en el reporte, tal como la fuente, tamao, alineacin. Adems permite
cambiar caractersticas del reporte insertando campos, ordenando, et
Figura 10.25: Barra de herramienta Insertar de "Crystal Reports".
Nota: La barra de herramientas insertar permite agregar totales al reporte, insertar
grupos, adicionar subreportes, adicionar un grfico de datos o insertar una imagen.
29. Finalmente despus de realizar cambios al reporte, proceda a grabarlo.
Nota: Los reportes creados en el Crystal Reports tienen la extensin rpt.
2.3.2. Presentando el Informe en Windows Forms Viewer
Una vez creado el reporte con el diseador de reportes es necesario presentarlo en una
aplicacin de Windows Forms, para lo cual se usa el visor de reportes para formularios
Windows, en ingls Windows Forms Viewer.
Hay que mencionar que un mismo reporte (archivo rpt) puede ser usado en Windows o en
Web, lo nico que cambia es el visor, para el caso de una aplicacin Web con ASP .NET
ser el Web Forms Viewer.

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 568 -

En este caso veremos slo el visor de las aplicaciones Windows, el cual se encuentra en
el "ToolBox" como control "CrystalReportViewer".
El visor de reportes proporciona los siguientes componentes, que le ayudan a ver un
informe Crystal:
1.
Barra de herramientas
El visor de reportes tiene empaquetado una barra de herramientas similar a la mostrada
en la figura 10.26:
Figura 10.26: Barra de herramientas del "Crystal Reports Viewer".
La barra de herramientas del visor contiene los siguientes iconos:
Ir a primera pgina.
Retroceder pgina.
Ir a una pgina especificada.
Avanzar pgina.
Ir a la ltima pgina.
Cerrar ventana activa (slo para grupo o subinforme).
Imprimir informe.
Actualizar informe.
Exportar un informe.
Mostrar/ocultar e! rbol de grupos.
Aumentar/reducir informe.
Buscar
Puede personalizar ms la barra de herramientas programando con la descripcin de clase
de Windows Forms Viewer. Por ejemplo, para ocultar el icono Buscar, establezca la
propiedad ShowTextSearchButton en False.
Como alternativa a la utilizacin de la barra de herramientas predeterminada, puede ocultar
la barra de herramientas completa estableciendo la propiedad DisplayToolbar en False. A
continuacin, puede implementar su propia barra de herramientas con otros controles Windows
Form (por ejemplo: el control Button) y programar las funciones que necesite utilizando los
mtodos, las propiedades y los eventos de Windows Forms Viewer.
2.

rbol de Grupos

El visor de reportes tambin contiene un rbol de grupos ubicado en el lado derecho, ste
slo aparece si se dan estas dos condiciones:
El informe Crystal tiene un rbol de grupos.
Ha mostrado u ocultado el icono Mostrar rbol de grupos de la barra de herramientas
del visor.
Nota: Puede expandir y contraer el rbol de grupos si hace clic en el smbolo + que aparece
junto a cada nodo del mismo.
Inserte cristal report viewer

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

La ejecucin del reporte es la siguiente

- 569 -

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 570 -

NOTA Hacer clic con el botn secundario y elegir insertar se muestra lo siguiente

Al escoger grficos se muestra lo siguiente

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 571 -

Demo 69 crear un simple reporte de datos usando el Crystal Report Export, el Report
Designer y el CrystalReportViewer. El ejemplo trabaja con un formulario que muestra en un
control visor de reportes informacin de los Clientes de la BD "Northwind" de SQL Server. En
el reporte se muestran el cdigo, nombre y direccin de los clientes.
Para ver la demostracin debemos realizar los siguientes pasos:
1.
En el diseador de formularios Windows, arrastrar un control CrystalReportViewer,
luego configurar las propiedades, tal como se muestra en el siguiente cuadro:
Objeto
Form1
CrsytalReportViewe
r

Propiedad
Name
Name
DisplayGroupTre
e
Dock

Valor
frmReporteCliente
CrsytalReportViewer
False
Fill

2. Crear un DataSet con Tipo (Typed DataSet) que sirva de origen de datos para disear el
reporte (siga la indicaciones dadas en adaptador de datos en SI2011A 3VB20112008 pag
228 para ello en el generador de consultas arrastre la tabla custumers y seleccionar sus
campos CustomerlD, CompanyName y Address.

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 572 -

3. Clic derecho al objeto "sqldataadapter y del men contextual seleccionar "Generate


DataSet".
4. Aparecer un dilogo, en la opcin Elegir un DataSet, por defecto aparece "Nuevo",
escribir el nombre para el DataSet como datasetcustumer.
5. En la lista de tablas seleccionar la tabla Customers (dap) y clic en "OK".
6. Del men "Project", seleccionar "Add New tem" o pulsar las teclas [Ctrl] + [Shifl] + [A].
7.Del dilogo de Aadir Nuevo Elemento seleccionar "Crystal Report".
8.Aparecer un dilogo de "Registro del Software", clic en el botn "Register Later" para
indicar que despus se registrar.
9.Se mostrar la ventana de dilogo de Galera de Reportes (figura 10.13).
10. En la seccin "Crate a New Crystal Report Document" seleccionar la primera opcin
"Using the Report Expert" para indicar que el reporte se generar con el asistente de
reportes.
11. En la seccin "Choose an Expert" seleccionar "Standard" para indicar que se desea
crear un reporte estndar (hoja A4).
12. Clic en el botn "OK" y aparecer la ficha "Data" de la ventana del "Report Expert"
(figura 10.14).
13. Expandir el icono de "Project Data", "ADO .NET DataSets" y luego el DataSet "dst".
14. Seleccionar la tabla "Customers" y clic en el botn "Insert Table"
.

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 573 -

15. Clic en el botn "Next" y se mostrar la ficha "Fields" del "Report Expert" (figura 10.15).
16. Clic en el botn "Add All" para mostrar todos los campos en el reporte.
17. Despus de pasar los campos, modificar los ttulos de las cabeceras, para el primer
campo Cdigo, para el segundo Nombre y para el tercero Direccin.
18. Clic en el botn "Next" y se mostrar la ficha "Group" del "Report Expert" (figura 10.16).
19. Clic nuevamente en el boln "Next" ya que nuestro reporte es simple y no tiene
agrupaciones, se mostrar la ficha "Chart" del "Report Export" (figura 10.19).
20. Clic en "Next" para indicar que no deseamos un grfico de datos y se mostrar la ficha
"Select" del "Report Export" (figura 10.20).
21. Clic en "Next" para indicar que no deseamos filtrar y se ver la ficha "Style" del "Report
Export" (figura 10.21).
22. Escribir como ttulo del reporte "Lista de Clientes Northwind" y seleccionar el ltimo
estilo de la lista.
23. Clic en el botn "Finish" para crear el reporte y aparecer el Crystal Report Designer,
por si deseamos hacer algn cambio.
24. Regresar al formulario y en la ventana explorador de soluciones dar clic en el botn " View
Code" y copie el siguiente cdigo
Public Class Form1
Private Sub MostrarReporte(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
SqlDataAdapter1.Fill(DataSetCustumer1, "Customers")

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 574 -

Dim rpt As New CrystalReport1


rpt.SetDataSource(DataSetCustumer1)
CrystalReportViewer1.ReportSource = rpt
End Sub
End Class
25. Grabar y ejecutar la aplicacin pulsando F5.
Clic derecho sobre el Crystal report y en la pestaa informe principal e insertar objeto de
texto

Inserte box objeto

Luego dar formato al objeto

26. . Una vez mostrado el reporte podemos hacer zoom, exportarlo o imprimirlo.

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 575 -

3. Trabajando con Informes usando MS Office


3.1. Usando MS Word para Crear Documentos
3.1.1. Entendiendo el Modelo de Objetos de MS Word
Los objetos de Microsoft Word estn organizados en orden jerrquico, siendo Application y
Document las dos clases principales de la cima de la jerarqua. La gran importancia de
estas dos clases se debe a que la mayor parte del tiempo trabajar con la propia aplicacin
Word o haciendo algn tipo de manipulacin en documentos de Word.
A continuacin presentamos el modelo de objetos de MS Word:
.
Application
El objeto Application representa la aplicacin Word y es el principal de todos los
objetos. Sus miembros normalmente son aplicables a Word en su totalidad. Se pueden
utilizar sus propiedades y mtodos para controlar el entorno de Word.
Document
El objeto Document es de vital importancia para la programacin en Word. Cuando se
abre un documento o se crea un documento nuevo, se est creando un objeto
Document nuevo, que se agrega a la coleccin Documents de Word. El documento que
tiene el foco se llama documento activo y se representa mediante la propiedad
ActiveDocument del objeto Application,

Figura 10.32: Resumen del Modelo de Objetos de MS Word

Selection

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 576 -

El objeto Selectior representa el rea que est seleccionada. Cuando se realiza una
operacin en la interfaz de usuario de Word, como poner texto en negrita, se
selecciona o resalta el texto y, a continuacin, se aplica el formato. El objeto Selection
siempre est presente en un documento. Adems, tambin puede representar varios
bloques de texto no contiguos.

Range
El objeto Range representa un rea contigua de un documento, y se define mediante
una posicin de carcter inicial y una posicin de carcter final. Pueden utilizarse varios
objetos Range a la vez. El mismo documento puede tener definidos varios objetos
Range. Un objeto
Range tiene las siguientes caractersticas:
- Puede ser e1 punto de insercin solamente, un rango de texto o el documento
completo.
- Incluye caracteres no imprimibles como espacios, caracteres de tabulacin y
marcas de prrafo.
- Puede ser el rea representada por la seleccin actual, o puede representar otra
rea diferente de la de la seleccin actual.
- No se guarda con un documento y slo existe mientras se ejecuta el cdigo.
- Guando se inserta texto al final de un rango, Word ampla ste automticamente
para que incluya el nuevo texto.

Bookmark
El objeto Bookmark se parece al objeto Range en que representa un rea contigua de
un documento, con una posicin inicial y una posicin final. Los marcadores se utilizan
para marcar una ubicacin en un documento o como contenedores de texto en un
documento. Un objeto Bookmark puede ser el punto de insercin o el documento
completo. Tambin se pueden definir varios marcadores en un documento. Un objeto
Bookmark tiene las siguientes caractersticas que lo distinguen del objeto Range:
- Un objeto Bookmark puede tener nombre.
- Los marcadores se guardan con el documento y, por lo tanto, no desaparecen
cuando cesa la ejecucin del cdigo o al cerrar el documento.
- De manera predeterminada los marcadores estn ocultos, pero pueden hacerse
visibles si se establece la propiedad ShowBookmarks del objeto View en True. (El
objeto View es un miembro de los objetos Window y Pane, que existen en los
objetos Application y Document).

3.1.2. Creando el Documento en MS Word para el Informe


En general, debemos realizar los siguientes pasos para crear un documento para nuestro
informe:
1.Abrir el MS Word, del botn 'inicio", seleccionar "Programas", luego "Microsoft Office 2000"
y finalmente "Microsoft Word".
2.Del men "Ver" seleccionar "Barras de herramientas" y elegir "Formularios

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 577 -

Figura 10.33: Barra de herramientas de Formularios de MS Word.


3. Empezar a crear la parte fija del documento, como ttulos, prrafos, mensajes, imgenes,
tablas, etc.
4. Cuando desee crear un dato variable (campo) que se llenar desde la base de datos
ubicarse sobre la posicin y clic en el primer botn de la barra de formularios para insertar
un "Campo con texto".
5. Proceda a realizar el paso anterior para todos los campos o datos variables del
documento y finalmente grabar el documento en la carpeta donde est el ejecutable de
la aplicacin.
Nota: Cuando desarrollamos aplicaciones Windows usando el Visual Studio .NET, la
carpeta donde est la aplicacin (el ejecutable o exe) es a carpeta Bin que se
encuentra dentro de la carpeta con el Proyecto.
3.1.3. Llenando el Documento con Datos de la Aplicacin
Una vez creado el documento hay que crear una aplicacin que permita enviar los datos
hacia el documento mediante programacin, a lo que se le conoce como "Automatizacin
COM" o "ActiveX".
Para llenar un documento de MS Word con datos de una vista desde la aplicacin
debemos realizar los siguientes pasos:
1. Hacer una referencia a la librera de tipos de MS Word:
Del men "Project" seleccionar "Add Reference".
Del dilogo seleccionar la segunda ficha "COM".
Seleccionar "Microsoft Word 9.0 Object Library".
Clic en el botn "Select" y luego clic en "OK".
Nota: Por ser un componente COM el Visual Studio .NET crear unas libreras de
interoperabilidad entre COM y .NET (Interop), las cuales se crean en el mismo directorio
donde se ejecuta la aplicacin.
2. Crear un objeto que apunte a la clase Application de Word:
Dim W As New Word.Application()
3. Abrir el documento creado como plantilla para el informe mediante el mtodo Open de la
coleccin Documcnts del objeto Application:
W. Documents . Open ("Archivo. doc")
4. Escribir cada valor de un campo de la vista en el campo del documento creado mediante
la propiedad tem de la coleccin Fields del objeto Document de la aplicacin Word:
W.ActiveDocument.Fields.Item(l).Result.Text = dgdProducto.Item(N, 0)
Nota: En Word el ndice de los campos empieza en 1 y en .NET empieza en 0.
Demo 72 . a crear documentos para informes en MS Word y llenarlos desde una
aplicacin Windows en .NET.
El ejemplo trabaja con un formulario que al cargar se conecta a la base de datos Northwind
de SQL Server y llena dos tablas, una de Categoras y otra de Productos. La tabla de
Categoras se enlaza a un ComboBox mostrndose el nombre de la categora y la tabla de
Productos sirve para crear una vista, la cual se enlaza a un DataGrid mostrndose el cdigo,

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 578 -

nombre, precio y cdigo de la categora del producto.


Al seleccionar una Categora del combo, la vista se filtra mostrando los productos de dicha
categora. Finalmente, a! seleccionar un registro y dar clic al botn "Crear Documento" se
abrir la plantilla de Word y se llenar con los datos del registro actual y se grabar en
disco.
Para ver la demostracin debemos realizar los siguientes pasos:
1. Abrir el MSWord, del botn "Inicio", seleccionar "Programas", luego "Microsoft Office
2007" y finalmente "Microsoft Word".
2. Del men "Ver"-seleccionar "Barras de herramientas" y elegir "Formularios".
3. Empezar a crear el siguiente contenido:
ACME SA
Informe de Producto
Cdigo

Descripcin

Precio Unitario

Categoria

Aprobado Por:

Nota: Para agregar los campos (cuadros con sombra) dar clic al primer botn de la barra de
formulario
4. Grabar el archivo como "Informe del Producto.doc" y salir de Word.
5. En el diseador de formularios Windows, arrastrar un control Label, un ComboBox, un
DataGrid y un Button, luego configurar las propiedades, tal como se muestra en el siguiente
cuadro:
Objeto
Form1

Propiedad
Text

Label1
ComboBox1

Text
Anchor
DropDownStyle
Anchor
Name
Text

DataGrid1
Button1

Valor
Consulta
de
Productos
Categora
lElija la categoria
Top,Left,Tight
DropDownList
Top,Bottom,Left,Right
btnCrearDocumento
Crear Documento

8. Hacer una referencia a la librera de tipos de MS Word.

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 579 -

9. En la ventana explorador de soluciones dar clic en el botn "View Code".


Y copiar el siguiente cdigo
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Private dvw As DataView
Private Sub LlenarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection("Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\SI2011\DATOS\northwnd.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True")
Dim dap As New SqlDataAdapter("Select CategoryID,CategoryName From
Categories", con)
Dim dst As New DataSet()
dap.Fill(dst, "Categorias")
dap.SelectCommand.CommandText = "Select
ProductID,ProductName,UnitPrice,CategoryID From Products"
dap.Fill(dst, "Productos")
dvw = dst.Tables("Productos").DefaultView
With ComboBox1
.DataSource = dst.Tables("Categorias")
.DisplayMember = "CategoryName"
.ValueMember = "CategoryID"
End With
DataGrid1.DataSource = dvw

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 580 -

End Sub
Private Sub FilltrarProductos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Try
dvw.RowFilter = "CategoryID=" & ComboBox1.SelectedValue
Catch ex As Exception
End Try
End Sub
Private Sub CrearDocumento(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnCrearDocumento.Click
Dim ruta As String = Application.StartupPath & "\Informe del Producto"
Dim N As Integer = DataGrid1.CurrentRowIndex
Dim W As New Microsoft.Office.Interop.Word.Application
ruta = "e:\DATOS\INFORME2"
W.Visible = True
'W.Documents.Open("E:\DATOS\INFORME1.DOC")
W.Documents.Open(ruta & ".doc")
With W.ActiveDocument.Fields
.Item(1).Result.Text = DataGrid1.Item(N, 0)
.Item(2).Result.Text = DataGrid1.Item(N, 1)
.Item(3).Result.Text = DataGrid1.Item(N, 2)
.Item(4).Result.Text = DataGrid1.Item(N, 3)
End With
W.ActiveDocument.SaveAs(ruta & " " & DataGrid1.Item(N, 1) & ".doc")
End Sub
End Class
Nota: El archivo de Word que sirve de plantilla para el informe lo estamos
recuperando de la ruta donde se encuentra la aplicacin mediante la propiedad
StartupPath del objeto Application de .NET.
10. Grabar y ejecutar la aplicacin pulsando F5

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 581 -

17. vez creada la carpeta Bin con el exe, proceda a copiar el archivo de Word creado
anteriormente en dicha carpeta.
18. Seleccionar una categora y ver como se filtran los productos de dicha categora.
19. Seleccionar un registro y clic al botn "Crear Documento" e inmediatamente se
abrira Ms Word con la plantilla, se escribirn los datos y se guardar con un
nuevo nombre

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 582 -

3.2. Usando MS Excel para Crear Grficos


3.2.1. Entendiendo el Modelo de Objetos de MS Excel
Application
El objeto Application de Excel representa la propia aplicacin. Este objeto proporciona
mucha informacin sobre la aplicacin en ejecucin, las opciones que se aplican a esa
instancia y los objetos de usuario actuales que se abren en cada instancia.
Workbook
La clase Workbok representa un solo libro dentro de la aplicacin Excel. Muchos de los
miembros de la clase Application tambin se muestran como miembros de la clase
Workbook. En este caso, las propiedades se aplican a un libro especfico, en vez de
aplicarlas al libro activo completo.
Worksheet
Aunque la clase Worksheet proporciona muchos miembros, la mayora de las
propiedades, de los mtodos y de los eventos sor idnticos o similares a los miembros
proporcionados por las clases Application o Workbook.
Excel proporciona una coleccin Sheets como propiedad de un objeto Workbook, pero
no existe ninguna clase Sheet en Excel. En su lugar, cada miembro de la coleccin
Sheets es un objeto Worksheet o Chart.

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 583 -

Range
El objeto Range es el que utilizar con mayor frecuencia en las aplicaciones de Excel.
Antes de que pueda manipular una regin de Excel, debe expresarla corno objeto Range
y trabajar con los mtodos y las propiedades de este objeto. Un objeto Range
representa una celda, una fila, una columna, una seleccin de celdas que contienen
uno o ms bloques de celdas (que pueden ser contiguas o no) o incluso un grupo de
celdas de varias hojas de clculo.
En este tema se han descrito brevemente las clases ms importantes: Application,
Workbook, Worksheet y Range. Hay muchas otras clases que podran ser tiles, como
PivotTable y Chart. El modelo de objeto permite que el usuario realice prcticamente cualquier
tarea automatizada necesaria.
En nuestro caso, para crear grficos de datos usaremos la clase Application y las
colecciones WorkBooks y Charts, tal como explicamos en la siguiente seccin.
3.2,2. Creando un Grfgo de Datos con MS Excel
Para crear un grfico en MS Excel con datos de una vista desde la aplicacin debemos realizar
los siguientes pasos:
1. Hacer una referencia a la librera de tipos de MS Excel:
Del men 'Project" seleccionar "Add Reference".
Del dilogo seleccionar la segunda ficha "COM".
Seleccionar "Microsoft Excel12 Object Library".
Clic en el botn "Select" y luego clic en "OK".

Demo 73 crear un grfico de barras en MS Excel con datos obtenidos desde una
aplicacin Windows en .NET.
El ejemplo trabaja con un formulario que al cargar se conecta a la base de datos Northwind
de SQL Server y llena dos tablas, una de Categoras y otra de Productos. La tabla de

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 584 -

Categoras se enlaza a un ComboBox mostrndose el nombre de la categora y la tabla de


Productos sirve para crear una vista, la cual se enlaza a un DataGrid mostrndose el cdigo,
nombre, precio y cdigo de la categora del producto.
Al seleccionar una Categora del combo la vista se filtra mostrando los productos de dicha
categora. Finalmente, al seleccionar un registro y dar clic al botn "Crear Grfico" se abrir el
Excel y se enviarn los datos de la vista filtrada por categora, con los cuales se construir un
grfico de barras el cual tambin se guarda en disco como archivo gif.
Para ver la demostracin debemos realizar los siguientes pasos:
1. En el diseador de formularios Windows, arrastrar un control Label, un ComboBox, un
DataGrid y un Button, luego configurar las propiedades, tal como se muestra en el siguiente
cuadro:
Objeto
Form1
Label
ComboBox1
DataGrid1
Button1

Propiedad
Text
Text
Anchor
DropDownStyle
Anchor
Name
Text

Valor
Consulta de Productos x Categoria
Elige la Categoria
Top,Left,Right
DropDownList
Top, Bottom, Left, Right
btnCrearGrafico
Crear Grfico

2 Hacer una referencia a la librera de tipos de MS Excel.


3 En la ventana explorador de soluciones dar clic en el botn "View Code". Y copiar el
siguiente cdigo
Imports System.Data.SqlClient
Public Class Form1
Private dvw As DataView
Private Sub LlenarDatos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim con As New SqlConnection("Data
Source=.\SQLEXPRESS;AttachDbFilename=E:\SI2011\DATOS\northwnd.mdf;Integrated
Security=True;Connect Timeout=30;User Instance=True")
Dim dap As New SqlDataAdapter("Select CategoryID,CategoryName From
Categories", con)
Dim dst As New DataSet()
dap.Fill(dst, "Categorias")
dap.SelectCommand.CommandText = "Select
ProductID,ProductName,UnitPrice,CategoryID From Products"
dap.Fill(dst, "Productos")
dvw = dst.Tables("Productos").DefaultView
With ComboBox1
.DataSource = dst.Tables("Categorias")
.DisplayMember = "CategoryName"
.ValueMember = "CategoryID"

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 585 -

End With
DataGrid1.DataSource = dvw
End Sub
Private Sub FilltrarProductos(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Try
dvw.RowFilter = "CategoryID=" & ComboBox1.SelectedValue
Catch ex As Exception
End Try
End Sub
Private Sub CrearGrafico(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnCrearGrafico.Click
Dim ruta As String = Application.StartupPath & "\Grafico de "
Dim X As New Microsoft.Office.Interop.Excel.Application
X.Visible = True
X.Workbooks.Add()
X.Cells(1, 1).Value = "Descripcion del Producto"
X.Cells(1, 2).Value = "Precio"
Dim I, F As Integer
F=2
For I = 0 To dvw.Count - 1
X.Cells(F, 1).Value = dvw(I)(1)
X.Cells(F, 2).Value = dvw(I)(2)
F += 1
Next
X.Columns.AutoFit()
X.Range("A1").Select()
Dim R As Microsoft.Office.Interop.Excel.Range = X.Selection.CurrentRegion
X.Charts.Add()
With X.ActiveChart
.ChartType = -4100
.SetSourceData(R, 2)
.Location(1)
.Export(ruta & ComboBox1.Text & ".gif", "gif")
End With
End Sub
End Class
notas:

ChartType en -4100 indica que el tipo de grfico es de barras en 3D.


SetSourceDate(R,2) indica que el rango a graficar es R y su orientacin es en
columnas
Location(1) indica que el grfico saldr en una nueva hoja
Advertencia: Se generar una excepcin en el mtodo Export si no se ha instalado
los filtros grficos para poder crear archivos mediante MS Office al momento de su
instalacin.

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 586 -

4 Grabar y Ejecutar la aplicacin pulsando F5

5 Seleccionar una categora y ver como se filtran los productos de dicha categora.
6. Seleccionar un registro y clic al botn "Crear Grfico" e inmediatamente se abrir
MS Excel con los datos de la vista filtrada, con los cuales crear el grfico, similar
al mostrado en la figura:

PRACTICAS SI2015B PARTE 7 REPORTES\ISMAEL VELIZ VILCA

- 587 -

Figura 10.27.Ventana del MS Excel con el grfico creado

7 Revisar que en la carpeta Bin se ha creado un archivo gif con un grfico de productos de
dicha categora.
8 Cerrar el Excel y si desea puede guardar el archivo.

Vous aimerez peut-être aussi