Rapoarte PDF

Cu Studio, puteți să editați rapoarte PDF existente (de exemplu, facturi, cotații etc.) sau :ref:`să creați altele noi <studio/pdf-reports/edit> `.

Aspect implicit

The default layout of reports is managed outside Studio. Go to Settings, then, in the Companies section of the main page, click Configure Document Layout. Layout settings are company-specific but apply to all reports.

Sfat

You can see how the different settings affect the report layout in the report preview on the right side of the Configure your document layout window. When creating or editing a report, you can see a preview of the report by clicking Print preview on the left side of the screen.

Utilizați următoarele setări:

  • Layout: Seven layouts are available:

    Exemplu de aspect de raport luminos
  • Background: The following backgrounds are available:

    • Blank: Nothing is displayed.

    • Demo logo: A demo logo is displayed in the background.

    • Custom: Upload a custom background image.

  • Text: Eight fonts are available: Lato, Roboto, Open Sans, Montserrat, Oswald, Raleway, Tajawal (which supports Arabic and Latin scripts), and Fira Mono. Go to the Google Fonts website to preview them.

  • Culori: Schimbați culorile primare și secundare utilizate pentru structurarea rapoartelor. Culorile implicite sunt generate automat pe baza culorilor siglei.

  • Address: The company name and address are displayed in the header of external reports. You can add multiple lines of text.

  • Tagline: This is displayed in the header of external reports using the Light, Striped, Bubble, Wave and Folder layouts and in the footer of external reports using the Boxed and Bold layouts. You can add multiple lines of text.

  • Paper format: This defines the default paper size of reports. You can select A4 (21 cm x 29.7 cm) and US Letter (21.59 cm x 27.54 cm). This can also be defined for individual reports in the Paper format field in Studio.

    Notă

    Other paper formats may be available depending on which apps or modules you have installed, for example, label sheets for the Inventory app or event badges for the Events app.

Crearea de noi rapoarte PDF

To create a new report for a model, (e.g., sales orders) access the model, click the (Toggle Studio) button, then click Reports. Click New and, in the popup window that opens, select the type of report. This is solely used to determine what is displayed in the header and footer:

Odată ce ați creat raportul, puteți începe editarea lui.

Editarea rapoartelor PDF

To access the reports available for a model, access the model, click the (Toggle Studio) button, then click Reports. Select an existing report to open it.

Alternativ, puteți deschide Studio, faceți clic pe Rapoarte și căutați un anumit raport sau model.

Important

It is strongly recommended to duplicate the standard report and make changes in the duplicated version. To duplicate a report, hover the mouse pointer on the top right corner of the report, click the (vertical ellipsis) icon, and then select Duplicate.

Duplicarea unui raport PDF

Opțiuni

Once you have selected or created a report, you can use the options in the left part of the screen to:

  • Change the Report name: The new name is applied everywhere (in Studio, in the Print menu under the (gear) icon in the form view, and in the PDF file name).

  • Modify the Paper format: If no value is selected, the format defined in the default layout is used.

  • Show in print menu: to add the report to the Print menu in the form view.

  • Reîncărcați din atașament: pentru a salva raportul ca atașament în înregistrare prima dată când este generat și reîncărcați versiunea originală a raportului oricând ulterior. Acest lucru este obligatoriu din punct de vedere legal pentru facturi și este utilizat în principal în acest caz.

  • Limitați vizibilitatea la grupuri: pentru a limita disponibilitatea raportului PDF la anumite grupuri de utilizatori.

  • Editați sursele: pentru a modifica raportul direct în fișierul XML.

  • Resetați raportul: pentru a renunța la toate modificările aduse raportului și a-l reseta la versiunea standard.

  • Previzualizare printare: pentru a genera și descărca o previzualizare a raportului.

Editor de rapoarte

The report editor allows you to modify the content and formatting of the report.

Sfat

  • You can Undo or Redo changes using the related buttons or the shortcuts CTRL + Z and CTRL + Y.

  • Modificările sunt salvate automat când părăsiți raportul sau manual folosind butonul Salvare.

  • Puteți reseta raportul la versiunea sa standard făcând clic pe butonul Resetați raportul din partea stângă a ecranului.

