A Velneo le sigue costando ordenar


([N3] pacosatu) #1

Hola.

Pues sí señores, después de un año, compruebo que a Velneo le sigue costando ordenar las Listas.

No es muy habitual, pero hace unos días un usuario me pidió sacar un Listado ordenado por un campo Alfabético (Apellidos+Nombre) y que la ordenación (como es normal) fuera independiente de los acentos y de mayúsculas/minúsculas, es decir, que hiciera la conversión Alfa64.

Podemos tener varios escenarios:

  • La lista de salida proviene de un Cargar lista. En este caso no hay problema, usamos el índice Alfa64 correspondiente.
  • La lista de salida proviene de una Búsqueda. En este caso la cosa se complica ya que el comando Ordenar lista siempre ordena con Alfa256 y no es posible ignorar los acentos y mayúsculas.
  • La lista de salida proviene de la Rejilla en pantalla con alguna columna ordenada. En este otro caso el desastre es total ya que, aparte de que la columna también ordena con Alfa256, no sabemos con qué columna está ordenada la Rejilla y ni siquiera tenemos un evento que se dispare cuando el usuario pulsa la cabecera de columna.

De momento la versión oficial de soporte es que para ordenar correctamente una Lista que sea salida de un Objeto, si descartamos el uso del comando Ordenar lista, pasa por cruzar dicha Lista con un Cesta que contenga todos los registros de la tabla obtenidos con un Cargar lista (índice Alfa64). La lista con mayor número de registros es la que determina el Orden de salida, en este caso la Cesta.

Un problema con esta solución es: ¿qué ordenación se toma cuando las 2 listas tienen el mismo número de registros? (pendiente de contestar por soporte).

Además, ¿qué pasará con el rendimiento cuando tengamos que cruzar Cestas de cientos de miles de registros únicamente para ordenar listas de solo unas pocas fichas?

Como no me había quedado muy contento con esta solución, poco elegante, pensando un poco se me ha encendido la bombilla.

Lo que hacemos es crear en la tabla un campo #STRING_ALFA64 de tipo fórmula alfabética que convierte a Alfa64 el campo que queremos ordenar usando la función stringToAlpha64(#STRING_ALFA256).

De esta forma tenemos resueltos los dos escenarios, usamos el comando Cargar lista con el Índice Alfa64 del campo #STRING_ALFA256 y en el comando Ordenar lista indicamos el campo #STRING_ALFA64 de tipo fórmula.

Yo creo que esta solución es más efectiva, no ocupa espacio en disco y no genera tráfico al servidor, o eso espero.

Me gustaría conocer cómo habéis resuelto esta problemática.

Saludos
Paco Satué