Formato de moneda y número

La visualización de los importes monetarios varía de un país a otro. Los valores monetarios suelen ir acompañados por un símbolo de moneda, que puede existir en los símbolos de moneda local (por ejemplo, $, R$), o códigos de moneda internacional ISO 4217 (por ejemplo, USD, EUR, BRL). Los símbolos de moneda se pueden incluir o colocar antes o después del carácter raíz del importe monetario y puede haber o no un espacio entre el símbolo y el importe. Aunque en la mayor parte de los países se utiliza la coma o el punto como separador decimal de la monda, algunos países como Japón no tienen un separador de decimales para la moneda.

Por qué y cuándo se efectúa esta tarea

Las normas de formato de campos numéricos no necesariamente son las mismas que las normas para dar formato a los importes monetarios. Los formatos culturales de los campos numéricos difieren según el país, ya que los diferentes países utilizan representaciones numéricas positivas y negativas diferentes para el mismo importe.

La lista siguiente muestra diferentes modos de visualizar los mismos valores numéricos:

  • 1,234.56 .123
  • 1,234,560,123
  • 1.234,56

La representación numérica negativa no tiene un formato universal. Algunos países utilizan un guión inicial para indicar los números negativos que no corresponden a importes monetarios. Algunos colocan el guión después del número y otros utilizan otro símbolo. La lista siguiente muestra diferentes modos de visualizar el número quince negativo:

  • -15
  • 15-
  • (15)
  • {15}
  • <15>

Es posible que algunos países tengan más de un idioma oficial pero únicamente una moneda. Canadá es un ejemplo claro de un lugar donde hay una sola moneda, el dólar de Canadá y dos idiomas oficiales, inglés y francés. Para las empresas resulta complejo utilizar varias monedas. Añadir un elemento de idioma aumenta la complejidad y hace que tareas como la fijación de precios y otras relacionadas con la moneda resulten imposible de gestionar en las herramientas de administración de HCL Commerce como HCL Commerce Accelerator.

Una sola moneda predeterminada, que se puede utilizar como base para las conversiones o para la fijación de precios explícita en otras monedas, clarifica las tareas operativas y se ajusta mejor a la práctica empresarial.

Enlazar una moneda predeterminada de la tienda a su idioma predeterminado no tiene ninguna relación empresarial válida y no es un método válido para crear una moneda predeterminada. Por ejemplo, si cambia el idioma no debe significar que desea que la moneda se modifique. Por este motivo, la selección del idioma y de la moneda son dos tareas diferentes en HCL Commerce tal como se muestra en la figura siguiente:
Esta captura de pantalla muestra la página de visualización de las categorías principales

No hay ningún modo de definir una relación de uno a uno o de uno a muchos entre un idioma y una moneda. Cualquier moneda dada puede relacionarse con muchos idiomas, por ejemplo, el dólar de Canadá está relacionado con el francés y el inglés. Cualquier idioma dado se puede relacionar con muchas monedas, por ejemplo, el inglés está relacionado con el dólar de EE.UU., el dólar de Canadá, la libra inglesa y otras.

HCL Commerce Gestor de monedas

En HCL Commerce, la moneda de compra es la moneda en la que el cliente ve todos los precios. Para determinar la moneda de compra de un cliente, el motor de moneda que se denomina Gestor de monedas efectúa el algoritmo siguiente:

  • Si la tienda especifica y da soporte a la moneda preferida del cliente, entonces moneda_compras = moneda_preferida.
  • Si se especifica la moneda preferida del cliente (y no está soportada) y es el contravalor de otra moneda soportada, entonces moneda_compras = otra_moneda_soportada.
  • Si la moneda_compras = valor_nulo, la moneda_compras = moneda_predeterminada_tienda (de la tabla STOREENT - columna SETCCURR que tiene un valor nulo) no depende del idioma.
  • Si la moneda_compras = valor_nulo, la moneda_compras = moneda_predeterminada_tienda (de la columna SETCURR de la tabla STORELANG) depende del idioma.

