Ejemplo: una factura
El archivo SPS de ejemplo Invoice.sps de la carpeta (Mis) Documentos, C:\Documents and Settings\<usuario>\Mis Documentos\Altova\StyleVision2023\StyleVisionExamples\Tutorial\Auto-Calculations\, demuestra cómo usar cálculos automáticos para:
•Contar nodos
•Seleccionar un nodo en función de los datos introducidos por el usuario de la vista Authentic
•Actualizar el contenido de un nodo con el resultado del cálculo automático
•Usar el resultado de un cálculo automático en otro cálculo automático
En el archivo SPS de ejemplo, los cálculos automáticos aparecen resaltados en amarillo (imagen siguiente).
Contar nodos
En el archivo SPS de ejemplo cada producto de la lista está numerado según su posición en la lista de productos solicitados por el cliente (Product 1, Product 2, etc). Esta numeración se consigue gracias a un cálculo automático (imagen siguiente).
En este caso concreto la expresión XPath position() sería suficiente para obtener la numeración correcta. Otra manera muy fácil de obtener la posición de un nodo es contar el número de elementos del mismo nivel anteriores y sumarle uno. La expresión XPath sería: count(preceding-sibling::Product)+1. Este último método es ideal para los contextos en los que es difícil o imposible usar la función position(). Puede probar este cálculo automático en el archivo de ejemplo eliminando productos y añadiendo productos nuevos.
Seleccionar un nodo en función de los datos introducidos por el usuario
En el archivo de ejemplo el usuario selecciona la categoría de productos (Book, CD, DVD, or Electronics) en un cuadro combinado. Esta selección se introduce en el nodo //Product/Category del documento XML. Después un cálculo automático utiliza este valor para remitirse a una "tabla de búsqueda" del documento XML e identificar el nodo que contiene el porcentaje de IVA para esta categoría de productos. La expresión de este cálculo automático es:
for \$i in Category return /Invoice/Categories/Category[. = \$i]/@rate.
En el documento de salida aparece la tasa de IVA en la posición donde se insertó el cálculo automático. En el archivo SPS de ejemplo la tabla de búsqueda se almacena en el mismo documento XML que los datos de la factura. No obstante, esta tabla también se puede almacenar en un documento distinto, en cuyo caso habría que acceder a ella con la función doc() de XPath 2.0. Para probar este cálculo automático seleccione otro tipo de producto en cualquier cuadro combinado Category y verá cómo el valor de la tasa de IVA cambia (Book=10%; CD=15%; DVD=15%; Electronics=20%).
Actualizar el contenido de un nodo con el resultado de un cálculo automático
La tasa de IVA que el cálculo automático obtiene de la tabla de búsqueda es un valor dinámico que se almacena temporalmente en memoria (para usarla en la vista Authentic). El resultado del cálculo automático, sin embargo, se puede almacenar en el nodo VAT del documento XML. Esto tiene dos ventajas: (i) no hace falta que el usuario introduzca el contenido del nodo VAT porque el cálculo automático lo introduce automáticamente y (ii) cada vez que se modifique la tabla de búsqueda, los cambios se aplicarán al nodo VAT cuando se abra el archivo Invoice.xml en Authentic. Para configurar un cálculo automático para que actualice un nodo debe seguir estas instrucciones:
1.Seleccione el cálculo automático en la vista Diseño.
2.En la ventana Propiedades (imagen siguiente) expanda el grupo de propiedades Authentic y haga clic en el botón Edición de la propiedad Actualizar el nodo XML en Authentic.
3.Aparece un cuadro de diálogo. Seleccione el nodo VAT y después haga clic en Aceptar.
A partir de ese momento cuando el usuario de la vista Authentic seleccione una categoría de productos diferente en el cuadro combinado, el cálculo automático obtendrá la tasa de IVA (remitiéndose a la tabla de búsqueda), mostrará la tasa de IVA y actualizará el nodo VAT del documento XML.
Usar en un cálculo automático un nodo actualizado por medio de otro cálculo automático
La tasa de IVA obtenida con el cálculo automático (ver más arriba) se necesita para calcular el precio bruto (precio neto + IVA) de cada producto. La fórmula necesaria se podría derivar así:
Gross Price = Net Price + VAT-amount
Puesto que VAT-amount = Net Price * VAT-percentage div 100
Entonces Gross Price = Net Price + (Net Price * VAT-percentage div 100)
El precio neto de un producto se obtiene del nodo PriceNet. La tasa de IVA se calcula con el cálculo automático descrito más arriba y dicho cálculo automático actualiza el nodo VAT. El contenido del nodo VAT se puede usar en otro cálculo automático para generar el precio bruto. Para ello usaríamos esta expresión XPath:
PriceNet + (PriceNet * (VAT div 100))
La expresión XPath se puede ver y editar en la ventana Propiedades. Para probar el cálculo automático que calcula el precio bruto cambie el precio o la categoría de producto. Observe que el precio bruto (con IVA incluido) también cambia.
En el archivo SPS de ejemplo el cálculo automático que calcula el precio bruto actualiza el nodo PriceGross del documento XML.
Los nodos PriceGross actualizados se pueden usar en un cálculo automático que sume los precios de todos los productos comprados. La expresión XPath sería: sum(Order/Product/PriceGross). Este cálculo automático actualiza el nodo PriceTotal. Para probarlo modifique los precios de los diferentes productos y verá el efecto que esto tiene en el precio total.
Ejercicio práctico
Ahora intente añadir dos cálculos al archivo SPS:
1.Primero inserte un cálculo automático que calcule un descuento sobre el importe total. Si el precio de la compra (el precio total) supera los 100, 300 o 600 euros, se debe aplicar un descuento del 5%, 10% y 12% respectivamente. Inserte la cantidad del descuento en el documento de salida (imagen siguiente) y actualice el nodo DiscountAmount del documento XML.
2.Después inserte un cálculo automático que calcule el importe final tras deducir el descuento. Esta cantidad será igual al precio total menos el descuento (que se calculó en el cálculo automático anterior). Inserte el importe final de la factura en el documento de salida (imagen siguiente) y actualice el nodo BillAmount del documento XML.
Configure estos cálculos automáticos de modo que la vista Authentic del documento tenga este aspecto.
Estos dos cálculos automáticos aparecen en el archivo de ejemplo InvoiceWithDiscounts.sps, que está en la carpeta (Mis) Documentos C:\Documents and Settings\<usuario>\Mis Documentos\Altova\StyleVision2023\StyleVisionExamples\Tutorial\Auto-Calculations.