Page 1 of 2

Asignar impresora por terminal?

PostPosted: Sun Apr 21, 2024 4:36 am
by Armando
Foreros:

Cómo o donde definen ustedes las impresoras por cada terminal?, me explico un poco más

Mi aplicación utiliza, en una red LAN, en cada terminal, dos tipos de impresoras, una laser y una para tickets

La impresora laser esta definida como pre determinada, y cuando el usuario imprima
un ticket no debe salir en la impresora pre determinada (laser), entiendo que debo tener
especificada la salida hacia la impresora de tickets, y esa es mi duda, cómo o donde la
definen ustedes, consideren que son varias terminales y cada terminal tiene físicamente
un par de impresoras, laser y tickets de diferentes marcas y modelos.

Espero haber explicado mi duda, parece que hoy mi cerebro no da más.

Saludos

Re: Asignar impresora por terminal?

PostPosted: Sun Apr 21, 2024 4:27 pm
by karinha

Re: Asignar impresora por terminal?

PostPosted: Sun Apr 21, 2024 4:58 pm
by Armando
Karinha:

Gracias por la respuesta, mi necesidad es que sin intervención del usuario la impresión
salga a la impresora apropiada, si es un reporte que salga a la impresora laser pero si
es un ticket salga a la impresora de tickets, insisto, sin intervención del usuario.

Por lo anterior debo especificar, en algún lugar o por algún medio, la impresora apropiada.

Saludos

Re: Asignar impresora por terminal?

PostPosted: Sun Apr 21, 2024 5:28 pm
by paquitohm
En mi caso tengo, para cada tipo de documento, una edicion-asignacion de impresora para cada usuario

Re: Asignar impresora por terminal?

PostPosted: Sun Apr 21, 2024 5:33 pm
by Armando
Muchas gracias Paquito.

Es una excelente alternativa, habrá alguna otra?, solo para hacer una tormenta de ideas, no porque tu sugerencia me parezca mala.

Saludos

Re: Asignar impresora por terminal?

PostPosted: Mon Apr 22, 2024 3:28 am
by sysctrl2
las defino en un .ini en el disco duro local
y ya :D

Code: Select all  Expand view

cToPrinterTicket := LeeIniFile("CONFIG", "PRINTER_TICKET", "C:\CONFIG\PRINTERS.INI" )
cToPrinterLaser  := LeeIniFile("CONFIG", "PRINTER_LAER", "C:\CONFIG\PRINTERS.INI" )
cToPinterCodeBar := LeeIniFile("CONFIG", "PRINTER_ZEBRA", "C:\CONFIG\PRINTERS.INI" )

SetPrintDefault( cToPrinterLaser   )
PRINTER oPrn to cToPrinterLaser

FUNCTION LeeIniFile(cSection, cVal, cFile )
   local oIni
   LOCAL cStr := ''
   INI oIni FILE cFile
      GET cStr   SECTION cSection ENTRY cVal   OF oIni DEFAULT ""
   ENDINI

RETURN ( cStr )
 

Re: Asignar impresora por terminal?

PostPosted: Mon Apr 22, 2024 11:07 am
by karinha
Armando, ¿por qué no guardas el usuario, la estación (terminal) que está usando el usuario, la serie de computadora y la impresora a usar en un *.DBF?

Tks

Regards, saludos.

Re: Asignar impresora por terminal?

PostPosted: Mon Apr 22, 2024 4:22 pm
by Armando
Amigos del foro:

Todas las sugerencias son válidas y funcionan, tal vez me decante por usar un archivo .INI

Saludos y muchas gracias

Re: Asignar impresora por terminal?

PostPosted: Mon Apr 22, 2024 8:47 pm
by cmsoft
Armando, para poder hacer esto, si o si debes tener algo en la terminal en modo local, o bien, identificar cada terminal por, por ejemplo, su IP o nombre de equipo en una base de datos centralizada.
La idea de SysCtrol es muy buena, puedes usar un archivo INI o un DBF pero guardado en una carpeta local.
La opcion de una dbf es más fácil, porque incluso puedes hacer un modulo para modificar sobre ella.
En caso que quieras utilizar los datos almacendos en una base centralizada (ya sea DBF o MySql) puedes tener una tabla con las terminales instaladas, referenciando a ellas por el nombre del equipo, que logras obtener con la funcion GetHostName()
Las alternativas son varias
Luego en las impresiones que tienes que dirigir a una impresora determinada, haces lo que bien comenta sysctrl2 , haces PRINTER oPrn to cPrinterTicket
Mi granito de arena

Re: Asignar impresora por terminal?

PostPosted: Mon Apr 22, 2024 9:29 pm
by Armando
César:

Excelente explicación y muy completa, siempre son buenas las tormentas de ideas.

Saludos

Re: Asignar impresora por terminal?

PostPosted: Tue Apr 23, 2024 3:50 pm
by russimicro
Buen dia..

Tener almacenado por cada estación los datos de las impresoras : remotas o como segundas opciones
y segun necesidad del documento a imprimir

