Ti imas mnogo problema u aplikaciji.
1) prerano si napravila aplikaciju, nis zavrsila dizajn baze
Greske u dizajnu baze:
- imena tabela i kolona sadrze razmake => mnogo teze napisati tacan kod
- imena tabela su besmislena.
- umesto "Knjizenje I" i "Knjizenje II" trebalo je 'Knjizenje' i 'StavkeKnjizenja'
- umesto "sirovibne - Materijali" treba ili "Sirovine" ili "Materijali", nikako dve reci
- umesto "Vrste Materijala" treba "VrsteMaterijala"
- za imena kolona vazi isto - dve reci zameni jednom, ako bas koristis dve reci umesto razmka stavi _ (underscore karakter)
- data integrity problems:
- tabela Knjizenje II nema PK, kolone koje bi trebalo da budu PK dozvoljavaju NULL vrednosti, vec imas jedan red koji je prazan, ne znaci nista i ni sa cim nije popvezan. Pretpostavljam da kombinacija (BrojOpisa,KontrolniBroj) cini red jedinstvenim. Ako je tako, ova dva polja moraju biti PK i moraju biti Required u tabeli.
- tabela Knjizenje II ima kolone Ulaz i Izlaz. Obe kolone dozvoljavaju NULL vrednosti. Ako se nista ne unese u ove kolone, kveru qryStanje nece rediti dobro. Znaci, treba staviti Default=0 i da su Required i Vlidation rule >0 za obe kolone . Jos jedan problem; ne sme se dozvoliti da obe kolone budu 0 istovremeno, niti da obe kolone budu >0 istovremeno. To mozes da postignes na nivou tabele. razmisli malo kako, malo matematike ce pomoci. kako da od dva broja jedan uvek bude nula? kako da dva broj u zbiru daju vrednost vecu od nule? Kad ispunis oba ova uslova istovremeno onda imas da je 'bar jedan od brojeva >0 a nijedan nije manji ili jednak nuli"
Ima jos, ali nemam vremena, mozda kasnije.
Kod koji imas na subformi "Knjizenje II" nije dobar, malo sam ga pepravio, ali jos uvek moze da ne radi sve kako treba zbog nabrojanih problema. i opet lose imenoanje. Zasto se forma zove isto kao i tabela, a oba naziva su losa zbog dve reci i razmaka?
Code:
Private Sub Izlaz_BeforeUpdate(Cancel As Integer)
Dim sngStanje As Single
Dim sngIzlaz As Single
'dodao Zidar - Safety_Stock i Reordering_point moras da procitas odnegde pre nego sto ih upotrebis
'Zato ti ih ne prepoznaje u proceduri
Dim Safety_Stock As Single
Dim Reordering_point As Single
Safety_Stock = DLookup("[Safety stock]", "[Sirovine - materijali]", "[Naziv sirovine]= '" & Me![Naziv materijala] & "'")
Reordering_point = DLookup("[Reordering point]", "[Sirovine - materijali]", "[Naziv sirovine]= '" & Me![Naziv materijala] & "'")
'kraj dodavanja
sngIzlaz = Me!Izlaz
'Ovo je lose:
'sngStanje = DLookup("Stanje", "qryStanje", "ID=" & Me!ID) ' ID ti je besmislena kolona, pogledaj Relatinships
'Ovako treba:
sngStanje = DLookup("Stanje", "qryStanje", "[Naziv materijala]= '" & Me![Naziv materijala] & "'")
'ovo sam premestio, inace dobijes oba pitanja u nekim slucajevima
If (sngStanje - sngIzlaz) < Reordering_point Then
MsgBox "Naruciti sirovinu"
Cancel = True 'dodao Zidar, inace te pusti da narucis vise nego sto imas!
Exit Sub 'dodao Zidar
End If
If (sngStanje - sngIzlaz) < Safety_Stock Then
MsgBox "Trazi odobrenje"
'Ovde ne treba Cancel=TRUE,
' ako dobijes odobrenje onda se dozvoljava da izdas robu koja je sisla ispod Safety_Stock
End If
End Sub