Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Seleccionar Impresora para el OCX CrystalReport

Estas en el tema de Seleccionar Impresora para el OCX CrystalReport en el foro de Visual Basic clásico en Foros del Web. Muy buenas tardes Tengo un inconveniente que no se si conozca alguien como darle la vuelta a tal problema. En visual basic 6 y crystal ...
  #1 (permalink)  
Antiguo 12/11/2010, 13:33
 
Fecha de Ingreso: octubre-2005
Mensajes: 76
Antigüedad: 19 años, 2 meses
Puntos: 5
Seleccionar Impresora para el OCX CrystalReport

Muy buenas tardes

Tengo un inconveniente que no se si conozca alguien como darle la vuelta a tal problema.
En visual basic 6 y crystal report 8.5

Cargo un reporte usando el OCX colocado en la ventana CrystalReport1

Pero tengo el problema de que mi programa guarda en la Base de Datos la seleccion de 2 impresoras, 1 de Matriz, y 1 de Papel BOND, inyeccion de tinta o lazer.

El problema es que puede estar predeterminada en el sistema Windows una impresora que no es ninguna de las que he guardado en la base de datos. Entonces cuando mando salida de impresion por el objeto CrystalReport1 busca como impresora la predeterminada.

He logrado hacer esto con unas impresiones que son por el Printer de VB6, pero tengo otra cosa que es el caso salida a CrystalReport directo a impresora y no se como hacerlo.

Yo guardo informacion de las 2 Impresoras que mi programa necesita asi:

Private Sub GuardarImpresoras()
strSQL = "Select * From CONFIG_IMPRESORAS"
Set RsDatos = New Recordset
RsDatos.Open strSQL, cnConexdb, adOpenStatic, adLockOptimistic

If RsDatos.RecordCount > 0 Then
If cmbImpresoraMatriz.Text <> "" Then
RsDatos("id") = cmbImpresoraMatriz.ListIndex
RsDatos("impresora") = cmbImpresoraMatriz.Text
RsDatos("tipo") = "Matriz"
RsDatos.Update
End If
If cmbImpresoraPapelBOND.Text <> "" Then
RsDatos("id") = cmbImpresoraPapelBOND.ListIndex
RsDatos("impresora") = cmbImpresoraPapelBOND.Text
RsDatos("tipo") = "PapelBOND"
RsDatos.Update
End If
Else
If cmbImpresoraMatriz.Text <> "" Then
RsDatos.AddNew
RsDatos("id") = cmbImpresoraMatriz.ListIndex
RsDatos("impresora") = cmbImpresoraMatriz.Text
RsDatos("tipo") = "Matriz"
RsDatos.Update
End If
If cmbImpresoraPapelBOND.Text <> "" Then
RsDatos.AddNew
RsDatos("id") = cmbImpresoraPapelBOND.ListIndex
RsDatos("impresora") = cmbImpresoraPapelBOND.Text
RsDatos("tipo") = "PapelBOND"
RsDatos.Update
End If
End If
MsgBox "SU SELECCION DE IMPRESORAS HA SIDO GUARDADO", vbInformation, "SELECCION GUARDADA"
End Sub

Y en unas impresiones por el objeto Printer por codigo lo mando asi:

Tomo primero el Id de Impresora:
Private Sub ImpresoraSeleccionada()
'Buscamos la Configuracion de Impresoras indicadas como salida
strSQL = "Select * From CONFIG_IMPRESORAS"
Set RsDatos = New Recordset
RsDatos.Open strSQL, cnConexdb, adOpenStatic, adLockOptimistic
If RsDatos.RecordCount > 0 Then
RsDatos.MoveFirst
While Not RsDatos.EOF
If RsDatos("tipo") = "Matriz" Then
IdImpresoraMatriz = RsDatos("id")
NombreImpresoraMatriz = RsDatos("impresora")
ElseIf RsDatos("tipo") = "PapelBOND" Then
IdImpresoraPapelBOND = RsDatos("id")
NombreImpresoraPapelBOND = RsDatos("impresora")
End If
RsDatos.MoveNext
Wend
End If
End Sub


