Está en la página 1de 52

PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 585 -

7 CREANDO REPORTES DE DATOS


1. Trabajando con Impresiones mediante Drawing

Para habilitar la impresión de reportes desde el .NET Framework hay que usar el
Namespace System.Drawing.Printing que contiene objetos útiles para manejar tareas de
impresión.

1.1. Usando el Objeto de Impresión

El objeto de impresión permite crear un documento a imprimir, configurar sus


características, enlazarlo a controles o diálogos para realizar su presentación preliminar
(preview) y finalmente habilita la impresión.

1.1.1. Clase PrintDocument

La clase PrintDocument es la que permite crear el objeto de impresión, por lo cual describimos
sus principales características:

♦ Propiedades
♦ Métodos
♦ Eventos

1.1.2. Creando las Páginas 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 presentación preliminar del documento (Preview). Esta se puede hacer de dos
formas:
• Usando un control (PrintPreviewControl).
• Usando un diálogo (PrintPreviewDialog).

1.1.4. Imprimiendo el Documento

Después de crear el documento y realizar la presentación preliminar el siguiente paso es


imprimirlo, para lo cual se hace uso del método Print del objeto PrintDocument,
pdt.Print()

Ejemplo 1. (Demo 65 simplificado)

crear una página 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 botón
"Preview" o imprimir mediante el botón "Print".
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 586 -
1. En el diseñador 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 Propiedad Valor


Form1 Text Impresiòn en .NET con Drawing
Label1 Text Mensaje a imprimir
TextBox1 Multiline true
Tex
Button1 Name btnPreview
Text Preview
Button2 Name btnPrint
Text Print
PrintDocument Name PrintDocument1

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

Advertencia: Si no tiene impresoras instaladas se generará una Excepción al mostrar el


PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 587 -
Preview o mandar a imprimir.

3. Cierre la ventana del Preview y luego si tiene una impresora instalada clic en el botón
"Print" para realizar la impresión.

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 SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 588 -
Esta demostración tiene por objetivo enseñar 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 códigos,
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 aplicación tiene un menú principal con una opción de Reporte donde se puede realizar
Preview de los datos usando el PrintPreviewControl o imprimirlos usando el método Print
del objeto PrintDocument.
Para ver la demostración debemos realizar los siguientes pasos:

1. En el diseñador de formularios Windows, arrastrar 1


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

Objeto Propiedad Valor


Form1 Text fReporte de Empleados
DataGridView Name DataGridView1
MainMenu Name MainMenu1
PrintDocument Name PrintDocument

2. 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 Propiedad Valor


MenuItem1 Name mnuReporte
Text Reporte
MenuItem11 Name mnuPreview
Text Preview
MenuItem12 Name mnuPrint
Text Print

3. En la ventana explorador de soluciones dar clic en el


botón "ver codigo". Y copie el siguiente código

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 SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 589 -
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 SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 590 -
End Class

Ejecute el programa y vera lo siguiente


PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 591 -

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
año
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 592 -

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 SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 593 -
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 SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 594 -
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 Diálogos de Impresión

Ls diálogos de impresión se pueden usar junto al objeto PrintDocument para realizar una
mejor presentación y configuración de la impresión.

Los diálogos de impresión son 3:


 Diálogo de Presentación Preliminar de Impresión (PrintPreviewDialog).
 Diálogo de Configuración de Página de Impresión (PageSetupDialog).
 Diálogo de Impresión (PrintDialog).
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 595 -
1.2.1. Realizando un Preview con el PrintPreviewDialog

Después de crear el documento a imprimir en el evento PrintPage del objeto


PrintDocument podemos realizar una mejor presentación preliminar de éste, usando el
diálogo de preview, el cual tiene funcionalidad preconstruida para poder hacer zoom, ver
varias páginas, imprimir, etc.

Como todo diálogo, 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 impresión utiliza la


características de alisado del sistema operativo.

Para trabajar con el diálogo de Preview, tan sólo hay que configurar la propiedad Document
del diálogo en el objeto Prin Document, tal como sigue:

objPrintPreviewDialog.Document ■ objPrintDocument

1.2.2. Configurando la Página con el PageSetupDialog

También podemos configurar la página a imprimir mediante un diálogo, en donde


podemos modificar el tipo de papel, el margen, la orientación, etc.

