Discussion:
Numerowanie wystawionych dokumentów
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
DK
2004-11-12 07:27:46 UTC
Permalink
Witam Grupowiczów.

Przeglądałem archiwa naszego forum, ale nie znalazłem rozwiązania na mój
problem,

Chodzi o numerowanie wystawianych dokumentów, nie wiem jak można to
rozwiązać:

Generuje umowy, które muszą mieć swój numer (numer oczywiście
niepowtarzalny), łamany przez rok np. 10/2004, 11/2004 itd., w numeracji
musi być zachowana chronologia.

Eksperymentowałem, z "autonumerowanie", ale raz że powstają dziury nawet, po
skasowaniu ostatniego numeru, a dodatkowo jak uruchomić nową numeracje od
nowego roku, przecież "autonumer" idzie dalej.

Ciekawy jestem, jakie Wy stosujecie rozwiązania.

Potrzebuje pomocy w rozwiązaniu zagadnienie takiego żebym nie musiał
zakładać na początku roku nowej tabeli, no chyba że się inaczej nie da.

Access 2000



Pozdrawiam DK
Nguyen Bang Giang
2004-11-12 07:43:28 UTC
Permalink
Post by DK
Witam Grupowiczów.
Przeglądałem archiwa naszego forum, ale nie znalazłem rozwiązania na mój
problem,
Chodzi o numerowanie wystawianych dokumentów, nie wiem jak można to
Generuje umowy, które muszą mieć swój numer (numer oczywiście
niepowtarzalny), łamany przez rok np. 10/2004, 11/2004 itd., w numeracji
musi być zachowana chronologia.
Eksperymentowałem, z "autonumerowanie", ale raz że powstają dziury nawet, po
skasowaniu ostatniego numeru, a dodatkowo jak uruchomić nową numeracje od
nowego roku, przecież "autonumer" idzie dalej.
Ciekawy jestem, jakie Wy stosujecie rozwiązania.
Potrzebuje pomocy w rozwiązaniu zagadnienie takiego żebym nie musiał
zakładać na początku roku nowej tabeli, no chyba że się inaczej nie da.
Access 2000
Pozdrawiam DK
Probuj taka recepte:

biezacy numer (lub jego czesc ruchoma) = ilosc rekordow o mniejszej dacie w
danym okresie (rocznym, miesiecznym,...) + 1

czesc stal (/2004, /11/2004, itp.) sam kombinuj.

Pozdrawiam.
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Piotr Lipski
2004-11-12 07:49:38 UTC
Permalink
Dnia Fri, 12 Nov 2004 08:27:46 +0100, DK napisał(a):

[...]
Post by DK
Generuje umowy, które muszą mieć swój numer (numer oczywiście
niepowtarzalny), łamany przez rok np. 10/2004, 11/2004 itd., w numeracji
musi być zachowana chronologia.
Eksperymentowałem, z "autonumerowanie", ale raz że powstają dziury nawet, po
skasowaniu ostatniego numeru, a dodatkowo jak uruchomić nową numeracje od
nowego roku, przecież "autonumer" idzie dalej.
[...]

Słabo żeś te archiwa Grupy przeglądał, skoro nie dotarłeś do trąbionej
wiele razy informacji, że (wybacz wielkie litery) AUTONUMER NIE SŁUŻY DO
NUMEROWANIA DOKUMENÓW TYLKO DO ZAPEWNIENIA UNIKALNOŚCI KAŻDEMU REKORDOWI W
TABELI. Oczywiście jeżeli dopuszczasz "dziury" w numeracji dokumentów,
MOŻESZ oprzeć się na Autonumerze.
<dygresja>U mnie ostatnio w jednej tabeli pokazała się dziura na jakieś
1600 Autonumerów, ktoś oparł się o "Enter" i do bazy trafiło ok. 1600
pustych rekordów, których oczywiście nikt potem nie pouzupełniał danymi
tylko się je administracyjnie skasowało - potem były telefony typu "a co
się stało z tymi numerami???"</dygresja>
Jeżeli chcesz zrobić takie "prawdziwe" numerowanie, polecam stworzyć sobie
osobną tabelę "tblNumeracja" z polami co najmniej: "NR_KOLEJNY", "NR_ROK",
dodatkowe pole tekstowe "NR_DOKUMENTU" w tabeli "właściwej" czyli docelowej
(tej z umowami) no i jakąś funkcję fnGetNextNumber(byval lngYear as long)
As String, która pobierze z tabeli tblNumeracja ostatnią wartość numeru dla
podanego roku, zwiększy tę wartość o jeden, a także zwróci numer dokumentu
postaci "nr/rok" czy "nr-rok" czy jak tam jeszcze chcesz.

