Ver Mensaje Individual
  #4 (permalink)  
Antiguo 29/06/2007, 08:25
robsergar
 
Fecha de Ingreso: junio-2003
Mensajes: 37
Antigüedad: 20 años, 11 meses
Puntos: 0
Re: cambiar impresora predeterminada antes de datareport

Muy buena variante en la gestión de impresión!

Otras sugerencias acerca de los modulos publicados:

Cuando se crea el archivo .bas con el código de "WriteProfileString", si se desea poner la sentencia OPTION EXPLICIT, da error la constante HWND_BROADCAST, ya que no esta declarada.
Si la desea declarar, anteponer la siguiente linea al codigo del módulo:
Const HWND_BROADCAST = &HFFFF&
--------------------------------------------------------------------
Estos modulos los he modificado, y ahora realizo la gestion de las impresoras por base de datos, ya que las direcciones de las impresoras en una red y mas cuando estan conectadas a puertos USB no son las mismas. por ejemplo:

Pc1:
EpsonA: Ne01
HP1010: Ne06
HP5050: Ne04

PC2:
EpsonA: Ne02
HP1010: Ne03
HP5050: Ne01

Para seleccionar la impresora he creado una funcion, a la cual le paso como parámetro el numero del PC y el nombre de la impresora (estos datos los leo de un archivo .txt que guardo en cada PC). Luego me fijo en que puerto está conectado esta impresora a la PC indicada, y llamo a la funcion WriteProfileString con los parametros correctos.
A continuacion paso la funcion que les comento:

--------------------------------------------------------
Public Function SeleccionaImpresora(ByVal NroImpresora As Integer, nroTerminal As Integer) As Boolean
Dim di, l
SeleccionaImpresora = False
On Error GoTo ErrorImpresora
cierra datos.rsImpresora_Puerto
'Impresoras instaladas:
'1 -> HP1010
'2 -> HP1020
'3 -> HP3055
'4 -> SamSungML1740
datos.Impresora_Puerto NroImpresora, nroTerminal
If datos.rsImpresora_Puerto.RecordCount > 0 Then
'MsgBox " encontro la impresora 1"
'di = WriteProfileString("WINDOWS", "DEVICE", "HP3055,winspool,Ne02:")
'l = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, ByVal "windows")

di = WriteProfileString("WINDOWS", "DEVICE", Trim(datos.rsImpresora_Puerto!Nombre) & ", winspool, " & Trim(datos.rsImpresora_Puerto!Puerto))
'l = SendMessageTimeout(HWND_BROADCAST, WM_WININICHANGE, 0, 0, SMTO_NORMAL, 1000, Null)

l = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, ByVal "windows")
SeleccionaImpresora = True
Else
MsgBox "no encontro la impresora para realizar la impresión."
End If

GoTo sigue
ErrorImpresora:
'Stop

MsgBox "Error de impresion." & Chr(13) & Err.Description & Chr(13) & "Impresora:" & Trim(datos.rsImpresora_Puerto!Nombre) & vbCrLf & _
"Issue Number: " & CStr(Err.Number), vbCritical Or vbOKOnly, "Printer Manager"

sigue:
End Function

--------------------------------------------------------



Control de errores en la seleccion de las impresoras:
Cuando una impresora no se encuentre disponible por alguna circunstancia (errores producidos por mala conexion de red, etc), el objeto error toma control de este evento, permitiendo comunicar dicha situación al usuario:

Select Case Err.Number
Case 8555
MsgBox "Error de impresion." & Chr(13) & Err.Description & Chr(13) & "Impresora:" & Trim(datos.rsImpresora_Puerto!Nombre) & vbCrLf & _
"Issue Number: " & CStr(Err.Number), vbCritical Or vbOKOnly, "Printer Manager"
---------------------------------------------------------

Saludos a todos!
Sergio
Bahía Blanca
__________________
Sergio Garcia
Bahia Blanca
Argentina