cambio del modelo de impresion foxpro a Harbour

10/04/2010

Empece a hacer la pruebas de impresion el esquema que tengo
implementado en FlagShip es el siguiente:
1. Una rutina que inicializa la impresion (printon)
2. El cuerpo de la impresion
3. Cierre de la impresion (printoff)


1.
*****************************************************************************
* Abre Canal de Impresion
*
*****************************************************************************
procedure printon

SET DEVICE TO PRINT NEW
SET CONSOLE OFF
SET PRINTER ON NEW

return

2.
*****************************************************************************
* Cierra canal de Impresion *
*****************************************************************************
procedure printoff

set PRINT OFF
set PRINTER TO

store FS_SET("print") to Prn_File

set PRINT OFF
set PRINTER TO &Prn_File

do case
case Disp_Scr = "IMPRESORA"
store "-#" + ltrim(str(NroCopia)) to NCopia
case Os_Tmp = "LINUX"
do case
case NroCopia = 1
store "lpr -P" + Impresor + " " + Prn_File to SalidaI
otherwise
store "lpr " + Ncopia + " -P" + Impresor + " " + Prn_File to SalidaI
endcase
case Os_Tmp = "DOS"
store Prn_File + " > " + Impresor to SalidaI
endcase
endcase

do case
case Os_Tmp = "LINUX"
store "cp" to Copiar
case Os_Tmp = "DOS"
store "copy" to Copiar
endcase

do case
case Disp_Scr = "IMPRESORA"
run &SalidaI
SET DEVICE TO SCREEN
SET CONSOLE ON
erase &Prn_File
case Disp_Scr = "PANTALLA"
run &Copiar &Prn_File &Disp_Sal
erase &Prn_File
do modicomm with Disp_Sal
case Disp_Scr = "ARCHIVO"
run &Copiar &Prn_File &Arch_Sal
erase &Prn_File
do modicomm with Arch_Sal
case Disp_Scr = "SPOOL"
SET DEVICE TO SCREEN
SET CONSOLE ON
run &Copiar &Prn_File &Arch_Spool
erase &Prn_File
endcase
store 1 to NroCopia

return


3. Cuerpo de la impresion por ejemplo
********************************************************************
* Imprima *
********************************************************************
procedure imprima

@ prow() + 01,pcol() + 00 say Chr13
@ prow() + 00,00 say chr(15)
@ prow() + 00,18 say Nit_Tmp
@ prow() + 00,30 say Nit_Nome
@ prow() + 00,61 say Saldo_Ant picture Nro_Mask
@ prow() + 00,78 say DB picture Nro_Mask
@ prow() + 00,96 say CR picture Nro_Mask
@ prow() + 00,112 say Saldo_Act picture Nro_Mask
@ prow() + 00,00 say Chr13

return
-------------------------------------------------------------------------

la impresion queda entonce ensamblada asi

do printon

do imprima

do print off

Este modelo funciona correctamente en FlagShip, tiene la ventaja de
permitirme seleccionar el canal de salida, y usar todas las opciones y
robustez de un sistema de impresion como el cups, ya que genera un archivo
texto mediante las instrucciones el cual puedo manipular a mi antojo,
en windows puedo usar comandos de formato tipo "no2imp" para dar formato
a los archivos de texto, crear formatos pre compilados con "RPV
printing" es cuestion simplekente de cambiar la linea de comando de
salida,"store "lpr " + Ncopia + " -P" + Impresor + " " + Prn_File to
SalidaI" segun me convenga.

El uso de los comandos

store FS_SET("print") to Prn_File
set PRINT OFF
set PRINTER TO &Prn_File


Donde el comadno FS_SET("print") to Prn_File genera un archivo
aleatorio con terminacion .prn, que se puede manipular con comadnos
del sistema opertivo mediante RUN



una vez tengo el archivo puedo proceder a guardarlo, desplegarlo en
pantalla o imprimirlo por un comando del sistsm operativo tipo:

"lp -s -d" + Impresor + " " + Prn_File

o mostralo con:

run &Copiar &Prn_File &Arch_Sal
erase &Prn_File
do modicomm with Arch_Sal


Este procedimiento en XHarbour no funciona, el primer incoveniente es
que no esiste el comando

store FS_SET("print") to Prn_File

Que genera el archivo aleatorio de salida de impresion por lo tanto
lo remplace por ubno de los archivos aleatotorios que genera el
sistema que imnplemente en los primeros dias con las fechas del sistema

