[ popmilan76 @ 12.12.2015. 17:07 ] @
Zanima me kako napraviti bazu za pekaru,a da u ulazu ima sirovine,tj,brasno,kvasac,...a za izlaz da ima gotove proizvode,dakle hleb,kifla,sa svojim normativima,i da oduzima to od sirovina...Zanima me kako napraviti bazu i query za pravljenje stanja zaliha...
[ salvaric @ 12.12.2015. 17:39 ] @
Napraviš tabele za početak:

1. artikli (id,naziv,tip_artikla,...) u tipu definišeš dal je sirovina il gotov proizvod (a možeš i još jednu tabelu tipovi_artikala (id, tip...) od koje uzimaš id i ubacujieš u tabelu artikala prilikom definisanja)
2. partneri (id,naziv,adesa,mesto...)
3. ulaz (id,datun,broj_dokumenta,id_partnera...)
4. ulaz_stavke (id,id_ulaza,id_artikla,kolicina,cena,...)
5. izlaz (id,datum,broj_dokumenta,id_partnera,...)
6. izlaz_stavke (id,id_izlaza,id_artikla,kolicina,cena,...)
[ popmilan76 @ 12.12.2015. 17:46 ] @
Jel ima neki dijagram za ovu bazu podataka ,kao i sql upit za stanje zaliha...
[ captPicard @ 13.12.2015. 21:38 ] @
Jos bi rekao da fali tabela normativi.
Dijagram za samo taj dio napraviš u pola sata-sat, samo definiraj šta ti znači dijagram.
Za sql upit ne možeš napraviti dijagram. A upit za stanje zaliha ti je suma ulaza - suma izlaza.
[ salvaric @ 14.12.2015. 07:13 ] @
Da, to sam propustio,

u njoj (id_art_p - gotov proizvod ,id_art_s - sirovin, kolicina...)

i još tabela magacini (id,naziv, adresa, ...),

i Query za upit stanja, ulaz-izlaz.
[ popmilan76 @ 10.02.2016. 16:12 ] @
Jel ovo dovoljna relacija za ulaz sirovina i izlaz proizvoda,rec je o pekari,ulaz brasno i sli,a izlaz hleb i peciva...
[ savkic @ 10.02.2016. 17:18 ] @
Deluje u redu, s tim što si mogao još malo normalizovati, primera radi, deluje da u stavkama čuvaš ID i naziv artikla (naziv je višak).
[ captPicard @ 10.02.2016. 18:33 ] @
I možda još šifrarnik grupa proizvoda.
[ salvaric @ 10.02.2016. 18:47 ] @
Koliko vidim, nedostaje tabela artikala, ti ih unosiš direktno u tabelu MagacinRepromaterijala/Proizvoda, mogao si zasebno da napraviš tabelu artiakala i u magacinima da uzimaš samo id od artikla, kao i u prijemnici i otpremnici.

Možeš i da pohranjuješ sve u jednu tabelu magacin (repromaterijal i proizvode), dodaš kolonu tip ulaza/izlaza i na osnovu njega uzimaš podatke, mislim da je malo jednostavnjije.
[ popmilan76 @ 10.02.2016. 20:33 ] @
Ne znam kako da stavljam i sirovine i proizvode u istu tabelu,to mislim da nije lepo rešenje,jer se sifre proizvoda sastoje iz sifara sirovina.....

Ono sto mi treba jeste koje forme da napravim za ove tabele...jer ja putanje do gotovog proizvoda je sledece....
repromaterijal - magacina repromaterijala - proizvod - magacin proizvoda - prodavnica1,prodavnica2,prodavnica3....
[ popmilan76 @ 11.02.2016. 08:54 ] @
I jos nesto,kako da napravim stavku sa normativima i na koju tabelu da je povezem....
[ captPicard @ 11.02.2016. 12:48 ] @
tblNormativi
---------------
idProizvod
idMaterijal
kolicina
pakiranje
[ Rapaic Rajko @ 12.02.2016. 08:45 ] @
Mislim da tebe muci SQL; jer pitanja tipa "kako da povezem tabelu tu i tu sa tom i tom" se upravo odnose na baratanje SQL upitima.

Evo ti jedan hint. Imas neki stariji Delphi (5, 6, 7)? Ako imas, onda idi na Help->Delphi Tools->LocalSQL. Ja kompaktniji, a ipak upotrebljiv help/tutorijal za SQL do dana danasnjeg nisam video. Cak i sad ga ponekad otvorim (da se podsetim), vrlo dobro je osmisljen/napisan i objasnjava osnove rada sa SQL-om; taman ono sto tebi treba.

