Raporty niestandardowe¶
Odoo jest wyposażone w wydajny i łatwy w użyciu framework raportowania. Silnik pozwala tworzyć nowe raporty, takie jak raporty podatkowe lub bilanse i rachunki zysków i strat ze specyficznymi grupowaniami i układami.
Ważne
Aktywuj tryb dewelopera, aby uzyskać dostęp do interfejsu tworzenia raportów księgowych.
Aby utworzyć nowy raport, otwórz aplikację Księgowość i przejdź do . Stąd możesz utworzyć raport główny lub wariant.
Raporty główne¶
Raporty główne można uznać za ogólne, neutralne raporty księgowe. Służą jako modele, na których budowane są lokalne wersje księgowe. Jeśli raport nie ma raportu głównego, jest sam uważany za raport główny.
Example
Raport podatkowy dla Belgii i USA będzie używał tej samej wersji ogólnej jako podstawy i dostosuje ją do krajowych przepisów.
Podczas tworzenia nowego raportu głównego musisz utworzyć dla niego pozycję menu. Aby to zrobić, otwórz raport i w tym samym raporcie kliknij ikonę (Działania), a następnie wybierz Utwórz pozycję menu. Odśwież stronę; raport jest teraz dostępny w .
Informacja
Przypadki wymagające utworzenia nowego raportu głównego są rzadkie, takie jak sytuacja, gdy organy podatkowe kraju wymagają nowego i specyficznego rodzaju raportu.
Warianty¶
Warianty są wersjami raportów głównych specyficznymi dla poszczególnych krajów i dlatego zawsze odnoszą się do raportu głównego. Aby utworzyć wariant, wybierz raport ogólny (główny) w polu Raport główny podczas tworzenia nowego raportu.
Gdy raport główny jest otwierany z jednego z głównych menu aplikacji księgowej, wszystkie jego warianty są wyświetlane w selektorze wariantów w prawym górnym rogu widoku.
Example
Na poniższym obrazku Raport VAT (BE) jest wariantem głównego Ogólnego raportu podatkowego.
Report lines¶
After having created a report (either root or variant), you need to fill it with report lines. You can either create a new one by clicking on Add a line, or modify an existing report line by clicking on it. All report lines require a Name, and can have an optional additional Code (of your choice) if you wish to use their value in formulas.
Wyrażenia¶
Each report line can contain one or multiple expressions. Expressions can be seen as sub-variables needed by a report line. To create an expression, click on Add a line within a report line.
When creating an expression, you must attribute a Label used to refer to that expression. Therefore, it has to be unique among the expressions of each line. Both a Computation Engine and a Formula must also be indicated. The engine defines how your formula(s) and subformula(s) are interpreted. It is possible to mix expressions using different computation engines under the same line if you need to.
Informacja
W zależności od silnika mogą być również wymagane podformuły.
«Odoo Domain» engine¶
With this engine, a formula is interpreted as an Odoo domain
targeting account.move.line objects.
Podformuła pozwala zdefiniować, w jaki sposób pozycje księgowe pasujące do domeny są używane do obliczenia wartości wyrażenia:
sumWynik jest sumą wszystkich sald pasujących pozycji księgowych.
sum_if_posWynik jest sumą wszystkich sald pasujących pozycji księgowych, jeśli ta kwota jest dodatnia. W przeciwnym razie wynosi
0.sum_if_negWynikiem jest suma wszystkich sald dopasowanych pozycji księgowych, jeśli kwota ta jest ujemna. W przeciwnym razie wynosi
0.count_rowsThe result is the number of sub-lines of this expression. If the report line has a group-by value, this will correspond to the number of distinct grouping keys in the matched move lines. Otherwise, it will be the number of matched move lines.
You can also put a - sign at the beginning of the subformula to reverse the sign of the
result.
«Aggregate Other Formulas» engine¶
Use this engine when you need to perform arithmetic operations on the amounts obtained for other
expressions. Formulas here are composed of references to expressions separated by one of the four
basic arithmetic operators (addition +, subtraction -, division /, and multiplication *). To
refer to an expression, type in its report line’s code followed by a period . and the
expression’s label (ex. code.label).
Podformuły mogą mieć jedną z następujących postaci:
if_above(CUR(amount))Wartość wyrażenia arytmetycznego zostanie zwrócona tylko wtedy, gdy jest większa od podanej granicy. W przeciwnym razie wynik będzie wynosić
0.if_below(CUR(amount))Wartość wyrażenia arytmetycznego zostanie zwrócona tylko wtedy, gdy jest niższa od podanej granicy. W przeciwnym razie wynik będzie wynosić
0.if_between(CUR1(amount1), CUR2(amount2))Wartość wyrażenia arytmetycznego zostanie zwrócona tylko wtedy, gdy jest ściśle między podanymi granicami. W przeciwnym razie zostanie przybliżona do najbliższej granicy.
if_other_expr_above(LINE_CODE.EXPRESSION_LABEL, CUR(amount))Wartość wyrażenia arytmetycznego zostanie zwrócona tylko wtedy, gdy wartość wyrażenia oznaczonego przez podany kod wiersza i etykietę wyrażenia jest większa od podanej granicy. W przeciwnym razie wynik będzie wynosić
0.if_other_expr_below(LINE_CODE.EXPRESSION_LABEL, CUR(amount))Wartość wyrażenia arytmetycznego zostanie zwrócona tylko wtedy, gdy wartość wyrażenia oznaczonego podanym kodem wiersza i etykietą wyrażenia jest niższa niż podana granica. W przeciwnym razie wynikiem będzie
0.
CUR to kod waluty wielkimi literami, a amount to kwota granicy wyrażona w tej walucie.
cross_report(xml_id | report_id)Służy do dopasowania wyrażenia z innego raportu wskazywanego przez xml_id lub sam identyfikator raportu.
«Prefix of Account Codes» engine¶
This engine is used to match amounts made on accounts using the prefixes of these accounts» codes as variables in an arithmetic expression.
Example
21Example
21 + 10 - 521 i 10, a następnie odejmuje saldo pozycji na kontach z prefiksem 5.Można również zignorować wybrane pod-prefiksy.
Example
21 + 10\(101, 102) - 5\(57)101, 102 i 57.Można zastosować „pod-filtrowanie” na kredytach i debetach używając sufiksów C i D. W tym przypadku konto będzie uwzględnione tylko wtedy, gdy jego prefiks pasuje i jeśli całkowite saldo pozycji księgowych dokonanych na tym koncie jest kredytowe/debetowe.
Example
Konto 210001 ma saldo -42, a konto 210002 ma saldo 25. Formuła 21D pasuje tylko do konta 210002, a zatem zwraca 25. 210001 nie jest dopasowane, ponieważ jego saldo jest kredytowe.
Wykluczenia prefiksów można łączyć z sufiksami C i D.
Example
21D + 10\(101, 102)C - 5\(57)21, jeśli jest debetowe (D) i 10, jeśli jest kredytowe (C), ale ignoruje prefiksy 101, 102, a następnie odejmuje saldo pozycji na kontach z prefiksem 5, ignorując prefiks 57.Aby dopasować literę C lub D w prefiksie i nie używać jej jako sufiksu, użyj pustego wykluczenia ().
Example
21D\()21D, niezależnie od znaku ich salda.Oprócz używania prefiksów kodów do uwzględniania kont, można je również dopasowywać za pomocą tagów kont. Jest to szczególnie przydatne, na przykład, gdy w Twoim kraju brakuje ustandaryzowanego planu kont, gdzie ten sam prefiks może być używany do różnych celów w różnych firmach.
Example
tag(25)If the tag you reference is defined in a data file, an xmlid can be used instead of the id.
Example
tag(my_module.my_tag)Możesz również używać wyrażeń arytmetycznych z tagami, ewentualnie łącząc je z selekcją prefiksów.
Example
tag(my_module.my_tag) + tag(42) + 1010Sufiksy C i D mogą być używane w ten sam sposób z tagami.
Example
tag(my_module.my_tag)CWykluczenie prefiksu działa również z tagami.
Example
tag(my_module.my_tag)\(10)10.«External Value» engine¶
The «external value» engine is used to refer to manual and carryover values. Those values
are not stored using account.move.line, but with account.report.external.value. Each of these
objects directly points to the expression it impacts, so very little needs to be done about their
selection here.
Formuły mogą być jedną z następujących:
sumJeśli wynik ma być sumą wszystkich wartości zewnętrznych w okresie.
most_recentJeśli wynik ma być wartością najnowszej wartości zewnętrznej w okresie.
Ponadto podformuły mogą być użyte na dwa sposoby:
rounding=XZastąpienie
Xliczbą powoduje zaokrąglenie kwoty do X miejsc po przecinku.editableWskazuje, że to wyrażenie może być edytowane ręcznie, wywołując wyświetlenie ikony w raporcie, pozwalając użytkownikowi wykonać tę akcję.
Informacja
Wartości ręczne są tworzone w dacie date_to aktualnie wybranej w raporcie.
Obie podformuły mogą być mieszane poprzez oddzielenie ich średnikiem ;.
Example
editable;rounding=2«Custom Python Function» engine¶
This engine is a means for developers to introduce custom computation of expressions on a case-by-case basis. The formula is the name of a python function to call, and the subformula is a key to fetch in the dictionary returned by this function. Use it only if you are making a custom module of your own.
Kolumny¶
Raporty mogą mieć nieokreśloną liczbę kolumn do wyświetlenia. Każda kolumna pobiera swoje wartości z wyrażeń zadeklarowanych w wierszach. Pole expression_label kolumny podaje etykietę wyrażeń, których wartość jest wyświetlana. Jeśli wiersz nie ma wyrażenia w tym polu, to nic nie jest wyświetlane dla niego w tej kolumnie. Jeśli wymaganych jest wiele kolumn, należy użyć różnych etykiet wyrażeń.
Podczas korzystania z funkcji porównania okresów znajdującej się w zakładce Opcje raportu księgowego, wszystkie kolumny są powtarzane w każdym okresie i dla każdego okresu.
Grupowanie wierszy¶
Niestandardowe grupowanie jest możliwe poprzez dodanie lub użycie istniejących pól w modelu Pozycja dziennika, pod warunkiem że pola są powiązane i niezapisane.
Informacja
Grupowanie wierszy wymaga, aby raport posiadał jawne wiersze raportu, które można edytować. Raporty odroczone, na przykład, nie obsługują grupowania wierszy, ponieważ używają dynamicznych wierszy, które są generowane.
Utwórz nowe pole w pozycji dziennika¶
Aby utworzyć nieprzechowywane, powiązane pole w modelu Pozycja dziennika, najpierw przejdź do i kliknij ikonę (bug), następnie kliknij Pola. Kliknij Nowy, aby utworzyć nowe pole i wypełnij następujące pola:
Nazwa pola: nazwa techniczna pola
Etykieta pola: etykieta wyświetlana dla pola
Typ pola: typ pola, na który powinno wskazywać to powiązane pole
Przechowywane: Pozostaw to pole niezaznaczone, ponieważ tylko pola nieprzechowywane mogą być używane do grupowania wierszy.
Powiązany model: Jeśli typ pola to one2many, many2many lub many2one, wybierz model oryginalnego pola, według którego chcesz grupować.
Definicja powiązanego pola: ścieżka techniczna do pola, według którego chcesz grupować
Example
Aby grupować według zespołu sprzedaży partnera handlowego, ustaw definicję powiązanego pola na
move_id.team_id.
Grupuj wiersze¶
To group lines, go to the Lines tab of the desired report, click on the line you want to group, and edit the Group by field. Enter the technical name (Field Name) of the field to use as the grouping key.
Wskazówka
Aby znaleźć listę wszystkich pól modelu i ich nazw technicznych, przejdź do i kliknij ikonę (bug), następnie kliknij Pola. Nazwa techniczna każdego pola jest wymieniona w kolumnie Nazwa pola.
Custom tax report setup¶
Report configuration¶
Wskazówka
All technical terms and functions of Odoo’s reports engine are explained in the previous sections of this page. We strongly recommend reading these sections before setting up a custom tax report.
To create a custom tax report, open the Accounting app, navigate to , then click New:
Enter a name for your report.
Select a Root Report.
Under the Availability field, select Country Matches, then select the Country matching your company.
Next, create a report line by clicking the Add a line. Once created, click that report line to configure it:
Click Add a line again to create an Expression and name it.
In the Definition tab, select a Computation Engine for that expression depending on the following scenarios:
In this scenario, your company uses tax grids:
Select Tax Tags as the computation engine. Odoo uses this field to link the report line to your taxes.
In the Formula field, type your short grid identifier (e.g.,
vat_sales_base). Odoo automatically generates the+and-variants of this tag for you to map inside .In the Subformula field, enter either
baseto report the untaxed amount, ortaxto report the actual tax amount collected/paid.
Repeat this process as necessary. Then, Save & Close.
Alternatively, you can:
Wybierz Agreguj inne formuły jako silnik obliczeń. Odoo używa tego pola do wykonywania obliczeń matematycznych na wierszach już obecnych w raporcie, zamiast skanowania surowych transakcji.
W polu Formuła użyj podstawowej algebry odwołującej się do kodów wierszy (np.
LINE_10 - LINE_20).
Repeat this process as necessary. Then, Save & Close.
W tym scenariuszu Twoja firma nie używa siatek podatkowych. Zamiast tego śledzi wszystko ściśle poprzez konta Księgi głównej:
Wybierz Prefiks kodów kont jako silnik obliczeń: Odoo używa tego dla wierszy, które muszą pobierać sumy finansowe. Zamiast szukać tagów transakcji, Odoo pobiera salda bezpośrednio z Twojego planu kont.
W polu Formuła wpisz początkowe cyfry kont, które chcesz śledzić (np.
40pobierze łączną sumę wszystkich kont przychodów rozpoczynających się od400000,401000itp.).
Repeat this process as necessary. Then, Save & Close.
Alternatively, you can:
Wybierz Agreguj inne formuły jako silnik obliczeń. Odoo używa tego do obliczania sum częściowych, podatku netto lub sum całkowitych poprzez dodawanie lub odejmowanie innych wierszy raportu.
W polu Formuła użyj podstawowej algebry odwołującej się do kodów wierszy (np.
LINE_10 - LINE_20).
Repeat this process as necessary. Then, Save & Close.
W tym scenariuszu Twoja firma wymaga zaawansowanego filtrowania, ręcznych nadpisań przez użytkownika lub złożonej logiki algorytmicznej, której standardowe tagi i prefiksy kont nie mogą obsłużyć:
Wybierz Domena Odoo jako silnik obliczeń: Odoo używa tego, aby całkowicie pominąć tagi podatkowe i filtrować surowe pozycje księgowe (
account.move.line) przy użyciu standardowej składni wyszukiwania Odoo.W polu Formuła wprowadź prawidłową domenę zaczynającą się od nawiasów kwadratowych, aby wyizolować transakcje zwolnione z podatku dla określonych kategorii partnerów.
Alternatively, you can:
Wybierz Wartość zewnętrzna jako silnik obliczeń. Odoo używa tego do rejestrowania ręcznych nadpisań lub historycznych wartości przenoszonych.
W polu Formuła wpisz
sum(aby zsumować wszystkie wartości ręczne w raportach wielookresowych) lubmost_recent(aby wyświetlić tylko najnowszą wartość).W polu Podformuła wpisz
editable, aby wyświetlić ikonę edycji w raporcie na żywo, umożliwiając użytkownikom ręczną modyfikację wartości. Dodatkowo możesz zaokrąglić liczby, wpisującrounding=x.
Alternatively, you can:
Wybierz Niestandardowa funkcja Python jako silnik obliczeń. Odoo używa tego jako silnika wykonawczego do przeprowadzania określonych obliczeń poprzez kodowanie backendowe, gdy reguły obejmują progresywne progi, pętle lub wielopoziomowe limity.
W polu Formuła wprowadź dokładną nazwę techniczną metody Python zdefiniowanej w Twoim niestandardowym module lokalizacyjnym.
Repeat this process as necessary. Then, Save & Close.
Na karcie Opcje Wyrażenia wypełnij pole Przenieś do formułą, aby zawsze przenosić salda lub przenosić je tylko wtedy, gdy kwota jest ujemna. Pozostaw to pole puste, jeśli nie chcesz używać tej funkcji.
Example
if_below(EUR(0))Konfiguracja podatku¶
Następnie przejdź do i kliknij Nowy, aby utworzyć i skonfigurować nowe podatki dla niestandardowego raportu podatkowego. Utwórz podatki dla Sprzedaży i Zakupów oraz wypełnij Siatki podatkowe dla wszystkich podatków, używając odpowiadających siatek podatkowych utworzonych wcześniej. Na koniec upewnij się, że określisz zarówno rachunek zobowiązań podatkowych, jak i rachunek należności podatkowych dla każdego podatku.
Example
Zapis zamykający¶
Aby zamknąć podatki, grupa podatkowa musi być określona dla każdego podatku użytego w niestandardowym raporcie podatkowym. W tym celu otwórz aplikację Księgowość, przejdź do , otwórz podatek wymagający grupy podatkowej, kliknij zakładkę Opcje zaawansowane i wybierz grupę w polu Grupa podatkowa. Po przypisaniu kliknij ikonę (strzałka w prawo) i ustaw zarówno Rachunek zobowiązań podatkowych, jak i Rachunek należności podatkowych.
Wskazówka
Gdy wszystko zostanie skonfigurowane, przetestuj raport, tworząc faktury, rachunki i noty kredytowe z użyciem podatków specyficznych dla tego raportu. Na koniec przetestuj sam zapis zamykający.
Jeśli chcesz ukryć określone konto w zapisie zamykającym podatki, przejdź do , wybierz podatek i kliknij ikonę (ustawienia dostosowania). Następnie zaznacz pole Zapis zamykający podatki, aby dostosować jego widoczność.
Zobacz także