Informes
Qué es un informe de Flex, sus familias según TipoInformeE, las propiedades de diseño, orden, agrupación y filtro, sus columnas y sus preguntas.
Un informe es una consulta guardada sobre una sección: qué columnas salen, con qué condiciones, en qué orden y agrupadas cómo. Lo abre una persona desde el menú, lo muestra un panel de Play, lo ejecuta una integración por la API o lo consume el SDK. En la Flex API es el tipo FlexObjectTypes.Reports; sus columnas son FlexObjectTypes.ReportColumns.
Antes de empezar
- Un informe pertenece a una sección principal activa: no a una plantilla base, a una tabla de líneas ni a una sección obsoleta. La sección no se cambia después de crearlo.
- La pantalla donde se crea y se edita: FlexHub → Informes. Desde el SDK,
Flex_CreateObjectAsync(FlexObjectTypes.Reports, sectionId, patch). - Un informe no se elimina desde FlexHub. Sus columnas sí.
Las familias
La columna destino guarda el enum TipoInformeE. Todo informe hecho a mano es Ordinario (12) y no cambia de tipo; los otros valores los crea el motor para su propio uso y no se editan a mano.
| Valor | TipoInformeE | Qué es |
|---|---|---|
| 12 | Ordinario | Un informe hecho a mano para consultar. FlexObjectLiteDTO.IsOrdinaryReport = true. |
| 2 | Principal | El listado principal de una sección. |
| 3 | ComboDesplegableAutomatico | El desplegable de un campo de relación. |
| 1 | AutoWidget01 | El widget de un panel. |
| 6 | ValoresMemorizados | Los valores memorizados de un campo. |
| 7, 8 | Destinador_Ver, Destinador_Agregar | Los listados de un destinador. |
| 14 | CarrilProceso | Los carriles de una vista de proceso. |
El servidor envía el tipo resuelto en IsOrdinaryReport y su etiqueta legible en KindLabel, para que ningún cliente tenga que interpretar el enum.
FlexHub reparte los informes en tres pestañas con esos datos: Negocio (los ordinarios que abre una persona), API (los de la categoría Funcionalidad, que consumen integraciones, SDK y procesos internos) y * (todos, incluidos los que genera el motor). Ver Informes API.
Identidad
| Columna | Rótulo en FlexHub | Qué hace |
|---|---|---|
nombre | Nombre | Mínimo 3 caracteres. Dos informes de la misma sección y categoría no se llaman igual: el servidor desambigua y devuelve el nombre que puso. De aquí sale la palabra clave con la que lo llaman el SDK y las integraciones. |
categoria, subcategoria | Categoría, Subcategoría | Dónde se archiva y desde dónde se pide en el menú. Sin categoría existe, pero no hay pantalla que lo ofrezca. La pareja Funcionalidad y API lo convierte en informe de API y exige consolidar. |
descripcion | Descripción | Texto libre. |
comentario, icono | El comentario y el icono. FlexHub no los muestra. |
En FlexHub, el Nombre va encima de las pestañas y el resto en la pestaña General, card Datos del informe.
Diseño
En FlexHub están en la pestaña Diseño, que sale con el informe ya creado.
| Columna | Rótulo en FlexHub | Valores |
|---|---|---|
rpp | Filas por página | Cuántas filas trae el servidor de una vez. Vacío al crear, el servidor pone 1.000. |
modorenderizado | Vista | Rejilla normal (0), Gráfica de tarta (1), Gráfica lineal (2), Gráfica de barras (3), Gráfica polar (4), Board (tarjetas por columnas) (5). Calendario y Gantt no se ofrecen; si el informe ya los tiene, se respetan. |
renderizadofijo | No dejar cambiar la vista | Sí/No. |
npcp | Ocultar la paginación | Sí/No. |
boardcolgrupo1, boardcolgrupo2 | Board: columna que hace las calles, Board: columna que las subdivide | Columnas del informe. Solo con Board. |
graficacolgrupo | Gráfica: columna que agrupa | Columna del informe. Solo con una gráfica. |
avisomsg, avisotipo | Mensaje de aviso, Tipo de aviso | El texto que se muestra encima del listado y InformeTipoMensajeE: Sin Aviso (0), Ocultable (1), Fijo (2). Card Aviso encima del listado. |
infrelacionado, infrelacionetiqueta | Informe relacionado, Rótulo del informe relacionado | El informe que se ofrece al lado del listado, y con qué texto. Card Informe relacionado. |
Orden y agrupación
El orden son hasta nueve niveles, colorden1 a colorden9, cada uno con su columna y su sentido (colorden1desc a colorden9desc). El primero ordena todas las filas y el segundo solo ordena las que empatan en el primero. Sin niveles, las filas salen en el orden que devuelva la base de datos, que no está garantizado.
La agrupación son hasta nueve niveles, campoagrupacion1 a campoagrupacion9, cada uno con su modo en campoagrupacionmodo1 a campoagrupacionmodo9.
En FlexHub son las cards Cómo se ordena y Cómo se agrupa de la pestaña Diseño. Añadir un nivel elige una columna del informe; en un nivel de orden, De mayor a menor da el sentido, y en uno de agrupación, Qué se considera lo mismo da el modo, enum AgrupacionesCriteriosE:
| Valor | Miembro | Qué considera lo mismo |
|---|---|---|
| 0 | NoAgrupar | Nada: el nivel no hace nada. |
| 1 | Iguales | Valores iguales. |
| 2, 3 | ParteEntera, ParteDecimal | La parte entera o la decimal de un número. |
| 4 | ParEImpar | Pares e impares. |
| 5, 6, 7 | Intervalo, IntervaloInclusionSuperior, IntervaloInclusionInferior | Intervalos numéricos. |
| 8, 9, 10, 11, 12, 13, 14 | DiaDeLaSemana, Horas, Dias, Meses, Trimestre, Bimensual, Ano | Tramos de una fecha. |
| 15, 16, 17, 18 | LetraInicial, LetraFinal, PalabraInicial, PalabraFinal | Tramos de un texto. |
| 19 | Vacios | Vacíos frente a rellenos. |
La lista sale entera aunque no todos los modos encajen con todas las columnas: agrupar un texto por trimestre no significa nada.
Filtrado
Tres mecanismos determinan qué filas salen. En FlexHub están en la pestaña Filtrado:
| Columna | Rótulo en FlexHub | Qué hace |
|---|---|---|
filtro20 | Añadir condición, Añadir alternativa | Las condiciones guardadas. Cada una es un dato, una comprobación y un valor. Dentro de un bloque deben cumplirse todas; Añadir alternativa abre otro bloque y basta con que se cumpla uno. Sin condiciones salen todas las filas que el rol del usuario deje ver. |
algoritmodefiltrado | Algoritmo de compatibilidad | Un algoritmo de tipo Búsqueda determina a qué sección pertenece cada fila. Desde FlexHub solo se quita. |
filtropermisos | El filtro por permisos. FlexHub no lo muestra. |
Las comprobaciones son el enum TipoFiltradoE. Cuáles admite cada clase de dato lo publica el servidor en su catálogo; la familia de esta tabla sigue el nombre del miembro:
| Familia | Miembros de TipoFiltradoE |
|---|---|
| Generales | Igual, Distinto, Vacios, NoVacios, En |
| Texto | Contiene, NoContiene, ContienePalabras, NoContienePalabras, EmpiezaPor, TerminaPor, NoEmpiezaPor, NoTerminaPor, CoincideRegex, NoCoincideRegex, LogitudTextoSuperiorA, LogitudTextoInferiorA |
| Número | MayorQue, MenorQue, MayorOIgualQue, MenorOIgualQue |
| Sí/No | Si, No, SiYNo |
| Fecha | FechaIgual, FechaDistinta, FechaMenor, FechaMayor, FechaMenorOIgual, FechaMayorOIgual, AnoIgual, AnoDistinto, FechaIntervaloPersonalizado, ReferenciaHaciaIntervaloDinamico |
| Hora | HoraIgual, HoraDistinta, HoraMenor, HoraMayor, HoraMenorOIgual, HoraMayorOIgual |
Una condición con lista admite hasta 20 valores: la fila sale si coincide con cualquiera.
Un valor de condición puede ser una constante o un valor que se calcula al abrir el informe: el usuario que lo abre, o la respuesta a una pregunta. FlexHub conserva y muestra esos valores calculados, con la nota Se calcula al abrir el informe., pero no los edita ni ofrece uno nuevo. Una condición que el servidor no puede descomponer se conserva tal cual y sale marcada Solo lectura.
Columnas
Una columna es un dato que el informe saca por pantalla. Al crear el informe, el servidor pone la primera, la de identidad (id de la sección); el resto las añade quien lo diseña. Un informe no tiene dos columnas con el mismo dato. En FlexHub, la ventana de una columna lleva el Título encima de las pestañas General, Cómo se ve y Agrupación. Su contrato, Flex_GetEditablesAsync(FlexObjectTypes.ReportColumns), más el dato con el que se crea:
| Columna | Rótulo en FlexHub | Valores |
|---|---|---|
dato | Dato, en la card Qué dato muestra de General | Un campo de la sección o uno al que se llega por una relación. Una relación se puede elegir entera, que guarda su identificador, o entrar en ella y elegir uno de sus campos. Se elige al crear y no se cambia. |
titulo | Título | La cabecera de la rejilla. Obligatorio. |
posicion | Reordenar, en la lista de columnas | El orden de izquierda a derecha. |
visibilidade | Visibilidad | InfCol_VisibilidadE. Ver la tabla de visibilidad. |
rolcolumnae | Rol | InfCol_RolE. Ver la tabla de rol. |
modofecha | Representación de la fecha | ModoFechaE: Defecto (0), Nombre (1), Por tiempo (2), Estándar (3), dd/mm/yyyy (4). Solo cambia algo en una columna de fecha, y FlexHub solo lo muestra en ellas. |
modoagrupacion20 | Representación agrupada | ModoRepresentacionGrupalE. Ver la tabla de resúmenes. |
criterioagrupaciondinamica | Agrupación dinámica | AgrupacionesCriteriosE, la misma lista que la agrupación del informe. |
colorcol | Color en la gráfica | El color de la serie. Vacío es automático. Pestaña Agrupación. |
resumenpredeterminadopielista | CalculosResumenesEnInformesE: Ninguno (0), Resultados (1), Suma (2), Vacíos (3), Con dato (4), Media (5), Sí (6), No (7), Distintos (8). El resumen del pie de la lista. FlexHub no lo muestra; el motor respeta el valor que ya tenga la columna. |
Visibilidad (InfCol_VisibilidadE):
| Valor | Miembro | Rótulo | Comportamiento |
|---|---|---|---|
| 0 | SiempreVisible | Visible | La columna sale siempre. |
| 1 | SiempreOculto | Oculta | Nunca se muestra, pero sigue en el informe: sirve para cálculos y filtros. |
| 2 | Auto | Indefino | Se muestra u oculta según el contexto. |
| 3 | OcultarEnComplementos | Oculta en complementos | Se ve en el informe principal y se oculta cuando el informe se usa dentro de otra vista. |
Rol (InfCol_RolE):
| Valor | Miembro | Rótulo | Comportamiento |
|---|---|---|---|
| 0 | Automatico | Indefino | El tipo del campo determina cómo se trata. |
| 1 | Ninguno | Ninguno | Sin trato especial. |
| 2 | Moneda | Moneda | Un importe: decimales, símbolo y suma como dinero. |
| 3 | Porcentaje | Porcentual | Un tanto por ciento. |
| 4 | Cantidad_DestinadorInforme | Cantidad Dest. Informe | La cantidad que un destinador toma del informe. |
| 5 | UltimaVezVisto | UltimaVezVisto | La fecha de última actividad del registro. |
Resumen en la fila de grupo (ModoRepresentacionGrupalE): No agrupar (0), Sumar (1), Contar (2), Valor máximo (3), Valor mínimo (4), Media (5), Primero (6), Último (14), Contar distintos (7), Media distintos (8) y Sumar distintos (9). Los cuatro últimos solo valen con constantes: Contar vacíos (10), Contar sí (11), Contar no (12) y Contar Rellenado (13).
Una columna oculta sigue formando parte del informe: se calcula y sirve para ordenar, agrupar o filtrar. Quitar una columna no borra ningún dato y se puede restaurar; si el informe ordena o agrupa por ella, esas referencias se limpian y hay que volver a ponerlas.
Añadir columnas
La pestaña Columnas del informe tiene dos botones:
- Nueva columna abre la ventana de una columna. Al elegir el Dato, FlexHub propone el Título.
- Varias columnas abre Nuevas columnas: una fila por columna, con su Dato y su Título. Columna añade una fila. Agregar todos pone una fila por cada campo de datos de la sección que el informe todavía no muestra, el identificador incluido. Deja fuera los de formato Botón y los que rellena el motor:
ubicacion,posicion,fecha,fecham,fechasyn,usuarioidymodificado. Aceptar crea las columnas una detrás de otra y consolida una sola vez.
El título propuesto es la etiqueta del campo. Si el dato es un campo de una relación, como su nombre, se propone la etiqueta de la relación: «Cliente», no «Nombre». Si el dato es la relación entera, el título termina en «ID»: «Cliente ID». Esto último es una regla de FlexHub: una columna cuyo dato es una relación no se crea si su título no termina en «ID», y el aviso es Falta «ID» en el título. Así se distingue de la columna del nombre.
Por la Flex API, Flex_CreateObjectAsync(FlexObjectTypes.ReportColumns, informeId, patch): el padre es el informe, no la sección. El patch lleva dato (la ruta) o campoid, y titulo. Con consolidar a 0, la columna se crea sin consolidar y el motor no la muestra hasta la siguiente consolidación: crea así todas las columnas y llama una vez a Flex_ConsolidateAsync.
Preguntas
Una pregunta es lo que el informe pide a quien lo abre antes de sacar las filas: una fecha, un importe, un registro. Es FlexQuestionDTO, el mismo tipo en informes, documentos y algoritmos; se lee con Flex_GetQuestionsAsync y se escribe con Flex_SetQuestionsAsync.
En FlexHub, las preguntas van al final de la pestaña Filtrado. Añadir pregunta abre la ventana Añadir pregunta. Añadir intervalo crea de una vez dos preguntas de tipo Fecha, «Desde» y «Hasta», con los nombres internos dinaup_desdef y dinaup_hastaf: el motor las reconoce por ese nombre. Solo cabe un intervalo por informe.
| Propiedad | Rótulo en FlexHub | Qué es |
|---|---|---|
Keyword | Keyword | El nombre interno, sin el prefijo v., y la identidad de la pregunta. FlexHub lo pide al crearla y lo rellena solo desde la etiqueta: «Fecha de envío» da FechaDeEnvio. Guardada, ya no se cambia. Si llega vacío, el servidor lo deriva de la etiqueta. |
Label | Etiqueta | Lo que lee el usuario encima del campo. Obligatoria. |
Info | Ayuda debajo del campo (opcional) | Texto libre. |
Format | Tipo de respuesta | FieldFormatE: Texto, Entero, Decimal, Sí/No, Fecha, Fecha y hora, Hora o Relación. Sin Botón: un botón no recoge ninguna respuesta. |
RelatedSectionID | Sección | Solo con Relación. Obligatoria. |
DropdownReportID | Informe del desplegable | Solo con Relación. Vacío, el informe principal de la sección. |
DynamicDateRange | Preguntar un rango, no un día suelto | Solo con Fecha o Fecha y hora. El usuario elige «este mes» o «trimestre pasado» en vez de un día. |
Role | RoleFieldE. Ordinario es sin rol. | |
CreatedBySystem | La creó el motor, por ejemplo la pregunta Trimestre de un balance trimestral. |
Las preguntas se pasan por posición (p1, p2, p3), no por nombre. Por eso un informe publicado o en uso llega con FlexQuestionsDTO.Frozen = true: no se añade, quita ni mueve ninguna, ni se cambia su formato, su sección o su rango de fechas. Se cambian la etiqueta, la ayuda, el desplegable y, por la Flex API, el rol; FlexHub no ofrece el rol.
Para un informe por periodo, la pregunta es de tipo Fecha con el rango activado, y la condición del filtro compara el campo de fecha con esa pregunta. Filtra por un campo de tipo Fecha (sin hora): el corte del periodo no depende de la zona horaria del usuario. Un campo Fecha y hora se guarda en UTC, y un registro de las 23:00 del último día cae en el día siguiente para un usuario con otra zona horaria. Por la API, cada pregunta se responde con su Keyword en el diccionario variables de POST /api/reports.
Consumir un informe
| Vía | Cómo |
|---|---|
| Play | Desde el menú, por su categoría y subcategoría, o dentro de un panel. Ver Paneles. |
| FlexHub | Consultar, en el pie de la ventana del informe, abre Consultar informe con el listado tal como está guardado: lo que no se ha guardado todavía no se ve. |
| API REST | POST /api/reports?id=<GUID> con las variables, filtros y orden en el cuerpo. Ver Referencia de la API REST. |
| SDK .NET | Los métodos de informes del Cliente Dinaup y los componentes DnzReportView de DinaZen. |
| PG Sync | Una tabla PostgreSQL por informe de API sin preguntas ni relaciones. Ver Informes API y Dinaup PG Sync. |
Siguiente: Informes API.