Important

Editarea antetului și a subsolului unui raport afectează toate rapoartele standard și personalizate.

Blocuri condiționate

Dreptunghiurile punctate reprezintă blocuri condiționate (instrucțiuni if/else). Acestea sunt folosite pentru a afișa/ascunde conținutul în funcție de condiții specifice. Faceți clic pe bloc pentru a vedea condițiile.

Vizualizați condițiile aplicate unui bloc.

Selectați o valoare pentru a previzualiza rezultatul corespunzător și editați-o dacă este necesar.

Previzualizează rezultatul unei alte condiții.

Notă

Conditions can only be edited in the XML.

Alt conținut

Există două tipuri de conținut text în rapoarte:

  • Static text, i.e., the text that is not highlighted in blue, which can be modified directly in the editor.

  • Dynamic text, i.e., the text that is highlighted in blue, which is replaced by field values when the report is generated, e.g., the sales order number or the quotation date.

You can add content (e.g., fields, lists, tables, images, banners, etc.) to the report using commands. Type / to open the powerbox, then type the command’s name or select it from the list.

Pentru a adăuga text static la raport, tastați textul unde doriți.

Pentru modificări mai avansate, puteți editați raportul în XML direct.

Adăugați un câmp

To add a field, type / and select the Field command. In the list that opens, select or search for the field; click the right arrow next to the field name to access the list of related fields if needed. Then, specify the default value that will be shown if the field is not completed in the record and press Enter.

Selectați un câmp aferent.
Add or edit a table

There are two types of tables in reports:

  • Static tables, which are used to display static text or fields. For this type of table, you define the number of columns and rows when adding the table.

  • Dynamic tables, which are used to display data from relational fields. For this type of table, you only define the number of columns when adding the table. The number of rows in the generated report will be determined by the number of records in the related model that are linked with the current model.

    Example

    In a sales order report, a dynamic table is used to show the order lines related to the sales order. If the sales order contains 10 order lines, the table in the generated report has 10 rows; if it contains two order lines, the table has two rows.

Add or edit a static table

To add a static table, type / and select the Table command. Determine the number of columns and rows for the table. Once the table has been added, you can start editing it.

You can insert, move and delete columns and rows using the table tools. Position the cursor on top of the column or to the left of the row then click the purple rectangle and select an option.

List of available options for editing table structure.

To resize a column, drag the column border to the desired position; reset all columns to their standard size by selecting Reset Size from the table tools.

Add the field of your choice in a cell or add static text by typing.

Sfat

To add text in a structured way without using a table, you can use columns. Add columns by typing / and selecting the appropriate command: 2 columns, 3 columns or 4 columns.

Add or edit a dynamic table

Notă

  • Only relations of type one2many or many2many can be displayed as dynamic tables.

  • An existing dynamic table in a standard report has a more complex structure than a dynamic table you add yourself. For such tables, it is possible to insert or delete columns; it is not possible to move columns or to insert, move or delete rows.

To add a dynamic table, type / and select the Dynamic Table command. In the list that opens, select or search for the relation the table will be based on and press Enter. Once the table has been added, you can start editing it.

You can insert, move and delete columns using the table tools, as for a static table. It is also possible to insert static rows that will appear above or below the generated rows.

To add a field to a cell, delete any placeholder text then add the field of your choice. The dialog box that opens shows the source object for the field (e.g., the Order Lines model) and the list of available fields.

List of available fields for the sale order lines model.

Replace the Column name label by the label of your choice.

Notă

The default row automatically iterates over the field’s content, generating a row on the report for each field value (e.g., one row per order line).

Formatare

To format text in the report, select it, then format it using the options in the text editor.

Formatați textul utilizând editorul de text.

Editarea XML-ului raportului

Atenționare

Modificarea directă a XML-ului poate duce la probleme de raportare în timpul actualizărilor. Dacă se întâmplă acest lucru, pur și simplu copiați modificările din vechea bază de date în baza de date actualizată.

Pentru a edita XML-ul raportului, faceți clic pe Editați sursele în panoul din stânga.

Exemple

To change how data is presented in your report, you can modify a field’s default widget manually. In the example below, the order date shows the date and time by default, while the unit price defaults to a precision of two decimal places.

