venta · sql · ndconsDespués de ADR-0001, los NDCONs entran en Vta pero no en el margen.
Nuevo problema: las queries que agrupan por proveedor / supervisor / cliente
/ artículo filtraban IS NOT NULL en el campo de agrupación. Los NDCONs (que
tienen esos campos en NULL) se perdían → el TOTAL de cada tab no coincidía
con el TOTAL del Resumen Ejecutivo.
| Vista | Total | ¿Coherente? |
|---|---|---|
| KPI "Ventas Netas" del Resumen Ejecutivo | $591.208.375 | ★ Referencia |
| Tab Por Vendedor (sin filtro IS NOT NULL) | $591.208.375 | ✅ |
Tab Por Artículo (con WHERE dsArticulo IS NOT NULL) |
$590.971.735 | ❌ −$236.640 |
Tab Por Proveedor (con WHERE proveedor IS NOT NULL) |
$590.971.735 | ❌ idem |
La diferencia ($236.640) son los NDCONs sin artículo/proveedor.
Eliminar el filtro IS NOT NULL del WHERE.
Reemplazarlo por COALESCE en GROUP BY para etiquetar los NULLs como
(SIN ARTÍCULO) / (SIN PROVEEDOR) / etc.
SELECT COALESCE(NULLIF(TRIM(<campo>),''), '(SIN <ETIQUETA>)') AS <alias>,
SUM(subtotalNeto) AS ventas,
SUM_VENTAS_REALES AS ventas_reales,
SUM_COSTO_NETO AS costo,
EXPR_CONTRIBUCION AS contribucion,
EXPR_MARGEN_PCT AS margen,
...
FROM ventas LEFT JOIN articulos_raw a ON ...
WHERE sync_id=? AND anulado='NO' -- ★ SIN filtro IS NOT NULL
GROUP BY <alias>
ORDER BY ventas DESC;
| Función | Campo agrupador | Etiqueta para NULL |
|---|---|---|
_apiMargenArticulos |
dsArticulo |
(SIN ARTÍCULO) |
_apiMargenProveedores |
proveedor |
N/D |
_apiMargenClientes |
nombreCliente |
N/D |
_apiProvSup |
proveedor, dsSupervisor |
(SIN PROVEEDOR), (SIN SUPERVISOR) |
_apiProvDep |
proveedor, dsDeposito |
(SIN PROVEEDOR), (SIN DEPÓSITO) |
| Vista | Total |
|---|---|
| KPI "Ventas Netas" del Resumen Ejecutivo | $591.208.375 |
| Tab Por Vendedor | $591.208.375 ✅ |
| Tab Por Supervisor | $591.208.375 ✅ |
| Tab Por Depósito | $591.208.375 ✅ |
| Tab Por Cliente | $591.208.375 ✅ |
| Tab Por Artículo | $591.208.375 ✅ (incluye fila (SIN ARTÍCULO) con $236.640) |
| Tab Por Proveedor | $591.208.375 ✅ |
| Resumen Proveedor × Supervisor | $591.208.375 ✅ |
| Resumen Proveedor × Depósito | $591.208.375 ✅ |
✅ Todos los tabs coherentes al peso.
✅ La fila (SIN ARTÍCULO) es informativa — muestra cuánto pesan los movimientos financieros.
⚠️ La fila aparece visualmente en las tablas (no se puede ocultar sin perder coherencia).
Filtrar IS NOT NULL y agregar un "ajuste" al final:
venta/includes/data_api.php
funciones _apiMargen* y _apiProv*