
04/01/2005, 01:33
|
| | Fecha de Ingreso: febrero-2004 Ubicación: Granada
Mensajes: 26
Antigüedad: 21 años Puntos: 0 | |
Vamos a ver si soy capaz de explicarlo. Es un poco complicado.
Para poder condicionar la forma en que se imprimirán los datos debes cargar el report a través de código para poder hacer las comprobaciones y las asignaciones sobre los datos y los campos que necesites.
Por ejemplo: Tú tienes un report que se llama "ParteAccidente" y que tiene 200 campos en los que se imprimirán datos.
En los campos "txtAccidentado y Text177" necesitas que se modifique la información según los datos introducidos. En el caso del primer campo necesitas juntar la información de 3 campos en uno. En el caso del segundo aparecerá un "SI" o "NO" según el dato que contenga en la base de datos el registro asociado a este campo.
Pues bien, en el código siguiente explica como debes hacer las declaraciones, comprobaciones y asignaciones para que te salga como tu quieres.
EMPEZAMOS EL CODIGO
La clase CParte es la que recoge y asigna los campos del report para poder hacer las asignaciones según nos interese. En el ejemplo, "txtAccidentado" y "Text177" son dos campos del report llamado "ParteAccidente"
Public Class CParte
Public documentoCR As ParteAccidente
Public Sub New()
documentoCR = New ParteAccidente
End Sub
Public Sub Accidentado(ByVal texto As String)
Dim objetoTexto As CrystalDecisions.CrystalReports.Engine.TextObject
objetoTexto = CType(documentoCR.Section5.ReportObjects("TxtAccid entado"), CrystalDecisions.CrystalReports.Engine.TextObject)
objetoTexto.Text = texto
End Sub
Public Sub EACTCTR(ByVal texto As String)
Dim objetoTexto As CrystalDecisions.CrystalReports.Engine.TextObject
objetoTexto = CType(documentoCR.Section3.ReportObjects("Text177" ), CrystalDecisions.CrystalReports.Engine.TextObject)
objetoTexto.Text = texto
End Sub
. Debe haber tantos Sub Nombre_Campo como campos quieras chequear
. Aquí seguiría el código para el resto de asignaciones.
.
En la siguiente clase es donde se hacen las comprobaciones y las asignaciones de los datos que se imprimirán en el report. Por ejemplo: el registro "EACTCTR" de la base de datos corresponde al campo "Text177" del report.
Imports CrystalDecisions.CrystalReports.Engine
Imports System.IO
Imports System.Threading
Imports System.Data
Imports System.Data.SqlClient
Public Class CInforme
Dim Pe As CDatosPersonales
Dim Tr As CDatosTrabajador
Dim Em As CDatosEmpresa
Dim Lu As CDatosLugar
Dim Ac As CDatosAccidente
Dim Ai As CDatosAsistenciales
Dim Ec As CDatosEconomicos
Dim At As CDatosActores
Dim SB As CDatosSinBaja
Dim conectaC As String
Dim informe As ParteAccidente
Dim informeSB As ParteSinBaja
Dim dts As dsPrueba
Dim dts4 As dsSinBaja
Dim casque As Boolean
Public Sub New()
'Recupera la cadena de conexión de la variable definida en Web.config
conectaC = System.Configuration.ConfigurationSettings.AppSett ings("cadenaCon")
dts = New dsPrueba()
dts4 = New dsSinBaja()
End Sub
Public Function Imprimir(ByVal vPer As CDatosPersonales, ByVal vTra As CDatosTrabajador, ByVal vEmp As CDatosEmpresa, ByVal vLug As CDatosLugar, ByVal vAcc As CDatosAccidente, ByVal vAsi As CDatosAsistenciales, ByVal vEco As CDatosEconomicos, ByVal vAct As CDatosActores, ByVal Puede As String) As String
casque = False
Pe = New CDatosPersonales()
Tr = New CDatosTrabajador()
Em = New CDatosEmpresa()
Lu = New CDatosLugar()
Ac = New CDatosAccidente()
Ai = New CDatosAsistenciales()
Ec = New CDatosEconomicos()
At = New CDatosActores()
AsignarDatos(vPer, vTra, vEmp, vLug, vAcc, vAsi, vEco, vAct, Puede)
If casque = False Then
Dim informe As CParte
informe = New CParte()
informe.documentoCR.SetDataSource(dts)
Dim texto As String
'Asigna el nombre del accidentado
texto = dts.Tables(0).Rows(0)("TAPE1") + " " + dts.Tables(0).Rows(0)("TAPE2") + ", " + dts.Tables(0).Rows(0)("TNOM")
informe.Accidentado(texto)
'Comprueba si actuaba como contrata
If dts.Tables(0).Rows(0)("EACTCTR") = "0" Then
texto = "NO"
Else
texto = "SI"
End If
informe.EACTCTR(texto)
.
. Aquí seguirían el resto de comprobaciones y al final imprime el documento
. En mi caso la impresora genera un PDF. Si no se indica impresora imprime
. por la impresora por defecto.
Try
' Imprimir documento
Dim impresora As String
impresora = "Jaws PDF Creator"
informe.documentoCR.PrintOptions.PrinterName = impresora
informe.documentoCR.PrintToPrinter(1, False, 0, 0)
Catch e As Exception
Return e.Message
Exit Function
End Try
End If
End Function
' Este sería el código a imprimir en el Button para iniciar el proceso de impresión.
Dim informe As CInforme
informe = New CInforme()
' Se asignan los datos que se van a imprimir
fich = informe.Imprimir(Per, Tra, Emp, Lug, Acc, Asist, Eco, Act, puede)
IMPORTANTE: Observa que en todas las declaraciones de las diferentes clases la variable es la misma "informe". Para encadenar las asignaciones y comprobaciones sin problemas, deben llamarse igual.
Dim informe As Cinforme
Dim informe As CParte
Este ejemplo y este código son para .NET
Espero que te sirva. Ya me dirás algo.
Un saludo
Última edición por tolotoco; 04/01/2005 a las 01:53
Razón: Faltan explicaciones
|