Pozz
[ salvaric @ 12.02.2016. 10:29 ] @
Ako dobro kreiraš interfejs u Delphi-ju, i nisu toliko bitne te relacije koje tebe muče, barem sam ih ja izbegavao.
[ popmilan76 @ 12.02.2016. 13:25 ] @
Zaista mi nisu problem sql upiti,vec kako sve to da izvedem,taj neki interfejs,tipa treba mi forma za unos,forma za prodaju ,itd....i kako da povezem normative sa proizvodima...a za relacije cu pustiti access da mi to uradi,toliko znam....
[ salvaric @ 12.02.2016. 15:13 ] @
Imam felnu, kako da napravim auto?

Citat:
i kako da povezem normative sa proizvodima...

Davno sam to radio, mislim da sam to rešavao sa dve tabele (dva dokumenta):
1. radni nalog - u kome se definiše koji gotovi proizvod se proizvodi i količina istog, i na osnovu tog zaduživao magacin gotovih proizvoda i
2. trebovanje - koje se učitava na osnovu normativa za dati gotovi proizvod iz radnog naloga, i sa tim dokumentom razduživao magacin sirovina.

Svaki radni nalog ima svoje trebovanje na osnovu koga se magacini zadužuju i razdužuju.

Za taj projekat će ti trebati formi i formi da to napraviš samo da funkcioniše iole kako treba, i naravno dosta vremena da to sve ukrojiš i povežeš.
[ popmilan76 @ 04.05.2016. 17:44 ] @
Moram ponovo da aktiviram ovu temu jer mi treba za izradu aplikacije za pekaru.....Prihvatio sam onu gore bazu,s tim sto sam dodao jedinice mere...Kako je napravljeno u bazi je da se u magacinu repromaterijala cuvaju stanja,a u magacinu proizvoda stanje proizvoda,e sada kako to da izvedem,jer i u jednom i u drugom slucaju sifre su unique rekords,to sam prevideo u startu,kad je vec aplikacija pocela da naraste,kako da kada nesto ulazi i izlazi iz magacina,to se belezi samo u stavci kolicina u magacinu,a da sifre ostanu unique,to bi znacilo da moram da te kolicine uvecavam ili smanjujem u magacin,i da updatujem iste...Ne znam kako ste pravili queryije za stanja.....
[ savkic @ 04.05.2016. 18:06 ] @
Nisi potpuno jasan šta ti je problem. U svakom slučaju ti treba da imaš tabelu artikala koja ima ID polje koje je primarni ključ i dalje te artikle ubacuješ u ostale tabele. Kada radiš izlaz, praviš novi slog u tabeli izlaza gde upisuješ samo ID artikla, količinu, cenu i već šta treba. A ako raspoložive količine čuvaš u tabeli magacina onda updejtuješ i tu tabelu preko IDa artikla i novom količinom (to možeš i putem triggera).
[ popmilan76 @ 04.05.2016. 18:47 ] @
Da na to sam mislio,to znaci da dodajem samo kolicinu na vec postojeci id,jel postoji neki lepsi nacin od ovog...Posto nisam radio sa trigerima,moracu to peske...
[ captPicard @ 04.05.2016. 19:51 ] @
Triger ili pješke, na isto ti dođe. JEdino je razlika da trigerom ne usporavaš aplikaciju, ne moraš čekati da se izvrte upiti i zapisi, tj. ostavljaš bazi da odradi svoje.
[ popmilan76 @ 04.05.2016. 21:08 ] @
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....
[ FranjoZG @ 04.05.2016. 22:14 ] @
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...
[ popmilan76 @ 04.05.2016. 22:25 ] @
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....
[ FranjoZG @ 04.05.2016. 22:56 ] @
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:
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


- okida se kod upisa stavke u tablicu ulaza
- generira jedinstveni ID za tablicu ulaza
- dodaje količinu u tablisu skladišta



[ salvaric @ 05.05.2016. 09:33 ] @
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:
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.

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š.
[ dragancesu @ 05.05.2016. 12:03 ] @
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

[ komplikator @ 09.05.2016. 11:56 ] @
Ili još bolje da napiše storu (bit će znatno brža), no ako se ne varam baza mu je na Accessu.
[ popmilan76 @ 11.05.2016. 18:57 ] @
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...
[ captPicard @ 11.05.2016. 19:54 ] @
Samo stavi u zagrade taj drugi query i to je to.
[ popmilan76 @ 11.05.2016. 20:15 ] @
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....
[ popmilan76 @ 11.05.2016. 20:31 ] @
Uspeo sam,ali me zanima jel moguce sve te queryija staviti u jedan...
[ captPicard @ 12.05.2016. 06:33 ] @
Select* from (select* from (select * from))