Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Enviar una impresión a una impresora de Red (https://www.clubdelphi.com/foros/showthread.php?t=88851)

santiago14 13-08-2015 16:03:46

Enviar una impresión a una impresora de Red
 
Buenas. Tengo una impresora de red en la LAN. La misma tiene una IP fija.
Quisiera desde mi aplicación Delphi enviar una impresión hacia ella utilizando la dirección IP.
Utilizo QReport y Delphi XE5.

Gracias.

Santiago.

Lepe 13-08-2015 17:10:11

Si pones un TPrinterDialog, te soluciona parte del trabajo al llamar a PrinterDialog1.Execute().

El usuario elegirá la impresora del desplegable, las opciones de impresión, papel apaisado o no, etc.
Por supuesto después tienes que "recoger" esas opciones que ha seleccionado el usuario y asignarlas a tu documento que vas a imprimir, esto se hace asignando esas propiedades a tu qrPrinter del Quickreport.

A las bravas, en Delphi tienes la clase TPrinters y el printerindex suele ser el índice de la impresora predeterminada en windows. El objeto global es Printers y puedes recorrerlo para saber las impresoras que hay, como se llaman, etc.

Saludos!

santiago14 13-08-2015 19:18:42

Cita:

Empezado por Lepe (Mensaje 495474)
Si pones un TPrinterDialog, te soluciona parte del trabajo al llamar a PrinterDialog1.Execute().

El usuario elegirá la impresora del desplegable, las opciones de impresión, papel apaisado o no, etc.
Por supuesto después tienes que "recoger" esas opciones que ha seleccionado el usuario y asignarlas a tu documento que vas a imprimir, esto se hace asignando esas propiedades a tu qrPrinter del Quickreport.

A las bravas, en Delphi tienes la clase TPrinters y el printerindex suele ser el índice de la impresora predeterminada en windows. El objeto global es Printers y puedes recorrerlo para saber las impresoras que hay, como se llaman, etc.

Saludos!

Ah, claro. Perdón. Me faltó aclarar algo.
En este caso puntual, el usuario no tiene tiempo de elegir una impresora desde le formulario de impresoras (TPrinterDialog) puesto que le es muy impráctico porque debe hacer la tarea algo rápido.
En favor de ello, tiene actualmente una impresora asignada a través de un archivo .ini (local) y él no tiene que andar eligiéndola cada 15 segundos de la lista.

La idea era poner en el mismo .ini la dirección IP en lugar del nombre de la impresora actual. Solo que no se como hacer esto.

Santiago.

santiago14 13-08-2015 19:25:55

Para aclarar un poco mas.
La impresora de red está instalada en todas las estaciones.
En este lugar me piden que haya un plan de contingencia rápido acerca de impresoras, si se rompe una, la reemplazamos por otra rápidamente. En favor de ello tengo una impresora de red con una IP fija.
Si le pasa algo a esa máquina, la reemplazo por otra que tengo lista, le pongo la misma IP fija y listo, sigo sin problemas.
El drama es que en este punto Delphi me pide el nombre de la impresora y no una dirección IP.
Cuando hago cambios de impresora la segunda tiene que tener otro nombre, ¿o no?, y tendría que reconfigurar todas las estaciones para que impriman en la nueva. La idea es que no sea así, que solamente cambiando la impresora y poniéndole la misma IP fija, todos sigan imprimiendo sin drama.
Espero haber sido claro.

AgustinOrtu 13-08-2015 21:32:28

Usar archivos ini en un entorno de red es totalmente arcaico e impractico.

Yo grabaria todo en la BD, y al reemplazar el equipo actualizas la BD. Eso al margen del tema ip

Ahora la pregunta es, cuando grabas en el ini, como grabas la información de la impresora? Usando el citado TPrinterDialog? Windows debería manejar correctamente los redireccionamientos

santiago14 14-08-2015 02:29:26

Cita:

Empezado por AgustinOrtu (Mensaje 495485)
Usar archivos ini en un entorno de red es totalmente arcaico e impractico.

Yo grabaria todo en la BD, y al reemplazar el equipo actualizas la BD. Eso al margen del tema ip

Ahora la pregunta es, cuando grabas en el ini, como grabas la información de la impresora? Usando el citado TPrinterDialog? Windows debería manejar correctamente los redireccionamientos

Estoy de acuerdo, es arcaico.
En estos momentos estamos haciendo toda un reingeniería para hacer todo eso y mas.
Pero de momento hay que solucionar el problema y es lo que estoy buscando.

Este sistema está funcionando hace años y para hacer los cambios y "modernizarlo" hay que trabajar bastante en muchas cosas. Así que a veces jugamos de bomberos y apagamos el incendio.

Santiago.

ecfisa 14-08-2015 07:04:35

Hola santiago14.

Podrías intentar mediante SPM

Saludos :)

