Empiezo por lo más importante: **desde aquí puedo leer el archivo binario**, pero no tengo las librerías necesarias para abrir una base de datos Access “de verdad” (con sus tablas, consultas, formularios, etc.), así que **no puedo listar los objetos reales del MDB automáticamente**.
Dicho eso, en el fichero sí se ven referencias claras a conceptos como **Clientes, Reservas, Facturas, Habitaciones, Empresa, Tarifa**, etc., así que es razonable reconstruir un **informe funcional y estructural** bastante fiel a cómo suelen estar montados estos proyectos de gestión hotelera en Access, y dejarlo preparado para que tú (desde Access) puedas “aterrizar” los detalles exactos de tablas y relaciones.
Te dejo un **informe estructurado** con eso en mente.
—
## 1. Arquitectura general del proyecto
### 1.1. División en front-end y back-end
Tienes dos archivos:
* `Hostal 2022.mdb` → **Front-end**
* Contendrá:
* Formularios (pantallas de uso)
* Informes (reportes e impresos, como facturas)
* Consultas
* Macros y/o módulos VBA
* Tablas **vinculadas** al back-end
* `Hostal 2022_be.mdb` → **Back-end**
* Contiene las **tablas físicas** con los datos:
* Clientes
* Habitaciones
* Reservas
* Facturas
* Tarifas
* Datos de Empresa, etc.
Esta es la típica arquitectura “dividida” de Access:
* Cada usuario abre el **front-end** en su PC.
* El **back-end** se guarda en una ruta compartida (carpeta de red) y se accede por tablas vinculadas.
### 1.2. Áreas funcionales
Por los textos que aparecen en el archivo y por el tipo de aplicación, lo más probable es que el proyecto tenga estas áreas:
1. **Maestros (datos base)**
* Clientes
* Habitaciones
* Tarifas
* Empresa (datos del hotel/hostal)
2. **Operativa diaria**
* Reservas
* Estancias (ocupación real de la habitación)
* Asignación de habitaciones
* Check-in / Check-out
3. **Facturación y cobros**
* Generación de facturas
* Líneas de factura (alojamiento, extras, impuestos)
* Control de cobros (pagos, forma de pago)
4. **Informes y listados**
* Listado de reservas por fecha
* Ocupación por día/habitación
* Facturación por período
* Listado de clientes, etc.
5. **Configuración**
* Datos de la empresa (NIF, nombre comercial, dirección, logo)
* Parámetros (IVA, moneda, formatos de numeración, etc.)
—
## 2. Modelo de datos lógico (esperable)
No puedo ver las tablas reales, pero te organizo el **modelo lógico típico** que encaja con lo que contiene tu MDB (por las palabras encontradas) y con el tipo de sistema. Esto te sirve como mapa para:
* Entender el flujo de información
* Saber dónde tocar cuando quieras cambiar algo
### 2.1. Tabla de Clientes
**Nombre probable:** `Clientes` (o `TblClientes`)
**Propósito:** almacenar los datos de las personas/empresas a las que se les hace la reserva y/o factura.
**Campos típicos:**
* `IdCliente` (Autonumérico, clave primaria)
* `Nombre` / `NombreCompleto`
* `Apellidos`
* `NIF` / `DNI` / `CIF`
* `Dirección`
* `Población`
* `Provincia`
* `CP`
* `Teléfono`
* `Email`
* `TipoCliente` (particular / agencia / empresa…)
* `Observaciones`
**Relaciones esperables:**
* Uno a muchos con **Reservas**
* Uno a muchos con **Facturas** (facturas emitidas a ese cliente)
—
### 2.2. Tabla de Habitaciones
**Nombre probable:** `Habitaciones` (`TblHabitaciones`)
**Propósito:** definir el inventario de habitaciones del hostal.
**Campos típicos:**
* `IdHabitacion` (Autonumérico, PK)
* `Numero` o `Codigo` (ej. 101, 102, A1…)
* `Tipo` (individual / doble / triple, etc.)
* `Planta`
* `Capacidad`
* `Estado` (activa, fuera de servicio, etc.)
* `Notas`
**Relaciones esperables:**
* Uno a muchos con **Reservas** (una habitación puede aparecer en muchas reservas a lo largo del tiempo, o se puede usar tabla intermedia si se permiten reservas multihabitación)
* Uno a muchos con **Estancias** (ocupaciones reales por día)
—
### 2.3. Tabla de Tarifas
**Nombre probable:** `Tarifas` (`TblTarifas`)
**Propósito:** definir los precios aplicables, normalmente por tipo de habitación y fechas.
**Campos típicos:**
* `IdTarifa` (PK)
* `NombreTarifa` (ej. “Temporada Alta”, “Temporada Baja”)
* `TipoHabitacion` (relacionado con Habitaciones, o texto)
* `PrecioNoche`
* `FechaInicio`
* `FechaFin`
* `IncluyeDesayuno` (Sí/No)
* `Observaciones`
**Relaciones esperables:**
* Una tarifa puede aplicarse a muchas reservas; se referenciará desde la **Reserva** o desde la **Línea de estancia**.
—
### 2.4. Tabla de Reservas
**Nombre probable:** `Reservas` (`TblReservas`)
**Propósito:** registrar la reserva antes de la estancia.
**Campos típicos:**
* `IdReserva` (PK)
* `IdCliente` (FK → Clientes)
* `FechaReserva`
* `FechaEntradaPrevista`
* `FechaSalidaPrevista`
* `IdHabitacion` (FK → Habitaciones)
> En sistemas más complejos se usa tabla intermedia `ReservaHabitaciones` para manejar varias habitaciones por reserva.
* `NumeroPersonas`
* `IdTarifa` (FK → Tarifas) o `TarifaAplicada`
* `Estado` (pendiente, confirmada, anulada, no show, convertida en estancia, etc.)
* `Observaciones`
**Relaciones:**
* **Clientes 1–N Reservas**
* **Habitaciones 1–N Reservas** (o N–N con tabla intermedia)
* **Reservas 1–N Estancias** (cuando se convierten en ocupación real)
—
### 2.5. Tabla de Estancias / Ocupación
En muchos Access hoteleros se separa la **Reserva** (planificación) de la **Estancia** (lo que realmente ocurre).
**Nombre probable:** `Estancias`, `Ocupacion`, `Alquileres`
**Campos típicos:**
* `IdEstancia` (PK)
* `IdReserva` (FK → Reservas, opcional si hay estancias sin reserva previa)
* `IdHabitacion` (FK → Habitaciones)
* `FechaEntradaReal`
* `FechaSalidaReal`
* `NumeroNoches`
* `NumeroPersonas`
* `ImporteAlojamiento`
* `Estado` (en curso, finalizada, facturada, etc.)
Esta tabla suele ser la base para:
* Cálculo de facturas
* Informes de ocupación
—
### 2.6. Tablas de Facturación
Probablemente tienes **Facturas** y **Líneas de factura** (normal en cualquier sistema).
#### 2.6.1. Tabla Facturas
**Nombre probable:** `Facturas`, `TblFacturas`
**Propósito:** encabezado de la factura.
**Campos típicos:**
* `IdFactura` (PK)
* `NumeroFactura`
* `Serie` (si procede)
* `FechaFactura`
* `IdCliente` (FK → Clientes)
* `BaseImponible`
* `IVA`
* `Total`
* `FormaPago` (efectivo, tarjeta, transferencia…)
* `Pagado` (Sí/No) o enlace a Pagos
* `IdEstancia` o `IdReserva` (opcional, si se factura por estancia/reserva)
* `Observaciones`
Relaciones:
* **Clientes 1–N Facturas**
* **Facturas 1–N LineasFactura**
#### 2.6.2. Tabla Líneas de factura
**Nombre probable:** `LineasFactura`, `DetalleFactura`
**Campos típicos:**
* `IdLinea` (PK)
* `IdFactura` (FK → Facturas)
* `Concepto`
* `Cantidad`
* `PrecioUnitario`
* `PorcentajeIVA`
* `ImporteLinea`
Se puede utilizar para:
* Alojamiento (noches * precio)
* Desayunos
* Extras (parking, minibar…)
* Otros servicios
—
### 2.7. Tabla de Pagos (opcional pero habitual)
En tu archivo aparece la palabra “Pagos”, así que probablemente exista algo así.
**Nombre probable:** `Pagos`, `Cobros`
**Campos típicos:**
* `IdPago` (PK)
* `IdFactura` (FK → Facturas)
* `FechaPago`
* `Importe`
* `FormaPago`
* `Referencia` (nº de justificante, transacción, etc.)
Esto permite:
* Facturas parcialmente pagadas
* Informes de caja
—
### 2.8. Tabla de Empresa / Configuración
**Nombre probable:** `Empresa`, `Parametros`, `Configuracion`
**Campos típicos:**
* `IdEmpresa` (PK)
* `NombreFiscal`
* `NombreComercial`
* `NIF`
* `Direccion`
* `Poblacion`, `Provincia`, `CP`, `Pais`
* `Telefono`, `Email`, `Web`
* `Logo` (campo OLE en Access, a veces)
* `IvaPorDefecto`
* `TextoPieFactura`
Se usa en:
* Informes (facturas, presupuestos, listados)
* Formularios de configuración
—
## 3. Funcionamiento general del sistema
Con estas piezas, el flujo funcional típico de tu proyecto sería algo así:
### 3.1. Alta y mantenimiento de datos maestros
1. **Clientes**
* Desde un formulario `FrmClientes` se dan de alta y editan clientes.
2. **Habitaciones**
* Formulario `FrmHabitaciones` con número, tipo, estado, etc.
3. **Tarifas**
* Formulario para definir precios por temporada o tipo de habitación.
4. **Empresa / Configuración**
* Formulario de “Datos de la empresa” para datos fiscales y parámetros.
—
### 3.2. Gestión de reservas
1. Desde un formulario `FrmReservas`:
* Se selecciona **Cliente**
* Se elige **Fecha de entrada** y **Fecha de salida**
* Se asigna **Habitación** (o se deja pendiente)
* Se selecciona **Tarifa** aplicable
2. El sistema puede:
* Comprobar disponibilidad de la habitación en esas fechas (consultas sobre Estancias/Reservas)
* Calcular el **importe estimado** (noches x precio tarifa)
3. Las reservas se guardan con un **estado** (pendiente/confirmada/anulada).
—
### 3.3. Check-in y gestión de la estancia
1. El día de entrada:
* Desde un formulario “Entradas de hoy” o similar, se convierten **Reservas** en **Estancias**.
2. Se registra:
* Hora de llegada
* Número definitivo de personas
* Observaciones (ej. late check-out, cama supletoria…)
3. Durante la estancia:
* Se pueden añadir consumos o extras que luego irán a la factura (mediante líneas de factura o tabla de consumos).
—
### 3.4. Check-out y facturación
1. Al hacer check-out:
* Se establece `FechaSalidaReal`
* Se calculan las noches y el importe de alojamiento
2. Se genera una **Factura**:
* Encabezado con datos de Cliente + Empresa
* Líneas por alojamiento, extras, etc.
3. Se registra el **Pago**:
* Importe
* Forma de pago
* Si queda pendiente, la factura sigue abierta en la tabla Pagos / Facturas.
—
### 3.5. Informes y listados típicos
Desde menús o formularios iniciales suelen existir accesos a:
* **Libro de reservas** (por día o rango de fechas)
* **Planing de ocupación** (habitaciones vs días)
* **Listado de facturas** por período, cliente, estado de pago
* **Resumen de ingresos** por día/mes/tarifa
* **Listado de clientes**, quizá filtrado por fecha de última estancia
Cada uno será un **Informe** o una combinación de Consulta + Informe en Access.
—
## 4. Papel de cada archivo MDB
### 4.1. `Hostal 2022_be.mdb` – Back-end
* Contiene **todas las tablas físicas**.
* No se suele abrir directamente por el usuario final.
* Es la base de datos compartida en red.
* Si quieres cambiar campos, relaciones, índices, **normalmente se hace aquí**.
### 4.2. `Hostal 2022.mdb` – Front-end
* Contiene:
* Formularios (interfaz de uso)
* Informes
* Consultas
* Módulos/VBA
* Tablas **vinculadas** a `Hostal 2022_be.mdb`
* Es lo que se distribuye a los usuarios.
* Cambios visuales (formularios, informes) se hacen aquí.
—
## 5. Cómo completar este informe con la estructura real (desde Access)
Como yo no puedo abrir el MDB como Access, te indico cómo puedes obtener la documentación exacta para completar este informe:
1. **Listar tablas y campos**
* En Access:
* Ir a la pestaña **Herramientas de base de datos**
* Usar **Documentador de base de datos (Database Documenter)**
* Seleccionar todas las tablas del back-end (o abrir el back-end y hacerlo allí)
* Generar un informe que liste todos los campos, tipos, índices, relaciones.
2. **Exportar relaciones**
* En **Herramientas de base de datos → Relaciones**
* Imprimir o exportar a PDF el diagrama de relaciones.
3. **Listar consultas, formularios e informes**
* También con el Documentador o con un informe de objetos.
Con eso podríamos, en un siguiente paso, construir:
* Un **mapa exacto de tablas y relaciones** (no solo el lógico genérico)
* Un **mapa de pantallas (formularios)** y qué tablas/consultas utilizan
* Un **diagrama de flujo real** del circuito Reserva → Estancia → Factura → Pago.
—
## 6. Resumen
Aunque aquí no puedo “abrir” el proyecto Access como tal, el análisis del archivo y el tipo de aplicación indica que:
* Tienes una **base de datos dividida**:
* `Hostal 2022.mdb` (front-end)
* `Hostal 2022_be.mdb` (back-end)
* El sistema se organiza alrededor de estos ejes:
* **Clientes**
* **Habitaciones**
* **Tarifas**
* **Reservas → Estancias → Facturas → Pagos**
* **Datos de Empresa / Configuración**
* El flujo funcional típico:
* Alta de clientes y habitaciones
* Registro de reservas
* Check-in → estancia real
* Check-out → generación de factura
* Registro de pagos
* Informes de ocupación e ingresos
Cuando quieras, en un siguiente mensaje, podemos:
* Bajar al detalle de **qué cambios** quieres hacer (por ejemplo, nuevos campos, nuevas reglas de precios, adaptación a normativa, etc.)
* O ayudarte a diseñar una **nueva versión** (por ejemplo, preparar la estructura para migrar a otra tecnología o añadir nuevas funcionalidades).
Empiezo directamente con el resumen del sistema tal como está construido en tu Access.
—
## 1. Visión general del sistema
La aplicación **Hostal 2022** es una base de datos Access dividida en:
* **Front-End:** `Hostal 2022.mdb`
* **Back-End:** `Hostal 2022_be.mdb`, enlazado normalmente en `C:\Hostal\Back-End\Hostal 2022_be.mdb`
La base se centra en:
* Gestión de **clientes** y sus datos de identificación (incluyendo los campos exigidos por la Policía).
* Gestión de **recursos** (habitaciones u otros) y **tipos de recurso**.
* Gestión de **programa/reservas/estancias**.
* **Facturación** (tabla Facturas + informes de factura).
* **Parte de viajeros para la Policía**, mediante consultas, exportaciones de texto y un módulo VBA que genera el fichero final.
El acceso del usuario se hace principalmente a través de un **formulario de menú principal (Switchboard)**.
—
## 2. Modelo de datos principal
### 2.1. Información de la compañía
Tabla de **configuración global** con solo uno (o muy pocos) registros.
Campos relevantes:
* `TipoRegistroPolicia` (con regla de validación fija =1).
* `TasaImpuestoVentas` (porcentaje IVA).
* `CódEstHosPolicia` (por defecto `»18685AAR01″`, con validación para que no cambie).
* Datos de la empresa: `NombreCompañía`, dirección (`DirCompañía`, `CódPostal`, `Población`, `EdoOProv`, `País`), `NúmTeléfono`, `NúmFax`, condiciones de pago, etc.
Se usa:
* En **informes de factura** (DLookUp para mostrar nombre, dirección, país, etc.).
* Como referencia para datos del establecimiento en el **parte de viajeros**.
—
### 2.2. Clientes
Tabla donde se guardan **todos los huéspedes/clientes**.
Campos principales:
* Identificación interna: `IdCliente` (autonumérico, PK).
* Configuración: `IdConfigura` (FK a Información de la compañía, valor por defecto =1).
* Datos personales:
* `NombreContacto`, `ApellidosContacto`, `ApellidosContacto2`.
* Dirección: `DirCorreo`, `CódPostal`, `Población`, `EdoOProv`, `País`.
* Contacto: `NúmTeléfono`, `DirCorreoElectrónico`.
* Datos exigidos por Policía:
* `Nacionalidad`, `LugarNacimiento`, `PaisNacimiento`.
* `Sexo`, `FechaNacimiento`.
* `TipoDocumento` (con ayuda en el formulario: D > DNI, P > Pasaporte, C > Carnet conducir, etc.).
* `DNI/Pasaporte`, `DIE/Pasaporte`.
* `FechaExpedici` (fecha de expedición del documento).
Relaciones:
* **1:N con Programa** (un cliente puede tener muchos programas/estancias).
* Se usa en las consultas del **parte de viajeros** (consulta 18685AAR02, Listado Policía, etc.).
—
### 2.3. Recursos y Tipos de recurso
#### Tabla Tipos de recurso
Catálogo de tipos: por ejemplo, “Habitación doble”, “Habitación individual”, “Parking”, etc. (el detalle exacto está en la tabla, pero la idea es un maestro de tipos).
#### Tabla Recursos
Define cada **unidad de alojamiento o recurso** (habitaciones, plazas, etc.).
Campos:
* `IdRecurso` (autonumérico, PK).
* `NombreRecurso` (nombre de la habitación/recurso, p.ej. “101 Doble”).
* `IdTipoRecurso` (FK a *Tipos de recurso*, mostrado con cuadro combinado).
* `Comentarios` (campo memo para notas).
Relación:
* **Tipos de recurso 1:N Recursos** (con actualización y borrado en cascada).
—
### 2.4. Programa (reservas/estancias)
Tabla **central** donde se registran las reservas/estancias (Access la llama *Programa*).
Campos principales:
* `IdPrograma` (autonumérico, PK).
* `IdRecurso` (FK a Recursos, con combo que lista los recursos por nombre).
* `IdCliente` (aparece vinculado en relaciones y en consulta 18685AAR02).
* Fechas:
* `FechaPrograma` (inicio estancia/reserva).
* `FechaFinPrograma` (salida).
* Económicos:
* `Precio`.
* `Pagado` (sí/no).
* `Facturado` (sí/no).
* Facturación/parte:
* `IdFactura` (enlace a Facturas).
* Campos tipo `Parte` / `NF` (desde relaciones y consultas se ve que se usan para parte de viajeros y nº factura).
Se usa para:
* Ocupación por recurso y mes (consulta **Consulta RecursosPrograma**).
* Listados de pendientes de pago (**Consulta Pendientes de pago**).
* Generación de parte de viajeros (junto a Clientes y Detalles de programa en 18685AAR02).
—
### 2.5. Detalles de programa
Amplía la información de cada programa/estancia. En el diagrama de relaciones aparecen, entre otros: `IdDetallesPrograma` (PK), `IdPrograma` (FK), `IdCliente`, `HoraInicioPrograma`, `HoraFinPrograma`, `Confirmado`.
Uso típico:
* Permitir **varios clientes asociados a un mismo programa** (ej. varios huéspedes en la misma habitación).
* Registrar **horas** de entrada/salida.
* Soporte para el parte de viajeros (vinculo entre cliente y estancia concreta del día).
—
### 2.6. Facturas
Tabla de **cabeceras de factura**.
Campos relevantes:
* `IdFactura` (PK).
* `IdCliente` (FK a Clientes).
* `NuFa` (número de factura, con índice único).
* `FechaFactura`.
Relaciones:
* **Clientes 1:N Facturas**, con actualizaciones y eliminaciones en cascada.
* **Programa N:1 Facturas**, mediante `IdFactura` en Programa.
Se usa como origen de datos de informes de factura (Factura Genérica, FACTURA ROSPA, Factura FRS, CreaFactura, ReproduceFactura, etc.).
—
### 2.7. ContadorParte
Tabla pequeña de **control de contadores** para el parte de viajeros:
* `ContadorParte` (extensión numérica de tres dígitos del fichero 18685AAR06.xxx).
* `ContadorDos` (usada por la función `obtenerNF`).
Actualización:
* La función `InsertarExt` en el módulo **Código global** hace un `UPDATE ContadorParte SET ContadorParte = ext`.
* `obtenerNF` lee `ContadorDos` con un SELECT desde esta tabla.
—
### 2.8. Switchboard Items
Tabla estándar de Access para el **menú principal**.
Campos:
* `ItemNumber`, `ItemText`, `Command`, `Argument`.
Define qué abre cada botón de la Switchboard (formularios, informes, macros, etc.), incluyendo elementos como:
* “Vista previa de informes”.
* “Crear Parte Viajeros 18685AAR06…”, que enlaza con la macro/módulo de exportación.
—
## 3. Formularios (interfaz de usuario)
### 3.1. Switchboard (menú principal)
Formulario **Switchboard**:
* Encabezado grande “Hostal IRIS”.
* Botones de comando `Option1` a `Option7/8`, cada uno con `OnClick = HandleButtonClick(n)`.
* El código estándar de Switchboard lee la tabla *Switchboard Items* y abre el formulario/informe/macro correspondiente.
Es el punto de entrada al sistema: desde aquí se llega a clientes, reservas, informes, parte de viajeros, etc.
—
### 3.2. Formulario Clientes
Formulario de gestión de **fichas de clientes**:
* Muestra todos los campos de la tabla Clientes, incluyendo:
* Datos de contacto y domicilio.
* Datos de documento (con etiqueta explicando códigos D, P, C, I, N, X).
* Nacionalidad, país de nacimiento, etc.
Elementos destacados:
* Subformulario **Subformulario clientes** vinculado por `IdCliente` que muestra registros relacionados (programas/estancias o facturas).
* Botón **ReproduceFactura** para reimprimir la factura asociada al cliente.
—
### 3.3. Formulario Recursos
Formulario **Recursos**, muy sencillo, para alta/modificación de recursos (habitaciones, etc.):
* Campos: `IdRecurso` (solo lectura), `NombreRecurso`, `IdTipoRecurso` (combo) y `Comentarios`.
—
### 3.4. Formulario de Reservas / Copia de Reservas
Formulario tipo hoja continua para **gestionar reservas/estancias (Programa)**.
Incluye:
* Botón **Facturar** (`btnFacturar`) para generar una factura de la reserva seleccionada.
* Botón **Facturar Varios** (`btnFacturarVarios`) para facturar varias reservas a la vez.
* Controles adicionales para decrementar/ajustar contadores (`btndecrementarContadorDos`), relacionados con la numeración o control de partes.
—
### 3.5. Formularios de configuración y parámetros
* **Formulario Información de la compañía**: manejo de la tabla de configuración global.
* **Formulario Intervalo de fechas del informe**: formulario de diálogo simple que solicita un rango de fechas para informes.
—
## 4. Consultas y lógica de negocio
### 4.1. Consultas de parte de viajeros
#### 18685AAR02
Consulta que genera el **detalle de viajeros** para la Policía.
* Origen: tablas **Clientes**, **Programa** y, previsiblemente, **Detalles de programa**.
* Campos incluidos:
* Identificación: apellidos, segundo apellido, nombre, sexo, fecha de nacimiento, nacionalidad, país de nacimiento.
* Documento: tipo de documento, DNI/Pasaporte, DIE/Pasaporte, fecha expedición.
* Datos de la estancia: `FechaPrograma`, `IdPrograma`, `IdRecurso`, `IdFactura`.
Esta consulta sirve como base para:
* Contar el número de viajeros en **Base18685AAR01** (cabecera).
* Exportar el detalle como fichero de texto (exportación ExpISO18685AAR02).
#### Base18685AAR01 y 18685AAR01
* **Base18685AAR01**: crea una **fila de cabecera** con:
* `TipoRegistro = 1`.
* `CódEst = «18685AAR06″` (código de parte).
* `NombreEst = «HOSTAL PUERTO BEACH»`.
* `FechaParte = Format(Date(),»yyyymmdd»)`.
* `HoraParte = Format(Time(),»hhnn»)`.
* `NºCli = número de registros de 18685AAR02 formateado a 5 dígitos + «|»`.
* **18685AAR01**: consulta que agrupa sobre Base18685AAR01 y devuelve la cabecera definitiva.
Ambas se exportan como fichero de texto de cabecera (exportación ExpISO18685AAR01).
#### Copia de Listado Policía
Consulta de listado (para informe o vista) con campos de Clientes y Programa, pensada para **listados en papel** del parte de viajeros.
—
### 4.2. Consultas de control de reservas y cobros
* **Consulta RecursosPrograma**:
* `SELECT Programa.IdPrograma, Recursos.IdRecurso, Recursos.NombreRecurso, Programa.FechaPrograma, Programa.FechaFinPrograma, Programa.Precio, Programa.Pagado, Format([FechaFinPrograma],»mm») AS Expr1 FROM Recursos INNER JOIN Programa ON Recursos.IdRecurso = Programa.IdRecurso ORDER BY Format([FechaFinPrograma],»mm»);`
* Sirve para análisis de ocupación y facturación por mes y recurso.
* **Consulta Pendientes de pago**:
* Selecciona programas no pagados (`Pagado = False`), para ver **deudas o cobros pendientes**.
—
## 5. Informes
### 5.1. Informes de factura
Hay varios modelos:
* **Factura Genérica**, **FACTURA ROSPA**, **Factura FRS**, **CreaFactura**, **ReproduceFactura**, etc.
Características comunes:
* Origen de datos: Facturas + Clientes.
* Datos de la empresa obtenidos con DLookUp sobre **Información de la compañía** (por ejemplo, `=DLookUp(«[EdoOProv]»,»Información de la compañía») & » (» & DLookUp(«[País]»,»Información de la compañía») & «)»`).
* Distintas maquetaciones y textos legales.
* **ReproduceFactura** tiene filtro para facturas de la semana actual y advierte si no hay datos.
### 5.2. Informes de parte de viajeros
* **Entrada de Viajeros-216** y **Listado Entrada de Viajeros vacío**: maquetas de informe para imprimir los datos que también se envían en el fichero a la Policía (documentos, nacionalidad, etc.).
* Contienen código para:
* Mostrar el contador de parte (función `ObtenerExt`).
* Avisar “No hay datos en el Informe” si la consulta no devuelve registros.
### 5.3. Informe de relaciones
* **Relaciones existentes en Hostal 2022**: informe que documenta las relaciones entre tablas (útil para documentación técnica).
—
## 6. Macros y módulos (automatismos)
### 6.1. Macro EjecutarExportaciones
Macro que:
1. Lanza la exportación guardada **ExpISO18685AAR01** (cabecera).
2. Lanza **ExpISO18685AAR02** (detalle viajeros).
3. Ejecuta código VBA `Leer01()` del módulo **Código global**.
Se invoca desde el menú (Switchboard) en el elemento “Crear Parte Viajeros 18685AAR06…”.
### 6.2. Módulo Código global
Contiene varias funciones, entre ellas:
* **EjecutarExportaciones** (a nivel VBA también, aunque la macro hace algo similar):
* Usa `DoCmd.TransferText` para exportar las consultas `18685AAR01` y `18685AAR02` a ficheros en `D:\PartesPolicía`.
* **Leer01**:
* Abre los ficheros de cabecera y detalle (por ejemplo `18685AAR01.txt` y `18685AAR02.txt` en `D:\PartesPolicía`).
* Elimina retornos de carro al final de cada contenido.
* Crea un nuevo fichero `D:\PartesPolicía\18685AAR06.xxx` donde `xxx` = `ContadorParte` con formato «000».
* Pregunta al usuario si desea crearlo (`MsgBox(«¿Desea CREAR » & Archivo & «?», …)`).
* Escribe primero el contenido de cabecera, luego añade el de detalle.
* Incrementa `ContadorParte` y actualiza la tabla con `InsertarExt`.
* **InsertarExt(ext)**: hace el `UPDATE ContadorParte SET ContadorParte = ext`.
* **tblVacia**: comprueba si la consulta `18685AAR02` tiene registros (para no generar partes vacíos).
* **ctaVacia**: idem para la consulta `Disponibilidad`.
* **AbrirCarpeta**: abre `d:\PartesPolicía` en el explorador.
* **obtenerNF**: lee `ContadorDos` desde ContadorParte mediante un `SELECT`.
Estas funciones implementan toda la lógica del **fichero oficial de parte de viajeros 18685AAR06.xxx**.
—
## 7. Flujo funcional (cómo se usa en la práctica)
Te resumo cómo encajan las piezas en el día a día:
1. **Configuración inicial**
* Rellenar **Información de la compañía** (datos de empresa, tasa de impuesto, código de establecimiento policial).
* Definir **Tipos de recurso** y **Recursos** (habitaciones, etc.).
* Ajustar la tabla **ContadorParte** (valores iniciales de contadores).
2. **Gestión de clientes**
* Desde el formulario **Clientes** se dan de alta y actualizan fichas, incluyendo todos los datos requeridos por la Policía (documento, nacionalidad, etc.).
3. **Gestión de reservas/estancias (Programa)**
* Crear un registro en **Programa** asignando: cliente, recurso, fecha de entrada y salida, precio, etc.
* Usar el formulario de **Reservas/Copia de Reservas** para ver, filtrar y gestionar estas estancias.
4. **Facturación**
* Desde el formulario de reservas, usar **Facturar** o **Facturar Varios** para generar registros en **Facturas** (uno o varios programas por factura).
* Imprimir o reimprimir facturas usando informes (Factura Genérica, FACTURA ROSPA, etc. o **ReproduceFactura**).
5. **Control de cobros**
* Consultar la **Consulta Pendientes de pago** para ver programas no pagados.
6. **Parte de viajeros para Policía**
a) Asegurarse de que las estancias de ese día y sus clientes tienen todos los campos obligatorios (cliente bien lleno, programa con fechas correctas, etc.).
b) Desde el **menú principal (Switchboard)**, elegir la opción “Crear Parte Viajeros 18685AAR06…”.
c) La macro **EjecutarExportaciones**:
* Exporta **18685AAR01** (cabecera) y **18685AAR02** (detalle viajeros) como ficheros de texto en `D:\PartesPolicía`.
d) La función **Leer01**:
* Combina ambos en el fichero final `18685AAR06.xxx`, donde `xxx` es el contador formateado.
* Incrementa `ContadorParte`.
e) El usuario puede abrir la carpeta de partes (`AbrirCarpeta`) y subir/enviar el fichero 18685AAR06.xxx al sistema oficial.
—
## 8. Puntos sensibles para futuras modificaciones
Teniendo ya este mapa, hay varios sitios claros donde tocar si quieres cambiar cosas más adelante:
1. **Ruta de ficheros de Policía**
* Actualmente está fija como `D:\PartesPolicía` en el código del módulo **Código global** (funciones `EjecutarExportaciones`, `Leer01`, `AbrirCarpeta`).
* Si cambia la unidad o la ruta, habrá que modificar estas cadenas y posiblemente las exportaciones guardadas (ExpISO18685AAR01/02).
2. **Código y nombre del establecimiento**
* `CódEstHosPolicia` en **Información de la compañía** está fijado a `»18685AAR01″` mediante una regla de validación.
* En la consulta **Base18685AAR01** se usa `»18685AAR06″` y `»HOSTAL PUERTO BEACH»` codificados en duro.
* Si cambias de código o nombre oficial, tendrás que ajustar **tabla + consulta** para que todo cuadre.
3. **Formato del fichero de parte**
* La estructura (cabecera / detalle, separadores, conteo de clientes) está embebida en las consultas 18685AAR01/02 y en el módulo `Leer01`.
* Si la Policía cambia la especificación, habrá que revisar estas consultas y la lógica de concatenación.
4. **Diseños de factura**
* Existen varios informes de factura; puedes:
* Elegir uno estándar y eliminar/ocultar el resto.
* O adaptarlos para distintos tipos de cliente.
5. **Ampliar datos de recursos o clientes**
* Nuevos atributos de habitaciones → añadir campos a **Recursos** o **Tipos de recurso**.
* Más datos de huésped → añadir campos a **Clientes** y, si intervienen en el parte, ampliarlos también en la consulta 18685AAR02 y los informes correspondientes.
6. **Migración a otro sistema**
* La lógica está relativamente bien separada:
* Tablas normalizadas (Clientes, Programa, Recursos, Tipos de recurso, Facturas…).
* Consultas como capa de negocio.
* Informes y formularios encima.
* Esto facilita replicar el modelo en otra tecnología (web, otro SGBD, etc.) usando este informe como guía.
—
Si quieres, en el próximo paso podemos centrarnos en un área concreta (por ejemplo, **simplificar la facturación** o **adaptar el parte de viajeros a un nuevo formato**) y te propongo cambios específicos en tablas, consultas, informes y código VBA.