Witaj, wiem o co Ci chodzi: zmieniam nazwę tabeli dostawy na dokumenty i dodaje kolumnę dokumentTyp. Bardziej mi chodzi jak zorganizować formularz da takiego dokumentu.
Dokładnie tak, to typ determinuje czy jest to np. dostawa , wydanie czy przyjecie.
A dokładniej, to są dwie wartości:
- typ
Określa ogólny rodzaj dokumentu, np. dokument dostawy.
- seria
Określa grupę dokumentów jednego typu. A więc możesz mieć np. wiele serii (rejestrów) dokumentów dostaw. np. osobno dla dokumentów dostaw z kraj i z zagranicy. Albo jakkolwiek chcesz.
Ważne jest to, że typ i seria ma swój wyróżnik (co pozwala rozróżniać dokumenty, grupować, filtrować, itd.) oraz że to seria determinuje formę numeracji. A więc każda seria może mieć osobny numerator dokumentów.
Unikalność dokumentu jest na poziomie trzech wartości: typ, seria i numer dokumentu.
I nie, nie jest to złożony klucz podstawowy (jestem ich zdeklarowanym przeciwnikiem).
Jestem totalnym amatorem każdy wieczór lub weckend przed komputerem uczy mnie coś nowego.
Co to jest "weckend"? :P
No cóż, to nie jest rozwiązanie amatorskie.
Generalnie zawsze miałem problem z rozwiązaniami prostymi, takimi które działają i związanymi na drut, dla mnie to było zawsze nie to.
Być może to wynika z zespołu natręctw, a może raczej z tego, że nigdy nie pracowałem jako wyrobnik w korpo.
Innymi słowy - z kodem który napiszę, to ja będę miał problemy.
Zatem lepiej to zrobić raz, a dobrze.
A że jestem w grupie 40+ więc nie idzie już tak łatwo.(Wiem też że rzucam się z motyką na księżyc , ale taka farma nauki jest dla mnie najlepsza postawić wysoko poprzeczkę i znaleźć rozwiązanie )
Podobnie jak i ja. I co z tego?
U ciebie widzę jakiegoś Grida w którym jest ComboBox z pozycjami dokumentu i filtrowaniem. Bardzo mi się to podoba. Jednak mnie interesuje co się dzieje z danymi po ich wybraniu ( nie wiem w jaki sposób są buforowane oraz co się z mini dzieje przed i po kliknięciu buttona Zapisz W jaki sposób i w jakiej kolejności zapełniane są tabele.
- No grid, a dokładnie TCxGrid z DevExpress, ale to nieistotne.
- Ten ComboBox to własna implementacja na bazie TCxLookupComboBoxProperties (a to oznacza, że dokładnie ten sam kod działa jako kontrolka osadzona w gridzie i jako samodzielna kontrolka), ba żadna z istniejących rozwiązań nie potrafi filtrować danych na liście wybory tak jak pokazałem. Po kawałku, wyszukując wszystko co się da na bazie wielofrazowego wyrażenia w formie przyrostowej w trakcie pisania.
- Dane dla list wyborów są oczywiście buforowane. Zarządza tym dedykowana ogólna usługa mojego systemu. Dane na listach wyborów są singletonem (tj. dane występują raz w pamięci dla dowolnej liczby aktywnych list wyborów tego samego rodzaju jak np. towar na różnych formularzach/gridach) co pozwala nimi zarządzać w sposób scentralizowany - np. automatycznie odświeżać te dane po zmianie danych źródłowych przez innych użytkowników. Poza tym, to dla mnie bardzo istotne bo UI systemu nie jest zbudowane na
ShowModal
i można sobie otworzyć wiele różnych formularzy równocześnie lub wiele instancji tego samego formularza i nic nie ma prawa się blokować lub zmieniać niezgodnie z oczekiwaniami.
- Dowolna edycja/usuwanie/dodanie dowolnych danych na formularzu jest buforowana, tj. nie dotykamy bazy danych w ogóle. Tak naprawdę to nie posługuję się pojęciem formularz, ponieważ on jest dla mnie nieistotny w momencie zarządzania danymi. Formularz tylko prezentuje dane i żadna logika nie opiera się na kontrolkach. Same dane to jest zestaw DataSetów; w omawianym przypadku będą minimum dwa - jeden dla nagłówka dokumentu, a drugi dla pozycji. Pozycje z nagłówkiem oczywiście są połączone relacją master-detail.
- Te wszystkie kontrolki są dbAware (a więc nie TStringGrid tylko TDBGrid, TDBEdit itd.), a więc połączenie pomiędzy danymi w DataSet a kontrolką są automatyczne.
- Kod posługują się tylko i wyłącznie danymi, kontrolki je automatycznie wizualizują. Oczywiście to jest standard dla Delphi i nic nie trzeba specjalnego robić.
- Wszystkimi datasetami zarządza klasa DSController i to ona odpowiada za zapis, odczyt, usuwanie danych itd. Tam jest istotne pojęcia, które nazywam RootDS - to jest nadrzędne źródło danych dla danego zestawu. A taki zestaw reprezentuje konkretny dokument.
- Zapis jest w kierunku od RootDS do ostatniego w hierarchii (a więc najpierw zapisywany jest RootDS (a więc master, czyli nagłówek), potem detail (czyli pozycje) itd.)
- Usuwanie danych co do zasady jest w kierunku odwrotnym, aczkolwiek najczęściej zarządza tym sama baz danych - klucze obce z kaskadowym usuwaniem danych.
OK, starczy, bo to dla Ciebie niewiele wnosi.
Jednakże... jest pomysł na projekt eksperymentalno-edukacyjny w tym obszarze (Delphi, bazy danych).
Coś tam zaczęliśmy robić, ale problemem jest mój brak czasu na wszystko.
Ale jak coś się uda zrobić, to dam znać, ponieważ tam mają być gotowe recepty na takie pytania :)