To oczywiście podejście mało elastyczne. Bardziej profesjonalnie byłoby
podefiniować sobie różne sposoby numerowania dla różnych typów dokumentów,
z możliwością definiowania "maski numerowania", stałych i zmiennych
fragmentów numeru, sposobów uzyskiwania kolejnych wartości w zmiennych
fragmentach numerów i tak dalej i tak dalej...
--
PL
MadziaK
2004-11-13 20:03:01 UTC
Permalink
A ja jakis czas temu balam sie zadac takiego pytania na grupe, oparlam
numeracje na autonumerze i teraz cierpie:)
Ha... zaraz bede pytac, jak przerobic numeracje oparta na autonumerze...
hmmm.;)
Niemniej jednak, warto wiedzec.
MadziaK
Krzysztof Naworyta
2004-11-13 22:55:45 UTC
Permalink
Juzer MadziaK <***@poczta.onet.pl> napisał

| A ja jakis czas temu balam sie zadac takiego pytania na grupe, oparlam
| numeracje na autonumerze i teraz cierpie:)

Strach nie jest dobrym doradcą !
Lepiej - IMHO - być wykpionym, niż nieświadomym ...

| Ha... zaraz bede pytac, jak przerobic numeracje oparta na autonumerze...
| hmmm.;)
| Niemniej jednak, warto wiedzec.


Nie wyrzucajmy dziecka z kąpielą! Kobiety tę powiedzonkę powinny rozumieć
...

Autonumer to tzw. "sztuczny klucz" (Smyk niewątpliwie więcej Ci o tym
powie, ja traktuję to bardziej po "kobiecemu": intuicyjnie !), ponieważ
niczego nie ogranicza, poza samym sobą ...
Warto mieć w tabeli coś co jest niewątpliwie indywidualne dla każdego
rekordu i jest jednocześnie łatwe w późniejszej identyfikacji unikalności
(indeks jednopolowy!)

Wszelkie dodatkowe ograniczenia wynikają ze specyficznych uwarunkowań
danej aplikacji ...
Np. zdarza się, że budujemy swój własny "autonumer" niepodatny na "dziury"
<zboczony mode>
choć mnie akurat one raczej dobrze się kojarzą, hmmm ...
<zboczony mode koniec>

Poza kluczem głownym *wolno mieć* wiele innych indeksów - w tym
unikalnych, byle ich łaczna liczba nie przekraczała 32 (choć może w
przyszłości to zostanie rozszerzone (?) - choć wątpię, bo w dobrze
zaprojektowanej bazie to stanowczo nadto! W moich bazach ilość indeksów
per tabela z rzadka przekarcza liczbę cztery!)

Jak organizujemy ten nasz własny *niestandardowy* autonumer ?
No cóż, wiele zależy jak i kiedy chcemy go implementować. Za każdym razem
proponuję podejście skrajnie *pesymistyczne* (!):
- jest wielu równoczesnych użytkowników
- nie może być dziur wynikających z anulowania wpisu
- nasz "autonumer", w pewnej swej części, /czasami/ sie resetuje !
(np: 17786/2003 przechodzi w 1/2004: rok zresetował pierwszą część
licznika!)
- bywa że musimy dokomać jakichś *systemowych* wycięć*, które obsuną ten
nasz "autonumer" (to chyba najtrudniejsze!)

Na wszystkie te bolączki MS dawno opublikował pewien standard podejścia, w
zasadzie niemodyfikowalny - ponieważ trudno wymyśleć coś lepszego - choć
kto wie ...

W skrócie:
- było na Grupie najdalej na przestrzeni 2 miesięcy ! (polecam
przeglądnięcie, będzie link do źródeł)
- unikamy "dziur" dzięki rezygnacji z Form_BeforeInsert na rzecz
Form_AfterInsert (niektórzy nie poojmują dlaczego nie widzą numeru faktury
po inicjacji rekordu lecz dopiero po zapisie! Niestety trudno to
wytłumaczyć, chyba że licząc na swój wdzięk ;-) )
- nowe rekordy obsługujemy raczej niezwiązanymi formularzami (pozwalają na
bardziej subtelną kontrolę poprawności i cofanie złych wpisów")

Ale pragnę podkreślić:
- w większości bazodanowych sytuacji nie potrzebujemy takich restrykcji;
czyt: dziury nie są złe!
- wyjątki to np. "ciągłość" numeracji faktur ...
- wyjątkiem nie jest (!) klienta upodobanie do exelowskiego "numeru
wiersza" !
--
KN

archiwum grupy:
http://groups.google.pl/advanced_group_search?&as_ugroup=pl*msaccess
Rafał Posmyk
2004-11-14 12:43:27 UTC
Permalink
Krzysztof Naworyta on Samstag, 13. November 2004 23:55 wrote:

Do tak wyczerpujacej wypowiedzi nie mozna wiele dodac.
Post by Krzysztof Naworyta
- unikamy "dziur" dzięki rezygnacji z Form_BeforeInsert na rzecz
Form_AfterInsert (niektórzy nie poojmują dlaczego nie widzą numeru
faktury po inicjacji rekordu lecz dopiero po zapisie!
Warto wspomniec jednak o mozliwosci nadawania numerow
tymczasowach faktury/zlecen/umow na czas ich formulaowania.
W momencie nadawania dokumentowi statusu "gotowe" moze
byc generowany oficjalny nummer. Zapobiega to niejako
powstawaniu dziur.

Ciao, Smyk
--
Fju fju - powiedział Ćwirek
Loading...