Sage 50 España (evolución sobre motor Microsoft SQL Server de la histórica línea Eurowin / Sage Murano) almacena toda su operativa mercantil, contable y logística en bases de datos relacionales alojadas en el servidor local de la empresa. El Conector Sage 50 de Bentian ERP Bridge se ejecuta como un servicio nativo en Windows y opera directamente contra dicha instancia SQL Server sin exponer puertos TCP a Internet ni depender de conectores cloud intermedios.
1. Instancia SQL Server y Base de Datos del Ejercicio Activo
En una instalación estándar de Sage 50, el motor de base de datos se despliega bajo una instancia dedicada de SQL Server (habitualmente localhost\SAGE50, .\SQLEXPRESS o el nombre del servidor de dominio en red local). A diferencia de otros ERPs monolíticos, Sage 50 organiza la información separando la base de datos común de grupo y las bases de datos anuales de cada ejercicio fiscal:
Cuando la empresa realiza la apertura del nuevo año contable en Sage 50, basta con actualizar el identificador de base de datos en la interfaz local del Agente (http://127.0.0.1:39281) para continuar sincronizando sobre el nuevo ejercicio manteniendo intactas las reglas de negocio, almacenes y series.
2. Mapeo Relacional de Tablas en Sage 50
El adaptador Sage50Adapter traduce entre el modelo canónico de Bentian y las tablas físicas del esquema dbo de Sage 50. A continuación se detalla la correspondencia exacta de entidades y columnas:
| Tabla SQL Sage 50 | Columnas Clave Mapeadas | Rol en el Ciclo de Sincronización |
|---|---|---|
| dbo.articulo | CODIGO, NOMBRE, FAMILIA, MARCA, TIPO_IVA, PESO, BAJA | Maestro de artículos. Se filtran automáticamente las referencias marcadas con BAJA = 0 y se vincula su tipo impositivo con el catálogo web. |
| dbo.stocks | ARTICULO, ALMACEN, FINAL, RESERVADO, PENDIENTE | Existencias por almacén. Bentian calcula el stock disponible real descontando unidades pendientes de servir y aplicando el buffer de seguridad configurado. |
| dbo.pvp | ARTICULO, TARIFA, PVP, IVA_INC | Matriz de precios multiescalón. Permite seleccionar la tarifa de venta pública (B2C) o profesional (B2B) normalizando base imponible e IVA. |
| dbo.clientes | CODIGO, CIF, NOMBRE, DIRECCION, CODPOST, POBLACION, EMAIL, RECARGO | Resolución de clientes web por NIF/CIF o correo electrónico. Si el comprador es nuevo, se da de alta con su código contable correlativo. |
| dbo.c_pediven | EMPRESA, NUMERO, LETRA, FECHA, CLIENTE, ALMACEN, TOTALPED, OBSERVACIO | Cabecera de pedidos de venta. Almacena la serie documental (LETRA), el código de cliente y la referencia única del pedido eCommerce. |
| dbo.d_pediven | EMPRESA, NUMERO, LETRA, LINIA, ARTICULO, DEFINICION, UNIDADES, PRECIO, DTO1, TIPO_IVA, RECARGO | Detalle de líneas de pedido de venta, incluyendo artículos comprados, línea de gastos de transporte, descuentos e impuestos desglosados. |
3. Lecturas No Bloqueantes WITH (NOLOCK) y Dirty-Checking Criptográfico
Uno de los problemas más graves en integraciones de terceros con Sage 50 ocurre cuando un conector externo lanza consultas pesadas de lectura sobre dbo.articulo y dbo.stocks sin especificar nivel de aislamiento, provocando bloqueos compartidos (Shared Locks) que congelan la pantalla de los operarios de facturación o almacén.
Bentian erradica este cuello de botella combinando dos técnicas de ingeniería:
- • Hints explícitos
WITH (NOLOCK)/READ UNCOMMITTED: Todas las consultas de catálogo y stock se ejecutan sin adquirir cerrojos de lectura en SQL Server, completándose en menos de 25 milisegundos incluso en catálogos de más de 25.000 referencias. - • Motor Dirty-Checking SHA-256 en RAM: El Agente calcula una huella criptográfica por cada tupla
(SKU, StockDisponible, PrecioTarifa, TipoIVA). En cada ciclo de sincronización solo se envían hacia WooCommerce, PrestaShop o Shopify los artículos que realmente han sufrido una variación en SQL Server, reduciendo en un 98% las llamadas HTTP salientes.
4. Inyección Transaccional en c_pediven y d_pediven y Cuadre Fiscal
Cuando entra un pedido pagado desde la tienda online, el conector abre una transacción ACID en SQL Server para garantizar que nunca quede una cabecera en c_pediven huérfana de líneas en d_pediven:
- Control de Idempotencia: Se verifica que el identificador externo del pedido web (ej.
WOO-48291) no haya sido registrado previamente en la serie asignada (LETRA). - Resolución de Cliente: Se busca el NIF/CIF normalizado en
dbo.clientes. Si existe y tiene activada la marca de Recargo de Equivalencia, el motor fiscal aplica automáticamente los tipos vigentes (5,2%para IVA 21%,1,4%para IVA 10% y0,5%para IVA 4%). - Numeración Correlativa Segura: Se bloquea brevemente el contador de la serie (
LETRA = 'W'o la serie configurada) para obtenerMAX(NUMERO) + 1sin colisionar con pedidos creados manualmente en oficina. - Escritura de Cabecera y Líneas: Se insertan los registros en
c_pedivenyd_pedivencuadrando al céntimo la base imponible y el total cobrado por Stripe, Redsys o PayPal, y se compromete el stock reservado endbo.stocks.
5. Configuración JSON en AppData y Modo Evaluación Sandbox
La configuración de Sage 50 se persiste de forma atómica en %APPDATA%\Bentian Agent\agent-config.json. Además, si deseas probar la integración antes de conectar con el servidor SQL de producción, puedes activar "sandboxMode": true para que el Agente levante un entorno simulado de Sage 50 en memoria:
{
"erpType": "sage50",
"evaluationMode": { "enabled": false, "simulatedErp": "sage50" },
"softwareErp": {
"activeProvider": "sage50",
"provisioned": true,
"providers": {
"sage50": {
"serverInstance": ".\\SAGE50",
"databaseName": "GESTION",
"authMode": "windows",
"orderSeries": "1",
"warehouseCode": "01",
"tariffCode": "1",
"evaluationMode": false
}
}
}
}
Consulta planes de licencia (29 €/mes o 199 €/año) y el servicio de Puesta en Marcha Llave en Mano.