Un listado no siempre tiene que ser tabular, a veces hay que realizar listados o impresos en los que hay que colocar membretes, o direcciones de clientes, etc.
Hay que tener presente un matiz, antiguamente las impresoras no eran “””direccionables”””, se imprimía línea a línea en la impresora directamente, por lo tanto había que respetar ese orden secuencial de trabajo, que no se podía saltar.
Actualmente se imprime sobre un objeto, sea el que sea, y como se llame, que en realidad está en memoria, y trabajamos con las coordenadas x, y, horizontal y verticalmente, de tal forma que como la impresión se realiza al enviar la hoja a la impresora, podemos imprimir cualquier parte del listado en el momento que deseemos, otra cosa es que por lógica, lo hagamos de una manera más o menos ordenada.
Dicho de otra forma, podríamos dividir la hoja en zonas, y hacer cada paso en el orden que deseemos.
A partir de esta situación, cuando tengamos que realizar un impreso, en el que estará el membrete de la empresa, la zona de identificación del documento, el cliente al que va dirigido etc., se pueden crear procedimientos independientes para cada una de estas tareas.
Lo único que hay que tener presente es que cada uno tendrá una zona de la hoja asignada, y ahí es donde habrá que posicionarse para su impresión.
Por lo tanto podríamos encontrarnos en el evento BeginPrint con algo similar a esto.
Private Sub Hoja_BeginPrint(ByVal sender As Object, _
ByVal e As System.Drawing.Printing.PrintEventArgs) _
Handles Hoja.BeginPrint
Configuracion()
Empresa(e, Cy, Reg)
Cliente(e, Cy)
IdentificacionAlbaran(e,Cy)
End Sub
A continuación disponemos de un ejemplo de dicho tipo de procedimientos.
Public Sub Empresa(ByVal e As System.Drawing.Printing.PrintPageEventArgs, _
ByRef Cy As Single, _
ByVal RegParam As DataRow)
Dim AnchoString As New SizeF
Dim Fuente As Font
Dim Pincel As New System.Drawing.SolidBrush(System.Drawing.Color.Black)
Dim Despla As New SizeF
Dim Provinc As String
Dim Cx As Long
Cy = CLng(e.PageSettings.PaperSize.Height * 0.05)
Fuente = Est_Lin_Det
Cx = CLng(e.PageSettings.PaperSize.Width * 0.05)
LeerProvincia(Conexion, Mid(RegParam.Item("CodPos").ToString, 1, 2),Provinc, "")
With Reg
e.Graphics.DrawString(.Item("Descripcion").ToString, Fuente, Pincel, Cx, Cy)
Cy = Cy + Fuente.Height
e.Graphics.DrawString(.Item("Domicilio").ToString, Fuente, Pincel, Cx, Cy)
Cy = Cy + Fuente.Height
e.Graphics.DrawString(.Item("Poblacion").ToString, Fuente, Pincel, Cx, Cy)
Cy = Cy + Fuente.Height
e.Graphics.DrawString(.Item("CodPos").ToString & " " & Provinc, Fuente, Pincel, Cx, Cy)
Cy = Cy + Fuente.Height
e.Graphics.DrawString("N.I.F. " & .Item("NIF").ToString, Fuente, Pincel, Cx, Cy)
Cy = Cy + Fuente.Height
e.Graphics.DrawString("Tel. " & .Item("Telefono").ToString, Fuente, Pincel, Cx, Cy)
Cy = Cy + Fuente.Height
e.Graphics.DrawString("Fax " & .Item("Fax").ToString, Fuente, Pincel, Cx, Cy)
Cy = Cy + Fuente.Height
e.Graphics.DrawString(" " & .Item("EMail").ToString, Fuente, Pincel, Cx, Cy)
End With
Cy = Cy + Fuente.Height
End Sub
La ubicación en la hoja viene marcada por los valores que asignemos en estas variables al inicio del procedimiento.
Cy = CLng(e.PageSettings.PaperSize.Height * 0.05)
Cx = CLng(e.PageSettings.PaperSize.Width * 0.05)
En esta línea indicaremos donde empezamos a imprimir los datos, en este caso de la empresa.
Cy = CLng(e.PageSettings.PaperSize.Height * 0.05)
Cx = CLng(e.PageSettings.PaperSize.Width * 0.05)
Si deseamos que esta impresión fuera la los datos del cliente, podríamos iniciar con
Cy = CLng(e.PageSettings.PaperSize.Height * 0.08)
Cx = CLng(e.PageSettings.PaperSize.Width * 0.6)
Es decir más bajo y más a la derecha.
Así con cada bloque de datos que se envíen a imprimir.
Por ejemplo la identificación de un albarán podría ser
Cy = CLng(e.PageSettings.PaperSize.Height * 0.15)
Cx = CLng(e.PageSettings.PaperSize.Width * 0.08)
Empezaría siempre en un quince por ciento del alto, y a un ocho por ciento del ancho.
Los ejemplos aquí expuestos, son versiones didácticas, y que en algunos casos están reducidas.
Como último, el motivo de que exista en la estructura de datos, un elemento siempre con valor nulo, es para obtener en los casos que fuera necesario, la coordenada X del extremo derecho del listado, que se podría hacer de cualquier otra forma, pero esta es una más.
Evidentemente el uso de Crystal Reports es muy cómodo, la ventaja de hacerlo de esta forma es la de controlar el sistema, y poderlo personalizar como se desee, y además llegar donde de otra forma a lo mejor no sería posible hacerlo.
Síguenos en: Facebook Sobre aulaClic Política de Cookies