[ popmilan76 @ 08.04.2016. 15:42 ] @
Radim aplikaciju za racunanje PDV,i imam jednu nedoumicu,kada racunam poresku stopu,imam kolonu u kojoj je procenat poreske stope,da li pravim posebno polje u bazi za iznos pdv(mislim na iznos u dinarima) ili je to polje calculate...
[ _deran_ @ 08.04.2016. 20:45 ] @
Može... a i ne mora bit :)
Generalno ne bi trebalo upisivati podatak koji možeš dobiti na osnovu ostalih koje upisuješ. Ja eventualno "dupliram" podatak koji dobijem nekim silnim računanjima a koji mi treba kasnije za neki komplikovan izveštaj pa tu dobijem na brzini. No, tu se baš mora voditi računa o update-u tog izračunatog podatka ako se menja bilo šta što utiče na njega. Neki prost primer bi bila vrednost računa koja je suma vrednosti stavki. Kad ti treba suma svih računa, ne moraš trčati po svim stavkama i sumirati nego sumiraš iz zaglavlja računa. To nema smisla kad ima puno računa sa po jednom ili dve stavke, ali kad jedan račun ima 200 stavki i tako 5000 računa to ti može olakšati. Sve zavisi šta će program da ti radi, i kako je organizovan taj za koga radiš. I onda ako se takav izveštaj vadi jednom godišnje, zaboraviš sve to :)
[ popmilan76 @ 08.04.2016. 21:02 ] @
Nisam ni mislio da updatujem u bazi,vec odmah u formi,prilikom unosa.....
[ salvaric @ 09.04.2016. 08:59 ] @
Bilo bi dobro da upisuješ, iz razloga što se nekad menja poreska stopa, pa ćeš imati problema sa analizom unazad, u koliko je radiš, pa čak da upisuješ i iznos poreske stope, barem ja tako praktikujem, a primetio sam isti sistem i u par knjigovodstvenih softwera, mislim da znatno ubrzava operacije (obračune i sl.), jeste da malo povećava bazu al po meni se isplati žrtvovati prostor za to, nećeš posle imati nikakvih problema prilikom bilo kakve izmene poreza i sl.

[ savkic @ 09.04.2016. 10:20 ] @
Mora svakako upisati cenu artikla i iznos poreske stope a odatle moze sracunati vrednost poreza. Sad da li ce to pisati u bazi ili racunati po potrebi je po zelji, cini mi se da nema bitnije razlike.
[ salvaric @ 09.04.2016. 10:41 ] @
Izvinjavam se, nisam dobro pročitao pitanje, mislio sam da imaš kolonu sa stopom poreza u tabeli sa artiklima a ne u tabeli stavki računa ili čega li već.
[ popmilan76 @ 09.04.2016. 18:09 ] @
Ovo sam uradio,i mislim da cu upisivati u bazu cenu pdv....I sada imam jos nesto.....

Kako da kada kliknem na combobox,recimo pdv,gde mi izlazi sledece
1-20%
2-10%
3-0%

da mi prilikom klika na cb izlazi samo 20,10,0 ali da pamti ovaj pdvid,i da kada unesem to u bazi upisujem te id brojeve,za sada radim tako sto mi izlazi 1-20 i upisujem samo prvi deo,ali mi ovo prvo deluje logicnije...
Jel moguce to izvesti...
[ popmilan76 @ 09.04.2016. 20:02 ] @
Nesto sam uspeo,ali ono sto mi treba jeste kako da napravim varijablu i da je prenesem u drugu formu i da je koristim tamo...Varijabla je inace iz adoquery
[ popmilan76 @ 10.04.2016. 15:47 ] @
Za prikazivanje dva polja u coboboksu i koriscenja jednog polja...koristim ovaj deo objecta

sifrakli:=IntToStr(INTEGER(TObject(ComboBox1.Items.Objects[ComboBox1.ItemIndex])));

I kada treba da ga koristim u query,prikazuje gresku kao nekompatibilnost izmedju polja,koji je integer i ovog stringa,koji prebacim u integer i prikazuje gresku,nesto kao compatability integer i tobject....
[ popmilan76 @ 10.04.2016. 16:41 ] @
takodje mi treba query od jednog do drugo datuma,koristim ovo,ali nece ne znam iz kog razloga