quedo asi:

store "Arch0" + ".prn" to Prn_file

Sin embargo no funciona , muestra que hay un error,
SET PRINTER ON NEW
deberia ser evidente ya que este comando crea un nuevo archivo de
salida que es procesado por FS_SET("print") , como ese no existe
pues me imagin el otro tampoco funciona, retiro este comando, el
sistema no muestra error, supuestamente termina correctaamente pero no
hace nada.

La forma de crear el archivo de forma aleatoria tiene una consecuencia
peculiar en FlagShip y es que la la generacion del archivo de salida
se inicia con set printer to y el resultado de la impresion se obtiene
como ya se dijo al final con la instruccion FS_SET("print")

En contre que XHarbor maneja el sistema de impresino de la forma
clasica foxpro ,mediante el comando

set PRINTER TO &Prn_File

antes de lanzar el cuerpo de impresion , hice este cambio uy funciono
correctamente.

Las rutinas quedaron asi en Xharborur:
1.
*****************************************************************************
* Cierra Canal de Impresion *
*****************************************************************************
procedure printon

SET DEVICE TO PRINT
SET CONSOLE OFF
SET PRINTER ON

store "Arch0" + ".prn" to Prn_file
set PRINTER TO &Prn_File

return

2.
*****************************************************************************
* Abre canal de Impresion *
*****************************************************************************
procedure printoff

set PRINT OFF

do case
case Disp_Scr = "IMPRESORA"
store "-#" + ltrim(str(NroCopia)) to NCopia
do case
case Os_Tmp = "LINUX"
do case
case NroCopia = 1
store "lpr -P" + Impresor + " " + Prn_File to SalidaI
otherwise
store "lpr " + Ncopia + " -P" + Impresor + " " + Prn_File to SalidaI
endcase
case Os_Tmp = "DOS"
store Prn_File + " > " + Impresor to SalidaI
endcase
endcase

do case
case Os_Tmp = "LINUX"
store "cp" to Copiar
case Os_Tmp = "DOS"
store "copy" to Copiar
endcase

do case
case Disp_Scr = "IMPRESORA"
run &SalidaI
SET DEVICE TO SCREEN
SET CONSOLE ON
erase &Prn_File
case Disp_Scr = "PANTALLA"
run &Copiar &Prn_File &Disp_Sal
erase &Prn_File
do modicomm with Disp_Sal
case Disp_Scr = "ARCHIVO"
run &Copiar &Prn_File &Arch_Sal
erase &Prn_File
do modicomm with Arch_Sal
case Disp_Scr = "SPOOL"
SET DEVICE TO SCREEN
SET CONSOLE ON
run &Copiar &Prn_File &Arch_Spool
erase &Prn_File
endcase
store 1 to NroCopia

return


------------------------------------------------------------------------
En resumen:

1.Se uso el generador de nombres aleatorios para crear un archivo de
salida tipo .prn

2. Se rermovio la instruccion NEW del sistema

3. Se cambio la posicion del comando set PRINTER TO &Prn_File, antes
de lanzar la impresion propiamente dicha.


Todo el sistema en general se mantuvo y funciono correctamente


Encotre que la forma de cancelar rtodo los procesos y salir del
sistema es [Ctrl][alt][c]

Cooque el reloj del sistema a operar en la posicion showtime(0,0) para
que no interfiera con ninguna panatalla

Estuve probando el comando set videoMode to LLG_VIDEO_VGA_640_480_16
para poder ver la apliacion desde el escritorio grafico pero no me
funciona dice la que la variable LLG_VIDEO_VGA_640_480_16 no existe,
como se que es un valor numerico empece colocando el valor cero hasta
el 10 pero nada , no me funciona el modo emulacion grafica, el
problema es que dicen que es un numero pero no parece ser trivial o
no funciona en KDE.

BIEN HASTA AQUI LA APLIACACION ESTA CORRIENDO EN MODO TEXTO XHARBOUR OK

Nada que envidiarle a la apliacion FlagShip

Sigue el proceso grafico, que deje interrumpido, intentare de nuevo
con la librerias GT+, para ver si las instalo correctamente y puedo
seguir con la conversion a modo Grafico, tambien tengo pendiente
compilar el sisterma para windows pero aun no que querido desgastarme
en eso pues es mejor cuando este grafica. Lo primero era estabilizar
la apliacion objetivo que ya se logro.

Comentarios

Entradas populares