Para trabajar con el diálogo de configuración de página hay que configurar la propiedad
Document del diálogo en el objeto PrintDocument, tal como sigue:

objPageSetupDialog.Document = objPrintDocument

Para mostrar el diálogo de configuración de página llamar al método ShowDialog:

obj PageSetupDialog.ShowDialog()

Además para recuperar toda la configuración del diálogo para que pueda ser usada por la
impresión, asignar en la propiedad DefaultPageSettings del objeto PrintDocument la
propiedad PageSettings del diálogo, tal como sigue:

obj PrintDocument.DefaultPageSettings = obj PageSetupDialog.PageSettings

Nota: El diálogo de configuración de página automáticamente realiza este último paso, es


decir, toda la configuración seleccionada por el usuario en el diálogo es automáticamente
asignada al objeto PrintDocument.

1.2.3. Configurando la Impresión con el PrintDialog

Finalmente, podemos presentar un diálogo de impresión donde podamos seleccionar la


impresora, el número de páginas, el rango de páginas, el número de copias, guardar en un
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 596 -
archivo, etc. Usando las propiedades del objeto PrintDialog,

Para trabajar con el diálogo de impresión, también hay que configurar la propiedad Document
del diálogo 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 diálogos de presentación preliminar, de configuración de página y
de impresión. ( 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 botón "Preview", configurar la página mediante el botón "Page Setup" o imprimir
mediante el botón "Print".

Para ver la demostración debemos realizar los siguientes pasos:

1. En el diseñador 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 Propiedad Valor


Form1 Name frmImpresion
Text Impresiones en .NET con Drawing
Label1 Text Mensaje a Imprimir
TexBox1 Text
Button1 Name btnPreview
Text Preview
Button2 Name btnPageSetup
Text Page Setup
Button3 Name btnPrint
Text Print
PrintDocument Name PrintDocument1
PrintPreviewDialog Name PrintPreviewDialog1
PageSetupDialog Name PageSetupDialog
PrintDialog Name PrintDialog1

2 En la ventana explorador de soluciones dar clic en el botón "Ver Código".


Y copiar el siguiente código

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 SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 597 -
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:
a) En el código anterior las variables X e Y son usadas para imprimir el texto a partir
del margen actual.
b) En el código anterior no se configura el zoom por código ya que el diálogo automáticamente
presenta botones de Zoom y otros botones.
c) En el código anterior no se configura el DefaultPageSettings del PríntDocument ya que
el diálogo lo realiza en forma automática.
d) En el código anterior se configura las propiedades Allow del diálogo para permitir mostrar
selección de páginas en el diálogo de impresión. También si el . usuario da clic en el botón
"OK" del dialogo de imprimir, entonces, se imprime el contenido del cuadro de texto.

Ejecute el programa y verá los siguiente


PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 598 -

3 Escribir un texto cualquiera en el cuadro de texto, clic en el botón "Preview" y se


presentará un diálogo similar a la figura

Observación: Vea como el diálogo trae botones de impresión, zoom, número de


páginas a ver y cerrar ventana.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 599 -

.
4 Proceda a configurar la página cambiando el tamaño del papel, la orientación y los
márgenes, luego clic en "Aceptar" para cerrar el diálogo y realizar los cambios.
5 Nuevamente de clic en el botón "Preview" para ver la presentación de la página con los
cambios realizados, después cierre el diálogo de Preview.
6 Clic en el botón "Print" y se presentará el diálogo de impresión, similar al mostrado en la
figura
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 600 -

