PDF-rapporter

Med Studio kan du redigera befintliga PDF-rapporter (t.ex. fakturor, offerter, etc.) eller skapa nya.

Standardlayout

Standardlayouten för rapporter hanteras utanför Studio. Gå till Inställningar och klicka sedan på Konfigurera dokumentlayout i avsnittet Företag. Layoutinställningarna är företagsspecifika men gäller för alla rapporter.

Tips

Du kan se hur de olika inställningarna påverkar rapportlayouten i rapportförhandsgranskningen till höger, eller ladda ner en PDF med exempelfakturor genom att klicka på Download PDF Preview.

Använd följande inställningar:

  • Layout: Fyra layouter är tillgängliga:

    Exempel på layout för ljusrapport
  • Font: Sju teckensnitt är tillgängliga: Lato, Roboto, Open Sans, Montserrat, Oswald, Raleway och Tajawal (som stöder arabiska och latinska skrifter). Gå till webbplatsen Google Fonts för att förhandsgranska dem.

  • Färger: Ändra de primära och sekundära färger som används för att strukturera rapporter. Standardfärgerna genereras automatiskt baserat på färgerna i logotypen.

  • Layout bakgrund: Följande bakgrunder är tillgängliga:

    • Blank: ingenting visas.

    • Geometric: en bild med geometriska former visas i bakgrunden.

    • Custom: ladda upp en egen bakgrundsbild.

  • Företagets slogan: Detta visas i huvudet på externa rapporter. Du kan lägga till flera rader med text.

  • Företagsuppgifter: Dessa visas i rubriken på externa rapporter. Du kan lägga till flera rader med text.

  • Pappersformat: för att definiera standard pappersstorlek för rapporter. Du kan välja A4 (21 cm x 29,7 cm), US Letter (21,59 cm x 27,54 cm), eller QR codes page. Detta kan också definieras för enskilda rapporter i Pappersformat fältet i Studio.

Skapa nya PDF-rapporter

Om du vill skapa en ny rapport för en modell öppnar du modellen, klickar på knappen Toggle Studio och sedan på Reports. Klicka på New och välj typ av rapport i popup-fönstret som öppnas. Detta används enbart för att bestämma vad som ska visas i sidhuvudet och sidfoten:

När du har skapat rapporten kan du börja redigera den.

Redigera PDF-rapporter

För att komma åt de rapporter som finns tillgängliga för en modell, öppna modellen (t.ex. försäljningsorder), klicka på knappen Toggle Studio och klicka sedan på Reports. Välj en befintlig rapport för att öppna den eller skapa en ny.

Tips

Alternativt kan du också öppna Studio, klicka på Reports och söka efter en specifik rapport eller modell.

Viktigt

Det rekommenderas starkt att duplicera standardrapporten och utföra ändringar i den duplicerade versionen. För att duplicera en rapport, håll muspekaren över rapportens övre högra hörn, klicka på den vertikala ellipsikonen (), och välj sedan Duplicate.

Duplicera en PDF-rapport

Alternativ

När du har valt eller skapat en rapport kan du använda alternativen i den vänstra delen av skärmen för att:

  • Ändra Rapportens namn. Det nya namnet används överallt (i Studio, under knappen Print och i PDF-filens namn).

  • Ändra Pappersformat. Om inget värde är valt används det format som definieras i default layout.

  • Show in print menu: för att lägga till rapporten i Print-menyn som är tillgänglig från skivan.

  • Reload from attachment: för att spara rapporten som en bilaga på posten första gången den genereras och ladda om originalversionen av rapporten när som helst därefter. Detta är ett lagkrav för fakturor och används främst i detta fall.

  • Begränsa synlighet till grupper: för att begränsa tillgängligheten för PDF-rapporten till specifika användargrupper.

  • Redigera källor: för att ändra rapporten direkt i XML-filen.

  • Reset report: för att ta bort alla ändringar som gjorts i rapporten och återställa den till standardversionen.

  • Print preview: för att generera och ladda ner en förhandsgranskning av rapporten.

Redaktör för rapporten

I rapportredigeraren kan du ändra formatering och innehåll i rapporten.

Tips

  • Du kan ändra Undo eller Redo med hjälp av de relaterade knapparna eller kortkommandona CTRL Z och CTRL Y.

  • Ändringar sparas automatiskt när du lämnar rapporten eller manuellt med knappen Save.

  • Du kan återställa rapporten till standardversionen genom att klicka på knappen Återställ rapport i den vänstra delen av skärmen.

