
Impresión en Power
En PowerCobol, podemos imprimir por la impresora exactamente igual que lo hacemos con cualquier otro compilador, utilizando la Working-Storage Section para definir nuestras lineas de impresión.
La gran diferencia es que no podemos enviar secuencias de escape para controlar el tamaño o tipo de nuestra letra. Pero en cambio nos propone una interesante opción con la cual conseguimos eso y además, y algo muy importante, sin importar la impresora a la cual vaya dirigido el listado.
El modo es sencillo, tenemos que definir cada tipo de letra a utilizar en Special-Names y luego especificarlo para cada nivel 01 de nuestras líneas de impresión en la Working, pero veamos un ejemplo de como conseguirlo.
...
SPECIAL-NAMES
PRINTING MODE GRANDE
FOR SOCS
SIZE 10
PITCH 13
FONT GOTHIC
PRINTING MODE LARGA
FOR SOCS
SIZE 10
PITCH 10
FONT GOTHIC
FORM F0201
PRINTING MODE NEGRITA
FOR SOCS
SIZE 9
PITCH 13
FONT MINCHOU.
Esta es la parte que iría en la SPECIAL-NAMES, como veis hemos definido tres tipos diferentes de letra para nuestro listado, con una serie de opciones que vamos a ver a continuación:
- PRINTING MODE, el nombre que le damos al formato.
- FOR, hemos puestos SOCS, pero también se puede poner MOCS o ALL, hace referencia a los alfabetos que vamos a utilizar.
- SIZE, indica el tamaño de la fuente.
- PITCH, indica los carácteres que caben en una pulgada, esto es muy interesante, porque aunque utilicemos una letra de tamaño grande, podemos forzar a que meta los caracteres que deseemos por pulgada, ya sabéis que una pulgada equivale a 2,54 cm.
- FONT, indica la fuente que queremos, pero ATENCION, aquí solo pondremos dos tipos de fuentes, GOTHIC o MINCHOU. Estas dos fuentes se manejan en el fichero de configuración (COBOL85.CBR) con la cláusula @PrinterFontName=(la fuente que asumirá GOTHIC, la fuente que asumirá MINCHOU).Por ejemplo: @PrinterFontName=(Arial, Courier). Esó deberá de ir en el archivo de configuración.
- FORM, indica la altura y el tamaño de la fuente, los valores posibles son F0201, F0202, H0202, H0102, con ello podremos hacer la letra mas alta o doble tamaño.
- ANGLE, nunca la he utilizado pero sirve para dar el angulo de la letra.
Como siempre el método mejor para comprobar todo es probarlo vosotros mismos, cambiando todos los valores posibles. Yo recuerdo que lo primero que hice fue crearme un montón de tipos y luego imprimir una linea con cada uno hasta encontrar en cada caso el que mas me interesaba.
También tenéis que tener en cuenta el tema de las fuentes proporcionales, si vamos a utilizar listados con columnas, ya que cada letra tendrá un ancho diferente.
Ahora veamos como se le indica en la WORKING con que letra trabaja cada linea:
...
WORKING-STORAGE SECTION.
01 LINEA01 CHARACTER TYPE GRANDE.
02 FILLER PIC X(40) VALUE 'ESTA ES LA LETRA GRANDE'.
01 LINEA02 CHARACTER TYPE LARGA.
02 FILLER PIC X(40) VALUE 'ESTA ES LA LETRA LARGA'.
01 LINEA02 CHARACTER TYPE NEGRITA.
02 FILLER PIC X(40) VALUE 'ESTA ES LA LETRA NEGRITA'.
...
En la PROCEDURE solo quedará imprimir como siempre las lineas en nuestra impresora.
Como os decía antes lo mas importante es que imprimirá por la impresora predeterminada de Windows y no tendremos que preocuparnos de nada mas, ni el modelo, ni la conexión, ni la interface .... (Continúa en la página siguiente).Hace tiempo que pedí información a Fujitsu, sobre la posibilidad de escribir en Horizontal en un A4 y me enviaron una información que os puede resultar interesante.
En Fujitsu Cobol existe la posibilidad de mandar a la impresora una línea de control con diferente información, como la orientación, el espaciado vertical o el grosor de la fuente. Esto se realiza en varios pasos.
Primero hay que definir en la SPECIAL NAMES un mnemónico de la siguiente forma:
...
SPECIAL-NAMES
CTL IS ELCONTROL (ELCONTROL es el que yo he puesto, pero podeis poner lo que querais, será el nombre que defina al mnemónico).
...
En la WORKING definimos la línea de configuración, debeis respetar el tamaño de las variables.
...
WORKING-STORAGE SECTION.
01 LINEACONTROL GLOBAL.
02 REC-ID PIC X(002) VALUE "I1".
02 REC-MODE PIC X(001) VALUE "1".
02 FOVL.
03 FOVL-NAME PIC X(004) VALUE SPACE.
03 FOVL-R PIC 9(003) VALUE 0.
02 PAGE-COPY PIC 9(003) VALUE 0.
02 FCB-NAME PIC X(004) VALUE SPACE.
02 FORMAT-ID PIC X(008) VALUE SPACE.
02 NOSE1 PIC X(030) VALUE SPACE.
02 PAGE-FORM PIC X(002) VALUE SPACE.
02 PAPER-SIZE PIC X(003) VALUE SPACE.
02 NOSE2 PIC X(004) VALUE SPACE.
02 PRINT-DUPLEX PIC X(001) VALUE SPACE.
02 PRINT-POSITION PIC X(001) VALUE SPACE.
02 NON-PRINT-AREA PIC X(001) VALUE SPACE.
02 BIND-DIRECTION.
03 PORT-FRONT PIC X(001) VALUE SPACE.
03 PORT-BACK PIC X(001) VALUE SPACE.
03 LAND-FRONT PIC X(001) VALUE SPACE.
03 LAND-BACK PIC X(001) VALUE SPACE.
02 BIND-WIDTH PIC X(004) VALUE SPACE.
02 PRINT-OFFSET.
03 FRONT-X PIC X(004) VALUE SPACE.
03 FRONT-Y PIC X(004) VALUE SPACE.
03 BACK-X PIC X(004) VALUE SPACE.
03 BACK-Y PIC X(004) VALUE SPACE.
02 DOCUMENT-NAME PIC X(004) VALUE SPACE.
02 FILLER PIC X(005) VALUE SPACE.
...
Cada una de estas variables tiene un cometido, os explicaré las que conozco.
Si dejais el valor en espacios tomará siempre su valor por defecto.
Siempre deberéis respetar la longitud de cada campo y del registro en total.
La variable FOVL sirve para mas cosas, pero yo lo utilizo para especificar el espaciado vertical, ya sabeis que por defecto son 6 líneas por pulgada, pero podemos hacer que sean 8 y así imprimir mas líneas por página. Para conseguir esto debemos de incluir en el fichero de configuración (COBOL85.CBR) las siguiente líneas:
FCBDFLT=LPI((6,66)),CH1(4),SIZE(110)
FCBLT8L=LPI((8)),CH1(1),SIZE(120)
Estando estas líneas en el fichero podremos entonces especificar en la variables la opción que deseemos. Por ejemplo para imprimir a 8 LPI haremos lo siguiente:
MOVE "LT8L" TO FOVL-NAME. MOVE 1 TO FOVL-R. MOVE "LT8L" TO FCB-NAME.
la variable PAGE-COPY nos indicará el número de copias de cada página.
La variable PAGE-FORM es la que indicará con su valor (L=Apaisado ó P=Normal) si será apaisado o normal el listado.
la variable PRINT-DUPLEX indica si imprime en Single o Double mode, para ellos moveremos el valor F=normal, B=doble.
Una vez dados los valores necesarios, es cuando enviamos toda la información a la impresora y par ello, hacemos lo siguiente:
WRITE LINEA FROM LINEACONTROL AFTER ADVANCING ELCONTROL.
Como veis aquí utilizamos el mnemónico que describiamos anteriormente. ... (continúa). OTRAS FORMAS DE IMPRIMIR
Fujitsu Cobol tiene una herramienta para diseñar listados llamada POWER FORM, al estilo Crystal Reports, con la cual podemos generar listados tipo y luego solo habrá que ir rellenando los valores de las variables.
Personalmente, no puedo hablar mucho porque no lo he utilizado, pero se necesita su tiempo para diseñar un buen listado con distintos tipos de formularios.
Mi manera de imprimir y creo que de la mayoría de vosotros, ha sido siempre la creación de líneas en la Working y luego el envío de éstas a la impresora de manera secuencial. No digo que sea la mejor manera, pero siempre nos ha servido a la perfección y hemos conseguido casi cualquier cosa, siempre respetando las posibilidades que esa opción tiene.
Pero PowerCobol tiene consigo una baza importante, y es la utilización sin ningún problema de controles ActiveX externos en nuestros proyectos.
Cuando pensé en todos los listados que tenía ya diseñados, la idea de perderlos me parecía demasiado fuerte, así que me puse a buscar por Internet algún control que me diera la posibilidad de aprovechar mi Working y además me permitiera implementar aspectos digamos "windows" a mis listados y el resultado es el siguiente:
La imagen corresponde al uso de un control en una aplicación que he realizado con PowerCobol V.5.
Lo que se ve es un previo que hace el control antes de enviar el trabajo a la impresora. En ese previo se verían todas las páginas del listado (en este caso solo 1) y podríamos navegar por ellas e incluso seleccionar cual se imprimiría.
En muchas ocasiones con el previo unicamente nos bastaría y nos ahorarría mucho papel y molestías.
En este caso he utilizado una Working, como siempre, mas una imagen prediseñada previamente para que coincidan las lineas en ambos.
Los controles externos nos abren un mundo de posibilidades que iré tratando poco a poco.
Espero que os resulte interesante el capítulo de impresión con PowerCobol.
|
|