IF cImpFac == "S"
IMPRIMIR(cFilImp,"")
else
IMPRIMIR(cFilImp,"2") ... // IMPRIMIR(cFilImp,"3")
endif

Code: Select all  Expand view


FUNCTION IMPRIMIR(cFilImp,cNroImp)

    LOCAL cNomRem := ""
     
    IF cNroImp == "3"  // REMOTA X RESTAURANTES .. COMO TERCERA IMPRESORA
       cNomRem := M->cImpRemNr3
    ENDIF

    IF cNroImp == "2"  // REMOTA X RESTAURANTES .. COMO SEGUNDA IMPRESORA
       cNomRem := M->cImpRemNr2
    ENDIF

    IF EMPTY(cNomRem)
       cNomRem := M->cImpRemNr1
    ENDIF

    IF EMPTY(cNomRem)
       cNomRem := "DEFAULT"
    ENDIF

    IF cNomRem <> "DEFAULT"
       setprintdefault()
    ENDIF  
   
    shellexecute(0,"print",cFilImp,,,.f.)
   
RETURN    
   


 

Re: Asignar impresora por terminal?

PostPosted: Wed Apr 24, 2024 3:24 am
by Armando
russmicro:

Muchas gracias por la idea.

Saludos

Re: Asignar impresora por terminal?

PostPosted: Sat Apr 27, 2024 8:06 pm
by VitalJavier
Armando, que tal.
Oye yo tengo 2 impresoras en una caja de cobro
1.- Grande para un tipo de notas
2.- Una pequeña de tickets para unos comprobantes que se dan

Asi imprimo sobre la impresora que esta por default determinada

sPrinterName := PRNGETNAME() <<= Esto lo pongo al inicio del programa para tomar la impresora por default
SetPrintDefault(sPrinterName) <<= Esto al momento de la impresión, por si pierdo en algún momento la impresora
E imprimo en hoja Grande.

Con esto, Tengo instalada una mini printer que le puse de nombre "TIKET" y sobre ella imprime
cPrint := "TICKET"
PRINT oPrn TO cPrint

Espero y te sirva.
Saludos.

Re: Asignar impresora por terminal?

PostPosted: Sun Apr 28, 2024 12:12 pm
by karinha
Armando,

Code: Select all  Expand view

/*
Purpose : Save and restore the current printer.
Notes   : When an application is run, the current printer always defaults to the
          Windows default printer. Here is how default to the last used printer in
          the application. Each user can have a different default printer. The printer
          name is saved in a user.ini file under the user's section.
Author  : James Bott, jbott@compuserve.com
Date    : 04/09/04 10:53:04
Language: Fivewin Harbour 2.4. Harbour 43 Alpha.
*/


#include "fivewin.ch"

// --- Test
FUNCTION Main()

   LOCAL oIni, cPrinter := "", oUser

   INI oIni FILE ".\user.ini"

   oUser := TUser():new()
   oUser:name := "James"

   // Get application default printer for oUser
   GET cPrinter section oUser:name entry "DefaultPrinter" DEFAULT prnGetName() of oIni

   msgInfo( prnGetName(), "Windows default printer is:" )

   msgInfo( cPrinter, "Application default printer from INI file is:" )

   // Set the current printer to cPrinter
   setPrinter( cPrinter )

   msgInfo( prnGetName(), "Application Current printer as set via code is:" )

   printerSetup()

   // Save current printer as default
   SET section oUser:name entry "DefaultPrinter" TO prnGetName() of oIni

RETURN NIL
// --- Set application's current printer. Returns .T. if successful.
// cPrinter must be the name of an existing print device.
FUNCTION setPrinter( cPrinter )

   LOCAL cOldPrinter := "", hDC := 0, aPrn, cText := "", lSuccess := .F.

   IF cPrinter <> prnGetName()

      cText := StrTran( GetProfString( "Devices" ), Chr( 0 ), Chr( 13 ) + Chr( 10 ) )

      aPrn  := Array( MLCount( cText, 250 ) )

      AEval( aPrn, {| v, e | aPrn[ e ] := Trim( MemoLine( cText, 250, e ) ) } )

      IF  AScan( aPrn, cPrinter ) > 0

         cOldPrinter := GetProfString( "windows", "device", "" )

         WriteProfString( "windows", "device", cPrinter )

         SysRefresh()

         PrinterInit()

         hDC := GetPrintDefault( GetActiveWindow() )

         IF hDC > 0

            lSuccess := resetDC( hDC )

         ENDIF

         SysRefresh()

         WriteProfString( "windows", "device", cOldPrinter  )

      ENDIF

   ENDIF

RETURN lSuccess
// --- User class
CLASS TUser

   DATA name
   METHOD NEW
   METHOD END virtual

ENDCLASS

METHOD new()

   ::name := ""

RETURN self

// eof
 


Regards, saludos.

Re: Asignar impresora por terminal?

PostPosted: Mon Apr 29, 2024 3:41 pm
by Armando
Javier, Karinha y todos los amigos que respondieron, muchas gracias.

Intentaré los ejemplos y reportaré por cual me decanto, por el momento estoy liado con otro tema.

Saludos y, reitero, muchas gracias.