Viktigt

Redigering av sidhuvud och sidfot i en rapport påverkar alla standardrapporter och anpassade rapporter.

Villkorliga block

De streckade rektanglarna representerar villkorliga block (if/else-satser). Dessa används för att visa/dölja innehåll baserat på specifika villkor. Klicka på blocket för att visa villkoren.

Visa villkor som gäller för ett block.

Välj ett värde för att förhandsgranska dess motsvarande utdata och redigera den vid behov.

Förhandsgranska resultatet av ett annat villkor.

Observera

Villkor kan endast redigeras i XML.

Annat innehåll

Det finns två typer av textinnehåll i rapporter:

  • Statisk text, dvs. den text som inte är blåmarkerad och som kan ändras direkt i editorn.

  • Dynamisk text, dvs. den text som är blåmarkerad och som ersätts av fältvärden när rapporten genereras, t.ex. SO-nummer eller offertdatum.

Du kan lägga till innehåll (t.ex. fält, listor, tabeller, bilder, banners etc.) i rapporten med hjälp av kommandon. Skriv / för att öppna powerbox, skriv sedan kommandots namn eller välj det från listan.

Om du vill lägga till statisk text i rapporten skriver du texten där du vill ha den.

För mer avancerade ändringar kan du redigera rapporten i XML direkt.

Lägg till ett fält

För att lägga till ett fält, skriv / och välj kommandot Field. Välj eller sök efter fältet i listan som öppnas; klicka på högerpilen bredvid fältnamnet för att öppna listan över relaterade fält om det behövs. Ange sedan standardvärdet och tryck på Enter.

Välj ett relaterat område.
Lägg till en datatabell

Datatabeller används för att visa relationsfält. Du lägger till en datatabell genom att skriva /, välja kommandot Dynamisk tabell och välja den relation som ska visas i tabellen.

Observera

Endast relationer av typen one2many eller many2many kan visas som datatabeller.

När tabellen har lagts till kan du lägga till kolumner med hjälp av tabellverktygen. Placera markören ovanpå kolumnen, klicka sedan på den lila rektangeln och välj ett alternativ.

Lägg till en kolumn i en dynamisk tabell.

Du kan sedan infoga det fält du väljer i kolumnerna. I dialogrutan som öppnas visas källobjektet för fältet (t.ex. Tag-modellen) och listan över tillgängliga fält.

Lista över tillgängliga fält för Tag-modellen.

Observera

  • Standardraden itererar automatiskt över fältets innehåll och genererar en rad i rapporten för varje fältvärde (t.ex. en rad per tagg). Du kan lägga till rader med statiskt innehåll ovanför eller under de genererade raderna med hjälp av tabellverktygen.

  • Du kan också lägga till datatabeller genom att modifiera rapportens XML.

Formatering

För att formatera text i rapporten, markera den och formatera den sedan med hjälp av alternativen i Textredigerare.

Formatera text med hjälp av textredigeraren.

Redigera rapportens XML

Varning

Om du ändrar XML direkt kan det leda till rapportproblem under uppgraderingar. Om detta händer kopierar du helt enkelt dina ändringar från den gamla databasen till den uppgraderade databasen.

För att redigera rapportens XML, klicka på Redigera källor i den vänstra rutan.

Exempel

Ibland identifieras inte tabeller som sådana på grund av komplexa strukturer. I dessa fall kan du fortfarande ändra dem manuellt i rapportens XML. Med en försäljningsorder kan du till exempel hitta följande struktur i XML (förenklad för dokumentationsändamål):

<!-- table root element -->
<table>
    <!-- thead = table header, the row with column titles -->
    <thead>
        <!-- table row element -->
        <tr>
            <!-- table header element -->
            <th>Name</th>
            <th>Price</th>
        </tr>
    </thead>
    <!-- table body, the main content -->
    <tbody>
        <!-- we create a row for each subrecord with t-foreach -->
        <tr t-foreach="record.some_relation_ids" t-as="line">
            <!-- for each line, we output the name and price as table cells -->
            <td t-out="line.name"/>
            <td t-out="line.price"/>
        </tr>
    </tbody>
</table>

För att modifiera en tabell måste du se till att varje rad har samma antal dataceller. I fallet ovan måste du t.ex. lägga till en cell i rubrikavsnittet (med t.ex. kolumntiteln) och en annan i brödtextavsnittet med fältinnehållet (vanligtvis med ett t-out- eller t-field-direktiv).

