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¶
Aspectul implicit al rapoartelor este gestionat în afara Studio. Mergi la Companies de pe pagina principală, apasă Configure Document Layout. Setările de aspect sunt specifice companiei, dar se aplică tuturor rapoartelor.
, apoi, în secțiuneaSfat
Poți vedea cum diferitele setări afectează aspectul raportului în previzualizarea din partea dreaptă a ferestrei Configure your document layout. Când creezi sau editezi un raport, poți vedea o previzualizare a raportului apăsând Print preview în partea stângă a ecranului.
Utilizați următoarele setări:
Aspect: Sunt disponibile șapte tipuri de aspect:
Fundal: Sunt disponibile următoarele fundaluri:
Gol: Nu se afișează nimic.
Logo demo: Un logo demo este afișat pe fundal.
Personalizat: Încarcă o imagine de fundal personalizată.
Text: Sunt disponibile opt fonturi: Lato, Roboto, Open Sans, Montserrat, Oswald, Raleway, Tajawal (care suportă scrierea arabă și latină) și Fira Mono. Accesează Google Fonts website pentru previzualizare.
Sigla companiei: Faceți clic pe butonul Editați pentru a încărca sau modifica sigla. Aceasta adaugă sigla la înregistrarea companiei pe modelul Company, pe care o puteți accesa accesând și apoi făcând clic pe Update Info în secțiunea Companies.
Culori: Schimbați culorile primare și secundare utilizate pentru structurarea rapoartelor. Culorile implicite sunt generate automat pe baza culorilor siglei.
Adresă: Numele și adresa companiei sunt afișate în antetul rapoartelor externe. Poți adăuga mai multe linii de text.
Slogan: Acesta este afișat în antetul rapoartelor externe folosind aspectele Light, Striped, Bubble, Wave și Folder și în subsolul rapoartelor externe folosind aspectele Boxed și Bold. Poți adăuga mai multe linii de text.
Format hârtie: Acesta definește dimensiunea implicită a hârtiei pentru rapoarte. Poți selecta A4 (21 cm x 29,7 cm) și US Letter (21,59 cm x 27,54 cm). Acest lucru poate fi definit și pentru rapoarte individuale în câmpul Paper format din Studio.
Notă
Alte formate de hârtie pot fi disponibile în funcție de aplicațiile sau modulele instalate, de exemplu, coli de etichete pentru aplicația Inventory sau ecusoane pentru aplicația Events.
Crearea de noi rapoarte PDF¶
Pentru a crea un raport nou pentru un model (de exemplu, comenzi de vânzare), accesează modelul, apasă butonul (Toggle Studio), apoi apasă Reports. Apasă New și, în fereastra popup care se deschide, selectează tipul de raport. Acesta este folosit doar pentru a determina ce se afișează în antet și subsol:
Odată ce ați creat raportul, puteți începe editarea lui.
Editarea rapoartelor PDF¶
Pentru a accesa rapoartele disponibile pentru un model, accesează modelul, apasă butonul (Toggle Studio), apoi apasă Reports. Selectează un raport existent pentru a-l deschide.
Alternativ, puteți deschide Studio, faceți clic pe Rapoarte și căutați un anumit raport sau model.
Important
Este recomandat cu tărie să duplici raportul standard și să faci modificări în versiunea duplicată. Pentru a duplica un raport, poziționează cursorul în colțul din dreapta sus al raportului, apasă pe pictograma (vertical ellipsis) și apoi selectează Duplicate.

Opțiuni¶
După ce ai selectat sau creat un raport, poți folosi opțiunile din partea stângă a ecranului pentru a:
Schimbă Numele raportului: Noul nume se aplică peste tot (în Studio, în meniul Print sub pictograma (gear) din vizualizarea formularului și în numele fișierului PDF).
Modifică Formatul hârtiei: Dacă nu este selectată nicio valoare, se folosește formatul definit în default layout.
Afișează în meniul de tipărire: pentru a adăuga raportul în meniul Print din vizualizarea formularului.
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¶
Editorul de rapoarte îți permite să modifici conținutul și formatarea raportului.
Sfat
Poți Anula sau Reface modificările folosind butoanele dedicate sau scurtăturile
CTRL
+Z
șiCTRL
+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.

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

Notă
Condițiile pot fi editate doar în XML.
Alt conținut¶
Există două tipuri de conținut text în rapoarte:
Text static, adică textul care nu este evidențiat cu albastru, care poate fi modificat direct în editor.
Text dinamic, adică textul evidențiat cu albastru, care este înlocuit cu valorile câmpurilor la generarea raportului, de exemplu, numărul comenzii de vânzare sau data ofertei.
Poți adăuga conținut (de exemplu, câmpuri, liste, tabele, imagini, bannere etc.) în raport folosind comenzi. Tastează /
pentru a deschide powerbox, apoi tastează numele comenzii sau selecteaz-o din 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¶
Pentru a adăuga un câmp, tastează /
și selectează comanda Field. În lista care se deschide, selectează sau caută câmpul; apasă săgeata din dreapta numelui câmpului pentru a accesa lista câmpurilor asociate, dacă este necesar. Apoi, specifică valoarea implicită care va fi afișată dacă câmpul nu este completat în înregistrare și apasă Enter
.

