## 🛠️ Rescatando la Nostalgia: Downsizing de Aspel CAJA 3.5 a CAJA 1.0 (¡1999!)
**¡Misión cumplida!** Acabamos de culminar una migración de datos que es, a la vez, un *downgrade* técnico y un homenaje a la confianza. El objetivo: transferir informacion de **Aspel CAJA 3.5** (con base de datos **Firebird/SQL**) a **Aspel CAJA 1.0** (un sistema clásico de 1990s que usa archivos **Paradox**).
Este proyecto surgió de la necesidad de un cliente de gran confianza, habituado por décadas al CAJA 1.0. Tuvimos que devolverle su sistema favorito, a pesar de los desafíos técnicos que implica operar un *software* con casi 30 años de antigüedad.
—
### ⚙️ El Primer Desafío: Poner a Andar al CAJA 1.0
Operar un sistema de 16 bits como CAJA 1.0 en **Windows 11** no es directo. Para lograr la instalación, fue necesario buscar e integrar un **complemento de instalador de 16 bits**, crucial para que el sistema operativo moderno pudiera siquiera ejecutar el *setup* original.
**Nota Importante:** El sistema CAJA 1.0 ya había recibido una modificación previa **a nivel ensamblador** alrededor de 2014 para extender su manejo de fechas, pues originalmente solo funcionaba hasta el año 2013. Sin esta corrección, la migración ni siquiera habría sido viable.
### 🌉 El Desafío de la Migración: De SQL a Paradox
Migrar **1482 artículos** de una base de datos moderna a una arquitectura **Paradox** es un ejercicio de ingeniería inversa.
#### 1. Identificación y Extracción (Firebird ➡️ TXT)
* **Fuentes de Datos:** Aspel CAJA 3.5 (Firebird SQL) con tablas `CATINVEN`, `LINEAS`, `EXIST`.
* **Destino:** Aspel CAJA 1.0 (Archivos Paradox .DB) con archivos `CATINVEN.db`, `LINEAS.db`, `EXIST.db`.
* **Herramienta Clave:** Utilizamos **FlameRobin**. Configuramos la exportación para generar archivos **TXT con *INSERTs***, seleccionando y emparejando los campos comunes entre ambas bases. La tabla `CATINVEN` del 3.5 es **CASI** equivalente al archivo `CATINVEN.DB` de Paradox, lo que facilitó el mapeo.
#### 2. La Clave de la Compatibilidad: Existencias por Tienda
No bastaba con migrar el inventario (`CATINVEN`) y las líneas (`LINEAS`). El sistema CAJA 1.0 es estricto y solo reconocería los artículos si se transfería también la información de la **Existencia por Tienda** (`EXIST` / `EXIST.db`).
**Detalle Técnico Crucial de Mapeo:**
El campo de cantidad en la tabla **Firebird** del 3.5 se llama `EXISTIENDA`, mientras que en el archivo **Paradox** de la versión 1.0 simplemente se llama `EXISTENCIA`.
Ajustamos los *scripts* de *INSERT* para transferir correctamente estos datos y garantizar que el inventario tuviera existencias asociadas.
#### 3. La Inserción Final: TXT ➡️ Paradox con Excel
* **Herramienta de Carga:** Recurrimos a **Microsoft Excel 2013 de 32 bits**. Esta versión específica conserva la capacidad de **abrir y manipular archivos Paradox (.DB)** y ejecutar comandos SQL contra ellos.
* **Proceso:** Se generaron *scripts* de **INSERT** (en archivos TXT) para las tres tablas clave y se ejecutaron a través de Excel para poblar los archivos Paradox.
—
### ⚠️ ¡La Lección Más Valiosa (y dolorosa)! Error de Controlador
Al intentar validar los datos cargados en **Excel** (una vez que ya habíamos insertado `CATINVEN` y `LINEAS`), me encontré con un persistente mensaje de **»Error de Controlador»** o **»Error en el formato de archivos»**.
**El camino equivocado:** Mi primera reacción, común en entornos Paradox, fue buscar archivos de bloqueo (`.LCK`) o de control de red (`.NET`) que pudieran estar impidiendo el acceso.
> **¡Dos horas perdidas en un *bug* fantasma!** Busqué exhaustivamente para borrar cualquier archivo `pdoxusr.lck` o `pdoxusr.net` que estuviera bloqueando el acceso, pensando que era un error de concurrencia o de bloqueo de archivo.
El verdadero problema surgió porque, al principio, **solo me había enfocado en `CATINVEN` y `LINEAS` y no en `EXIST`**. El error se debía a que los archivos de datos no estaban sincronizados con sus estructuras de índices internas.
### ✅ La Solución Definitiva: Reconstruir Índices
Finalmente, la solución fue dirigirse al **Control de Archivos** de Aspel CAJA 1.0 y ejecutar la **reconstrucción de índices**.
Una vez reconstruidos, el Excel pudo abrir y analizar correctamente todos los datos, confirmando que la inserción de las tres tablas (`CATINVEN`, `LINEAS`, y la crucial `EXIST`) había sido exitosa y los índices estaban limpios.
—
Este proyecto demostró que la **ingeniería inversa**, las correcciones de ensamblador, y el uso creativo de herramientas (FlameRobin y el subestimado Excel 2013 de 32 bits) pueden salvar sistemas heredados. Es una victoria donde la tecnología se adapta a las **personas** y sus costumbres.
**Nota:** Las marcas mencionadas aquí son marcas registradas de sus respectivos dueños.