MyRpt
Puedes descargar MyRpt en ZIP aquí
, son solo el prg y la dll en castellano.
Librería libre para uso con FWH. El proyecto original es de Carles
Aubia Floresvi y solo pide que se respete el autor dentro de los
creditos de cualquier aplicación.
Existen versiones en varios idiomas de MyRpt.dll, de momento la incluida en esta versión solo es en
castellano.
Modificaciones hechas al proyecto original por Sebastián Almirón:
- Debido a la gran cantidad de clases y funciones que se
utilizan, se han empaquetado de momento todas las necesarias dentro de este
prg, para que sea más fácil incorporarlo a nuestras aplicaciones. Se han
añadido líneas y modificado ligeramente la dll, así que de momento solo está
en castellano.
- La clase TReport que venía se a renombrado a TRpt
para distinguirla de la de FW.
- Al método New() de MyRpt se le han añadido los
parámetros:
- documento, para abrir un documento especifico, por ejemplo si queremos
llamarlo para modificar el formato de factura
- titulo, para que aparezca el titulo de la ventana de MyRpt personalizado,
por ejemplo Diseño de Factura
- nombre de nuestra app, para que en ciertos mensajes aparezca el nombre de
nuestra app y no MyRpt
- lmenusmart, para eliminar del menú ciertas opciones, por ejemplo si
llamamos a MyRpt para el diseño de la factura, que no aparezcan opciones de
nuevo documento, eliminar, etc.
- impresora, para que MyRpt utilice una impresora determinada y no la
impresora por defecto de Windows
- oIcon, para mostrar un icono de nuestra app y no el de MyRpt
Estos parámetros son para su uso con el diseñador, método activate() no Run(),
y si se omiten los parámetros entraremos en modo completo
- A los métodos PosTop y PosBottom de TRptForm se le
ha añadido código para subir o bajar los items en el Tree del Inspector y
que no de problemas al verlos o imprimirlos.
- Se han modificado los métodos Activate() y PrintSay() de RptRun,
para que la salida impresa del documento sea exactamente igual con
diferentes impresoras y SO.
- Se ha modificado para que admita poner items encima
de otros, por ejemplo says encima de imagenes, con lo que el "impreso" del
documento puede serguir siendo un EMF como anteriormente o un fichero de
imagen JPG, BMP, etc.
- Se ha añadido el array ::afixed a la clase MyRpt,
para indicar que items son obligatorios, en cuyo caso no deja borrarlos ni
cambiarles el ID, esto nos puede servir para que si el usuario está
modificando el diseño de una factura, no pueda eliminar por ejemplo el CIF/NIF
o el nombre del cliente.
- Se ha modificado para que cuando el grid no está
activado, se pone el tamaño del grid a 0 para que el movimiento sea sin
saltos.
- Se ha corregido el método end() de RptRun, porque la
funcion pagina XX de YY no funcionaba si no era con preview.
- Se ha añadido el método PrintRTF() a RptRun para
poder imprimir cadenas RichEdit, se utiliza para indicarlo al diseñarlo lo
mismos que para los says. Tener en cuenta que si es multipágina se debe
indicar en las propiedades del item.
- Se han corregido diversos bugs.
Para utilizarlo, solo debemos incorporar el prg a nuestra
app y dejar la dll en la carpeta del ejecutable.
Para llamar al modo diseño tenemos dos opciones:
Llamarlo en modo
completo, es decir que el usuario genere un nuevo fichero rpt: |
orpt := MyRpt():New(,,,,,oIcon1)
//oIcon1 es opcional para sustituir el icono de myrpt
oRpt:cTitle := 'MyApp - Nuevo formato de documento'
orpt:Activate()
oRpt:oForm:InitForm( )
oRpt:oMdi:cCaption := 'MyApp- ' + oRpt:oForm:cFormName
oRpt:cTitle := 'MyApp - ' + oRpt:oForm:cFormName
oRpt:oMdi:Refresh() |
Llamarlo en modo restringido, es
decir que el usuario pueda modificar el formato del documento, pero no
crearlo nuevo ni quitar ciertos datos |
orpt := MyRpt():New(ruta\Factura.rpt',"Diseño de
Factura de MyApp",'MyApp',.t.,cimpresora, oIcon1)
orpt:Activate()
orpt:afixed :{'NOMBRE_CLIENTE','CIF/NIF_CLIENTE'}
|
Para imprimir, por ejemplo si tenemos diseñado
factura.rpt:
o := MyRpt():New('ruta/Factura.rpt',"Factura",'MyApp',.t.,cimpresora)
oRpt := o:Run()
oRpt:lPreview := .t. //Si quereis Preview
oRpt:Activate()
oRpt:bHeader := {|| Cabefact(oRpt)
}
oRpt:bFooter := {|| Piefact(oRpt) }
oRpt:Activate()
//utilizar el método
data para poner los datos en los Items:
For
nI = 1 to len(oPrt:oReport:aitems)
oitem := oRpt:oReport:aitems[nI] //Item actual
do case
case oitem:cID = 'NUMERO_FACTURA'
oRpt:Data('NUMERO_FACTURA', cnumanio)
case oitem:cID = 'NOMBRE_CLIENTE'
oRpt:data('NOMBRE_CLIENTE',cnombre')
....
endcase
Next nI
oRpt:End()
o := nil
Si tenéis dificultad para su uso, lo podemos comentar el el
foro.