Adaugă sau editează un tabel¶
Există două tipuri de tabele în rapoarte:
Tabele statice, care sunt folosite pentru a afișa text sau câmpuri statice. Pentru acest tip de tabel, definești numărul de coloane și rânduri la adăugarea tabelului.
Tabele dinamice, care sunt folosite pentru a afișa date din câmpuri relaționale. Pentru acest tip de tabel, definești doar numărul de coloane la adăugare. Numărul de rânduri din raportul generat va fi determinat de numărul de înregistrări din modelul asociat care sunt legate de modelul curent.
Example
Într-un raport de comandă de vânzare, un tabel dinamic este folosit pentru a afișa liniile de comandă asociate comenzii. Dacă comanda conține 10 linii, tabelul din raportul generat va avea 10 rânduri; dacă are două linii, tabelul va avea două rânduri.
Adaugă sau editează un tabel static¶
Pentru a adăuga un tabel static, tastează /
și selectează comanda Table. Stabilește numărul de coloane și rânduri pentru tabel. După ce tabelul a fost adăugat, poți începe să-l editezi.
Poți insera, muta și șterge coloane și rânduri folosind instrumentele pentru tabele. Poziționează cursorul deasupra coloanei sau în stânga rândului, apoi apasă pe dreptunghiul mov și selectează o opțiune.

Pentru a redimensiona o coloană, trage marginea coloanei în poziția dorită; resetează toate coloanele la dimensiunea standard selectând Reset Size din instrumentele pentru tabele.
Adaugă câmpul dorit într-o celulă sau adaugă text static tastând.
Sfat
Pentru a adăuga text structurat fără a folosi un tabel, poți folosi coloane. Adaugă coloane tastând /
și selectând comanda potrivită: 2 columns, 3 columns sau 4 columns.
Adaugă sau editează un tabel dinamic¶
Notă
Doar relațiile de tip
one2many
saumany2many
pot fi afișate ca tabele dinamice.Un tabel dinamic existent într-un raport standard are o structură mai complexă decât un tabel dinamic adăugat de tine. Pentru astfel de tabele, este posibilă inserarea sau ștergerea coloanelor; nu este posibilă mutarea coloanelor sau inserarea, mutarea ori ștergerea rândurilor.
Pentru a adăuga un tabel dinamic, tastează /
și selectează comanda Dynamic Table. În lista care se deschide, selectează sau caută relația pe care se va baza tabelul și apasă Enter
. După ce tabelul a fost adăugat, poți începe să-l editezi.
Poți insera, muta și șterge coloane folosind instrumentele pentru tabele, ca la un tabel static. Este posibilă și inserarea de rânduri statice care vor apărea deasupra sau dedesubtul rândurilor generate.
Pentru a adăuga un câmp într-o celulă, șterge orice text de tip placeholder, apoi adaugă câmpul dorit. Dialogul care se deschide arată obiectul sursă pentru câmp (de exemplu, modelul Order Lines) și lista câmpurilor disponibile.

Înlocuiește eticheta Column name cu eticheta dorită.
Notă
Rândul implicit iterează automat conținutul câmpului, generând un rând în raport pentru fiecare valoare a câmpului (de exemplu, un rând pentru fiecare linie de comandă).
Formatare¶
Pentru a formata textul în raport, selectează-l, apoi formatează-l folosind opțiunile din 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¶
Pentru a schimba modul în care datele sunt prezentate în raport, poți modifica manual widgetul implicit al unui câmp. În exemplul de mai jos, data comenzii afișează implicit data și ora, iar prețul unitar are implicit o precizie de două zecimale.
<div class="oe_structure"> <span t-field="doc.date_order"/> <span t-field="doc.price_unit"/> </div>
Folosind t-options
, în acest caz opțiunea widget
, aceste câmpuri pot fi modificate pentru a afișa doar data și, respectiv, o precizie de patru zecimale:
<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:

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

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ă.
Lucrul cu imagini într-un raport poate fi dificil, deoarece controlul precis asupra dimensiunii și comportamentului imaginii nu este întotdeauna evident. Poți insera câmpuri de imagine folosind editorul de rapoarte (folosind comanda Field), dar inserarea lor în XML folosind directiva t-field
și atributele t-options
oferă un control mai bun al dimensiunii și poziționării.
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 etichetaimg
; Clasele Bootstrap sunt disponibile.alt
: text alternativ al imaginiistyle
: 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ă.
