Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   Ayuda con la impresora. (https://www.cobolforo.es/showthread.php?t=1723)

lfortuny 6 de febrero de 2024 11:37

Ayuda con la impresora.
 
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 .....

Código COBOL:
  1.     *> la Propiedad "PrinterName" es solo lectura
  2.     *> invalido esto no funciona
  3.      move "PDFCreator" to "PrinterName" OF PR-Print


Código COBOL:
  1. *> Solo lectura(get) esto funciona
  2.      move "PrinterName" OF PR-Print to "Text" OF CmText3.

Saludos ...

- - - Updated - - -

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

Código COBOL:
  1.     *> la Propiedad "PrinterName" es solo lectura
  2.     *> invalido esto no funciona
  3.      move "PDFCreator" to "PrinterName" OF PR-Print


Código COBOL:
  1. *> Solo lectura(get) esto funciona
  2.      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, ...)

Código COBOL:
  1.      INVOKE PRINT1 "SetPrinter".
  2.      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

Cita:

Citación del post de lfortuny (Mensaje 9262)
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:

Código COBOL:
  1.  elegir-impresora.
  2.     INVOKE Pr_Impresora "SetPrinter" RETURNING ReturnValue.
  3.     IF ReturnValue = POW-TRUE
  4.         MOVE "PrinterName"        OF Pr_Impresora TO nomimpre
  5.         MOVE "PaperOrientation"   OF Pr_Impresora TO orientation
  6.         MOVE "PaperType"          OF Pr_Impresora TO paper
  7.         MOVE "Source"             OF Pr_Impresora TO bandeja
  8.     END-IF.


Working primer programa.
Código COBOL:
  1. 01 datos-llamada GLOBAL EXTERNAL.
  2.     02 bandeja      PIC 9(4).
  3.     03 nomimpre     PIC X(200).
  4.     03 orientation      PIC X(9).
  5.     03 paper            PIC X(9).
Segundo programa.

Working .

Código COBOL:
  1. 01 datos-llamada GLOBAL EXTERNAL.
  2.     02 bandeja      PIC 9(4).
  3.     03 nomimpre     PIC X(200).
  4.     03 orientation      PIC X(9).
  5.     03 paper            PIC X(9).
  6.  
  7.  programa.
  8.     MOVE orientation            TO "PaperOrientation"   OF Pr_Impresora
  9.     MOVE paper              TO "PaperType"        OF Pr_Impresora
  10.     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.
Código COBOL:
  1. 01 nombre_imp              PIC X(20) VALUE "Impresora_PDF" GLOBAL EXTERNAL.
* También los otros datos GLOBAL EXTERNAL.

En el segundo programa:
Código COBOL:
  1.     MOVE nombre_imp         TO nomimpre
  2. * Le puedo pasar "PaperOrientation" y "PaperType"  y asignarla.
  3.     MOVE orientation TO "PaperOrientation" OF Pr_Impresora
  4.     MOVE paper         TO "PaperType"        OF Pr_Impresora


La working es así:
Código COBOL:
  1. 01 datos-llamada GLOBAL EXTERNAL.
  2. 02 bandeja PIC 9(4).
  3. 02 nomimpre PIC X(200).
  4. 02 orientation PIC X(9).
  5. 02 paper PIC X(9).

Comentario de Moderador

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:

Código COBOL:
  1.      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.


La franja horaria es GMT +2. Ahora son las 01:15.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.