OPTIMIRANJE IZPISOV V PROGRAMU CLICKTRANS

Similar documents
IP PACKET QUEUING DISCIPLINES AS BASIC PART OF QOS ASSURANCE WITHIN THE NETWORK

Sistemske zahteve za SAOP

Vodnik skozi Google Analytics Beta verzija 1. del. prehod s stare kode (urchin.js), k novi kodi za sledenje (ga.js)

Državni izpitni center SPOMLADANSKI IZPITNI ROK *M * NAVODILA ZA OCENJEVANJE. Četrtek, 2. junij 2016 SPLOŠNA MATURA

RAZLOG ZA IZVAJANJE PROGRAMA POPRBAZA

How we calculate volume with the use of NTF method. Kako izračunamo volumen z uporabo metode NTF

DB2 podatkovna baza v praksi

Calculation of volume with the use of NTF method. Izračun volumnov z uporabo NTF metode

Q: Do You made a backup before upgrade? A: Only cowards make backups!

» Nakup in vzdrževanje Oracle programske opreme «Tehnične specifikacije

Prirejanje in preverjanje tipov

Session:E07 GALIO - DB2 index advisor, how we implemented it and what we get from self-made expert tool

Transakcije v MariaDB/MySQL (transakcija A)

Delavnica za konfiguriranje dostopovnih točk WEB konfiguracija LANCOM L-54

formati slike in branje slike pomen in nekaj primerov EM spekter aplikacije v posameznih delih spektra o matriki slike

sodobne poslovnoinformacijske rešitve Birokrat Kratka navodila za namestitev demo verzije programa Birokrat

UDF for volume calculation with the use of NTF method. Lastne Excel funkcije za izračun prostornin po NTF metodi

Uvod v svetovni splet

Delavnica za konfiguriranje dostopovnih točk Konfiguracija LANCOM L-54 z uporabo orodja LANConfig

Strukturirani poizvedovalni jezik SQL

SUBJECT CATEGORY-BASED ANALYSIS OF DESCRIPTORS OF SLOVENIAN PLANT SCIENCE DOCUMENTS IN THE AGRIS DATABASE IN THE PERIOD

Navodila za interaktivne naloge Bober

Hitra rast hranjenih podatkov

Izdelava aplikacij s podporo delovnih tokov za okolje SharePoint Server

Izdelava urejevalnika izvorne kode v oblaku z uporabo tehnologij HTML5

Razvoj jezika za iskanje, povezovanje in predstavitev podatkov

Lotus Quickr Najhitrejši način izmenjave poslovne vsebine

RAZVOJ ENOSTAVNE SPLETNE APLIKACIJE Z UPORABO FLEKSIBILNEGA OGRODJA NA ODPRTOKODNIH KNJIŢNICAH

Organizacija računalnikov (OR) UNI-RI, 3.l. RS Vaje. doc.dr. Mira Trebar

Hierarhično načrtovanje. Načrtovanje digitalnih el. sistemov. Deklaracija komponent. Komponente

Razred File vsebuje osnovne metode za delo z datotekami, kot sta branje in zapisovanje.

Programski jezik Java

DOKUMENTACIJA ZA POTRDITEV NAROČILA EANCOM ORDRSP D96A (EAN005) Version: 1.0 Draft

Šolski center Novo mesto Srednja elektro šola in tehniška gimnazija Šegova ulica 112, 8000 Novo mesto. Maturitetna seminarska naloga

Prometno načrtovanje xdsl

BLUETOOTH KOMUNIKATOR ZA WINDOWS MOBILE 6.5

Vzpostavitev spletnega vmesnika za prikaz tenziomiografskih meritev

ABBYY rešitve za prepoznavo in klasifikacijo dokumentov

Podatkovni model za celostno vodenje proizvodnje

PRISOTNOST PRI POUKU S POMOČJO RFID

POROČILO PRAKTIČNEGA IZOBRAŽEVANJA

ERCOlight LUM je energetsko visoko učinkovita svetilka za visoke prostore z možnostjo številnih različnih modifikacij.

Sistemske zahteve za Saop icenter

Predstavitev teksta v računalniku

Razširitve CMS z lastnimi moduli

Primerjava in analiza učinkovitosti podatkovnih baz DB2 in MySQL

Algoritmi in podatkovne strukture 2. Urejanje (sorting)

APLIKACIJE ZA SOCIALNA

Uporaba strežnika SharePoint za vodenje poteka dela pri izvajanju kompleksnih projektov

Mobilna aplikacija za pregledovanje slik visokih ločljivosti

Kosovnica. Marko Obid. Kosovnica. Marko Obid

Družina IEEE802 Poddružina IEEE802.1 Priključitev v omrežje IEEE802.1x

Fakulteta za elektrotehniko, računalništvo in informatiko Inštitut za avtomatiko Laboratorij za obdelavo signalov in daljinska vodenja

Selitev aplikacije iz Oracle Forms v Oracle ADF (Application migration from Oracle Forms to Oracle ADF)

Hierarhično načrtovanje. Načrtovanje digitalnih el. sistemov. Deklaracija komponent. Komponente

POROČILO PRAKTIČNEGA IZOBRAŽEVANJA v Amis d.o.o., Maribor

Postavitev in upravljanje zasebnega oblaka z uporabo Microsoft System Center 2012 R2 in Windows Azure Pack za ponudnike storitev

SPLETNE SESTAVLJANKE IN POSLOVNI PORTALI

NAMESTITEV WINDOWS 7 OKOLJA Z UPORABO MICROSOFT WAIK ORODIJ

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Dean Črnigoj. Izdelava odjemalca NFS za Windows DIPLOMSKO DELO

TEHNIČNA POJASNILA GLEDE IZPOLNJEVANJA ITS POROČIL

Twitter Bootstrap in razvoj spletnega repozitorija za Cacti

VISOKOŠOLSKI STROKOVNI ŠTUDIJ RAČUNALNIŠTVO IN TEHNOLOGIJE KOMUNICIRANJA

Razvoj napredne spletne trgovine z upoštevanjem zgodovine nakupov

Naslavljanje v IP. Miran Meža

Andrej Jamšek. Namestitev programske opreme s poudarkom na tehnologiji MSI

Analiza uporabe GWT za razvoj spletnih aplikacij

Navodila za nastavitev varne povezave po protokolu SSH

RAZVOJ GENERATORJA POSLOVNIH SPLETNIH APLIKACIJ

Dostop do podatkov Svetovne banke v orodju Orange

PODATKOVNE BAZE NOSQL

Časovno omejevanje dostopa do interneta

Spletna aplikacija za urejanje vadbenih programov v fitnesu

Razvoj orodja za centralni nadzor posodobitev v platformi WordPress

Primerjava orodij za razvoj mobilnih aplikacij

VB komande. Programiranje 1

Testiranje spletne aplikacije z orodji Selenium in Windmill

Metodologija migracije iz Exchange v Office 365

Preregistracija 2013

PREGLED MOBILNIH REŠITEV ZA IZOBRAŽEVANJE UPRAVLJANJA INFORMATIKE

Aplikacija za podporo delovanja svetovalcev

Delo z grafi v relacijskih in sodobnih nerelacijskih podatkovnih bazah

Jernej Vidmar. Preslikava in obogatitev podatkov iz relacijskih podatkovnih baz v RDF obliko

POSTAVITEV SPLETNEGA SISTEMA ZA PRIKAZ NAČRTA PROIZVODNJE

Mobilna aplikacija za pregled informacij o prometu v Sloveniji

IZDELAVA PROGRAMSKEGA PAKETA ZA GRAFIČNI PRIKAZ POMENSKIH SLOVARJEV IN ONTOLOGIJ

Vmesnik za vodenje sistema Lego Mindstorms v razvojnem okolju Siemens Step7

Univerza v Mariboru Fakulteta za organizacijske vede. Programska rešitev za grafično prikazovanje najema in rezervacij vozil

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Aleš Čadeţ SISTEM ZA ANALIZO OBISKOV SPLETNEGA MESTA

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Aleš Tepina. Samodejna izdelava dokumentacije za sistem telefonije IP

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO. Marko Kastelec PRIMERJAVA NAČINOV DOSTOPA DO PODATKOVNE BAZE V PROGRAMSKEM JEZIKU C#

IBM Lotus Notes in Domino 8

Ogrodje za razvoj mikrostoritev v Javi in njihovo skaliranje v oblaku

Specification and Implementation of a Light-Weight Internet Content Delivery Platform

Razširitev in podpora serijskih komunikacijskih vmesnikov na Raspberry Pi platformi

Aplikacija za prikaz prostorskih podatkov

Uvedba OLAP sistema za potrebe analize prodaje v podjetju Metal Ravne d.o.o.

Navodila za uporabo izdelkov programske opreme Microsoft

UPORABA SILVERLIGHT 4 ZA PODPORO PRI ELEKTRONSKEM PREVERJANJU ZNANJA

SPLETNA REŠITEV ZA POTREBE DRUŠTVA UPOKOJENCEV

Transcription:

UNIVERZA V MARIBORU FAKULTETA ZA ORGANIZACIJSKE VEDE Organizacija in management informacijskih sistemov OPTIMIRANJE IZPISOV V PROGRAMU CLICKTRANS Mentor: doc. dr. Igor Bernik Kandidat: Roman Kavčič Kranj, avgust 2008

