![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 247 Pomógł: 11 Dołączył: 5.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Mam problem z zaprojektowaniem schematu bazy danych na faktury. Chodzi o to, ze jeżeli klient kupił np. 20 klawiatur i 5 myszek i została mu wystawiona faktura, a po jakimś czasie zwrócił 5 klawiatur to trzeba mu wystawić fakturę korygującą na której będzie napisane coś w stylu:
POZYCJE KORYGOWANE klawiatura | 20 | .... POZYCJE PO KOREKCIE klawiatura | 15 | ..... Tutaj macie jakąś przykładową znalezioną w google fakturę korygującą żeby to jakoś obrazowo pokazać: http://gusoft.com.pl/faktorzysta/graph/fak...kladowa_kor.pdf Oczywiście nie można w związku z tym zmienić ilości zamówionych klawiatur w tabeli POZYCJE_ZAMOWIENIA bo potem przy tworzeniu faktury nie byłoby skąd wziąć pierwotnej liczby zamówionych klawiatur, a na fakturze muszą być pierwotne i ostateczne wartości. W związku z tym zaprojektowałem taki schemat bazy danych: ![]() Tabela POSITIONS_ORDER_CORRECTION - czyli pozycje zamówienia, które uległy zmianie - tabela ta jest niemal kopią tabeli POSITIONS_ORDER - czy w związku z tym ten schemat jest ok ? Bo innego sposobu na to chyba nie ma ? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 76 Pomógł: 19 Dołączył: 19.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
faktura i faktura korygujące to dwa osobne dokumenty, wprowadzając fakturę korygującą nie możesz nic zmieniać na dokumencie oryginalnym (oprócz pól 'pomocniczych', np. oznaczyć, że do danej faktury istnieje faktura korygująca).
Osobiście to bym rozszerzył tabele faktury i pozycji na zamówieniu tak, aby zawierały także dane potrzebne do faktury korygującej oraz dodał pole 'typ' aby odróżnić je od siebie - łatwiej będzie wtedy robić np. sumowanie obrotów. Przy okazji, widzę, że masz połączenie z danymi klientów poprzez customers_id - co zamierzasz zrobisz jeśli po wystawieniu faktury dane klienta ulegną zmianie (np. zmieni się adres), a ktoś będzie chciał wydrukować 'starą' fakturę, np. w celu wystawienia duplikatu? Pytam bo sam się nad tym ostatnio zastanawiałem http://forum.php.pl/index.php?showtopic=14...mp;#entry744708 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 247 Pomógł: 11 Dołączył: 5.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
To znaczy dodałbyś kolumne TYP typu BOOL - gdzie 0 oznaczałoby pozycję przed korektą a 1 pozycję po korekcie do tabeli POZYCJE_ZAMOWIENIA ? Ale wtedy na fakturze korygującej wypisałbyś wszystkie pozycje danego zamówienia gdzie typ = 0 czyli wypisałbyś także pozycje, które nie uległy zmianie - w omawianym przypadku wypisałbyś jako pozycje przed korektą nie tylko klawiatury, ale także myszki - których ilość się nie zmieniła, a tymczasem niestety na fakturze korygującej trzeba podawać TYLKO pozycje, które uległy zmianie.
Ten post edytował wiewiorek 15.05.2010, 11:29:55 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 76 Pomógł: 19 Dołączył: 19.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Cytat TYP typu BOOL - gdzie 0 oznaczałoby pozycję przed korektą a 1 pozycję po korekcie do tabeli POZYCJE_ZAMOWIENIA nie, do tabeli faktury żeby nie robić osobnej tabeli na faktury 'zwykłe' osobnej na korygujące. A do tabeli 'pozycje na zamówieniu' dodałbym pole 'ilość korygowana', które normalnie nie byłoby używane. Cytat Ale wtedy na fakturze korygującej wypisałbyś wszystkie pozycje danego zamówienia faktura korygująca to osobny dokument, z oddzielnym id |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 247 Pomógł: 11 Dołączył: 5.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem w ten sposób - dzięki takiej strukturze nie będę mieć problemu z danymi na fakturze gdy dane klienta ulegną zmianie, gdy ilość, cena czy rabat na fakturze korygującej uległy zmianie itp. bo w tabeli pozycje_faktury mam kolumne 'korekta' typu BOOL specjalnie dla pozycji zamówień faktur korygujących, w omawianym przypadku faktura korygująca miałaby w tabeli pozycje_faktury 2. rekordy - klawiatura z ilością = 20 i korekta = 0 oraz klawiatura z ilością 15 i korekta = 1 i koniec problemów
![]() ![]() Ten post edytował wiewiorek 15.05.2010, 19:50:40 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 76 Pomógł: 19 Dołączył: 19.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
moim zdaniem teraz wygląda całkiem nieźle,
można by dodać jeszcze jakieś szczegóły, np. id_faktury_korygowanej do tablicy faktur aby mieć możliwość śledzenia która korekta jest do jakiej faktury (kiedyś w jednej firmie widziałem fakturę, do której było 5 faktur korygujących czyli była korekta korekty itd), ale to zależy czy chcesz mieć taką funkcjonalność. Jeszcze taka uwaga - jeśli będziesz potrzebował jakichś sumowań (np. ile sprzedano towarów w danych okresie), to warto od razu zastanowić się jaki wpływ na to będą miały faktury korygujące, np. takie wyrażenie sum(ilosc) from pozycje_faktury; zadziała prawidłowo bez faktur korygujących, ale z fakturami korygującymi już niekoniecznie. Ja to rozwiązuje w ten sposób, że w przypadku faktur korygujących do kolumny ilość wpisuję różnicę pomiędzy tym ile powinno być a ile było. Przykład (tabela pozycje_faktury): ilosc ile_bylo ile_powinno_byc 20 NULL NULL // zwykła faktura -5 20 15 // faktura korygująca teraz sumowanie działa prawidłowo - faktycznie sprzedano 15 szt. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 247 Pomógł: 11 Dołączył: 5.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
ok dzieki
![]() |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 5.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
a czy ta baza jest dobrze napisana ? bo jakoś dziwne selecty mi wyświetla
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 3.06.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A może jeszcze warto gdzieś wrzucić tabele odnośnie sprzedawcy ? chyba że będziesz wpisywał za każdym razem ręcznie.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 09:22 |