Foros del Web » Programación para mayores de 30 ;) » Programación General »

Acumulador en XSL

Estas en el tema de Acumulador en XSL en el foro de Programación General en Foros del Web. Buenas, tengo un XML de una factura, en el cual hay varias líneas de factura. En cada línea se indica el impuesto que se aplica ...
  #1 (permalink)  
Antiguo 03/06/2010, 08:12
 
Fecha de Ingreso: julio-2009
Mensajes: 82
Antigüedad: 14 años, 9 meses
Puntos: 0
Acumulador en XSL

Buenas,

tengo un XML de una factura, en el cual hay varias líneas de factura. En cada línea se indica el impuesto que se aplica (tipo, código y porcentaje).

Lo que necesito es que en la tabla de los totales de factura, se muestre el sumatorio de todas las líneas en las que se ha aplicado el impuesto. ¿Alguna idea?

Muchas gracias

Ejemplo de XML

Código XML:
Ver original
  1. ...
  2. <line>
  3. ...
  4. <creditAmount>250.23</creditAmount>
  5. <tax>
  6. <taxType>IVA<taxType>
  7. <taxCode>NOR<taxCode>
  8. <taxPercentage>21<taxPercentage>
  9. </tax>
  10. ...
  11. </line>
  12. <line>
  13. ...
  14. <creditAmount>30.13</creditAmount>
  15. <tax>
  16. <taxType>IVA<taxType>
  17. <taxCode>NOR<taxCode>
  18. <taxPercentage>21<taxPercentage>
  19. </tax>
  20. ...
  21. </line>
  22. <line>
  23. ...
  24. <creditAmount>12.23</creditAmount>
  25. <tax>
  26. <taxType>IVA<taxType>
  27. <taxCode>HIG<taxCode>
  28. <taxPercentage>22<taxPercentage>
  29. </tax>
  30. ...
  31. </line>
  32. ...

entonces el resultado de la tabla de totales de factura sería así:

IVA NOR 21 % --> 52,5483 + 6,3273 = 58,8756
IVA HIG 22 % --> 2,6906
  #2 (permalink)  
Antiguo 04/06/2010, 07:58
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Respuesta: Acumulador en XSL

Un poco de google no hace mal

http://www.xml.com/pub/a/2001/05/07/xsltmath.html

__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 08/06/2010, 03:24
 
Fecha de Ingreso: julio-2009
Mensajes: 82
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Acumulador en XSL

Muchas gracias monoswim por la ayuda!

Ahora estoy intentando realizar una suma de todos los impuestos, pero no me entra en el bucle.
El esquema del XML es que hay varias líneas por cada factura, y dentro de cada línea está el porcentaje del impuesto y el importe neto de la línea.

Lo que quiero es que me muestre una línea con los totales de los impuestos de la factura. A continuación está el código de la template y de la llamada, creo que hago mal el acceso a los nodos... a ver si me podéis echar una mano. Muchas gracias


Este es el código de la template


Código XML:
Ver original
  1. <xsl:template name="sumaImpuestos">
  2.     <xsl:param name="factura"></xsl:param>
  3.     <xsl:param name="contador">1</xsl:param>
  4.     <xsl:param name="suma">0</xsl:param>
  5.    
  6.     <xsl:choose>
  7.         <xsl:when test="$contador &lt;= count($factura/df:Line)">
  8.             <xsl:call-template name="sumaImpuestos">
  9.                 <xsl:with-param name="factura" select="$factura"></xsl:with-param>
  10.                 <xsl:with-param name="suma" select="format-number($suma + (($factura/df:Line[$contador]/df:Tax/df:TaxPercentage div 100) * $factura/df:Line[$contador]/df:CreditAmount),'#.00')"></xsl:with-param>
  11.                 <xsl:with-param name="contador" select="$contador+1"></xsl:with-param>
  12.             </xsl:call-template>
  13.         </xsl:when>
  14.         <xsl:otherwise>
  15.             <xsl:value-of select="$suma"></xsl:value-of>
  16.         </xsl:otherwise>
  17.     </xsl:choose>
  18.  
  19. </xsl:template>

y este el de la llamada

Código XML:
Ver original
  1. xsl:call-template name="sumaImpuestos">
  2.         <xsl:with-param name="factura" select="df:SourceDocuments/df:SalesInvoices/df:Invoice[1]" />
  3.     </xsl:call-template>

Última edición por lmalvarez; 08/06/2010 a las 04:25

Etiquetas: xml, xsl
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:14.