ZAHVALA Zahvaljujem se mentorju doc. dr. Igorju Berniku za strokovno pomoč, pripombe in predloge, ki so prispevali h kakovostnejšemu diplomskemu delu. Hvala g. Igorju Potočniku in ge. Giti Rojini iz podjetja Infotrans d.o.o. ter g. Nikoli Šurlanovu za sodelovanje pri zbiranju gradiva in koristno pomoč pri izdelavi diplomskega dela. Zahvaljujem se ge. Urši Thaler, ki je lektorirala diplomsko nalogo. Posebna zahvala gre staršu za vzpodbujanje in podporo pri izdelavi naloge.

POVZETEK ClickTrans je program, ki ga razvija podjetje Infotrans d.o.o. Namenjen je logistični administraciji. Najpogosteje ga uporabljajo avtoprevozniki. Uporabniki ClickTransa pričakujejo, da jim program olajša delo s papirji. V ključnih točkah delovnega procesa potrebujejo pravilne in ustrezne izpise. Več ko je teh izpisov, bolj je pomembno, v kako kratkem času se izpis zmore izpisati. In znano je, da bolj ko so kompleksni izpisi, dalj časa potrebuje računalnik, da jih generira. V diplomski nalogi smo spopolnili del programa tako, da je možno pripraviti predogled izpisa od 53% do 84% hitreje. Z eksperimentalno metodo smo določili tiste funkcije, ki so najbolj počasne. To sta funkcija za prevajanje in funkcija za nalaganje oblike izpisa. Naša tehnična rešitev problema vsebuje konkretne spremembe v kodi, primerjavo stare kode z novo, primere starega in novega SQL-a ter napotke za doseganje podobnih rezultatov na podobnih programih. KLJUČNE BESEDE - Software - ClickTrans -.NET - Visual Basic - Optimiziranje izpisov

ABSTRACT ClickTrans is an application developed by Infotrans d.o.o. It primary function is logistical administration. Most commonly is used by lorry transport companies. ClickTrans users expect from application easy work with papers. In key points of work process right and adequate prints are needed. With quantity of prints grows the importance of time consumed by computer generating those prints. In this work we have improved part of application. It s possible to open printpreview from 53 % to 84 % faster. With experimental method we have pinpointed the slowest functions. These are function for translation and function for loading layout of print. Our technical solution contains code changes, comparison of old code to new, examples of old SQL and new. We also have tips for achieving similar results in similar applications. KEYWORDS - Software - ClickTrans -.NET - Visual Basic - Printing optimisation

KAZALO 1 UVOD... 1 1.1 PREDSTAVITEV PROBLEMA...1 1.2 PREDSTAVITEV PODJETJA INFOTRANS...1 1.3 PREDPOSTAVKE IN OMEJITVE...2 1.4 METODE DELA...3 2 TEORETIČNE OSNOVE... 4 2.1 TEORIJA DEVEXPRESS.XTRAREPORTS...4 2.1.1 PREGLED POVEZOVANJA PODATKOV...4 2.1.2 GLAVNI KONCEPT...5 2.2 SQL...7 2.3.NET...7 2.3.1 DATASET RAZRED...7 2.3.2 TABLEADAPTER RAZRED...8 3 OBSTOJEČE STANJE... 9 3.1 POSNETEK STANJA FUNKCIJ ZA ODPIRANJE PREDOGLEDA IZPISA...9 3.1.1 POSNETEK FUNKCIJE ZA PREVAJANJE...14 3.1.2 POSNETEK SQL STORE PROCEDUR...22 3.2 KRITIČNA ANALIZA...37 4 PRENOVA KODE ZA PREDOGLED IZPISA... 38 4.1 OPTIMIRANJE FUNKCIJE REPORT.LOADLAYOUT...38 4.1.1 MERITVE ČASOV PO SPREMEMBAH REPORT.LOADLAYOUT NA NEPRIVZETI OBLIKI IZPISA...40 4.1.2 MERITVE ČASOV PO SPREMEMBAH REPORT.LOADLAYOUT NA PRIVZETI OBLIKI IZPISA...43 4.2 OPTIMIRANJE FUNKCIJE PREVAJANJE...45 4.2.1 MERITVE ČASOV PO SPREMEMBAH FUNKCIJE PREVAJANJA NA NEPRIVZETI OBLIKI IZPISA...47 4.2.2 MERITVE ČASOV PO SPREMEMBAH FUNKCIJE PREVAJANJA NA PRIVZETI OBLIKI IZPISA...49 5 ZAKLJUČKI... 51 5.1 OCENA UČINKOV...51 5.2 POGOJI ZA UVEDBO...53

5.3 MOŽNOSTI NADALJNJEGA RAZVOJA...53 5.4 NAPOTKI ZA DOSEGO PODOBNIH REZULTATOV...53 LITERATURA IN VIRI...55 KAZALO SLIK...56 POJMOVNIK...58 KRATICE IN AKRONIMI...58