<div class="oe_structure">
 <span t-field="doc.date_order"/>
 <span t-field="doc.price_unit"/>
</div>

By using t-options, in this case the widget option, these fields can be modified to show only the date and a precision of four decimal places, respectively:

<div class="oe_structure">
 <span t-field="doc.date_order" t-options="{'widget': 'date'}"/>
 <span t-field="doc.price_unit" t-options="{'widget': 'float', 'precision': 4}"/>
</div>

Dacă doriți să afișați/ascundeți conținut pe baza unor condiții specifice, puteți adăuga manual instrucțiuni de control if/else în raportul XML.

De exemplu, dacă doriți să ascundeți un tabel de date personalizat dacă nu există etichete, puteți utiliza atributul t-if pentru a defini condiția, care este apoi evaluată ca True sau False. Tabelul nu va fi afișat dacă nu există etichete în oferta.

<!-- 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>

Dacă doriți să afișați un alt bloc în cazul în care instrucțiunea t-if este evaluată ca False, îl puteți specifica folosind instrucțiunea t-else. Blocul t-else trebuie să urmeze direct blocul t-if din structura documentului. Nu este nevoie să specificați nicio condiție în atributul t-else. De exemplu, să arătăm un mesaj rapid care explică că nu există etichete pe citat:

<!-- 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>

Folosind notația „t-if/t-else”, editorul de rapoarte recunoaște că aceste secțiuni se exclud reciproc și ar trebui să fie afișate ca blocuri condiționate:

Previzualizare de ieșire dacă există etichete.

Puteți schimba condițiile folosind editorul pentru a previzualiza rezultatele lor:

Previzualizare de ieșire dacă nu există etichete.

Dacă doriți să aveți mai multe opțiuni, puteți utiliza și directivele t-elif pentru a adăuga condiții intermediare. De exemplu, așa se modifică titlul rapoartelor comenzilor de vânzare în funcție de starea documentului de bază.

<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>

Titlul Factură Pro-Forma este folosit în funcție de unele condiții contextuale. Dacă aceste condiții nu sunt îndeplinite și starea documentului este fie „schiță” fie „trimis”, atunci se folosește Citat. Dacă niciuna dintre aceste condiții nu este îndeplinită, titlul raportului este Comandă.

Working with images in a report can be challenging, as precise control over image size and behavior is not always obvious. You can insert image fields using the report editor (by using the Field command), but inserting them in XML using the t-field directive and accompanying t-options attributes provides better sizing and positioning control.

De exemplu, următorul cod scoate câmpul „image_128” al produsului liniei ca o imagine de 64 de pixeli (cu o înălțime automată bazată pe raportul de aspect al imaginii).

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

Următoarele opțiuni sunt disponibile pentru widget-urile de imagine:

  • width: lățimea imaginii, de obicei în pixeli sau unități de lungime CSS (de exemplu, rem) (lăsați necompletat pentru lățime automată).

  • height: înălțimea imaginii, de obicei în pixeli sau unități de lungime CSS (de exemplu, rem) (lăsați necompletat pentru auto-înălțime).

  • class: clase CSS aplicate pe eticheta img; Clasele Bootstrap sunt disponibile.

  • alt: text alternativ al imaginii

  • style: atribut de stil; vă permite să suprascrieți stilurile mai liber decât cu Clasele Bootstrap.

Aceste atribute trebuie să conțină șiruri de caractere, adică text cuprins între ghilimele, de exemplu, t-options-width="'64px'" (sau, alternativ, o expresie Python validă).

Notă

Widgetul de imagine nu poate fi utilizat pe o etichetă „img”. În schimb, setați directiva t-field pe un nod span (pentru conținut inline) sau div (pentru conținut bloc).

De exemplu, să adăugăm o coloană cu imaginea produsului în tabelul de oferte:

<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"/>

Atributul t-options-width restricționează lățimea imaginii la 64 de pixeli, iar clasele Bootstrap utilizate în t-options-class creează un chenar asemănător unei miniaturi cu colțuri rotunjite și o umbră.

Adăugați o coloană cu imaginea produsului în tabelul de cotații.