Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/01/2005, 01:33
tolotoco
 
Fecha de Ingreso: febrero-2004
Ubicación: Granada
Mensajes: 26
Antigüedad: 20 años, 2 meses
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