Jak zrobić numeracje dla faktur???

0

Witam
Piszę sobie programik do wystawiania fakturek - praca na 2 stanowiskach wiec jako serwer bazy danych użyłem FIREBIRD. Wiadomo że klucz główny w przypadku braku zatwierdzenia transakcji z jakiejś przyczyny będzie miał lukę w numeracji - proszę o podpowiedzi

0
  1. osobna tabela z numerami dla faktury (na czas zapisu blokujesz możliwość zmiany numeru dla innych, odczytujesz aktualny numer, zwiększasz o jeden i z takim numerem a) zapisujesz fakturę, b) zapisujesz go w tej tabeli. Jak się wywali coś to rollback odwoła oba zapisy i kolejny zapis będzie z tym samym numerem, a jak się zapisze to się zapisze)
  2. zapisuj fakturę bez numeru i jeśli uda się zapisać to pobranie numeru z generatora i update z tym numerem. Jeśli dobrze to zaprojektujesz to ten update zawsze się zatwierdzi.
  3. inne
0

Ja miałem podobną koncepcje rozwiązania problemu co w 2 punkcie - zrobić to na wyzwalaczu że po insercie doda nr .
Problem w tym że uczę się Firebird'a i moja prośba czy coś więcej w tym temacie podpowiedziałbyś?

0

no ale co tu podpowiadać - najpierw robisz insert z nagłówkiem i pozycjami faktury, potem commit i jak się uda to robisz update ustawiający numer faktury - coś na kształt

UPDATE faktury SET numer = gen_id(generator_nr_faktury, 1) WHERE faktura_id = id_faktury
0

A te faktury to muszą mieć kolejne numery? Chyba przepisy tego nie wymagają. A jeśli już tak jest to zrobiłbym klucz unikalny na polu faktury i przed wstawianiem odczytywał select (max(nr_faktury)+1) i jeśli ktoś inny pobierze jednocześnie ten sam numer to będzie błąd dazy danych "key violation" i wtedy można zrobić ponownie ten select.

0

ustawić autoincrement jako id faktury i wsio

0

Najbezpieczniej jest jednak blokować numer w osobnej tabeli bo wtedy nikt nie pobierze kolejnego numeru przed zatwierdzeniem faktury, inaczej gdyby transakcja o niższym numerze faktury została wycofana a następna już była zatwierdzona w tym samym czasie to nie byłoby kolejności. Trzeba jeszcze rozwiązać problem anulowania faktur (z różnych powodów zgodnie z prawem), na przykład na skutek rezygnacji z zakupu towaru po kilku dniach.

0

z fakturami jest inny problem.
Numery moga byc generowane w postacji np 2010/01/000001.
Jedyny sposob to np trzymanie konfiguracji w procedurze ktora sie odpali po insercie (trigger)

1 użytkowników online, w tym zalogowanych: 0, gości: 1