PDA

Ver la Versión Completa : Ayuda con la impresora.


lfortuny
6 de febrero de 2024, 11:37
Buenos días.
Tengo un programa, en el cual puedo seleccionar la impresora con el 'Print Control', guardo el nombre de la impresora seleccionada con 'PrinterName', ..., tengo que llamar a otro programa y pasarle la impresora, todo bien, pero en el segundo programa ¿cómo puedo asignar la impresora seleccionada en el primer programa sin tener que seleccionarla de nuevo en el segundo?

He probado con

MOVE nomimpre TO "PrinterName" OF Pr_Impresora

pero me devuelve el siguiente error:

'You may not overwrite or set the value of this property'.

Se agradecen todas las ideas. No me sirve cambiar la impresora por defecto.

Lluís.

fastpho
6 de febrero de 2024, 19:03
Hola @lfortuny
No entiendo muy bien que necesitar hacer .....


*> la Propiedad "PrinterName" es solo lectura
*> invalido esto no funciona
move "PDFCreator" to "PrinterName" OF PR-Print




*> Solo lectura(get) esto funciona
move "PrinterName" OF PR-Print to "Text" OF CmText3.


Saludos ...

- - - Updated - - -

Hola @lfortuny
No entiendo muy bien que necesitar hacer .....


*> la Propiedad "PrinterName" es solo lectura
*> invalido esto no funciona
move "PDFCreator" to "PrinterName" OF PR-Print




*> Solo lectura(get) esto funciona
move "PrinterName" OF PR-Print to "Text" OF CmText1.


Saludos ...

Josber
6 de febrero de 2024, 20:13
@lfortuny, vamos a suponer que estás utilizando PowerCobol en alguna de sus versiones , por lo que estás poniendo, claro.

Yo lo que hago es llamar al "Print Control" con la opción "SetPrinter", ahí que seleccionen la impresora que quieran y después mover ese valor a una variable o a lo que lo necesites, (un StaticText, TextBox Control, ...)


INVOKE PRINT1 "SetPrinter".
MOVE "PrinterName" OF PRINT1 TO ...

No sé si es eso lo que necesitas exactamente ....

O si no necesitas seleccionar la impresora, puedes hacerlo directamente quitando la primera línea

Un salu2.-





Por cierto, muevo el tema al subforo más adecuado si no indicas lo contrario.

Kuk
6 de febrero de 2024, 21:28
@lfortuny, @fastpho, @Josber, que yo sepa no se puede asignar el nombre de una impresora al control CmPrint sin pasar por el diálogo de selección de impresora. Es por ello que yo siempre configuro la impresora por defecto.

lfortuny
7 de febrero de 2024, 10:36
Buenos días y gracias a tod@s.
Para PowerCobol.
Ya lo solucioné, en el primer programa selecciono la impresora con "SetPrinter", guardo todas las características en campos.

Características:
"PrinterName"
"PaperOrientation"
"PaperType"
"Source"

Cuando llamo al segundo programa paso todas las características y las cargo de nuevo al nombre de control 'Pr_Impresora' exceptuando el 'PrinterName' que como dice fastpho, no se puede, pero por el simple hecho de tener el nombre cargado en el primer programa y tener la misma variable del nombre de la impresora en ambos programas, no es necesario asignar 'PrinterName' y puedo imprimir.
Por otro lado, si es de interés para alguien, en el segundo programa se puede asignar el nombre de la impresora que desee con solo asignar el nombre a la variable del 'Printername'.

Ejemplo:
MOVE "Brother ..." TO nomimpre

Gracias.
Que disfruten del día.

Kuk
7 de febrero de 2024, 18:57
Ejemplo:
MOVE "Brother ..." TO nomimpre


Pero esto no va a compilar, va a decir que dicha propiedad del control es de sólo lectura :yoquese:


EDITO: lo acabo de comprobar y sí que deja compilar pero salta un Warning en ejecución diciendo que no se puede modificar dicha propiedad...

lfortuny
8 de febrero de 2024, 09:07
Buenos días.
En el primer programa:

elegir-impresora.
INVOKE Pr_Impresora "SetPrinter" RETURNING ReturnValue.
IF ReturnValue = POW-TRUE
MOVE "PrinterName" OF Pr_Impresora TO nomimpre
MOVE "PaperOrientation" OF Pr_Impresora TO orientation
MOVE "PaperType" OF Pr_Impresora TO paper
MOVE "Source" OF Pr_Impresora TO bandeja
END-IF.


Working primer programa.
01 datos-llamada GLOBAL EXTERNAL.
02 bandeja PIC 9(4).
03 nomimpre PIC X(200).
03 orientation PIC X(9).
03 paper PIC X(9).

Segundo programa.

Working .

01 datos-llamada GLOBAL EXTERNAL.
02 bandeja PIC 9(4).
03 nomimpre PIC X(200).
03 orientation PIC X(9).
03 paper PIC X(9).

programa.
MOVE orientation TO "PaperOrientation" OF Pr_Impresora
MOVE paper TO "PaperType" OF Pr_Impresora
MOVE bandeja TO "Source" OF Pr_Impresora


Con esto imprimo por la impresora elegida en el primer programa.

También puedo hacer lo siguiente, para que me coja la impresora que desee, eso si, siempre teniendo el nombre completo de la impresora cargada en 'nombre_imp'.
En ambos programas.
01 nombre_imp PIC X(20) VALUE "Impresora_PDF" GLOBAL EXTERNAL.
* También los otros datos GLOBAL EXTERNAL.

En el segundo programa:
MOVE nombre_imp TO nomimpre
* Le puedo pasar "PaperOrientation" y "PaperType" y asignarla.
MOVE orientation TO "PaperOrientation" OF Pr_Impresora
MOVE paper TO "PaperType" OF Pr_Impresora


La working es así:
01 datos-llamada GLOBAL EXTERNAL.
02 bandeja PIC 9(4).
02 nomimpre PIC X(200).
02 orientation PIC X(9).
02 paper PIC X(9).


Usa los botones de resalto de sintaxis

Kuk
8 de febrero de 2024, 15:32
@lfortuny, en tu primer post decías que cuando mueves el nombre de la impresora te daba el error You may not overwrite or set the value of this property

Y no te lo da en el otro Form?

Porque a mi me sigue diciendo esto si le muevo el nombre de una impresora.....

Entiendo que puedes obtener el nombre de la impresora y pasárselo a otro Form, pero de qué te sirve si en cuando que hagas esto:


MOVE nomimpre TO "PrinterName" OF Pr_Impresora


va a petar diciendo lo de may not overwrite

lfortuny
8 de febrero de 2024, 16:16
@Kuk.

Cuando tenga un rato te monto un ejemplo y verás.
Para la próxima semana....

Saludos.