[ vlade_k6 @ 17.07.2008. 11:48 ] @
Sql baza 2000, tabela fakture. Ne umem da odradim mehanizam za zaštitu preskakanja brojeva faktura, tj često se događa da ako je zadnji broj bio npr 2340, komercijalisti previde i nastave 2431, 2432, 2433... i onda nastaje problem. Da li neko zna da napravi okidač koji će onemogućiti preskakanje brojeva? Kolone koje su bitne su
racunbr - broj računa
racungod - godina računa (07, 08...)
magacin - broj magacina (1,2,3)

Znači bilo bi mi potrebno da okidač proveri prvo koji je magacin u pitanju, pa koja je godina i tek onda da vidi da li je preskočen neki broj. Napominjem da se brojevi u magacinima posebno vode i da od početka godine svi kreću ponovo od 1, 2, 3....
[ priki @ 17.07.2008. 13:48 ] @

de pojani malo bolje, ja ovde ne vidim preskakanje

Citat:
vlade_k6:  zadnji broj bio npr 2340, komercijalisti previde i nastave 2431, 2432, 2433... i onda nastaje problem

Znači bilo bi mi potrebno da okidač proveri prvo koji je magacin u pitanju, pa koja je godina i tek onda da vidi da li je preskočen neki broj. Napominjem da se brojevi u magacinima posebno vode i da od početka godine svi kreću ponovo od 1, 2, 3....


inace, imas jednostavan upit koji ti to sredi
[ vlade_k6 @ 17.07.2008. 18:20 ] @
Pa naveo sam da posle 2340 upišu 2431...
Slažem se da postoji jednostavan upit za ovo, samo mi daj ideju kako da to rešim. :)
[ goranvuc @ 17.07.2008. 19:02 ] @
Pa proveris da li ima prethodni (u tvom slucaju 2430) i ako nema ponistis izmenu, generises error ...
Mozes koristiti insteadofupdate trigger (bilo vec ovde).
[ sallle @ 18.07.2008. 01:01 ] @
men se cini da ti je onda koncept los.

ne treba komercijalista da dodeljuje broj racuna posto gresi. umesto da handlujes njegovu gresku, napravi da program dodeljuje broj fakture. a komercijalisti to samo nek se prikaze na ekranu.

prilikom otvaranja forme za fakturu, u polje za broj fakture upisi rezultat upita: select max(isnull(broj_fakture,0))+1 from tabela where magacin = @magacinId and godina=@godinaId.
a ako imas konkurentni rad( vise klijenatA), onda nemoj nista prikazivati, nego prilikom upisa fakture, izvrsi ovaj upit (oboje u istoj transakciji)

ukoliko imas opciju brisanja faktura, imaces opet preskakanje...
[ Koce @ 18.07.2008. 10:44 ] @
I ja se slazem za Sallle-om da ti je koncept los tj da ne treba korisnik da vodi racuna o rednim brojevima. Ako ipak nisi u mogucnosti da mijenjas aplikaciju, mozes to pokusati izvesti sa trigerom, nesto kao:

Create trigger tr_Faktura on fakture
INSTEAD OF insert -- ne treba ti update?
as
declare @br1 as int, @br2 as int
select @br1 = min(broj_fakture) from inserted
select @br2 = max(isnull(broj_fakture, 0)) from fakture --where god...
if @br1 <> @br2 + 1
BEGIN
RAISERROR ('preskocio si broj', 16, 1)
ROLLBACK TRANSACTION
END
else
insert into fakture select * from inserted


napomena da ovo ti radi za red po red, ako nekad upisujes vise redova odjednom (mada kako si objasnio mislim da ne), moraces malo promijeniti ....

ili mozes umjesto ROLLBACK TRANSACTION
staviti
if @@trancount > 0 ROLLBACK TRANSACTION
[ vlade_k6 @ 18.07.2008. 14:14 ] @
Odlično, ovo šljaka. Za sada nisu dozvolili da se automaski numerišu fakture (da ne pričam što) tako da ću se ovako snaći.

Hvala puno.