---
title: "Własne szablony dokumentów"
description: "Zaprojektuj dokumenty PDF do druku generowane z rezerwacji, takie jak umowa najmu, umowa, protokół wydania, protokół zwrotu lub lista pakowania."
canonical_url: "https://requiply.com/docs/pl/guides/automations/export-templates"
---
# Własne szablony dokumentów

> Zaprojektuj dokumenty PDF do druku generowane z rezerwacji, takie jak umowa najmu, umowa, protokół wydania, protokół zwrotu lub lista pakowania.

Na stronie **Własne szablony dokumentów** administratorzy projektują dokumenty PDF do druku, które Requiply generuje z rezerwacji: umowy najmu, protokoły wydania i zwrotu, listy kontrolne wydania, wewnętrzne listy pakowania i wszelkie inne dokumenty, które Twoja firma przekazuje klientowi albo archiwizuje u siebie.

**To stąd bierze się umowa najmu.** Napisz treść raz, a każdą rezerwację będzie można wydrukować lub wysłać e-mailem jako gotową umowę z już wypełnionym imieniem i nazwiskiem klienta, datami, pozycjami i cenami. Aby wydrukować umowę dla konkretnej rezerwacji, otwórz rezerwację i wyeksportuj ją: zobacz [Dokumenty rezerwacji](https://requiply.com/docs/pl/guides/bookings/payments-and-documents/documents).

Strona znajduje się w **Ustawienia → Rezerwacje → Szablony dokumentów**.

<warning>

**Tylko dla administratorów.** Pozostali pracownicy są przekierowywani na ekran braku dostępu.

</warning>

<figure>

![Strona Własne szablony dokumentów z kartą szablonu z plakietką Dokument PDF i podglądem dokumentu obok przycisku Utwórz szablon](https://requiply.com/docs/assets/settings/bookings/export-templates/list.png)<figcaption>

Każdy szablon jest wyświetlany jako karta z plakietką **Dokument PDF** i podglądem treści w postaci zwykłego tekstu.

</figcaption>
</figure>

## Dlaczego ta strona jest ważna

Requiply już generuje fakturę z każdej rezerwacji. Szablony dokumentów obejmują całą resztę. Gdy szablon istnieje, pojawia się w oknie **Eksportuj** każdej rezerwacji, a pracownicy jednym kliknięciem tworzą wypełniony, gotowy do druku PDF dla tej konkretnej rezerwacji, bez przepisywania danych rezerwacji do pliku Word.

Typowe dokumenty, które organizacje tu tworzą:

- **Umowa najmu** ze stronami umowy, datami rezerwacji, tabelą sprzętu, opłatami, kaucją i miejscem na podpisy.
- **Protokół wydania i zwrotu** z uwagami o stanie sprzętu i potwierdzeniami w obu kierunkach.
- **Lista wydania lub pakowania** dla zespołu magazynu.
- **Protokół szkody lub zdarzenia** wypełniony z góry danymi rezerwacji i klienta.

## Kto może korzystać z tej strony

- **Tylko administratorzy.** Użytkownicy bez roli administratora są przekierowywani na ekran braku dostępu.
- Szablony nie mają limitu w planie ani osobnego przełącznika funkcji: każda organizacja może utworzyć ich tyle, ile potrzebuje.
- **Korzystanie** z gotowego szablonu nie jest ograniczone do administratorów. Każdy, kto może otworzyć okno **Eksportuj** rezerwacji, może wygenerować dokument.

## Co widać na stronie

Strona wczytuje szablony bieżącej organizacji i pokazuje je jako zawijaną siatkę kart. Podczas wczytywania w tym samym układzie widać trzy szare karty zastępcze.

Każda karta szablonu pokazuje:

- **Nazwę** szablonu (skróconą, z pełną nazwą w dymku po najechaniu kursorem).
- Plakietkę **Dokument PDF**.
- Pole **Podgląd dokumentu** z pierwszymi wierszami treści dokumentu w postaci zwykłego tekstu.
- Przycisk **edycji** (ołówek), który otwiera stronę [Dodawanie lub edycja szablonu dokumentu](https://requiply.com/docs/pl/guides/automations/export-templates/add-or-edit).

Za kartami znajduje się zaokrąglony przycisk **Utwórz szablon** z ikoną plusa, który otwiera stronę dodawania.

## Pusta lista

Requiply **nie ma wbudowanych szablonów dokumentów**. Nowa organizacja nie ma żadnego, a okno **Eksportuj** rezerwacji oferuje tylko **Faktura PDF**, dopóki nie powstanie pierwszy szablon.

Gdy lista jest pusta, strona pokazuje na środku ikonę PDF, tytuł **Nie masz jeszcze własnych szablonów dokumentów**, podtytuł *Twórz dokumenty do druku, takie jak umowy najmu czy protokoły wydania, wypełniane danymi rezerwacji przy eksporcie* oraz akcję **Utwórz szablon**.

## Główne działania

### Dodawanie szablonu

**Utwórz szablon**, zarówno przycisk z plusem, jak i ten na pustej liście, otwiera stronę [Dodawanie lub edycja szablonu dokumentu](https://requiply.com/docs/pl/guides/automations/export-templates/add-or-edit). Po zapisaniu wracasz do listy, a powiadomienie potwierdza: *Utworzono szablon dokumentu „{name}”*.

### Edycja szablonu

Ikona ołówka na karcie otwiera tę samą stronę w trybie edycji, z akcjami **Zapisz** i **Usuń**.

### Usuwanie szablonu

Szablon usuwa się na stronie edycji, po prostym potwierdzeniu w oknie dialogowym. W przeciwieństwie do szablonów e-maili szablony dokumentów nie są używane przez automatyzacje, więc Requiply nie sprawdza powiązań: po potwierdzeniu szablon jest od razu usuwany.

<warning>

**Uwaga:** Usunięcie szablonu od razu usuwa go z okna **Eksportuj** u wszystkich użytkowników. Już pobrane dokumenty pozostają bez zmian, ale szablonu nie da się odzyskać.

</warning>

## Dostępne zmienne

Treść dokumentu to zwykły HTML z tokenami `{{variable}}`. Przy eksporcie Requiply zastępuje każdy token danymi z rezerwacji, dla której powstaje dokument.

### Zmienne rezerwacji, klienta i organizacji

<table>
<thead>
  <tr>
    <th>
      Zmienna
    </th>
    
    <th>
      Zastępowana przez
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        {{documentDate}}
      </code>
    </td>
    
    <td>
      Datę wygenerowania dokumentu (dzisiejszą, w strefie czasowej organizacji).
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{clientName}}
      </code>
    </td>
    
    <td>
      Imię i nazwisko klienta.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{clientFirstName}}
      </code>
    </td>
    
    <td>
      Imię klienta.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{clientLastName}}
      </code>
    </td>
    
    <td>
      Nazwisko klienta.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{clientEmail}}
      </code>
    </td>
    
    <td>
      Adres e-mail klienta.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{clientPhone}}
      </code>
    </td>
    
    <td>
      Numer telefonu klienta.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingId}}
      </code>
    </td>
    
    <td>
      Numer rezerwacji w postaci widocznej w Requiply.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingStartDate}}
      </code>
    </td>
    
    <td>
      Datę rozpoczęcia rezerwacji.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingStartDateTime}}
      </code>
    </td>
    
    <td>
      Datę i godzinę rozpoczęcia rezerwacji.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingEndDate}}
      </code>
    </td>
    
    <td>
      Datę zakończenia rezerwacji.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingEndDateTime}}
      </code>
    </td>
    
    <td>
      Datę i godzinę zakończenia rezerwacji.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingDays}}
      </code>
    </td>
    
    <td>
      Płatne dni najmu: okres rezerwacji liczony w rozpoczętych okresach 24-godzinnych, tak jak naliczane są ceny za dobę, z uwzględnieniem <a href="https://requiply.com/docs/pl/guides/bookings/changing/cost-adjustment">
        korekty kosztu
      </a>
      
       w okresach. Przy wydaniu w piątek o 10:00 i zwrocie w poniedziałek o 10:00 drukuje się <em>
        3
      </em>
      
      , a z korektą <em>
        −1 okres
      </em>
      
      : <em>
        2
      </em>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingStatus}}
      </code>
    </td>
    
    <td>
      Nazwę bieżącego statusu rezerwacji.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingTotal}}
      </code>
    </td>
    
    <td>
      Sumę rezerwacji w walucie organizacji.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingDeposit}}
      </code>
    </td>
    
    <td>
      Kwotę kaucji (puste, gdy nie ma kaucji).
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingTotalCharged}}
      </code>
    </td>
    
    <td>
      Sumę za najem plus kaucję.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingBundleDiscount}}
      </code>
    </td>
    
    <td>
      Łączną oszczędność na zarezerwowanych <a href="https://requiply.com/docs/pl/guides/inventory/bundles">
        zestawach
      </a>
      
      , np. <em>
        19,20 zł
      </em>
      
      , już uwzględnioną w <code>
        {{bookingTotal}}
      </code>
      
      . Puste, gdy rezerwacja nie ma zestawu.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingAdjustment}}
      </code>
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/guides/bookings/changing/cost-adjustment">
        Korektę kosztu
      </a>
      
       rezerwacji: <em>
        −1 okres
      </em>
      
       lub <em>
        +2 okresy
      </em>
      
       dla płatnych okresów, <em>
        −10%
      </em>
      
       dla korekty procentowej, samą liczbę, np. <em>
        −25
      </em>
      
      , dla stałej kwoty. Puste bez korekty. Nie ma jej na liście zmiennych, wpisz ją ręcznie.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingAdjustmentReason}}
      </code>
    </td>
    
    <td>
      Podany powód korekty. Nie ma jej na liście zmiennych.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingAdjustmentAmount}}
      </code>
    </td>
    
    <td>
      Wpływ korekty procentowej lub kwotowej na kwotę, np. <em>
        −9,00 zł
      </em>
      
      . Puste dla płatnych okresów. Nie ma jej na liście zmiennych.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingItems}}
      </code>
    </td>
    
    <td>
      Pełną tabelę HTML z zarezerwowanymi pozycjami. Domyślnie drukuje SKU, nazwę, ilość, cenę i wartość; zobacz <a href="#wyb%C3%B3r-kolumn-tabeli">
        Wybór kolumn tabeli
      </a>
      
      . Zarezerwowane zestawy dodają na końcu wiersz rabatu, zobacz <a href="#zestawy-w-tabeli-pozycji">
        Zestawy w tabeli pozycji
      </a>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingItemsQuantity}}
      </code>
    </td>
    
    <td>
      Łączną liczbę zarezerwowanych egzemplarzy, np. <em>
        7
      </em>
      
       dla 4 krzeseł i 3 stołów. Liczą się też egzemplarze jeszcze nieprzypisane. Puste, gdy rezerwacja nie ma pozycji.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingItemsTotal}}
      </code>
    </td>
    
    <td>
      Czynsz za zarezerwowane pozycje za okres rezerwacji, po rabatach za zestawy. Nie obejmuje usług ani sprzedanych towarów. To ta sama kwota co komórka <code>
        total
      </code>
      
       w <a href="#wiersz-sumy">
        wierszu sumy
      </a>
      
       tabeli pozycji. Puste, gdy rezerwacja nie ma pozycji.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingItemsFullPriceTotal}}
      </code>
    </td>
    
    <td>
      Sumę cen zakupu wszystkich zarezerwowanych egzemplarzy, czyli ile kosztował Cię wynajmowany sprzęt, np. do klauzuli o odpowiedzialności lub wartości ubezpieczeniowej. Puste, gdy żadna zarezerwowana pozycja nie ma ceny zakupu.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingServices}}
      </code>
    </td>
    
    <td>
      Pełną tabelę HTML z usługami w rezerwacji. Domyślnie drukuje nazwę, cenę i wartość; zobacz <a href="#wyb%C3%B3r-kolumn-tabeli">
        Wybór kolumn tabeli
      </a>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingSaleItems}}
      </code>
    </td>
    
    <td>
      Tabelę towarów sprzedanych w rezerwacji (<a href="https://requiply.com/docs/pl/guides/sales">
        Sprzedaż
      </a>
      
      ), po odjęciu zwrotów. Domyślnie drukuje nazwę, ilość, cenę i wartość; zobacz <a href="#kolumny-tabeli-sprzedanych-towar%C3%B3w">
        Kolumny tabeli sprzedanych towarów
      </a>
      
      . Puste, gdy nic nie sprzedano.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingSaleTotal}}
      </code>
    </td>
    
    <td>
      <strong>
        Suma sprzedanych towarów
      </strong>
      
      : wartość netto towarów sprzedanych w rezerwacji, już uwzględniona w <code>
        {{bookingTotal}}
      </code>
      
      . Puste, gdy nic nie sprzedano.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingRentTotal}}
      </code>
    </td>
    
    <td>
      <strong>
        Suma rezerwacji bez sprzedanych towarów
      </strong>
      
      : <code>
        {{bookingTotal}}
      </code>
      
       minus sprzedane towary, czyli najem, usługi, rabaty i korekty. W rezerwacji bez sprzedanych towarów równa się <code>
        {{bookingTotal}}
      </code>
      
      . Użyj jej razem z <code>
        {{bookingSaleTotal}}
      </code>
      
      , aby pokazać najem i towary w osobnych wierszach nad kwotą do zapłaty, zobacz <a href="#rozdzielenie-najmu-i-sprzedanych-towar%C3%B3w-w-podsumowaniu">
        Rozdzielenie najmu i sprzedanych towarów w podsumowaniu
      </a>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{organizationName}}
      </code>
    </td>
    
    <td>
      Nazwę organizacji.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{organizationEmail}}
      </code>
    </td>
    
    <td>
      Kontaktowy adres e-mail organizacji.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{organizationPhone}}
      </code>
    </td>
    
    <td>
      Kontaktowy numer telefonu organizacji.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{organizationLogoUrl}}
      </code>
    </td>
    
    <td>
      Adres internetowy pliku <strong>
        Logo dla trybu jasnego
      </strong>
      
       z <a href="https://requiply.com/docs/pl/guides/settings/organization/info#logo">
        Informacji o organizacji
      </a>
      
      , do użycia w znaczniku obrazu: <code>
        <img src="{{organizationLogoUrl}}">
      </code>
      
      . Puste, gdy nie wgrano logo. Zobacz <a href="#logo-na-dokumencie">
        Logo na dokumencie
      </a>
      
      .
    </td>
  </tr>
