mala korekcija Kirinog odgovora - umesto AfterUpdate, upotrebi BeforeUpdate za formu fsubIzdatnice. beforeUpdate moze da se kanceluje ako je ispunjen neki uslov, ato je ono sto tebi treba. nesto kao ovo (kucano direktno u poruku, upotrebi samo kao ideju, moe da bude sintaksnih gresaka)
Code:
Private Sub form _BeforeUpdate()
dim intSumPrimka int 'mozda je bolje long nego int ?
dim intSumIzdatnica int
dim intStanje int
'Izracunaj koliko si do sada primio i izdao robe
intSumPrimka = DSUM("Kolicina","Primka","MaterijalID=" & me!IntmaterijalID)
intSumIzdatnica = DSUM("Kolicina","Izdatnica","MaterijalID=" & me!IntmaterijalID)
'evo ti stanje za tekuci materijal:
intStanje = intSumPrimka - intSumIzdatnica
'intStanje je stanje PRE nego se tekuci rekord doda u tabelu
'proveri da li imas dovoljno robe da izdas:
if me!intKolicina > intStanje then
Cancel=TRUE 'ako izdajes vise nego sto ima, e ne moze
MsgBox "Na lageru ima " & intStanje & " komada. ne mozete da izdate " & me!intKolicina
end if
End Sub
Kveriji iz jedne od prethodnih poruka (obrati paznju na qryStanje, prvi put sam zaboravio najvaznije polje - Stanje)
Code:
qrySuma_Primka: SELECT id_materijala, SUM(Kolicina) AS SumPrimka FROM Primka
qrySuma_Izdatnica: SELECT id_materijala, SUM(Kolicina) AS SumIzdatnica FROM Izdatnica
qryStanje: SELECT M.Id_Materijala, SumIzdatnica, SumPrimka ,
[SumPrimka] - [SumIzdatnica] AS Stanje
FROM Kartica_Materijala AS M
LEFT JOIN Primka AS P ON P.id_materijala=M.id_materijala
LEFT JOIN Izdatnica AS I ON I.id_materijala=M.id_materijala
Umesto Dsum funkcija mozes da citas stanje za zadati MateriajlId iz qryStanje. Napisi funkciju koja otvori rekordset za zadati materiajlID i vrati qryStanje.Stanje.
Bilo sta da uradiis, glavna caka je u tome da PRE snimanja rekorda proveris da li je uneta kolicina OK, tako sto ces odnekud da procitas satanje za tekuci materijal. Ako je OK, pusti da prodje transakcija, ako nije, obustavi postupak.
Posto imas formu sa subformom, imaces uvek jedan potencijalni problem. moze se desiti da imas rekord u tabeli Isdatnica i ni jedan rekord u tabeli IzdatnicaDetalji. To nazalost ne moze da se spreci. Mozes ili da povremeno pronadjes sve Primke/Izdatnice koje namju nijednu stavku, pa da vidis sta ces, ili da menjas strukturu aplikacije - imas temp tabelu za main form, i temp tabelu za subform, pa kad sve napravis lepo, kliknes dugme i sve se prepise u glavne tabele. Ja bih radio ono prvo - kveri koji pronalazi sve primke.izdatnice bez stavki, jednostavnije je.