1 UVOD ClickTrans je program, ki ga razvija podjetje Infotrans d.o.o. Namenjen je logistični administraciji. Najpogosteje ga uporabljajo avtoprevozniki. Osnovne funkcionalnosti so: modul za vodenje partnerjev, kadrovske mape, avtopark, izdelava naročila, vodenje prevozov in izdaja računov. Funkcionalnost programa je možno z dodatnimi sklopi prilagoditi tudi na druge potrebe podjetij. Ti dodatni sklopi so: modul za vodenje pralnice cistern, vodenje potnih nalogov in obračun plač zaposlenih. Uporabniki ClickTransa pričakujejo, da jim program olajša delo s papirji. V ključnih točkah delovnega procesa potrebujejo pravilne in ustrezne izpise. Več ko je teh izpisov, bolj je pomembno, v kako kratkem času se izpis zmore izpisati. In znano je, da bolj ko so kompleksni izpisi, dalj časa potrebuje računalnik, da jih generira. Z diplomsko nalogo želimo ta del podrobneje predstaviti in ga izboljšati v časovnem pogledu. Problem izpisov za avtoprevozniška podjetja je poseben in se z njim do sedaj programerji niso posebej ukvarjali. Predhodnih raziskav ne zasledimo. 1.1 PREDSTAVITEV PROBLEMA Isto verzijo programa uporablja veliko avtoprevoznikov, a so njihove potrebe po istem tipu izpisa drugačne. Skratka, ni podjetij, ki bi uporabljala oblikovno in podatkovno identično obliko izpisov. Programer mora pripraviti take osnove, da zadosti njihovim zahtevam. Zaradi razlik v izpisih (obstoj številnih kombinacij) se začnejo pojavljati problemi. Predogled izpisa se predolgo generira, ker program zajema vse zahteve in funkcionalnost, ki jih hočejo podjetja, vendar jih uporabljajo samo del. Ker je nesmotrno, da bi imelo vsako podjetje svojo verzijo programa, rešujemo problem globalno v modulu printi in njegovim referenčnimi moduli. Z raziskovalno nalogo bomo rešili problem počasnosti odpiranja predogleda izpisa. 1.2 PREDSTAVITEV PODJETJA INFOTRANS Infotrans je manjše podjetje, ki se ukvarja z različnimi dejavnostmi (http://www.infotrans.si, 2008). Po obliki je družba z omejeno odgovornostjo (d. o. o.). Organiziranost podjetja sloni na programu Ključ. Program omogoča lahek nadzor nad vsemi planiranimi dejavnostmi, dejavnostmi v delu ter končanimi dejavnostmi. Večina informacij, ki jih potrebujejo zaposleni za normalno delo, se pretaka prav tako v Ključu. Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 1

Infotrans ima sedem redno zaposlenih delavcev, ki se jim po potrebi pridruži še pet do sedem študentov z različnih področij študija, predvsem ekonomije in informatike. Podjetje sodeluje tudi z zunanjimi strokovnjaki in razvijalci programov. Med dejavnostmi prevladujeta informatika in svetovanje za transportna podjetja na področjih kot sta organizacija in sistemske rešitve. Izdeluje programsko opremo in rešitve za popolno, sodobno opremo prometnih pisarn transportnih podjetij. Rešitve v programski opremi Infotransa so plod lastnih izkušenj pri delu v prometnih pisarnah. Glavni cilj Infotransa je resnično zadovoljstvo strank, ki so mu zaupale vodenje transporta svojega blaga. Zaposleni v Infotransu, ki so certificirani strokovnjaki, pomagajo podjetjem pri načrtovanju, izvedbi in vzdrževanju njihovih lokalnih mrež ter jih kvalitetno in hitro povežejo v svetovni splet. Tehnologije Infotransa podpirajo oddaljeno delo poslovnih enot strank in jim zagotavljajo popolno podporo z oddaljenim help deskom ali mantiance načinom. Podjetje je certificirani Microsoft Partner, kar pomeni, da vgrajuje in vzdržuje najbolj razširjene operacijske sisteme kot sta Microsoft Windows XP in Microsoft Windows VISTA. Poskrbi tudi za učinkovito uporabo omenjene opreme, saj izpeljuje izobraževanja in strokovna izpopolnjevanja svojih strank. Infotransov»paradni konj«je program ClickTrans 3.0. Namenjen je malim in srednjim transportno logističnim podjetjem. Stranke, ki ga uporabljajo, so razpršene po celi Sloveniji, nekaj pa jih je tudi na Hrvaškem. Program zagotavlja obvladovanje informacij o nakladanju, razkladanju in trenutnih razporedih prevozniških kapacitet. Tako je postal ključni dejavnik konkurenčnosti transportnega podjetja. 1.3 PREDPOSTAVKE IN OMEJITVE Predpostavljamo, da se lahko s spremembami v programu ClickTrans skrajšajo časi odpiranja predogleda izpisa. Menimo, da je za počasnost odpiranja predogleda izpisa vzrok v sestavi kode ali SQL bazi. Z raziskavo želimo določiti funkcije, ki se izvajajo pri klicu predogleda izpisa in predstavljajo znaten delež odpiralnega časa. Po določitvi teh funkcij bomo z eksperimentom poizkušali skrajšati čase izvajanja funkcij, vendar tako, da ne bo prišlo do spremembe končnih rezultatov. Domnevamo, da na čas odpiranja znatno vpliva uporaba neprivzete oblike izpisa. Predvideni rezultat je izpopolnjen program ClickTrans v tistem delu, ki je povezan s predogledom izpisa, in sicer tako, da bo trajanje operacije oz. čas, ki ga program porabi od klika na ikono»predogled izpisa«pa do prikazanja le-tega, skrajšan za vsaj 20%. Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 2

Program bomo izpopolnili tako, da bo rešitev upoštevala naslednje omejitve: zagotovila hitro odpiranje predogleda izpisa pri obstoječi strukturi baze, brez ogrožanja zanesljivosti izpisov, ohranila dosedanje funkcionalnosti izpisov, omogočala predelavo programske rešitve in testiranje ustreznosti hitrosti odpiranja predogledov izpisov. 1.4 METODE DELA V nalogi smo se usmerili k oblikovanju tehnične rešitve, ki vsebuje konkretne spremembe v kodi programa ClickTrans. Osnovno vprašanje, ki smo si ga zastavili, je, ali je možno v programu s spremembami nekaterih funkcij zagotoviti hitrejše odpiranje predogleda izpisa. Raziskavo začnemo z določanjem izhodiščnega stanja (deskriptivna metoda, Sagadin, 1993), s katerim ugotovimo čase izvajanja posameznih funkcij. Končamo z izpopolnjeno obliko programa. Glavna metoda, ki smo jo uporabljali, je eksperimentalna. V tem postopku smo v kontroliranih razmerah preučili učinke sprememb nekaterih delov kode in SQL-a. Določili smo način merjenja časa odpiranja predogleda izpisa. Vsi eksperimenti so bili opravljeni na istem računalniku, strežniku z imenom INFOD, preko Remote desktop connection. INFOD vsebuje Intelov procesor CORE2 6600 pri frekvenci 2.4 Hz, s 4 GB rama. Operacijski sistem je Microsoft Windows Server 2003 SP1. Merjenje kot glavna metoda dela je potekalo preko meritev za vrednotenje učinkovitosti izvajanja funkcij, ki so osnova za izpise. Izmerili smo čase odpiranja predogleda izpisa pred spremembami v kodi in SQL-u ter po spremembah. Primerjali smo odpiralne čase in izvedli statistično analizo le-teh (komparativna metoda). Za spreminjanje in razvijanje SQL-a smo uporabljali program Microsoft SQL Enterprise Manager, različico 8.0, za razvoj kode pa Microsoft Visual Studio 2005, različico 8.0. Kot orodje za merjenje časa odpiranja predogledov smo uporabljali Microsoft Visual Studio debuger. Metoda dela z besedilom Z metodo dela z besedilom smo spoznavali dokumentacija o DevExpress-ovih in Microsoft Developer Network-ovih knjižnicah, ki so na voljo na internetu. Zbiranje podatkov Iz uradnih dokumentov podjetja Infotrans smo zbrali osnovne podatke o njegovem delovanju in zahtevah strank pri uporabi programa ClickTrans. Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 3

2 TEORETIČNE OSNOVE 2.1 TEORIJA DEVEXPRESS.XTRAREPORTS 2.1.1 PREGLED POVEZOVANJA PODATKOV Za uresničitev ciljev raziskovalne naloge je potrebno poznavanje osnov povezovanja podatkov z Devexpressovim sistemom. Povezovanje je podrobno opisano v Devexpresovi tehnični dokumentaciji. V sl. 1 predstavljamo del povezovanja predmetov, ki so pomembni za našo raziskavo o optimiranju izpisov v programu Clicktrans. Slika 1: Posnetek povezovanja predmetov v DevExpress.XtraReports ms-help://devexpress.netv7.2/devexpress.xtrareports/customdocument1179.htm Da se poveže XtraReport predmet na podatkovni vir, je potrebno nastaviti njegovo XtraReportBase.DataSource lastnost. Pri tem ni pomembno, katero metodo vezanja podatkov smo izbrali. Dodatno mora biti definirana tudi XtraReportBase.DataAdapter lastnost. Vse to moramo zagotoviti, oziroma je to potrebno, če želimo samodejno polniti DataSet s podatki v oblikovalnem načinu ali v času zagona, namesto da bi to počeli preko kode. V tem primeru XtraReport Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 4

predmet ugotovi, da je podatkovni vir prazen in da DataAdapter lastnost ni brez vrednosti (null) in bo samodejno klical DataAdapter.Fill metodo. Metode povezovanje na podatke z uporabo.net podatkovnih vmesnikov zahteva, da so podatki shranjeni v bazi podatkov. Naše poročilo lahko vežemo na te podatke z uporabo enega izmed dveh podatkovnih adapterjev: OleDbDataAdapter ali SqlDataAdapter. [...]. Slednji je oblikovan tako, da deluje s podatkovnimi viri, ki nam jih ponuja Microsoft SQL Server različica 7.0 (oz. novejša). Da se povežeta do podatkov in sta sposobna ustvarjati DataSet objekt, ki vsebuje podatkovne tabele. Oba podatkovna adapterja uporabljata Connection predmete. Podatkovne tabele (ali podatkovni pogledi, vezani na tabele) so lahko direktno vezani na poročilo preko XtraReportBase.DataSource lastnosti. Prav tako lahko vežemo ustvarjen DataSet predmet na XtraReportBase.DataSource lastnost. Z XtraReportBase.DataAdapter lastnosti določimo, kateri DataAdapter bo uporabljen. Vsako poročilo v XtraReport-ih je predstavljeno z instanco XtraReport razreda ali (bolj pogosto) z eno od njegovih potomcev. Ta dokument predstavi glavni koncept za izgradnjo in objavo reportov z XtraReport garnituro. Opisuje osnovne uporabe XtraReport-ov, razloži kako so lahko poročila izdelana in opisuje strukturo preprostega poročila. Več o elementih poročila, ki se uporabljajo v XtraReport-ih, si lahko preberemo v temah»report Bands and Report Contols«. 2.1.2 GLAVNI KONCEPT V splošnem so XtraReport-i podobni Windows formam. Vsak razred forme je otrok razreda forme, vsak razred poročila je otrok XtraReport razreda. Poročila služijo kot enkapsulatorji za kontrole, ki so zgrajene z namenom, da so lahko dodane v projekt in jih Visual Studio IDE obravnava kot standardne forme. Blok diagram v sl. 2 prikazuje osnove kreiranja aplikacije s poročili s pomočjo XtraReport-ov (ms-help://devexpress.netv7.2/devexpress.xtrareports/customdocument2587.htm). Slika 2: Blok diagram Osnove kreiranja aplikacije s poročili s pomočjo XtraReport-ov Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 5

Vsako poročilo je lahko: vezano na podatke, nevezano. Vezano poročilo naredimo tako, da najprej vežemo poročilo na DataSource in potem določimo vezne možnosti za vsako kontrolo na poročilu. Več o izdelavi vezanega poročila najdemo v»the Data Binding Methods Overview and Binding Report Controls to Data«dokumenta. Pri kreaciji poročila z XtraReport-i lahko shranimo nastavljeno obliko v REPX datoteko in potem jih lahko naložimo v katerokoli obstoječe poročilo (podrobnosti si preberemo v»saving and Loading a Report Layout«dokumentu). Imamo tudi možnost shranjevanja stilov aplikacije (stylesheets) v REPSS datoteke in jih vgradimo v vsa poročila. Podrobnosti si preberemo v»styles and a Stylesheet topic«. Prav tako lahko uvozimo poročila, ki so bila narejena z drugimi sistemi za izdelavo poročil (Microsoft Acess, Crystal Reports ali Data Dynamics Active Reports) v XtraReport predmet. [...] Ko smo naredili razred poročilo (otrok razreda XtraReport), lahko naredimo njegove instance. Te predmeti poročil so lahko nato vgrajeni v aplikacijo. Tukaj poudarimo da lahko XtraReport predmet uporablja Windows Forms in ASP.NET aplikacije. Ko uporabljamo poročilo v Windows Forms aplikacija je ponavadi potrebno vzdrževati PrintigSystem, ki nam omogoča dodatne možnosti za izpisovanje in izvažanje poročila. [...] Poročilo je lahko nato predogledano, natisnjeno, predogledano na formi ali izvoženo v različne formate (PDF, XLS, RTF, itd.). Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 6

2.2 SQL Blair in ostali (str. 593-594, 2002) so povzeli SQL kot kratico za Structured Query Language (sestavljeni jezik za poizvedbe). Standarde za ANSI SQL določa American National Standard Institute (ANSI). Večina zbirk podatkov vsaj do določene ravni upošteva ANSI SQL in poleg tega svojemu mehanizmu doda še nekaj posebnih funkcij. V programu ClickTrans uporabljamo SQL za pridobivanje podatkov iz baze, ki jih potrebujemo tudi za izpise. V tem primeru se uporabljata izjavi SELECT in WHERE, ki se nahajata v Store Proceduri. Izjava SELECT izbere podatke iz enega ali več polj v enem ali več zapisih in iz ene ali več tabel v zbirki podatkov. Izjava SELECT podatke le izbere in jih ne spreminja na noben način. WHERE pogoj določa, katere zapise nam bo SELECT stavek vrnil. Primer: SELECT Ime,Priimek FROM Zaposleni WHERE Ime LIKE 'R*' Ta stavek nam bo vrnil vse zaposlene, katerih ime se začne na črko R. 2.3.NET 2.3.1 DATASET RAZRED DataSet (http://msdn.microsoft.com/en-us/library/system.data.dataset.aspx, 2007) je spominska shramba podatkov, pridobljenih iz podatkovnega vira. Je ena izmed glavnih komponent ADO.NET arhitekture. DataSet je sestavljen iz zbirke DataTabel predmetov, ki se lahko relacijsko povezujejo z DataRelation predmeti. Z uporabo UniqueConstraint in ForeignKeyConstraint predmetov lahko uveljavimo podatkovno integriteto v DataSet-u. Podrobnosti o delu z DataSet predmetom so opisane v»working with DataSets«(ADO.NET, http://msdn.microsoft.com/en-us/library/ss7fbaez.aspx, 2008). Medtem ko DataTable predmet vsebuje podatke, DataRelationCollection dovoljuje navigacijo skozi hierarhijo tabele. Tabele, ki so v DataTableCollection-u, so dostopane skozi lastnost Tabels. Ko dostopamo do DataTable predmetov, je potrebno upoštevati dejstvo, da so pogojno občutljivi na velike oz. male črke. Na primer: če je ena tabela poimenovana mojadatatabela in druga je poimenovana Mojadatatabela, se pri iskanju tabele upoštevajo velike/male črke. Če pa obstaja samo tabela Mojadatatabela, pa ne upošteva velikih/malih črk. Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 7

Več informacij o delu z DataTable predmeti je mogoče dobiti v poglavju»creating a DataTable«(ADO.NET, http://msdn.microsoft.com/en-us/library/6zd7cwzh.aspx, 2008). DataSet lahko bere in zapisuje podatke ter sheme kot XML dokumente. Podatke in sheme je možno transportirani preko omrežja in jih lahko uporablja katerakoli aplikacija na katerikoli platformi, ki je XML-omogočena. Sheme se da shranjevati kot XML shema z WriteXmlSchema metodo. Shemo in podatke pa lahko shranimo z WriteXml metodo. Za branje XML dokumenta, ki vsebuje shemo in podatke, uporabljamo ReadXml metodo. 2.3.2 TABLEADAPTER RAZRED TableAdapterji priskrbijo komunikacijo med našo aplikacijo in bazo podatkov (http://msdn.microsoft.com/en-us/library/bz9tthwx(vs.80).aspx, 2007). Da lahko komunicira, se mora TableAdapter povezati na bazo, izvršiti poizvedbe ali shranjene procedure, ali pa vrne novo tabelo podatkov, napolnjeno z vrnjenimi podatki, ali napolniti obstoječi DataTable z vrnjenimi podatki. TableAdapterji se uporabljajo še za vrnitev dopolnjenih podatkov iz aplikacije v bazo podatkov. Uporabniki prejšnjih verzij Visual Studia si lahko predstavljamo TableAdapterje kot DataAdapterje z vgrajenimi Connection predmeti in sposobnostjo enkapsulacije več poizvedb. Vsaka poizvedba, ki je dodana TableAdapterju, je izpostavljena javni metodi. Klicana je kakor katerakoli druga metoda ali funkcija na objektu. TableAdapter zagotavlja dodatne tipe metod v primerjavi s standardnimi funkcionalnostmi DataAdapterja. Primer: lahko združuje poizvedbe, ki si delijo skupno shemo s povezanim DataTable predmetom. Z drugimi besedami, imamo lahko kolikor hočemo poizvedb na TableAdapter-ju, dokler le-te vračajo podatke, ki se ujemajo s shemo DataTabel predmeta. Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 8

3 OBSTOJEČE STANJE 3.1 POSNETEK STANJA FUNKCIJ ZA ODPIRANJE PREDOGLEDA IZPISA V raziskavi smo obravnavali trajanje procesa odpiranje predogleda izpisa. Pri izdelavi posnetka obstoječega stanja smo morali upoštevati dvoje dejstev: tip oblike izpisa in v katero je bil predogled izpisa odprt. Zaradi tega so možne naslednje kombinacije: uporabnik programa uporabi neprivzeto obliko izpisa in prvič/drugič zahteva odpiranje predogleda izpisa (kar pomeni obstoj dveh različnih rezultatov); uporabnik programa uporabi privzeto obliko izpisa in prvič/drugič zahteva odpiranje (kar pomeni obstoj še nadaljnjih dveh različnih rezultatov). Vse te zahteve uporabnika pomenijo v kodi za predogled izpisa različno vključenost funkcij, kar pomeni tudi razlike v trajanju procesa. Za programerja so pa to stanja, ki jih mora upoštevati pri optimiranju tega dela programa. Pri odpiranju predogleda izpisa se izvaja 11 funkcij. Za vsako funkcijo izmerimo trajanje od začetka in konca, ko se zanjo vključenost v proces konča. V nadaljevanju jih bomo označevali z velikimi tiskanimi črkami: Start PrintPreview_VisibleChanged (A) Funkcija kontruktorja starševske forme (B), konstruktor printa (C), GlobalClass.Administracija.ReturnPath (D), Report.LoadLayout (E), OrigReport = Report1,Report = Report1 (F), funkcija za nalaganje (G), funkcija za nastavljanje višin (H), funkcija za prevajanje (I), CreateDocument (J), klic funkcije AdminKonzole (K), End PrintPreview_VisibleChanged (L). Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 9

PrintPreview_VisibleChanged je funkcija, ki kliče in dokončno prikaže predogled izpisa. Funkcija za prevajanje prevede tekst na izpisu na podlagi podatkov v tabeli LanguageReport v bazi MasterTrans. Konstruktor printa je funkcija, ki inicializira kontrole designerja printa. GlobalClass.Administracija.ReturnPath je funkcija, ki vrne pot do mape, kjer so shranjene neprivzete oblike izpisov. OrigReport = Report1,Report = Report1 je funkcija, ki poda kontroli za prikazovanje report. Report.LoadLayout je funkcija, ki naloži neprivzeto obliko izpisa, če ta obstaja. Funkcija za nalaganje poskrbi za polnjenje podatkov, ki jih izpis potrebuje iz baze. Hkrati je to del SetData funkcije. Funkcija za nastavljanje višin nam nudi globalen in preprost način za nastavljanje višin glave in noge. Hkrati je to del SetData funkcije. CreateDocument je funkcija, ki renderira izpis. Funkcija konstruktorja inicializira kontrole starševske forme za prikaz predogleda izpisa. Funkcija AdminKonzola naloži nastavitve iz baze MasterTrans tabele adminkonzola. Stanje smo posneli z meritvami trajanja procesa odpiranja predogleda izpisa vseh štirih možnih različic. Meritve smo opravili s pomočjo dodane kode: Debug.WriteLine (»Ime funkcije«& Date.Now.TimeOfDay.ToString). Koda je dodana na začetke in konce funkcij za predogled izpisa. Opravili po 10 časovnih meritev za vsako stanje in izračunali povprečne čase. Na enak način smo izvajali eksperiment po 1. in 2. optimiranju kode za predogled izpisa. Celovitost dogodkov znotraj procesa smo predstavili s tremi različnimi slikami: čas delovanja vsake izmed 11-tih funkcij, ki so del procesa, čas trajanja procesa odpiranja predogleda, potek procesa odpiranja po točkah merjenja. Točk merjenja je 24, ker ima vsaka funkcija svoj začetek in konec (dve točki merjenja) ter začetek in konec procesa. Pri obravnavi rezultatov smo imenovali čase delovanja posameznih funkcij ini trajanje procesa iz posnetka stanja začetno stanje za razliko od končnega, ki je posledica izpopolnjene kode. Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 10

ČAS DELOVANJA POSAMEZNIH FUNKCIJ, KI SO VKLJUČENE V PROCES PREDOGLEDA ČAS (sek) 3.5 3 2.5 2 1.5 1 0.5 TRAJANJE FUNKCIJ (začetno stanje pri uporabi neprivzete oblike) 0 A B C D E F G H I J K L 1. odpiranje 2. odpiranje FUNKCIJE Slika 3: Čas delovanja posameznih funkcij (od A do L), ki so vključene v proces predogleda neprivzete oblike izpisa v 1. in 2. odpiranju Največ časa se izvajata funkciji E in I (Report.LoadLayout in funkcija za prevajanje). ČAS (sek) TRAJANJE FUNKCIJ (začetno stanje pri uporabi privzete oblike izpisa) 3.5 3 2.5 2 1.5 1 0.5 0 A B C D E F G H I J K L FUNKCIJE 1. odpiranje 2. odpiranje Slika 4: Čas delovanja posameznih funkcij, ki so vključene v proces predogleda privzete oblike izpisa v 1. in 2. odpiranju Največ časa traja funkcija I (funkcija za prevajanje). Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 11

ČAS TRAJANJA PROCESA ODPIRANJA - začetno stanje (neprivzeta oblika izpisa) 8.07 sek 9 8 7 6 5 4 3 2 1 0 1. ODPIRANJE 2. ODPIRANJE ODPIRANJE PREDOGLEDA IZPISA 4.64 sek Slika 5: Histogram trajanja procesa odpiranja predogleda neprivzete oblike izpisa v 1. in 2. odpiranju ČAS TRAJANJA PROCESA ODPIRANJA - začetno stanje (privzeta oblika izpisa) 9 8 7 6 5 4 3 2 1 0 4.79 sek 1. ODPIRANJE 2. ODPIRANJE Odpiranje predogleda izpisa 3.34 sek Slika 6: Histogram trajanja procesa odpiranja predogleda privzete oblike izpisa v 1. in 2. odpiranju Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 12

POTEK PROCESA ODPIRANJA PO FUNKCIJAH - začetno stanje pri neprivzeti obliki izpisa 9 8 Čas (sek) 7 6 5 4 1.odpiranje 2. odpiranje 3 2 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Točke merjenja (start, end funkcij) Slika 7: Prikaz trajanje odpiranja (v sek) predogleda neprivzete oblike izpisa po posameznih funkcijah v 1.in 2. odpiranju POTEK PROCESA ODPIRANJA PO FUNKCIJAH - začetno stanje pri privzeti obliki izpisa 9 8 Čas (sek) 7 6 5 4 1.Odpiranje 2.Odpiranje 3 2 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Točke merjenja (start, end funkcij) Slika 8: Prikaz trajanje odpiranja (v sek) predogleda privzete oblike izpisa po posameznih funkcijah v 1.in 2. odpiranju Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 13

3.1.1 POSNETEK FUNKCIJE ZA PREVAJANJE Funkcija za prevajanje v programu ClickTrans ima nalogo, da prevede tekst kontrol na izpisu na podlagi tabele LanguageReport v bazi MasterTrans in glede na izbrani jezik. Posnetek funkcije smo zapisali tako, da je dodan Z VELIKI TISKANIMI ČRKAMI komentar za lažje razumevanje funkcije. NAMESPACE KNJIŽNIC, KI JIH UVOZIMO IN SO NUJNE ZA IZVAJANJE PREVAJANJA Imports DataLayerBase Imports DataLayerBase.Database.DataSets Imports DataLayer.PrevajanjeFilter Imports System.Data Public Class Printi_Prevajanje #Region "Tipi Objektov - ENUM" DEKLARACIJE TIPOV PREDMETOV Public Enum TipObjekta T_Forma = 0 'podaja kontrole ki so direktno na formi T_Grid = 1 'podaja kontrole, ki jih drži grid (stolpci) T_VGrid = 2 'podaja kontrole, ki jih dr i VGrid (vrstice) T_BarMan = 3 'podaja glavni BarManager T_TabControl = 4 'podaja za tab kontrole T_Report = 5 ' podaja za reporte End Enum #End Region #Region "Izbrani Jezik" DEKLARACIJE JEZIKOV Public Enum IzbraniJezik SLO = 1 ITA = 2 HR = 3 ANG = 4 DE = 5 SCG = 6 FR = 7 End Enum FUNKCIJA DOBI STOLPEC V DS_PRINTIPREVOD GLEDE NA JEZIK, KI GA IMA PODANEGA (glej DEKLARACIJE JEZIKOV) Private Shared Function GetStrJezik(ByVal Jezik As IzbraniJezik) As String Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 14

Select Case Jezik Case Is = IzbraniJezik.SLO GetStrJezik = "SLO" Case Is = IzbraniJezik.ANG GetStrJezik = "ANG" Case Is = IzbraniJezik.DE GetStrJezik = "DE" Case Is = IzbraniJezik.HR GetStrJezik = "HR" Case Is = IzbraniJezik.DE GetStrJezik = "DE" Case Is = IzbraniJezik.ITA GetStrJezik = "ITA" Case Is = IzbraniJezik.SCG GetStrJezik = "SCG" Case Is = IzbraniJezik.FR GetStrJezik = "FR" Case Else GetStrJezik = "" End Select Return GetStrJezik End Function #End Region #Region "Deklaracije" DEKLARACIJE SPREMENLJIVK 'Dim DSR_Report1 As New Database.DataSetsReport.DSR_Report Dim SR_PrevReportov As New Database.DataSetsReport.DSR_Report.SR_PrevReportovDataTable Dim SRPrev As DataView Public TTip As Object Const Prazni As Boolean = True Public report As String #End Region #Region "Prevajanje" FUNKCIJA, KI PREVEDE MSGBOX V FORMI LASTNOST CAPTION Public Function prevedimsg(byval NazivMsgBoxa As String, ByVal Jezik As Integer) As String Dim DV As New DataView Dim napis As String Try SRPrev.RowFilter = "Polje = '" & NazivMsgBoxa & "'" & " and Report = '" & report & "'" If IsDBNull(SRPrev.Item(0).Item(GetStrJezik(Jezik))) = False Then napis = SRPrev.Item(0).Item(GetStrJezik(Jezik)) Else Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 15

napis = "" End If Return napis Catch ex As Exception Return "" Err.Raise(Err.Number) End Try End Function GLAVNA FUNKCIJA, KI NADZORUJE PREVAJANJE Public Function PrevediReport(ByVal Kontrola As Object, ByVal tipforme As TipObjekta, ByVal Jezik As IzbraniJezik) As Boolean Try TABELO NAPOLNEMO S PREVODI, KI JIH BOMO UPORABLJALI If SR_PrevReportov.Rows.Count = 0 Then SRPrev = (GlobalClass.StoredProcedureReport.SR_PrevReportov(report).Tables(0)).DefaultVi ew SRPrev.Sort = "Polje" End If KO SE REPORT PREVAJA, DOBI KOT ME.CONTROLS.COUNT DETAILREPORT, ZA VSAKO KONTROLO POGLEDAMO TIP KONTROLE For i As Integer = 0 To Kontrola.controls.count - 1 If Kontrola.controls.item(i).controls.count() > 0 Then ČE JE TIP KONTROLE DEVEXPRESS.XTRAREPORTS.UI.DETAILREPORTBAND, NAREDIMO ZANKO, KI PODA VSE OTROKE TEGA OBJEKTA FUNKCIJI ZA PREVAJANJE If Kontrola.controls.item(i).GetType.ToString = "DevExpress.XtraReports.UI.DetailReportBand" Then For Each c As DevExpress.XtraReports.UI.Band In Kontrola.controls.item(i) PrevediReport(c, tipforme, Jezik) Next ČE JE TIP KONTROLE DEVEXPRESS.XTRAREPORTS.UI.PAGEHEADERBAND, NAREDIMO ZANKO, KI PODA VSE OTROKE TEGA OBJEKTA FUNKCIJI ZA PREVAJANJE ElseIf Kontrola.controls.item(i).GetType.ToString = "DevExpress.XtraReports.UI.PageHeaderBand" Then If Kontrola.controls.item(i).GetType.ToString = "DevExpress.XtraReports.UI.PageHeaderBand" Then For Each c As Object In Kontrola.controls.item(i) If c.gettype.tostring = "DevExpress.XtraReports.UI.XRTable" Then PrevediReport(c, tipforme, Jezik) Else Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 16

ČE JE KONTROLA BREZ OTROK, JO PODAMO FUNKCIJI, KI PREPIŠE NJEN TEKST Prevedi(Kontrola.controls.item(i), tipforme, Jezik) End If Next Else ČE JE TIP KONTROLE DEVEXPRESS.XTRAREPORTS.UI.BAND, NAREDIMO ZANKO, KI PODA VSE OTROKE TEGA OBJEKTA FUNKCIJI ZA PREVAJANJE For Each c As DevExpress.XtraReports.UI.Band In Kontrola.controls.item(i) PrevediReport(c, tipforme, Jezik) Next End If ElseIf Kontrola.controls.item(i).GetType.ToString = "DevExpress.XtraReports.UI.XRTable" Then For Each c As DevExpress.XtraReports.UI.XRTableRow In Kontrola.controls.item(i) Prevedi(c, tipforme, Jezik) Next Else For Each c As Object In Kontrola.controls.item(i) If c.gettype.tostring = "DevExpress.XtraReports.UI.XRTable" Then PrevediReport(c, tipforme, Jezik) ElseIf c.gettype.tostring = "DevExpress.XtraReports.UI.XRPanel" Then Prevedi(c, tipforme, Jezik) Else Prevedi(Kontrola.controls.item(i), tipforme, Jezik) End If Next End If Else Prevedi(Kontrola, tipforme, Jezik) End If Next Catch ex As Exception MsgBox(Err.Description) End Try End Function FUNKCIJA, KI POIŠČE KONČNE KONTROLE NA PODANI FORMI Public Function Prevedi(ByVal Forma As Object, ByVal tipforme As TipObjekta, ByVal Jezik As IzbraniJezik) As Boolean Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 17

Try 'ZbriÜi if ko boü zrihtov prevajanje If Jezik = 0 Then Jezik = 1 End If 'select zarad vrste objekta, ki ga dobi (forma, grid, vgrid, BarManager) Dim n As Integer Select Case tipforme ČE JE TIP PREDMETA T_Forma, POIŠČE VSE PREDMETE, KI SO NJENI OTROCI IN JIH POŠLJE FUNKCIJI PREPIS Case TipObjekta.T_Forma For i As Integer = 0 To Forma.controls.count - 1 n = SRPrev.Find(Forma.controls.item(i).name) If n <> -1 Then If IsDBNull(SRPrev.Item(n).Item(GetStrJezik(Jezik))) = False Then Prepis(Forma, i, SRPrev.Item(n).Item(GetStrJezik(Jezik)), TipObjekta.T_Forma) End If End If Next ČE JE TIP PREDMETA T_Grid, POIŠČE VSE PREDMETE (STOLPCE), KI SO NJENI OTROCI IN JIH POŠLJE FUNKCIJI PREPIS Case TipObjekta.T_Grid For i As Integer = 0 To Forma.columns.count - 1 n = SRPrev.Find(Forma.columns.item(i).name) If n <> -1 Then If IsDBNull(SRPrev.Item(n).Item(GetStrJezik(Jezik))) = False Then Prepis(Forma, i, SRPrev.Item(n).Item(GetStrJezik(Jezik)), TipObjekta.T_Grid) End If End If Next Case TipObjekta.T_Vgrid ČE JE TIP PREDMETA T_Vgrid, POIŠČE VSE PREDMETE (vrstice), KI SO NJENI OTROCI IN JIH POŠLJE FUNKCIJI PREPIS For i As Integer = 0 To Forma.Rows.count - 1 n = SRPrev.Find(Forma.Rows.Item(i).name) If n <> -1 Then If IsDBNull(SRPrev.Item(n).Item(GetStrJezik(Jezik))) = False Then Prepis(Forma, i, SRPrev.Item(n).Item(GetStrJezik(Jezik)), TipObjekta.T_VGrid) End If End If Next Case TipObjekta.T_BarMan Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 18

ČE JE TIP PREDMETA T_BarMan, POIŠČE VSE PREDMETE (vezi na predmete), KI SO NJENI OTROCI IN JIH POŠLJE FUNKCIJI PREPIS For i As Integer = 0 To Forma.itemlinks.count - 1 n = SRPrev.Find(Forma.itemlinks.Item(i).item.name) If n <> -1 Then If IsDBNull(SRPrev.Item(n).Item(GetStrJezik(Jezik))) = False Then Prepis(Forma, i, SRPrev.Item(n).Item(GetStrJezik(Jezik)), TipObjekta.T_BarMan) End If End If Next Case TipObjekta.T_TabControl ČE JE TIP PREDMETA T_TabControl, POIŠČE VSE PREDMETE, KI SO NJENI OTROCI IN JIH POŠLJE FUNKCIJI PREPIS For i As Integer = 0 To Forma.controls.count - 1 n = SRPrev.Find(Forma.controls.item(i).name) If n <> -1 Then If IsDBNull(SRPrev.Item(n).Item(GetStrJezik(Jezik))) = False Then Prepis(Forma, i, SRPrev.Item(n).Item(GetStrJezik(Jezik)), TipObjekta.T_Forma) End If End If Next Case TipObjekta.T_Report ČE JE TIP PREDMETA T_Report, POIŠČE VSE PREDMETE, KI SO NJENI OTROCI IN JIH POŠLJE FUNKCIJI PREPIS For i As Integer = 0 To Forma.controls.count - 1 n = SRPrev.Find(Forma.controls.item(i).name) If n <> -1 Then If IsDBNull(SRPrev.Item(n).Item(GetStrJezik(Jezik))) = False Then Prepis(Forma, i, SRPrev.Item(n).Item(GetStrJezik(Jezik)), TipObjekta.T_Report) End If End If Next End Select Catch ex As Exception MsgBox(Err.Description) End Try End Function #Region "Pravila prevajanja kontrol" FUNKCIJA ZA PREPIS TEKSTA, KI SE PREVAJA Private Shared Sub Prepis(ByVal forma As Object, ByVal index As Integer, ByVal NewCaption As String, ByVal tipforme As TipObjekta) Try Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 19

Dim tip As Type = Nothing deluje 'spremenljivko Tip napolni s podatki o vrsti kontrole, da lahko select pravilno DOLOČIMO TIP FORME, KI JE BILA PODANA If tipforme = TipObjekta.T_Forma Then tip = forma.controls.item(index).gettype ElseIf tipforme = TipObjekta.T_Grid Then tip = forma.columns.item(index).gettype ElseIf tipforme = TipObjekta.T_VGrid Then tip = forma.rows.item(index).gettype ElseIf tipforme = TipObjekta.T_BarMan Then tip = forma.itemlinks.item(index).gettype ElseIf tipforme = TipObjekta.T_TabControl Then tip = forma.controls.item(index).gettype ElseIf tipforme = TipObjekta.T_Report Then tip = forma.controls.item(index).gettype End If 'Pravila za posamezno kontrolo GLEDE NA TIP FORME, KI SMO GA DOLOČILI, PREPIŠEMO TEKST IZ PREVAJANJA V PREDMET Select Case LCase(tip.Name) Case "label" 'v primeru če je kontrola labela forma.controls.item(index).text = NewCaption ''TTip.settooltip(forma.controls.item(index), NewToolTip) Case "button" 'v primeru če je kontrola gumb forma.controls.item(index).text = NewCaption 'TTip.settooltip(forma.controls.item(index)) Case "gridcolumn" 'v primeru če je kontrola stolpec forma.columns.item(index).caption = NewCaption 'TTip.settooltip(forma.columns.item(index), NewToolTip) 'forma.columns.item(index).tooltip = NewToolTip Case "editorrow" 'v primeru če je vrstica VGrida forma.rows.item(index).properties.caption = NewCaption Case "barsubitemlink" 'v primeru če je glava menuja forma.itemlinks.item(index).caption = NewCaption 'forma.itemlinks.item(index).displayhint = NewToolTip Case "barstaticitemlink" 'v primeru če je statična kontrola menija forma.itemlinks.item(index).caption = NewCaption 'forma.itemlinks.item(index).displayhint = NewToolTip Case "barbuttonitemlink" 'v primeru če je gumb kontrola menija forma.itemlinks.item(index).caption = NewCaption 'forma.itemlinks.item(index).displayhint = NewToolTip Case "combobox" 'v primeru če je kontrola KomboBox 'TTip.settooltip(forma.controls.item(index), NewToolTip) Case "textbox" 'v primeru če je kontrola textovno polje 'TTip.settooltip(forma.controls.item(index), NewToolTip) Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 20

Case "lookupedit" 'v primeru če je kontrola LookupEdit 'forma.controls.item(index).tooltip = NewToolTip Case "textedit" 'v primeru če je kontrola Textedit 'forma.controls.item(index).tooltip = NewToolTip Case "xtratabpage" 'v primeru če je kontrola zavihek forma.controls.item(index).text = NewCaption 'forma.controls.item(index).tooltip = NewToolTip Case "xrlabel" forma.controls.item(index).text = NewCaption Case "xrtablecell" forma.controls.item(index).text = NewCaption End Select Catch ex As Exception Err.Raise(Err.Number) End Try End Sub #End Region #End Region End Class Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 21

3.1.2 POSNETEK SQL STORE PROCEDUR SR_Narocilo in SR_Firma sta store proceduri, s katerima napolnimo dataset s podatki, ki jih prikazujemo na izpisu. SR_Narocilo SELECT DISTINCT TOP 100 PERCENT dbo.narocilo.idnar, dbo.narocilo.idnarglavni, dbo.narocilo.stnar AS StNarocila, ISNULL(dbo.Narocilo.StNaklada, '') AS StNaklada, dbo.narocilo.stnarocilazbir, dbo.narocilo.iszbir, dbo.narocilo.datumkreiranja AS Datum, ISNULL(dbo.Narocilo.StNaloga, '') AS St_Naloga, dbo.narocilo.cena_nar, ISNULL(dbo.Narocilo.OpombaNar, '') AS OpombaNar, ISNULL(dbo.Narocilo.PosebneZahteve, '') AS PosebneZahteve, CAST(dbo.Narocilo.OpombaNN AS varchar(8000)) AS OpombaNN, ISNULL(dbo.Narocilo.RefStevilka, '') AS RefStevilka, ISNULL(dbo.Narocilo.PoslLeto, '') AS PoslLeto, CASE WHEN Users.FullName IS NULL THEN Narocilo.Kreiral ELSE Users.FullName END AS Kreiral, ISNULL(dbo.ValutaD.Oznaka_Valute, '') AS OznakaValute, ISNULL(P_Q_SubjektPosiljatelj2.Naziv, '') AS Posiljatelj2, ISNULL(P_Q_SubjektPrejemnik2.Naziv, '') AS Prejemnik2, ISNULL(dbo.Narocilo.TovorniList, '') AS CMR, ISNULL(dbo.P_MS.NAZIV, '') AS Storitev, ISNULL(P_Q_SubjektKupec.Naziv, '') AS KupecNaziv, ISNULL(P_Q_SubjektKupec.Naslov, '') AS KupecNaslov, ISNULL(P_Q_SubjektKupec.Kraj, '') AS KupecKraj, ISNULL(P_Q_SubjektKupec.Posta, '') AS KupecPosta, ISNULL(P_Q_SubjektKupec.Drzava, '') AS KupecDrzava, ISNULL(P_Q_SubjektKupec.Davcna, '') AS KupecDavcna, ISNULL(P_Q_SubjektKupec.Telefon, '') AS KupecTel, ISNULL(dbo.Narocilo.FaxStevilka, '') AS KupecFax, dbo.narocilo.nabavnacena, dbo.narocilo.rokplacila, ISNULL(P_Q_SubjektPodprevoznik.Naziv, '') AS PodNaziv, ISNULL(P_Q_SubjektPodprevoznik.Naslov, '') AS PodNaslov, ISNULL(P_Q_SubjektPodprevoznik.Posta, '') AS PodPosta, ISNULL(P_Q_SubjektPodprevoznik.Kraj, '') AS PodKraj, ISNULL(P_Q_SubjektPodprevoznik.Drzava, '') AS PodDrzava, ISNULL(P_Q_SubjektPodprevoznik.Davcna, '') AS PodDavcna, ISNULL(P_Q_SubjektPodprevoznik.Telefon, '') AS PodTel, ISNULL(dbo.Narocilo.Tovorni_List, '') AS PodFax, ISNULL(P_Q_SubjektPosiljatelj.Naziv, '') AS PosNaziv, ISNULL(P_Q_SubjektPosiljatelj.Naslov, '') AS PosNaslov, ISNULL(P_Q_SubjektPosiljatelj.Posta, '') AS PosPosta, Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 22

ISNULL(P_Q_SubjektPosiljatelj.Kraj, '') AS PosKraj, ISNULL(P_Q_SubjektPosiljatelj.Drzava, '') AS PosDrzava, ISNULL(P_Q_SubjektPosiljatelj.Davcna, '') AS PosDavcna, ISNULL(P_Q_SubjektPosiljatelj.Telefon, '') AS PosTel, ISNULL(P_Q_SubjektPosiljatelj.Fax, '') AS PosFax, ISNULL(Q_DelovniCasPos.DelovniCas, '') AS PosDelovniCas, dbo.narocilo.datprevblaga AS DatumNakl, ISNULL(dbo.Narocilo.UraPrevBlaga, '') AS UraNakl, ISNULL(dbo.Narocilo.OpombaNakl, '') AS OpombaNakl, ISNULL(KrajNakl.LocationName, '') AS KrajNakl, ISNULL(KrajNakl.PostPref, '') + '-' + ISNULL(KrajNakl.PostCode, '') AS PostaNakl, ISNULL(UlicaNakl.Naziv_Ulice, '') AS NaslovNakl, ISNULL(ML_Nakl.NazivML, '') AS MLNakl, ISNULL(P_Q_SubjektIzvSped.Naziv, '') + ' ' + ISNULL(P_Q_SubjektIzvSped.Naslov, '') + ' ' + ISNULL(P_Q_SubjektIzvSped.Posta, '') + ' ' + ISNULL(P_Q_SubjektIzvSped.Kraj, '') + ' ' + ISNULL(P_Q_SubjektIzvSped.Drzava, '') AS IzvoznaSped, ISNULL(P_Q_SubjektPosiljatelj2.Naziv, '') + ' ' + ISNULL(UlicaNakl.Naziv_Ulice, '') + ' ' + ISNULL(KrajNakl.PostPref, '') + '-' + ISNULL(KrajNakl.PostCode, '') + ' ' + ISNULL(KrajNakl.LocationName, '') + ' ' + ISNULL(ML_Nakl.NazivML, '') AS NakladIzpis, ISNULL(P_Q_SubjektPrejemnik.Naziv, '') AS PrejNaziv, ISNULL(P_Q_SubjektPrejemnik.Naslov, '') AS PrejNaslov, ISNULL(P_Q_SubjektPrejemnik.Posta, '') AS PrejPosta, ISNULL(P_Q_SubjektPrejemnik.Kraj, '') AS PrejKraj, ISNULL(P_Q_SubjektPrejemnik.Drzava, '') AS PrejDrzava, ISNULL(P_Q_SubjektPrejemnik.Davcna, '') AS PrejDavcna, ISNULL(P_Q_SubjektPrejemnik.Telefon, '') AS PrejTel, ISNULL(P_Q_SubjektPrejemnik.Fax, '') AS PrejFax, ISNULL(Q_DelovniCasPrej.DelovniCas, '') AS PrejDelovniCas, dbo.narocilo.datpredblaga AS DatumRazkl, ISNULL(dbo.Narocilo.UraPredBlaga, '') AS Urarazkl, ISNULL(dbo.Narocilo.OpombaRazkl, '') AS OpombaRazkl, ISNULL(KrajRazkl.LocationName, '') AS KrajRazkl, ISNULL(KrajRazkl.PostPref, '') + '-' + ISNULL(KrajRazkl.PostCode, '') AS PostaRazkl, ISNULL(UlicaRazkl.Naziv_Ulice, '') AS NaslovRazkl, ISNULL(ML_Razkl.NazivML, '') AS MLRazkl, ISNULL(P_Q_SubjektUvoSped.Naziv, '') + ' ' + ISNULL(P_Q_SubjektUvoSped.Naslov, '') + ' ' + ISNULL(P_Q_SubjektUvoSped.Posta, '') + ' ' + ISNULL(P_Q_SubjektUvoSped.Kraj, '') + ' ' + ISNULL(P_Q_SubjektUvoSped.Drzava, '') AS UvoznaSped, ISNULL(P_Q_SubjektPrejemnik2.Naziv, '') + ' ' + ISNULL(UlicaRazkl.Naziv_Ulice, '') + ' ' + ISNULL(KrajRazkl.PostPref, '') + '-' + ISNULL(KrajRazkl.PostCode, '') + ' ' + ISNULL(KrajRazkl.LocationName, '') + ' ' + ISNULL(ML_Razkl.NazivML, '') AS RazkladIzpis, ISNULL(dbo.PODATKI.PRIIMEK, '') + ' ' + ISNULL(dbo.PODATKI.IME, '') AS Voznik, ISNULL(Vlacilec.Naziv, '') AS Vlacilec, ISNULL(Prikolica.Naziv, '') Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 23

AS Prikolica, ISNULL(SluzbeniGSM.CifraTelefona, '') AS SluzbeniGSM, ISNULL(SluzbeniGSM1.CifraTelefona, '') AS SluzbeniGSM1, dbo.narocilo.koleta, ISNULL(dbo.Narocilo.VrstaTovora, '') AS VrstaTovora, dbo.narocilo.teza, dbo.narocilo.dim_s AS Sirina, dbo.narocilo.dim_v AS Visina, dbo.narocilo.dim_d AS Dolzina, dbo.narocilo.volumen, ISNULL(dbo.SifrantEmbalaz.Naziv, '') AS Embalaza, ISNULL(P_CONTACTSKupec.PRIIMEK, '') + ' ' + ISNULL(P_CONTACTSKupec.IME, '') AS KupecKontakt, dbo.fnr_vrnikontakt(dbo.narocilo.idkontakt, dbo.narocilo.idkontakttel) AS KupecKontaktTel, ISNULL(P_CONTACTSPodprevoznik.PRIIMEK, '') + ' ' + ISNULL(P_CONTACTSPodprevoznik.IME, '') AS PodKontakt, dbo.fnr_vrnikontakt(dbo.narocilo.idkontaktpodprev, dbo.narocilo.idkontakttelpodprev) AS PodKontaktTel, ISNULL(P_CONTACTSPosiljatelj.PRIIMEK, '') + ' ' + ISNULL(P_CONTACTSPosiljatelj.IME, '') AS PosKontakt, dbo.fnr_vrnikontakt(dbo.narocilo.sif_kos_pos, dbo.narocilo.idkontakttelpos) AS PosKontaktTel, ISNULL(P_CONTACTSPrejemnik.PRIIMEK, '') + ' ' + ISNULL(P_CONTACTSPrejemnik.IME, '') AS PrejKontakt, dbo.fnr_vrnikontakt(dbo.narocilo.sif_kos_prej, dbo.narocilo.idkontakttelprej) AS PrejKontaktTel, CASE WHEN dbo.narocilo.stnarocilazbir IS NULL OR dbo.narocilo.stnarocilazbir = 0 THEN CAST(dbo.Narocilo.StNar AS varchar) WHEN dbo.narocilo.id_status_nar <> 9 THEN CAST(ISNULL(dbo.Narocilo.StNar, '') AS varchar) + '.' + CAST(ISNULL(dbo.Narocilo.StNarocilaZbir, '') AS varchar) END AS StNarIzpis, dbo.narocilo.skupnacena, ISNULL(dbo.ValutaD.Oznaka_Valute, '') AS VALUTA, ISNULL(P_Q_SubjektKupec.Naziv2, '') AS KupecNaziv2, dbo.narocilo.idk AS StevilkaStranke, dbo.sifrantdavek.vrednost AS StopnjaDavka, dbo.sifrantdavek.vrednost * dbo.narocilo.cena_nar / 100 AS DavekSkupaj, dbo.sifrantdavek.vrednost * dbo.narocilo.cena_nar / 100 + dbo.narocilo.cena_nar AS VrednostSkupaj, dbo.p_em.em, dbo.narocilo.datpredblaga + dbo.narocilo.rokplacila AS DateValuta, P_Q_SubjektPrejemnik2.Naziv2 AS PrejNaziv2, P_Q_SubjektPrejemnik2.Naziv AS PrejNaziv1, P_Q_SubjektPosiljatelj2.Naziv2 AS PosNaziv2,P_Q_SubjektPosiljatelj2.Naziv AS PosNaziv1, ISNULL(P_Q_SubjektPosiljatelj2.Naziv, '') + ' ' + ISNULL(P_Q_SubjektPosiljatelj2.Naziv2, '') AS PosNaziv12, ISNULL(P_Q_SubjektPosiljatelj2.Naziv, '') AS PosNaziv1,ISNULL(P_Q_SubjektPrejemnik2.Naziv, '') + ' ' + ISNULL(P_Q_SubjektPrejemnik2.Naziv2, '') AS PrejNaziv12, ISNULL(P_Q_SubjektPrejemnik2.Naziv, '') AS PrejNaziv1, ISNULL(P_Q_SubjektKupec.Naziv, '') + ' ' + ISNULL(P_Q_SubjektKupec.Naziv2, '') AS KupecNaziv12, Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 24

ISNULL(P_Q_SubjektKupec.Naziv, '') AS KupecNaziv1,ISNULL(P_Q_SubjektPodprevoznik.Naziv, '') + ' ' + ISNULL(P_Q_SubjektPodprevoznik.Naziv2, '') AS PodNaziv12, ISNULL(P_Q_SubjektPodprevoznik.Naziv, '') AS PodNaziv1,ISNULL(P_Q_SubjektPosiljatelj2.Naziv, '') + ' ' + ISNULL(P_Q_SubjektPosiljatelj2.Naziv2, '') AS Posiljatelj12, ISNULL(P_Q_SubjektPosiljatelj2.Naziv, '') AS Posiljatelj1, ISNULL(P_Q_SubjektPrejemnik2.Naziv, '') + ' ' + ISNULL(P_Q_SubjektPrejemnik2.Naziv2, '') AS Prejemnik12, ISNULL(P_Q_SubjektPrejemnik2.Naziv, '') AS Prejemnik1,ISNULL(P_Q_SubjektPosiljatelj2.Naziv, '') + ' ' + ISNULL(P_Q_SubjektPosiljatelj2.Naziv2, '') + ' ' + ISNULL(UlicaNakl.Naziv_Ulice, '') + ' ' + ISNULL(KrajNakl.PostPref, '') + '-' + ISNULL(KrajNakl.PostCode, '') + ' ' + ISNULL(KrajNakl.LocationName, '') + ' ' + ISNULL(ML_Nakl.NazivML, '') AS NakladIzpis12,ISNULL(P_Q_SubjektPosiljatelj2.Naziv2, '') + ' ' + ISNULL(UlicaNakl.Naziv_Ulice, '') + ' ' + ISNULL(KrajNakl.PostPref, '') + '-' + ISNULL(KrajNakl.PostCode, '') + ' ' + ISNULL(KrajNakl.LocationName, '') + ' ' + ISNULL(ML_Nakl.NazivML, '') AS NakladIzpis1, ISNULL(P_Q_SubjektPrejemnik2.Naziv, '') + ' ' + ISNULL(P_Q_SubjektPrejemnik2.Naziv2, '') + ' ' + ISNULL(UlicaRazkl.Naziv_Ulice, '') + ' ' + ISNULL(KrajRazkl.PostPref, '') + '-' + ISNULL(KrajRazkl.PostCode, '') + ' ' + ISNULL(KrajRazkl.LocationName, '') + ' ' + ISNULL(ML_Razkl.NazivML, '') AS RazkladIzpis12, ISNULL(P_Q_SubjektPrejemnik2.Naziv2, '') + ' ' + ISNULL(UlicaRazkl.Naziv_Ulice, '') + ' ' + ISNULL(KrajRazkl.PostPref, '') + '-' + ISNULL(KrajRazkl.PostCode, '') + ' ' + ISNULL(KrajRazkl.LocationName, '') + ' ' + ISNULL(ML_Razkl.NazivML, '') AS RazkladIzpis1, dbo.sifrantoprostitevddv.opomba AS OprostitevDDV FROM dbo.p_contacts P_CONTACTSPrejemnik RIGHT OUTER JOIN dbo.sifrantdavek INNER JOIN dbo.p_ms ON dbo.sifrantdavek.id = dbo.p_ms.sifrantdavekid LEFT OUTER JOIN dbo.sifrantoprostitevddv ON dbo.p_ms.idoprostitevddv = dbo.sifrantoprostitevddv.id RIGHT OUTER JOIN dbo.q_delovnicas Q_DelovniCasPos RIGHT OUTER JOIN dbo.q_delovnicas Q_DelovniCasPrej RIGHT OUTER JOIN dbo.narocilo LEFT OUTER JOIN dbo.p_em ON dbo.narocilo.idem = dbo.p_em.id LEFT OUTER JOIN dbo.p_q_subjekt P_Q_SubjektPosiljatelj2 ON dbo.narocilo.posiljatelj2 = P_Q_SubjektPosiljatelj2.ID LEFT OUTER JOIN dbo.users ON dbo.narocilo.kreiral = dbo.users.username ON Q_DelovniCasPrej.ID = dbo.narocilo.obdobjeprej ON Q_DelovniCasPos.ID = dbo.narocilo.obdobjepos ON dbo.p_ms.id = dbo.narocilo.idstoritev LEFT OUTER JOIN Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 25

dbo.p_q_subjekt P_Q_SubjektPrejemnik2 ON dbo.narocilo.prejemnik2 = P_Q_SubjektPrejemnik2.ID ON P_CONTACTSPrejemnik._IDC = dbo.narocilo.sif_kos_prej LEFT OUTER JOIN dbo.p_contacts P_CONTACTSPosiljatelj ON dbo.narocilo.sif_kos_pos = P_CONTACTSPosiljatelj._IDC LEFT OUTER JOIN dbo.p_contacts P_CONTACTSPodprevoznik ON dbo.narocilo.idkontaktpodprev = P_CONTACTSPodprevoznik._IDC LEFT OUTER JOIN dbo.p_contacts P_CONTACTSKupec ON dbo.narocilo.idkontakt = P_CONTACTSKupec._IDC LEFT OUTER JOIN dbo.sifrantembalaz ON dbo.narocilo.embalaza = dbo.sifrantembalaz.id LEFT OUTER JOIN dbo.gsm SluzbeniGSM RIGHT OUTER JOIN dbo.gsm SluzbeniGSM1 RIGHT OUTER JOIN dbo.podatki ON SluzbeniGSM1.ID = dbo.podatki.idsluzbenigsm_1 ON SluzbeniGSM.ID = dbo.podatki.idsluzbenigsm ON dbo.narocilo.voznik = dbo.podatki.id_podatki LEFT OUTER JOIN dbo.vozilo Prikolica ON dbo.narocilo.idprikolica = Prikolica.ID LEFT OUTER JOIN dbo.vozilo Vlacilec ON dbo.narocilo.idvlacilec = Vlacilec.ID LEFT OUTER JOIN dbo.p_q_subjekt P_Q_SubjektUvoSped ON dbo.narocilo.sif_sped_uvo = P_Q_SubjektUvoSped.ID LEFT OUTER JOIN dbo.p_q_subjekt P_Q_SubjektIzvSped ON dbo.narocilo.sif_sped_izv = P_Q_SubjektIzvSped.ID LEFT OUTER JOIN dbo.nar_sifrant_ml ML_Razkl RIGHT OUTER JOIN dbo.nar_vez_pp_ml Nar_Vez_PP_ML_Razkl ON ML_Razkl.SIF_ML = Nar_Vez_PP_ML_Razkl.SIF_ML ON dbo.narocilo.sif_ml_prej = Nar_Vez_PP_ML_Razkl.ID_PP_ML LEFT OUTER JOIN dbo.sifrant_ulic UlicaRazkl ON dbo.narocilo.sif_ulica_prej = UlicaRazkl.ID_Ulica LEFT OUTER JOIN dbo.location KrajRazkl ON dbo.narocilo.sif_kraj_prej = KrajRazkl.LocationId LEFT OUTER JOIN dbo.p_q_subjekt P_Q_SubjektPrejemnik ON dbo.narocilo.sif_prej = P_Q_SubjektPrejemnik.ID LEFT OUTER JOIN dbo.nar_sifrant_ml ML_Nakl RIGHT OUTER JOIN dbo.nar_vez_pp_ml Nar_Vez_PP_ML_Nakl ON ML_Nakl.SIF_ML = Nar_Vez_PP_ML_Nakl.SIF_ML ON dbo.narocilo.sif_ml_pos = Nar_Vez_PP_ML_Nakl.ID_PP_ML LEFT OUTER JOIN dbo.sifrant_ulic UlicaNakl ON dbo.narocilo.sif_ulica_pos = UlicaNakl.ID_Ulica LEFT OUTER JOIN dbo.location KrajNakl ON dbo.narocilo.sif_kraj_pos = KrajNakl.LocationId LEFT OUTER JOIN dbo.p_q_subjekt P_Q_SubjektPosiljatelj ON dbo.narocilo.sif_pos = P_Q_SubjektPosiljatelj.ID LEFT OUTER JOIN Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 26

dbo.p_q_subjekt P_Q_SubjektPodprevoznik ON dbo.narocilo.idpodprevoznik = P_Q_SubjektPodprevoznik.ID LEFT OUTER JOIN dbo.valutad ON dbo.narocilo.valuta_nar = dbo.valutad.sifra_valute LEFT OUTER JOIN dbo.p_q_subjekt P_Q_SubjektKupec ON dbo.narocilo.idk = P_Q_SubjektKupec.ID WHERE (Narocilo.IDNar = @IdNarocila) AND (@Tip = 1) AND (Narocilo.IDNar = @IdNarocila) AND (Narocilo.ID_Status_Nar <> 9) OR (Narocilo.IDNar = @IdNarocila) AND (@Tip = 2) AND (Narocilo.ID_Status_Nar <> 9) AND (NOT (Narocilo.StNarocilaZbir = 0)) OR (Narocilo.IDNar = @IdNarocila) AND (@Tip = 3) AND (Narocilo.ID_Status_Nar <> 9) OR (Narocilo.IDNar = @IdNarocila) AND (@Tip = 1) AND (Narocilo.ID_Status_Nar <> 9) AND (Narocilo.IdNarGlavni = @IdNarocila) OR (@Tip = 2) AND (Narocilo.ID_Status_Nar <> 9) AND (NOT (Narocilo.StNarocilaZbir = 0)) AND (Narocilo.IdNarGlavni = @IdNarocila) OR (@Tip = 3) AND (Narocilo.ID_Status_Nar <> 9) AND (Narocilo.IdNarGlavni = @IdNarocila) ORDER BY Narocilo.StNarocilaZbir Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 27

Slika 9: Grafični prikaz Store Procedure SR_Narocilo Roman Kavčič: Optimiranje izpisov v programu Clikcktrans stran 28