adoquery3.Close;
adoquery3.SQL.Clear;
adoquery3.SQL.Add('select * from inventar');
adoquery3.SQL.Add('WHERE datum BETWEEN :pocetak AND :kraj');
adoquery3.Parameters.ParamByName('pocetak').Value := datetimepicker1.Date;
adoquery3.Parameters.ParamByName('kraj').Value := datetimepicker2.Date;
adoquery3.ExecSQL;
[ captPicard @ 10.04.2016. 17:54 ] @
1. Kada pitas za pomoc barem napisi koju gresku dobivas
2. Koristi code tagove, preglednije je
3. Izbjegavaj .Value, koriati tocan tip podataka
4. Pogledaj format datuma koji koristi tvoja baza i format koji imas u datepickeru
[ captPicard @ 10.04.2016. 17:56 ] @
Za combobox si napravi funkciju koja cita segmente razdvojene separatore. Mozes koristiti Pos, Copy itd...
[ popmilan76 @ 10.04.2016. 18:13 ] @
Za kompletnu pretragu koristim sledeci kod,i to po klijentima,po poreskoj stopi i treba mi jos po datumu


var
sifrakli1 : integer;
begin
sifrakli:=inttostr(INTEGER(TObject(ComboBox1.Items.Objects[ComboBox1.ItemIndex])));
sifrapdv:=inttostr(INTEGER(TObject(ComboBox2.Items.Objects[ComboBox2.ItemIndex])));

adoquery3.Close;
adoquery3.SQL.Clear;
adoquery3.SQL.Add('SELECT Klijenti.NazivKlijenta, Artikal.NazivArt, Inventar.Kolicina, JM.NazivJM, PDV.Procenat, Inventar.CenaPDV, Inventar.Cena FROM PDV');
adoquery3.SQL.Add('INNER JOIN (Klijenti INNER JOIN (JM INNER JOIN (Artikal INNER JOIN Inventar ON Artikal.SifraArt = Inventar.SifraArt)');
adoquery3.SQL.Add(' ON (JM.JM = Inventar.JM) AND (JM.JM = Artikal.JM)) ON Klijenti.SifraKlijenta = Inventar.SifraKlijenta) ON (PDV.PDV = Inventar.PDV) AND (PDV.PDV = Artikal.PDV)');
adoquery3.SQL.Add('where klijenti.sifraklijenta in (' + (sifrakli) + ')');
adoquery3.SQL.Add('and pdv.pdv in (' + (sifrapdv) + ')');


adoquery3.Open;


U tabeli inventar imam polje datum,sa short datumom,treba na ovaj gore kod da doodam jos samo po datumima,gde imam 2 datetimepicker ,od do...
[ salvaric @ 11.04.2016. 14:52 ] @
Ako si pravilno popunio objekat u cb kod:
Code:
sifrakli:=inttostr(INTEGER(TObject(ComboBox1.Items.Objects[ComboBox1.ItemIndex])));

i ako ti vraća vrednost koju tražiš, trebalo bi da radi.

Da li ti bez poslednja dva reda prolazi kod i ispisuje rezultat?
Code:
adoquery3.Close;
adoquery3.SQL.Clear;
adoquery3.SQL.Add('SELECT Klijenti.NazivKlijenta, Artikal.NazivArt, Inventar.Kolicina, JM.NazivJM, PDV.Procenat, Inventar.CenaPDV, Inventar.Cena FROM PDV');
adoquery3.SQL.Add('INNER JOIN (Klijenti INNER JOIN (JM INNER JOIN (Artikal INNER JOIN Inventar ON Artikal.SifraArt = Inventar.SifraArt)');
adoquery3.SQL.Add(' ON (JM.JM = Inventar.JM) AND (JM.JM = Artikal.JM)) ON Klijenti.SifraKlijenta = Inventar.SifraKlijenta) ON (PDV.PDV = Inventar.PDV) AND (PDV.PDV = Artikal.PDV)');
// adoquery3.SQL.Add('where klijenti.sifraklijenta in (' + (sifrakli) + ')');
// adoquery3.SQL.Add('and pdv.pdv in (' + (sifrapdv) + ')');


Ne vidim razlog što navodiš u upitu zahtev filtriranja "in (' + (sifrakli) + ')'" kada ti sifrakli i sifrapdv vraća samo po jednu vrednost a ne niz, koristi znak jednakosti.
[ popmilan76 @ 11.04.2016. 20:45 ] @
Da,prolazi,a koristim ovaj in clause,jer mi je to bilo zgodno tako a i nije htelo nesto taj indeks iz comboboxa,a ovako hoce......Samo ne znam kako da dodatm i taj deo dauma od do...to me zeza,stavio sam ovaj query kao filter i to radi sa dva datetimepickera,ali mi to nije resenje....
[ salvaric @ 12.04.2016. 07:14 ] @
Code:
adoquery3.Close;
adoquery3.SQL.Clear;
adoquery3.SQL.Add('select * from inventar');
adoquery3.SQL.Add('WHERE datum BETWEEN :pocetak AND :kraj');
adoquery3.Parameters.ParamByName('pocetak').Value := datetimepicker1.Date;
adoquery3.Parameters.ParamByName('kraj').Value := datetimepicker2.Date;
//adoquery3.ExecSQL;
adoquery3.Open;