<table> <!-- table root element -->
    <thead> <!-- thead = table header, the row with column titles -->
        <tr> <!-- table row element -->
            <th>Name</th> <!-- table header element -->
            <th>Price</th>
            <th>Category</th>
        </tr>
    </thead>
    <tbody>  <!-- table body, the main content -->
        <tr t-foreach="record.some_relation_ids" t-as="line">  <!-- we create a row for each subrecord with t-foreach -->
            <td t-out="line.name"/>  <!-- for each line, we output the name and price as table cells -->
            <td t-out="line.price"/>
            <td t-out="line.category_id.display_name"/>
        </tr>
    </tbody>
</table>

Observera

Celler kan sträcka sig över flera rader eller kolumner. Mer information finns på webbplatsen för Mozilla Developer Network.

Du kan t.ex. modifiera rapporten Anbud/Order och lägga till en kolumn som visar produktkategorin i huvudtabellen:

<table class="table table-sm o_main_table table-borderless mt-4">
    <!-- In case we want to repeat the header, remove "display: table-row-group" -->
    <thead style="display: table-row-group">
        <tr>
            <th name="th_description" class="text-start">Description</th>
            <th>Product Category</th>
            <th name="th_quantity" class="text-end">Quantity</th>
            <th name="th_priceunit" class="text-end">Unit Price</th>
[...]
            <tr t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''">
                <t t-if="not line.display_type">
                    <td name="td_name"><span t-field="line.name">Bacon Burger</span></td>
                    <td t-out="line.product_id.categ_id.display_name"/>
                    <td name="td_quantity" class="text-end">
                        <span t-field="line.product_uom_qty">3</span>
                        <span t-field="line.product_uom">units</span>
                        <span t-if="line.product_packaging_id">
Lägg till en kolumn för produktkategori i en SO.

För att lägga till en tabell i XML behöver du veta namnen på de fält och objekt som du vill komma åt och visa. Som ett exempel kan vi lägga till en tabell som beskriver taggarna på en försäljningsorder:

<!-- table root element -->
<table class="table">
    <!-- thead = table header, the row with column titles -->
    <thead>
        <!-- table row element -->
        <tr>
            <!-- table header element -->
            <th>ID</th>
            <th>Name</th>
        </tr>
    </thead>
    <!-- table body, the main content -->
    <tbody>
        <!-- we create a row for each subrecord with t-foreach -->
        <tr t-foreach="doc.tag_ids" t-as="tag">
            <!-- for each line, we output the name and price as table cells -->
            <td t-out="tag.id"/>
            <td t-out="tag.name"/>
        </tr>
    </tbody>
</table>
Lägg till en datatabell i XML

Observera

När du lägger till tabeller manuellt ska du använda Bootstrap-klasser, som klassen table i exemplet ovan.

Om du vill visa/dölja innehåll baserat på specifika villkor, kan du manuellt lägga till if/else kontrollsatser i rapportens XML.

Om du t.ex. vill dölja en anpassad datatabell om det inte finns några taggar kan du använda attributet t-if för att definiera villkoret, som sedan utvärderas som True eller False. Tabellen visas inte om det inte finns några taggar i citatet.

<!-- table root element -->
<table class="table" t-if="len(doc.tag_ids) > 0">
    <!-- thead = table header, the row with column titles -->
    <thead>
        <!-- table row element -->
        <tr>
            <!-- table header element -->
            <th>ID</th>
            <th>Name</th>
        </tr>
    </thead>
    <!-- table body, the main content -->
    <tbody>
        <!-- we create a row for each subrecord with t-foreach -->
        <tr t-foreach="doc.tag_ids" t-as="tag">
            <!-- for each line, we output the name and price as table cells -->
            <td t-out="tag.id"/>
            <td t-out="tag.name"/>
        </tr>
    </tbody>
</table>

Om du vill visa ett annat block om t-if-satsen utvärderas som False, kan du ange det med hjälp av t-else-satsen. t-else-blocket måste följa direkt efter t-if-blocket i dokumentstrukturen. Det finns ingen anledning att ange något villkor i t-else-attributet. Som exempel kan vi visa ett snabbt meddelande som förklarar att det inte finns några taggar i citatet:

