Projekt Hurtownia, realizacja rejestracji dostaw produktów Ćwiczenie to będzie poświęcone zaprojektowaniu formularza pozwalającego na rejestrację dostaw produktów dla naszej hurtowni. Dane identyfikujące dostawę będą zapisywane w tabeli Dostawy, której definicja pokazana jest niżej. Poszczególne pola tej tabeli przechowują: id automatyczny identyfikator dostawy; idp klucz produktu z tabeli Produkty; iddo klucz dostawcy z tabeli Dostawcy; datad data dostawy danego produktu; datap data przydatności danego produktu; ilepalet liczba palet tego produktu; ilekartonow liczba opakowań zbiorczych na palecie; CenaJednostkowa cena jednostkowa; Pozostalo pole, którego zadaniem jest przechowywanie informacji o bieżącym stanie danego produktu. Dane do tej tabeli będą wstawiane za pośrednictwem pokazanej niżej procedury przechowywanej. W bazie danych będziemy musieli utworzyć jeszcze kilka innych procedur przechowywanych, które będą wspierać funkcjonowanie formularza rejestracji dostaw, ale do ich kodu wrócimy później. Projekt formularza frmrejestracjadostawy Dodajemy nowy formularz do naszego rozwiązania i umieszczamy na jego powierzchni potrzebne formanty. Ich nazwy systemowe, typ i funkcja wymienione są niżej. cbodostawca typu ComboBox, będzie pozwalał wybrać dostawcę produktu; cboprodukt typu ComboBox, w nim będziemy wyświetlać produkty oferowane przez wybranego wcześniej dostawcę; lblilesztukkg typu Label, będzie w niej wyświetlać informację opisującą zawartość opakowania zbiorczego wybranego produktu; nudilepalet typu NumericUpDown, formant pełniący funkcję pokrętła, pozwala wybrać wartość liczbową z określonego zakresu (od minimum=1 do maximum=20 z increment=1); nudilekartonow również typu NumericUpDown, pozwoli wybrać liczbę kartonów (opakowań zbiorczych) na palecie z zakresu od 30 do 60 ze skokiem 1; txtcena typu TextBox, będzie wykorzystany do podania ceny opakowania zbiorczego; dptdatadostawy typu DateTimePicker, pozwoli na wskazanie daty dostawy produktu;
dtpdataprzydatnosci typu DataTimePicker, będziemy w nim ustawiać datę przydatności produktu do spożycia, informacja ta będzie wykorzystywana do pilnowania, aby produkty były wydawane odbiorcom w takiej kolejności, aby nie dopuścić do ich przeterminowania; btnzapisz typu Button, jego klik uruchomi proces rejestracji produktu w bazie; btndodajdostawce typu Button, przycisk umieszczony na prawo od cbodostawca, jego klik pozwoli na otwarcie dodatkowych formularzy pozwalających na uzupełnienie listy dostawców; etykiety opisujące wybrane formanty (ich nazwa systemowa nie została zmieniona); formant typu ErrorProvider, jego nazwa systemowa również nie została zmieniona. Rozmieszczenie tych formantów na powierzchni formularza pokazane jest niżej. Tak przygotowany formularz będzie mógł być pokazany użytkownikowi po jego zainicjowaniu danymi pobranymi z bazy danych będą to informacje pozwalające na jednoznaczną i łatwą identyfikację dostawcy, dane te będą źródłem danych dla pola kombo cbodostawca. Konieczne będzie przygotowanie rozwiązania pozwalającego na dynamiczną modyfikację źródła danych dla pola kombo cboprodukt zależnie od wybranego dostawcy. Klik przycisku btnzapisz wymaga stworzenia instrukcji obsługujących to zdarzenie, podobnie musimy stworzyć procedury uruchamiające klik przycisku btndodajdostawce. Znaczną część tego kodu możemy zgromadzić w postaci metod utworzonych w klasie CDostawcyProdukty. Modyfikacja klasy CDostawcyProdukty W klasie CDostawcyProdukty dodajemy nowy interfejs, będzie on zawierał komplet procedur i funkcji wykorzystywanych do obsługi formularza frmrejestracjadostawy i innych, współpracujących z nim formularzy. W kodzie samej klasy zapowiadamy implementację tego interfejsu.
Tworzymy kod implementujący metody interfejsu INowaDostawa. Metody te uruchamiają odpowiednie procedury przechowywane SQL, procedura vb_wstawdostawe była już pokazana, a kod pozostałych dwóch pokazany jest niżej.
Modyfikacja formularza frmmdi W menu naszej aplikacji możemy dodać pozycję uruchamiającą formularz (dokładniej instancję formularza) frmrejestracjadostawy, można takie polecenie dodać w grupie Produkty. Pozycja menu Rejestracja dostawy otrzymała nazwę systemową mnurejestracjadostawy, poniżej pokazany jest kod zdarzenia Click tego polecenia. Efektem kliku jest utworzenie instancji naszego formularza, pobranie z bazy danych informacji o dostawcach, przypisanie ich do pola cbodostawca i pokazanie formularza użytkownikowi. Jednak jego poprawne funkcjonowanie wymaga napisania kilku dalszych procedur bezpośrednio w oknie kodu tego formularza. Kod formularza frmrejestracjadostawy Zaczynamy od zaimportowania przestrzeni nazw CValidacjaJG oraz utworzenia instancji klasy CValidacja, którą będziemy wykorzystywać do walidacji danych. Procedura zdarzenia Load ustawia pusty ciąg znaków w etykiecie lblilesztukkg. W momencie wyboru dostawcy w polu kombo cbodostawcy musimy zaktualizować źródło danych formantu cboprodukt, realizuje to pokazana niżej procedura. Procedura ta tworzy instancję klasy CDostawcyProdukty z wykorzystaniem interfejsu INowaDostawa i wywołuje metodę DajDostawcyProdukty, która zwraca źródło danych dla cboprodukty. Kilka kolejnych instrukcji przypisuje to źródło danych do pola kombi. Proszę zwrócić uwagę na zmienną globalną bflaga, jej wartość jest ustawiana na False przed zdefiniowaniem źródła danych i ponownie ustawiana na True po
zakończeniu definiowania. Potrzebne jest to do zablokowania na czas definiowania źródła danych obsługi zdarzenia SelectedIndexChange dla tego formantu (jeżeli takie zdarzenie jest lub będzie obsługiwane). Pokazana niżej procedura jest uruchamiana w momencie wyboru produktu w polu cboprodukt, a jej zadaniem jest skomponowanie informacji wyświetlanej w etykiecie lblilesztukkg. W procedurze tej ciekawy jest sposób odwołania się do składowych informacji o wybranym produkcie pobieranych właściwością SelectedItem z odpowiednim indeksem. Prywatna funkcja SprawdzPrzydatnosc będzie wykorzystywana do zweryfikowania, czy data przydatności produktu do spożycia jest poprawna (dokładniej czy jest większa od daty rejestracji dostawy można ten warunek doprecyzować). Procedura zdarzenie KeyPress dla pola tekstowego txtcena blokuje wprowadzenie do tego formantu innych znaków niż cyfry lub przecinek. Teraz seria procedur walidujących kilka formantów.
I na zakończenie tego fragmentu procedura obsługująca klik przycisku btnzapisz.