I would like to hire a C++ Programmer
€3000-5000 EUR
Pagado a la entrega
# General
La tarea a realizar es la programación de una herramienta "configurador y generador de reportes" para la industria de generación de energía eléctrica.
Dicha herramienta deberá comunicarse con nuestro servidor de datos históricos para extraer la información necesaria para generar los reportes.
Además de utilizar datos históricos para la generación de reportes, es también necesario permitir al usuario introducir valores manuales al reporte justo antes de generar el mismo, rellenando algún tipo de ficha pre-definida.
Una lista de reportes estándar de la industria de generación de energía eléctrica deberá ser pre-configurada y accesible al usuario desde la herramienta.
Una interfaz gráfica que permita al usuario decidir que reporte generar, así como visualizar el reporte generado o a generar.
Para realizar la tarea es necesario cumplir los siguientes requisitos:
* Utilizar solamente C++ y las librerías Qt (versión 5.6.X).
* Utilizar como base la librería y generador de reportes NCReport ([url removed, login to view]).
* Utilizar el servidor Git de nuestra empresa para ir versionando el progreso del trabajo realizado.
# Detalles
Existe una idea básica de cómo realizar la tarea, los detalles se mencionan a continuación.
## NCReport
El NCReport es una herramienta y librería de Qt que tiene dos módulos principales:
* Un módulo "editor de plantillas" que permite definir las plantillas de los reportes a generar, así como las fuentes de datos cambiantes (o "datasources") con las que se rellenarán las plantillas a la hora de generar los reportes. La información de las plantillas de almacena en un fichero XML.
* Un módulo "generador de reportes", que utiliza las plantillas XML y las fuentes de datos cambiantes (o "datasources") para generar los reportes con los últimos datos disponibles y ciertos parámetros configurables. El generador permite luego exportar el reporte a diferentes formatos (Printer, Postscript, PDF, SVG, Text, HTML, Image).
Por defecto, el NCReport soporta diversos "datasources" incluyendo "SQL database", "Text", "QAbstractItemModel", "QStringList", "Custom subclassed". Para la tarea, es necesario crear un "datasource" personalizado para acceder a los datos de nuestro servidor histórico (detalles más adelante).
En resumen, para el NCReport las tareas requeridas son:
* Conocer bien y saber utilizar el NCReport.
* Aprender cómo crear un "datasource" personalizado ("QAbstractItemModel" o "Custom subclassed").
## Servidor de Históricos
Nuestro servidor de históricos es una aplicación “in-house” que no es compatible con ningún otro formato de datos standard en el mercado. Para acceder a los datos históricos, se utiliza también un protocolo de comunicaciones “in-house”.
Parte de la tarea es aprender y conocer el protocolo de comunicaciones y desarrollar un cliente para acceder a los datos desde C++ Qt. Preferentemente una clase de C++ que realice la abstracción del protocolo de comunicaciones a una interfaz de programación (API) sencilla. Esta clase, deberá realizar las funciones mínimas necesarias requeridas de un cliente de históricas, por ejemplo:
* Configurar y gestionar la comunicación con el servidor de históricos (set IP, Port, start, stop). Emitir señales al generarse algún error de conexión.
* Obtener datos históricos del servidor en base a "queries" sencillas. Por ejemplo, obtener datos entre un rango de fechas, obtener datos solo de algunas columnas específicas, etc. Emitir señales al generarse algún error de query.
Para validar esta clase, será necesario una interfaz de usuario (GUI) en Qt C++ que permita comprobar la funcionalidad básica de esta clase.
El siguiente paso es hacer uso de esta clase para crear el "datasource" personalizado del NCReport, utilizando el método más conveniente, después de haber estudiado todas las posibilidades que permite el NCReport para creare "datasource" personalizados (sección anterior).
## Reportes Standard
Se proporcionarán ejemplos reales del tipo de reportes utilizados en la industria. Parte de la tarea es crear plantillas del módulo "editor de plantillas" del NCReport que sean iguales a dichos reportes, pero que se generen con los datos de nuestro servidor histórico, así como datos "manuales" (mas información en próxima sección).
## Interfaz Gráfica
El modulo "generador de reportes" del NCReport es una DLL que permite generar los reportes programáticamente. Sin embargo, es necesario crear una interfaz gráfica que permita al usuario final decidir qué tipo de reporte generar (de forma amigable), definir los parámetros configurables del reporte, así como los datos "manuales".
Los datos manuales, son datos que no se encuentran en la base de datos. Son datos que el usuario debe poder introducir manualmente justo al momento de generar un nuevo reporte. Por lo tanto, es probable que resulte necesario "obligar" al usuario a rellenar una forma antes de pasar al paso de generación del reporte. Es parte también de la tarea realizar esa "forma" de datos manuales de tal forma que sea flexible y configurable.
# Conocimientos Mínimos Qt
Para poder realizar la tarea, es necesario tener como mínimo experiencia utilizando las siguientes clases de Qt:
• QVector, QMap, QHash y otros contenedores.
• QTcpSocket y QTcpServer para comunicaciones en TCP.
• QThread para ejecución de código concurrente.
• QAbstractItemModel y QAbstractItemView para implementación de patrón de diseño vista-controlador.
Además de conocer los mecanismos de generación de widgets utilizando la herramienta QtDesigner de Qt.
Nº del proyecto: #13531243
Sobre el proyecto
10 freelancers están ofertando un promedio de €4075 por este trabajo
Hola, Primero que todo, te soy sincero, no conozco la tecnología que QT que manejas y NCReport. Sin embargo, te comento que si he trabajado en C++, implementando sistemas transacciones bancarios, interfaces entre Más
Saludos me ha llamado mucho la atención tu solicitud, en especial porque trabajé muchos años en PDVSA (industria petrolera) y en ternium SIDOR (industria del acero) en el área de automatización nivel 1, nivel 2... en P Más