----------------------------
Hola, Gregorio.
1. Sólo necesitas SET DEVICE TO si estás usando @SAY.
2. Fíjate que estás usando SET PRINTER TO NAME en FACTU001 cuando la vble LcNomImpCr está vacía.
Deberías usar SET PRINTER TO NAME en FACTU002 cuando la vble vale algo.
3. Deberías usar SET PRINTER TO en ambos casos.
4. Analizando tu escenario, parece que debes "invertir" los SET PRINTER TO que estás usando.
Tu escenario pudiera quedar más o menos así:
If Thisform.check1.Value = .T.
Set Printer To Default
Set Printer Off
Set Console Off
Set Device To Printer
If Empty(LcNomImpCr) && LcNomImpCr Nombre de impresora guardado en la variable
Do factu001
Else
SET PRINTER TO NAME (LcNomImpCr)
Do factu002
Endif
Set Printer To Default
** ............
** ............ otros comandos según la necesidad después de imprimir
** ............
Endif
** dentro de factu001 tengo esto
Set Printer On
**
** otros comandos según la necesidad en Factu001
**
** dentro de factu002 esto
**
** otros comandos según la necesidad en Factu002
**
5. Si deseas usar WScript.Network en tu escenario, puedes hacerlo. A mí me falta info para decir sí o para decir no.
Veo que Fox/VFP tiene comandos propios para los mismos efectos.
----------------------------