</tbody>
</table>

<note>

`{{bookingItems}}` i `{{bookingServices}}` wstawiają całą tabelę, a nie wartość. Umieść je w osobnym wierszu, a nie w środku zdania. Nagłówki ich kolumn są w języku organizacji, a ceny w walucie organizacji.

</note>

### Wybór kolumn tabeli

Zapisany bez dodatków `{{bookingItems}}` drukuje domyślne kolumny. Dodaj **listę kolumn w nawiasach kwadratowych**, a tabela wydrukuje dokładnie te kolumny, które wymienisz, w podanej kolejności:

```text
{{bookingItems[index, name, serial, qty, price, total]}}
```

Pozycje listy oddziela się przecinkami i pisze bez cudzysłowów. Nieznana pozycja jest pomijana. Bez nawiasów używane są kolumny domyślne: SKU, nazwa, ilość, cena i wartość dla pozycji oraz nazwa, cena i wartość dla usług.

#### Własne nagłówki kolumn

Każda kolumna drukuje standardowy nagłówek w języku organizacji, np. *Nazwa* lub *Ilość*. Aby użyć własnego sformułowania, wpisz je po nazwie kolumny po dwukropku:

```text
{{bookingItems[index, name:Equipment, qty:Units, total:Amount]}}
```

Nagłówek to dowolny tekst w dowolnym języku, więc umowa po ukraińsku może drukować `{{bookingItems[name:Найменування, qty:Кількість]}}`. Działa to dla każdej kolumny we wszystkich trzech tabelach, także dla kolumn pól dodatkowych: `groupField_weight_kg:Weight (kg)`.

<warning>

**Nagłówek nie może zawierać przecinka ani zamykającego nawiasu kwadratowego.** Przecinek zaczyna następną kolumnę, a `]` kończy listę, więc `qty:Qty, pcs` drukuje kolumnę z nagłówkiem *Qty* i pomija nieznaną pozycję `pcs`. Zamiast tego napisz `qty:Qty (pcs)` i nie używaj cudzysłowów.

</warning>

#### Kolumny tabeli pozycji

<table>
<thead>
  <tr>
    <th>
      Kolumna
    </th>
    
    <th>
      Drukuje
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        index
      </code>
    </td>
    
    <td>
      Numer wiersza.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        image
      </code>
    </td>
    
    <td>
      Zdjęcie pozycji jako małą kwadratową miniaturę: zdjęcie oznaczone w pozycji jako domyślne, a w przeciwnym razie jej pierwsze zdjęcie. Kolumna nie ma nagłówka, dopóki go nie nadasz, np. <code>
        image:Photo
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        sku
      </code>
    </td>
    
    <td>
      SKU, identyfikator w organizacji.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        serial
      </code>
    </td>
    
    <td>
      Numer seryjny egzemplarza nadany przez producenta.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        name
      </code>
    </td>
    
    <td>
      Nazwę pozycji.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        category
      </code>
    </td>
    
    <td>
      Kategorię.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        qty
      </code>
    </td>
    
    <td>
      Ilość.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        price
      </code>
    </td>
    
    <td>
      Cenę za egzemplarz.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        priceType
      </code>
    </td>
    
    <td>
      Stawkę: za dobę, za godzinę, za miesiąc lub cena stała.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        deposit
      </code>
    </td>
    
    <td>
      Kaucję za egzemplarz.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        full_price
      </code>
    </td>
    
    <td>
      Cenę zakupu, czyli ile kosztował Cię sprzęt.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        full_price_total
      </code>
    </td>
    
    <td>
      Cenę zakupu pomnożoną przez ilość, np. <em>
        2400,00 zł
      </em>
      
       za dwie kamery po <em>
        1200,00 zł
      </em>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        total
      </code>
    </td>
    
    <td>
      Wartość wiersza.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        itemField_<field key>
      </code>
    </td>
    
    <td>
      Pole dodatkowe zdefiniowane na poziomie <strong>
        egzemplarza
      </strong>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        groupField_<field key>
      </code>
    </td>
    
    <td>
      Pole dodatkowe zdefiniowane na poziomie <strong>
        pozycji
      </strong>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        blank:Label
      </code>
    </td>
    
    <td>
      Pustą kolumnę z nagłówkiem <em>
        Label
      </em>
      
      , na komórki wypełniane ręcznie.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        totals
      </code>
    </td>
    
    <td>
      To nie kolumna: dodaje wiersz podsumowania na dole tabeli, zobacz <a href="#wiersz-sumy">
        Wiersz sumy
      </a>
      
      .
    </td>
  </tr>
