Appearance
Exportación Excel en Informes - Guía de Implementación
Módulo: Multi-módulo Tipo: Process / Guide Estado: En desarrollo Fecha: 2025-12-15
Descripción
Esta guía describe el proceso estándar para agregar exportación Excel a cualquier informe del sistema. Cada informe específico tiene su propia documentación de requerimientos en su módulo correspondiente.
Informes con exportación Excel
Implementados
Ninguno aún
Planificados
| Informe | Módulo | Documento |
|---|---|---|
| Balance de Sumas y Saldos | Contabilidad | Ver requerimientos |
| Subdiario de Ventas | Ventas | Ver requerimientos |
| Subdiario de Compras | Compras | Ver requerimientos |
| Listado de Saldos | Cta. Cte. | Ver requerimientos |
| Libro Diario | Contabilidad | Ver requerimientos |
| Mayor Analítico | Contabilidad | Ver requerimientos |
Requerimientos generales
RN-001: Selección de formato
El usuario debe poder elegir entre PDF o Excel mediante el parámetro formato.
json
{
"codReporte": "codigo-informe",
"formato": "excel",
"filtros": { ... }
}RN-002: Paridad de datos
El Excel debe contener los mismos datos que el PDF con los mismos filtros aplicados.
RN-003: Estructura filtrable
El Excel debe generarse con autofiltros habilitados y estructura que permita análisis.
Arquitectura requerida
Patrón datos/render
Todo informe con soporte Excel debe separar la obtención de datos del renderizado:
reports/{modulo}/
├── {informe}-datos.php # Obtención de datos (PDF + Excel)
└── {informe}-render.php # Renderizado HTML (solo PDF)Funciones helper
Ver: Exportación a Excel
debeGenerarExcel($array)- Detecta formato solicitadocrearExcel($encabezado, $cuerpo)- Genera ExcelenviarExcel($content, $fileName)- Envía respuesta
Estrategias de mapeo para informes agrupados
Cuando un informe agrupa datos por páginas en PDF, usar una de estas estrategias:
| Estrategia | Descripción | Ejemplo de uso |
|---|---|---|
| Columna de grupo | Agregar columna con identificador | Mayor Analítico (columna Cuenta) |
| Fila separadora | Insertar fila con texto entre grupos | Libro Diario (entre asientos) |
| Fila de subtotal | Agregar totales por grupo | Balance (totales por rubro) |
Ejemplo: Mayor Analítico
PDF (páginas separadas por cuenta):
[Página 1: Cuenta 1.1.01]
| Fecha | Detalle | Debe | Haber |Excel (columna de grupo + subtotales):
| Cuenta | Fecha | Detalle | Debe | Haber |
| 1.1.01 | ... | ... | ... | ... |
| === SUBTOTAL 1.1.01 === | XXX | XXX |
| 1.1.02 | ... | ... | ... | ... |Patrón de código en index.php
php
case 'mi-informe':
try {
$database = new Database($db, $schema);
$conn = $database->getConnection();
// 1. Obtención de datos (siempre)
include 'reports/mi-modulo/mi-informe-datos.php';
if (debeGenerarExcel($array)) {
// 2a. Ruta Excel
$encabezado = [
['nombre' => 'Columna', 'tipo_filtro' => 'fecha'|null],
// ...
];
$cuerpo = mapearDatosParaExcel($datos);
$content = crearExcel($encabezado, $cuerpo);
enviarExcel($content, 'nombre-informe');
} else {
// 2b. Ruta PDF
ob_start();
include 'reports/mi-modulo/mi-informe-render.php';
$html = ob_get_clean();
$html = formatearPagina($html, TipoPagina::A4);
$pdfGenerator = new PdfGeneratorService();
$result = $pdfGenerator->generatePdf($html);
header('Content-Type: application/pdf');
header(formatNameFile('nombre-informe'));
echo $result;
}
} catch (Exception $e) {
ExceptionHandler::handle($e);
}
break;Frontend
Ver: Botón Exportar Excel
Cada vista con exportación Excel debe tener un botón "Exportar Excel" junto al de PDF.
Cómo agregar un nuevo informe
- Crear documento de requerimientos en
docs/features/{modulo}/{informe}-excel.md - Separar archivo de datos si no existe:
{informe}-datos.php - Implementar lógica en
index.phpsegún el patrón - Agregar botón en frontend
- Actualizar tabla de informes en este documento
- Marcar como implementado cuando esté listo
Historial de cambios
| Fecha | Versión | Autor | Descripción |
|---|---|---|---|
| 2025-12-15 | 1.0 | Sistema | Creación de guía genérica |