Tenga en cuenta lo siguiente cuando el gestor de monedas efectúe el algoritmo anterior:

  • No se recomienda utilizar la columna SETCCURR de la tabla STORELANG ya que puede quedar en desuso en un futuro release. Por lo tanto, la columna solo es compatible con versiones anteriores. Los modelos de tienda no deben establecer la columna SETCCURR de la tabla STORELANG (se establece en un valor nulo).
  • Las tiendas migradas pueden adoptar el comportamiento nuevo estableciendo el valor predeterminado de la tienda utilizando la tabla STOREENT. No es necesario cambiar la tabla STORELANG. De este modo, algunas tiendas migradas pueden adoptar el nuevo comportamiento y otras tiendas migradas pueden conservar el antiguo comportamiento.
  • Ya sea la columna SETCCURR del objeto de tienda o el objeto storeGroup deben establecerse mediante la tabla STOREENT. Inicialmente éste no será el caso para las tiendas migradas. Cualquier tienda nueva debe establecer la moneda predeterminada de la tienda o storeGroup. Si se establece la moneda predeterminada de la tienda se asegura de que el último paso del algoritmo anterior no se ejecutará.

El formato actual de HCL Commerce depende de lo siguiente:

  • La moneda (código ISO de tres letras)
  • El ID de idioma

Esta información es necesaria para validar o dar formato a una moneda. El formato numérico depende solo del ID de idioma.

El Gestor de monedas hace que toda la información de formato de números y valores monetarios esté disponible en la base de datos de la instancia de HCL Commerce. Cuando se inicia el servidor de aplicaciones de la instancia de HCL Commerce, esta información se convierte en JavaScript y pasa a estar disponible para utilizarla como parte de la infraestructura de herramientas de HCL Commerce. Importe el archivo web/tools/common/NumberFormat.jsp a su JSP para estas funciones de JavaScript. Las funciones realizan las tareas siguientes:

  • Validar un valor de moneda
  • Convertir de un valor monetario a un valor numérico
  • Convertir de un valor numérico a un valor monetario
  • Validar un valor numérico
  • Convertir de un valor de número a un valor numérico
  • Convertir de un valor numérico a un valor de número
Nota: Debe incluir el archivo Util.js en su JSP cuando incluya NumberFormat.jsp.

La tabla siguiente lista algunas de las funciones clave de formato y moneda de JavaScript:

Tarea Entero Número Moneda
Validar la entrada de usuario (cualquier cosa) isValidInteger() isValidNumber() isValidCurrency()
Guardar (convertir a número JavaScript) strToNumber() strToNumber() currencyToNumber()
Visualizar (dar formato a un número JavaScript para un idioma concreto) numberToStr() numberToStr() numberToCurrency()
Nota: Si está utilizando los elementos de la UI de diálogo, el asistente o el cuaderno, en el marco padre ya está incluido NumberFormat.

El ejemplo siguiente muestra una entrada típica de moneda de JavaScript en un JSP de herramientas:


//requirement ::provide a user input currency entry ...
//prefilling it with the previous value ...
function initializeState(){
document.myForm.myInput.value =
parent.numberToCurrency(currAmount,fCurr,"<%=fLanguageId%>");
}
function validatePanelData(){
if (!parent.isValidCurrency(document.myForm.myInput.value),fCurr,
"<%=fLanguageId%>")){
alert("not valid");
return false;
}
return true;
}
function savePanelData(){
MyCurr=parent.currencyToNumber(document.myForm.myInput.Value,fCurr,
"<%=fLanguageId%>");
parent.put("myCurrLbl",myCurr);
}

Hay disponible una página de validación y formato de ejemplo en \commerce\web\tools\sample\. Para ejecutar esta página inicie http://nombre_host/commerce/tools/sample/validationTest.jsp.

Importante: Se le recomienda que evite utilizar FormatNumber, FormatCurrency y FormatInteger. Estas funciones se incluyen en la infraestructura de herramientas de HCL Commerce solamente para compatibilidad con las versiones anteriores.

FormatNumber y FormatCurrency efectúan en primer lugar la validación basándose en el ID de idioma. Si obtiene un formato numérico primitivo (1000.23) de HCL Commerce Server, las funciones devuelven un valor NaN (No es un número). Asimismo, FormatInteger solamente acepta enteros numéricos primitivos. Como resultado, si tiene un entero como 1,000 en el ID del idioma inglés de EE.UU., devuelve un NaN.