Za to vec treba dobro znanje koje ja ne posedujem,nego sam mislio da kada pozovem neku sifru ulaza,da mi iz magacina povlaci stanje,koje sabiram sa tim trenutnim unosom,i to cu i nekako,ali kako cu posle sa proizvodima i normativima....
Sirovine i normativi
Zaključano
Zakačeno
A može jedno pitanje?
Zašto Access kad ima besplatnih odličnih baza koje rade brže, bolje i nema problema sa serverskim radom? Firebird, MySQL...
Mislim... kad se već počinje projekt iz nule.
Relacije u bazi nisam, osobno, nikad volio. Znaju stvarato probleme kod mjenjanja same strukture baze, a i više volim sve držati u svojim rukama.
popmilan76 bih preporučio manji projekt, pa onda pekaru. Sječam se svojih prvih projekata...
Zašto Access kad ima besplatnih odličnih baza koje rade brže, bolje i nema problema sa serverskim radom? Firebird, MySQL...
Mislim... kad se već počinje projekt iz nule.
Relacije u bazi nisam, osobno, nikad volio. Znaju stvarato probleme kod mjenjanja same strukture baze, a i više volim sve držati u svojim rukama.
popmilan76 bih preporučio manji projekt, pa onda pekaru. Sječam se svojih prvih projekata...
Nije mi bas prvi projekat koji radim,ali sam i ovaj uzeo postepeno,nisam nista vezan za rok,ali je sada zapelo za stanje u magacinu....
Pa možeš na dva načina:
1. Tako da kad hočeš stanje na skladištu zbrojiš sve ulaze i odbiješ sve izlaze. Ovo je sporije (ovisi o količini prometa), ali neša problema sa storniranje dokumenata.
2. Kod svakog unosa ulaza ili izlaza za svaki artikal mijenjaš količinu.
Da se ne vrćan nazad na početak, na strukturu baze. Ja bih skladiše napravio ovako:
ID
SifAtrikla
Stanje
...
OstaloŠtoTrebaZaToSkladište
Kad knjižiš izlaz jednostavno za svaki artikal skineš stanje i obrnuto kod ulaza, za svaki artikal posebno. Ja bih to u trigeru jer nemaš s njim brige... googlaj, nije komplicirano, a baza ti sama uredi stanje.
Nije ti još kasno preći na FireBird bazu. Toplo preporučam. Besplatna je, a može se naći i free alata. Delphi ju podržava odlično.
Evo ti primjer. Kod mene je skladište LAGER, a ulaz (stavke) ROBNA:
- okida se kod upisa stavke u tablicu ulaza
- generira jedinstveni ID za tablicu ulaza
- dodaje količinu u tablisu skladišta
1. Tako da kad hočeš stanje na skladištu zbrojiš sve ulaze i odbiješ sve izlaze. Ovo je sporije (ovisi o količini prometa), ali neša problema sa storniranje dokumenata.
2. Kod svakog unosa ulaza ili izlaza za svaki artikal mijenjaš količinu.
Da se ne vrćan nazad na početak, na strukturu baze. Ja bih skladiše napravio ovako:
ID
SifAtrikla
Stanje
...
OstaloŠtoTrebaZaToSkladište
Kad knjižiš izlaz jednostavno za svaki artikal skineš stanje i obrnuto kod ulaza, za svaki artikal posebno. Ja bih to u trigeru jer nemaš s njim brige... googlaj, nije komplicirano, a baza ti sama uredi stanje.
Nije ti još kasno preći na FireBird bazu. Toplo preporučam. Besplatna je, a može se naći i free alata. Delphi ju podržava odlično.
Evo ti primjer. Kod mene je skladište LAGER, a ulaz (stavke) ROBNA:
Code:
CREATE OR ALTER TRIGGER AI_KEYROBNA FOR ROBNA
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.KEYROBNA IS NULL) THEN
NEW.KEYROBNA = GEN_ID(GENKEYROBNA, 1);
update lager set kol_lag = kol_lag + new.ulaz_kol where sif_art_lager = new.sif_art;
END
CREATE OR ALTER TRIGGER AI_KEYROBNA FOR ROBNA
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.KEYROBNA IS NULL) THEN
NEW.KEYROBNA = GEN_ID(GENKEYROBNA, 1);
update lager set kol_lag = kol_lag + new.ulaz_kol where sif_art_lager = new.sif_art;
END
- okida se kod upisa stavke u tablicu ulaza
- generira jedinstveni ID za tablicu ulaza
- dodaje količinu u tablisu skladišta
U koliko imaš više magacina (prodavnica ili šta već), morat ćeš napraviti novu tabelu za stanje (u koju možuš upisivati ulaz/izlaz količine), ako želiš da čuvaš stanje u nekoj tabeli, koja će sadržati IDArtikla, IDMagacina, Količina, Cena itd... i prilikom upita stanja za određeni magacin samo je filtriraš. U tom slučaju možeš napraviti i proceduru koja će ti raditi posao umesto trigera, al je moraš pozivati svaki put nakon svake promene (ulaz/izlaz), npr:
Jedan od načina.
S tim da moraš voditi računa prilikom korekcije stavki ulaza/izlaza da pravilno koriguješ stanje, umanjiš stanje pre korekcije pa posle ponovo koriguješ.
Code:
procedure TForm1.KorekcijaStanja(IDArt, IDMag: Integer; Kol: Double);
begin
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('UPDATE STANJE SET KOL=KOL+:KOL');
SQL.Add('WHERE IDArt=:IDArt and IDMag=:IDMag');
Parameters.ParamByName('KOL').Value := Kol;
Parameters.ParamByName('IDArt').Value := IDArt;
Parameters.ParamByName('IDMag').Value := IDMag;
ExecSQL;
end;
end;
i u koliko je u pitanju ulaz stavljaš +Kol a izlaz -Kol. procedure TForm1.KorekcijaStanja(IDArt, IDMag: Integer; Kol: Double);
begin
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('UPDATE STANJE SET KOL=KOL+:KOL');
SQL.Add('WHERE IDArt=:IDArt and IDMag=:IDMag');
Parameters.ParamByName('KOL').Value := Kol;
Parameters.ParamByName('IDArt').Value := IDArt;
Parameters.ParamByName('IDMag').Value := IDMag;
ExecSQL;
end;
end;
Jedan od načina.
S tim da moraš voditi računa prilikom korekcije stavki ulaza/izlaza da pravilno koriguješ stanje, umanjiš stanje pre korekcije pa posle ponovo koriguješ.
Potpis
Nikad izvini!
Imas elegantno mada mozda ne bas najsrecnije resenje da kreiras view
TblPromet
-----------
idMaterijal
kolUlaz
kolIzlaz
i naravno ostala polja, datum, opis, itd itd
sql koji ce ti prikazati stanje je
select idMaterijal, sum(kolUlaz) ulaz, sum(kolIzlaz) izlaz, sum(kolUlaz - kolIzlaz) stanje
group by idMaterijal
ili napravis VIEW koji ti je uvek azuran, a ponasa se kao tabela
Pretpostavka je da imas malo podataka
A sto se tice normativa, kako ti rekose, radni nalog na kome su proizvodi, pa preko tabele normativa skidas sa stanja
i predvidi korekcije jer se nikad ne potrosi koliko je propisano, nekad manje, obicno vise
TblPromet
-----------
idMaterijal
kolUlaz
kolIzlaz
i naravno ostala polja, datum, opis, itd itd
sql koji ce ti prikazati stanje je
select idMaterijal, sum(kolUlaz) ulaz, sum(kolIzlaz) izlaz, sum(kolUlaz - kolIzlaz) stanje
group by idMaterijal
ili napravis VIEW koji ti je uvek azuran, a ponasa se kao tabela
Pretpostavka je da imas malo podataka
A sto se tice normativa, kako ti rekose, radni nalog na kome su proizvodi, pa preko tabele normativa skidas sa stanja
i predvidi korekcije jer se nikad ne potrosi koliko je propisano, nekad manje, obicno vise
Potpis
Pomozite Micro$oftu u borbi protiv piraterije, poklonite prijatelju Linux
Ili još bolje da napiše storu (bit će znatno brža), no ako se ne varam baza mu je na Accessu.
Potpis
God is real unless is declared as integer.
Da ne otvaram novi post,koristicu ovaj.....Posto mi je baza u Access,vezano za stanje artikala,i uradio sam query u access,zbog lakseg pravljenja i dizajniranja,i query sam prekopirao u adoquery i to radi,i sada imam problem,a to je kako da pokrenem query koji je sastavljen od queryija,znaci ne od tabele vecv od upita....nesto kao select * from query1,gde je query1 recimo select * from table1,ne znam jesam li bio jasan...
Samo stavi u zagrade taj drugi query i to je to.
Potpis
F
Mislim da to nece ici,kada postavim na formu query 1 i query 2 ,postavim i konacan query 3...gde je select * from query1....kada napravim tako,izlazi mi greska...da ne postoji takva tabela ili query....
Uspeo sam,ali me zanima jel moguce sve te queryija staviti u jedan...
Select* from (select* from (select * from))
Potpis
F