El 17/03/2014 18:16, "Manuel Bailen" <[email protected]> va escriure: > > Hola a todos,
Hola Manuel, > Me gustaría poder hacer listados de facturas seleccionadas, hasta ahora lo he intentado creado una copia del informe factura para modificarlo, pretendo tener dos posibilidades cuando pincho el botón imprimir, pero me encuentro con dos problemas. > Por un lado la factura no es un informe al uso y según lo que he podido leer para sustituirlo hay que modificar la clase "Printinvoice(Wizard)", > ¿hay alguna forma de modificar esta clase para que permita que se puedan ejecutar varios informes? Entiendo que lo que quieres es un informe nuevo sin sustituir el informe de factura. Así que no te tienes que preocupar para nada del PrintInvoice. Aprovecho para hacer un poco de resumen del tema informes. Un modelo/objeto (en este caso Invoice) puede tener los informes que sea (de 0 a infinito). Los diferentes informes disponibles aparecerán listados al hacer click en cualquiera de los tres iconos de informe. Un informe requiere 4 cosas: - Una clase que herede de Report y que debe registrarse en el __init__.py en el pool de reports (hay pool de modelos, wizards y reports). Esta clase dará de alta un nombre de informe QUE DEBE SER ÚNICO - la plantilla del informe. En el estándar un ODT y si es un informe Jasper (requiere el módulo) el jrxml - Una entrada <record model='ir.report'> donde se especifica el nombre del informe (esto lo liga con la clase) y la ruta al informe (odt/jrxml) - Una entrada <record model=ir.action.keyword"> donde se especifica el XML Id del informe (la entrada anterior) y un modelo. Esto añade el informe a los iconos de imprimir del modelo. Si quieres añadir un informe tendras que crear los 4 elementos. Si quieres SUSTITUIR un informe existente tendras ue: 1. Crear la clase con un nombre nuevo 2. Crear el informe (odt) y guardarlo en tu módulo 3. Ceear una entrada nueva (con ID nuevo) para el informe, haciendo uso del nombre y ruta nuevo 4. REDEFINIR el keyword para llamae al XML Id nuevo de tu informe. Al redefinir estarás sustituyendo. Redefinir una entrada XML se hace forzando el XML Id completo de la entrada por uno existente. Imaginemos que exiate el módulo modulo_a con la ntrada: <record model="ir.action.keyword" id="inf1"> Este elemento tiene el XML Id "modulo_a.inf1". Si en el módulo modulo_b se define un keyword asi: <record model="ir.action.keyword" id="inf1"> Su XML Id será "modulo_b.inf1" y, por tanto, será una entrada nueva. Si se define así: <record model="ir.action.keyword" id="modulo_a.inf1"> Se estará redefiniendo la keyword "inf1" del modulo_a. Porqué redefinir la keyword y no directamente la entrada "ir.report"? Por las traducciones: el sistema de traducciones asocia los strings del informe al modulo a través del XML Id. Si este tiene un XML de orro módulo los strings quedarán mal asociados. Si estás sustituyendo un informe conviene asegurarse que nadie llama al antiguo. Para ello hay que buscar en el código referencias al name del informe. El informe estardar de factura se lanza desde un pequeño wizard: PrintInvoice. La keyword llama al wizard y este acaba llamando al informe, por eso si se quiere sustituir este informe hay que sobrecargar el PrintInvoice > Por otro lado como quiero un listado, no me sirve que separe cada factura en una página y un archivo, > ¿que habría que modificar para que no hiciese esto? La separación por fichero se debe al asistente. Esto es porque la factura si ya esta abierta se genera el informe la prinera vez y luego se muestra siempre el original (no se genera cada vez). Simplemente añade un informe con los 4 elementos normales que te comento y te generara un archivo con todos los registros seleccionados. Que te saque cada factura en una página nueva es simplemente porque el repeatIn sobre el listado de objetoa esta envolviendo todo el informe. Salut! Guillem
