W Odoo możliwe jest wystawienie faktury zaliczkowej do zamówienia sprzedaży, a następnie rozliczenie tej zaliczki na fakturze końcowej. Mechanizm działa dobrze w typowym scenariuszu, ale przy realizacjach etapowych — gdzie jedno zamówienie fakturowane jest w kilku transzach — ujawnia istotne ograniczenia. Poniżej opisujemy, co Odoo potrafi, czego nie potrafi, oraz jaką ścieżkę postępowania przyjąć, żeby kwoty i podatek zawsze się zgadzały.
Zasada podstawowa
Najważniejsza reguła, od której zależy cała reszta:
Odoo odlicza całą zaliczkę na jednej fakturze końcowej — nie dzieli jednej zaliczki na części pomiędzy kolejne faktury.
Wynika z tego warunek praktyczny: faktura końcowa, na której odliczana jest zaliczka, musi mieć wartość co najmniej równą zaliczce. W przeciwnym razie odliczenie przewyższy wartość faktury i dokument stanie się ujemny — a takiego Odoo nie pozwoli zatwierdzić.
Do przykładów użyjemy zamówienia na 1 000 000 zł netto, podzielonego na trzy etapy jako osobne pozycje: 200 000, 300 000 i 500 000 zł. Zaliczka wynosi 100 000 zł (10%).

[SCREENSHOT: zamówienie sprzedaży z trzema pozycjami-etapami i sekcją „Zaliczki”]
Scenariusz 1 — zaliczka mniejsza lub równa pierwszej fakturze końcowej
To przypadek, w którym mechanizm działa w pełni poprawnie.
- Na zamówieniu wybrać Utwórz fakturę → Zaliczki (procentowo) (lub Zaliczki (ustalona kwota)) i zaksięgować fakturę zaliczkową na 100 000 zł.
- Wybrać Utwórz fakturę → Faktura normalna. W oknie tworzenia faktury pozostawić do zafakturowania tylko pierwszy etap (200 000 zł), a pozostałe pozycje usunąć (ikona kosza).
- Zatwierdzić fakturę.
Odoo doda w sekcji Zaliczki linię Kwota zaliczki na −100 000 zł. Faktura końcowa pierwszego etapu wyniesie 200 000 − 100 000 = 100 000 zł do zapłaty, a cała zaliczka zostanie rozliczona.

[SCREENSHOT: faktura końcowa pierwszego etapu z linią „Kwota zaliczki” −100 000 i kwotą 100 000 zł do zapłaty]
Kolejne etapy fakturuje się analogicznie — za każdym razem pozostawiając tylko bieżącą pozycję i usuwając resztę. Idą one pełną wartością, bo zaliczka jest już rozliczona. Suma wszystkich dokumentów (zaliczkowa + trzy końcowe) daje dokładnie 1 000 000 zł netto, bez podwójnego naliczenia.
Uwaga: aby móc wystawiać kolejne faktury końcowe z tego samego zamówienia, pozycji niefakturowanych w danym kroku nie wolno zostawiać z ilością 0 — trzeba je usunąć z okna faktury. Pozostawienie linii zerowych blokuje tworzenie następnych faktur.
Scenariusz 2 — zaliczka większa niż wartość etapu (ograniczenie)
Problem pojawia się, gdy pierwszy fakturowany etap jest mniejszy niż zaliczka. Załóżmy etapy 40 000, 60 000 i 900 000 zł oraz zaliczkę 100 000 zł.
Przy próbie wystawienia faktury końcowej za pierwszy etap (40 000 zł) Odoo doda pełne odliczenie zaliczki −100 000 zł. Dokument osiągnie wartość 40 000 − 100 000 = −60 000 zł, a przy zatwierdzeniu pojawi się komunikat „Nie można zatwierdzić faktury z ujemną kwotą całkowitą". Faktury nie da się zaksięgować.