Ejemplo 3 . Esta demostración tiene por objetivo enseñar a crear un documento con varias
páginas de datos obtenidos desde una base de datos. En ésta trabajaremos con todos los
diálogos de impresión. (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 códigos 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 aplicación tiene un menú principal con una opción de Reporte donde se puede realizar
Preview de los datos usando el PrintPreviewDialog, configurar la página usando el
PageSetupDialog o imprimir usando el PrintDialog.

Para ver la demostración debemos realizar los siguientes pasos:

1. En el diseñador 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 Propiedad Valor
Form1 Name frmReporteAlumnos2
Text Reporte de Alumnos2
DataGridvView1 Name DataGridvView1 (dgdOrden
MenuStrip1 Name mnuPrincipal
PrintDocument1 Name PrintDocument1
PrintPreviewDialog1 Name PrintPreviewDialog1
PageSetupDialog Name PageSetupDialog
PrintDialog1 Name 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 Propiedad Valor


MenuItem1 Name MnuReporte
Text Reporte
MenuItem11 Name MnuPreview
Text Preview
MenuItem12 Name MnuPageSetup
Text PageSetup
MenuItem13 Name MnuPrint
Text Print
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 601 -
3 En la ventana explorador de soluciones dar clic en el botón "View Code".
Y copie el siguiente código:

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 SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 602 -
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 líneas a imprimir de una página (LP) es obtenida dividiendo el alto del
margen entre el alto de la fuente.
 Para crear una nueva página se usa la propiedad HasMorePage en True sólo cuando el
contador de registros (cr) sea menor al índice del último registro (dvw.Count-1).
 El proceso de creación termina cuando no haya más registros que mostrar, es decir
cuando el contador de registros llegue a la última posición.

4 Grabar y ejecutar la aplicación pulsando F5.

5 Del menú "Reporte" seleccionar la opción "Preview" y se mostrará el diálogo de


presentación preliminar similar a la figura
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 603 -

Observación: Vea como.el documento tiene 2 páginas creadas para imprimir

6 Cierre la ventana del Preview, luego si desea configure la página o realize la impresión
mediante las otras opciones del menú de Reportes.

2 TRABAJANDO REPORTES CON CRYSTAL REPORTS

2.1.1. Introducción

Con Crystal Reports para Visual Studio .NET, puede crear rápidamente informes complejos
de apariencia profesional. En lugar de utilizar programación, 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 creación de gráficos que especifique.

2.1.2. Asistente de Informes

Los asistentes de Crystal Report permiten crear rápidamente informes en función de las
necesidades de desarrollo:
 Seleccionar la opción de diseño de informes que le interese, desde informes estándar
hasta cartas modelo, o bien cree sus propios informes partiendo de cero.
 Mostrar gráficos en los que los usuarios puedan profundizar con el fin de ver datos
detallados de los informes.
 Calcular resúmenes, 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 SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 604 -
2.1.3. Ventajas de Informes

1. Para Programadores:
 Selección 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.
 Personalización de visores para interactuar con otros controles:
 Modelo de objetos enriquecido:

2. Para Usuarios:
 Visualización de Crystal Reports en el Web.
 Acceso a informes perfectamente integrados:
 Fácil interacción con los informes:
 Exportación 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 métodos necesarios para
interactuar con un informe y personalizarlo. Puede utilizar su método 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 aplicación,
esta referencia se agregará automáticamente

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

2.2.2. Windows Forms Viewer

Si programa una aplicación Windows, puede almacenar un informe en Windows Forms con
"Crystal Reports Windows Forms Viewer", que está disponible como control en el cuadro
de herramientas de Visual Stiudio (CrystalReportView).
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 605 -

♦ Propiedades
• TableLogOnInfos:
• ParameterFields:
• ReportSource:

2.3. Creando Reportes con Crystal Reports

2.3.1. Diseñando 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 diseñar 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 diálogo de Añadir Nuevo Elemento seleccionar "Crystal Report".
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 606 -

4. Escribir el nombre del reporte y clic en el botón "Open".


5. Aparecerá un diálogo de "Registro del Software", clic en el botón "Register Later" para
indicar que después se registrará.
6. Se mostrará la ventana de diálogo de Galería de Reportes, similar al de la figura
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 607 -

.
7. En la sección "Créar un nuevo documento en Crystai Report Document" seleccionar
la primera opción "Usar asistente de informes" para indicar que el reporte se
generará con el asistente de reportes.
8. En la sección "Elegir un asistente "Standard" para indicar que se desea crear un reporte
estándar (hoja A4).
9. Clic en el botón "OK" y aparecerá la ficha "Data" de la ventana del "Report Expert",
similar a la figura
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 608 -

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 botón "Insert Table".

Nota: Pueden usarse más de una tabla en el caso de crear reportes agrupados.

12. Clic en el botón "Next" y se mostrará la ficha "Fields" del "Report Expert", similar a la de
la figura 10.15.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 609 -

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


13. Seleccionar los campos que se mostrarán en el reporte y clic en el botón "Add", si se
desean pasa todos clic en "Add All”
Nota: Después de pasar los campos, se pueden seleccionar y cambiar el título de
las cabeceras en la opción "Column Heading".

14. Clic en el botón "Next" y se mostrará la ficha "Group" del "Report Expert", similar a la de la
figura 10.16
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 610 -

15. Si desea agrupar los registros por algún campo en común que tengan éstos
seleccionar dicho campo y clic en el botón "Add"
16. Clic en el botón "Next" y si eligió Agrupar por algún campo se verá la ficha "Total" del
"Report Expert", similar a la de la figura 10.17.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 611 -

17. Seleccionar los campos que se mostrarán como cálculos en el pie de los
detalles, luego seleccionar cada uno y elegir la función que se quiere mostrar;
contar, suma, promedio, máximo, mínimo, etc.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 612 -

18. Clic al botón "Next" y si eligió Agrupar por algún 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
cálculo creado.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 613 -
20. Clic al botón "Next" y se verá la ficha "Chart" del Report Expert", similar a la de
la figura 10.19.

21. Si desea puede crear un gráfico de datos, seleccionando el tipo de gráfico, los datos a
graficar y los títulos del gráfico.
22. Clic al botón "Next" y se verá la ficha "Select" del "Report Expert", similar a la de la
figura
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 614 -

23. Si desea puede seleccionar un campo por el cual se desea filtrar los datos, escribiendo
la condición del filtro.
24. Clic al botón "Next" y se verá la ficha "Style" del "Report Expcrt", similar a la de la figura
10.21
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 615 -

25. Escribir el título que irá en el informe y seleccionar el estilo de informe deseado y
clic en el botón "Finish" para crear el reporte
26. Inmediatamente se presentará sobre el diseñador de reportes el reporte
creado, similar a la figura 10.22
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 616 -

Ver vista previa del informe principal


PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 617 -
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 sólo permiten insertar cuadros de
texto, líneas y recuadros. Si desea insertar otro tipo de objetos use las barras de
herramientas que a continuación explicamos.
También 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 características de los
controles diseñados en el reporte, tal como la fuente, tamaño, alineación. Además permite
cambiar características 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 gráfico de datos o insertar una imagen.

29. Finalmente después de realizar cambios al reporte, proceda a grabarlo.


Nota: Los reportes creados en el Crystal Reports tienen la extensión rpt.

2.3.2. Presentando el Informe en Windows Forms Viewer

Una vez creado el reporte con el diseñador de reportes es necesario presentarlo en una
aplicación de Windows Forms, para lo cual se usa el visor de reportes para formularios
Windows, en inglés 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 aplicación Web con ASP .NET
será el Web Forms Viewer.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 618 -
En este caso veremos sólo 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 página.
 Retroceder página.
 Ir a una página especificada.
 Avanzar página.
 Ir a la última página.
 Cerrar ventana activa (sólo para grupo o subinforme).
 Imprimir informe.
 Actualizar informe.
 Exportar un informe.
 Mostrar/ocultar e! árbol de grupos.
 Aumentar/reducir informe.
 Buscar

Puede personalizar más la barra de herramientas programando con la descripción de clase


de Windows Forms Viewer. Por ejemplo, para ocultar el icono Buscar, establezca la
propiedad ShowTextSearchButton en False.

Como alternativa a la utilización de la barra de herramientas predeterminada, puede ocultar


la barra de herramientas completa estableciendo la propiedad DisplayToolbar en False. A
continuación, 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
métodos, las propiedades y los eventos de Windows Forms Viewer.

2. Árbol de Grupos

El visor de reportes también contiene un árbol de grupos ubicado en el lado derecho, éste
sólo 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 símbolo + que aparece
junto a cada nodo del mismo.

Inserte cristal report viewer


PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 619 -

La ejecución del reporte es la siguiente


PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 620 -

NOTA Hacer clic con el botón secundario y elegir insertar se muestra lo siguiente

Al escoger gráficos se muestra lo siguiente


PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 621 -
♦ 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 información de los Clientes de la BD "Northwind" de SQL Server. En
el reporte se muestran el código, nombre y dirección de los clientes.

Para ver la demostración debemos realizar los siguientes pasos:


1. En el diseñador de formularios Windows, arrastrar un control CrystalReportViewer,
luego configurar las propiedades, tal como se muestra en el siguiente cuadro:

Objeto Propiedad Valor


Form1 Name frmReporteCliente
CrsytalReportViewe Name CrsytalReportViewer
r DisplayGroupTre False
e Fill
Dock

2. Crear un DataSet con Tipo (Typed DataSet) que sirva de origen de datos para diseñar 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 SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 622 -
3. Clic derecho al objeto "sqldataadapter” y del menú contextual seleccionar "Generate
DataSet".
4. Aparecerá un diálogo, en la opción 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 diálogo de Añadir Nuevo Elemento seleccionar "Crystal Report".
8. Aparecerá un diálogo de "Registro del Software", clic en el botón "Register Later" para
indicar que después se registrará.
9. Se mostrará la ventana de diálogo de Galería de Reportes (figura 10.13).
10. En la sección "Créate a New Crystal Report Document" seleccionar la primera opción
"Using the Report Expert" para indicar que el reporte se generará con el asistente de
reportes.
11. En la sección "Choose an Expert" seleccionar "Standard" para indicar que se desea crear
un reporte estándar (hoja A4).
12. Clic en el botón "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 botón "Insert Table"
.

15. Clic en el botón "Next" y se mostrará la ficha "Fields" del "Report Expert" (figura 10.15).
16. Clic en el botón "Add All" para mostrar todos los campos en el reporte.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 623 -
17. Después de pasar los campos, modificar los títulos de las cabeceras, para el primer
campo Código, para el segundo Nombre y para el tercero Dirección.
18. Clic en el botón "Next" y se mostrará la ficha "Group" del "Report Expert" (figura 10.16).
19. Clic nuevamente en el bolón "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 gráfico 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 título del reporte "Lista de Clientes Northwind" y seleccionar el último
estilo de la lista.
23. Clic en el botón "Finish" para crear el reporte y aparecerá el Crystal Report Designer,
por si deseamos hacer algún cambio.
24. Regresar al formulario y en la ventana explorador de soluciones dar clic en el botón " View
Code" y copie el siguiente código

Public Class Form1


Private Sub MostrarReporte(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
SqlDataAdapter1.Fill(DataSetCustumer1, "Customers")
Dim rpt As New CrystalReport1
rpt.SetDataSource(DataSetCustumer1)
CrystalReportViewer1.ReportSource = rpt
End Sub
End Class

25. Grabar y ejecutar la aplicación pulsando F5.

Clic derecho sobre el Crystal report y en la pestaña informe principal e insertar objeto de
texto

Inserte box objeto

Luego dar formato al objeto


PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 624 -

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

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 están organizados en orden jerárquico, siendo Application y
Document las dos clases principales de la cima de la jerarquía. La gran importancia de
estas dos clases se debe a que la mayor parte del tiempo trabajará con la propia aplicación
Word o haciendo algún tipo de manipulación en documentos de Word.
A continuación presentamos el modelo de objetos de MS Word:
.
 Application
El objeto Application representa la aplicación 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 métodos para controlar el entorno de Word.
 Document
El objeto Document es de vital importancia para la programación 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 colección Documents de Word. El documento que
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 625 -
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
El objeto Selectior representa el área que está seleccionada. Cuando se realiza una
operación en la interfaz de usuario de Word, como poner texto en negrita, se
selecciona o resalta el texto y, a continuación, se aplica el formato. El objeto Selection
siempre está presente en un documento. Además, también puede representar varios
bloques de texto no contiguos.

 Range
El objeto Range representa un área contigua de un documento, y se define mediante
una posición de carácter inicial y una posición de carácter final. Pueden utilizarse varios
objetos Range a la vez. El mismo documento puede tener definidos varios objetos
Range. Un objeto
Range tiene las siguientes características:
- Puede ser e1 punto de inserción solamente, un rango de texto o el documento
completo.
- Incluye caracteres no imprimibles como espacios, caracteres de tabulación y
marcas de párrafo.
- Puede ser el área representada por la selección actual, o puede representar otra
área diferente de la de la selección actual.
- No se guarda con un documento y sólo existe mientras se ejecuta el código.
- Guando se inserta texto al final de un rango, Word amplía éste automáticamente
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 posición inicial y una posición final. Los marcadores se utilizan
para marcar una ubicación en un documento o como contenedores de texto en un
documento. Un objeto Bookmark puede ser el punto de inserción o el documento
completo. También se pueden definir varios marcadores en un documento. Un objeto
Bookmark tiene las siguientes características 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
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 626 -
cuando cesa la ejecución del código o al cerrar el documento.
- De manera predeterminada los marcadores están 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 botón 'inicio", seleccionar "Programas", luego "Microsoft Office 2000"
y finalmente "Microsoft Word".

2.Del menú "Ver" seleccionar "Barras de herramientas" y elegir "Formularios

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

3. Empezar a crear la parte fija del documento, como títulos, párrafos, mensajes, imágenes,
tablas, etc.
4. Cuando desee crear un dato variable (campo) que se llenará desde la base de datos
ubicarse sobre la posición y clic en el primer botón 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 aplicación.
Nota: Cuando desarrollamos aplicaciones Windows usando el Visual Studio .NET, la
carpeta donde está la aplicación (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 Aplicación

Una vez creado el documento hay que crear una aplicación que permita enviar los datos
hacia el documento mediante programación, a lo que se le conoce como "Automatización
COM" o "ActiveX".
Para llenar un documento de MS Word con datos de una vista desde la aplicación
debemos realizar los siguientes pasos:
1. Hacer una referencia a la librería de tipos de MS Word:
 Del menú "Project" seleccionar "Add Reference".
 Del diálogo seleccionar la segunda ficha "COM".
 Seleccionar "Microsoft Word 9.0 Object Library".
 Clic en el botón "Select" y luego clic en "OK".

Nota: Por ser un componente COM el Visual Studio .NET creará unas librerías de
interoperabilidad entre COM y .NET (Interop), las cuales se crean en el mismo directorio
donde se ejecuta la aplicación.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 627 -
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 método Open de la
colección 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 colección Fields del objeto Document de la aplicación 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


aplicación 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 Categorías y otra de Productos. La tabla de
Categorías se enlaza a un ComboBox mostrándose el nombre de la categoría y la tabla de
Productos sirve para crear una vista, la cual se enlaza a un DataGrid mostrándose el código,
nombre, precio y código de la categoría del producto.

Al seleccionar una Categoría del combo, la vista se filtra mostrando los productos de dicha
categoría. Finalmente, a! seleccionar un registro y dar clic al botón "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 demostración debemos realizar los siguientes pasos:

1. Abrir el MSWord, del botón "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

Código :      

Descripción :      

Precio Unitario :      

Categoria :      

Aprobado Por: :      

Nota: Para agregar los campos (cuadros con sombra) dar clic al primer botón de la barra de
formulario
4. Grabar el archivo como "Informe del Producto.doc" y salir de Word.
5. En el diseñador de formularios Windows, arrastrar un control Label, un ComboBox, un
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 628 -
DataGrid y un Button, luego configurar las propiedades, tal como se muestra en el siguiente
cuadro:

Objeto Propiedad Valor


Form1 Text Consulta de Productos x
Categoría
Label1 Text lElija la categoria
ComboBox1 Anchor Top,Left,Tight
DropDownStyle DropDownList
DataGrid1 Anchor Top,Bottom,Left,Right
Button1 Name btnCrearDocumento
Text Crear Documento

8. Hacer una referencia a la librería de tipos de MS Word.

9. En la ventana explorador de soluciones dar clic en el botón "View Code".


Y copiar el siguiente código

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
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 629 -
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
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 aplicación mediante la propiedad
StartupPath del objeto Application de .NET.
10. Grabar y ejecutar la aplicación pulsando F5
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 630 -

17. vez creada la carpeta Bin con el exe, proceda a copiar el archivo de Word creado
anteriormente en dicha carpeta.
18. Seleccionar una categoría y ver como se filtran los productos de dicha categoría.
19. Seleccionar un registro y clic al botón "Crear Documento" e inmediatamente se
abrira Ms Word con la plantilla, se escribirán los datos y se guardará con un nuevo
nombre
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 631 -

3.2. Usando MS Excel para Crear Gráficos

3.2.1. Entendiendo el Modelo de Objetos de MS Excel

• Application
El objeto Application de Excel representa la propia aplicación. Este objeto proporciona
mucha información sobre la aplicación en ejecución, 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 aplicación Excel. Muchos de los
miembros de la clase Application también se muestran como miembros de la clase
Workbook. En este caso, las propiedades se aplican a un libro específico, en vez de
aplicarlas al libro activo completo.

• Worksheet
Aunque la clase Worksheet proporciona muchos miembros, la mayoría de las
propiedades, de los métodos y de los eventos sor idénticos o similares a los miembros
proporcionados por las clases Application o Workbook.
Excel proporciona una colección Sheets como propiedad de un objeto Workbook, pero
no existe ninguna clase Sheet en Excel. En su lugar, cada miembro de la colección
Sheets es un objeto Worksheet o Chart.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 632 -
• Range
El objeto Range es el que utilizará con mayor frecuencia en las aplicaciones de Excel.
Antes de que pueda manipular una región de Excel, debe expresarla corno objeto Range
y trabajar con los métodos y las propiedades de este objeto. Un objeto Range
representa una celda, una fila, una columna, una selección de celdas que contienen
uno o más bloques de celdas (que pueden ser contiguas o no) o incluso un grupo de
celdas de varias hojas de cálculo.

En este tema se han descrito brevemente las clases más importantes: Application,
Workbook, Worksheet y Range. Hay muchas otras clases que podrían ser útiles, como
PivotTable y Chart. El modelo de objeto permite que el usuario realice prácticamente cualquier
tarea automatizada necesaria.
En nuestro caso, para crear gráficos de datos usaremos la clase Application y las
colecciones WorkBooks y Charts, tal como explicamos en la siguiente sección.

3.2,2. Creando un Gráfígo de Datos con MS Excel

Para crear un gráfico en MS Excel con datos de una vista desde la aplicación debemos realizar
los siguientes pasos:
1. Hacer una referencia a la librería de tipos de MS Excel:
• Del menú 'Project" seleccionar "Add Reference".
• Del diálogo seleccionar la segunda ficha "COM".
• Seleccionar "Microsoft Excel12 Object Library".
• Clic en el botón "Select" y luego clic en "OK".

Demo 73 crear un gráfico de barras en MS Excel con datos obtenidos desde una
aplicación 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 Categorías y otra de Productos. La tabla de
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 633 -
Categorías se enlaza a un ComboBox mostrándose el nombre de la categoría y la tabla de
Productos sirve para crear una vista, la cual se enlaza a un DataGrid mostrándose el código,
nombre, precio y código de la categoría del producto.

Al seleccionar una Categoría del combo la vista se filtra mostrando los productos de dicha
categoría. Finalmente, al seleccionar un registro y dar clic al botón "Crear Gráfico" se abrirá el
Excel y se enviarán los datos de la vista filtrada por categoría, con los cuales se construirá un
gráfico de barras el cual también se guarda en disco como archivo gif.

Para ver la demostración debemos realizar los siguientes pasos:

1. En el diseñador 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 Propiedad Valor


Form1 Text Consulta de Productos x Categoria
Label Text Elige la Categoria
ComboBox1 Anchor Top,Left,Right
DropDownStyle DropDownList
DataGrid1 Anchor Top, Bottom, Left, Right
Button1 Name btnCrearGrafico
Text Crear Gráfico

2 Hacer una referencia a la librería de tipos de MS Excel.


3 En la ventana explorador de soluciones dar clic en el botón "View Code". Y copiar el
siguiente código

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 SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 634 -
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 gráfico es de barras en 3D.


 SetSourceDate(R,2) indica que el rango a graficar es R y su orientación es en
columnas
 Location(1) indica que el gráfico saldrá en una nueva hoja
 Advertencia: Se generará una excepción en el método Export si no se ha instalado
los filtros gráficos para poder crear archivos mediante MS Office al momento de su
instalación.
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 635 -

4 Grabar y Ejecutar la aplicación pulsando F5

5 Seleccionar una categoría y ver como se filtran los productos de dicha categoría.

6. Seleccionar un registro y clic al botón "Crear Gráfico" e inmediatamente se abrirá


MS Excel con los datos de la vista filtrada, con los cuales creará el gráfico, similar
al mostrado en la figura:
PRACTICAS SI2019A PARTE 7 REPORTES\ISMAEL VELIZ VILCA - 636 -

Figura 10.27.Ventana del MS Excel con el gráfico creado

7 Revisar que en la carpeta Bin se ha creado un archivo gif con un gráfico de productos de
dicha categoría.
8 Cerrar el Excel y si desea puede guardar el archivo.

También podría gustarte