IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

somme en pied [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Homme Profil pro
    ICI
    Inscrit en
    Janvier 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ICI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 3
    Par défaut somme en pied
    BOnjour à tous :

    Soit un fichier xml tel que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="BancaireReception.xsl"?>
    <BancaireReception CodeOperation="01" DateEdition="16/11/2011">
    	<Emetteur Banque="00001" Guichet="12345" Devise="EUR" LibelleCompte="Compte Cheque">
    		<Destinataire Compte="cecompte" Societe="Ma société" DateSolde="14/11/2011" signe="" MontantSolde="0,00">
    			<Mouvements CodeInter="04" Devise="EUR" MonnaieOrigine="EUR" DateOperation="15/11/2011" DateValeur="15/11/2011" LibelleMouvement=" 0088 VERSEMENT EFFECTUE LE  " NumeroPiece="0000000" CodeExoneration="O" Debit="11,00" Credit="" Reference="">
    				<MvtCOMP Complement="Complément"/>
    				<MvtCOMP Complement=""/>
    				<MvtCOMP Complement=""/>
     
    			</Mouvements>
    			<Mouvements CodeInter="04" Devise="EUR" MonnaieOrigine="EUR" DateOperation="15/11/2011" DateValeur="15/11/2011" LibelleMouvement=" 0088 VERSEMENT EFFECTUE LE  " NumeroPiece="0000000" CodeExoneration="O" Debit="" Credit="2,00" Reference="">
    				<MvtCOMP Complement="Complément"/>
    				<MvtCOMP Complement=""/>
    				<MvtCOMP Complement=""/>
     
    			</Mouvements>
    			<Mouvements CodeInter="04" Devise="EUR" MonnaieOrigine="EUR" DateOperation="15/11/2011" DateValeur="15/11/2011" LibelleMouvement=" 0088 VERSEMENT EFFECTUE LE  " NumeroPiece="0000000" CodeExoneration="O" Debit="11,00" Credit="" Reference="">
    				<MvtCOMP Complement="Complément"/>
    				<MvtCOMP Complement=""/>
    				<MvtCOMP Complement=""/>
     
    			</Mouvements>
    			<PiedDeCompte DateNouveauSolde="15/11/2011" MontantNouveauSolde="0,00" signe="+"/>
    		</Destinataire>
    	</Emetteur>
    </BancaireReception>
    Je souhaiterais afficher dans mon pied de compte un total debit et un total crédit

    Pour gérer mes mouvements j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <xsl:template match="Mouvements">
      <tr class="mouvement">					
        <td class="centerjustify firstcol"><xsl:value-of select="@CodeInter" /></td>
        <td class="centerjustify" width="90"><xsl:value-of select="@DateOperation" /></td>
        <td class="centerjustify" width="90"><xsl:value-of select="@DateValeur" /></td>
        <td><xsl:value-of select="@LibelleMouvement" /><br/>
          <xsl:apply-templates select="./MvtCOMP" />
        </td>
        <xsl:if test="$banque='CE'">
          <td class="centerjustify" width="25"><xsl:value-of select="@NumeroPiece" /></td>
          <td class="centerjustify" width="25"><xsl:value-of select="@CodeExoneration" /></td>
        </xsl:if> 
        <td class="rightjustify" width="150">
          <xsl:value-of select="format-number(number(translate(@Debit,',','.')),'### ### ##0,00','FormatMouvement')"/>															
        </td>	
        <td class="rightjustify" width="150"> 
          <xsl:value-of select="format-number(number(translate(@Credit,',','.')),'### ### ##0,00','FormatMouvement')"/>																				
        </td>
        <td class="centerjustify" width="90"><xsl:value-of select="@Devise" /></td>
        <xsl:if test="$banque='CE'">
          <td class="centerjustify" width="90"><xsl:value-of select="@Ecart" /></td>
          <td class="centerjustify lastcol" width="90"><xsl:value-of select="@MonnaieOrigine" /></td>
        </xsl:if> 
        <xsl:if test="$banque='LBP'">
          <td class="centerjustify" width="90"><xsl:value-of select="@Ecart" /></td>
        </xsl:if> 
      </tr>
    </xsl:template>
    Pour gérer mon pied de compte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:template match="PiedDeCompte">
      <tr class="solde">
        <td>
          <xsl:attribute name="colspan"><xsl:copy-of select="$colnum" /></xsl:attribute>
          SOLDE AU <xsl:value-of select="@DateNouveauSolde" />
          <div class="valeursolde"><xsl:value-of select="format-number(number(translate(@MontantNouveauSolde,',','.')),'### ### ### ##0,00','FormatSolde')"/>
          </div>
        </td>			
      </tr>			
    </xsl:template>

    Auriez vous une solution à me proposer, car à chaque fois j'ai une erreur de calcul ?

    Merci.

  2. #2
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    ok, pourrais tu nous indiquer quel est ton calcul ? Et quelle est ton erreur ?
    Ce serait pas tout simplement un soucis avec la fonction format-number ?

  3. #3
    Candidat au Club
    Homme Profil pro
    ICI
    Inscrit en
    Janvier 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ICI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 3
    Par défaut La suite
    Citation Envoyé par polymorphisme Voir le message
    Bonjour,

    ok, pourrais tu nous indiquer quel est ton calcul ? Et quelle est ton erreur ?
    Ce serait pas tout simplement un soucis avec la fonction format-number ?

    BOnjour,

    Je souhaite simplement additionner en bas de page les valeurs "Debit " et "Credit"
    Comme celles ci ont une virgule comme séparateur on a un translate dans le XSL.

    J'ai troué une fonction sympa que je teste sur la colonne Debit, mais celle ci n'affiche que 0 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <xsl:template name="somme">
       <xsl:param name="total_debit" select="0"/>
       <xsl:param name="noeuds"/>
     
       <xsl:choose>
          <xsl:when test="$noeuds">
            <xsl:call-template name="somme">
              <xsl:with-param name="total_debit" select="$total_debit + number(translate($noeuds[1], ',', '.'))"/>
              <xsl:with-param name="noeuds" select="$noeuds/following-sibling::*[1]"/>
     
            </xsl:call-template>
          </xsl:when>
          <xsl:otherwise>
             <xsl:value-of select="$total_debit"/>
          </xsl:otherwise>
       </xsl:choose>
    </xsl:template>

    La fonction est appelée dans le Pied :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <xsl:template match="PiedDeCompte">
     
     
       <table align='center' border="0"> 
          <tr> 
             <td> 
                Total debit 
             </td> 
             <td align="right" width="20" ><hr /> 
             <!-- <xsl:value-of select="sum(CompteRendu/Compte/@montant)" />  -->
             <xsl:variable name="total_debit">
               <xsl:call-template name="somme">
                  <xsl:with-param name="noeuds" select="//Debit"/>
     
               </xsl:call-template>
             </xsl:variable>
             <xsl:value-of select="translate($total_debit, '.', ',')"/>
             </td> 
          </tr> 
       </table> 
     
     
      <tr class="solde">
        <td>
     
          <xsl:attribute name="colspan"><xsl:copy-of select="$colnum" /></xsl:attribute>
          SOLDE AU <xsl:value-of select="@DateNouveauSolde" />
          <div class="valeursolde"><xsl:value-of select="format-number(number(translate(@MontantNouveauSolde,',','.')),'### ### ### ##0,00','FormatSolde')"/>
          </div>
        </td>			
      </tr>			
    </xsl:template>

  4. #4
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    c'est super compliquer ce tu fait (mais il est vrai qu'au début, tout n'est pas évident à comprendre) !

    Là, c'est le code de la mort :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="format-number(number(translate(@MontantNouveauSolde,',','.')),'### ### ### ##0,00','FormatSolde')"/>
    tout ce qu'il faut pour te planter, renseigne toi sur la fonction format-number.

    Après pour faire une somme, tu peux utiliser la fonction sum de XPath, là aussi beaucoup simple à mettre en oeuvre que la règle que tu as trouvé.

  5. #5
    Candidat au Club
    Homme Profil pro
    ICI
    Inscrit en
    Janvier 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ICI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 3
    Par défaut Merci !
    Merci pour ton retour, j'ai finalement réglé le problème à la source. Les montants à additionner avaient une virgule comme séparateur. j'ai changé la génération du fichier xml pour avoir un point et 0 si ma donnée est vide. ainsi la fonction suivante passe sans encombre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         <xsl:value-of select="format-number(number(sum(//Mouvements/@Debit)),'### ### ##0,00','FormatMouvement')"/>

  6. #6
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    ok, tu as bien compris comment utiliser la fonction sum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR XI] Somme sur pied de page
    Par juju05 dans le forum Débuter
    Réponses: 8
    Dernier message: 01/02/2012, 22h13
  2. Réponses: 3
    Dernier message: 11/04/2011, 13h12
  3. Etat access : somme en pied d'état
    Par Totik dans le forum IHM
    Réponses: 8
    Dernier message: 07/03/2010, 19h16
  4. Sous-Rapport, somme et pied de page.
    Par timo-p5 dans le forum Formules
    Réponses: 0
    Dernier message: 19/10/2007, 20h48
  5. Somme en pied de formulaire dependant d'une date
    Par profane dans le forum IHM
    Réponses: 3
    Dernier message: 16/05/2007, 21h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo