Kada hocu da numerisem neki,recimo radni nalog,do sada sam obicno koristio brojeve,pa count +1 za svaki sledeci.Medjutim,sada iz odredjenog razloga,mi treba da bude u formatu 3-2019.Dakle redni broj \ godina,i da sledeci bude 4-2019, da kada bude nova godina krene od 1-2020.Kako to izvesti?
Numaracija u formatu int\year
Zaključano
Zakačeno
Par resenja:
- cuvaj samo redni broj (4 umesto 4/2019) a godinu uzmi iz datuma dokumenta.
- procitas poslednji dodeljeni (4/2019), razdvojis na delove i dodas 1 na prvi deo.
- cuvaj samo redni broj (4 umesto 4/2019) a godinu uzmi iz datuma dokumenta.
- procitas poslednji dodeljeni (4/2019), razdvojis na delove i dodas 1 na prvi deo.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
I mislio sam tako...a kako cu da krece od 1 ako nova godina?
> I mislio sam tako...a kako cu da krece od 1 ako nova godina?
Ako nema drugih dokumenata u tekucoj godini onda stavi 1.
BTW mislim da je bolje da ti samo ponudis broj, a da korisnik sam moze to da promeni u sta zeli.
Ako nema drugih dokumenata u tekucoj godini onda stavi 1.
BTW mislim da je bolje da ti samo ponudis broj, a da korisnik sam moze to da promeni u sta zeli.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
> BTW mislim da je bolje da ti samo ponudis broj, a da korisnik sam moze to da promeni u sta zeli.
Mislim da je ovo jaaako loša ideja. Imat češ istih brojeva koliko hočeš.
Ja sam dodao field "godina" u koji upisujem godinu računa (izdvojena iz datuma), pa je select jednostavan. Suvišan podatak, može i iz datuma, ali mi je ovako zgodnije, a i kasnije je preglednije.
Mislim da je ovo jaaako loša ideja. Imat češ istih brojeva koliko hočeš.
Ja sam dodao field "godina" u koji upisujem godinu računa (izdvojena iz datuma), pa je select jednostavan. Suvišan podatak, može i iz datuma, ali mi je ovako zgodnije, a i kasnije je preglednije.
> Mislim da je ovo jaaako loša ideja. Imat češ istih brojeva koliko hočeš.
Broj dokumenta mora biti jedinstven, ako pricamo o fakturama, profakturama (cak i delovodniku), korisnici zahtevaju izbor broja dokumenta, na softveru je da to isprati.
Broj dokumenta mora biti jedinstven, ako pricamo o fakturama, profakturama (cak i delovodniku), korisnici zahtevaju izbor broja dokumenta, na softveru je da to isprati.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Ja sam mislio ovako ,da ovaj broj ide redom,da napravim kolonu gde je samo godina,i da kao broj radnog naloga ili dokumenta bude string 2-2019,dvojku vuce iz rednog broja,godinu iz godine a novu da napravim kveri da krece od 1 ,posto je curernt year <> godina...
Verovatno koristite bazu gde cuvate info. oko izdatih dokumenata (fakutre, profakture i sl.).
Predlog resenja:
- U bazi gde se cuvaju dokumenta za svaki dokument dodeliti jedinstveni broj (recimo DokumentID) koji nema veze sa brojem dokumenta koji se pojavljuje na samome dokumentu tj. 1...n/yyyy gde je n broj dokumenta a yyyy godina u kojoj je isti izdat;
- U delu gde se cuvaju osnovne informacije o dokumentu u bazi dodati polje broj dokumenta staviti da je recimo numerickog tipa ili kako vec je potrebno - mozda text/string;
- U programu napraviti f-ju koja vraca prvi sledeci broj za NOVI dokument gde je ulazna vrednost godina za koju se kreira broj dokumenta (ovo je na nivou aplikacije ali moze i na nivou same baze);
Primer tabele za osnovne info. o dokumentu koji se cuva u bazi (bez statvki dokumenta - posebna tabela):
[Dokumenta]
DokumentID
TipDokumentaID (faktura, profaktura, fiskalni racun...)
BrojDokumenta
DatumIzdavanja
MestoIzdavanjaID
...
Tako da pozivanjem f-je u app se vrsi generisanje novog broja dokumenta gde je ulazna vrednost datum/godina, f-ja potom vraca odgovarajuci format broja dokumenta kako je potrebno.
Isto ovo moze da se odradi i pomocu vec predefinisanih procedura (stored procedure) na DBMS nivou i onda istu proceduru pozvati po potrebi kako bi se izbeglo mesanje BI i DBMS dela a sto opet zavisi od koncepta i logike koja se koristi prilikom izrade samog projekta. Ovim nacinom bi se onda generisanje brojeva mozda cak i ubrzalo ali i bilo sutra prakticnije za odrazavanje ako je potrebno menjati nesto i u samom formatu (onda nemate potrebu da menjate aplikaciju).
Sto se tice setovanja brojaca da krene od 1 za svaku godinu, vi kada pozivate f-ju mozete da stavite da je podrazumevani parametar uvek tekuca godina koja se iscitava iz trenutnog datuma;
Nadam se da ce ova nabacana pisanija pomoc.
p.s.
- nema potrebe dodavati posebno godinu kao polje iz razloga sto vec imate datum izdavanja dokumenta i na osnovu te vrednosti uvek mozete dobiti godinu cak i kao izvedeno polje preko f-ja i na samom DBMS nivou tj. upita;
- deo oko genersianja novog broja se vrsi recimo kreiranjem SELECT upita nad dokumentima gde se uzima najveci broj dokumenta za vremenski period od godinu dana gde je godina i period napravljen i dobijen od ulazne vrednosti (godina-yyyy) tj. 01/01/yyyy - 31/12/yyyy ili ako je datum onda mogu i varijacije gde bi se f-ja prosirila za neke dodatne potrebe oko generisanja vrednosti - recimo do tog datuma od pocetka godine ili samo za taj datum i sl. - stvar slucajeva i potreba. Pomocu SELECT upita takodje kada se kreira izvestaj ili vrsi stampanje od datuma izdavanja uvek moze da se izvuce godina i da se ista u odgovarajucem obliku 'doda i zalepi' pored broj dokumenta kada se vrsi stampanje kao i da se naprave gotovi upiti za ove potrebe.
Predlog resenja:
- U bazi gde se cuvaju dokumenta za svaki dokument dodeliti jedinstveni broj (recimo DokumentID) koji nema veze sa brojem dokumenta koji se pojavljuje na samome dokumentu tj. 1...n/yyyy gde je n broj dokumenta a yyyy godina u kojoj je isti izdat;
- U delu gde se cuvaju osnovne informacije o dokumentu u bazi dodati polje broj dokumenta staviti da je recimo numerickog tipa ili kako vec je potrebno - mozda text/string;
- U programu napraviti f-ju koja vraca prvi sledeci broj za NOVI dokument gde je ulazna vrednost godina za koju se kreira broj dokumenta (ovo je na nivou aplikacije ali moze i na nivou same baze);
Primer tabele za osnovne info. o dokumentu koji se cuva u bazi (bez statvki dokumenta - posebna tabela):
[Dokumenta]
DokumentID
TipDokumentaID (faktura, profaktura, fiskalni racun...)
BrojDokumenta
DatumIzdavanja
MestoIzdavanjaID
...
Tako da pozivanjem f-je u app se vrsi generisanje novog broja dokumenta gde je ulazna vrednost datum/godina, f-ja potom vraca odgovarajuci format broja dokumenta kako je potrebno.
Isto ovo moze da se odradi i pomocu vec predefinisanih procedura (stored procedure) na DBMS nivou i onda istu proceduru pozvati po potrebi kako bi se izbeglo mesanje BI i DBMS dela a sto opet zavisi od koncepta i logike koja se koristi prilikom izrade samog projekta. Ovim nacinom bi se onda generisanje brojeva mozda cak i ubrzalo ali i bilo sutra prakticnije za odrazavanje ako je potrebno menjati nesto i u samom formatu (onda nemate potrebu da menjate aplikaciju).
Sto se tice setovanja brojaca da krene od 1 za svaku godinu, vi kada pozivate f-ju mozete da stavite da je podrazumevani parametar uvek tekuca godina koja se iscitava iz trenutnog datuma;
Nadam se da ce ova nabacana pisanija pomoc.
p.s.
- nema potrebe dodavati posebno godinu kao polje iz razloga sto vec imate datum izdavanja dokumenta i na osnovu te vrednosti uvek mozete dobiti godinu cak i kao izvedeno polje preko f-ja i na samom DBMS nivou tj. upita;
- deo oko genersianja novog broja se vrsi recimo kreiranjem SELECT upita nad dokumentima gde se uzima najveci broj dokumenta za vremenski period od godinu dana gde je godina i period napravljen i dobijen od ulazne vrednosti (godina-yyyy) tj. 01/01/yyyy - 31/12/yyyy ili ako je datum onda mogu i varijacije gde bi se f-ja prosirila za neke dodatne potrebe oko generisanja vrednosti - recimo do tog datuma od pocetka godine ili samo za taj datum i sl. - stvar slucajeva i potreba. Pomocu SELECT upita takodje kada se kreira izvestaj ili vrsi stampanje od datuma izdavanja uvek moze da se izvuce godina i da se ista u odgovarajucem obliku 'doda i zalepi' pored broj dokumenta kada se vrsi stampanje kao i da se naprave gotovi upiti za ove potrebe.
Čuvaj odvojeno redni broj i godinu.
Code:
uses DateUtils;
var
Godina,redniBroj:Word;
...
očitaš Godina,redniBroj
begin
if YearOf(ToDay) <> Godina then
begin
Godina:= YearOf(ToDay);
redniBroj:=0;
end;
inc(redniBroj);
Rezutat:=Format('%d'-%d',[redniBroj,Godina])
end;
...
snimiš Godina,redniBroj
uses DateUtils;
var
Godina,redniBroj:Word;
...
očitaš Godina,redniBroj
begin
if YearOf(ToDay) <> Godina then
begin
Godina:= YearOf(ToDay);
redniBroj:=0;
end;
inc(redniBroj);
Rezutat:=Format('%d'-%d',[redniBroj,Godina])
end;
...
snimiš Godina,redniBroj
- nije dobra verzija za redni broj računa staviti char polje, treba integer, razlog? select max(redn_broj) neće vratiti ispravnu vrijednost kao što niti sort ne radi ispravno ako se integer upisuje kao text.
u prvom primjeru godina se isčitava iz datuma fakture, a u drugom se koristi posebni field za godinu. Meni osobno je pogodniji prvi jer nemam nepotrebne godine i upisa...
U Delphi-u učitaš Qry.FieldByName('broj').asInteger + 1 što ti daje sljedeći redni broj.
Ako je prva faktura u godini, select će vratiti NULL, ali će ti ga Delphi "asInteger" vratiti kao "0".
Godinu šalješ kao parametar tako da ne mijenjaš qry.
Normalno, u where možeš ubaciti i tip dokumenta ako su ti u istoj tablici npr:
where godina = :godina and tip_dok = :tip_dok
Code:
select max(broj_fakture) as broj from fakture where extract(year from datum_fakture) = 2018
ili
select max(broj_fakture) as broj from fakture where godina_fakture = 2018
select max(broj_fakture) as broj from fakture where extract(year from datum_fakture) = 2018
ili
select max(broj_fakture) as broj from fakture where godina_fakture = 2018
u prvom primjeru godina se isčitava iz datuma fakture, a u drugom se koristi posebni field za godinu. Meni osobno je pogodniji prvi jer nemam nepotrebne godine i upisa...
U Delphi-u učitaš Qry.FieldByName('broj').asInteger + 1 što ti daje sljedeći redni broj.
Ako je prva faktura u godini, select će vratiti NULL, ali će ti ga Delphi "asInteger" vratiti kao "0".
Godinu šalješ kao parametar tako da ne mijenjaš qry.
Normalno, u where možeš ubaciti i tip dokumenta ako su ti u istoj tablici npr:
where godina = :godina and tip_dok = :tip_dok
Da,hvala svima na pomocu,ali cu videti ako budem mogao bez toga vraćanja i da samo ispisuje na preview jer tu i treba,a da vraća i ne mora,jer bih morao da menjam i bazu,a to mi je posao,kada nisam u startu predvideo to.