Función standard "leftJustified"


([N1] OscarBarea) #1

Hola,
Hoy me he dado cuenta que la Función standard “leftJustified”, no devuelve el número de caracteres que le pasamos.
Ponemos: leftJustified(#NAME, 20, " "), y nos devuelve el total de caracteres que tiene el campo #NAME.
Lo he tenido que solucionar extrayendo la cadena con la función ‘left’
Según pone la ayuda:
Devuelve una cadena, justificada a la izquierda, de la longitud especificada, rellenando por la derecha, si es necesario, con un carácter de relleno.
Es normal este comportamiento?, lo he probado con campos, campos maestros, y siempre me pasa.
Saludos,
Oscar B.


([N3] pacosatu) #2

Hola Oscar.

Ese comportamiento en Velneo es normal. Los espacios a la derecha se ignoran siempre.
No tiene nada que ver con la función leftJustified() que está pensada para otras cosas.

Prueba a teclear espacios a la derecha de un campo de edición alfabética y guarda el registro. Verás que los espacios a la derecha desaparecen cuando vuelves a leer el registro.

Saludos
Paco Satué


([N3] finanplan) #3

Buenas tardes

Es así en V7, tienes que encadenar las dos funciones: leftJustified(left(NAME, 20)), 20, " ")

En V6 si que recortaba, pero no es así en V7

Saludos.


([N1] OscarBarea) #4

Muchas gracias,
Así lo haré, pero como en la definición de la función nos pone bien claro “Devuelve una cadena, justificada a la izquierda, de la longitud especificada”.
Repito. gracias
Oscar B.


([N3] pacosatu) #5

Hola Oscar.

Te repito lo mismo que antes. La función leftJustified() funciona correctamente y devuelve siempre una cadena de longitud igual a la indicada en el 2º parámetro.
Prueba el comando siguiente y verás que devuelve 20:
Mensaje(“Longitud añadiendo espacios a la derecha " + len(leftJustified(“0123456789”,20,” ")))

Tu problema está que la Cadena de texto la guardas en un campo de la tabla y en ese momento Velneo trunca cualquier espacio a la derecha porque se considera no significativo en ese contexto.

Saludos
Paco Satué


([N3] finanplan) #6

Seh: Hay ocasiones en que es necesario asignar a la cadena una longitud concreta y en esos caso hay que encadenar las funciones, tal como digo antes. En V6 no era necesario pues la función primaria justificarIzquierda ya lo hacía, pero no es así en V7

Para que lo entiendas te pondré un ejemplo:

He de generar un fichero .txt para presentar el modelo 303 del IVA a la Agencia Tributaria. En ese fichero el campo Nombre ha te tener por ejemplo 20 posiciones (ni una sola más, ni una sola menos), lo que exceda se ha de cortar y lo que falte se ha de rellenar con blancos a la derecha. En este caso has de usar la función leftJustified(left(#NAME, 20)), 20, ” “), ya que si tu campo NOMBRE en la base de datos es por ejemplo de longitud 30 y usaras la función leftJustified(#NAME, 20, ” “) no cortaría y en el fichero .txt entraría con longitud 30. Eso significaría que la aplicación de importación de la Agencia Tributaria daria ERROR, y nuestros clientes tendrían un problema.

Espero haberme experesado con claridad.

Saludos.Daniel.


([N3] pacosatu) #7

Hola Daniel.

Efectivamente, la función leftJustified() se inventó para eso, crear registros de longitud fija en ficheros de texto.

Para el ejemplo, yo había supuesto que las cadenas de texto son siempre de longitud igual o menor a la longitud especificada en el parámetro de la función leftJustified().
Si la cadena de texto es de longitud mayor entonces no se recorta y sin que sirva de precedente esta vez sí que está claramente indicado en la ayuda.

Saludos
Paco Satué