Y lo uso para la salida de impresion:
With Printer
Set Printer = Printers(IdImpresoraPapelBOND)
..........
Wend

De esa forma no importa que impresora este predeterminada en el sistema operativo, el programa mandara la salida de impresion a la que tiene indicada en la BD.

Pero con CrystalReport no se como, es decir, la ayuda de CrystalReport indica que para que el objeto CrystalReport1 haga caso de indicarle a que impresora mandar, debe indicarsele los 3 campos:
MsgBox "Impresora: " & Printer.DeviceName & vbCrLf & "Driver: " & Printer.DriverName & vbCrLf & "Puerto: " & Printer.Port
Crystal1.PrinterName = "Microsoft XPS Document Writer"
Crystal1.PrinterDriver = "winspool"
Crystal1.PrinterPort = "Ne00"

En teoria, algo asi bastaria para que el control de CrystalReport mande a esa impresora que se le indica (sin que sea realmente la predeterminada en el sistema).

Pero no se como obtener el puerto, yo recojo para mi programa la info de impresoras cargandolas en uns ComboBox, asi:
Sub ListaImpresoras()

Dim C As Integer
cmbImpresoraMatriz.Clear
cmbImpresoraPapelBOND.Clear
For C = 0 To Printers.Count - 1
cmbImpresoraMatriz.AddItem Printers(C).DeviceName
cmbImpresoraPapelBOND.AddItem Printers(C).DeviceName
Next
For C = 0 To Printers.Count - 1
If Printers(C).DeviceName = Printer.DeviceName Then
cmbImpresoraMatriz.ListIndex = C
cmbImpresoraPapelBOND.ListIndex = C
Exit For
End If
Next

End Sub

De la lista escojo las impresoras y las guardo con el 1er codigo expuesto aqui, pero no se como tomar el puerto desde un control ComboBox.

EN RESUMEN:
Como podria hacer para que el control CrystalReport que tengo en la ventana imprima por la impresora que yo le indique y no la que este predeterminada en el sistema operativo??

Si uso Crystal1.PrinterName = RsDatos("Impresora") No me lo toma solo con eso, puedo darle el Id_index y Nombre de la Impresora pero no se como tomar el Puerto "de esa impresora en particular" y no que recoga la de la predeterminada.

Por favor, quien pueda orientarme sobre esto, muy agradecido por sus comentarios sobre el caso.
  #2 (permalink)  
Antiguo 12/11/2010, 16:45
 
Fecha de Ingreso: octubre-2005
Mensajes: 76
Antigüedad: 19 años, 2 meses
Puntos: 5
Respuesta: Seleccionar Impresora para el OCX CrystalReport

Al parecer el Id del ListIndex que guardaba en la BD del ComboBox era el Puerto, lo que si guarde default fue el Driver "winspool"

Por ejemplo, el Id de la Impresora predeterminada del sistema es 0, y el de la impresora que quiero que salga la impresion es 1. Me fije que el puerto indicaba Ne01 o Ne02 o Ne03,... etc.

Asi que concatene "Ne" con el Numero Id de la impresora de la BD que saco y meto en una variable para usar luego en otras partes del codigo como este caso:

CrystalReport1.ReportFileName = App.Path & "\rpt\RepGuiaCONTRATADO.rpt"
CrystalReport1.RetrieveDataFiles
CrystalReport1.PrinterCollation = crptUncollated
CrystalReport1.PrinterDriver = DriverImpresoraMatriz
CrystalReport1.PrinterPort = "Ne" & Format(IdImpresoraMatriz, "00")
CrystalReport1.PrinterName = NombreImpresoraMatriz
CrystalReport1.PrintReport

Hice las pruebas pertinentes y efectivamente me mando a imprimir en una impresora que No era la predeterminada por el sistema operativo.

No sabia que el dato que buscaba ya lo tenia a mano :D
Ojala esta info pueda serle de ayuda a otros en el futuro, saludos o/

Etiquetas: crystalreport, ocx, vb6, visualbasic
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:38.