Neftali [Germán.Estévez] 14-08-2015 10:28:53

En mi modesta opinión estás intentando aplicar una solución en un lugar donde no está el problema. me explico (simplificando mucho).
Un equipo y el software que contiene funciona por capas; Primero está el sistema operativo, luego se instalan programas de caracter general y drivers y por último se instalan aplicaciones como la tuya.

Cuando una aplicación como la tuya(capa 3), necesita imprimir, busca las impresoras instaladas con sus drivers (capa 2) y eso acaba enviando una impresión a través de un cable utilizando llamadas al sistema operativo (Capa1).

Tu problema se produce en la (capa 2) porque ha cambiado la configuración de la impresora (puerto, IP, drivers,...) e intentas resolverlo en la (capa 3).

Tu impresión debe pasar obligatoriamente por las impresoras instaladas. No puedes enviar una impresión a una IP, debes enviarla a una impresora instalada que tendrá una IP. Igual que no puedes enviarla a un puerto distinto o de otro tipo, debes enviarla a una impresora instalada que tendrá un puerto de un tipo u otro configurado.

No se si me explico...
Lo que quiero decir es que (creo) que lo que debes solucionar es, (1) cómo cambiar la configuración de una impresora instalada (desde tu programa) y luego (2) lanzar la impresión de forma normal, no intentar enviar directamente la impresión a una IP distinta.

newtron 14-08-2015 14:05:49

Hola a tod@s.

Igual suelto una tontería pero.... ¿por qué no le pones el mismo nombre a la impresora en todos los puestos y la buscas por su nombre? Le asignas el nombre de la impresora al documento en alguna configuración del programa y a volar.

Saludos

Luis M. 14-08-2015 14:26:16

Hola.
No se si te servirá de ayuda, pero te explico un caso parecido.
Tengo un cliente que emite facturas y albaranes muy seguidos y perdia tiempo en
seleccionar las impresoras (una para facturas y la otra para albaranes), y a veces
se equivocaba.
La manera que lo corregí, fué instalando un switch para impresoras y solo tenía que cambiar
de botón según lo que quisiera imprimir (las impresoras las tenía al lado del ordenador).

En la DB del programa guardaba la la configuración de las dos impresoras y según sea el listado
a imprimir se seleccionada una.

Ejemplo:

Código Delphi [-]
var
  cPath: string;
begin
  DMList := TDMList.Create(Self);
  cPath := ExtractFilePath(Application.ExeName);
  DMList.QCAlbaran.Close;
  DMList.QCAlbaran.SQL.Text := 'Select * From calbaran Where Numero = '+
                                           QuotedStr(DM.CAlbaranNUMERO.AsString);
  frxReport1.LoadFromFile(cPath + 'REPORTS\Albaran.fr3');
  DM.Config.Open;
  frxReport1.PrintOptions.Printer := DM.ConfigPRINTER_LISTADOS.AsString;
  frxReport1.PrepareReport(True);
  frxReport1.Print;
  FreeAndNil(DMList);
  DM.Config.Close;
end;

La idea podría ser que teniendo las dos impresoras guardadas en la tabla de
configuración, marcases cual sería la que imprimiría por defecto.
En el caso que una fallase una, te vas a configuración y marcas la otra.
No se si me he explicado bien. :o


La franja horaria es GMT +2. Ahora son las 04:17:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi