problema eligiendo Impresora con Set Printer

75 views
Skip to first unread message

RS “Ricardo”

unread,
Jan 22, 2026, 5:17:37 PM (10 days ago) Jan 22
to Comunidad de Visual Foxpro en Español
Estimados alguna sugerencia para resolver lo siguiente: (vfpadvance 10.000.00.00 con win 10)
tengo creadas las siguientes impresoras  con los siguientes nombres
POS-80C
Y  THERMAL Receip Printer

En los Centros de Abastecimiento  el BAR tiene asignada la POR-80C 
y las  COCINAS (FRIA/CALOR/POSTRES) la  THERMAL Receip Printer

para decidir donde imprimir 
Tengo un metodo que a partir del nombre de las impresoras existentes en el sistema asigna la impresora con la siguientes instrucciones:
Select Centros_Abastecimiento.centroabastecimiento,;
Centros_Abastecimiento.Impresora_ppal,;
Centros_Abastecimiento.Impresora_alt1;
FROM Centros_Abastecimiento;
WHERE Centros_Abastecimiento.id = EstCtaDet.IdAbastecimiento;
INTO Cursor mi_item_impresora
If _Tally != 0
Select mi_item_impresora
Go Top
thisformset.impresora = mi_item_impresora.Impresora_ppal
thisformset.Impresora_alt1=mi_item_impresora.Impresora_alt1
Set Printer To
If Len(Alltrim(thisformset.impresora)) != 0
IMPRES=thisformset.impresora
set_imp= "SET PRINTER TO NAME '"+Alltrim(IMPRES)+"'"
&set_imp
Else
Set Printer To Default
ENDIF
al hacer un debug  en set_imp tiene  " SET PRINTER TO NAME 'POS-80C'"
t la llamada al reporte se hace con 
TRY
    If Len(Alltrim(thisformset.impresora)) != 0
   Report Form Report\ticket_pedido_c_abast.frx  To Printer  Nodialog
endif
replace estctadet.enviado WITH .t.
*UPDATE EstCtaDet SET enviado = .t. WHERE id = thisformset.idestctadet
Catch To oExc
mensg=oExc.Comment+" "+oExc.Details+" "+oExc.ErrorNo+" "+oExc.Message
Messagebox(mensg,0,"Atención")
Set Printer To Default
Report Form Report\ticket_pedido_c_abast.frx To Printer Prompt Preview
*UPDATE EstCtaDet SET enviado = .t. WHERE id = thisformset.idestctadet
replace estctadet.enviado WITH .t.
Finally
Endtry

PERO no toma la impresora asignada en el caso del bar (POS-80C) y todo lo imprime en la THERMAL Receip Printer

Ambas impresoras están conectadas al mismo equipo (de desarrollo una en USB0004 Y LA OTRA EN usb0001 ( en producción están conectadas por red  con ip-fija independientes)



jorgeg...@gmail.com

unread,
Jan 22, 2026, 6:43:54 PM (10 days ago) Jan 22
to Comunidad de Visual Foxpro en Español

No se si es un error de type pero dices que en debuger te sale   " SET PRINTER TO NAME 'POS-80C'"   y veo que   'POS-80C' tiene comillas simple y no debe ser asi

lcPrinter =  thisformset.impresora
SET PRINTER TO NAME (lcPrinter)

RS “Ricardo”

unread,
Jan 22, 2026, 7:09:13 PM (10 days ago) Jan 22
to Comunidad de Visual Foxpro en Español
Gracias por responder 
efectivamente  TENGO set_imp = "SET PRINTER TO NAME '"+Alltrim(IMPRES)+"'"
para que el comando quede SET PRINTER TO 'POS-80C'
No obstante lo cambie a  set_imp = "SET PRINTER TO NAME '"+Alltrim(IMPRES)
para que el comando quede SET PRINTER TO POS-80C  pero de igual forma no envia el form a la impresora especificada

jorgeg...@gmail.com

unread,
Jan 22, 2026, 7:15:17 PM (10 days ago) Jan 22
to Comunidad de Visual Foxpro en Español
 SET PRINTER TO NAME POS-80C 

jorgeg...@gmail.com

unread,
Jan 22, 2026, 7:17:39 PM (10 days ago) Jan 22
to Comunidad de Visual Foxpro en Español
lcPrinter =  "POS-80C"

SET PRINTER TO NAME (lcPrinter)

si el nombre de la impresora instalada en tu windows ser llama  POS-80C  tiene que funcionar por si o si.

RS “Ricardo”

unread,
Jan 22, 2026, 9:05:24 PM (9 days ago) Jan 22
to Comunidad de Visual Foxpro en Español
GRACIAS por sus sugerencias pero ninguna surte efecto 
lo curioso es que si desde la ventana de comandos ejecuto 

SET PRINTER TO NAME "POS-80C"
REPORT FORM REPOR\report2.frx TO PRINTER noconsole  si lo envia  el report a esa impresora 
lo mismo pasa con 
SET PRINTER TO NAME "THERMAL RECEIPT PRINTER"
REPORT FORM REPORT\report2.frx TO PRINTER noconsole



sin embargo si ejecuto dentro del programa  las mismas instrucciones imprime siempre en la thermal receipt  printers
ahora puse esta secuencia 
 IF  '80' $ comando
   com= 'SET PRINTER TO NAME '+'"POS-80C"'
 ELSE
    com = 'SET PRINTER TO NAME ' +'"THERMAL Receipt Printer"'
 ENDIF
 &com
y nada 

Bueno muchachos por la hora voy dejarlo hasta aca y mañana seguire investigando 

cuando encuentre la respuesta se las escribire aca 
mismo 
gracias igual por tomarse la molestia de dar ideas y sugerencias

Kisko

unread,
Jan 23, 2026, 6:30:58 AM (9 days ago) Jan 23
to Comunidad de Visual Foxpro en Español
Buenos días a todos.

Yo tengo implementado el siguiente procedimiento en SetPrinter.prg:

Lparameters lcImpresora, lnTimeOut
Local llReturn,  lcMessageText

If Type('m.lnTimeOut') != 'N'
m.lnTimeOut = 2000
Else
m.lnTimeOut = Int(m.lnTimeOut)
EndIf
m.lcImpresora = Alltrim(NEvl(m.lcImpresora, ''))

If IsNull(m.lcImpresora)  .o
r. Empty(m.lcImpresora)     && No se selecciona ninguna impresora
m.llReturn = .T.
Else
m.llReturn = .F.
Try
Set Printer To Name (m.lcImpresora)
m.llReturn = .T.
Catch To m.loError
Text To m.lcMessageText TextMerge NoShow PreText 2
La impresora <<m.lcImpresora>> no está disponible.
EndText
MessageBox(m.lcMessageText, 48, 'Impresora', m.lnTimeOut)
EndTry
EndIf

Return m.llReturn

Con esto controlo si se ha podido seleccionar la impresora. Los nombres de impresora que puedes utilizar los puedes obtener con la función GetPrinter()

Espero te sirva.

Saludos.
Francisco Lorente.
Murcia. España.
VFP 9 SP2

RS “Ricardo”

unread,
Jan 23, 2026, 8:02:31 AM (9 days ago) Jan 23
to Comunidad de Visual Foxpro en Español
Buen dia  Gracias a todos por darse el tiempo y la molestia de ofrecer soluciones
el PROBLEMA estaba en que el reporte tenia marcado "save printer environment"
y por esa razon la solucion propuesta por jorge no funcionaba

Finalmente la desmarque y deje el codigo 
lcPrinter=alltrim(thisformset.impresora)
SET PRINTER TO NAME (lcprinter)
el cual funciona perfecto

gracias
Reply all
Reply to author
Forward
0 new messages