Tipo de página

Informe: agrupado, sumado y listo para exportar.

El informe de abajo corre en la app de ejemplo, publicada en la Prueba online, sobre las mismas 52 ventas. Aparecen agrupadas por vendedor, con subtotales por grupo y total general.

Todas las ventas de una vez, separadas por vendedor

Un informe es un listado con la agrupación activada y sin paginación. Todos los registros salen de una vez, separados por grupo, con subtotales y el estado coloreado.

Informe de ventas agrupado por vendedor con subtotales
Agrupado por vendedor: Ana Souza suma 7 ventas y 75 ítems, y el total general aparece al final.

Tres propiedades convierten el listado en informe

Con tres propiedades en el controller, el listado se vuelve informe. Solo hay una regla: el orden predeterminado (defaultSort) tiene que empezar por los campos de la agrupación. Si no, el mismo grupo aparece más de una vez.

app/Control/…php
class VendaReport extends MadDataGrid{protected string $model       = Venda::class;// El sort DEBE empezar por los campos de agrupación (si no, los grupos se repiten)protected string $defaultSort = 'vendedor ASC, data_venda ASC';public int $perPage           = 0;   // sin paginación: grupos completosprotected string|array $groupBy    = 'vendedor';protected bool         $groupTotal = true;protected string $exportTitle    = 'Informe de ventas';protected string $exportFilename = 'informe-de-ventas';}

La exportación conserva los grupos y los subtotales

Grupos, subtotales y total general van junto al CSV, al Excel y al PDF. El PDF es el mismo de la página de Listado, con encabezado, cortes por grupo, estado coloreado y Página X de Y.

Menú de exportación del informe
El menú Exportar ofrece CSV, Excel o PDF, con los filtros y la agrupación de la pantalla.

Ver el PDF generado, página por página

Cuándo usar el informe

Usa el informe cuando alguien necesita ver todo de una vez, separado en grupos y sumado. Es la pantalla del cierre y de la verificación.

  • Comisión de ventas. Las ventas del mes por vendedor, con el subtotal de cada uno.
  • Extracto financiero. Movimientos por cuenta, con un saldo que reinicia en cada cuenta.
  • Movimiento de inventario. Entradas y salidas por producto y, dentro de él, por mes.
  • Tickets de soporte. Tickets por técnico, con la cantidad de cada uno.

Para editar registro por registro, usa el listado. Para indicadores y gráficos, el dashboard. Para imprimir un pedido, el documento. Y los filtros del informe se convierten en consultas Eloquent comunes, como muestra la generación de código.

Lo que configuras

Además de las tres propiedades de arriba, estos atributos cambian lo que sale en pantalla y en el PDF.

Niveles de la agrupación group-by
Hasta tres campos, separados por coma. Acepta un campo de otra tabla y una fecha agrupada por día, mes o año.
Etiqueta del grupo group-mask
El texto que abre cada grupo, con campos y valores ya formateados, como moneda y fecha.
Subtotal alineado group-band
Con el valor cells, los subtotales quedan debajo de las columnas sumadas, como en un informe impreso.
Línea de detalle row-detail
Una segunda línea bajo cada registro, como el historial de un movimiento. Sale en pantalla y en el PDF.
Saldo acumulado running
Suma la columna fila por fila. Con running-reset="group", el saldo reinicia en cada grupo.
Subtítulo del archivo export-subtitle
Puede traer el período filtrado. Así el PDF ya dice de cuándo son las cifras.

Lo que va al proyecto Laravel

El informe usa la misma base del listado (MadDataGrid), en una clase en app/Control con la vista <mad-grid>. Lo que ajustas en el código:

  • Ajustes en propiedades PHP. Agrupación, subtotal, título y nombre del archivo son propiedades de la clase. Si el Blade trae el atributo del título, ese gana.
  • Filtro extra en Eloquent. Una condición que la pantalla no ofrece entra en el método de búsqueda de la clase (onSearch).
  • Encabezado del PDF con marcadores. Las franjas del PDF quedan en un bloque de la clase, con título, fecha, período, filtros activos y número de página. Un dato solo de esta pantalla entra por un método propio (exportPdfPlaceholders).

Como toda pantalla de MadBuilder, esos archivos se abren en tu editor, van a tu Git y aceptan código a mano en bloques protegidos, que siguen ahí cuando la pantalla se genera de nuevo. Mira cómo se genera el código.

Preguntas sobre el informe

¿Se puede agrupar el informe por más de un campo?

Sí, hasta en tres niveles, como vendedor y después mes. Cada nivel gana su propia franja de grupo.

¿Se puede agrupar por un campo de otra tabla?

Sí, cuando cada registro apunta a un solo ítem de la otra tabla, como la venta y su cliente. Por los pagos de la venta, que son varios, no se puede.

¿Por qué el informe no tiene paginación?

Con paginación, un grupo quedaría cortado a la mitad y el subtotal sumaría solo la parte de la página. En bases grandes, puedes obligar al usuario a filtrar antes de consultar.

Y más

Agrupación en varios nivelesEtiqueta de cada grupo en el formato que quierasTotales por grupo y total generalTodos los registros en una sola página, por defectoFiltro de período con rangos listosTú defines el título y el nombre del archivo exportado

Mira el listado en detalle o conoce los tipos de página.

Crea la cuenta, arma una pantalla, descarga el proyecto.

Sin demo agendada ni llamada de descubrimiento. Si el Laravel que sale no pasa la revisión de tu equipo, perdiste una tarde.

  1. Crea la cuentaBeta abierta, sin tarjeta.
  2. Arma una pantallaEn el editor visual, en código o pidiéndoselo a la IA.
  3. Descarga el .zipUn proyecto Laravel que corre donde quieras.