<!-- table root element -->
<table class="table" t-if="len(doc.tag_ids) > 0">
    <!-- thead = table header, the row with column titles -->
    <thead>
        <!-- table row element -->
        <tr>
            <!-- table header element -->
            <th>ID</th>
            <th>Name</th>
        </tr>
    </thead>
    <!-- table body, the main content -->
    <tbody>
        <!-- we create a row for each subrecord with t-foreach -->
        <tr t-foreach="doc.tag_ids" t-as="tag">
            <!-- for each line, we output the name and price as table cells -->
            <td t-out="tag.id"/>
            <td t-out="tag.name"/>
        </tr>
    </tbody>
</table>
<div class="text-muted" t-else="">No tag present on this document.</div>

Genom att använda notationen t-if/t-else visar rapportredigeraren att dessa avsnitt är ömsesidigt uteslutande och bör visas som villkorliga block:

Visa förhandsgranskning om det finns taggar.

Du kan byta villkor med hjälp av editorn för att förhandsgranska deras resultat:

Visa förhandsgranskning om det inte finns några taggar.

Om du vill ha flera alternativ kan du också använda t-elif-direktiv för att lägga till mellanliggande villkor. Så här ändras t.ex. titeln på försäljningsorderrapporter baserat på villkoret för det underliggande dokumentet.

<h2 class="mt-4">
    <span t-if="env.context.get('proforma', False) or is_pro_forma">Pro-Forma Invoice # </span>
    <span t-elif="doc.state in ['draft','sent']">Quotation # </span>
    <span t-else="">Order # </span>
    <span t-field="doc.name">SO0000</span>
</h2>

Titeln Pro-Forma Invoice används beroende på vissa kontextuella villkor. Om dessa villkor inte är uppfyllda och dokumentets status är antingen draft eller sent, då används Quotation. Om inget av dessa villkor är uppfyllda är rapportens titel Order.

Att arbeta med bilder i en rapport kan vara en utmaning, eftersom exakt kontroll över bildstorlek och beteende inte alltid är uppenbart. Du kan infoga bildfält med hjälp av rapportredigeraren (med kommandot /Field), men att infoga dem i XML med direktivet t-field och tillhörande t-options attribut ger bättre kontroll över storlek och positionering.

Följande kod matar t.ex. ut fältet image_128 för radens produkt som en 64px bred bild (med en automatisk höjd baserad på bildens bildförhållande).

<span t-field="line.product_id.image_128" t-options-widget="image" t-options-width="64px"/>

Följande alternativ är tillgängliga för bildwidgets:

  • width: bildens bredd, vanligtvis i pixlar eller CSS-längdenheter (t.ex. rem) (lämna tomt för automatisk bredd).

  • height: bildens höjd, vanligtvis i pixlar eller CSS-längdenheter (t.ex. rem) (lämna tomt för automatisk höjd).

  • class: CSS-klasser som tillämpas på img-taggen; Bootstrap-klasser är tillgängliga.

  • alt: alternativ text för bilden

  • style: stilattribut; det gör att du kan åsidosätta stilar mer fritt än med Bootstrap classes.

Dessa attribut måste innehålla strängar, dvs. text omsluten av citattecken inom citattecken, t.ex. t-options-width="'64px'" (eller, alternativt, ett giltigt Python-uttryck).

Observera

Bildwidgeten kan inte användas på en img-tagg. Ställ istället in t-field-direktivet på en span (för inline-innehåll) eller div (för blockinnehåll) nod.

Låt oss till exempel lägga till en kolumn med produktbilden i offert-tabellen:

<table class="table table-sm o_main_table table-borderless mt-4">
    <thead style="display: table-row-group">
        <tr>
            <th>Image</th>
            <th name="th_description" class="text-start">Description</th>
            <th>Product Category</th>
            <th name="th_quantity" class="text-end">Quantity</th>
            <th name="th_priceunit" class="text-end">Unit Price</th>
[...]
        <t t-foreach="lines_to_report" t-as="line">
            <t t-set="current_subtotal" t-value="current_subtotal + line.price_subtotal"/>
            <tr t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''">
                <t t-if="not line.display_type">
                   <td>
                       <span t-field="line.product_template_id.image_128"
                             t-options-widget="'image'"
                             t-options-width="'64px'"
                             t-options-class="'rounded-3 shadow img-thumbnail'"
                           />
                   </td>
                    <td name="td_name"><span t-field="line.name">Bacon Burger</span></td>
                    <td t-out="line.product_id.categ_id.display_name"/>

Attributet t-options-width begränsar bildbredden till 64 pixlar, och Bootstrap-klasserna som används i t-options-class skapar en miniatyrliknande ram med rundade hörn och en skugga.

Lägg till en kolumn med produktbilden i offert-tabellen.