Unidad 54. Impresión (VIII)





54.7. Más situaciones.

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.

 

54.8. Acabando.

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.

 

Octubre-2010
Pág. 54.8

Atrás  Inicio  Adelante






Página inicial  Cursos Informática Gratuitos

Síguenos en:   Facebook       Sobre aulaClic            Política de Cookies