Moduł Faktury

Rejestry i numeracja

Rejestry transportowe i nietransportowe, przypisanie faktur po RODZAJ_TRANSAKCJI, źródło dokumentu (papier/KSeF) oraz numeracja przez F_GET_DOCUMENT_NUMBER.

Każda faktura trafia do rejestru (sprzedaży lub zakupu) — to podstawa ewidencji VAT i przekazania do księgowości. Rejestry obsługuje też osobna aplikacja Rejestry.

Tabele rejestrów

TabelaRola
REJESTRY_TRANSPORTOWErejestry dla faktur transportowych (FAKTURA_TRA)
REJESTRY_NIETRANSPORTOWErejestry dla faktur nietransportowych (FAKTURA)
REJESTRY_TRANSPORTOWE_FAKTURYprzypisanie faktury transportowej do rejestru (junction)
REJESTRY_NIETRANSPORTOWE_FAKTURYprzypisanie faktury nietransportowej do rejestru (junction)

Tabele łącznikowe (_FAKTURY) niosą ID_FAKTURY, ID_REJESTRU, LP (numer porządkowy do raportów) oraz STATUS (-1 błąd przeniesienia / 0 nieaktywne / 1 aktywne).

Przypisanie do rejestru

Przydział do rejestru sprzedaży vs zakupu wynika z kierunku transakcji faktury:

RODZAJ_TRANSAKCJIRejestr
S (sprzedaż)rejestr sprzedaży
Z (zakup)rejestr zakupu

Rejestr opisują m.in.:

  • FIRMA — spółka/filia,
  • WALUTA — PLN lub waluta obca,
  • STATUS — aktywność rejestru,
  • ZRODLO_DOKźródło dokumentu: 1 = dokumenty tradycyjne (papierowe lub z PDF wprowadzone przez użytkownika do e-VANa), 2 = dokumenty z KSeF,
  • SYSTEM0 stary e-van / 1 nowy e-van.

Obsługę rejestrów (wsadowe przetwarzanie, raporty) realizują pakiety TRANSPORT_REGISTER_PKG, NO_TRANSPORT_REGISTER_PKG oraz REJESTR_TRANSPORTOWY_PP_PKG (zakres procedur — niepewne; logika dzielona z aplikacją f1750).

Numeracja dokumentów

Numery nadaje jedna wspólna funkcja F_GET_DOCUMENT_NUMBER (latest/function/):

F_GET_DOCUMENT_NUMBER(
  pi_firma         in varchar2,            -- kod filii (używane pierwsze 4 znaki, np. 'XXWA')
  pi_nazwa         in varchar2,            -- nazwa numeratora (klasa dokumentu)
  pi_sysdate       in date default sysdate,-- data dokumentu (z niej okres numeracji)
  pi_nip_kod_kraj  in varchar2 default 'PL'-- kraj NIP kontrahenta: 'PL' lub zagraniczny
) return varchar2;

Licznik — tabela NUMERATOR

Numery pochodzą z tabeli liczników NUMERATOR (nazwa, firma, oddzial_nr, klucz, nr). Każda kombinacja klasy + spółki/oddziału + okresu ma własny, niezależny licznik nr. Algorytm dla każdego wywołania jest taki sam:

  1. ustalenie oddziału (oddzial_nr) — z S_FILIA.nr po kodzie filii (SUBSTR(pi_firma,1,4)); brak filii → 0. Dla faktur nietransportowych i proform spółka/oddział są mapowane na sztywno (VVRZ/VVZA → Kurier, XX… → VanCargo, VV… → Podlasie),
  2. SELECT nr … FOR UPDATE OF nr — pobranie i zablokowanie wiersza licznika dla (nazwa, oddział, klucz),
  3. nr := nr + 1 i UPDATE licznika,
  4. brak wiersza (pierwszy dokument w okresie) → gałąź NO_DATA_FOUND: INSERT … VALUES(…, 1) i numer startuje od 1,
  5. złożenie numeru ze stałego wzorca danej klasy.
Blokada FOR UPDATE OF nr powoduje, że równoległe wystawianie dokumentów serializuje się na wierszu licznika — dwa procesy nie dostaną tego samego numeru.

Okres numeracji (reset licznika)

Reset wynika z kolumny klucz (część klucza licznika):

  • miesięcznyklucz = TO_CHAR(data,'YYYYMM'): faktury i korekty (transportowe i nietransportowe), rejestry,
  • rocznyklucz = TO_CHAR(data,'YYYY'): proformy (SPRZEDAZ_PROFORMA) i noty transportowe (NOTY_TRANS).

Pierwszy dokument nowego okresu zaczyna numerację od 1.

Kontrahent PL vs zagraniczny

Dla faktur sprzedażowych (FV_TRANS_S, FV_NIETRANS_S) numerator jest rozdzielony wg kraju NIP: nazwa licznika dostaje sufiks _PL lub _NPL (osobne ciągi numerów), a do samego numeru wstawiana jest cyfra 0 (PL) lub 7 (zagraniczny).

Klasy i formaty numeru

Klasa (pi_nazwa)DokumentResetFormat numeru
FV_TRANS_Sfaktura transportowa sprzedaż (FK)miesięczny‹oddział›‹RRMM›‹0|7›‹NNNN›
KOR_TRANS_Skorekta transportowamiesięczny‹oddział›‹RRMM›‹NNN›
FV_NIETRANS_Sfaktura nietransportowa sprzedażmiesięczny‹spółka 11|13|73›‹RRMM›‹0|7›‹NNNN›
KOR_NIETRANS_Skorekta nietransportowamiesięczny‹spółka›‹RRMM›‹NNN›
SPRZEDAZ_PROFORMAproforma sprzedażroczny‹NNN›/FP/‹V|K|P›/‹RRRR›
REJESTR_TRANSrejestr transportowymiesięczny‹oddział›/‹RR›/‹MM›/‹NN›
REJESTR_NIETRANSrejestr nietransportowymiesięczny‹oddział›/…/‹MM›/‹NNN›
NOTY_TRANSnoty transportoweroczny‹oddział›‹RR›‹NNNN›

‹RRMM› = rok+miesiąc (YYMM), ‹NNNN› = kolejny numer wyrównany zerami. Przykład faktury transportowej PL dla oddziału 11 w czerwcu 2024: 11 + 2406 + 0 + 000111240600001; dla kontrahenta zagranicznego cyfra 0 zamienia się na 7.

Przepełnienie zakresu jest obsługiwane automatycznie: gdy licznik przekroczy zakres (np. > 9999 dla numeru 4-cyfrowego albo > 999 dla 3-cyfrowego), numer wydłuża się o jedną cyfrę (LPAD do 5 / 4 znaków).
Klasa REJESTR_TRANS_PP jest w kodzie oznaczona jako nieużywana („tego nie używamy na dzień dzisiejszy”). Faktury zakupowe (Z) zwykle przyjmują numer nadany przez wystawcę (lub z KSeF), a nie z F_GET_DOCUMENT_NUMBER — funkcja służy przede wszystkim dokumentom wystawianym przez VanCargo.

Powiązania

Copyright © 2026