Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    [XSL] Raggruppare gruppi in un unica stampa

    Chiedo scusa per il titolo ambiguo ma non ho trovato di meglio.
    Ho un programmino che crea dei report sulle vendite di articoli.
    Avendo memorizzato le transazioni di vendita in un XML questo programma stampa la statistica seguendo le direttive di un XSL.
    Nell'XSL si cicla sui gruppi di articoli (bevande, caffeteria, primi ecc...) e si stampa quantità, descrizione e totale soldi.
    Il problema nasce sugli articoli che son stati pagati con dei buoni pasto, che nell'XML appartengono a gruppi differenti.
    Un caffè venduto in contanti è diverso da un caffè venduto con buono pasto che è diverso da una ciambella venduta con buono pasto che è diversa dalla ciambella venduta in contanti.
    Devo modificare l'XSL in modo che mi raggruppi tutti i caffè assieme.
    Il codice non è mio ma ho identificato il ciclo interessato:
    codice:
    
    <LTAB><xsl:value-of select="pos:translate('********* Articles and groups **********')"/></LTAB>
    
    
    <xsl:value-of select="pos:translate('Cod.')"/>
    <RTAB col="16"><xsl:value-of select="pos:translate('Description')"/></RTAB>
    <RTAB col="25"><xsl:value-of select="pos:translate('Weight')"/></RTAB>
    <RTAB col="30"><xsl:value-of select="pos:translate('Qty')"/></RTAB>
    <RTAB col="40"><xsl:value-of select="pos:translate('Amount')"/></RTAB>
    
    <xsl:for-each select="articles/group">
        
        <xsl:for-each select="article">
            <xsl:value-of select="substring(concat(code,' ',description),1,20)"/>
            <xsl:if test="measure_unit='weight'">
                <RTAB col="25"><xsl:value-of select="pos:numFormat(qty_weight,'###,##0.000')"/></RTAB>
            </xsl:if>
            <RTAB col="30"><xsl:value-of select="pos:numFormat(qty,'###,##0.##')"/></RTAB>
            <RTAB col="40"><xsl:value-of select="pos:numFormat(amount)"/></RTAB>
            
    
        </xsl:for-each>
    
        
        
        <xsl:value-of select="substring(concat(code,' ',description),1,20)"/>
        <RTAB col="30"><xsl:value-of select="pos:numFormat(sum(.//qty),'###,##0.##')"/></RTAB>
        <RTAB col="40"><xsl:value-of select="pos:numFormat(sum(.//amount))"/></RTAB>
        
        
    
    
    </xsl:for-each>

    L'unica cosa che mi aiuta è che il cod. dell'articolo rimane uguale, ma me li stampa uno sotto l'altro:
    codice_caffè caffè 2 2,00
    codice_caffè caffè 4 4,00.

    Come gli dico di raggrupparli?
    Grazie in anticipo per qualsiasi consiglio

  2. #2
    Nessuno ha un'idea?

  3. #3
    se non hai gia risolto e mi rispondi ti posso aiutare con niente che mi sembra na cavolata !

    postami un xml di esempio "transazioni di vendita in un XML" e ti scrivo l xslt ...

    bisogna fare un following-sibling qua a occhio !

    sul risultato del ciclo prendi tutti gli elementi con lo stesso nome e fai un sum() cosi li raggruppi..
    cmq con un xml di esempio ci metto poco se hai voglia ! che cosi a occhio è un po' un casino

  4. #4
    No non ho risolto. Te ne sarei molto grato perché ho fatto svariate prove ma non sono giunto ad alcun risultato.
    L'XML si trova dentro ad un file di TRACE creato runtime dal programma di cassa. Ti scrivo solo le righe relative all'XML. (volevo allegarti il file ma non si può allegare file di testo)
    codice:
    <transaction>
      <shop>
        <code>1</code>
        <description>Ristorante 1</description>
      </shop>
      <till>
        <code>1</code>
        <description>Cassa 1</description>
        <header>
          <line>GTN SPA</line>
          <line>VIALE TRICESIMO, 181</line>
          <line>UDINE</line>
          <line>PARTITA IVA 01438240309</line>
        </header>
      </till>
      <cashier>
        <code>1</code>
        <description>Operatore 01</description>
      </cashier>
      <opening-operator>
        <code>1</code>
        <description>Operatore 01</description>
      </opening-operator>
      <trans-date>25.05.2011</trans-date>
      <trans-time>18:14</trans-time>
      <trans-num>1</trans-num>
      <trans-id-barcode>6660000100010874</trans-id-barcode>
      <training>false</training>
      <fiscal-bill-num>7</fiscal-bill-num>
      <reprint-invoice-trans-date>20110525</reprint-invoice-trans-date>
      <bookkeeping-date>25.05.2011</bookkeeping-date>
      <offline>false</offline>
      <system-currency>Euro</system-currency>
      <system-country>it</system-country>
      <pricelevel-code>1</pricelevel-code>
      <pricelevel-description>Listino 1</pricelevel-description>
      <total>26.80</total>
      <fiscal-printer-serial-number>IB MSERNUM1</fiscal-printer-serial-number>
      <reprint-count>0</reprint-count>
      <is-preprint>false</is-preprint>
      <preprint-count>0</preprint-count>
      <articles-number>4</articles-number>
      <invoice-filtered-for-prepay-IT>false</invoice-filtered-for-prepay-IT>
      <total-taxable-amount>12.80</total-taxable-amount>
      <vat>
        <code>4</code>
        <description>Iva 10% Asporto</description>
        <percent>10.00</percent>
        <vat-amount>1.16</vat-amount>
        <net-amount>11.64</net-amount>
        <gross-amount>12.80</gross-amount>
      </vat>
      <vat-percent>
        <percent>10.00</percent>
        <vat-amount>1.16</vat-amount>
        <net-amount>11.64</net-amount>
        <gross-amount>12.80</gross-amount>
      </vat-percent>
      <trans-item type="article">
        <hash-code>100095</hash-code>
        <code>4001</code>
        <description>HAM. APACHE</description>
        <long-description>HAM. APACHE</long-description>
        <group-a-code>2003</group-a-code>
        <group-a-description>HAMBURGERS</group-a-description>
        <is-addition>false</is-addition>
        <is-container>false</is-container>
        <is-cover-charge>false</is-cover-charge>
        <added-date>25.05.2011</added-date>
        <added-time>18:13</added-time>
        <operator-code>1</operator-code>
        <operator-description>Operatore 01</operator-description>
        <till-code>1</till-code>
        <till-description>Cassa 1</till-description>
        <pricelevel-code>1</pricelevel-code>
        <pricelevel-description>Listino 1</pricelevel-description>
        <quantity>1</quantity>
        <unit-price>6.60</unit-price>
        <total-price>6.60</total-price>
        <discount>0.00</discount>
        <discountable>true</discountable>
        <promotion-discount>0.00</promotion-discount>
        <subsidized>false</subsidized>
        <turnover-type>drawerandturnover</turnover-type>
        <print-coupon>false</print-coupon>
        <entered>manually</entered>
        <taxable-amount>0.00</taxable-amount>
        <vat-percent>0.00</vat-percent>
        <vat-code>6</vat-code>
      </trans-item>
      <trans-item type="article">
        <hash-code>100096</hash-code>
        <code>4001</code>
        <description>HAM. APACHE</description>
        <long-description>HAM. APACHE</long-description>
        <group-a-code>2003</group-a-code>
        <group-a-description>HAMBURGERS</group-a-description>
        <is-addition>false</is-addition>
        <is-container>false</is-container>
        <is-cover-charge>false</is-cover-charge>
        <added-date>25.05.2011</added-date>
        <added-time>18:13</added-time>
        <operator-code>1</operator-code>
        <operator-description>Operatore 01</operator-description>
        <till-code>1</till-code>
        <till-description>Cassa 1</till-description>
        <pricelevel-code>1</pricelevel-code>
        <pricelevel-description>Listino 1</pricelevel-description>
        <quantity>1</quantity>
        <unit-price>6.60</unit-price>
        <total-price>6.60</total-price>
        <discount>0.00</discount>
        <discountable>true</discountable>
        <promotion-discount>0.00</promotion-discount>
        <subsidized>false</subsidized>
        <turnover-type>drawerandturnover</turnover-type>
        <print-coupon>false</print-coupon>
        <entered>manually</entered>
        <taxable-amount>6.20</taxable-amount>
        <vat-percent>10.00</vat-percent>
        <vat-code>4</vat-code>
      </trans-item>
      <trans-item type="article">
        <hash-code>100097</hash-code>
        <code>4001</code>
        <description>HAM. APACHE</description>
        <long-description>HAM. APACHE</long-description>
        <group-a-code>2003</group-a-code>
        <group-a-description>HAMBURGERS</group-a-description>
        <is-addition>false</is-addition>
        <is-container>false</is-container>
        <is-cover-charge>false</is-cover-charge>
        <added-date>25.05.2011</added-date>
        <added-time>18:13</added-time>
        <operator-code>1</operator-code>
        <operator-description>Operatore 01</operator-description>
        <till-code>1</till-code>
        <till-description>Cassa 1</till-description>
        <pricelevel-code>1</pricelevel-code>
        <pricelevel-description>Listino 1</pricelevel-description>
        <quantity>1</quantity>
        <unit-price>6.60</unit-price>
        <total-price>6.60</total-price>
        <discount>0.00</discount>
        <discountable>true</discountable>
        <promotion-discount>0.00</promotion-discount>
        <subsidized>false</subsidized>
        <turnover-type>drawerandturnover</turnover-type>
        <print-coupon>false</print-coupon>
        <entered>manually</entered>
        <taxable-amount>6.60</taxable-amount>
        <vat-percent>10.00</vat-percent>
        <vat-code>4</vat-code>
      </trans-item>
      <trans-item type="article">
        <hash-code>100098</hash-code>
        <code>4006</code>
        <description>HAM. CAVALLO PAZZO</description>
        <long-description>HAM. CAVALLO PAZZO</long-description>
        <group-a-code>2003</group-a-code>
        <group-a-description>HAMBURGERS</group-a-description>
        <is-addition>false</is-addition>
        <is-container>false</is-container>
        <is-cover-charge>false</is-cover-charge>
        <added-date>25.05.2011</added-date>
        <added-time>18:13</added-time>
        <operator-code>1</operator-code>
        <operator-description>Operatore 01</operator-description>
        <till-code>1</till-code>
        <till-description>Cassa 1</till-description>
        <pricelevel-code>1</pricelevel-code>
        <pricelevel-description>Listino 1</pricelevel-description>
        <quantity>1</quantity>
        <unit-price>7.00</unit-price>
        <total-price>7.00</total-price>
        <discount>0.00</discount>
        <discountable>true</discountable>
        <promotion-discount>0.00</promotion-discount>
        <subsidized>false</subsidized>
        <turnover-type>drawerandturnover</turnover-type>
        <print-coupon>false</print-coupon>
        <entered>manually</entered>
        <taxable-amount>0.00</taxable-amount>
        <vat-percent>0.00</vat-percent>
        <vat-code>6</vat-code>
      </trans-item>
      <payment type="voucher">
        <code>3</code>
        <description>Buono Pasto</description>
        <amount>14.00</amount>
        <prepayment>false</prepayment>
        <signature-required>false</signature-required>
        <voucher-code>1</voucher-code>
        <voucher-description>Buono Pasto</voucher-description>
        <voucher-quantity>1</voucher-quantity>
        <voucher-unit-value>14.00</voucher-unit-value>
      </payment>
      <payment type="cash">
        <code>1</code>
        <description>Contanti</description>
        <amount>12.80</amount>
        <prepayment>false</prepayment>
        <signature-required>false</signature-required>
        <cash-change>0.00</cash-change>
        <cash-given>12.80</cash-given>
      </payment>
    </transaction>
    Come puoi vedere, stessi articoli ma con codice IVA differente (<VAT></VAT>) sono raggruppati in tag differenti (il codice IVA cambia se un prodotto è pagato con contanti oppure con buoni pasto).
    In allegato trovi anche un file JPG dove è evidenziato il risultato della statistica, con lo stesso elemento ripetuto.

  5. #5
    a me sembra che il codice prodotto sia lo stesso e anche il vat sul ham apache ma cambia il taxable-amount non il vat

  6. #6
    Sì sì, il codice articolo resta sempre lo stesso, infatti quello che voglio è raggruppare le stampe degli articoli per codice.
    Invece il <vat-code> cambia da 4 a 6, e quindi anche il <vat-percent> cambia da 10 a 0 (sempre per lo stesso articolo).


    codice:
    <trans-item type="article">
          <hash-code>100095</hash-code>
          <code>4001</code>
          <description>HAM. APACHE</description>
          <long-description>HAM. APACHE</long-description>
          [...]
          <taxable-amount>0.00</taxable-amount>
          <vat-percent>0.00</vat-percent>
          <vat-code>6</vat-code>
    </trans-item>
    <trans-item type="article">
          <hash-code>100095</hash-code>
          <code>4001</code>
          <description>HAM. APACHE</description>
          <long-description>HAM. APACHE</long-description>
          [...]
          <taxable-amount>6.60</taxable-amount>
          <vat-percent>10.00</vat-percent>
          <vat-code>4</vat-code>
    </trans-item>

  7. #7
    fai prima a copia incollarmi il risultato che vuoi ottenere e ti dico come farlo partendo da quello che hai che non capisco tanto il senso di quello che vuoi fare

  8. #8
    La statistica di vendita, che prende i dati da quel trace lì e li presenta con l'XSL che avevo scritto all'inizio, mi stampa questo (che traspongo a mano in formato testuale):

    Codice - Descrizione - Peso - Qta - Importo

    4001 - Ham. Apache - - 2 - 13.20
    4001 - Ham. Apache - - 1 - 6.60
    4006 - Ham. Cavallo - - 1 - 7.00

    ... eccetera.

    L'hamburger apache viene riproposto due volte, perché il conto è stato pagato in parte con buoni pasto, quindi a IVA differente, e quell'importo dei buoni pasto viene assegnato dal programma al primo prodotto dello scontrino (Hamburger Apache).
    Il restante (l'altro hamburger apache e gli altri prodotti) sono pagati in contanti.
    Quello che a me serve è che i 3 haburger apache siano raggruppati assieme, quindi che non sia discriminante il codice VAT di pagamento (o altro che mi sfugge) ma il codice articolo.
    Spero sia chiaro

  9. #9
    <xsl:for-each select="trans-item[not(hash-code = preceding-sibling::*/hash-code)]"
    e ti crei la struttura

    guarda qua per capire meglio cosa fa il preceding-
    http://www.infopathdev.com/blogs/gre...Correctly.aspx

  10. #10
    Grazie. Ho sostituito questo ciclo al posto di quello che girava su tutti gli articoli, però in questo modo non mi stampa nulla, solo il totale alla fine:
    codice:
    <LTAB><xsl:value-of select="pos:translate('********* Articles and groups **********')"/></LTAB>
    
    
    <xsl:value-of select="pos:translate('Cod.')"/>
    <RTAB col="16"><xsl:value-of select="pos:translate('Description')"/></RTAB>
    <RTAB col="25"><xsl:value-of select="pos:translate('Weight')"/></RTAB>
    <RTAB col="30"><xsl:value-of select="pos:translate('Qty')"/></RTAB>
    <RTAB col="40"><xsl:value-of select="pos:translate('Amount')"/></RTAB>
    
    
    <xsl:for-each select="trans-item[not(hash-code = preceding-sibling::*/hash-code)]">
            <xsl:value-of select="substring(concat(code,' ',description),1,20)"/>
            <xsl:if test="measure_unit='weight'">
                <RTAB col="25"><xsl:value-of select="pos:numFormat(qty_weight,'###,##0.000')"/></RTAB>
            </xsl:if>
            <RTAB col="30"><xsl:value-of select="pos:numFormat(qty,'###,##0.##')"/></RTAB>
            <RTAB col="40"><xsl:value-of select="pos:numFormat(amount)"/></RTAB>
            
    
     
        
        <xsl:value-of select="substring(concat(code,' ',description),1,20)"/>
        <RTAB col="30"><xsl:value-of select="pos:numFormat(sum(.//qty),'###,##0.##')"/></RTAB>
        <RTAB col="40"><xsl:value-of select="pos:numFormat(sum(.//amount))"/></RTAB>
        
        
    
    
    </xsl:for-each>
    Quindi ho tentato invece di sostituirlo al ciclo sugli articoli ma mantenendolo dentro al ciclo sui grupppi, ma mi stampa solo il resoconto per ogni "group" (panini, secondi, caffeteria...)

    codice:
    
    <LTAB><xsl:value-of select="pos:translate('********* Articles and groups **********')"/></LTAB>
    
    
    <xsl:value-of select="pos:translate('Cod.')"/>
    <RTAB col="16"><xsl:value-of select="pos:translate('Description')"/></RTAB>
    <RTAB col="25"><xsl:value-of select="pos:translate('Weight')"/></RTAB>
    <RTAB col="30"><xsl:value-of select="pos:translate('Qty')"/></RTAB>
    <RTAB col="40"><xsl:value-of select="pos:translate('Amount')"/></RTAB>
    
    
    <xsl:for-each select="articles/group">
    
        
        <xsl:for-each select="trans-item[not(hash-code = preceding-sibling::*/hash-code)]">
            <xsl:value-of select="substring(concat(code,' ',description),1,20)"/>
            <xsl:if test="measure_unit='weight'">
             <RTAB col="25"><xsl:value-of select="pos:numFormat(qty_weight,'###,##0.000')"/>            
             </RTAB>
            </xsl:if>
            <RTAB col="30"><xsl:value-of select="pos:numFormat(qty,'###,##0.##')"/></RTAB>
            <RTAB col="40"><xsl:value-of select="pos:numFormat(amount)"/></RTAB>
            
    
    </xsl:for-each>
    
        
        
        <xsl:value-of select="substring(concat(code,' ',description),1,20)"/>
        <RTAB col="30"><xsl:value-of select="pos:numFormat(sum(.//qty),'###,##0.##')"/></RTAB>
        <RTAB col="40"><xsl:value-of select="pos:numFormat(sum(.//amount))"/></RTAB>
        
        
    
    
    </xsl:for-each>
    Quindi ho lasciato immutati i cicli iniziali inserendo il preceding nel ciclo degli articoli ma non varia rispetto al risultato iniziale, quindi ristampa articoli uguali su più righe.

    codice:
    
    <LTAB><xsl:value-of select="pos:translate('********* Articles and groups **********')"/></LTAB>
    
    
    <xsl:value-of select="pos:translate('Cod.')"/>
    <RTAB col="16"><xsl:value-of select="pos:translate('Description')"/></RTAB>
    <RTAB col="25"><xsl:value-of select="pos:translate('Weight')"/></RTAB>
    <RTAB col="30"><xsl:value-of select="pos:translate('Qty')"/></RTAB>
    <RTAB col="40"><xsl:value-of select="pos:translate('Amount')"/></RTAB>
    
    
    <xsl:for-each select="articles/group">
    
        
        <xsl:for-each select="articles[not(hash-code = preceding-sibling::*/hash-code)]">
            <xsl:value-of select="substring(concat(code,' ',description),1,20)"/>
            <xsl:if test="measure_unit='weight'">
             <RTAB col="25"><xsl:value-of select="pos:numFormat(qty_weight,'###,##0.000')"/>            
             </RTAB>
            </xsl:if>
            <RTAB col="30"><xsl:value-of select="pos:numFormat(qty,'###,##0.##')"/></RTAB>
            <RTAB col="40"><xsl:value-of select="pos:numFormat(amount)"/></RTAB>
            
    
    </xsl:for-each>
    
        
        
        <xsl:value-of select="substring(concat(code,' ',description),1,20)"/>
        <RTAB col="30"><xsl:value-of select="pos:numFormat(sum(.//qty),'###,##0.##')"/></RTAB>
        <RTAB col="40"><xsl:value-of select="pos:numFormat(sum(.//amount))"/></RTAB>
        
        
    
    
    </xsl:for-each>
    Ho provato anche con il following...
    mi dispiace ma non riesco a capire come inserirlo nella struttura di stampa.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.