</tbody>
</table>

Wiersze pozycji są ułożone w kolejności, w jakiej pozycje dodano do rezerwacji, i każdy eksport tej samej rezerwacji drukuje je w tej samej kolejności. Pozycje zapisane razem, np. wszystko, co wybrano przy tworzeniu rezerwacji, są ułożone według nazwy, a liczby są porównywane jak liczby (*Lampa 2* przed *Lampa 10*). Pozycje dodane do rezerwacji później są wymienione po nich, w kolejności dodania. Egzemplarze jednej pozycji są sortowane według SKU.

#### Wiersz sumy

Dodaj `totals` w dowolnym miejscu listy kolumn, a tabela zakończy się wierszem podsumowania. W kolumnie nazwy pojawia się *Razem:* (w tabeli bez `name` w pierwszej kolumnie, która nie ma własnej sumy), a każda kolumna, którą da się zsumować, pokazuje swoją sumę:

```text
{{bookingItems[index, name, qty, deposit, full_price_total, total, totals]}}
```

<table>
<thead>
  <tr>
    <th>
      Kolumna
    </th>
    
    <th>
      Suma w wierszu sumy
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        qty
      </code>
    </td>
    
    <td>
      Wszystkie zarezerwowane egzemplarze.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        deposit
      </code>
    </td>
    
    <td>
      Kaucja za egzemplarz razy ilość, zsumowana dla wszystkich wierszy.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        full_price_total
      </code>
    </td>
    
    <td>
      Cena zakupu wszystkiego, co zarezerwowano, ta sama kwota co <code>
        {{bookingItemsFullPriceTotal}}
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        total
      </code>
    </td>
    
    <td>
      Czynsz za wszystkie pozycje po rabatach za zestawy, więc zgadza się z wierszami powyżej, łącznie z wierszem zestawu, i równa się <code>
        {{bookingItemsTotal}}
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        itemField_…
      </code>
      
       i <code>
        groupField_…
      </code>
      
       dla pola typu <strong>
        Liczba
      </strong>
    </td>
    
    <td>
      Wartość pola razy ilość w każdym wierszu, zsumowana. Pozycja ważąca <em>
        2,5
      </em>
      
       kg, zarezerwowana 4 razy, liczy się jako <em>
        10
      </em>
      
      .
    </td>
  </tr>