[SCREENSHOT: komunikat „Nieważna operacja” przy próbie zatwierdzenia ujemnej faktury]
Naturalnym odruchem jest ręczne zmniejszenie kwoty odliczenia — np. z −100 000 na −40 000 zł, tak by faktura wyszła na zero. To jednak prowadzi do błędu: Odoo potraktuje zaliczkę jako w całości rozliczoną i nie zaproponuje pozostałych 60 000 zł na kolejnych fakturach. W efekcie następne etapy zostaną zafakturowane pełną wartością, a suma dokumentów przewyższy wartość zamówienia — klient zostałby przefakturowany.
Wariant, który działa — odliczenie zaliczki na większym etapie
Rozwiązaniem zgodnym ze standardem jest przeniesienie odliczenia na etap odpowiednio duży:
- Faktury etapów mniejszych niż zaliczka wystawić pełną wartością — usuwając z nich automatycznie dodaną linię Kwota zaliczki.
- Zaliczkę odliczyć w całości na pierwszym etapie, którego wartość jest większa lub równa zaliczce (zwykle etap większy lub końcowy).
Dla powyższego przykładu: etapy 40 000 i 60 000 zł fakturowane są pełną wartością, a całe odliczenie 100 000 zł trafia na etap 900 000 zł, dający fakturę 800 000 zł. Suma pozostaje spójna: 40 000 + 60 000 + 800 000 + 100 000 (zaliczka) = 1 000 000 zł. Odoo poprawnie proponuje odliczenie zaliczki na tej większej fakturze, mimo że pominięto je na wcześniejszych.
Czego Odoo nie obsługuje natywnie
Warto to powiedzieć wprost, bo bywa źródłem nieporozumień. Odoo nie potrafi sukcesywnie rozliczać jednej zaliczki „po kawałku" na wielu fakturach końcowych — czyli wystawić małego etapu „na zero" (pokrytego częścią zaliczki), a pozostałą część zaliczki automatycznie przenieść na kolejne faktury. Po pierwszym rozliczeniu zaliczka jest traktowana jako w pełni wykorzystana. Nie jest to błąd konfiguracji, lecz cecha standardowego mechanizmu. Uzyskanie takiego zachowania wymagałoby rozszerzenia systemu.
Kontrola poprawności rozliczenia
Przy pracy z wieloma fakturami do jednego zamówienia warto stosować prostą kontrolę:
- Kwota zaliczki do odliczenia na fakturze ostatecznej = cała zaliczka − suma zaliczki już odliczonej na wcześniejszych fakturach.
- Kontrola końcowa: suma wartości netto wszystkich faktur do zamówienia (zaliczkowa + wszystkie końcowe, z uwzględnieniem odliczeń) powinna równać się wartości netto zamówienia.
Jeśli obie liczby się zgadzają, rozliczenie jest poprawne, a podatek nie zostanie naliczony podwójnie.
Rekomendacje dla realizacji etapowych
- Jeżeli to możliwe, dopasować wartość zaliczki do etapu, którego dotyczy — wtedy każdy etap rozlicza się czysto na własnej fakturze końcowej.
- Dla przedsięwzięć wieloetapowych rozważyć osobne, mniejsze faktury zaliczkowe przypisane do poszczególnych etapów (zaliczka może być mniejsza niż 100% zamówienia; nie może przekroczyć wartości zamówienia).
- Jeżeli etap nie wymaga zaliczki — wystawić od razu zwykłą fakturę za ten etap.
- Odliczenie pojedynczej zaliczki planować na fakturze o wartości nie mniejszej niż sama zaliczka.
Standardowy mechanizm zaliczek Odoo dobrze obsługuje typowe przypadki, a jego ograniczenia da się obejść świadomym doborem kolejności i wartości fakturowanych etapów. Kluczem jest jedna zasada: zaliczka rozlicza się w całości na jednej fakturze końcowej — pozostaje jedynie wybrać tę o odpowiedniej wartości.