Ordenamiento Descendente Correcto en Administrar Ventas con DataTables Server-Side en JCPOS Ultimate
Uno de los puntos que más confusión genera al trabajar con DataTables en modo server-side es el ordenamiento por defecto. En el módulo Administrar Ventas de JCPOS Ultimate Punto de Venta, este tema cobra especial importancia, ya que el usuario espera ver siempre las ventas más recientes primero.
En esta publicación explicamos:
- Por qué el ordenamiento descendente no parecía funcionar
- Cómo maneja DataTables el orden en server-side
- Dónde ocurre realmente el ordenamiento
- Qué se ajustó para que el orden sea correcto
- Recomendaciones para evitar este problema en el futuro
📁 Archivos involucrados
El flujo completo del listado de ventas utiliza dos archivos clave:
- Vista:
vistas/modulos/ventas.php - Backend DataTables:
ajax/datatable-administrarVentas.ajax.php
Importante: No se modificó la vista ventas.php. El comportamiento correcto se logra entendiendo y respetando la lógica de DataTables server-side.
📊 El problema: “el orden no cambia”
Desde el lado del usuario, el síntoma era claro:
- Se esperaba que la tabla se ordenara por la primera columna (ID)
- En forma descendente (ventas más recientes arriba)
- Pero el orden parecía no cambiar
Esto suele llevar a pensar erróneamente que:
- El parámetro
orderno funciona - DataTables ignora la configuración
- Existe un error en JavaScript
La realidad es otra.
⚠️ La clave: server-side cambia las reglas
Cuando DataTables funciona en modo normal (frontend), el ordenamiento se hace completamente en el navegador.
Pero cuando se activa:
serverSide: true
ocurre algo fundamental:
- DataTables NO ordena los datos
- Solo envía la instrucción de orden al servidor
- El backend es quien decide el orden final
Por eso, aunque en JavaScript se indique:
order: [[0, "desc"]]
si el backend no respeta esa instrucción, el orden visual nunca cambiará.
📡 Qué envía realmente DataTables al backend
En cada petición AJAX, DataTables envía parámetros como:
order[0][column]→ índice de la columnaorder[0][dir]→ asc / desc
En este caso:
- Columna 0 → ID
- Dirección → desc
Esto significa: “ordena por ID de forma descendente”
🔍 Por qué antes no se reflejaba el orden
El archivo datatable-administrarVentas.ajax.php recibe los parámetros de DataTables, pero:
- El método
ctrRangoFechasVentas()ya devuelve resultados - El orden puede venir definido internamente
- Si no se aplica el ORDER BY dinámico, el resultado será siempre el mismo
Esto genera la sensación de que:
- El DataTable “ignora” el orden
Cuando en realidad:
- El backend está devolviendo los datos sin respetar la instrucción
✅ Qué se hizo para que el orden funcione correctamente
El cambio no fue visual ni estético, fue conceptual y estructural.
✔ Se respetó el flujo server-side
DataTables:
- Envía la columna y dirección
- No ordena nada por sí mismo
Backend:
- Recibe los parámetros
- Aplica el orden correcto
- Devuelve los datos ya ordenados
✔ La primera columna (ID) quedó como referencia
Al usar el ID como columna principal:
- Mayor ID = venta más reciente
- Orden descendente = últimas ventas primero
Esto coincide con la expectativa natural del usuario.
📈 Beneficios del ordenamiento correcto
- Mejor experiencia de usuario
- Acceso inmediato a ventas recientes
- Menos clics para buscar información
- Coherencia con sistemas POS profesionales
💡 Recomendaciones técnicas
1️⃣ Siempre pensar en backend cuando uses server-side
Si no se ordena en el servidor, no se ordenará nunca.
2️⃣ Usar IDs autoincrementales como referencia
Facilitan ordenamiento y paginación.
3️⃣ No confiar solo en JavaScript
El JS solo indica la intención, no ejecuta el orden.
4️⃣ Mantener coherencia entre columnas
El índice de columna debe coincidir exactamente con el JSON.
5️⃣ Documentar estos cambios
Evita confusiones futuras al mantener el sistema.
📌 Conclusión
El ordenamiento descendente en Administrar Ventas no fue un simple ajuste visual, sino una correcta aplicación del flujo DataTables server-side.
Entender que el orden se decide en el backend marca la diferencia entre una tabla que “parece no funcionar” y un sistema profesional, escalable y confiable.
Documentado por Julio Leyva
Deja un comentario