Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> tworzenie automatycznej numeracji [php + sql]
niebieszki
post
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 30.09.2010

Ostrzeżenie: (0%)
-----


Witam

Mam taki problem: chciałbym utworzyć unikalny, kolejny numer dokumentu,
Przykładem może być tworzenie numeru faktury vat podczat jej dodawania? Format takiej nazwy powinien być edytowalny przez uzytkownika. Może na pczątek coś w stylu
"D numer/miesiac/rok" jak podzielić pola w bazie danych wstawic jedno jako nazwa faktury czy kilka poł na kazdy czlon... pobranie miesiaca czy roku to pewnie przy uzyciu js się da ale jak sprawdić który numer był ostatnio dodany do bazy i wystawić kolejny? Po id takiej sprawy nie można obslużyć ponieważ pdczas usuwania jakiejs faktury pole autincrement dodaje automatycznie kolejny numer id.

Jak sie do tego zabrać?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
lng
post
Post #2





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 4.02.2011

Ostrzeżenie: (0%)
-----


Nie rozumiem dlaczego AUTO_INCREMENT Twoim zdaniem się nie nadaje. Właśnie do tego zostało stworzone. Dodatkowo utwórz w bazie danych pole w którym będziesz przechowywał datę utworzenia rekordu. Wtedy będziesz mógł skleić z tego numer w dowolnej formie. Przy okazji proponuję odwrócić kolejność na ROK/MIESIĄC/NUMER, będzie czytelniej.
Go to the top of the page
+Quote Post
niebieszki
post
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 30.09.2010

Ostrzeżenie: (0%)
-----


nie nadaje się z tego względu iż podczas usunięcia takiego dokumentu z bazy powstanie luka przykład zęby bardziej zobrazować.

tworzysz sobie dokument 1 nadaje mu automatycznie id =1 i date 2010/02/21 w połączeniu wszystko ląduje do nazwy i wygląda tak D 1 2010/02/21 (na razie super)
tworzysz sobie dokument 2 nadaje mu automatycznie id =2 i date 2010/02/21 w połączeniu wszystko ląduje do nazwy i wygląda tak D 2 2010/02/21 (dalej super)
usuwasz sobie dokument 2
wiec sobie znowu tworzysz dokument 2 i nadaje mu automatycznie id=3.... i zaczynają się schody jest luka... brakuje dokumentu nr.2 (nazwa bedzie D 3 2010/02/21)
a przy np. dokumentach ścisłego zarachowania musi być ciągłość numeracji

to tylko przykład taka sytuacja może wystąpić częściej niż tylko przy usuwania, jakiś błąd bazy i id idzie automatycznie o 1 w gore...

Może jakiś inny pomysł?
Go to the top of the page
+Quote Post
Pilsener
post
Post #4





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Cytat
np. dokumentach ścisłego zarachowania musi być ciągłość numeracji
- dlatego nie można ich usuwać, jak źle wystawiłeś fakturę i została ona już zatwierdzona (dodana do bazy) to nie można jej usunąć, trzeba wystawić fakturę korygującą a nawet jeśli, to nie usuwa się nigdy fizycznie lecz ustawia pole deleted na 1.
To co chcesz zrobić jest bez sensu, jak sobie wydrukuję np. fakturę nr 5 a za pół roku ktoś znów wydrukuje tą fakturę to będzie na niej numer 4 bo ktoś fakturę nr 2 usunął? Autoincrement jest używane przez cały świat i spełnia oba założenia: ciągłości (nowy dokument ma zawsze wyższy numer niż stary) i unikalności (nigdy nie będzie dwóch różnych dokumentów o tym samym numerze).
Go to the top of the page
+Quote Post
lng
post
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 4.02.2011

Ostrzeżenie: (0%)
-----


A co ma się dziać w sytuacji gdy dodasz dokumenty o id=1,2,3 a potem usuniesz dokument z id=2?
Go to the top of the page
+Quote Post
niebieszki
post
Post #6





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 30.09.2010

Ostrzeżenie: (0%)
-----


dałem zły przykład... mi nie chodzi o usuwnie tych dokumentów... bardziej chodzi mi o sytuacje... gdy wystapi jakis blad przy tranzakcji i pole auto inkrement sie podniesie o 1....

albo nawet jeszcze prostrzy przyklad...numerowanie dokumentów po miesiacu i roku... jak z pola autoinkrement zrobic tak aby jak jest luty liczylo od 1 a jak marzec to znowu liczenie od jeden? itp...?
Go to the top of the page
+Quote Post
ylk
post
Post #7





Grupa: Zarejestrowani
Postów: 194
Pomógł: 26
Dołączył: 9.01.2011
Skąd: /dev/null

Ostrzeżenie: (0%)
-----


Ja mam to zrobione w ten sposób, że mam dwie kolumny - id (AUTO_INCREMENT) - czyli unikalny numer, nazwijmy to, zamówienia, oraz invoice_id (UNIQUE, NULL), czyli unikalny numer faktury. Nowo otwarta faktura nie ma jeszcze przypisanego numeru invoice_id, jedynie id. Gdy ją sobię wypełnię i kliknę "zamknij" skrypt pobiera najwyższy invoice_id, inkrementuje i zapisuje do bazy. Nie ma przy tym obawy, że dwie osoby zrobią to w tym samym momencie i coś się spitoli, bo pole invoice_id jest ustawione na UNIQUE i mysql zwróci błąd.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.09.2025 - 19:51