podrska finansijskom knjigovodstvu
DESCRIPTION
Master Rad - Goran PanićTRANSCRIPT
UNIVERZITET U NOVOM SADU
FAKULTET TEHNIČKIH NAUKA
NOVI SAD
Odsek: Računarstvo i automatika / Smer: Računarske nauke i
informatika
DIPLOMSKI – MASTER RAD
Kandidat: Goran Panić
Broj indeksa: E 9286
Tema rada: Razvoj aplikacije za podršku finansijskom
knjigovodstvu
Mentor rada: dr Dragan Mihajlović
Novi Sad 2008.
2
3
ZADATAK DIPLOMSKOG RADA
Upoznati se sa finansijskim knjigovodstvom. Realizovati desktop aplikaciju za podršku finansijskom knjigovodstvu sa sledećim osnovnim funkcijama:
ažuriranje podataka o preduzeću i zaposlenima,
ažuriranje kontnih okvira preduzeća,
otvaranje naloga, dodavanje finansijskih promenama na nalog i generisanje promena
u glavnoj knjizi,
generisanje periodičnih i godišnjih izveštaja o poslovanju.
Aplikacija treba da funkcioniše u skladu sa pravilima finansijskog knjigovodstva.
Kao sistem za upravljanje bazom podataka koristiti Microsoft SQL Server 2005
Express, a za izradu modela baze podataka koristiti alat PowerDesigner. Implementaciju
aplikacije uraditi u programskom jeziku C# uz korišćenje alata Microsoft Visual Studio 2005 C# Express.
4
5
SADRŽAJ 1. UVOD .............................................................................................................................. 7 2. SPECIFIKACIJA .............................................................................................................. 9 2.1 Ciljevi programa ............................................................................................................. 9 2.2 Osnovne funkcionalnosti programa ................................................................................. 9
2.2.1 Ažuriranje podataka teritorijalne organizacije ........................................................... 9 2.2.2 Ažuriranje podataka organizacije preduzeća ............................................................. 9 2.2.3 Kontni okvir ........................................................................................................... 10 2.2.4 Poslovna godina ..................................................................................................... 10 2.2.4 Nalog ..................................................................................................................... 10 2.2.5 Vrste naloga za knjiženje........................................................................................ 11 2.2.6 Knjiženje i storno naloga ........................................................................................ 11 2.2.7 Finansijske promene............................................................................................... 11 2.2.8 Glavna knjiga ......................................................................................................... 11 2.2.9 Generisanje finansijskih izveštaja ........................................................................... 11 2.2.10 Administracija naloga........................................................................................... 15 2.2.11 Pomoć korisniku .................................................................................................. 16 2.2.12 Instalacija, reinstalacija i brisanje programa .......................................................... 16
2.3 Baza podataka ............................................................................................................... 16 2.3.1 Model objekti – veze – obeležja ............................................................................. 16 2.3.2 Relacioni model podataka ...................................................................................... 17
2.4 Sybase Power Designer ................................................................................................. 18 2.5 Programski jezik C# ...................................................................................................... 18 2.6 Microsoft SQL Server ................................................................................................... 18 2.7 Microsoft Visual Studio ................................................................................................ 19 2.8 NET Framework ........................................................................................................... 20 3. IMPLEMENTACIJA ...................................................................................................... 21 3.1 Dijagram toka podataka ................................................................................................. 21 3.2 Izrada konceptualnog modela ........................................................................................ 21 3.3 Generisani fizički model................................................................................................ 27 3.4 Logika sistema .............................................................................................................. 32 3.5 Problemi prilikom implementacije ................................................................................. 32 3.6 Instalacija ...................................................................................................................... 32 3.7 Implementirane funksionalnosti ..................................................................................... 33
3.7.1 Prijavljivanje na sistem .......................................................................................... 33 3.7.2 Izgled aplikacije ..................................................................................................... 34 3.7.3 Meni ...................................................................................................................... 35 3.7.4 Standardni prozor ................................................................................................... 39 3.7.5 Generisanje izveštaja .............................................................................................. 40 3.4.6 Poruka korisniku .................................................................................................... 43 3.7.7 Izrada sigurnosne kopije ......................................................................................... 43
3.8 Testiranje aplikacije ...................................................................................................... 45 4. ZAKLJUČAK ................................................................................................................. 47 5. PRILOG ......................................................................................................................... 49 5.1 Store procedure ............................................................................................................. 49 5.2 Trigeri ........................................................................................................................... 59 5.3 Primeri generisanih izveštaja ......................................................................................... 66 5.4 Uputstvo za instalaciju .................................................................................................. 73
5.4.1 Serverska strana ..................................................................................................... 73 5.4.2 Klientska strana...................................................................................................... 74
6. LITERATURA ............................................................................................................... 75 7. BIOGRAFIJA ................................................................................................................. 77
6
7
1. UVOD
Pre pojave računara ljudi su se bavili knjigovodstvom. Potom je došla era računara, u
kojoj se mnoge stvari automatizuju. Automatska obrada podataka pružila je mogućnost
paralelnog i trenutnog pristupa podacima, čak i sa udaljenih lokacija i time omogućila
efikasnije ažuriranje podataka. Pogodnosti automatske obrade podataka dovode do pojave aplikacija za pružanje podrške knjigovodstvu. Savremeno knjigovodstvo se uglavnom oslanja
na korišćenje knjigovodstvenih aplikacija, u svrsi alata koji automatizuju delove
knjigovodstvenih operacija. Cilj diplomskog rada je da se realizuje desktop aplikacija za podršku finansijskom
knjigovodstvu, korišćenjem C# programskog jezika i Microsoft SQL Server sistema za
upravljanje bazom podataka.
Rad je organizovan u sedam poglavlja:
U prvom poglavlju je dat kratak pregled onoga šta se želelo postići u ovom radu.
U drugom poglavlju je dat detaljan opis specifikacije zadatka, a u nastavku su
izložene metode i alati potrebni za realizaciju istog.
U trećem poglavlju je dat kratak opis implementacije datog programa i njegove
funkcionalnosti.
U četvrtom poglavlju je dat zaključak o realizovanom projektu i preporuke za
njegovo proširivanje.
U petom poglavlju su dati, kao prilog, saveti u vezi kreiranja dobrog korisničkog
interfejsa za poslovne aplikacije.
U šestom poglavlju je dat spisak korišćene literature.
U sedmom poglavlju su dati podaci o autoru programa.
8
9
2. SPECIFIKACIJA
Ovo poglavlje je posvećeno kraćem opisu finansijskog knjigovodstva i onoga što bi
trebalo da bude implementirano u aplikaciji. Biće izložene metode, tehnologije i alati pomoću
kojih je zadatak potrebno realizovati.
2.1 Ciljevi programa
Cilj programa je da obezbedi efikasno voĎenje poslovnih knjiga, sastavljanje i
podnošenje periodičnih ili godišnjih obračuna i izveštaja o poslovanju.
Knjigovodstveni metod koji će ovaj softver podržati je metod dvojnog
knjigovodstva. Dvojno knjigovodstvo se odnosi na dvostruki aspekt neke finansijske
transakcije. Nekoliko karakteristika dvojnog knjigovodstva:
1. Troškovi su evidentirani kad su napravljeni, a ne kad su plaćeni. Slično tome,
prihodi su evidentirani kad su zaraĎeni, a ne kad su primljeni 2. Priznavanjem finansijskih obaveza onda kada se dogode, a ne kad su plaćene ili
primljene, prevazilazi se vremenski raskorak i dobija stvarnija slika o finansijskoj
poziciji
3. Ovaj sistem se može baviti svim vrstama transakcija
2.2 Osnovne funkcionalnosti programa
Osnovne funkcionalnosti koje program treba da podrži:
Ažuriranje podataka teritorijalne organizacije
Ažuriranje podataka organizacije preduzeća
Kontni okvir
Poslovna godina
Nalog
Vrste naloga za knjiženje
Knjiženje i storno naloga
Finansijske promene
Glavna knjiga
Generisanje finansijskih izveštaja
Administracija naloga
Pomoć korisniku
Instalacija, reinstalacija i brisanje programa
2.2.1 Ažuriranje podataka teritorijalne organizacije
Podaci teritorijalne organizacije obuhvataju podatke o državi, regionu i naseljenom
mestu. Potrebno je omogućiti njihov unos, izmenu i brisanje. Kod izmene i brisanja podataka
voditi računa da se ne naruši integritet podataka. Obezbediti prikaz i štampanje podataka,
pretraživanje po bitnijim kriterijumima, kao i njihovo uvezivanje sa srodnim podacima.
2.2.2 Ažuriranje podataka organizacije preduzeća
Podaci organizacije preduzeća obuhvataju podatke o preduzeću, sektorima unutar
preduzeća, službama unutar sektora i odeljenjima unutar službe. TakoĎe obuhvataju podatke o zaposlenima i referentima (pod referentima se podrazumevaju ljudi koji rade sa
programom), kao i šifarnik svih delatnosti i skup registrovanih delatnosti preduzeća.
10
Potrebno je omogućiti njihov unos, izmenu i brisanje. Kod izmene i brisanja podataka voditi
računa da se ne naruši integritet podataka. Obezbediti prikaz i štampanje podataka, pretraživanje po bitnijim kriterijumima, kao i njihovo uvezivanje sa srodnim podacima.
2.2.3 Kontni okvir
Treba omogućiti ažuriranje podataka kontnog okvira za aktivana preduzeća. Od tipova kontnog okvira potrebno je podržati: klasu konta, grupu konta, podgrupu konta,
sintetiku konta, analitiku konta i subanalitiku konta. Korisniku ponuditi mogućnost rada sa
kontnim okvirom od maksimalno 9 cifara (1+1+1+1+2+3).
Omogućiti unos novog kontnog okvira, njegovu izmenu i brisanje postojećeg kontnog okvira. Brisanje kontnog okvira će biti moguća samo za konta koja nisu već korišćena u
nekim nalozima, tj. nisu vezana ni za jedan nalog. Kontni okvir se može kreirati na početku
korišćenja programa, a potreba je omogućiti naknadni unos novih konta i njihovu izmenu u toku korišćenja programa. Za odabir vrste konta ponuditi izbor dugovnog i potražnog konta,
dozvoliti njihovu istovremenu selekciju. U slučaju odabira oba, izabran je dugovno-potražni
konto. Za način obračuna salda ponuditi opcije dugoni minus potražni ili potražni minus dugovni, onemogućiti istovremenu selekciju oba.
2.2.4 Poslovna godina
Poslovna godina se može razlikovati od kalendarske godine. Potrebno je omogućiti: Otvaranje nove poslovne godine – otvaranje početnog stanja: Nova poslovna
godina se označava četvorocifrenog brojem, koji je najčešće istovetan kalendarskoj godini.
Otvaranje početnog stanja za narednu poslovnu godinu se vrši jednom godišnje - na kraju
tekuće poslovne godine. Podaci koje korisnik unosi pri otvaranju početnog stanja su vrsta naloga i opis promene. Ukoliko su i saldo prihoda i saldo rashoda jednaki nuli ne otvara se
početno stanje. Kada se završi otvaranje početnog stanja tada se zatvara glavna knjiga.
Poslovna godina se može promeniti bez zaključivanja prethodne poslovne godine, kako bi se omogućio rad u slučaju da dolazi do preklapanja poslovnih godina.
Zatvaranje poslovne godine – zaključna knjiženja: Zaključna knjiženja se vrše
jednom godišnje, na kraju poslovne godine. Za zaključna knjiženja se kao i za početna stanja generišu nalozi za knjiženje. Prilikom zatvaranja poslovne godine korisnik pored vrste i opisa
naloga, unosi klasu prihoda i klasu rashoda. Zaključna knjiženja podrazumevaju da se zatvore
klase prihoda i rashoda. Pri zaključivanju knjiženja je neophodno da salda prihoda i rashoda u
glavnoj knjizi budu jednaka nuli. Nakon te operacije, program će automatski zaključiti sva konta u toj poslovnoj godini. Nakon što korisnik obavi sva knjiženja u jednoj poslovnoj
godini, treba mu omogućiti da zaključiti godinu. Kada je poslovna godina zaključena, mora se
onemogućiti bilo kakvo menjanje podataka u okviru te godine (treba omogućiti samo pregled uz mogućnost generisanja izveštaja).
2.2.4 Nalog
Osnovni ulazni dokumenat u programu za finansijsko knjigovodstvo jeste nalog za knjiženje. Nalog za knjiženje sadrži proizvoljno velik skup finansijskih promena, za koje je
zajedničko da pripadaju istom nalogu. Omogućiti ažuriranje podataka na nalogu.
Pored zakonske forme (broj naloga, datum knjiženja, dugovanje i potraživanje), treba omogućiti još unos vrste naloga, datuma kreiranja, ime referenta koji knjiži nalog i
status naloga. Ukoliko data vrsta naloga ne postoji u tabeli vrsta naloga, omogućiti unošenje
nove vrste naloga, a zatim i nastavak knjiženja. Odabir konta na nalogu, ne sme biti moguć
ukoliko dati konto nije definisan u kontnom okviru. Naloge je moguće menjati i brisati sve dok se ne proknjiže. Nad proknjiženim nalogom nije moguće dodavati nove finansijske
promene.
Potrebno je omogućiti prikaz i štampanje naloga, kao i pretragu po nekim parametrima naloga.
11
2.2.5 Vrste naloga za knjiženje
Korisniku pružiti mogućnost da sam kreira svoje vrste naloga. Preporučuje se da minimalno postoje tipovi: nalog, storno, otvaranje početnog stanja, zatvaranje glavne knjige i
zaključno knjiženje. Prilikom kreiranja nove vrste naloga za knjiženje, potrebno je uneti
oznaku vrste naloga (koja će jednoznačno predstavljati datu vrstu) i naziv vrste naloga.
2.2.6 Knjiženje i storno naloga
Knjiženje naloga: Svaki kreirani, neproknjiženi, nalog je moguće proknjižiti u
glavnu knjigu ukoliko se nalazi u ravnoteži. Nalog je u ravnoteži kada je suma dugovanja jednaka sumi potraživanja. Opcija knjiženja naloga je nepovratna i ona se može samo jednom
izvršiti nad odreĎenim nalogom. Nakon knjiženja nije moguće menjanje naloga niti njegovo
brisanje. U slučaju pojave neodgovarajućih podataka u proknjiženom nalogu, nalog se stornira.
Storno naloga: Omogućiti poništavanje (storniranje) proknjiženih naloga. Potrebno
je da program automatski generiše finansijske promene koje su suprotne od onih koje se
poništavaju. Nalog se može samo jednom stornirati. Neproknjižen nalog se ne može stornirati.
2.2.7 Finansijske promene
Potrebno je omogućiti ažuriranje podataka finansijskih promena u okviru naloga. Pri
unosu nove finansijske promene treba definisati: broj naloga koji sadrži promenu, redni broj
promene, konto, opis finansijske promene, smer promene (duguje ili potražuje), iznos
promene, datum kada je nastala promena i status (da li je proknjižena ili nije). Izmena i
brisanje finansijskih promena moguća je samo nad neproknjiženim nalogom. Potrebno je omogućiti prikaz, pretragu i štampanje finansijskih promena.
2.2.8 Glavna knjiga
Predstavlja najvažniji finansijski izveštaj. Ona je potrebno da sadrži podatke o kontu, poslovnoj godini, početnom stanju (duguje potražuje), prometu (duguje potražuje) i saldu
(duguje potražuje) svih proknjiženih naloga. Potrebno je omogućiti prikaz, pretragu i
štampanje podataka iz glavne knjige.
2.2.9 Generisanje finansijskih izveštaja
Potrebno je omogućiti generisanje i ponuditi mogućnost štampanja osnovnih
finansijskih izveštaja. Opisi osnovnih izveštaja, sa primerima štampanih izveštaja, biće navedeni u nastavku teksta. Pri pravljenju izveštaja voditi računa da podaci koji se prikazuju
na njima predstavljaju zakonom propisane podatke za odreĎene tipove izveštaja. Izveštaji
treba da budu jasni, bez suvišnih ulepšavanja. Poželjno je kreirati izveštaje koji daju
minimalan utrošak boje pri štampanju, a da se pri tome ne ugrozi preglednost izveštaja.
Analitički kontni okvir
Finansijski izveštaj analitičkog kontnog okvira potrebno je da sadrži sledeće podatke: naziv preduzeća, datum generisanja izveštaja, konto ili njegov deo, naziv klase, naizv grupe,
naziv podgrupe, naziv analitike. Primer generisanog izveštaja, dat je na slici 2.2.9.1.
12
Slika 2.2.9.1 – Primer izveštaja Analitički kontni okvir
Proknjižen nalog Izveštaj proknjižen nalog pored naziva preduzeća, datuma štampanja, rednog broja i
vrste naloga potrebno je da sadrži tabelarni prikaz sledećih stavki: datum proknjižavanja, opis
promene, konto, naziv subanalitike, iznos duguje, iznos potražuje i na kraju zbirne vrednosti dugovanja i potraživanja. Primer generisanog izveštaja, dat je na slici 2.2.9.2.
Slika 2.2.9.2 – Primer izveštaja Proknjižen nalog
13
Konto kartica (kartica analitike)
Svi novčani tokovi odreĎenog konta se nalaze na njegovoj kontnoj kartici. Na njoj se za pored zadatog naziva preduzeća, konta, naziva konta i vremenskog intervala za koji se
generiše izveštaj, nalazi tabelarni prikaz vrste naloga, broja naloga, naziva subanalitike,
dugovanja, potraživanja, salda i na kraju zbirne vrednosti dugovanja, potraživanja i salda.
Primer generisanog izveštaja, dat je na slici 2.2.9.3.
Slika 2.2.9.3 – Primer izveštaja Kartica analitike
Dnevnik promena
U dnevniku promene se pored zadatog naziva preduzeća i vremenskog intervala za koji se generiše izveštaj, prikazuje još i konto, vrstu i broj naloga, opis finansijske promene,
dugovanje, potraživanje, saldo i na kraju zbirne vrednosti dugovanja, potraživanja i salda za
ceo izabrani vremenski period. Primer generisanog izveštaja, dat je na slici 2.2.9.4.
Slika 2.2.9.4 – Primer izveštaja Promene po danima
14
Bruto bilans
Izveštaj bruto bilans predstavlja pregled finansijskih promena za svaki konto, a može se vršiti u toku ili na kraju godine. Sadrži oznaku konta, naziv konta, dugovanje i potraživanje
za početno stanje, dugovanje i potraživanje za tekući i za ukupni promet, i dugovanje i
potraživanje kao konačni saldo.
Izveštaj o bruto bilansu treba da omogući prikaz bruto bilansa za zadato preduzeće u zadatom vremenskom periodu. Primer generisanog izveštaja, dat je na slici 2.2.9.5.
Slika 2.2.9.5 – Primer izveštaja Bruto bilans
Rekapitaulacija bruto bilansa za godinu Rekapitulacija bruto bilansa predstavlja bruto bilan sumiran na nivou klasa konta.
Primer generisanog izveštaja, dat je na slici 2.2.9.6.
Slika 2.2.9.6 – Primer izveštaja Rekapitulacija bruto bilansa
15
Bilans stanja
Bilans stanja predstavlja izveštaj o tome šta preduzeće poseduje i koliko duguje. Ovaj izveštaj se pravi za pola godine ili za celu godinu. Dve najvažnije stavke koje bilans stanja
poseduje su aktiva i pasiva.
Aktiva se odnosi na sve ono što preduzeće poseduje: • Obrtna sredstva - novac u banci (devize, dinari, računi, blagajna)
• Obećanja koja su vam druge strane dale da će vam platiti (zovu se potraživanja)
• Dati avansi - unapred plaćeni troškovi (kao što je zakup) • Inventar
• Nameštaj
• Oprema • Nekretnine
Pasiva se odnosi na sve ono šta preduzeće duguje. U to spada:
• Obaveze koje imate prema drugoj strani, koje treba da platite (zovu se dugovanja) • Avansni grantovi (grantovi ili donacije koje ste primili unapred, pre nego što ste
izvršili stvarne usluge)
• Računi kreditnih kartica • Krediti iz banke
Primer izveštaja bilansa stanja dat je u knjizi “Računovodstvo, za III razred ekonomske škole”, na strani 171.
Bilans uspeha
Bilans uspeha je izveštaj koji evidentira prihode i rashode za celu godinu. Njegove osnovne stavke su:
• prihodi i rashodi iz redovnog poslovanja
• vanredne stavke • dobit pre oporezivanja
• gubitak pre oporezivanja
• porez na dobit
• neto dobit • neto gubitak
Primer izveštaja bilansa uspeha dat je u knjizi “Računovodstvo, za III razred ekonomske škole”, na strani 174.
2.2.10 Administracija naloga
Potrebno je podržati četiri grupe korisnika programa i to bilansistu, knjigovoĎu, šefa knjigovodstva i administratora.
Bilansisti teba dozvoliti da pregleda i menja podatke.
KnjigovoĎi dati pravo da pregleda glavnu knjigu i kontni okvir. Dozvoliti mu
da knjiži, ali ne i da menja kontni okvir.
Šefu knjigovodstva dati pravo da sve podatke pregleda ali ne i da ih menja.
Administrator treba da ima sva moguća prava.
Logovanje na sistem
Pri startovanju aplikacije potrebno je da se prikaže forma logovanje, na kojoj bi
korisnik trebao da unese svoje korisničko ime i lozinku. Ako je unos bio korektan korisniku
treba omogućiti nastavak rada u skladu sa njegovim privilegijama. OdreĎivanje pripadnosti odroĎenoj grupi korisnika obavlja se na osnovu unetog korisničkog imena. Treba omogućiti
izmenu lozinke i korisničke grupe na osnovu zahteva korisnika. Potrebno je obezbediti
odlogovanje sa sistema na zahtev korisnika ili automatsko pri izlasku iz aplikacije.
16
2.2.11 Pomoć korisniku
Help je preporučljivo odraditi u standardnom HTML Help formatu. Potrebno je da daje osnovne informacije o programu i načinu njegovog korišćenja. Tekst upotpuniti slikama,
radi lakšeg razumevanja. Omogućiti pretragu po stranama helpa. Vršenje pretrage treba još da
bude omogućeno po indeksima i ključnim rečima, odabirom željenog taba u prozoru za navigaciju.
2.2.12 Instalacija, reinstalacija i brisanje programa
Potrebno je omogućiti jednostavnu instalaciju (instal) i nesmetano brisanje programa (uninstal). Dati mogućnost podešavanja parametara konekcije na bazu podataka. Obezbediti
instalacije programa neophodnih za rad aplikacije ili ponuditi linkove ka sajtovima sa kojih se
iste mogu preuzeti.
2.3 Baza podataka
Osnovu informacionog sistema čini baza podataka. Ona se može definisati kao
kolekcija meĎusobno povezanih podataka koja modelira (prikazuje) objekte, veze objekata i obeležja objekata i veza posmatranog ralnog sistema.
1
2.3.1 Model objekti – veze – obeležja2
Model objekti - veze (MOV) potiče od naziva modela objekti - veze - obeležja (Entity-Relationship-Atribute, E-R-A, ER-model) (ostaje nejasno zašto je iz naziva
izostavljeno obeležje). MOV je prvi put objavljen u Chen-ovom članku 1976 godine i jedan je
od danas najčešće korišćenih modela podataka. MOV je nastao kao sinteza dobrih osobina tri druga modela: mrežnog, relacionog i
skupa entiteta. Postoje više verzija ovog modela podataka. U odnosu na originalni Chen-ov
model uvedeno je više proširenja tako da ga danas susrećemo pod nazivom prošireni model
objekti - veze (PMOV). Kod nas poznata verzija PMOV definisana je na Fakultetu organizacionih nauka (FON) u Beogradu. Razmatranja modela objekti - veze ovde će se
oslanjati na PMOV.
Model objekti-veze je najpopularniji i u praksi najčešće korišćen semantički model podataka koji se koristi kao grafički jezik za projektovanje konceptualne šeme baze
podataka. Konceptualna šema predstavlja takav model realnog sistema i njegove baze
podataka koji ne zavisi od konkretnog sistema za upravljanje bazom podataka. Konceptualna
šema baze podataka prema MOV može se lako prevesti u šemu baze podataka na kojoj je SUBP zasnovan.
Konceptualna šema realizovana kao MOV po pravilu se predstavlja uz pomoć
dijagrama koje nazivamo dijagrami objekti veze (DOV).
1 dr Dragan Mihajlović, “Informacioni sistemi i projektovanje baze podataka”, str.8
2 dr Dragan Mihajlović, “Informacioni sistemi i projektovanje baze podataka”, str.127
17
Zbog bolje preglednosti konceptualne šeme kao dijagrama tipova objekata i veza,
dijagrami se mogu crtati na različitim nivoima detaljnosti. Najniži nivo detaljnosti je kada DOV sadrži tipove objekata i tipove veza. Viši nivo detaljnosti nastaje ako se u DOV pored
tipova objekata i tipova veza označe samo identifikaciona obeležja i informacije o
minimalnom i maksimalnom broju pojava tipova objekata koje učestvuju i vezama. Na
najvišem nivou detaljnosti DOV sadrži i sva obeležja tipova objekata i akcije u slučaju narušavanja pravila integriteta.
2.3.2 Relacioni model podataka3
Koncepcija relacionog modela podataka je prvi put objavljena u Codd-ovom članku iz 1970 godine. Osnovni razlozi za definisanje relacionog modela podataka bili su sledeći
nedostaci uočeni u korišćenju tada poznatih modela podataka:
nepostojanje jasne granice izmeĎu logičkih i fizičkih aspekata baza podataka,
strukturna kompleksnost podataka,
navigacioni jezici za manipulisanje podacima,
Ciljevi razvoja relacionog modela podataka odnosili su se pre svega na uklanjanje prethodnih nedostataka.
Nakon serije Codd-ovih radova započeo je razvoj relacionih modela i relacionih baza
podataka. No, i u relacionom modelu podataka ubrzo je uočen niz nedostataka, tako da je Codd 1979 objavio prošireni relacioni model podataka. Danas se kao dve vrste relacionog
modela podataka susreću: klasični relacioni model (RM) i prošireni relacioni model
(RM/T). Prema ranije učinjenoj klasifikaciji modela podataka može se videti da klasični
relacioni model pripada II, a prošireni relacioni model III generaciji. RM/T model u odnosu na RM model sadrži dodatne koncepte strukture, pravila integriteta i moćne operatore. No i
pored toga do danas ovaj model ima manji praktični značaj. Neki koncepti ovog modela
prihvaćeni su i preuzeti u drugim modelima podataka i implementirani u nekim SUBP. Osnovni pojam relacionog modela podataka je relacija. Relacija se može posmatrati
se sledeća dva aspekta: značenje i sadržaj. Značenje relacije i formalno se iskazuje šemom
relacije. Sadržaj relacije naziva se ekstenzijom, a iskazuje se tabelom podataka ili pojavom
šeme relacije.
U relacionom modelu podataka relacija odgovara dvodimenzionalnoj tabeli u kojoj
svaki red sadrži jednu n-torku, a svaka kolona elemente jednog domena. Svaka kolona relacije
jednoznačno je odreĎena nazivom obeležja u šemi relacije. Redosled kolona u relaciji i redosled članova u n-torci su nebitni.
Identifikator n-torki relacije naziva se kantidat ključa, u šemi relacije može ih biti
više, a jedan se bira za primarni ključ. Obeležja koja ulaze u sastav bilo kojeg kandidata ključa nazivaju se klučna obeležja. Obeležja koja ne ulaze niti u jedan od kandidata ključa
nazivaju se neključna obeležja. U relaciji uvek postoji ključ.
Šema relacije ne predstavlja podatke, već njihovu formu, a interpretacijom i značenje. Napomenimo da značenje relacije ne proizilazi iz same šeme, jer se šema u principu može
interpretirati na bezbroj načina. Stoga je bolje reći da je šema formalna predstava značenja.
Šema relacione baze podataka može da se predstavi kao S(N,I) gde je:
S – naziv baze podataka
N – skup šema relacije
I – skup uslova integriteta baze podataka
Ako se prethodni skup šema relacija dopuni opisom uslova integriteta koji se odnose
na ograničenja izmeĎu pojava šeme relacija dobijamo šemu baze podataka.
3 dr Dragan Mihajlović, “Informacioni sistemi i projektovanje baze podataka”, str.177
18
2.4 Sybase Power Designer
PowerDesigner je aplikacija koja sadrži skup alata za modeliranje, proizveden je od
strane kompanije Sybase. Procenjuje se da PowerDesigner drži približno 30% svetskog tržišta
alata za modelovanje podataka. Njegova cena se kreće u radsponu od $3,000 do $7,500 USD
po komadu, ali se može preuzeti besplatna, vremenski ograničena verzija. Mnogi univerziteti u svetu od kompanije Sybase dobijaju na poklon PowerDesigner, meĎu njima je i nekoliko
domaćih fakulteta.
Sybase® PowerDesigner®
PowerDesigner pruža podršku za:
Analiza zahteva (eng. Requirements Analysis)
Objektno modelovanje (UML 2.0 dijagrami)
Data modelovanje (radi sa većinom vodećih RDBMS sistema)
Modelovanje poslovnih procesa (ProcessAnalyst) podržava BPMN
XML modelovanje, podržava XML šemu i DTD standard
Modelovanje skladišta podataka (WarehouseArchitect)
Generisanje koda (Java, C#, VB .NET, Hibernate, EJB3, NHibernate, JSF, WinForm
(.NET and .NET CF), PowerBuilder, ...)
Generisanje izveštaja
Repozitorijum
Visual Studio 2005 dodatak
Eclipse plugin
2.5 Programski jezik C#
C# (C šarp) je objektno orjentisan programski jezik razvijen od strane Mikrosofta kao
deo .NET inicijative i kasnije prihvaćen kao standard od ECMA i ISO. C# jezik se razvija kao
proceduralni, objektno orjentisani, sintaksno baziran na C++ jeziku sa uključenjem aspekata nekoliko drugih programskih jezika (posebno značajno Delfi i Java) i sa posebnom pažnjom
na uprošćenosti.
Glavni dizajner i glavni arhitekta C# programskog jezika u Mikrosoftu je Anders Hejlsberg. Njegova prethodna iskustva u programskim jezicima i framework dizajnu (Visual
J++, Borland Delphi, Turbo Pascal), mogu se lako uočiti u sintaksi C# jezika. U intervijuima i
tehničkim novinama on proučava mane u višim programskim jezicima (C++, Java, Delphi,
and Smalltalk). C# se pokazao uspešnijim od njih i postao je jedan od vodećih programskih jezika.
2.6 Microsoft SQL Server
Microsoft SQL Server je savremena relaciona baza podataka. Osim glavne baze
sadrži i komponente: Query Analyzer – konzola za upite, Enterprise Manager – konzola za
napredno upravljanje bazom, Profiler – alatka za nadzor rada baze. Microsoft Desktop Engine
– MSDE je besplatna verzija baze podataka, ali ona ne sadrži dodatne programe nalik ovim alatkama iz Microsoft SQL Servera. Microsoft SQL Server poseduje poseban programski
jezik za pisanje procedura koje će se izvršavati na serveru, Transact – SQL (T – SQL).
19
SQL Server 2005 je program novije generacije namenjen upravljanju podacima i
njihovoj analizi. Sistem je osmišljen tako da firmama i ustanovama svih veličina olakša
hvatanje u koštac s brojnim izazovima vezanim za rad s podacima i omogući im efikasnije donošenje odluka. SQL Server 2005 će pomoći prilikom izgradnje, implementacije i
upravljanja sigurnijih, skalabilnijih i pouzdanijih poslovnih aplikacija, a u isto vreme
poboljšati produktivnost informatičkih odeljenja smanjivanjem složenosti i poslova oko
stvaranja, implementacije i održavanja baze podatka. Ovo se odražava i na ukupne troškove posedovanja (TCO-Total Cost of Ownership) ovakvih sistema koji zahvaljujući integrisanom
pristupu i usresreĎenosti na jednostavnost upotrebe nude najniže troškove inicijalne nabavke,
implementacije i održavanja, a time i brz povratak ulaganja u bazu podataka. Postoji besplatna verzija Microsoft SQL Servera 2005 i nosi oznaku Express.
Poseduje ograničenja na veličinu baze (maksimalno 4GB), broj procesora (jedan procesor ili
jedno jezgro) i količinu operativne memorije (maksimalno 1GB) koju može da koristi server. Server i ostale komponente se mogu preuzeti sa zvaničnog Mikrosoftovog sajta
http://download.microsoft.com, a skoro je postala dostuna i novija verzija Microsoft SQL
Server 2008.
2.7 Microsoft Visual Studio
Microsoft Visual Studio je alatka za razvoj programa. Prvo izdanje programa Visual
Studio pojavilo se na tržištu 1997. godine i sadržao je odvojene IDE-ove (koji su zahtevali posebnu instalaciju) za programe Visual C++, Visual Basic, J++, i alatku poznatu kao
InterDev. Program Visual Studio 6.0 imao je drastična poboljšanja koja su označila roĎenje
programa Visual Basic 6 i koja su oslikavala ideju skupa jedinstvenih usluga za sve jezike.
Visual Studio .NET 2002 i Visual Studio .NET 2003 su tu ideju sproveli u delo sa aplikacijom .NET Framework. Po prvi put jedan programer je mogao da napiše aplikaciju na
jeziku po svom izboru korišćenjem mogućnosti opšteg skupa alatki uključujući dizajniranje,
kontrole “prevuci i otpusti” i IntelliSense. Zajedno sa porastom produktivnosti programera, došlo je i do porasta u veličini i kompleksnosti razvojnih projekata i timova.
Visual Studio 2005 nova je verzija programskog alata koji donosi novi pogled na razvojni proces. UnapreĎena je komunikacija i povećana produktivnost članova tima koji rade
na nekom projektu. Visual Studio Team System olakšava razvoj kvalitetnih aplikacija
omogućavajući članovima tima da se fokusiraju isključivo na rezultate. Razvojno okruženje
Visual Studio 2005 predstavlja velik korak napred u razvoju programskih rešenja i donosi inovacije u svim područjima, od razvoja desktop-aplikacija, preko web-aplikacija, sve do
aplikacija za mobilne ureĎaje.
Visual Studio 2005 je nastao da bi pomogao programerima u timovima različitih veličina da povećaju meĎusobnu saradnju i smanje kompleksnost razvoja. Sa svakim novim
izdanjem, Mikrosoft je u projektu Visual Studio ostvario komunikaciju sa programerskom
zajednicom kako bi dobio povratne informacije radi usavršavanja proizvoda. Trenutno je pored Mucrosoft Visual Studio 2005 na sajtu dostupna i Mucrosoft
Visual Studio 2008 verzija. Visual Studio je moguće nabaviti u nekoliko različitih verzija:
Express, Standard, Professional, Tools for Office i Visual Studio Team System Editions.
20
Express verzija je besplatna verzije koja omogućava rad u jezicima Visual Basic, Visual C++,
Visual C# i Visual J#. Može se preuzeti sa zvaničnog Mikrosoftovog sajta gde je dostupan na adresi: http://www.microsoft.com/express/download/offline.aspx
2.8 NET Framework
Microsoft .NET Framework je softverska komponenta, koja predstavlja deo Microsoft Windows operativnog sistema. Ona obezbeĎuje veliko telo predefinisanih kod rešenja za
opšte programerske zahteve i upravlje izvršnim programa napisanim posebno za framework.
.NET Framework je Mikrosoftov poklon programerima i namenjen je da se koristi u mnogim novokreiranim aplikacijama za Windows platforme.
Predefinisana kod rešenja javljaju se u obliku framework Bazne Klas-Biblioteke i
poseduje veliki izbor programa neophodnih u oblastima: Korsnički interfejs, pristup
podacima, konekcija na bazu, kriptografija, kreiranje web aplikacija, numeričke algoritme i mrežna komunikacija. Klas-biblioteke koriste programeri koji ih kombinuju sa sopstvenim
kodom i na taj način kreiraju aplikacije.
.NET Framework je uključen u Windows Server 2003, Windows Server 2008 i Windows Vista operativne sisteme, a moguće ga je instalirati na mnoge starije verzije
operativnog sistema Windows. Trenutno su aktelne verzije NET Framework 2.0 i NET
Framework 3.5, a instalacije se mogu preuzeti sa zvaničnog Mikrosoftovog sajta: http://download.microsoft.com
21
3. IMPLEMENTACIJA
U ovom poglavlju izložen je kratak opis implementacije datog programa i njegove
funkcionalnosti. Biće prikazani dijagram toka podataka, konceptualni model baze podataka i
na osnovu njega generisani fizički model. Opisaće se problemi uočeni u procesu
implementacije, način testiranja programa i proces instalacije. TakoĎe će biti izložen opis realizovanih funkcionalnosti programa.
3.1 Dijagram toka podataka
Dijagram toka podataka predstavlja skup podataka koji se paralelno izvršavaju. Na
slici 3.1, prikazan je dijagram toka podataka, na kojem se jasno mogu uočiti prava pristupa
odreĎenih tipova korisnika i njihove mogućnosti.
Slika 3.1 – Dijagram toka podataka Finanijskog knjigovodstva
3.2 Izrada konceptualnog modela
Konceptualni model baze podataka, uraĎen je u programskom paketu Power Designer
12. Hijerarhijska organizacija modela sastoji se iz dva dela: organizacione strukture i
finanijskog knjigovodstva. Ovakva organizacija omogućava lako dodavanje i povezivanje novih tipova knjigovodstva na nivou baze. Organizaciona struktura se takoĎe sastoji iz dva
dela: organizacije preduzeća i teritorijalne organizacije.
22
Slika 3.2.1 – Hijerarhijska organizacija modela
U nastavku će biti prikazan konceptualni model u potpunosti. Konceptualni model se sastoji iz modela teritorijalne organizacije, slika 3.2.2, modela organizacije preduzeća, slika
3.2.3 i modela finanijskog njigovodstva , slike 3.2.4, 3.2.5 i 3.2.6.
Slika 3.2.2 – Konceptualni model teritorijalne organizacije
23
Slika 3.2.3 – Konceptualni model organizacije preduzeća
24
Slika 3.2.4 – Konceptualni model finansijskog knjigovodstva,
deo 1/3
25
Slika 3.2.5 – Konceptualni model finansijskog knjigovodstva,
deo 2/3
26
Slika 3.2.6 – Konceptualni model finansijskog knjigovodstva, deo 3/3
27
3.3 Generisani fizički model
Za generisanje fizičkog modela, kao i skripta za kreiranje baze korišćen je alat Power
Designer 12. Fizički model je u potpunosti generisan na osnovu konceptualnog modela uz
neophodnu restrikciju ključeva.
Slika 3.3.1 – Fizički model teritorijalne organizacije
28
Slika 3.3.2 – Fizički model organizacije preduzeća
29
Slika 3.3.3 – Fizički model finansijskog knjigovodstva, deo 1/3
30
Slika 3.3.4 – Fizički model finansijskog knjigovodstva, deo 2/3
31
Slika 3.3.5 – Fizički model finansijskog knjigovodstva, deo 3/3
32
3.4 Logika sistema
Kompletna logika aplikacije, uključujuči načine i pravila knjiženja kao i brojna
ograničenja, je smeštena na samom serveru u obliku store procedura i trigera. Na ovaj način
se mnogostruko umanjuje broj pristupa aplikacije SQL klijentu i pobojšava efikasnost i
bezbednost celokupnog sistema. TakoĎe se pruža mogućnost nesmetane implementacije nove aplikacije koja bi radila sa potpuno istom knjigovodstvenom logikom sistema.
Za implementaciju store procedura i tigera korišćen je SQL jezik Transact–SQL (T–
SQL), sa kojim radi Microsoft SQL Server. Kod store procedura dat je u prilogu (stavka 5.1 Store procedure), kod Trigera je takoĎe dat u prilogu (stavka 5.2 Trigeri).
3.5 Problemi prilikom implementacije
Prilikom implementacije javio se problem nemogućnosti automatskog generisanja koda za metode INSERT, UPDATE i DELETE, prilikom spajanja više tabela u DataSet-u.
Slika 3.5 – Problem automatskog generisanja metoda DataSet-a
Problem je rešen dodavanjem novog i izmenom postojećeg dela generisanog koda u
fajlu finansijskoDataSet.Designer.cs
3.6 Instalacija
Program radi na Windows operativnim sistemima koji poseduju Microsoft .NET
Frameworks v2.0 ili noviju verziju. Instalacija se sastoji iz dva dela: instalacije i podešavanja
serverskog dela i instalacije klijentskih aplikacija.
Uz aplikaciju za podršku finansijskom knjigovodstvu dolaze svi neophodni programi. Oni se takoĎe mogu bespatno preuzeti sa Mikrosoftovog sajta:
33
http://download.microsoft.com. Sama aplikacija za podršku finansijskom knjigovodstvu
predstavlja klijentski deo sistema, a ona dolazi u tri varijante u zavisnosti od tipa operativnog sistema (x86, Itanium i x64). Izgled prozora u toku instalacije prikazan je na slici 3.6.
Slika 3.6 – Instalacija aplikacije Finansijsko Knjigovodstvo
Nakon instalacije klijentske aplikacije potrebno je podesiti parametre konekcije na bazu podataka. Detaljnije uputstvo za instalaciju, koje se distribuira uz instalaciju aplikacije,
dato je u prilogu (stavka 5.4 Uputstvo za instalaciju).
3.7 Implementirane funksionalnosti
Aplikacija sadrži standardne funkcionalnosti aplikacije za podršku finansijskom
knjigovodstvu. Podržava višenivovsko prijavljivanje na sistem. Poseduje dobro organizovan i
konzistentan MDI interfejs. Omogućava pregled, unos, izmenu i brisnje podataka, kao i pregled i štampanje izveštaja.
3.7.1 Prijavljivanje na sistem
Pri startovanju programa korisnik je obavezan da se prijavi na sistem, slika 3.7.1. Uspešnim prijavljivanjem korisnik dobija (ili mu se ukidaju) odreĎene privilegije u zavisnosti
od njegovog statusa u firmi. Podržano je pet nivoa privilegija: bilansista, knjigovoĎa, šef
knjigovodstva, administrator i ukinuta prava. Administrator ima sva prava, te i pravo da
dodaje nove i briše postojeće korisnike i definiše nivoe privilegija ostalih korisnika. Naknadno prijavljivanje na sistem se može eksplicitno pozvati odabirom stavke standardnog
menija Datoteka > Odloguj se.
34
Slika 3.7.1 – Prijavljivanje na sistem
3.7.2 Izgled aplikacije
Aplikacija za podršku finansijskom knjigovodstvu je uraĎena u satandardnom MDI
(Multiple Document Interfaces) iterfejsu sa ciljem da se korisniku omogući istovremeni
prikaz svih potrebnih informacija, slika 3.7.2.1.
Slika 3.7.2.1 – Izgled aplikacije Finansijsko knjigovodstvo
Informaciju o logovanom korisniku, kao i njegove privilegije može se videti u status
baru aplikacije, slika 3.7.2.2. U slučaju izvršenja zahtevnijih operacija, u levom uglu se
pojavljuje progres bar za prećenje stanja u kojem se trenutno nalazi operacija.
Slika 3.7.2.2 – Izgled status bara aplikacije
35
U gornjem desnom uglu nalazi se polje za definisanje aktivnog preduzeća
(preduzeće sa kojim želimo da radimo) i polje za definisanje aktivne poslovne godine, slika 3.7.2.3. Njih nije obavezno koristiti, ali je preporučljivo. U slučaju da je preduzeće
definisano, program filtrira podatke i prikazuje samo podatke datog preduzeća. TakoĎe
automatski popunjava sva polja u kojima je potrebno uneti neku informaciju vezanu za
preduzeće ili poslovnu godinu. Definisanje se vrši klikom na željeno polja za unos teksta, a zatim odabirom nekog od ponuĎenih preduzeća (prvo polje) ili odabira poslovne godine
(drugo polje). Taster služ za deaktivaciju opcije.
Slika 3.7.2.3 – Izgled polja za definisanje aktivnog preduzeća
3.7.3 Meni
Aplikacija sadrži standardni padajući meni, čija su prva dva nivoa hijerarhijske
organizacije prikazani na slici 3.7.3.1.
Slika 3.7.3.1 – Hijerarhijska organizacija standardnog padajućeg menija
36
Izgled menija je takoće prikazan na slici slici 3.7.3.2, sa njega se lako može pristupiti
svim funkcijama programa.
Slika 3.7.3.2 – Izgled standardnog padajućeg menija
Datoteka (eng. File) je osnovna stavka standardnog padajućeg menija, slika 3.7.3.3.
Sadrži opcije za testiranja i podešavanja konekcije na bazu, opciju za logovanje korisnika i
izlaz iz programa.
Slika 3.7.3.3 – Izgled padajućeg menija stavke Datoteka
Stavka Organizacija poseduje dve celina: teritorijalnu organizaciju i organizaciju preduzeća. U teritorijalnoj organizaciji nalaze se pozivi funkcija vezanih za teritorijalnu
rasporelu, slika 3.7.3.4.
Slika 3.7.3.4 – Izgled padajućeg menija stavke Teritorijalna organizacija
Ogranizacija preduzeća sadrži pozive funkcija vezanih za strukturu preduzeća, zaposlene u predužeću i delatnosti preduzeća, slika 3.7.3.5.
37
Slika 3.7.3.5 – Izgled padajućeg menija stavke Organizacija preduzeća
Stavka Finansije, slika 3.7.3.6, sadrži pozive funkcija vezanih za kontni okvir, definisanje poslovnih partnera, poslovne godine i vrste naloga. Omogućava i rad sa nalogom,
finanijskim promenama, glavnom knjigom i karakterističnim knjiženjima.
Slika 3.7.3.6 – Izgled padajućeg menija stavke Kontni Okvir
38
Stavka Izveštaji, slika 3.7.3.7, sadrži stavke za pozivanje generisanja karakterističnih
finanijskih izveštaja.
Slika 3.7.3.7 – Izgled padajućeg menija stavke Izveštaji
Stavka Kopija, slika 3.7.3.8, sadrži opcije za uvoz i izvoz podataka (restore, back up) iz baze podataka. Opcije pozivaju eksternu aplikaciju Microsoft SQL Server
Management Studio Express, u kojoj postoji mogućnost rukovanja kopijom baze podataka.
Kreiranje i učitavanje kopije je opisano u tutorijalu,“Kopija Podataka“, koji stiže uz aplikaciju za podršku finansijskom knjigovodstvu.
Slika 3.7.3.8 – Izgled padajućeg menija stavke Kopija
Stavka Prozori (eng. Windows), slika 3.7.3.9, sadrži opcije za organizaciju prozora
unotar MDI konteinera. Daje spisak svih prozora i omogućava laku aktivaciju neaktivnih i
njihovo stavljanje u fokus.
Slika 3.7.3.9 – Izgled padajućeg menija stavke Prozori
39
Stavka Pomoć (eng. Help), slika 3.7.3.10, je zadužena za pružanje pomoći korisniku
u obliku standardnog HTML-Helpa ili putem tutorijala. Stavka O programu nudi osnovne informacije o aplikaciji.
Slika 3.7.3.10 – Izgled padajućeg menija stavke Pomoć
3.7.4 Standardni prozor
Aplikacija za podršku finansijskom knjigovodstvu sadrži 33 tipa standardnog
pozora. Standardni prozor sadrži tabelarni prikaz elemenata, detaljan prikaz podataka
izabranog elementa i paletu alatki. U izradi prozora posebna pažnja je posvećena
konzistentnosti, tako da svi prozori izgledaju identično i poseduju iste kontrole. Prozor se sastoji iz dva dela (dela sa tabelom i dela sa podacima), razdvojenih spliterom, slika 3.4.4.1.
Slika 3.7.4.1 – Izgled standardnog prozora
U gornjem delu prozora nalazi se paleta alatki za rad sa podacima prikazanim u
prozoru. Njihove funkcionalnosti su opisane na slici 3.7.4.2.
40
Slika 3.7.4.2 – Paleta alatki standardnog prozora
Pretraga se može vršiti po nekom od ponuĎenih kriterijuma, dok kriterijumi zavise
od tipa prikazanih podataka. Primer menija za pretragu prikazan je na slici 3.7.4.3. Rezultat pretrage biće prikazan u tabeli prozora nad kojim se vrši pretraga. U slučaju da je potrebna
pretraga po nekoj reči ili delu reči, potrebno je reč prvo upisati u polje pored, a zatim odabrati
tip pretrage.
Slika 3.7.4.3 – Izgled standardnog prozora
3.7.5 Generisanje izveštaja
Za generisanje izveštaja korišćena je Mikrosoftova komponenta ReportViewer, koja
dolazi uz programski paket Microsoft Visual Studio 2005. Primer prozora za dizajniranje
izveštaja može se videti na slici 3.7.5.1.
Pretraga
Prikaz ili sktivanje
tabele ili podataka
Pregled i štampanje
sadržaja tabele
Navigacija kroz
elemente u tabeli
Dodavanje, brisanje, snimanje izmena i
osvežavanje sadržaja
41
Slika 3.7.5.1 – Izgled prozora za dizajniranje izveštaja,
Microsoft Reports
Program omogućava pregled i štampanje ili snimanje u elektornskom obliku
(Excel, Acrobat PDF file ) 32 tipa izveštaja. Od štampanja sadržaja prikazanog na ekranu, do specifičnih knjigovodstvenih izveštaja. Primer prozora sa generisanim izveštajem dat je na
slici 3.7.5.2.
Slika 3.7.5.2 – Primer prozora sa generisanim izveštajem
42
Alatka Page Setup nudi mogućnost podešavanja veličine i oblika papira za štampu, slika 3.7.5.3.
Slika 3.7.5.3 – Page Setup
Alatka Print pruža mogućnost standardnih podešavanja materijala za štampu, slika
3.7.5.4.
Slika 3.7.5.3 – Print
Primeri nekih generisanih izveštaja u aplikaciji za podršku finansijskom
knjigovodstvu dati su u prilogu (stavka 5.3 Primeri generisanih izvešraja).
43
3.4.6 Poruka korisniku
U slučaju pojave greške ili u slučaju izvršenja odreĎenih operacija, korisnik se o tome obaveštava. Sve poruke se prikazuju u standardnom prozoru za poruke korisniku, slika
3.7.6.
Slika 3.7.6 – Izgled standardnog prozora za poruke korisniku
Korisniku se prikazuju informacije o uzroku koji je doveo do generisanja poruke i
načinu otklanjanja greške ukoliko je do nje došlo. Dugme prikazuje poslednje polje u kojem se korisniku nudi informacija koju je prosledio sistem, ona je od velike pomoći
ako se radi o poruci koju prosleĎuje baza podataka. Klikom na dugme nastavlja se izvršenje započete operacije, ukoliko je moguće, ili se program vraća u stanje u kojem je bio
pre započinjanja iste.
3.7.7 Izrada sigurnosne kopije
Pravo izrade sigurnosne kopije ima isključivo administrator. Za izradu kopije se
koristi program Microsoft SQL Sevrer Menagement Studio Express, slika 3.7.7.1. SQL
Sevrer Menagement Studio Express se distribuira uz ovaj program, a može se besplatno preuzeti sa zvaničnog Mikrosoftovog sajta, na adresi http://download.microsoft.com.
44
Slika 3.7.7.1 – Izgled aplikacije Microsoft SQL Sevrer
Menagement Studio Express
Korisniku se nudi niz mogućnosti za podešavanje generisanja sigurnosne kopije, slika
3.7.7.2.
Slika 3.7.7.1 – Podešavanje generisanja sigurnosne kopije
45
Detaljniji opis pravljenja sigurnosne kopije i njihovog korišćenja dat je u tutorijalu koji prati aplikaciju, Start > Programs > Finansijsko Knjigovodstvo > Tutorijal > Kopija
Podataka.
3.8 Testiranje aplikacije
Za testiranje aplikacije korišćen je za ovu priliku posebno kreiran SQL sktip
Test_Podaci.sql, sa test podacima koji sintaksno odgovaraju strukturi podataka finansijskog
knjigovodstva. Testiranje je takoĎe vršeno i iz same klijentske aplikacije. U naprednijem slučaju testiranja, korišćeni su slučajevi knjiženja, pronaĎeni u
knjigama “Računovodstvo, za III razred ekonomske škole” i “Računovodstvo, za IV razred
ekonomske škole”.
Greške uočene pri testiranju su ispravljene, tako da aplikacija sada korektno izvršava postavljene zahteve.
46
47
4. ZAKLJUČAK
U izradi baze podataka korišćen je program PowerDesigner 12.5 , sa podrškom za
savremene baze podataka (kao na primer SQL Server 2005). Kao baza podataka korišćen je
SQL Server 2005 Express. Kompletna aplikacija je uraĎena u C# programskom jeziku, uz
oslonac na .NET biblioteke. Visual Studio 2005 je program u kome je klijentska aplikacija kreirana.
Alati u kojima je ovo raĎeno predstavljaju najsavremenije alate za kreiranje
poslovnih aplikacija. Programi korišćeni u izradi ove aplikacije su besplatni ili fakultet ima licencu za njih.
Aplikacija za podršku finansijskom knjigovodstvu čini jednu zaokruženu celinu
kompjuterski podržanog sistema za finanijsko knjigovodstvo. Ona je razvijana do te mere da
zadovolji zahteve navedene u specifikaciji. Ona se može proširiti ostalim tipovima knjigovodstva, kao na primer materijalnim knjigovodstvom. Sam program je rezvijan na taj
način da se ostavi mogućnost prošitanja.
Aplikacija sadrži konzistentan MDI interfejs, čije mogućnosti paralelnog prikaza i obrade posebno dolaze do izražaja kod naprednijih korisnika ili korisnika kojima je blizak
ovakav način rada.
Posebna pažnja posvećena je osposobljavanju korisnika za korišćenje aplikacije. Korisniku se nude pored standardnog HTML help-a i tutorijali za obuku, koji na slikovit
način pomažu korisnicima da savladaju osnovne korake u korišćenju aplikacije.
O bezbednosti podataka se brine administrator sistema, a podršku za to pruža
Microsoft SQL Server Manangment Studio Express.
Prilikom testiranja aplikacija se pokazala kao stabilno, dobro dizajnirano aplikativno
rešenje, u kojem su uspešno implementirani zahtevi navedeni u specifikaciji zahteva.
48
49
5. PRILOG
5.1 Store procedure
-------------------------------------------------------------------- --KREIRA SE NOVA GODINA I OTVARA NALOG SA POČETNIM STANJIMA
CREATE PROCEDURE OtvaranjePocetnogStanja
-- ULAZNE PROMENLJIVE
@pPOSLOVNA_GODINA CHAR(4),
@pSIFRA_PREDUZECA CHAR(4),
@pOZNAKA_VRSTE_NALOGA CHAR(2),
@pKORISNICKO_IME_REFERENTA VARCHAR(30),
@pNAREDNA_GODINA CHAR(4)
AS
DECLARE
-- LOKALNE PROMENLJIVE
@SIFRA_PREDUZECA CHAR(4),
@POSLOVNA_GODINA CHAR(4),
@OZNAKA_KLASE CHAR(1),
@OZNAKA_GRUPE CHAR(1),
@OZNAKA_PODGRUPE CHAR(1),
@OZNAKA_SINTETIKE CHAR(1),
@OZNAKA_ANALITIKE CHAR(2),
@OZNAKA_SUBANALITIKE CHAR(3),
@POCETNO_STANJE_DUGUJE DECIMAL(12,2),
@POCETNO_STANJE_POTRAZUJE DECIMAL(12,2),
@PROMET_DUGUJE DECIMAL(12,2),
@PROMET_POTRAZUJE DECIMAL(12,2),
@SALDO_DUGUJE DECIMAL(12,2),
@SALDO_POTRAZUJE DECIMAL(12,2),
@BROJ_NALOGA NUMERIC(8),
@REDNI_BROJ_PROMENE NUMERIC(10),
@DATUM DATETIME
SET @DATUM= GETDATE()
BEGIN TRANSACTION
-- DEKLARIŠEMO KURSOR(SKUP SLOGOVA KOJEM ŢELIMO DA PRISTUPAMO)
DECLARE cursGLAVNA_KNJIGA CURSOR FOR
SELECT OZNAKA_KLASE, OZNAKA_GRUPE, OZNAKA_PODGRUPE, OZNAKA_SINTETIKE,
OZNAKA_ANALITIKE, OZNAKA_SUBANALITIKE, POCETNO_STANJE_DUGUJE,
POCETNO_STANJE_POTRAZUJE, PROMET_DUGUJE, PROMET_POTRAZUJE, SALDO_DUGUJE,
SALDO_POTRAZUJE
FROM GLAVNA_KNJIGA
WHERE
POSLOVNA_GODINA=@pPOSLOVNA_GODINA AND
SIFRA_PREDUZECA=@pSIFRA_PREDUZECA AND
(SALDO_DUGUJE<>0 ORSALDO_POTRAZUJE<>0)
-- OTVARANJE KURSORA, POKAZIVAČ JE NA PRVOM SLOGU
OPEN cursGLAVNA_KNJIGA
FETCH NEXT FROM cursGLAVNA_KNJIGA INTO @OZNAKA_KLASE,
@OZNAKA_GRUPE, @OZNAKA_PODGRUPE, @OZNAKA_SINTETIKE, @OZNAKA_ANALITIKE,
@OZNAKA_SUBANALITIKE, @POCETNO_STANJE_DUGUJE, @POCETNO_STANJE_POTRAZUJE,
@PROMET_DUGUJE, @PROMET_POTRAZUJE, @SALDO_DUGUJE, @SALDO_POTRAZUJE
-- AKO NE POSTOJI, KREIRAMO NOVU POSLOVNU GODINU
IF NOT EXISTS ( SELECT 1 FROM POSLOVNA_GODINA WHERE
SIFRA_PREDUZECA=@pSIFRA_PREDUZECA AND POSLOVNA_GODINA=@pNAREDNA_GODINA)
INSERT INTO POSLOVNA_GODINA VALUES ( @pSIFRA_PREDUZECA, @pNAREDNA_GODINA)
-- KREIRAMO NOVI NALOG
IF EXISTS (
SELECT 1 FROM NALOG_ZA_KNJIZENJE
)
BEGIN
SELECT
@BROJ_NALOGA=max(BROJ_NALOGA)+1
FROM NALOG_ZA_KNJIZENJE
END
ELSE
50
BEGIN
SET @BROJ_NALOGA = 0;
END
INSERT INTO NALOG_ZA_KNJIZENJE VALUES(
@pOZNAKA_VRSTE_NALOGA,@pSIFRA_PREDUZECA,
@pNAREDNA_GODINA, @BROJ_NALOGA, @pKORISNICKO_IME_REFERENTA, @DATUM, 0, 0, NULL,
'N')
-- PROVERAVAMO DALI JE NALOG KREIRAN, UČITAVAMO ZADNJI BROJ NALOGA
IF EXISTS
(SELECT 1 FROM NALOG_ZA_KNJIZENJE WHERE
SIFRA_PREDUZECA=@pSIFRA_PREDUZECA AND
POSLOVNA_GODINA=@pNAREDNA_GODINA )
BEGIN
SELECT
@BROJ_NALOGA=max(BROJ_NALOGA)
FROM NALOG_ZA_KNJIZENJE
END
ELSE
BEGIN
RAISERROR ('DOSLO JE DO GRESKE, NALOG NIJE KREIRAN', 16, 1)
END
-- UČITAVAMO ZADNJI BROJ NALOGA
IF EXISTS
(SELECT 1 FROM FINANSIJSKE_PROMENE WHERE
BROJ_NALOGA=@BROJ_NALOGA AND
SIFRA_PREDUZECA=@pSIFRA_PREDUZECA AND
POSLOVNA_GODINA=@pNAREDNA_GODINA AND
OZNAKA_VRSTE_NALOGA=@pOZNAKA_VRSTE_NALOGA
)
BEGIN
SELECT @REDNI_BROJ_PROMENE=max(REDNI_BROJ_PROMENE) FROM
FINANSIJSKE_PROMENE
END
ELSE
BEGIN
SET @REDNI_BROJ_PROMENE=0;
END
-- ZA @@FETCH_STATUS=0 ZNAČI DA NIJE KRAJ
WHILE @@FETCH_STATUS=0
BEGIN
-- ZA DUGOVNI SALDO
IF(@SALDO_DUGUJE>0)
BEGIN
SET REDNI_BROJ_PROMENE=@REDNI_BROJ_PROMENE+1
INSERT INTO FINANSIJSKE_PROMENE VALUES (
@pOZNAKA_VRSTE_NALOGA,@pSIFRA_PREDUZECA, @pNAREDNA_GODINA, @BROJ_NALOGA,
@REDNI_BROJ_PROMENE, @OZNAKA_KLASE, @OZNAKA_GRUPE, @OZNAKA_PODGRUPE,
@OZNAKA_SINTETIKE, @OZNAKA_ANALITIKE,@OZNAKA_SUBANALITIKE, 'OTVARANJE POCETNOG
STANJA', 'D',@SALDO_DUGUJE, @DATUM, 'N')
END
-- ZA POTRAŢNI SALDO
IF(@SALDO_POTRAZUJE>0)
BEGIN
SET REDNI_BROJ_PROMENE=@REDNI_BROJ_PROMENE+1
INSERT INTO FINANSIJSKE_PROMENE VALUES (
@pOZNAKA_VRSTE_NALOGA,@pSIFRA_PREDUZECA, @pNAREDNA_GODINA, @BROJ_NALOGA,
@REDNI_BROJ_PROMENE, @OZNAKA_KLASE, @OZNAKA_GRUPE, @OZNAKA_PODGRUPE,
@OZNAKA_SINTETIKE, @OZNAKA_ANALITIKE,@OZNAKA_SUBANALITIKE, 'OTVARANJE POCETNOG
STANJA', 'P',@SALDO_DUGUJE, @DATUM, 'N')
END
-- PRISTUPAMO SLEDEĆEM SLOGU
FETCH NEXT FROM cursGLAVNA_KNJIGA INTO @OZNAKA_KLASE,
@OZNAKA_GRUPE, @OZNAKA_PODGRUPE, @OZNAKA_SINTETIKE, @OZNAKA_ANALITIKE,
@OZNAKA_SUBANALITIKE, @POCETNO_STANJE_DUGUJE, @POCETNO_STANJE_POTRAZUJE,
@PROMET_DUGUJE, @PROMET_POTRAZUJE, @SALDO_DUGUJE, @SALDO_POTRAZUJE
END
-- ZATVARAMO KURSOR I DELOCIRAMO RESURSE
CLOSE cursGLAVNA_KNJIGA
DEALLOCATE cursGLAVNA_KNJIGA
COMMIT TRANSACTION
GO
--------------------------------------------------------------------
-- VRŠI KNJIŢENJE NEPROKNJIŢENOG NALOGA
51
CREATE PROCEDURE KnjizenjeNaloga
-- ULAZNE PROMENLJIVE
@pSIFRA_PREDUZECA CHAR(4),
@pPOSLOVNA_GODINA CHAR(4),
@pOZNAKA_VRSTE_NALOGA CHAR(2),
@pBROJ_NALOGA NUMERIC(8)
AS
DECLARE
-- LOKALNE PROMENLJIVE
@STATUS CHAR(1),
@UKUPNO_DUGUJE DECIMAL(12,2),
@UKUPNO_POTRAZUJE DECIMAL(12,2),
@SIFRA_PREDUZECA CHAR(4),
@OZNAKA_KLASE CHAR(1),
@OZNAKA_GRUPE CHAR(1),
@OZNAKA_PODGRUPE CHAR(1),
@OZNAKA_SINTETIKE CHAR(1),
@OZNAKA_ANALITIKE CHAR(2),
@OZNAKA_SUBANALITIKE CHAR(3),
@POSLOVNA_GODINA CHAR(4),
@BROJ_NALOGA NUMERIC(8),
@SMER_PROMENE CHAR(1),
@IZNOS_PROMENE DECIMAL(12,2),
@OZNAKA_VRSTE_NALOGA CHAR(2),
@POCETNO_STANJE_DUGUJE DECIMAL(12,2),
@POCETNO_STANJE_POTRAZUJE DECIMAL(12,2),
@PROMET_DUGUJE DECIMAL(12,2),
@PROMET_POTRAZUJE DECIMAL(12,2),
@SALDO_DUGUJE DECIMAL(12,2),
@SALDO_POTRAZUJE DECIMAL(12,2),
@SALDO_DUG_POTR BIT,
@OK BIT
-- DA LI POSTOJI NALOG KOJI TRAŢIMO
IF NOT EXISTS ( SELECT 1 FROM NALOG_ZA_KNJIZENJE
WHERE
SIFRA_PREDUZECA = @pSIFRA_PREDUZECA AND
POSLOVNA_GODINA = @pPOSLOVNA_GODINA AND
OZNAKA_VRSTE_NALOGA = @pOZNAKA_VRSTE_NALOGA AND
BROJ_NALOGA = @pBROJ_NALOGA )
BEGIN
RAISERROR('NIJE IZABRAN VALIDAN NALOG',11,2)
RETURN
END
-- ČITAMO PODATKE IZ NALOGA DA BIH GA PROVERILI
SELECT @STATUS = STATUS, @UKUPNO_DUGUJE = UKUPNO_DUGUJE,
@UKUPNO_POTRAZUJE=UKUPNO_POTRAZUJE FROM NALOG_ZA_KNJIZENJE
WHERE
SIFRA_PREDUZECA = @pSIFRA_PREDUZECA AND
POSLOVNA_GODINA = @pPOSLOVNA_GODINA AND
OZNAKA_VRSTE_NALOGA = @pOZNAKA_VRSTE_NALOGA AND
BROJ_NALOGA = @pBROJ_NALOGA
-- PROVERAVAMO DA NALOG NIJE VEĆ PROKNJIŢEN
IF (@STATUS ='P')
BEGIN
RAISERROR('NALOG JE VEC PROKNJIZEN',11,2)
RETURN
END
BEGIN
SELECT 1 FROM FINANSIJSKE_PROMENE WHERE
OZNAKA_VRSTE_NALOGA=@pOZNAKA_VRSTE_NALOGA AND
SIFRA_PREDUZECA=@pSIFRA_PREDUZECA AND
POSLOVNA_GODINA=@pPOSLOVNA_GODINA AND
BROJ_NALOGA=@pBROJ_NALOGA
-- DA LI POSTOJE FINANSIJSKE PROMENE KOJE TRAŢIMO, DUGOVNOG TIPA
--IZRAČUNAVAMO SUMU DUGOVNIH PROMENA
IF EXISTS (SELECT 1 FROM FINANSIJSKE_PROMENE
WHERE SIFRA_PREDUZECA=@pSIFRA_PREDUZECA AND
OZNAKA_VRSTE_NALOGA=@pOZNAKA_VRSTE_NALOGA AND
POSLOVNA_GODINA=@pPOSLOVNA_GODINA AND
BROJ_NALOGA=@pBROJ_NALOGA AND SMER_PROMENE='D')
BEGIN
52
SELECT @UKUPNO_DUGUJE=SUM(IZNOS_PROMENE) FROM FINANSIJSKE_PROMENE WHERE
SIFRA_PREDUZECA=@pSIFRA_PREDUZECA AND
OZNAKA_VRSTE_NALOGA=@pOZNAKA_VRSTE_NALOGA AND
POSLOVNA_GODINA=@pPOSLOVNA_GODINA AND BROJ_NALOGA=@pBROJ_NALOGA AND
SMER_PROMENE='D'
END
ELSE SET @UKUPNO_DUGUJE=0
-- DA LI POSTOJE FINANSIJSKE PROMENE KOJE TRAŢIMO, POTRAŢNOG TIPA
-- IZRAČUNAVAMO SUMU POTRAŢNIH PROMENA
IF EXISTS (SELECT 1 FROM FINANSIJSKE_PROMENE
WHERE SIFRA_PREDUZECA=@pSIFRA_PREDUZECA AND
OZNAKA_VRSTE_NALOGA=@pOZNAKA_VRSTE_NALOGA AND
POSLOVNA_GODINA=@pPOSLOVNA_GODINA AND
BROJ_NALOGA=@pBROJ_NALOGA AND SMER_PROMENE='P')
BEGIN
SELECT @UKUPNO_DUGUJE=SUM(IZNOS_PROMENE) FROM FINANSIJSKE_PROMENE WHERE
SIFRA_PREDUZECA=@pSIFRA_PREDUZECA AND
OZNAKA_VRSTE_NALOGA=@pOZNAKA_VRSTE_NALOGA AND
POSLOVNA_GODINA=@pPOSLOVNA_GODINA AND BROJ_NALOGA=@pBROJ_NALOGA AND
SMER_PROMENE='P'
END
ELSE
SET @UKUPNO_POTRAZUJE=0
UPDATE NALOG_ZA_KNJIZENJE SET UKUPNO_DUGUJE=@UKUPNO_DUGUJE,
UKUPNO_POTRAZUJE=@UKUPNO_POTRAZUJE WHERE
SIFRA_PREDUZECA=@pSIFRA_PREDUZECA AND
OZNAKA_VRSTE_NALOGA=@pOZNAKA_VRSTE_NALOGA AND
POSLOVNA_GODINA=@pPOSLOVNA_GODINA AND
BROJ_NALOGA=@pBROJ_NALOGA
-- ISPITUJEMO DA LI JE UKUPNO_DUGUJE == UKUPNO_POTRAZUJE (TJ. DA LI JE NALOG
URAVNOTEŢEN)
IF(@UKUPNO_DUGUJE=@UKUPNO_POTRAZUJE)
BEGIN
-- SVI PREDUSLOVI SU ISPUNJENI, MOŢEMO DA KNJIŢIMO
BEGIN TRANSACTION
-- DEKLARIŠEMO KURSOR(SKUP SLOGOVA KOJEM ŢELIMO DA PRISTUPAMO)
DECLARE cursFINANSIJSKE_PROMENE CURSOR FOR
SELECT POSLOVNA_GODINA, SIFRA_PREDUZECA, OZNAKA_KLASE,
OZNAKA_GRUPE, OZNAKA_PODGRUPE, OZNAKA_SINTETIKE, OZNAKA_ANALITIKE,
OZNAKA_SUBANALITIKE, SMER_PROMENE, IZNOS_PROMENE,OZNAKA_VRSTE_NALOGA
FROM FINANSIJSKE_PROMEN WHERE BROJ_NALOGA=@pBROJ_NALOGA
AND OZNAKA_VRSTE_NALOGA=@pOZNAKA_VRSTE_NALOGA AND
SIFRA_PREDUZECA=@pSIFRA_PREDUZECA AND
POSLOVNA_GODINA=@pPOSLOVNA_GODINA
-- OTVARANJE KURSORA, POKAZIVAČ JE NA PRVOM SLOGU
OPEN cursFINANSIJSKE_PROMENE
-- PRISTUPAMO PRVOM SLOGU
FETCH NEXT FROM cursFINANSIJSKE_PROMENE INTO
@POSLOVNA_GODINA,@SIFRA_PREDUZECA,@OZNAKA_KLASE, @OZNAKA_GRUPE, @OZNAKA_PODGRUPE,
@OZNAKA_SINTETIKE, @OZNAKA_ANALITIKE, @OZNAKA_SUBANALITIKE, @SMER_PROMENE,
@IZNOS_PROMENE,@OZNAKA_VRSTE_NALOGA
-- ZA @@FETCH_STATUS=0 ZNAČI DA NIJE KRAJ
WHILE (@@FETCH_STATUS=0)
BEGIN
-- DA LI POSTOJI RED U GLAVNOJ KNJIZI KOJI ODGOVARA USLOVIMA
IF EXISTS(SELECT 1 FROM GLAVNA_KNJIGA WHERE
@SIFRA_PREDUZECA =SIFRA_PREDUZECA AND @POSLOVNA_GODINA=POSLOVNA_GODINA AND
@OZNAKA_KLASE=OZNAKA_KLASE AND @OZNAKA_GRUPE=OZNAKA_GRUPE AND
@OZNAKA_PODGRUPE=OZNAKA_PODGRUPE AND @OZNAKA_SINTETIKE=OZNAKA_SINTETIKE AND
@OZNAKA_ANALITIKE=OZNAKA_ANALITIKE AND
@OZNAKA_SUBANALITIKE=OZNAKA_SUBANALITIKE)
-- POSTOJI, UČITAVAMO NJEGOVE VREDNOSTI
BEGIN
-- UPISUJEMO VREDNOSTI REDA U LOKALNE PROMENLJIVE
SELECT @POCETNO_STANJE_DUGUJE = POCETNO_STANJE_DUGUJE,
@POCETNO_STANJE_POTRAZUJE = POCETNO_STANJE_POTRAZUJE, @PROMET_DUGUJE =
PROMET_DUGUJE, @PROMET_POTRAZUJE = PROMET_POTRAZUJE, @SALDO_DUGUJE = SALDO_DUGUJE,
@SALDO_POTRAZUJE = SALDO_POTRAZUJE FROM GLAVNA_KNJIGA WHERE @SIFRA_PREDUZECA
=SIFRA_PREDUZECA AND @POSLOVNA_GODINA=POSLOVNA_GODINA AND @OZNAKA_KLASE=OZNAKA_KLASE
AND @OZNAKA_GRUPE=OZNAKA_GRUPE AND @OZNAKA_PODGRUPE=OZNAKA_PODGRUPE AND
@OZNAKA_SINTETIKE=OZNAKA_SINTETIKE AND @OZNAKA_ANALITIKE=OZNAKA_ANALITIKE AND
@OZNAKA_SUBANALITIKE=OZNAKA_SUBANALITIKE
END
-- NE POSTOJI, KREIRAMO NOVI
53
ELSE
BEGIN
-- UPISUJEMO NULTE VREDNOSTI LOKALNE PROMENLJIVE
SELECT @POCETNO_STANJE_DUGUJE = 0, @POCETNO_STANJE_POTRAZUJE = 0,
@PROMET_DUGUJE = 0, @PROMET_POTRAZUJE = 0, @SALDO_DUGUJE = 0, @SALDO_POTRAZUJE = 0
-- KREIRAMO POTREBAN RED U GLAVNOJ KNJIZI
INSERT INTO GLAVNA_KNJIGA VALUES (@pSIFRA_PREDUZECA, @pPOSLOVNA_GODINA, @OZNAKA_KLASE,
@OZNAKA_GRUPE,
@OZNAKA_PODGRUPE,@OZNAKA_SINTETIKE,@OZNAKA_ANALITIKE,@OZNAKA_SUBANALITIKE,@POCETNO_STA
NJE_DUGUJE,@POCETNO_STANJE_POTRAZUJE,@PROMET_DUGUJE,@PROMET_POTRAZUJE,@SALDO_DUGUJE,@S
ALDO_POTRAZUJE)
END
-- ISPITUJEMO DA LI VRSTA NALOGA POČETNO STANJE
IF ( @OZNAKA_VRSTE_NALOGA='03' )
BEGIN
IF (@SMER_PROMENE='D')
SET @POCETNO_STANJE_DUGUJE=@POCETNO_STANJE_DUGUJE+ @IZNOS_PROMENE
ELSE
SET @POCETNO_STANJE_POTRAZUJE=@POCETNO_STANJE_POTRAZUJE +@IZNOS_PROMENE
END
-- VRSTA NALOGA NIJE POČETNO STANJE
ELSE
BEGIN
IF (@SMER_PROMENE='D')
SET @PROMET_DUGUJE= @PROMET_DUGUJE+@IZNOS_PROMENE
ELSE
SET @PROMET_POTRAZUJE=@PROMET_POTRAZUJE+@IZNOS_PROMENE
END
-- UPISUJEMO UKUPNO DUGOVANJE I POTRAŢIVANJE
SET @UKUPNO_DUGUJE = @POCETNO_STANJE_DUGUJE+@PROMET_DUGUJE
SET @UKUPNO_POTRAZUJE = @POCETNO_STANJE_POTRAZUJE+ @PROMET_POTRAZUJE
-- UČITAVAMO U LOKALNU PROMENLJIVU IZ SUBANALITIKE, "SLADO DUGUJE-POTRAŢUJE"
SELECT @SALDO_DUG_POTR = SALDO_DUG_POTR FROM SUBANALITICKI_KONTO
WHERE SIFRA_PREDUZECA = @pSIFRA_PREDUZECA AND
OZNAKA_KLASE = @OZNAKA_KLASE AND
OZNAKA_GRUPE = @OZNAKA_GRUPE AND
OZNAKA_PODGRUPE = @OZNAKA_PODGRUPE AND
OZNAKA_SINTETIKE = @OZNAKA_SINTETIKE AND
OZNAKA_ANALITIKE = @OZNAKA_ANALITIKE AND
OZNAKA_SUBANALITIKE = @OZNAKA_SUBANALITIKE
-- SALDO DUGOVNI =1
IF (@SALDO_DUG_POTR =1)
BEGIN
SET @SALDO_DUGUJE=@UKUPNO_DUGUJE - @UKUPNO_POTRAZUJE
SET @SALDO_POTRAZUJE=0
END
-- SALDO POTRAŢNI =0
ELSE
BEGIN
SET @SALDO_DUGUJE=0
SET @SALDO_POTRAZUJE=@UKUPNO_POTRAZUJE - @UKUPNO_DUGUJE
END
-- AKO JE NEGATIVNO DUGUJE
IF (@SALDO_DUGUJE<0)
BEGIN
SET @SALDO_POTRAZUJE=-@SALDO_DUGUJE
SET @SALDO_DUGUJE=0
END
-- AKO JE NEGATIVNO POTRAŢUJE
IF (@SALDO_POTRAZUJE<0)
BEGIN
SET @SALDO_DUGUJE=-@SALDO_POTRAZUJE
SET @SALDO_POTRAZUJE=0;
END
-- OSVEŢAVAMO PODATKE U GLAVNOJ KNJIZI
UPDATE GLAVNA_KNJIGA SET
POCETNO_STANJE_DUGUJE = @POCETNO_STANJE_DUGUJE,
POCETNO_STANJE_POTRAZUJE = @POCETNO_STANJE_POTRAZUJE,
PROMET_DUGUJE = @PROMET_DUGUJE,
PROMET_POTRAZUJE = @PROMET_POTRAZUJE,
SALDO_DUGUJE = @SALDO_DUGUJE,
SALDO_POTRAZUJE = @SALDO_POTRAZUJE
WHERE @SIFRA_PREDUZECA =SIFRA_PREDUZECA AND @POSLOVNA_GODINA=POSLOVNA_GODINA AND
@OZNAKA_KLASE=OZNAKA_KLASE AND @OZNAKA_GRUPE=OZNAKA_GRUPE AND
54
@OZNAKA_PODGRUPE=OZNAKA_PODGRUPE AND @OZNAKA_SINTETIKE=OZNAKA_SINTETIKE AND
@OZNAKA_ANALITIKE=OZNAKA_ANALITIKE AND @OZNAKA_SUBANALITIKE=OZNAKA_SUBANALITIKE
-- PRISTUPAMO SLEDEĆEM SLOGU
FETCH NEXT FROM cursFINANSIJSKE_PROMENE INTO
@POSLOVNA_GODINA,@SIFRA_PREDUZECA,@OZNAKA_KLASE, @OZNAKA_GRUPE, @OZNAKA_PODGRUPE,
@OZNAKA_SINTETIKE, @OZNAKA_ANALITIKE, @OZNAKA_SUBANALITIKE, @SMER_PROMENE,
@IZNOS_PROMENE,@OZNAKA_VRSTE_NALOGA
END
-- ZATVARAMO KURSOR I DELOCIRAMO RESURSE
CLOSE cursFINANSIJSKE_PROMENE
DEALLOCATE cursFINANSIJSKE_PROMENE
-- OBRAĐENE PROMENE SE OZNAČAVAJU KAO PROKNJIŢENE
UPDATE FINANSIJSKE_PROMENE SET PROKNJIZEN = 'P'
WHERE BROJ_NALOGA=@pBROJ_NALOGA AND OZNAKA_VRSTE_NALOGA=@pOZNAKA_VRSTE_NALOGA
AND
SIFRA_PREDUZECA=@pSIFRA_PREDUZECA AND
POSLOVNA_GODINA=@pPOSLOVNA_GODINA
-- STATUS NALOGA SE OZNAČAVA KAO PROKNJIŢEN I STAVLJA SE TRENUTNI DATUM ZA DATUM
KNJIŢENJA
UPDATE NALOG_ZA_KNJIZENJE SET STATUS ='P', DATUM_KNJIZENJA=GETDATE() WHERE
SIFRA_PREDUZECA = @pSIFRA_PREDUZECA AND
POSLOVNA_GODINA = @pPOSLOVNA_GODINA AND
OZNAKA_VRSTE_NALOGA = @pOZNAKA_VRSTE_NALOGA AND
BROJ_NALOGA = @pBROJ_NALOGA
-- KNJIŢENJE USPELO
COMMIT TRANSACTION
END
ELSE
BEGIN
RAISERROR('NALOG NIJE URAVNOTEŢEN',11,2)
RETURN
END
END
GO
-------------------------------------------------------------------
-- VRŠI SE ZATVARANJE GLAVNE KNJIGE
CREATE PROCEDURE ZatvaranjeGlavneKnjige
-- ULAZNE PROMENLJIVE
@pPOSLOVNA_GODINA CHAR(4),
@pSIFRA_PREDUZECA CHAR(4),
@pOZNAKA_VRSTE_NALOGA CHAR(2),
@pKORISNICKO_IME_REFERENTA VARCHAR(30)
AS
DECLARE
-- LOKALNE PROMENLJIVE
@SIFRA_PREDUZECA CHAR(4),
@POSLOVNA_GODINA CHAR(4),
@OZNAKA_KLASE CHAR(1),
@OZNAKA_GRUPE CHAR(1),
@OZNAKA_PODGRUPE CHAR(1),
@OZNAKA_SINTETIKE CHAR(1),
@OZNAKA_ANALITIKE CHAR(2),
@OZNAKA_SUBANALITIKE CHAR(3),
@PROMET_DUGUJE DECIMAL(12,2),
@PROMET_POTRAZUJE DECIMAL(12,2),
@SALDO_DUGUJE DECIMAL(12,2),
@SALDO_POTRAZUJE DECIMAL(12,2),
@BROJ_NALOGA NUMERIC(8),
@REDNI_BROJ_PROMENE NUMERIC(10),
@DATUM DATETIME
SET @DATUM=GETDATE()
-- KREIRAMO TRANSAKCIJU
BEGIN TRANSACTION
-- DEKLARIŠEMO KURSOR(SKUP SLOGOVA KOJEM ŢELIMO DA PRISTUPAMO)
DECLARE cursGLAVNA_KNJIGA CURSOR FOR
SELECT OZNAKA_KLASE, OZNAKA_GRUPE, OZNAKA_PODGRUPE, OZNAKA_SINTETIKE,
OZNAKA_ANALITIKE, OZNAKA_SUBANALITIKE,PROMET_DUGUJE, PROMET_POTRAZUJE, SALDO_DUGUJE,
SALDO_POTRAZUJE FROM GLAVNA_KNJIGA
WHERE
POSLOVNA_GODINA=@pPOSLOVNA_GODINA AND
55
(SALDO_DUGUJE<>0 OR SALDO_POTRAZUJE<>0 )AND
SIFRA_PREDUZECA=@pSIFRA_PREDUZECA
-- OTVARANJE KURSORA, POKAZIVAČ JE NA PRVOM SLOGU
OPEN cursGLAVNA_KNJIGA
FETCH NEXT FROM cursGLAVNA_KNJIGA INTO @OZNAKA_KLASE, @OZNAKA_GRUPE,
@OZNAKA_PODGRUPE, @OZNAKA_SINTETIKE, @OZNAKA_ANALITIKE, @OZNAKA_SUBANALITIKE,
@PROMET_DUGUJE, @PROMET_POTRAZUJE, @SALDO_DUGUJE, @SALDO_POTRAZUJE
IF EXISTS (
SELECT 1 FROM NALOG_ZA_KNJIZENJE
)
BEGIN
SELECT @BROJ_NALOGA=max(BROJ_NALOGA)+1 FROM NALOG_ZA_KNJIZENJE
END
ELSE
BEGIN
SET @BROJ_NALOGA = 0;
END
-- KREIRAMO NOVI NALOG
INSERT INTO NALOG_ZA_KNJIZENJE VALUES(
@pOZNAKA_VRSTE_NALOGA, @pSIFRA_PREDUZECA,
@pPOSLOVNA_GODINA, @BROJ_NALOGA,
@pKORISNICKO_IME_REFERENTA, @DATUM, 0, 0, NULL, 'N')
-- PRONALAZIMO SLOBODAN REDNI_BROJ_PROMENE
IF EXISTS (
SELECT 1 FROM FINANSIJSKE_PROMENE
)
BEGIN
SELECT @REDNI_BROJ_PROMENE=max(REDNI_BROJ_PROMENE)
FROM FINANSIJSKE_PROMENE
END
ELSE
BEGIN
SET @REDNI_BROJ_PROMENE = 0;
END
-- ZA @@FETCH_STATUS=0 ZNAČI DA NIJE KRAJ
WHILE (@@FETCH_STATUS=0)
BEGIN
-- SALDO DUGOVNI
IF(@SALDO_DUGUJE>0)
BEGIN
SET @REDNI_BROJ_PROMENE=@REDNI_BROJ_PROMENE+1
INSERT INTO FINANSIJSKE_PROMENE VALUES (
@pOZNAKA_VRSTE_NALOGA, @pSIFRA_PREDUZECA, @pPOSLOVNA_GODINA, @BROJ_NALOGA,
@REDNI_BROJ_PROMENE, @OZNAKA_KLASE, @OZNAKA_GRUPE, @OZNAKA_PODGRUPE,
@OZNAKA_SINTETIKE, @OZNAKA_ANALITIKE, @OZNAKA_SUBANALITIKE, 'ZAKLJUCNO
KNJIZENJE', 'D', -@SALDO_DUGUJE, @DATUM, 'N')
END
-- SALDO POTRAţNI
IF(@SALDO_POTRAZUJE>0)
BEGIN
SET REDNI_BROJ_PROMENE=@REDNI_BROJ_PROMENE+1
INSERT INTO FINANSIJSKE_PROMENE VALUES (
@pOZNAKA_VRSTE_NALOGA, @pSIFRA_PREDUZECA, @pPOSLOVNA_GODINA, @BROJ_NALOGA,
@REDNI_BROJ_PROMENE, @OZNAKA_KLASE, @OZNAKA_GRUPE, @OZNAKA_PODGRUPE,
@OZNAKA_SINTETIKE, @OZNAKA_ANALITIKE, @OZNAKA_SUBANALITIKE, 'ZAKLJUCNO
KNJIZENJE', 'P', -@SALDO_DUGUJE, @DATUM, 'N')
END
FETCH NEXT FROM cursGLAVNA_KNJIGA INTO @OZNAKA_KLASE, @OZNAKA_GRUPE, @OZNAKA_PODGRUPE,
@OZNAKA_SINTETIKE, @OZNAKA_ANALITIKE, @OZNAKA_SUBANALITIKE, @PROMET_DUGUJE,
@PROMET_POTRAZUJE, @SALDO_DUGUJE, @SALDO_POTRAZUJE
END
CLOSE cursGLAVNA_KNJIGA
DEALLOCATE cursGLAVNA_KNJIGA
COMMIT TRANSACTION
GO
---------------------------------------------------------------------
-- VRŠI SE ZAKLJUČNO KNJIŢENJE
CREATE PROCEDURE ZakljucnaKnjizenja
-- ULAZNE PROMENLJIVE
@pOZNAKA_KLASE_PRIHOD CHAR(1),
@pOZNAKA_KLASE_RASHOD CHAR(1),
56
@pPOSLOVNA_GODINA CHAR(4),
@pSIFRA_PREDUZECA CHAR(4),
@pOZNAKA_VRSTE_NALOGA CHAR(2),
@pKORISNICKO_IME_REFERENTA VARCHAR(30)
AS
DECLARE
-- LOKALNE PROMENLJIVE
@SIFRA_PREDUZECA CHAR(4),
@POSLOVNA_GODINA CHAR(4),
@OZNAKA_KLASE CHAR(1),
@OZNAKA_GRUPE CHAR(1),
@OZNAKA_PODGRUPE CHAR(1),
@OZNAKA_SINTETIKE CHAR(1),
@OZNAKA_ANALITIKE CHAR(2),
@OZNAKA_SUBANALITIKE CHAR(3),
@PROMET_DUGUJE DECIMAL(12,2),
@PROMET_POTRAZUJE DECIMAL(12,2),
@SALDO_DUGUJE DECIMAL(12,2),
@SALDO_POTRAZUJE DECIMAL(12,2),
@BROJ_NALOGA NUMERIC(8),
@REDNI_BROJ_PROMENE NUMERIC(10),
@DATUM DATETIME
SET @DATUM=GETDATE()
-- ZAPOČINJEMO TRANSAKCIJU
BEGIN TRANSACTION
-- DEKLARIŠEMO KURSOR(SKUP SLOGOVA KOJEM ŢELIMO DA PRISTUPAMO)
DECLARE cursGLAVNA_KNJIGA CURSOR FOR
SELECT OZNAKA_KLASE, OZNAKA_GRUPE, OZNAKA_PODGRUPE, OZNAKA_SINTETIKE,
OZNAKA_ANALITIKE, OZNAKA_SUBANALITIKE,PROMET_DUGUJE,PROMET_POTRAZUJE, SALDO_DUGUJE,
SALDO_POTRAZUJE
FROM GLAVNA_KNJIGA
WHERE
(OZNAKA_KLASE = @pOZNAKA_KLASE_PRIHOD OR
OZNAKA_KLASE = @pOZNAKA_KLASE_RASHOD) AND
POSLOVNA_GODINA = @pPOSLOVNA_GODINA AND
(SALDO_DUGUJE<>0 OR SALDO_POTRAZUJE<>0 )AND
SIFRA_PREDUZECA = @pSIFRA_PREDUZECA
-- OTVARANJE KURSORA, POKAZIVAČ JE NA PRVOM SLOGU
OPEN cursGLAVNA_KNJIGA
-- PRISTUPAMO PRVOM SLOGU
FETCH NEXT FROM cursGLAVNA_KNJIGA INTO @OZNAKA_KLASE, @OZNAKA_GRUPE,
@OZNAKA_PODGRUPE, @OZNAKA_SINTETIKE, @OZNAKA_ANALITIKE, @OZNAKA_SUBANALITIKE,
@PROMET_DUGUJE, @PROMET_POTRAZUJE, @SALDO_DUGUJE, @SALDO_POTRAZUJE
-- PRONALAZIMO SLOBODAN BROJ NALOGA
IF EXISTS (
SELECT 1 FROM NALOG_ZA_KNJIZENJE
)
BEGIN
SELECT @BROJ_NALOGA=max(BROJ_NALOGA)+1 FROM NALOG_ZA_KNJIZENJE
END
ELSE
BEGIN
SET @BROJ_NALOGA = 0;
END
-- KREIRAMO NOVI NALOG
INSERT INTO NALOG_ZA_KNJIZENJE VALUES( @pOZNAKA_VRSTE_NALOGA,
@pSIFRA_PREDUZECA,@pPOSLOVNA_GODINA, @BROJ_NALOGA, @pKORISNICKO_IME_REFERENTA, @DATUM,
0, 0, NULL, 'N')
-- PRONALAZIMO SLOBODAN REDNI_BROJ_PROMENE
IF EXISTS (
SELECT 1
FROM FINANSIJSKE_PROMENE
)
BEGIN
SELECT @REDNI_BROJ_PROMENE=max(REDNI_BROJ_PROMENE)
FROM FINANSIJSKE_PROMENE
END
ELSE
BEGIN
SET @REDNI_BROJ_PROMENE = 0;
END
-- ZA @@FETCH_STATUS=0 ZNAČI DA NIJE KRAJ
WHILE (@@FETCH_STATUS=0)
BEGIN
57
-- DUGOVANJE
IF(@SALDO_DUGUJE>0)
BEGIN
SET REDNI_BROJ_PROMENE=@REDNI_BROJ_PROMENE+1
INSERT INTO FINANSIJSKE_PROMENE VALUES (
@pOZNAKA_VRSTE_NALOGA,@pSIFRA_PREDUZECA,@pPOSLOVNA_GODINA,
@BROJ_NALOGA,@REDNI_BROJ_PROMENE,@OZNAKA_KLASE, @OZNAKA_GRUPE,
@OZNAKA_PODGRUPE,@OZNAKA_SINTETIKE, @OZNAKA_ANALITIKE, @OZNAKA_SUBANALITIKE,'AKLJUCNO
KNJIZENJE','D', -@SALDO_DUGUJE, @DATUM, 'N')
END
-- POTRAŢIVANJE
IF(@SALDO_POTRAZUJE>0)
BEGIN
SET @REDNI_BROJ_PROMENE=@REDNI_BROJ_PROMENE+1
INSERT INTO FINANSIJSKE_PROMENE VALUES (
@pOZNAKA_VRSTE_NALOGA,@pSIFRA_PREDUZECA,@pPOSLOVNA_GODINA,
@BROJ_NALOGA,@REDNI_BROJ_PROMENE,@OZNAKA_KLASE, @OZNAKA_GRUPE,
@OZNAKA_PODGRUPE,@OZNAKA_SINTETIKE, @OZNAKA_ANALITIKE, @OZNAKA_SUBANALITIKE,'AKLJUCNO
KNJIZENJE','P', -@SALDO_DUGUJE, @DATUM, 'N')
END
-- PRISTUPAMO SLEDEĆEM SLOGU
FETCH NEXT FROM cursGLAVNA_KNJIGA INTO @OZNAKA_KLASE, @OZNAKA_GRUPE, @OZNAKA_PODGRUPE,
@OZNAKA_SINTETIKE, @OZNAKA_ANALITIKE, @OZNAKA_SUBANALITIKE, @PROMET_DUGUJE,
@PROMET_POTRAZUJE, @SALDO_DUGUJE, @SALDO_POTRAZUJE
END
-- ZATVARAMO KURSOR I DELOCIRAMO RESURSE
CLOSE cursGLAVNA_KNJIGA
DEALLOCATE cursGLAVNA_KNJIGA
-- POTVRĐUJEMO TRANSAKCIJU
COMMIT TRANSACTION
GO
---------------------------------------------------------------------
-- POMOĆNA PROCEDURA, POZIVAJU JE TRIGERI
CREATE PROCEDURE AzuriranjeDugovanjaIPotrazivanjaNaNalogu
-- ULAZNE PROMENLJIVE
@SIFRA_PREDUZECA CHAR(4),
@OZNAKA_VRSTE_NALOGA CHAR(2),
@POSLOVNA_GODINA CHAR(4),
@BROJ_NALOGA NUMERIC(8)
AS
DECLARE
-- LOKALNE PROMENLJIVE
@UKUPNO_DUGUJE DECIMAL(12,2),
@UKUPNO_POTRAZUJE DECIMAL(12,2)
-- IZRAČUNAVAMO UKUPNO DUGOVANJE
IF EXISTS (SELECT 1 FROM FINANSIJSKE_PROMENE WHERE
SIFRA_PREDUZECA=@SIFRA_PREDUZECA AND
OZNAKA_VRSTE_NALOGA=@OZNAKA_VRSTE_NALOGA AND
POSLOVNA_GODINA=@POSLOVNA_GODINA AND
BROJ_NALOGA=@BROJ_NALOGA AND
SMER_PROMENE='D')
BEGIN
SELECT @UKUPNO_DUGUJE=SUM(IZNOS_PROMENE) FROM FINANSIJSKE_PROMENE WHERE
SIFRA_PREDUZECA=@SIFRA_PREDUZECA AND OZNAKA_VRSTE_NALOGA=@OZNAKA_VRSTE_NALOGA AND
POSLOVNA_GODINA=@POSLOVNA_GODINA AND BROJ_NALOGA=@BROJ_NALOGA AND SMER_PROMENE='D'
END
ELSE
SET @UKUPNO_DUGUJE=0
-- IZRAČUNAVAMO UKUPNO POTRAŢIVANJE
IF EXISTS ( SELECT 1 FROM FINANSIJSKE_PROMENE WHERE
SIFRA_PREDUZECA=@SIFRA_PREDUZECA AND
OZNAKA_VRSTE_NALOGA=@OZNAKA_VRSTE_NALOGA AND
POSLOVNA_GODINA=@POSLOVNA_GODINA AND
BROJ_NALOGA=@BROJ_NALOGA AND SMER_PROMENE='P')
BEGIN
SELECT @UKUPNO_DUGUJE=SUM(IZNOS_PROMENE) FROM FINANSIJSKE_PROMENE WHERE
SIFRA_PREDUZECA=@SIFRA_PREDUZECA AND OZNAKA_VRSTE_NALOGA=@OZNAKA_VRSTE_NALOGA AND
POSLOVNA_GODINA=@POSLOVNA_GODINA AND BROJ_NALOGA=@BROJ_NALOGA AND SMER_PROMENE='P'
END
ELSE
SET @UKUPNO_POTRAZUJE=0
-- OSVEŢAVANJE UKUPNIH DUGOVANJA I POTRAŢIVANJA
58
UPDATE NALOG_ZA_KNJIZENJE SET UKUPNO_DUGUJE=@UKUPNO_DUGUJE,
UKUPNO_POTRAZUJE=@UKUPNO_POTRAZUJE WHERE
SIFRA_PREDUZECA=@SIFRA_PREDUZECA AND OZNAKA_VRSTE_NALOGA=@OZNAKA_VRSTE_NALOGA
AND
POSLOVNA_GODINA=@POSLOVNA_GODINA AND BROJ_NALOGA=@BROJ_NALOGA
GO
----------------------------------------------------------------------
-- RADI STORNIRANJE NALOGA, POŠTO BRISANJE PROKNJŢENOG NIJE MOGUĆE
CREATE PROCEDURE StornoNaloga
-- ULAZNE PROMENLJIVE
@pOZNAKA_VRSTE_NALOGA CHAR(2),
@pSIFRA_PREDUZECA CHAR(4),
@pPOSLOVNA_GODINA CHAR(4),
@pBROJ_NALOGA NUMERIC(8),
@pKORISNICKO_IME_REFERENTA VARCHAR(30)
AS
DECLARE
-- LOKALNE PROMENLJIVE
@SIFRA_PREDUZECA CHAR(4),
@POSLOVNA_GODINA CHAR(4),
@OZNAKA_KLASE CHAR(1),
@OZNAKA_GRUPE CHAR(1),
@OZNAKA_PODGRUPE CHAR(1),
@OZNAKA_SINTETIKE CHAR(1),
@OZNAKA_ANALITIKE CHAR(2),
@OZNAKA_SUBANALITIKE CHAR(3),
@SMER_PROMENE CHAR(1),
@IZNOS_PROMENE DECIMAL(12,2),
@DATUM DATETIME,
@BROJ_NALOGA NUMERIC(8),
@REDNI_BROJ_PROMENE NUMERIC(10),
@STATUS CHAR(1)
-- UZIMAMO TRENUTNO VREME
SET @DATUM=GETDATE()
-- STATUS NALOGA MORA BITI PROKNJIŢEN DA BI SE RADIO STORNO
SELECT @STATUS=STATUS FROM NALOG_ZA_KNJIZENJE
WHERE
POSLOVNA_GODINA = @pPOSLOVNA_GODINA AND
SIFRA_PREDUZECA = @pSIFRA_PREDUZECA AND
OZNAKA_VRSTE_NALOGA = @pOZNAKA_VRSTE_NALOGA AND
BROJ_NALOGA = @pBROJ_NALOGA
IF (@STATUS <> 'P')
BEGIN
RAISERROR('MORA BITI PROKNJIŢEN DA BI SE STORNIRAO',11,2)
RETURN
END
BEGIN
BEGIN TRANSACTION
-- DEKLARIŠEMO KURSOR(SKUP SLOGOVA KOJEM ŢELIMO DA PRISTUPAMO)
DECLARE cursFINANSIJSKE_PROMENE CURSOR FOR
SELECT OZNAKA_KLASE, OZNAKA_GRUPE, OZNAKA_PODGRUPE, OZNAKA_SINTETIKE,
OZNAKA_ANALITIKE,
OZNAKA_SUBANALITIKE, SMER_PROMENE, IZNOS_PROMENE FROM FINANSIJSKE_PROMENE WHERE
POSLOVNA_GODINA = @pPOSLOVNA_GODINA AND SIFRA_PREDUZECA = @pSIFRA_PREDUZECA AND
OZNAKA_VRSTE_NALOGA = @pOZNAKA_VRSTE_NALOGA AND
BROJ_NALOGA = @pBROJ_NALOGA
-- OTVARANJE KURSORA, POKAZIVAČ JE NA PRVOM SLOGU
OPEN cursFINANSIJSKE_PROMENE
-- PRISTUPAMO PRVOM SLOGU
FETCH NEXT FROM cursFINANSIJSKE_PROMENE INTO @OZNAKA_KLASE, @OZNAKA_GRUPE,
@OZNAKA_PODGRUPE, @OZNAKA_SINTETIKE,
@OZNAKA_ANALITIKE, @OZNAKA_SUBANALITIKE, @SMER_PROMENE, @IZNOS_PROMENE
-- PRONALAZIMO SLOBODAN BROJ NALOGA
IF EXISTS (
SELECT 1 FROM NALOG_ZA_KNJIZENJE
)
BEGIN
SELECT @BROJ_NALOGA=max(BROJ_NALOGA)+1 FROM NALOG_ZA_KNJIZENJE
END
ELSE
BEGIN
SET @BROJ_NALOGA = 0;
59
END
-- KREIRAMO NOVI NALOG
INSERT INTO NALOG_ZA_KNJIZENJE VALUES('02', @pSIFRA_PREDUZECA,
@pPOSLOVNA_GODINA, @BROJ_NALOGA, @pKORISNICKO_IME_REFERENTA, @DATUM, 0, 0, NULL, 'N')
-- PRONALAZIMO SLOBODAN REDNI_BROJ_PROMENE
IF EXISTS (
SELECT 1 FROM FINANSIJSKE_PROMENE
)
BEGIN
SELECT
@REDNI_BROJ_PROMENE=max(REDNI_BROJ_PROMENE)
FROM FINANSIJSKE_PROMENE
END
ELSE
BEGIN
SET @REDNI_BROJ_PROMENE = 0;
END
--ZA @@FETCH_STATUS=0 ZNAČI DA NIJE KRAJ
WHILE (@@FETCH_STATUS=0)
BEGIN
SET @REDNI_BROJ_PROMENE=@REDNI_BROJ_PROMENE+1
INSERT INTO FINANSIJSKE_PROMENE VALUES (
'02', @pSIFRA_PREDUZECA, @pPOSLOVNA_GODINA, @BROJ_NALOGA,
@REDNI_BROJ_PROMENE, @OZNAKA_KLASE, @OZNAKA_GRUPE, @OZNAKA_PODGRUPE,
@OZNAKA_SINTETIKE, @OZNAKA_ANALITIKE,
@OZNAKA_SUBANALITIKE, 'STORNO', @SMER_PROMENE, IZNOS_PROMENE,
@DATUM, 'N')
FETCH NEXT FROM cursFINANSIJSKE_PROMENE INTO @OZNAKA_KLASE, @OZNAKA_GRUPE,
@OZNAKA_PODGRUPE, @OZNAKA_SINTETIKE, @OZNAKA_ANALITIKE, @OZNAKA_SUBANALITIKE,
@SMER_PROMENE, @IZNOS_PROMENE
END
-- ZATVARAMO KURSOR I DELOCIRAMO RESURSE
CLOSE cursFINANSIJSKE_PROMENE
DEALLOCATE cursFINANSIJSKE_PROMENE
COMMIT TRANSACTION
END
GO
5.2 Trigeri
--------------------------------------------------------------------
-- CREATE TRIGGER NEMA_EDITOVANJA_PROKNJIZENIH_TRANSAKCIJA ON FINANSIJSKE_PROMENE
-- NE DOZVOLJAVA AŢURIRANJE VEĆ PROKNJIŢENIH TRANSAKCIJA
-- NE DOZVOLJAVA AŢURIRANJE SMERA FINANSIJSKE PROMENE AKO TO SUBANALITIKA NE
DOZVOLJAVA ( POTRAŢNA I/ILI DUGOVNA )
-- NE DOZVOLJAVA PROMENU PARTNERA AKO NOVI PARTNER NE ODGOVARA IZABRANOJ ULOZI ( KUPAC
I/ILI DOBAVLJAČ )
crEATE TRIGGER KontrolaAzuriranjaFinansijskihPromena ON FINANSIJSKE_PROMENE FOR
UPDATE
AS
--DEKLARISEMO PROMENLJIVE
DECLARE
-- FINANSIJSKE PROMENE
@SIFRA_PREDUZECA char(4),
@OZNAKA_KLASE char(1),
@OZNAKA_GRUPE char(1),
@OZNAKA_PODGRUPE char(1),
@OZNAKA_SINTETIKE char(1),
@OZNAKA_ANALITIKE char(2),
@OZNAKA_SUBANALITIKE char(3),
@SMER_PROMENE char(1),
@PROKNJIZEN char(1),
-- SUBANALITIKA
@DUGOVNI bit,
@POTRAZNI bit,
@SUBANALITIKA_DOBAVLJACA bit,
@SUBANALITIKA_KUPACA bit,
@SUBANALITIKA_ZAPOSLENOG bit,
@SUBANALITIKA_ODELJENJA bit,
-- POSLOVNI PARTNERI
@SIFRA_PARTNERA char(4),
60
@TIP_POSLOVNOG_PARTNERA char(1),
@KUPAC bit,
@DOBAVLJAC bit,
-- NALOG
@OZNAKA_VRSTE_NALOGA char(2),
@BROJ_NALOGA numeric(8,0),
@POSLOVNA_GODINA char(4)
-- PROVERAVAMO DA DOKUMENT RANIJE NIJE PROKNJIŢEN
SELECT @PROKNJIZEN = PROKNJIZEN
FROM DELETED
IF (@PROKNJIZEN='P')
BEGIN
RAISERROR ('NE MOŢETE IZMENITI PROKNJIŢENU TRANSAKCIJU', 16, 1)
ROLLBACK
END
--UCITAVAMO PODATKE KOJE SMO DOBILI DA IZMENIMO U FINANSIJSKOJ PROMENI
SELECT
@PROKNJIZEN = PROKNJIZEN ,
@SIFRA_PREDUZECA = SIFRA_PREDUZECA,
@OZNAKA_KLASE = OZNAKA_KLASE,
@OZNAKA_GRUPE = OZNAKA_GRUPE,
@OZNAKA_PODGRUPE = OZNAKA_PODGRUPE,
@OZNAKA_SINTETIKE = OZNAKA_SINTETIKE,
@OZNAKA_ANALITIKE = OZNAKA_ANALITIKE,
@OZNAKA_SUBANALITIKE = OZNAKA_SUBANALITIKE,
@SMER_PROMENE = SMER_PROMENE,
@OZNAKA_VRSTE_NALOGA = OZNAKA_VRSTE_NALOGA,
@BROJ_NALOGA = BROJ_NALOGA,
@POSLOVNA_GODINA = POSLOVNA_GODINA
FROM INSERTED
-- UČITAVAMO PODATKE IZ SUBANALITIKE
SELECT
@DUGOVNI = DUGOVNI,
@POTRAZNI = POTRAZNI,
@SIFRA_PARTNERA = SIFRA_PARTNERA,
@TIP_POSLOVNOG_PARTNERA = TIP_POSLOVNOG_PARTNERA,
@SUBANALITIKA_DOBAVLJACA = SUBANALITIKA_DOBAVLJACA,
@SUBANALITIKA_KUPACA = SUBANALITIKA_KUPACA,
@SUBANALITIKA_ZAPOSLENOG = SUBANALITIKA_ZAPOSLENOG,
@SUBANALITIKA_ODELJENJA = SUBANALITIKA_ODELJENJA
FROM Subanaliticki_konto
WHERE
SIFRA_PREDUZECA = @SIFRA_PREDUZECA AND
OZNAKA_KLASE = @OZNAKA_KLASE AND
OZNAKA_GRUPE = @OZNAKA_GRUPE AND
OZNAKA_PODGRUPE = @OZNAKA_PODGRUPE AND
OZNAKA_SINTETIKE = @OZNAKA_SINTETIKE AND
OZNAKA_ANALITIKE = @OZNAKA_ANALITIKE AND
OZNAKA_SUBANALITIKE = @OZNAKA_SUBANALITIKE
-- PROVERA DA LI JE BILO STA PRONADJENO (TJ. DA LI ZADATI POSTOJI KONTO)
IF (@DUGOVNI = NULL)
BEGIN
RAISERROR ('NE MOŢETE KNJIŢITI NA NEPOSTOJUĆI KONTO', 16, 1)
ROLLBACK
RETURN
END
-- PROVERAVAMO PRAVA KNJIŢENJA U ODNOSU NA TIP SUBANALITIKE (KONTA)
IF (@SMER_PROMENE = 'D')
BEGIN
IF (@DUGOVNI = 0)
BEGIN
RAISERROR ('NE MOŢETE KNJIŢITI DUGUJE NA POTRAŢNU SUBANALITIKU', 16, 1)
ROLLBACK
RETURN
END
END
ELSE IF (@SMER_PROMENE = 'P')
BEGIN
IF (@POTRAZNI = 0)
BEGIN
RAISERROR ('NE MOŢETE KNJIŢITI POTRAŢUJE NA DUGOVNU SUBANALITIKU', 16,
1)
ROLLBACK
RETURN
END
END
61
-- PROVERAVAMO DA LI STATUS POSLOVNOG PARTNERA ODGOVARA NJEGOVOM OPISU
IF(( (@SIFRA_PARTNERA<>NULL) OR (@SIFRA_PARTNERA<>'') )AND (
(@TIP_POSLOVNOG_PARTNERA<>NULL) OR (@TIP_POSLOVNOG_PARTNERA<>'') ))
BEGIN
-- UČITAVAMO PODATKE IZ TABELE POSLOVNIH PARTNERA
SELECT
@DOBAVLJAC=DOBAVLJAC, @KUPAC=KUPAC
FROM POSLOVNI_PARTNERI
where
SIFRA_PREDUZECA=@SIFRA_PARTNERA and
TIP_POSLOVNOG_PARTNERA=@TIP_POSLOVNOG_PARTNERA and
SIFRA_PARTNERA=@SIFRA_PARTNERA
-- PROVERA ZA SLUČAJ DOBAVLJAČA
IF (@SMER_PROMENE = 'D')
BEGIN
IF(@DOBAVLJAC=0)
BEGIN
RAISERROR ('PARTNER IZABRAN ZA DOBAVLJAČA NEMA STATUS
DOBAVLJAČA', 16, 1)
ROLLBACK
END
END
ELSE IF (@SMER_PROMENE = 'P')
BEGIN
IF(@KUPAC=0)
BEGIN
RAISERROR ('PARTNER IZABRAN ZA KUPCA NEMA STATUS KUPCA', 16, 1)
ROLLBACK
END
END
END
-- AZURIRANJE PODATAKA NA NALOGU SA KOJEG JE OBRISANA FINANSIJSKA PROMENA
EXEC AzuriranjeDugovanjaIpotrazivanjaNaNalogu @SIFRA_PREDUZECA,
@OZNAKA_VRSTE_NALOGA, @POSLOVNA_GODINA, @BROJ_NALOGA
GO
--------------------------------------------------------
--CREATE TRIGGER NEMA_UNOŠENJA_PROKNJIZENIH_TRANSAKCIJA ON FINANSIJSKE_PROMENE
-- NE DOZVOLJAVA UNOS VEĆ PROKNJIŢENIH TRANSAKCIJA
-- NE DOZVOLJAVA UNOS NEODGOVARAJUĆEG SMERA FINANSIJSKE PROMENE ( U ODNOSU NA
SUBANALITIKU ( POTRAŢNA I/ILI DUGOVNA ))
-- NE DOZVOLJAVA UNOS KUPCA I/ILI DOBAVLJAČA I/ILI ZAPOSLENOG I/ILI SLUŢBE AKO
IZABRANA SUBANALITIKA TO NE PODRŢAVA ( SUBANALITIKA KUPCA,DOBAVLJAČA,ZAPOSLENOG I
SLUŢBE )
-- NE DOZVOLJAVA UNOS PARTNERA AKO PARTNER NE ODGOVARA IZABRANOJ ULOZI ( KUPAC I/ILI
DOBAVLJAC )
CREATE TRIGGER KontrolaUnosaFinansijskihPromena ON Finansijske_promene
FOR INSERT
AS
-- DEKLARISEMO PROMENLJIVE
DECLARE
-- FINANSIJSKE PROMENE
@SIFRA_PREDUZECA char(4),
@OZNAKA_KLASE char(1),
@OZNAKA_GRUPE char(1),
@OZNAKA_PODGRUPE char(1),
@OZNAKA_SINTETIKE char(1),
@OZNAKA_ANALITIKE char(2),
@OZNAKA_SUBANALITIKE char(3),
@PROKNJIZEN char(1),
@SMER_PROMENE char(1),
-- SUBANALITIKA
@SIFRA_SEKTORA char(1),
@SIFRA_SLUZBE char(2),
@SIFRA_ODELJENJA char(2),
@MATICNI_BROJ char(4),
@DUGOVNI bit,
@POTRAZNI bit,
@SUBANALITIKA_DOBAVLJACA bit,
@SUBANALITIKA_KUPACA bit,
@SUBANALITIKA_ZAPOSLENOG bit,
@SUBANALITIKA_ODELJENJA bit,
62
-- POSLOVNI PARTNERI
@SIFRA_PARTNERA char(4),
@TIP_POSLOVNOG_PARTNERA char(1),
@KUPAC bit,
@DOBAVLJAC bit,
-- NALOG
@OZNAKA_VRSTE_NALOGA char(2),
@POSLOVNA_GODINA char(4),
@BROJ_NALOGA numeric(8,0),
@STATUS char(1)
-- UČITAVAMO PODATKE KOJE SMO DOBILI DA INSERTUJEMO U FINANSIJSKU PROMENU
SELECT
@PROKNJIZEN =PROKNJIZEN ,
@SIFRA_PREDUZECA = SIFRA_PREDUZECA,
@OZNAKA_KLASE = OZNAKA_KLASE,
@OZNAKA_GRUPE = OZNAKA_GRUPE,
@OZNAKA_PODGRUPE = OZNAKA_PODGRUPE,
@OZNAKA_SINTETIKE = OZNAKA_SINTETIKE,
@OZNAKA_ANALITIKE = OZNAKA_ANALITIKE,
@OZNAKA_SUBANALITIKE = OZNAKA_SUBANALITIKE,
@SMER_PROMENE = SMER_PROMENE,
@OZNAKA_VRSTE_NALOGA=OZNAKA_VRSTE_NALOGA,
@POSLOVNA_GODINA=POSLOVNA_GODINA,
@BROJ_NALOGA=BROJ_NALOGA
FROM INSERTED
-- PROVERAVAMO DA DOKUMENT RANIJE NIJE PROKNJIŢEN
IF (@PROKNJIZEN='P')
BEGIN
RAISERROR ('NE MOŢETE UNETI PROKNJIŢENU TRANSAKCIJU', 16, 1)
ROLLBACK
END
-- UČITAVAMO PODATKE IZ SUBANALITIKE
SELECT
@SIFRA_PARTNERA=SIFRA_PARTNERA,
@TIP_POSLOVNOG_PARTNERA=TIP_POSLOVNOG_PARTNERA,
@SIFRA_SEKTORA=SIFRA_SEKTORA,
@SIFRA_SLUZBE = SIFRA_SLUZBE,
@SIFRA_ODELJENJA = SIFRA_ODELJENJA,
@MATICNI_BROJ=MATICNI_BROJ,
@DUGOVNI = DUGOVNI,
@POTRAZNI = POTRAZNI,
@SUBANALITIKA_DOBAVLJACA=SUBANALITIKA_DOBAVLJACA,
@SUBANALITIKA_KUPACA=SUBANALITIKA_KUPACA,
@SUBANALITIKA_ZAPOSLENOG=SUBANALITIKA_ZAPOSLENOG,
@SUBANALITIKA_ODELJENJA=SUBANALITIKA_ODELJENJA
FROM SUBANALITICKI_KONTO
WHERE
SIFRA_PREDUZECA = @SIFRA_PREDUZECA AND
OZNAKA_KLASE = @OZNAKA_KLASE AND
OZNAKA_GRUPE = @OZNAKA_GRUPE AND
OZNAKA_PODGRUPE = @OZNAKA_PODGRUPE AND
OZNAKA_SINTETIKE = @OZNAKA_SINTETIKE AND
OZNAKA_ANALITIKE = @OZNAKA_ANALITIKE AND
OZNAKA_SUBANALITIKE = @OZNAKA_SUBANALITIKE
-- PROVERA DA LI JE BILO STA PRONADJENO (TJ. DA LI ZADATI POSTOJI KONTO)
IF (@SUBANALITIKA_DOBAVLJACA = NULL)
BEGIN
RAISERROR ('NE MOŢETE KNJIŢITI NA NEPOSTOJUĆI KONTO', 16, 1)
ROLLBACK
RETURN
END
--PROVERAVAMO PRAVA KNJIZENJA U ODNOSU NA TIP SUBANALITIKE (KONTA)
IF (@SMER_PROMENE = 'D')
BEGIN
IF (@DUGOVNI = 0)
BEGIN
RAISERROR ('NE MOŢETE KNJIŢITI DUGUJE NA POTRAŢNU SUBANALITIKU', 16, 1)
ROLLBACK
63
RETURN
END
END
ELSE IF (@SMER_PROMENE = 'P')
BEGIN
IF (@POTRAZNI = 0)
BEGIN
RAISERROR ('NE MOŢETE KNJIŢITI POTRAŢUJE NA DUGOVNU SUBANALITIKU', 16,
1)
ROLLBACK
RETURN
END
END
-- SUBANALITIKA ZAPOSLENOG
IF( (@MATICNI_BROJ<>NULL) OR (@MATICNI_BROJ<>'') )
BEGIN
IF EXISTS ( SELECT 1 FROM ZAPOSLENI WHERE
SIFRA_PREDUZECA=@SIFRA_PREDUZECA AND
MATICNI_BROJ=@MATICNI_BROJ)
BEGIN
IF(@SUBANALITIKA_ZAPOSLENOG=0)
BEGIN
RAISERROR ('IZABRANA SUBANALITIKA NIJE SUBANALITIKA
ZAPOSLENOG', 16, 1)
ROLLBACK
END
END
ELSE
BEGIN
RAISERROR ('NE POSTOJE SVI NEOPHODNI PARAMETRI ZAPOSLENOG', 16,
1)
ROLLBACK
END
END
-- SUBANALITIKA ODELJENJA
IF( ( (@SIFRA_SEKTORA<>NULL) OR (@SIFRA_SEKTORA<>'') ) OR
( (@SIFRA_SLUZBE<>NULL) OR (@SIFRA_SLUZBE<>'') ) OR
( (@SIFRA_ODELJENJA<>NULL) OR (@SIFRA_ODELJENJA<>'') ) )
BEGIN
IF EXISTS ( SELECT 1 FROM ODELJENJE WHERE
SIFRA_PREDUZECA=@SIFRA_PREDUZECA AND
SIFRA_SEKTORA=@SIFRA_SEKTORA AND
SIFRA_SLUZBE=@SIFRA_SLUZBE AND
SIFRA_ODELJENJA = @SIFRA_ODELJENJA)
BEGIN
IF(@SUBANALITIKA_ODELJENJA=0)
BEGIN
RAISERROR ('IZABRANA SUBANALITIKA NIJE SUBANALITIKA ODELJENJA',
16, 1)
ROLLBACK
END
END
ELSE
BEGIN
RAISERROR ('NE POSTOJE SVI NEOPHODNI PARAMETRI ODELJENJA', 16, 1)
ROLLBACK
END
END
-- SUBANALITIKA POSLOVNOG PARTNERA
IF(( (@SIFRA_PARTNERA<>NULL)OR(@SIFRA_PARTNERA<>'')) OR
((@TIP_POSLOVNOG_PARTNERA<>NULL)OR(@TIP_POSLOVNOG_PARTNERA<>'') ))
BEGIN
SELECT
@DOBAVLJAC=DOBAVLJAC,
@KUPAC=KUPAC
FROM POSLOVNI_PARTNERI
WHERE
SIFRA_PARTNERA=@SIFRA_PARTNERA AND
TIP_POSLOVNOG_PARTNERA=@TIP_POSLOVNOG_PARTNERA
IF EXISTS (SELECT 1 FROM POSLOVNI_PARTNERI WHERE
SIFRA_PARTNERA=@SIFRA_PARTNERA AND
TIP_POSLOVNOG_PARTNERA=@TIP_POSLOVNOG_PARTNERA)
BEGIN
IF (@SMER_PROMENE = 'D')
64
BEGIN
IF((@DOBAVLJAC=0) OR (@DOBAVLJAC=NULL))
BEGIN
RAISERROR ('PARTNER IZABRAN ZA DOBAVLJAČA NIJE
DOBAVLJAČ', 16, 1)
ROLLBACK
END
IF((@SUBANALITIKA_DOBAVLJACA=0)OR(@SUBANALITIKA_DOBAVLJACA=NULL))
BEGIN
RAISERROR ('IZABRANA SUBANALITIKA NIJE SUBANALITIKA
DOBAVLJAČA', 16, 1)
ROLLBACK
END
END
ELSE IF (@SMER_PROMENE = 'P')
BEGIN
IF((@KUPAC=0) OR (@KUPAC=NULL) )
BEGIN
RAISERROR ('PARTNER IZABRAN ZA KUPCA NIJE KUPAC', 16, 1)
ROLLBACK
END
IF((@SUBANALITIKA_KUPACA=0) OR (@SUBANALITIKA_KUPACA=NULL) )
BEGIN
RAISERROR ('IZABRANA SUBANALITIKA NIJE SUBANALITIKA
KUPCA', 16, 1)
ROLLBACK
END
END
END
ELSE
BEGIN
RAISERROR ('NE POSTOJE SVI NEOPHODNI PARAMETRI POSLOVNOG PARTNERA', 16,
1)
ROLLBACK
END
END
SELECT
@STATUS=STATUS
FROM NALOG_ZA_KNJIZENJE WHERE
SIFRA_PREDUZECA=@SIFRA_PREDUZECA AND
POSLOVNA_GODINA=@POSLOVNA_GODINA AND
OZNAKA_VRSTE_NALOGA=@OZNAKA_VRSTE_NALOGA AND
BROJ_NALOGA=@BROJ_NALOGA
IF(@STATUS='P')
BEGIN
RAISERROR ('NE MOŢETE DODATI FINANSIJSKU PROMENU NA PROKNJIŢEN NALOG', 16, 1)
ROLLBACK
END
EXEC AzuriranjeDugovanjaIpotrazivanjaNaNalogu
@SIFRA_PREDUZECA,@OZNAKA_VRSTE_NALOGA,@POSLOVNA_GODINA,@BROJ_NALOGA
GO
--------------------------------------------------------------
-- NE DOZVOLJAVA BRISANJE FINANSIJSKE PROMENE SA STATUSOM PROKNJIŢENA
CREATE TRIGGER KontrolaBrisanjaFinansijskihPromena ON FINANSIJSKE_PROMENE FOR DELETE
AS
-- DEKLERACIJA PROMENLJIVIH
declare
@PROKNJIZEN char(1),
@SIFRA_PREDUZECA char(4),
@OZNAKA_VRSTE_NALOGA char(2),
@POSLOVNA_GODINA char(4),
@BROJ_NALOGA numeric(8,0)
-- UČITAVAMO POTREBNE PODATKE O ELEMENTU KOJI TREBA DA SE BRIŠE
SELECT
@PROKNJIZEN =PROKNJIZEN ,
@OZNAKA_VRSTE_NALOGA=OZNAKA_VRSTE_NALOGA,
@POSLOVNA_GODINA=POSLOVNA_GODINA,
@BROJ_NALOGA=BROJ_NALOGA,
@SIFRA_PREDUZECA = SIFRA_PREDUZECA
FROM DELETED
65
IF (@PROKNJIZEN='P')
BEGIN
RAISERROR ('NE MOZETE OBRISATI PROKNJIZENU TRANSAKCIJU', 16, 1)
ROLLBACK
END
-- AŢURIRANJE PODATAKA NA NALOGU SA KOJEG JE OBRISANA FINANSIJSKA PROMENA
EXEC AzuriranjeDugovanjaIpotrazivanjaNaNalogu
@SIFRA_PREDUZECA,@OZNAKA_VRSTE_NALOGA,@POSLOVNA_GODINA,
@BROJ_NALOGA
GO
--------------------------------------------------------------
-- NE DOZVOLJAVA AZURIRANJE PROKNJIZENIH NALOGA
crEATE TRIGGER KontrolaAzuriranjaNaloga ON NALOG_ZA_KNJIZENJE
FOR UPDATE
AS
DECLARE
@STATUS CHAR(1)
SELECT @STATUS =STATUS FROM DELETED
IF (@STATUS='P')
BEGIN
RAISERROR ('NE MOŢETE VRŠITI IZMENU NAD PROKNJIŢENIM NALOGOM', 16, 1)
ROLLBACK
END
GO
--------------------------------------------------------------
-- NE DOZVOLJAVA UNOS NALOGA SA STATUSOM PROKNJIZEN
crEATE TRIGGER KontrolaUnosaNaloga ON NALOG_ZA_KNJIZENJE
FOR INSERT
AS
DECLARE
@STATUS CHAR(1)
SELECT @STATUS =STATUS FROM INSERTED
IF (@STATUS='P')
BEGIN
RAISERROR ('NE MOŢETE UNETI PROKNJIŢEN NALOG, STATUS PRI UNOSU MORA IMATI
VREDNOST "N"', 16, 1)
ROLLBACK
END
GO
--------------------------------------------------------------
-- NE DOZVOLJAVA BRISANJE NALOGA SA STATUSOM PROKNJIZEN
crEATE TRIGGER KontrolaBrisanjaNaloga ON nalog_za_knjizenje
FOR DELETE
AS
DECLARE
@STATUS CHAR(1)
SELECT @STATUS =STATUS FROM DELETED
IF (@STATUS='P')
BEGIN
RAISERROR ('NE MOŢETE OBRISATI PROKNJIŢENI NALOG',
16, 1)
ROLLBACK
END
GO
66
5.3 Primeri generisanih izveštaja
67
68
69
70
71
72
73
5.4 Uputstvo za instalaciju
Program radi na Windows operativnim sistemima i koristi Microsoft .NET
Frameworks v2.0 .
5.4.1 Serverska strana
Podizanje servera:
x86 OS
Pokrenuti .\Server\Microsoft SQL Server 2005 Express Edition Service Pack
2\SQLEXPR32.EXE (preporuka, koristiti Windows Authentication kao pravo
pristupa)
Pokrenuti .\Server\Microsoft SQL Server 2005 Express Edition Service Pack
2\SQLServer2005_SSMSEE.msi
U slučaju da server nije automatsi startovan , startovati ga.
x64 OS
Pokrenuti .\Server\Microsoft SQL Server 2005 Express Edition Service Pack
2\SQLEXPR.EXE (preporuka, koristiti Windows Authentication kao pravo pristupa)
Pokrenuti .\Server\Microsoft SQL Server 2005 Express Edition Service Pack
2\SQLServer2005_SSMSEE.msi
U slučaju da server nije automatsi startovan , startovati ga.
Kreiranje baze podataka:
Pokrenuti Start→Progrms→Microsoft SQL Server 2005→SQL Server Managment
Studio Express.
Konektovati se na bazu.
Kreirati bazu podataka pod imenom "finansijsko". Koristiti komandu: create database
finanijsko
Nad novokreiranom bazom izvršiti skriptove ovim redosledom
.\Server\SQL Skript\crebas.sql --tabele, veze, indeksi
.\Server\SQL Skript\Procedure.sql --logika .\Server\SQL Skript\Trigeri.sql --logika
.\Server\SQL Skript\Test Podaci.sql --(*ovo samo u slučaju testiranja programa)
Kreirati prvog administratora naloga (*ukoliko je prethodno pokretan TestPodaci.sql
ovo preskociti). Primer kreiranja admin naloga: INSERT INTO DRZAVA VALUES('srb', 'Srbija', 1)
INSERT INTO NASELJENO_MESTO VALUES('srb', 11000, 's', 'Beograd')
INSERT INTO PREDUZECE VALUES('0001', 'srb', 11000, 'C-Market','Mise
Dimitrijevica 4b', '1285565', '9331233', '011/123-456', 1)
INSERT INTO ZAPOSLENI VALUES('0001','0001', 'srb', 11000, '1','20','91',
'Panic', 'Goran', 'Isa', 1234005290123, 'Đure Jakšiča 87', '011-123123',
'Pripravnik')
INSERT INTO REFERENTI VALUES('a','0001','0001','a',4)
Kreirati vrste naloga (**moguće je uraditi iz klijentske aplikacije) (*ukoliko je
prethodno pokretan TestPodaci.sql ovo preskociti) INSERT INTO VRSTE_NALOGA_ZA_KNJIZENJE VALUES ( '01', 'NALOG' )
INSERT INTO VRSTE_NALOGA_ZA_KNJIZENJE VALUES ( '02', 'STORNO' )
INSERT INTO VRSTE_NALOGA_ZA_KNJIZENJE VALUES ( '03', 'OTVARANJE POČETNO STANJA' )
INSERT INTO VRSTE_NALOGA_ZA_KNJIZENJE VALUES ( '04', 'ZATVARANJE GLAVNE KNJIGE' )
INSERT INTO VRSTE_NALOGA_ZA_KNJIZENJE VALUES ( '05', 'ZAKLJUČNO KNJIŢENJE' )
74
5.4.2 Klientska strana
Neophodni programi:
x86 OS
Ukoliko nemate windowsInstaller v2.0 ili noviju, potrebno je instalirati
.\Client\WindowsInstallerV2x86\WindowsInstaller-KB893803-v2-x86.exe
Ukoliko nemate Microsoft .NET Frameworks v2.0 ili noviji instalirati
.\Client\Microsoft .NET Frameworks 3.5\ WindowsInstaller-KB893803-v2-
x86.exe\dotNetFx35setup.exe
x64 OS
Ukoliko nemate windowsInstaller v2.0 ili noviju, potrebno je instalirati
.\Client\WindowsInstallerV2x64\WindowsInstaller-KB893803-v2-x64.exe
Ukoliko nemate Microsoft .NET Frameworks v2.0 ili noviji instalirati
.\Client\Microsoft .NET Frameworks 3.5\ WindowsInstaller-KB893803-v2-
x64.exe\dotNetFx35setup.exe
Program Finanijsko Kjigovodstvo v2.0:
x86 OS
- Instalirajte program (*Program je potrebno instalirati (automatski podeseno) u
folder pod imenom ...\Finansijsko Knjigovodstvo\ ) .\Client\Finanijsko Knjigovodstvo\x86\Setup.exe
Podesiti konekcioni string: Start → Progrms → Finansijsko Knjigovodstvo →
Konfigurisanje → Finansijsko.exe.config
Pokrenite program i ulogujte se pod nalogom koji vam je kreirao administrator u
skladu sa vašim pravima (za primer gore: "a" , "a" ) x64 OS
Instalirajte program (*Program je potrebno instalirati (automatski odeseno) u folder
pod imenom ...\Finansijsko Knjigovodstvo\ )
.\Client\Finanijsko Knjigovodstvo\x64\Setup.exe
Podesiti konekcioni string: Start → Progrms → Finansijsko Knjigovodstvo →
Konfigurisanje → Finansijsko.exe.config
Pokrenite program i ulogujte se pod nalogom koji vam je kreirao administrator u
skladu sa vašim pravima (za primer gore: "a" , "a" )
75
6. LITERATURA
[1] dr Dragan Mihajlović, “Informacioni sistemi i projektovanje baze podataka”, Novi Sad,
1998
[2] Vera Poznanić - Leko, “Računovodstvo”, za III razred ekonomske škole, Beograd, Juna
1997
[3] Vera Poznanić - Leko, “Računovodstvo”, za IV razred ekonomske škole, Beograd, Januar
2002
[4] dr Dragan Ivetić, “Interakcija čovek računar”, skripta, Novi Sad, 2006
[5] Karli Watson, Christian Nagel, Jacob Hammer Pedersen, Jon D. Reid, Morgan Skinner,
Eric White; “Beginning Visual C# 2005”, Wiley Publishing Inc. Indianapolis - Indiana, Copyright 2006
76
77
7. BIOGRAFIJA
Goran Panić je roĎen 5. januara 1981. godine u Kikindi. Osnovnu školu završio u
IĎošu školske 1995/1996. Srednju tehniču školu, smer elektrotehničar automatike završio u Kikindi školske 1999/2000 godine. Školske 2000/2001 upisao Fakultet tehničkih nauka,
odsek elektrotehnika i računarstvo, smer računarstvo i automatika. Školske 2005/2006 upisao
se na usmerenje za računarske nauke i informatiku.
78
KLJUČNA DOKUMENTACIJSKA INFORMACIJA
Redni broj,
RBR:
Identifikacioni broj,
IBR:
Tip dokumentacije,
TD: monografska publikacija
Tip zapisa,
TZ: tekstualni štampani dokument
Vrsta rada,
VR: diplomski rad
Autor,
AU: Goran Panić
Mentor,
MN: dr Dragan Mihajlović
Naslov rada, NR: Razvoj aplikacije za podršku finansijskom knjigovodstvu
Jezik publikacije,
JP: srpski (latinica)
Jezik izvoda,
JI: srpski / engleski
Zemlja publikovanja,
ZP: Srbija
Uže geografsko područje, UGP: Vojvodina
Godina,
GO: 2008
Izdavač,
IZ: autorski reprint
Mesto i adresa, MA: Novi Sad, Fakultet tehničkih nauka, Odsek za
računarstvo i automatiku, Trg D. Obradovića 6
Fizički opis rada,
FO: broj poglavlja: 7
broj stranica : 77
broj referenci : 5
broj tabela : 0
broj slika : 55
broj grafikona : 0
broj priloga : 4
Naučna oblast,
NO: računarske nauke
Uža naučna oblast,
ND: informacioni sistemi
Predmetna odrednica/
ključne reči,
PO: finansijsko knjigovodstvo, nalog za knjiženje, finansijske promene, glavna knjiga, generisanje finansijskih izveštaja, NET Framework,
programski jezik C#, Microsoft SQL server
UDK broj,
UDK:
Čuva se u,
ČU: Biblioteka Fakulteta tehničkih nauka,
Trg D. Obradovića 6, Novi Sad
Važna napomena,
VN
Izvod,
IZ: U radu je opisana realizacija desktop aplikacije za podršku
finansijskom knjigovodstvu. Za implementaciju sistema korišćen je
C# programski jezik, NET Framework i Microsoft SQL Server
sistem za upravljanje bazom podataka.
Datum prihvatanja teme od
naučno-nastavnog veća,
DP:
Datum odbrane,
DO:
Članovi komisije,
KO
Predsednik: prof. dr Cvijan Krsmanović, red. prof., FTN Novi Sad
Član: prof. dr Ivan Luković, red. prof., FTN Novi Sad
Mentor: dr Dragan Mihajlović, docent, FTN Novi Sad
KEY WORDS DOCUMENTATION
Accession number,
ANO:
Indentification number,
INO:
Document type,
DT: Monographic publication
Type of recordset,
TR: Textual material
Contents code,
CC: BSC Thesis
Author,
AU: Goran Panić
Mentor,
MN: Dragan Mihajlović, PhD
Title, TI: Development of application for finantial accountancy
support
Language of text,
LT: Serbian (latin)
Language of abstract,
LA: Serbian and English
Country of publication,
CP: Serbia
Locality of publication,
LP: Vojvodina
Publication year,
PY: 2008
Publisher,
PB: Author reprint
Publish place,
PL: Novi Sad, 21000, RS Trg Dositeja Obradovića 6
Physical description
PD: number of chapters: 7
number of pages : 77
number of referecnces: 5
number of tables : 0
number of pictures : 55
number of charts : 0
number of appendix :4
Scientific field,
SF: Computing Science
Scientific discipline,
SD: Information systems
Subject/Key words, SX: finantial accountancy, accountancy order, main book, generation of
finantial reports, NET framework, C# programming language,
Microsoft SQL Server
UC:
Holding data,
AB: Library of Faculty of Technical Sciences,Novi Sad, RS
Note,
NT:
Abstract, AB: This paper describes realization of desktop application for support
for finantial accountancy. C# programming language, NET
Framework i Microsoft SQL Server system for managing databases
are used for implementing this system.
Accepted by Scientific
Board on:
ASP:
Defended on,
DE:
Thesis defended board (named/degree/title/faculty),
DB:
President: Cvijan Krsmanović, PhD, full prof., FTN Novi Sad
Member: Ivan Luković, PhD, full prof., FTN Novi Sad
Member: Dragan Mihajlović, PhD, assist. prof., FTN Novi Sad