</tbody>
</table>

Pozostałe kolumny, takie jak `price`, `full_price` czy pola tekstowe, w wierszu sumy pozostają puste. Samo `totals`, czyli `{{bookingItems[totals]}}`, drukuje kolumny domyślne z wierszem podsumowania. Etykieta zależy od języka organizacji: *Razem:* w dokumentach po polsku, *Total:* w dokumentach po angielsku.

`totals` działa też w dwóch pozostałych tabelach: `{{bookingServices[name, total, totals]}}` sumuje wartości usług, a `{{bookingSaleItems[name, qty, total, totals]}}` sumuje ilość i wartość sprzedanych towarów.

#### Zestawy w tabeli pozycji

Rezerwacja z [zestawem](https://requiply.com/docs/pl/guides/inventory/bundles) dostaje na końcu każdej tabeli `{{bookingItems}}` jeden dodatkowy wiersz na każdy zestaw, niezależnie od wybranych kolumn:

- Kolumna nazwy (lub pierwsza kolumna, gdy tabela nie ma `name`) zawiera *Zestaw podcastowy duo: rabat za zestaw 10%*, a pod spodem małym szarym tekstem *W zestawie: …*.
- Kolumna `total` zawiera kwotę ujemną, np. *-19,20 zł*. Tabela bez kolumny `total` umieszcza kwotę w etykiecie: *Zestaw podcastowy duo: rabat za zestaw 10% (-19,20 zł)*.
- Pozostałe komórki są puste, a wiersz nie ma numeru.

Wiersze pozycji zachowują pełne ceny, więc po uwzględnieniu wiersza zestawu tabela sumuje się do `{{bookingTotal}}`. Szablony napisane, zanim pojawiły się zestawy, nie wymagają zmian.

#### Kolumny tabeli usług

`index`, `name`, `price`, `priceType`, `total` i `blank:Label`, a do tego `totals` dla wiersza podsumowania z sumą `total`.

#### Kolumny tabeli sprzedanych towarów

`index`, `sku`, `name`, `qty`, `price`, `total` i `blank:Label`, a do tego `totals` dla wiersza podsumowania z sumami `qty` i `total`. Bez nawiasów drukuje `name`, `qty`, `price` i `total`, np. `{{bookingSaleItems[index, sku, name, qty, price, total]}}`.

<note>

**Kolumny dla egzemplarzy dzielą wiersze.** `serial` i każda kolumna `itemField_*` opisują jeden fizyczny egzemplarz, więc jeśli dodasz którąś z nich, tabela drukuje **jeden wiersz na egzemplarz** zamiast jednego wiersza na pozycję w rezerwacji. Pozycja z 3 statywami staje się trzema wierszami, każdy z własnym numerem seryjnym.

</note>

<note>

**Puste kolumny znikają.** `image`, `sku`, `serial`, `full_price` i `full_price_total` są usuwane z drukowanej tabeli, gdy żaden wiersz nie ma w nich wartości, więc dokument nie zawiera kolumny pustych komórek. Rezerwacja, w której żadna pozycja nie ma zdjęcia, nie drukuje kolumny `image`, a SKU i numery seryjne pojawiają się po przypisaniu egzemplarzy. Wyjątkiem jest `blank:Label`: ma być pusta i zawsze się drukuje.

</note>

<tip>

**Wskazówka:** `blank:Condition` i `blank:Signature` zamieniają tabelę pozycji w protokół wydania, który pracownik i klient wypełniają długopisem przy ladzie.

</tip>

### Zmienne pól dodatkowych

Każde pole dodatkowe skonfigurowane na poziomie **Klient**, **Rezerwacja** lub **Organizacja** jest też dostępne jako zmienna. Requiply tworzy token z klucza pola i prefiksu poziomu:

<table>
<thead>
  <tr>
    <th>
      Poziom obiektu
    </th>
    
    <th>
      Wzór tokenu
    </th>
    
    <th>
      Przykład
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      Klient
    </td>
    
    <td>
      <code>
        {{clientField_<field key>}}
      </code>
    </td>
    
    <td>
      <code>
        {{clientField_passport_number}}
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Rezerwacja
    </td>
    
    <td>
      <code>
        {{bookingField_<field key>}}
      </code>
    </td>
    
    <td>
      <code>
        {{bookingField_delivery_notes}}
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      Organizacja
    </td>
    
    <td>
      <code>
        {{organizationField_<field key>}}
      </code>
    </td>
    
    <td>
      <code>
        {{organizationField_vat_number}}
      </code>
    </td>
  </tr>
</tbody>
</table>

Pojawiają się na liście **Wstaw zmienną** obok wbudowanych zmiennych, opisane nazwą pola i jego poziomem, np. `Numer paszportu (Klient)`. Pola wyboru są drukowane jako **Tak**/**Nie** w języku dokumentu, a pola wielokrotnego wyboru jako lista rozdzielona przecinkami.

Pola daty i liczby są drukowane w języku dokumentu, tak samo jak kolumny tabeli `itemField_` i `groupField_`:

<table>
<thead>
  <tr>
    <th>
      Typ pola
    </th>
    
    <th>
      Dokument po angielsku
    </th>
    
    <th>
      Dokument po polsku
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Data
      </strong>
    </td>
    
    <td>
      <em>
        10/13/2026
      </em>
      
       (najpierw miesiąc)
    </td>
    
    <td>
      <em>
        13.10.2026
      </em>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Data
      </strong>
      
       z godziną
    </td>
    
    <td>
      <em>
        10/13/2026 14:30
      </em>
      
      , w formacie 24-godzinnym i w strefie czasowej organizacji
    </td>
    
    <td>
      <em>
        13.10.2026 14:30
      </em>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Liczba
      </strong>
    </td>
    
    <td>
      <em>
        2.5
      </em>
      
      , z kropką dziesiętną
    </td>
    
    <td>
      <em>
        2,5
      </em>
      
      , z przecinkiem dziesiętnym
    </td>
  </tr>
</tbody>
</table>

Liczby są drukowane z maksymalnie dwoma miejscami po przecinku i bez separatora tysięcy: *12500* zostaje *12500*.

Zobacz [Pola obiektów](https://requiply.com/docs/pl/guides/settings/fields/entity-fields), aby utworzyć pole, i [Konfiguracja poziomów](https://requiply.com/docs/pl/guides/settings/fields/level-configurations), aby przypisać je do poziomu klienta, rezerwacji lub organizacji.

### Sumy pól pozycji i egzemplarzy

Liczbowe pole dodatkowe na poziomie **pozycji** lub **egzemplarza** można zsumować dla wszystkiego w rezerwacji, np. łączną wagę do zaplanowania transportu albo łączny pobór mocy oświetlenia:

<table>
<thead>
  <tr>
    <th>
      Token
    </th>
    
    <th>
      Sumuje
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        {{groupFieldTotal_<field key>}}
      </code>
    </td>
    
    <td>
      Pole na poziomie <strong>
        pozycji
      </strong>
      
      , liczone raz na każdy zarezerwowany egzemplarz. Pozycja ważąca <em>
        2,5
      </em>
      
       kg, zarezerwowana 4 razy, dodaje <em>
        10
      </em>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{itemFieldTotal_<field key>}}
      </code>
    </td>
    
    <td>
      Pole na poziomie <strong>
        egzemplarza
      </strong>
      
      , każdy zarezerwowany egzemplarz z własną wartością. Egzemplarz jeszcze nieprzypisany do rezerwacji liczy się z domyślną wartością pola.
    </td>
  </tr>
</tbody>
</table>

```html
<p>Total weight: {{groupFieldTotal_weight_kg}} kg</p>
```

Wynik to sama liczba w formacie dokumentu, np. *1,234.5* po angielsku i *1234,5* po polsku. Nic się nie drukuje, gdy żaden zarezerwowany egzemplarz nie ma wartości w tym polu, więc umieść token w `{{#if groupFieldTotal_weight_kg}}…{{/if}}`, gdy otaczające go zdanie też ma zniknąć.

Używaj pola typu **Liczba**: wartości, których nie da się odczytać jako liczby, są pomijane. Tych tokenów nie ma na liście **Wstaw zmienną**, wpisz je ręcznie. Aby zamiast tego pokazać sumę pod kolumną tabeli, dodaj do tabeli pozycji kolumnę `groupField_` lub `itemField_` oraz `totals`, zobacz [Wiersz sumy](#wiersz-sumy).

### Bloki warunkowe

Szablony dokumentów obsługują jeden element logiki: opcjonalny blok, który drukuje się tylko wtedy, gdy zmienna ma wartość.

```html
{{#if bookingDeposit}}
  <p>Security deposit held: {{bookingDeposit}}</p>
{{/if}}
```

Zawartość bloku zostaje, gdy zmienna ma niepustą wartość, i jest całkowicie usuwana, gdy jej nie ma. Bloki można zagnieżdżać. Nie ma gałęzi `else`, pętli ani porównań: wszystko inne zostaje w dokumencie jako zwykły tekst.

<note>

Bloki warunkowe to funkcja **szablonów dokumentów**. Szablony e-maili ich nie obsługują.

</note>

## Jak powstają dokumenty

Gdy ktoś eksportuje dokument z rezerwacji:

1. Requiply wczytuje szablon i rezerwację.
2. Rozwiązywane są bloki warunkowe, a potem każdy token jest zastępowany danymi rezerwacji. Wartości tekstowe są zabezpieczane przed interpretacją jako HTML, więc imię klienta ani notatka nie mogą zepsuć układu; tabele pozycji i usług są wstawiane jako HTML.
3. Wynik jest renderowany do **PDF w formacie A4** z marginesami 15 mm.
4. Plik jest pobierany jako `<template name>-<booking number>.pdf`.

Daty i godziny są formatowane w strefie czasowej organizacji z [ustawień Data i godzina](https://requiply.com/docs/pl/guides/settings/organization/date-and-time), a kwoty w walucie organizacji. Nagłówki tabel, etykieta *Razem:* w wierszu sumy, wartości Tak/Nie oraz format pól dodatkowych z datą i liczbą zależą od języka organizacji.

## Gdzie używane są szablony

<figure>

![Okno Wybierz typ eksportu nad tabelą rezerwacji z rozwiniętą listą, na której są Faktura PDF i własny szablon dokumentu](https://requiply.com/docs/assets/settings/bookings/export-templates/export-dialog.png)<figcaption>

Okno **Wybierz typ eksportu** pokazuje najpierw fakturę PDF, a potem wszystkie szablony dokumentów według nazwy.

</figcaption>
</figure>

Szablony pojawiają się w oknie **Eksportuj**, które pracownicy otwierają:

- Przyciskiem dzielonym **Eksportuj** w każdym wierszu strony [Zarządzaj rezerwacjami](https://requiply.com/docs/pl/guides/bookings/manage).
- Akcją eksportu na stronie szczegółów rezerwacji.

Okno ma tytuł **Wybierz typ eksportu** i pokazuje najpierw **Faktura PDF**, a potem wszystkie szablony dokumentów według nazwy. Wybranie szablonu i potwierdzenie generuje i pobiera ten dokument dla rezerwacji.

## Typowe scenariusze

### Tworzenie umowy najmu

1. Otwórz **Utwórz szablon** i nazwij szablon `Umowa najmu`.
2. Zostaw edytor treści w trybie **HTML** i rozplanuj sekcje: strony umowy, okres rezerwacji, sprzęt, opłaty, obowiązki, podpisy.
3. Wstaw `{{organizationName}}`, `{{clientName}}`, `{{bookingStartDateTime}}`, `{{bookingEndDateTime}}` i `{{bookingItems}}` z listy **Wstaw zmienną**.
4. Umieść akapit o kaucji w `{{#if bookingDeposit}}…{{/if}}`, żeby znikał w rezerwacjach bez kaucji.
5. Sprawdź podgląd na żywo, a potem zapisz.

### Logo na dokumencie

Wgraj logo dla trybu jasnego w [Informacjach o organizacji](https://requiply.com/docs/pl/guides/settings/organization/info#logo), a potem dodaj je na górze szablonu w znaczniku obrazu:

```html
{{#if organizationLogoUrl}}
  <img src="{{organizationLogoUrl}}" alt="{{organizationName}}" style="max-height:60px;">
{{/if}}
```

Blok `{{#if …}}` utrzymuje porządek w szablonie organizacji bez logo. Podgląd na żywo nie ma logo, więc blok jest tam ukryty: wyeksportuj prawdziwą rezerwację, aby go zobaczyć.

### Lista pakowania ze zdjęciami i łączną wagą

1. Utwórz pole typu **Liczba**, np. *Waga (kg)*, z kluczem `weight_kg` na poziomie **pozycji** i uzupełnij je w swoich pozycjach (zobacz [Pola obiektów](https://requiply.com/docs/pl/guides/settings/fields/entity-fields)).
2. Utwórz szablon o nazwie `Lista pakowania` i dodaj tabelę pozycji ze zdjęciami, własnymi nagłówkami i wierszem sumy:```text
{{bookingItems[index, image:Photo, name:Item, qty:Qty, groupField_weight_kg:Weight (kg), blank:Packed, totals]}}
```
3. Pod tabelą dodaj `{{#if groupFieldTotal_weight_kg}}<p>Total weight: {{groupFieldTotal_weight_kg}} kg</p>{{/if}}` oraz `<p>Units to pack: {{bookingItemsQuantity}}</p>`.

Wiersze są ułożone w kolejności, w jakiej pozycje dodano do rezerwacji, a wiersz sumy pod kolumną wagi pokazuje wagę wszystkiego, co jest w rezerwacji.

### Okres najmu i wartość ubezpieczeniowa w umowie

Zapisz okres i wartość sprzętu słowami, które klient podpisuje:

```html
<p>Rental period: {{bookingDays}} days, from {{bookingStartDateTime}} to {{bookingEndDateTime}}.</p>
<p>Rent for the equipment: {{bookingItemsTotal}}.</p>
{{#if bookingItemsFullPriceTotal}}
  <p>Total value of the equipment handed over: {{bookingItemsFullPriceTotal}}.</p>
{{/if}}
```

### Rozdzielenie najmu i sprzedanych towarów w podsumowaniu

Gdy rezerwacja zawiera towary sprzedane przez [Sprzedaż](https://requiply.com/docs/pl/guides/sales), np. karty pamięci lub akumulatory, wielu klientów chce mieć najem i zakup w osobnych wierszach. Obie sumy są na liście **Wstaw zmienną** jako **Suma rezerwacji bez sprzedanych towarów** i **Suma sprzedanych towarów**:

```html
<table>
  <tr><td>Rent and services</td><td>{{bookingRentTotal}}</td></tr>
  {{#if bookingSaleTotal}}
    <tr><td>Goods sold</td><td>{{bookingSaleTotal}}</td></tr>
  {{/if}}
  <tr><td><strong>Total to pay</strong></td><td><strong>{{bookingTotal}}</strong></td></tr>
</table>
```

Oba wiersze zawsze sumują się do `{{bookingTotal}}`. Blok `{{#if …}}` ukrywa wiersz towarów w rezerwacjach bez sprzedanych towarów, więc jeden szablon działa dla każdej rezerwacji.

### Szkic przygotowany przez asystenta

Kliknij **Utwórz z Asystentem Requiply** obok edytora treści i opisz potrzebny dokument. Asystent zwraca kompletny, gotowy do druku szkic z właściwymi tokenami na miejscu, który jednym kliknięciem przenosisz do edytora. Zobacz [Asystent Requiply](https://requiply.com/docs/pl/ai/requiply-assistant).

### Dane specyficzne dla firmy

Jeśli umowa wymaga numeru paszportu, numeru VAT albo adresu dostawy, których Requiply domyślnie nie przechowuje, najpierw utwórz pole dodatkowe na poziomie klienta, rezerwacji lub organizacji. Pojawi się ono wtedy na liście **Wstaw zmienną** w każdym szablonie.

## Wskazówki i ostrzeżenia

<tip>

**Wskazówka:** Twórz dokumenty w trybie **HTML**. Umowy i protokoły potrzebują tabel, nagłówków i struktury strony, które edytor tekstu uprości.

</tip>

<tip>

**Wskazówka:** Używaj `{{#if …}}` do wszystkiego, co opcjonalne: kaucji, uwag o dostawie, pól dodatkowych wypełnianych tylko czasem. Dzięki temu jeden szablon działa dla każdej rezerwacji i nie trzeba utrzymywać kilku prawie identycznych.

</tip>

<tip>

**Wskazówka:** Dodaj `totals` do tabeli zamiast wpisywać sumy w tekście wokół niej. Wiersz podsumowania zawsze zgadza się z wierszami powyżej, łącznie z rabatami za zestawy.

</tip>

<warning>

**Uwaga:** Podgląd na żywo korzysta z przykładowych danych rezerwacji, a nie z prawdziwej rezerwacji. Po zbudowaniu szablonu wyeksportuj raz prawdziwą rezerwację, aby sprawdzić, czy tabele i kwoty są tam, gdzie powinny.

</warning>


## Sitemap

See the full [sitemap](https://requiply.com/docs/sitemap.md) for all pages.