Iskoristi ovaj kod, trebalo bi da radi, samo umesto ExecSQL ti ide Open.

Pokušaj i
Code:
adoquery3.Parameters.ParamByName('pocetak').Value := DateToStr(datetimepicker1.Date);
adoquery3.Parameters.ParamByName('kraj').Value := DateToStr(datetimepicker2.Date);


[Ovu poruku je menjao salvaric dana 12.04.2016. u 08:31 GMT+1]
[ popmilan76 @ 12.04.2016. 13:02 ] @
Hoce ovaj drugi kod,ali ako idem od istog datuma do istog datuma,nece da pokaze taj rezultat...npr datum mi je 11.04.2016,i idem u datetimepicker1 taj datum,iu datetimepicker2 isti datum,nema nista,ali ako idem od 11.04.2016 do 12.04.2016 godine,prikazuje ono pod 11.04.2016
[ salvaric @ 12.04.2016. 13:58 ] @
Imaš u primeru dve varijante filtriranja i rade kako treba.
[ popmilan76 @ 13.04.2016. 22:33 ] @
Da ne otvaram novu temu,pisacu ovde....Cudno se nesto desava....kada otvorim formu,otvori se query1
select max(sifraart + 1 ) as ....from arikal,i popuni edit1 iz ovog kverija,ali kada ubacujem poatke u tabelu,treba da se u tom edit1,pojavi sledeci broj...evo koda iz bitbtn1....


procedure TFrmJM.BitBtn1Click(Sender: TObject);
begin
try
adotable1.Close;
adotable1.Open;
adotable1.Insert;
adotable1JM.Value := strtoint(edit1.Text);
adotable1NazivJM.Value := edit2.Text;
adotable1.Post;


adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select max(jm + 1) as novasifra from jm');
adoquery1.Open;

edit1.Text := adoquery1novasifra.AsString;
edit2.SetFocus;
finally
adotable1.Refresh;

end;

end;

I u ovm slucaju ubaci,ali nece sledeci redni broj,ali ako dodam jos jedno dugme,samo sa ovim delom vezanim za query,onda ga prebaci,ali zajedno nece....Mislim da sam ovako uvek radio i htelo,sa obicnim queryem,ali je mozda to zbog ada...
[ savkic @ 13.04.2016. 23:03 ] @
> Cudno se nesto desava....kada otvorim formu,otvori se
> query1 select max(sifraart + 1 ) as ....from arikal,

koristi max(sifra) + 1...

> i popuni edit1 iz ovog kverija,ali kada ubacujem poatke u tabelu,treba da se u tom edit1,pojavi sledeci broj...evo koda iz bitbtn1....

> I u ovm slucaju ubaci,ali nece sledeci redni broj,ali ako dodam jos jedno dugme,samo sa ovim delom vezanim za query,onda ga prebaci,ali
> zajedno ece....Mislim da sam ovako uvek radio i htelo,sa obicnim queryem,ali je mozda to zbog ada...

Koristiš dve komponente, kveri i table i verovatno nisu pod istom transakcijom pa kveri ne vidi promene.
[ popmilan76 @ 14.04.2016. 13:25 ] @
Pa kako to da izvedem,da mi popunjava redni broj redom...ja cak zatvorim tu tablu,i otvorim ponovo query i nece....Dakle,posle unosa edit1.text ,koji je recimo 5,kada unesem to u tabelu,da mi prikaze sledeci broj,dakle 6,i sve tako redom....
[ savkic @ 14.04.2016. 13:39 ] @
> Pa kako to da izvedem,da mi popunjava redni broj redom...ja cak zatvorim tu tablu,i otvorim ponovo query i nece....Dakle,posle unosa
> edit1.text ,koji je recimo 5,kada unesem to u tabelu,da mi prikaze sledeci broj,dakle 6,i sve tako redom....

Za pocetak se postaraj da sve komponente rade pod istom transakcijom (najbolje da je pod tvojom kontrolom), drugo bih preporučio da koristiš kveri komponente za sve (insert i select). Sa trenutnom konfiguracijom koju koristiš, teško je reći šta je korektan redosled jer to zavisi od implementacije biblioteke, generalno pravilo (uglavnom radi kod svih bibloteka) je:
ModifyDataSet.Transation.Commit; // Upisuju se sve izmene
SelectDataset.Close;
SelectDataSet.Transaction.StartTransaction; // Obezbeđuje se da transakcija vidi najsvežije podatke
SelectDataSet.Open;