Naam:           Kenny Follon    

Klas:           3 AON

Academiejaar:  2008-2009

Stageplaats:   Xtendit Solutions



 

 

 

Provinciale Hogeschool Limburg (PHL)

Departement Handelswetenschappen en bedrijfskunde

Elfde-Liniestraat26

3500 Hasselt

 

                                                     t    +32(0)11 23 87 77

                                                     e    h&b@phl.be

                                                     w    www.phl.be


Voorwoord

 

Zoals elke laatstejaarsstudent Toegepaste Informatica van de Provinciale Hogeschool Limburg heb ik ter afsluiting van mijn studie stage,gelopen in een bedrijf. Gedurende 12 weken werkte ik bij Xtendit Solutions aan een opdracht die aansloot bij de door mij gekozen afstudeerrichting Applicatie-ontwikkeling.

 

Graag zou ik de mensen willen bedanken die het mij mogelijk hebben gemaakt om mijn stage te voltooien. Vooral de personen van Xtendit Solutions dank ik voor hun gastvriendelijkheid en omdat ze mij de kans gegeven hebben om mijn stage bij hun te lopen.

 

Daarnaast zou ik iedereen willen bedanken voor het geduld en  vertrouwen dat zij mij gegeven hebben tijdens mijn studies. Mijn moeder bedank ik speciaal voor haar jarenlange inzet en steun tijdens de zwaardere periodes van mijn studies.

 

Tot slot wens ik mevrouw Janssen, mijn stagelector, te bedanken voor het begeleiden van mijn stage.

 

 

 


Inhoudstafel

 

1. Inleiding                                    P.5.

1.1 Overzicht                                   P.5.

2. Stagebedrijf: Xtendit                     P.5.

2.1 Ontstaan                                    P.5.

2.2 Fusie Xtendit en Interoffice           P.6.

2.3 Outsourcing - (SPEX)                     P.7.

2.4 System Management                         P.7.

2.5 Hardware                                    P.7.

2.6 Diensten                                    P.8.

2.6.1 (Mobile) diensten & technologieën  P.8.

2.6.2 WPAmobile                                P.8.

2.6.3 XtenditFleet                             P.9.

2.6.4 Webdevelopment - ProSite Website    P.10.

2.6.5 iSeries (AS400)                         P.11.

2.6.6 Carsolution                              P.12.

2.6.7 Windev 14                                P.13.

2.6.7.1 Geschiedenis van WinDev            P.13.

2.6.7.2 Wlanguage                              P.13.

2.6.7.3 Rapid application development     P.13.

2.6.7.4 Rapid graphical Interface          P.14

2.6.7.5 Windev 14 programmeeromgeving     P.15

2.6.7.6 Dynamische compilatie               P.15.

2.6.7.7 Franstalige omgeving                P.15.

2.6.7.8 Componenten                           P.16.

2.6.7.9 Databeheer                             P.16.

2.6.7.10 Source Code Manager (SCM)/(GDS)  P.17.

2.6.7.11 Persoonlijk besluit - Windev 14        P.18.

3. Opdrachten                                   P.18.

3.1 Opdracht 1                                    P.18.

3.2 Opdracht 2                                  P.19.

4. Uitwerken van de opdrachten              P.20.

4.1. Opdracht 1                                   P.20.

4.1.1 Oorspronkelijke/huidige situatie        P.20.

4.1.2 Een stukje code als voorbeeld       p.25.

4.1.3 Schermafbeeldingen                     p.29.

4.1.3.1 Openingsscherm                        p.30.

4.1.3.2 Gegevens tonen                        p.31.

4.1.3.3 Gegevens tonen gesorteerd          p.31.

4.1.3.4 Datum keuze                           P.32.

4.1.3.4 Exporteer keuze menu                p.32.

4.1.3.5 Afdruk zonder groepering           p.33.

4.1.3.5 Afdruk met groepering               p.34.

4.2 Opdracht 2                                    p.35.

4.2.1 Databeheer                               P.35.

4.2.2 Hoofdmenu                                p.36.

4.2.3 Persoon gegevens                        p.37.

4.2.4 Project gegevens                        p.38.

4.2.5 Data pad                                  p.39.

4.2.6 Kost/opbrengst berekenen              p.40.

4.2.6.1 Ingave voorziene K/O                p.40.

4.2.6.2 Overzicht Effectieve K/O           p.41.

4.2.6.3 Totaal overzicht                     p.42.

5.Persoonlijke ervaring                       p.42.

6. Conclusie                                    p.43.

7. Geraadpleegde bronnen                     p.44.

 

 


1. Inleiding

 

Gedurende 12 weken heb ik stage gelopen in het bedrijf Xtendit. De naam van dit bedrijf is ontleend aan het Engelstalige woord “to extend” wat verruimen betekent. Daarnaast bevat het einde van de naam een duidelijke verwijzing naar de sector waarin zij werkzaam zijn “IT”

Het bedrijf Xtendit is onlangs gefusioneerd met het bedrijf interoffice. Toch blijft Xtendit onafhankelijk tot op een bepaald niveau. Mijn stage was in opdracht voor Xtendit. Met Interoffice heb ik tijdens mijn stage weinig contact gehad. Als begeleider werd Dhr. Erwin Olearts tot mijn beschikking gesteld. De taak van Erwin binnen het bedrijf is WinDev programmeur. Indien ik met vragen of problemen zat, was Erwin de persoon waar ik raad aan vragen moest. De leidende persoon van Xtendit is Dhr. Paul Smeets. De applicatie die ik tijdens mij stage ontwikkeld heb, zal door Dhr. Paul Smeets in gebruik genomen worden voor het berekenen van de lonen.

 

 

1.1 Overzicht

 

Om een duidelijk overzicht te kunnen creëren, zal ik starten met een beeld te scheppen over mijn stage bedrijf.

Behalve over het onstaan van het bedrijf zal ik in dit stage rapport uitleg geven over de diensten die Xtendit aanbiedt aan hun klanten. Vervolgens kan u uitgebreide informatie terugvinden over de programmeer-software waarmee ik gewerkt heb. Gedurende die 12 weken heb ik meerdere opdrachten ontvangen en afgewerkt. Men mag in dit stage rapport een duidelijke omschrijving verwachten omtrent deze opdrachten.

Ter verduidelijking wordt het geheel voorzien van schermafbeeldingen. Ook deze worden voorzien van de nodige commentaar.



2. Stagebedrijf: Xtendit



2.1 Ontstaan

 

Xtendit is onstaan door het samen bundelen van enkele evaren Management en IT consultants met diverse competentiegebieden. Hierdoor kan Xtendit concepten en technologieën aanbieden op een multinationaal niveau tegen een acceptabele prijs. De naam Xtendit is afgeleid van het engelstalige woord “extend” hetgeen “verruimen” betekent. Xtend"it" omvat ook de component "IT". 


Missie: Smart in ICT
S pecifieke
M eetbare
A anvaardbare
R esultaatgerichte
T ijdsgebonden

 

 

Xtendit streeft ernaar om oplossingen te bieden voor bedrijven en de visie van het management en hun bedrijfsprocessen verruimen. Hierbij wordt steeds sterk gefocust op het gebruik van "state of the art" informatietechnologie. M.a.w. maakt Xtendit  steeds gebruik van de laatst nieuwe technologieën. Xtendit streeft er naar toe op ieder ogenblik rekening te houden met de eigenheid van het klantbedrijf en de daar opgebouwde historiek. Het leveren van maatwerk tegen een betaalbare prijs is het doel van Xtendit. Dit kan op regiebasis of volgens een forfaitaire prijs gebeuren.

Door met een vaste prijs te werken, kan Xtendit een oplossing implementeren binnen het afgesproken budget en planning.

 

Xtendit hecht groot belang aan:

 

-          Professionele aanpak van informaticaprojecten

-          Automatiseren van bedrijfsprocessen op een efficiënte manier

-          State-of-the-art technologie 

-          Up-to-date kennis van zijn medewerkers

-          Kwalitatieve oplossingen

-          Dienst na verkoop

 

 

2.2 Fusie Xtendit en Interoffice 

 

Begin 2009 hebben de bedrijven Xtendit en interoffice de handen in elkaar geslagen en samen 1 bedrijf gevormd. Xtendit is sinds zijn onstaan verantwoordelijk geweest voor het software gedeelte van de informatica sector terwijl Interoffice zich in hardware specialiseerde. In het verleden, voor de fusie plaats vond, kreeg Xtendit dikwijls de vraag van klanten om hun te voorzien van hardware, en niet enkel software. Interoffice had hetzelfde probleem, maar dan omgekeerd. Het was dan ook logisch dat deze 2 bedrijven samen kwamen zodat de klanten op 1 adres terecht kunnen voor al hun informatica behoeften. Men kan gerust stellen dat deze twee bedrijven elkaar aanvullen.

 

 

2.3 Outsourcing - SPecialisten en EXperts op uw maat (SPEX)

Vermits niet alle bedrijven een eigen ICT afdeling ter beschikking hebben stelt Xtendit voor deze bedrijven SPecialisten en Experten ter beschikking. Afhankelijk van de eisen van het project zal Xtendit werknemers ter beschikking stellen met de nodige kwalificaties om de klant op een professionele wijze tevreden te stellen.



2.4 System Management

De systeemgroep van Xtendit Solutions beschouwt het als haar missie om de klanten in een snel veranderend informaticalandschap de nodige continuïteit te garanderen door middel van kwaliteitsgerichte oplossingen, projectmatige aanpak en sterk partnerschap met betrouwbare leveranciers

2.5 Hardware

Naast het leveren van IT-gerelateerde componenten en systemen voor zowel business-to-business klanten als voor eindgebruikers, bouwt Xtendit(Interoffice) complete configuraties op maat samen. Tevens wordt de nodige aandacht besteed aan de bijhorende software componenten zoals operating-systemen, security software zoals anti-virus, anti-spam, backup software, enz…
Xtendit levert toegevoegde waarde op vlak van professioneel advies en ondersteuning, voorraad en logistiek, product- en marktinformatie. 

Xtendit beschikt over een eigen support-afdeling die zorgt voor een degelijke afhandeling bij eventuele problemen met IT-apparatuur. Xtendit beschikt over een groot magazijn met de nodige hardware op stock zodat de klanten meestal onmiddellijk geholpen kunnen worden. Het aankopen van een grotere stock heeft ook als voordeel dat Xtendit op deze manier de prijs laag kan houden. Het valt toch voor dat klanten specifieke hardware nodig hebben die eigen zijn aan hun bedrijf. Xtendit kan deze produkten uiteraard bijbestellen. Indien deze klant duidelijk maakt op regelmatige basis hun specifieke hardware nodig te hebben, zal Xtendit speciaal voor die klant een beperkte stock opbouwen om op deze manier de klant in de toekomst nog sneller te kunnen helpen.


2.6 Diensten

De afdeling netwerken bij Xtendit bestaat uit gemotiveerde en technisch onderlegde medewerkers, met een brede kennis op specifieke vakgebieden zoals serverhardware, netwerktopologie, Microsoft serverplatformen, terminalservices, firewalls en VPN-oplossingen. De meerwaarde wordt gevormd door de klant voortdurend te betrekken in het doen en laten van de technici. Wij werken steeds transparant, informeren de klant on-line over de stand van zijn project en de wijzigingen in elke configuratie. Het beheer van de 'administratorpaswoorden' gebeurt steeds in samenspraak.  Dit is volgens ons de enige manier om een vertrouwensrelatie op te bouwen en te behouden.

 

 

2.6.1 (Mobile) diensten & technologieën

 Xtendit legt zich al meerdere jaren toe op oplossingen voor het verbeteren van de service-efficiëntie in dienstverlenende bedrijven door het implementeren van oplossingen zoals track & trace toepassingen, geofencing, planning, digitale werkbonnen, checklisten, tijdsregistratie, registratie van materialen, enz... en deze mobiel ter beschikking te stellen aan field workers in o.a. de installatie-, de onderhoud-, de energie-, de bouw-, de logistiek- en de transportsector. Xtendit levert maaktwerk of een bestaande mobiele oplossing en deze kunnen naadloos geintegreerd worden met het ERP- of CRM systeem van de klant.

 

2.6.2 WPAmobile
 

WPAmobile is ontworpen met het oog op integratie met alle toonaangevende ERP of CRM systemen. Het concept is zodanig ontwikkeld dat, in geval van integratie,  het back office systeem steeds "leading" blijft in het hele proces. Hierdoor vallen traditioneel tijdrovende en kostenintensieve taken weg. De gegevens die gegenereerd worden door het backoffice systeem worden via mobiel internet bezorgd aan de field worker. De gegevens die door de medewerkers in de buitendienst worden ingevoerd , worden op hun beurt via mobiel internet in real time in het ERP-systeem geregistreerd waardoor de interne administratieve routines efficiënter worden. Dit levert aanzienlijke besparingen en een stijgende cash flow op. WPAmobile kan geïntegreerd worden met SAP, Navision, Axapta, Briljant, HandSoft Pro, e.v.a. ... Indien gewenst laat WPAmobile ook toe om stand alone te werken in ASP mode.

In 2008 werd Xtendit erkend als “WPA mobile gold certified partner” voor de Benelux.

 

 

 

 

2.6.3 XtenditFleet

 

XtenditFleet is een intelligent programma dat het beheer en de verwerking van gegevens afkomstig van lokalisatietoestellen mogelijk maakt. De mobiele eenheden worden uitgerust met ingebouwde of draagbare apparaten (blackboxen) die informatie verzamelen (km, tijd, snelheid, ID bestuurder, temperatuur,…) en een lokalisatie van het voertuig (materieel) toelaten dankzij een verbinding met het GPS netwerk. De totaliteit van gegevens wordt verstuurd, in real time of gegroepeerd, naar een communicatieserver via het GPRS netwerk of via SMS. Eenmaal beschikbaar op de server, worden de gegevens verwerkt  en op het computerscherm getoond.  De gegenereerde database kan gebruikt worden voor allerhande rapportages, exporten naar andere toepassingen en integratie met  bestaande beheersprogramma’s.

 

 


2.6.4 Webdevelopment - ProSite Website

 

ProSite Website - Het Content management systeem.

 

De websites die Xtendit aan hun klanten levert beschikken allemaal over het content management systeem Prosite CMS. Met het CMS kan de klant volledig zelfstandig de inhoud(pagina's, teksten, beeldmateriaal, downloadbare bestanden, enz...) van hun website beheren. Ook heeft de klant volledige controle over de navigatiestructuur. Functies en onderdelen die buiten de website liggen zijn ook aanpasbaar door de klant.

Met het CMS kan de klant eenvoudig zonder programmeerkennis hun website actueel houden. Het CMS is een online programma waarmee de klant vanaf iedere locatie, op elk moment, de structuur, de inhoud en de functies van hun website eenvoudig kunnen aanpassen. Voor het gebruik van het CMS hoeft dus geen software te worden geïnstalleerd: een computer met internettoegang is voldoende.

 

Het CMS kan onbeperkt gebruikers toegang geven en rechten toekennen.

Het is mogelijk om meerdere mensen toegang tot het CMS te geven (zonder extra kosten: de klant kan onbeperkt gebruikers toegang tot het systeem geven met één licentie van CMS). Gebruikersrechten kunnen op groeps- en gebruikersniveau worden vastgelegd. Het is daardoor mogelijk verschillende medewerkers of zelfs externe partijen (tekstschrijvers, reclame- en communicatiebureaus) decentraal toegang te geven tot het systeem en tegelijkertijd centraal de regie en eindcontrole in handen te houden.

 

Het CMS programma is snel en flexibel aanpasbaar aan de eisen en wensen van de klant. Dikwijls biedt de basisversie van het CMS met zijn standaard functies een voldoende oplossing voor de klant. Wanneer dit echter niet het geval is kan CMS snel en kostenefficiënt uitgebreid worden met diverse modules die voor extra functionaliteiten zorgen. Enkele voorbeelden van modules die snel en eenvoudig in het CMS geplaatst kunnen worden zijn: interactieve formulieren, Website statistieken , Online betalingen verwerken, Makelaarsaanbod , Sitemap  enzo... Indien de klant echter bijzondere eisen heeft, kan het CMS op maat worden aangepast door de werknemers van Xtendit.

 

 


2.6.5 iSeries (AS400)

Het aankopen van AS400-systemen en de bijhorende software is een grote kost voor de meeste klanten. Over het algemeen zijn de meeste klanten tevreden met de werking van hun verouderde programma’s. Vervangen van deze systemen is in dit geval uitgesloten voor de klant. Een nadeel van de oudere programma’s zijn de typische “groene schermen”. Deze zorgen voor het verouderde gevoel dat deze programma’s met hun meebrengen. Xtendit biedt hun klanten hiervoor een snelle en kostefficiënte oplossing aan. Het is mogelijk om deze oude programma’s te moderniseren en hun te voorzien van een "windowed look and feel". Xtendit garandeerd dat de processen van de oorspronkelijke toepassing onaangeraakt zullen blijven, behalve wanneer de klant om bepaalde aanpassingen vraagt. Dankzij de expertise van de medewerkers van Xtendit is het relatief eenvoudig om een bestaande AS400-applicatie extra functionaliteiten te geven (client/server, internet, mobiel ...), zonder de toepassing zelf te wijzigen.

 

 

 

Van het “verouderde” groene scherm

 

 

 

 


... naar een modern gebruiksvriendelijke interface

 

 

 

 

2.6.6 Carsolution

 

Een ander softwarepakket dat Xtendit aanbiedt is Carsolution. Dit software pakket biedt een goede oplossing voor een efficiënt atelierbeheer in carrosseriebedrijven. Carsolution beschikt over een realtime opvolging van de volledige dossiercyclus. Op ieder moment kan worden opgevraagd in welke fase een bepaalde herstelling zich bevindt. Het geïntegreerde tijdsregistratiesysteem controleert de prestaties van de werknemers en er kan automatisch een berekening voor het uurloon gemaakt worden.

 

Functionaliteiten en voordelen:

-          eenvoudig te gebruiken door mekaniekers

-          overzichtelijk dossierbeheer

-          alle opzoekmogelijkheden (op nummerplaat, klantnaam, automerk, maatschappij…)

-          tijdsbesparing dankzij een eenmalige ingave van de gegevens

-          mogelijkheid om per gebruiker machtigingen toe te kennen

-          import en export-module naar om het even welke software

 

2.6.7 Windev 14

 

Voor het ontwikkeling van software maakt Xtendit gebruik van Windev 14. Windev 14 is een handig software pakket dat gekend staat om ontwikkelingstijden te beperken. Dit zal de ontwikkelingskosten beperken. Windev zorgt voor een stabiele, betrouwbare oplossing.

 

 

2.6.7.1 Geschiedenis van WinDev

Windev zag voor het eerst het daglicht in 1993 in een MS-DOS omgeving. PC-SOFT is de ontwikkelaar van deze software. Windev is een IDE, wat staat voor integrated development environment. IDE wordt ook als integrated design environment of integrated debugging environment beschreven. Een IDE software pakket dient de volgende eigenschappen te bezitten: Source code editor, compiler, build automation tools en debugger. Deze eigenschappen lijken in deze tijd vrijwel standaard te zijn, in 1993 was dit echter niet het geval.

 

2.6.7.2 Wlanguage

 

Windev 14 maakt gebruik van een 4de generatie programmeer-taal, Wlanguage. Het gebruik van deze taal  biedt verschillende voordelen. Wlanguage kan door de ontwikkelaar gebruikt worden om vanaf nul een programma op te bouwen.

 

 

2.6.7.3 Rapid application development

 

Behalve via programmatie is het ook mogelijk om op een snelle en eenvoudige manier programma’s te genereren met de in Windev ingebouwde tool, RAD. Rapid application development biedt verschillende vooraf gedefiniëerde oplossingen. De eindgebruiker zal in principe geen verschil merken tussen een applicatie die wel of niet via RAD is opgebouwd. Het nadeel van het gebruik van RAD is dat de gegenereerde applicaties beperkt zijn in hun mogelijkheden. De ontwikkelaar kan wel verschillende aanpassingen doen in de gegenereerde RAD applicaties, maar indien de klant specifieke eisen heeft, voldoen de mogelijkheden van RAD niet meer. Xtendit vraagt aan zijn ontwikkelaar om geen of allesinds zo weinig mogelijk gebruik van RAD te maken. Xtendit probeert om zoveel mogelijk ontwikkelde software (gedeeltelijk) te herbruiken bij toekomstige projecten. Dit is bij RAD applicaties bijna niet mogelijk.

 


2.6.7.4 Rapid graphical Interface

 

Een met RAD vergelijkbare functie die men kan gebruiken voor aanpassingen in de layout is RID (Rapid graphical Interface Design). Het principe van RID is hetzelfde zoals bij RAD, vaste templates worden toegepast en op deze manier wordt de layout telkens op dezelfde vooraf gekozen stijl opgebouwd. Dit is een zeer handige tool die standaard in WinDev wordt meegeleverd. Het grote voordeel van RID is dat de layout van alle schermen in een programma vrij snel en zonder veel moeite aangepast kunnen worden. Het grote voordeel is echter dat men zeker is dat het volledige programma bestaat uit éénzelfde layout. Xtendit maakt meestal gebruik van deze RID functie.

 

 

Windev 14 programmeer omgeving.

 

 

2.6.7.5  Windev 14 programmeeromgeving.

 

Programma’s die ontwikkelt zijn via Wlanguage zijn volledig platform onafhankelijk. Applicaties ontwikkeldt in Windev werken zonder probleem op een Linux systeem of dergelijke. Na het ontwikkelen van een applicatie kan er een executable aangemaakt te worden. Afhankelijk van het besturingssysteem kiest men het gewenste type executable. In plaats van een executable kan men ook kiezen voor een installatiebestand te laten genereren. Het voordeel van zo’n installatiebestand is dat de gebruiker die de installatie doet, zelf nog enkele keuzes kan maken. Zoals de locatie van de databank kan tijdens de installatie opgegeven worden. Met een executable bestand heeft de gebruiker geen keuze over de locatie van de databank. In dit geval zal de gebruiker de databank op een vaste locatie plaatsen die de ontwikkelaar vooraf heeft bepaald.


2.6.7.6 Dynamische compilatie

 

Windev laat dynamische compilatie toe. Dit wil zeggen dat de ontwikkelaar tijdens het compile/testen van de software aanpassingen in de code kan doen zonder eerst de test te moeten stoppen.

WinDev is voorzien van een groot aantal voorbeeld projecten. Deze projecten zijn redelijk uitgebreid en tonen samen een groot deel van de mogelijkheden van WinDev. Ontwikkelaars kunnen deze voorbeelden raadplegen om hier info uit te halen om deze dan toe te passen op hun eigen project. Een ander goede hulp waar de ontwikkelaar zich op kan baseren is de uitgebreide hulp functie waar Windev van voorzien is. Vermits Xtendit de franstalige versie van Windev gebruikt is deze helpfunctie enkel in het frans beschikbaar.

 

 

2.6.7.7 Franstalige omgeving

 

WinDev is ontwikkeld door een franstalig bedrijf. Hierdoor is frans de standaard taal voor WinDev. Engelse versies zijn ook beschikbaar. Deze zijn echter een stuk hoger in prijs en de engelse versies lopen dikwijls een stuk achter op de franse versie. Hierdoor werkt Xtendit enkel met de franse versies. Dit wil zeggen dat de volledige interface franstalig is, alsook de helpfunctie. De code mag echter ingegeven worden in het frans of engels. Het is zelfs zonder enige probleem mogelijk om de 2 talen door elkaar  te gebruiken. Men mag dus b.v. een If-functie starten met “SI” en eindigen met “END” i.p.v. “FIN”. WinDev heeft de mogelijk om de code te vertalen naar engels of frans. Uiteraard worden enkel de door Wlanguage herkende woorden vertaald en geen namen van variabelen. De namen van variabelen blijven ongewijzigd. Windev specialiseerd zich in applicaties die snel ontwikkeld moeten worden en waar databeheer centraal staat. Het is voor WinDev ook mogelijk om Java en dotnet applicaties samen met een Windev applicatie te voegen.

Windev beschikt over een analyse bestand. Hierin staan beschrijvingen van de databestanden die in een project gebruikt zullen worden. Het is niet verplicht om een project aan een analyse te linken, het word echter sterk aangeraden. Een analyse kan gebruikt worden door meerdere projecten.

 

 

2.6.7.8 Componenten

 

Windev heeft verschillende componenten beschikbaar voor de ontwikkelaar. Een voorbeeld van deze componenten is het email-component. Dit maakt het voor de ontwikkelaar zeer eenvoudig een email functie in een programma te plaatsen. Dit kan op zeer eenvoudige wijze via de drag and drop methode in ieder bestaand project geplaatst worden. Windev 14 beschikt over een groot aantal componenten die het werk van de ontwikkelaar sterk zullen doen dalen. Enkele andere voorbeelden van dit soort componenten zijn: FTP-bestanden doorsturen, rapporten tonen, streaming video’s beheren, webservices enzo...

 

 

2.6.7.9 Databeheer

 

WinDev ondersteunt de meeste soorten databanken zoals Ms.Access, SQL,XML,AS400 enzo... Windev beschikt ook over een eigen datatype voor het bijhouden van gegevens, namelijk HyperFileSQL. Het is mogelijk om de WinDev HyperFileSQL in Client/Server mode te laten werken. In dit geval zal de databank meestal op een server staan. De ontwikkelaars hebben in dit geval centraal toegang tot de databank. Dit is zeer handig wanneer men met meerdere ontwikkelaars werkt aan 1 project. Een ander voordeel van Client/Server mode is dat alle processen (queries, lezen, schrijven enzo...) uitgevoerd worden door de server.  Dit kan echter ook nadelig zijn in sommige gevallen. Wanneer meerdere ontwikkelaars samen aan 1 project werken, valt het regelmatig voor dat ze op hetzelfde ogenblik de server zullen belasten, met oplopende vertragingen als gevolg. Dit probleem viel af en toe voor gedurende mij stage periode.

 

 

2.6.7.10 Source Code Manager (SCM)/ Gestionnaire de sources(GDS)

 

 

 

SCM zorgt voor een eenvoudiger manier van samenwerken tussen meerdere teamleden. De Source Code Manager maakt het mogelijk dat verschillende ontwikkelaars van op een afstand toch samen aan 1 project kunnen werken. Bestanden kunnen heel eenvoudig onderling uitgewisseld worden.

Het is mogelijk om via SCM samen te werken via een locale netwerkverbinding, internet of in offline mode of een combinatie van deze 3 mogelijkheden.

In offline mode zal SCM de offline bestanden uploaden zodra de ontwikkelaar de eerst volgende keer verbinding met het hoofdsysteem maakt.

SCM houdt een databank bij met hierin de gegevens over het verleden van het project.

Xtendit maakt goed gebruik van deze functie die standaard wordt geleverd met dit softwarepakket. Alle projecten uit het verleden zijn voor alle ontwikkelaars beschikbaar op ieder moment via de Source Code Manager.

 

                

2.6.7.11 Persoonlijk besluit i.v.m. Windev 14

 

Op het begin van mijn stage was het niet zo eenvoudig om aan WinDev 14 te wennen. De programmeer omgeving was in het frans. Dit was op het begin een zeer zwaar struikelpunt. Na mijn 3 maanden stage heb ik een volledig andere kijk gekregen op WinDev. Het werken in WinDev lukt mij ondertussen redelijk goed. Er valt uiteraard nog steeds veel bij te leren.

 

 

 

3. Opdrachten

 

 

3.1 Opdracht 1: Aanpassen Xtendit Timecard Addition project

 

De eerste opdracht die mij gegeven werd was het uitbreiden van een registratie-tool die reeds bij Xtendit gebruikt werd. De werknemers van Xtendit moeten iedere week hun werkuren doorgeven samen met het aantal uur dat ze aan een bepaald project gewerkt hebben voor een bepaalde klant. Het is de bedoeling dat deze gegevens via een programma worden verwerkt. Het maandloon van de werknemers is hiervan afhankelijk. Het oorsprongkelijke programma was echter vrij beperkt in mogelijkheden. Het tonen van gegevens en deze gegevens afdrukken was de enige mogelijkheid die de gebruiker had. Verschillende gebreken zijn aan het licht gekomen tijdens het gebruik. Mijn opdracht was het oplossen van deze gebreken.

 

De opdracht die men mij gegeven had bestond verschillende eisen:

 

-          Het was belangrijk dat het programma werd voorzien van een duidelijkere, overzichtelijkere manier van werken. Het selecteren van een datum was in het oorspronkelijk programma vrij omslachtig. Hier moest een eenvoudigere oplossing voor worden voorzien.

 

-          Een ander punt waar veel belang aan werd gehecht was dat de mogelijkheid tot groeperen werd voorzien in het programma. De opdracht bestond eruit om te kunnen groeperen op 4 verschillende waarden: Datum, Klant,Project en Persoon. Elke groepering moest voorzien worden van een subtotaal.

 

-          De mogelijk om bepaalde records te selecteren moest ook worden voorzien. In de tabel diende in de eerste kolom een selectiebox per record worden getoond. Boven deze kolom moest een knop worden voorzien om alle records ineens te kunnen selecteren of juist déselecteren.

 

-          De gegevens moesten in een grafiek kunnen worden getoond.

 

-          In het verleden was het niet mogelijk om gegevens aan te passen in de tabel. Men kon enkel de gegevens inlezen en afdrukken. Het wijzigen van gegevens moest worden voorzien. Nieuwe records toevoegen behoorde niet tot de opdracht.

 

-          Een handleiding met daarin een duidelijke uitleg over de werking van het programma moest worden voorzien. De uitleg in deze handleiding moest op zulke manier worden opgesteld dat zelfs een leek zonder veel moeite de werking van het programma begrijpt.

 

 

3.2 Opdracht 2: Nieuwe schermen toevoegen aan Xtendit Timecard Addition project

 

Deze opdracht is een uitbreiding op de vorige opdracht. M.a.w. een uitbreiding op het Xtendit Timecard Addition project. De huidige mogelijkheden van het project zijn beperkt tot het opzoeken, wijzigen of afdrukken van gegevens. De uitbreiding moet voor enkele nieuwe mogelijkheden zorgen. Er moet een 2de databank worden aangemaakt. Bepaalde gegevens moeten van de oorspronkelijke databank gekopieerd worden naar de nieuwe databank. Het is de bedoeling van deze uitbreiding dat er berekeningen gemaakt kunnen worden via uit de database opgehaalde waarden, maar ook via waarden die de gebruiker zelf moet ingeven. Aan de hand van deze gegevens zullen berekeningen worden gemaakt. De ingevoerde gegevens worden samen met de “oude” gegevens bijgehouden in de nieuwe databank. Indien records worden toegevoegd(b.v. nieuwe klant), moet deze data ook in de oorspronkelijke database aangepast worden.

Om het geheel overzichtelijk te houden wordt er gevraagd om een hoofdmenu te voorzien. Via dit hoofdmenu kunnen aparte schermen worden opgeroepen( multiple document interface (MDI). De berekeningen die moeten worden gedaan worden onderverdeeld in voorziene kosten/opbrengsten en effectieve kosten/opbrengsten en de restante waarden. Voor de voorziene en effectieve kosten/opbrengsten moeten totale kosten en totale opbrengten en coëfficiënten berekend worden.

 

 

 

 

 

 

4. Uitwerken van de opdrachten

 

4.1. Opdracht 1 : Aanpassen Xtendit Timecard Addition project

 

4.1.1 Oorspronkelijke- en huidige situatie

 

Oorspronkelijk: Het is enkel mogelijk om zelfstandig een datum in te geven of via een simpel keuzemenu de begin- en einddatums te selecteren. De inhoud van de tabel is afhankelijk van de gekozen begin- en einddatum. Enkel de gegevens waarvan de datum tussen de opgelegde begin- en einddatum ligt, worden getoond.

Huidige project: Via de “opties” knop kan men uit 10 vooraf gedefineerde start- en einddatums kiezen. B.v. datum van vandaag, 1week terug,1maand terug, 1 jaar terug, begin van het jaar enzo... Ook kan men door middel van een duidelijk menu zelf een datum aanklikken. De vooraf gedefineerde start- en einddatums zijn niet aanpasbaar door de eindgebruiker.

 

 

Oorspronkelijk: De gegevens in de tabel werden automatisch door WinDev opgevuld via RAD. Rapid Application Developement.

Huidige project: De gegevens in de tabel worden via een SQL-query opgevuld. Deze aanpassing was nodig om het groeperen mogelijk te maken. Rapid Application Developement heeft als voordeel om op een korte periode toch een vrij uitgebreid programma tot stand te kunnen brengen. Een nadeel van RAD is dat het beperkter is in zijn functionaliteiten. RAD laat zich achteraf nogal moeilijk aanpassen, wat op zich al een grote beperking is.

 

 

Oorspronkelijk:  Alle gegevens werden getoond in de tabel zonder de mogelijkheid voor het opzoeken van gegevens. Indien er veel records worden getoond is het kunnen opzoeken van een bepaalde waarde, geen overbodige luxe.

Huidige project: Per kolom kan men zoeken op een bepaalde waarde. Naast de titel van elke kolom staat een vergrootglas, hier kan met de te zoeken waarde ingeven.  Het zoeken van een waarde in een bepaalde kolom gaat vrij eenvoudig op deze manier. Wanneer men in de zoekfunctie de eerste letter ingeeft zullen dadelijk alle resultaten die met deze letter beginnen, getoond worden. De manier waarop deze zoekfunctie tewerk gaat, is het positioneren in de tabel, zodra de gezochte waarde in de tabel gevonden is. De zoekfunctie zal geen gegevens verbergen of filteren. Het gebruik van de zoekfunctie zal geen invloed hebben op het afdrukken of exporteren van gegevens. Het aanpassen en verwijderen van gegevens is ook zonder enige problemen mogelijk als men gebruikt maakt van de zoekfunctie.

 

 

Oorspronkelijk: In bepaalde combo-boxen(b.v. Projecten)kwamen dubbele gegevens voor. Een klant kan b.v. meedere projecten hebben waardoor hij meerdermaals voorkomt in de projecten-tabel.

Huidige project:  De query’s die verantwoordelijk zijn voor het opvullen van deze combo-boxen zijn aangepast zodat er geen dubbele waarden meer voorkomen. Ook zorgt deze query dat de gegevens alfabetisch worden getoond in de combo-boxen.

 

 

 

 

Oorspronkelijk: Het was enkel mogelijk om gegevens te filteren op een bepaalde Persoon, Klant of Project. Groeperen was niet mogelijk. Het is de bedoeling dat men kan groeperen op 1 of op meerdere waarden. Op deze manier kan men zelf beslissen welke totalen er getoond moeten worden. Men moet  b.v. kunnen groeperen op Persoon en op Klant. Er zou dan getoond moeten worden hoeveel werk-uren een bepaalde persoon(werknemer) aan bepaalde klant(en) heeft besteed.

Huidige project:  Men kan in het project 3 combo-boxen terugvinden waar men uit 4 waarden kan kiezen, afhankelijk op welke waarden men wilt groeperen. (Klanten, Personen, Projecten en Dagen). Het opvullen van de combo-boxen gebeurt volledig dynamisch. Dit is nodig omdat men vooraf niet weet welke waarden in welke combo-boxen zullen komen te staan. De volgorde waarin men de waarden kiest zijn ook van belang. Sorteren op Klanten-Project-Datum geeft niet dezelfde uitkomst als sorteren op Project-Klant-Datum. Het kunnen selecteren van 2 dezelfde waarden moet absoluut uitgesloten worden. Men mag b.v. nooit 2x op Klanten kunnen groeperen. Wanneer in combo-box 1 de waarde “klanten” wordt gekozen, mag men in combo-box 2(en 3) de keuze “klanten” niet te zien krijgen.

Ook  mag er geen waarde ingeven kunnen worden in combo-box 2 (of 3) terwijl combo-box 1 leeg blijft.  Om hier zeker van te zijn worden telkens de waarden in combo-box2 en combo-box3 verwijderd wanneer men een aanpassing doet in combo-box1. Hetzelfde telt voor combo-box3, deze wordt gewist wanneer er een aanpassing in combo-box2 gebeurt. Dit geeft een voordeel bij het programmeren. Men moet niet iedere keer gaan testen of er wel of niet een waarde in alle  3 combo-boxen staan. Men mag ervan uitgaan dat als de 1ste combo-box leeg is, de andere 2 ook leeg zullen zijn. Uiteraard telt ook hetzelfde voor combo-box3, deze inhoud wordt ook verwijderd zodra er een aanpassing gebeurt in combo-box2.

Het uitwerken van de SQL-string om het groeperen mogelijk te maken was een zwaar knelpunt waar ik zeer veel tijd aan besteed heb. Het opbouwen van de SQL-string was ook zonder twijfel tot nu toe de grootste uitdaging gedurende mijn stage. De reden hiervoor zijn de verschillende mogelijkheden tot groeperen. Om dit mogelijk te maken moet de SQL-string volledig dynamisch opgebouwd worden om zich op ieder moment aan iedere situatie te kunnen aanpassen. Er zijn 4 situaties die zich kunnen voordoen. Men kan kiezen om niet te groepen, of om op 1 of om op 2 of op om 3 waarden te groeperen. Deze 4 situaties moeten ieder apart opgevangen worden. Er moet eerst getest worden welk van de 4 situaties van toepassing is, hierna worden de juiste procedures opgeroepen en op deze manier wordt de SQL-string volledig opgebouwd afhankelijk van de gekozen waarden. Wanneer men geen groepeer optie kiest wordt de SQL-query op de “gewone” wijze opgebouwd. Wanneer men wel groepeerd moet men op een andere wijze te werk gaan voor het opbouwen van de SQL-string. Bij het groepen zijn er verschillende velden in de tabel die niet meer worden gebruikt zolang de gegevens gegroepeerd zijn. Deze velden zijn leeg,maar er moet toch voor een dummy-waarde gezorgd worden om deze velden toch op te vangen. Het niet opvangen van waardes via de dummy-methode zal zorgen voor foutsituaties. Deze dummy-waarden worden in de SQL-query opgevangen in plaats van de oorspronkelijke waarde. Bij het groeperen worden de werkuren(per groepering) opgeteld. Ook het totaal aantal werkuren wordt op het einde van de tabel weergegeven.

 

 

Oorspronkelijk: Het was niet mogelijk om een keuze te maken tussen bepaalde records. Er werd daarom gevraagd om een selecteer optie te voorzien zodat er gekozen kan worden met welke records er verder gewerkt dient te worden.

Huidige project:  In de eerste kolom van de tabel is de mogelijkheid voorzien om via een selectiebox bepaalde records selecteren/déselecteren. Default zijn alle records automatisch geslecteerd. Boven de selectiebox kan men een knop terugvinden waar men afhankelijk van de huidige selectie-situatie, kan kiezen voor selecteer alles, of selecteer niets. Deze knop wordt pas zichtbaar wanneer men gegevens gaat ophalen. Wanneer b.v. enkele records niet geselecteerd zijn, zal de knop boven de selectiebox zorgen dat men alles ineens kan selecteren. Wanneer alle records geselecteerd zijn, zal de knop boven de selectiebox zorgen dat men alles ineens kan déselecteren. De selecteer optie is van belang bij het afdrukken of bij het exporteren van gegevens. Men heeft de keuze om via deze selecteer optie bepaalde records te negeren. Het selecteren van gegevens heeft geen invloed over het aanpassen of wissen van gegevens.

 

 

Oorspronkelijk: Afdrukken: enkel een volledige afdruk mogelijk. Het was niet mogelijk om slechts een gedeelte van de gegevens af te drukken. Op de laatste afdruk pagina werd enkel het totaal van het aantal gewerkte uren opgeteld en weergeven.

Huidige project:  Het is mogelijk om deel van de gegevens af te drukken via de selecteer optie. Alle aanpassingen die men in de tabel doet, zoals groeperen of bepaalde records selecteren, zullen automatisch meegenomen worden in de afdruk.

Ook is het type afdruk is afhankelijk of er gegroepeerd wordt of niet. Wanneer men niet groepeert zal er een ander type document afgedrukt worden dan wanneer men wel groepeert. Dit is nodig omdat de verdeling van de gegevens bij het groeperen veranderen. Door het groeperen blijven bepaalde velden onopgevuld. De titels van kolomen die leeg blijven worden niet weergeven.Op de laatste afdrukpagina wordt er automatisch een verslag aangemaakt. Het aantal afgedrukte records wordt vermeld en ook welke sorteer en groepeer opties men heeft gekozen. Ook de gekozen begin- en einddatum waarop men heeft gesorteerd, staan op de laatste afdruk pagina vermeld. Een goed verzorgde/duidelijke layout voor de afdruk voor beide types was van groot belang. Een hoofding met het logo van Xtendit moest worden voorzien. Op het einde van iedere afdrukpagina wordt een paginanummer,het totaal aantal pagina’s, de datum van vandaag en de tekst “prestatie overzicht” weergegeven.

 

 

Oorspronkelijk: Gegevens exporteren was niet mogelijk. De enige mogelijkheid om gegevens naar de buitenwereld te brengen, was het afdrukken van alle gegevens.

Huidige project:  Via de knop exporteren kan men kiezen om de huidige gegevens die in de tabel staan te exporteren naar: het klembord, Word, Excel of naar een XML bestand. Zoals bij afdrukken worden alle aanpassingen die men in de tabel doet, meegenomen bij het exporteren. Een record dat niet geselecteerd is zal dus ook niet worden meegenomen in de geëxporteerde gegevens. Indien men eerst groepeert en daarna exporteert, zullen enkel de gegroepeerde gegevens afgedrukt worden. Uiteraard zijn onderlinge combinaties mogelijk, zoals b.v. sorteren, groeperen en enkele records selecteren.

 

 

Oorspronkelijk: De gegevens werden uit de databank opgehaald maar het aanpassen ervan was niet mogelijk. Dit zorgde voor de nodige problemen wanneer er een fout in de gegevens ontdekt werd.

Huidige project:  De gegevens worden uit de database opgehaald. Hierna kan de gebruiker kiezen om gegevens te wijzigen. De wijzigingen worden automatisch doorgevoerd naar de databank. Wanneer men op 1 of meer waarden groepeerd, wordt de knop aanpassen gedisabled. Dit om er voor te zorgen dat men geen gegevens kan aanpassen wanneer de tabel gegroepeerd is. Dit zou voor fout situaties zorgen vermits bepaalde gegevens totalen zijn van een groep afzonderlijke gegevens. Het aanpassen van de gegevens gebeurt in de tabel. Nadat de aanpassingen gedaan zijn kan men op de knop “aanpassen” klikken om de aangepaste gegevens door te voeren naar de databank. Het opslaan van de gegevens gebeurt per record. Wanneer men op de knop “aanpassen” klikt, worden enkel de gegevens op het huidig geselecteerde record opgeslaan

 

 

Oorspronkelijk: Het maken van een grafiek was in het verleden niet mogelijk.

Huidige project:  Men kan doormiddel van een rechtermuisklik kiezen voor een grafiek te maken van de huidige gegevens in de tabel. Zoals bij het exporteren en afdrukken worden alle aanpassingen aan de tabel opgenomen in de grafiek. Het type grafiek kan door de eindgebruiker op ieder moment aangepast worden door middel van het optiemenu dat via de rechtermuisknop beschikbaar is. Het maken van een grafiek van een grotere hoeveelheid gegevens zou onduidelijk worden. Het maken van een grafiek van (beperkte)gegroepeerde gegevens zal in de meeste gevallen een stuk duidelijker zijn. Het wordt dan ook aangeraden om niet teveel gegevens te selecteren bij het maken van een grafiek om de leesbaarheid hoog te houden.

 

 

Oorspronkelijk: De gegevens werden uit de databank opgehaald maar het verwijderen ervan was niet mogelijk. Dit zorgde voor de nodige problemen wanneer er een fout in de gegevens ontdekt werd.

Huidige project:  Gegevens kunnen worden verwijderd. Men kan 1 record selecteren en via de knop “verwijderen”, de gekozen gegevens wissen. Voordat het record effectief verwijderd wordt, krijgt men eerst een pop-up box met de vraag of men zeker is het record te willen verwijderen.

Zoals bij het aanpassen van gegevens is het niet mogelijk om gegevens te verwijderen wanneer er op 1 of meerdere waarden gegroepeerd wordt.Gegroepeerde gegevens bestaan uit totalen van bepaalde gegevens, het verwijderen van zo een verzameling gegevens zou voor foutsituaties zorgen.

Het verwijderen/selecteren van meer dan 1 record op hetzelfde ogenblik is niet mogelijk.

 

 

Andere knelpunten:

 

Datum en tijd: Wanneer men groepeerd op datum en b.v. op project deed er zich een foutje voor bij het groeperen. Sommige datums kwamen meerdere keren voor bij hetzelfde project. Dit is uiteraard niet de bedoeling. Blijkbaar word ook het tijdstip opgenomen in de database samen met de datum in éénzelfde veld. Bij het uitvoeren van de SQL-string worden de gegevens gegroepeerd op datum en op tijd. In de tabel word de tijd echter niet getoond, hierdoor was het niet simpel om de oorzaak van het probleem op te sporen.

 

 

 

 

 

4.1.2 Een stukje code als voorbeeld

 

Procedure fillQuery: Deze procedure wordt opgeroepen wanneer men op de knop “zoeken” klikt. Het is deze procedure die het groeperen mogelijk maakt door het dynamisch opbouwen van de SQL-string. Deze procedure is verantwoordelijk voor het opvullen van de tabel. Deze procedure is voorzien van de nodige commentaar zodat men stap voor stap kan volgen wat er gebeurt in deze code.

 

 

PROCEDURE fillQuery()

 

//Initialiseren van de tabel

TableDeleteAll(TBL_Reports)

 

//Declaraties

query,selection,sOrder,totalQ are strings

 

sBeginDate, sEindDate, sKlanten,sProjecten,sPersonen are strings

 

sBeginDate = SC_SélectionPériode.SAI_StartDate

sEindDate = SC_SélectionPériode.SAI_EndDate

 

//Testen of er een waarde in de sorteer combo-boxen aanwezig is.

//Indien er een waarde gevonden is, wordt deze waarde in een variabele geplaatst

IF ListSelect(COMBO_Customers) > 0 THEN sKlanten = COMBO_Customers[ListSelect(COMBO_Customers)]

IF ListSelect(COMBO_Projects) > 0 THEN sProjecten = COMBO_Projects

IF ListSelect(COMBO_Persons) > 0 THEN sPersonen = COMBO_Persons[ListSelect(COMBO_Persons)]

 

 

//standaard dummy opvulling

sFieldMetFilter is string = [

'' AS strSubject,

'' AS strBody,

'' AS strLocation,

'' AS strName_tb,

'' AS strCategory_tb,

]

//dummy opvulling, afhaneklijk van de gekozen groepering(en)

//Deze variablen kunnen onderling naar keuze worden opgeroepen op iedere gewenst moment om op deze manier een dynamische query te vormen

sFieldProject is string = "tblMeta1.strName AS strName, "

sFieldProject2 is string =" '' AS strName, "

 

sFieldDatum is string = "tblReports.dtmDate AS dtmDate, ""

sFieldDatum2 is string ="00000000 AS dtmDate, "

 

sFieldKlant is string = "tblMeta1.strCategory  AS strCategory, "

sFieldKlant2 is string = " '' AS strCategory, "

 

sFieldPersoon is string = "tblPersons.strPersonName AS strPersonName, "

sFieldPersoon2 is string = " '' AS strPersonName, "

 

sFieldHour is string = "SUM(tblReports.numHours) AS numHours  "

 

//standaard opvullen zonder groepering

sFieldZonderFilter is string = [

tblReports.numHours AS numHours, 

tblReports.strSubject AS strSubject,

tblReports.dtmDate AS dtmDate,

tblReports.strBody AS strBody,

tblReports.strLocation AS strLocation,

tblPersons.strPersonName AS strPersonName,

tblMeta1.strName AS strName,

tblMeta1.strCategory AS strCategory,

tblMeta2.strName AS strName_tb,

tblMeta2.strCategory AS strCategory_tb

]

 

query = " SELECT "

 

//In deze variabelen komen de waarden van de combo-boxen te staan om te groeperen.

sCombo1,sCombo2,sCombo3 are strings

 

//Zoeken of er een waarde in de 1ste combo-box zit, om te groeperen.

//Als er een waarde wordt gevonden, dan worden de juiste variable aan de query toegevoegd.

IF ListSelect(COMBO_Filter1) > 0  _AND_ NoSpace(COMBO_Filter1[ListSelect(COMBO_Filter1)]) <> "" THEN

     sCombo1 = COMBO_Filter1[ListSelect(COMBO_Filter1)]

     query += " " + sFieldMetFilter + " "

     //sState = 0

     IF sCombo1 = "Klanten" THEN

         query += sFieldKlant

     ELSE

         IF sCombo1 = "Projecten" THEN

              query +=  sFieldProject

         ELSE

              IF sCombo1 = "Dagen" THEN

                   query += sFieldDatum

              ELSE

                   IF sCombo1 = "Personen" THEN

                        query += sFieldPersoon

                   END 

              END 

         END 

     END 

    

//Zoeken of er een waarde in de 2de combo-box zit, om te groeperen.

//Als er een waarde wordt gevonden, dan worden de juiste variable aan de query toegevoegd.

//Indien er geen waarde gevonden wordt in de eerste combo-box, wordt de code voor combo-box 2(en 3) niet uitgevoerd.

     IF ListSelect(COMBO_Filter2) > 0 _AND_ NoSpace(COMBO_Filter2[ListSelect(COMBO_Filter2)]) <> "" THEN

         sCombo2 = COMBO_Filter2[ListSelect(COMBO_Filter2)]

          IF sCombo2 = "Klanten" THEN

              query += sFieldKlant

         ELSE

              IF sCombo2 = "Projecten" THEN

                  query +=  sFieldProject

              ELSE

                  IF sCombo2 = "Dagen" THEN

                       query +=sFieldDatum 

                  ELSE

                       IF sCombo2 = "Personen" THEN query += sFieldPersoon

                   END

              END

         END

 

//Zoeken of er een waarde in de 3de combo-box zit, om te groeperen.

//Als er een waarde wordt gevonden, dan worden de juiste variable aan de query toegevoegd.

//Indien er geen waarde gevonden wordt in de eerste en tweede combo-box, wordt de code voor combo-box 3 niet uitgevoerd.

         IF ListSelect(COMBO_Filter3) > 0 _AND_ NoSpace(COMBO_Filter3[ListSelect(COMBO_Filter3)]) <> "" THEN

              sCombo3 = COMBO_Filter3[ListSelect(COMBO_Filter3)]

              IF sCombo3 = "Klanten" THEN

                   query += sFieldKlant

              ELSE

                   IF sCombo3 = "Projecten" THEN

                        query += sFieldProject

                   ELSE

                        IF sCombo3 = "Dagen" THEN

                            query += sFieldDatum

                        ELSE

                            IF sCombo3 = "Personen" THEN

                                 query += sFieldPersoon

                            END

                        END

                   END

              END

         END

     END

ELSE

//indien er geen waarde staat in combo-box1, dan wordt de variable gekozen met als inhoud de SQL-string zonder groepering. Men mag er vanuit gaan dat er geen waarde in combo-box2 of combo-box3 staat

     query += sFieldZonderFilter

END

 

totalQ = query

 

NRes  est un entier

 

//Als er wordt gegroepeerd moeten er dummy waarden gebruikt worden om de niet gegroepeerde waarden op te vangen.

//Standaard worden voor alle velden dummy waarden ingevoerd.

//Hierna wordt er getest of de dummy waarden vervangen moet worden door de te groeperen waarde(n).

IF ListSelect(COMBO_Filter1) > 0  _AND_ NoSpace(COMBO_Filter1[ListSelect(COMBO_Filter1)]) <> "" THEN

     NRes = Position(totalQ,sFieldProject,rtfMotComplet+rtfSensibleCasse)

     IF NRes = 0 THEN totalQ += sFieldProject2

 

     NRes = Position(totalQ,sFieldDatum,rtfMotComplet+rtfSensibleCasse)

     IF NRes = 0 THEN totalQ += sFieldDatum2

 

     NRes = Position(totalQ,sFieldKlant,rtfMotComplet+rtfSensibleCasse)

     IF NRes = 0 THEN totalQ += sFieldKlant2

 

     NRes = Position(totalQ,sFieldPersoon,rtfMotComplet+rtfSensibleCasse)

     IF NRes = 0 THEN totalQ +=  sFieldPersoon2

    

     totalQ += sFieldHour

END

 

//SQL-code: inzetbaar bij gegroepeerde- en niet-gegroepeerde gegevens.

totalQ += " FROM tblPersons,tblReports,tblMeta2,tblMeta1 "

 

selection = " WHERE tblReports.intPersonID = tblPersons.intPersonID "

selection += " AND tblReports.intMeta2ID = tblMeta2.intMeta2ID "

selection += " AND tblReports.intMeta1ID = tblMeta1.intMeta1ID "

selection += " AND tblReports.dtmDate BETWEEN " + sBeginDate + " AND " + sEindDate + " "

 

 

 

//De vooraf opgevulde variablen worden getest op hun inhoud.

//Als ze niet leeg zijn worden de nodige waardes aan de SQL-string toegevoegd.

IF sKlanten > 0 _AND_ NoSpace(sKlanten) <> ""  THEN selection += " AND tblMeta1.strCategory = '" + sKlanten + "' "

 

IF sPersonen > 0 _AND_ NoSpace(sPersonen) <> ""  THEN selection += " AND tblPersons.strPersonName = '" + sPersonen + "' "

 

IF sProjecten > 0  _AND_ NoSpace(sProjecten) <> "" THEN selection += " AND tblReports.intMeta1ID = " + sProjecten + " "

 

totalQ += selection

 

//De nodige parameters worden doorgegeven aan de procedure fillQueryPara als de combo-boxen opgevult zijn.

//De procedure fillQueryPara geeft een waarde terug die aan de query wordt toegevoegd.

//De fillQueryPara procedure kan men lager in dit document terugvinden.

IF sCombo1 > 0 THEN

     totalQ += " GROUP BY "  + fillQueryPara(sCombo1)   

     IF sCombo2 > 0 THEN

         totalQ += " , " + fillQueryPara(sCombo2)

         IF sCombo3 > 0 THEN

              totalQ += " , " + fillQueryPara(sCombo3)

         END

     END

END

 

//Het doorlopen en effectief opvullen van de tabel.

dsTest is Data Source

IF HExecuteSQLQuery(dsTest, hQueryWithoutHFCorrection, totalQ) THEN

     IF HReadFirst(dsTest) THEN

         WHILE NOT HOut(dsTest)                     TableAddLine(TBL_Reports, True,  dsTest.dtmDate, dsTest.strPersonName, dsTest.numHours,dsTest.strSubject,dsTest.strBody, dsTest.strLocation,dsTest.strName,dsTest.strCategory,dsTest.strName_tb,dsTest.strCategory_tb)

              HReadNext(dsTest)

         END

     END

END

 

 

 

// fillQueryPara procedure die een parameter opvangd en een resultaat terug stuurt

PROCEDURE fillQueryPara(groupfield)

sNewGroupField is string = ""

SWITCH groupfield

     CASE "Dagen" : sNewGroupField = "tblReports.dtmDate"

     CASE "Personen" : sNewGroupField = "tblPersons.strPersonName"

     CASE "Klanten": sNewGroupField = "tblMeta1.strCategory"

     CASE "Projecten": sNewGroupField ="tblMeta1.strName"

        

END

RESULT sNewGroupField

 

 

4.1.3 Schermafbeeldingen

 

4.1.3.1 Prestatie overzicht : openingsscherm

 


4.1.3.2 Prestatie overzicht : Gegevens tonen

 

 

4.1.3.3 Prestatie overzicht : Gegevens tonen gesorteerd op persoon en klant

 

 
4.1.3.4 Prestatie overzicht : Datum keuze

 

 

4.1.3.4 Prestatie overzicht : Exporteer keuze menu

 


 

4.1.3.5 Prestatie overzicht : Afdruk zonder groepering


4.1.3.5 Prestatie overzicht : Afdruk met groepering


4.2
Opdracht 2 : Nieuwe schermen toevoegen aan Xtendit Timecard Addition project

 

4.2.1 Databeheer

 

Zoals eerder reeds vermeld,was nodig om bepaalde gegevens over te brengen naar een nieuwe, zelf aan te maken databank. Het formaat van deze databank moest HyperFileSQL zijn, standaard door Windev ondersteund. De onderstaande code zal hier iets meer duidelijkheid over scheppen. Deze code wordt niet opgenomen in het uiteindelijk programma. Het is enkel de bedoeling om eenmalig alle nodige data te kopiëren van de oorspronkelijke MS Access databank naar de nieuwe HyperFileSQL databank.

 

PROCEDURE HyperFileSQL_aanm()

 

tel est un entier = 0

QUAND EXCEPTION DANS 

 

    //HfPersoon opvullen

    IF HReadFirst(tblPersons) THEN

        WHILE NOT HOut(tblPersons) 

             tel = 0      

             HChangeRep(HfPersoon,"c:\data")

             HCréationSiInexistant(HfPersoon)

//HfPersoon aanmaken indien ze nog niet bestaat

             HfPersoon.intPersonID = tblPersons.intPersonID

             HfPersoon.strPersonName = tblPersons.strPersonName

             HfPersoon.strPersonCoeff = 0

             HfPersoon.strPersonDirectKost = 0

             HAjoute(HfPersoon)

             HReadNext(tblPersons)

        END

    END

   

    //HfProject opvullen

    IF HReadFirst(tblMeta1) THEN

        WHILE NOT HOut(tblMeta1)   

             tel = 0      

             HChangeRep(HfProject,"c:\data")

             HCréationSiInexistant(HfProject)

//HfProject aanmaken indien ze nog niet bestaat

             HfProject.intMeta1ID = tblMeta1.intMeta1ID

             HfProject.strName = tblMeta1.strName

             HfProject.strStatus = 0

             HfProject.strCategory = tblMeta1.strCategory

             HAjoute(HfProject)

             HReadNext(tblMeta1)

        END

    END

  

  

  

FAIRE

Erreur("Fout op  HyperFileSQL : " + HErreur())

SINON

Trace("Tabellen succesvol aangemaakt")

FIN

 

 

4.2.2 Hoofdmenu

 

In het hoofdmenu heeft men de keuze uit Menu, Bewerken of afsluiten

Wanneer men voor gegevens opvragen kiest, dan krijg men de uitwerking van mijn eerste opdracht te zien. Het hoofdmenu is aangemaakt in het begin van de tweede opdracht.

Wanneer men op Kost/opbrengst berekenen klikt, dan krijgt men een berekenscherm te zien. Dit scherm zal naderhand uitgelegd worden.

 

Als men in het hoofdmenu voor bewerken kiest, dan krijgt men 3 opties te zien. Persoon gegevens, project gegevens en Data pad. Persoon- en projectgegevens dienen zoals de naam als zeg, voor het aanpassen van persoon- en projectgegevens. Data pad geeft de gebruiker de optie om de plaats van de HyperSQLFiles te veranderen.

 

4.2.3 Persoon gegevens

 

 

 

 

In dit scherm kan de gebruiker nieuwe personen aanmaken of de bestaande gegevens aanpassen. De gebuiker moet geen knop indrukken om de aanpassen door te voeren. Deze worden automatisch opgeslagen zonder dat de gebruiker hier iets voor hoeft te doen. Behalve de naam van de persoon kan ook de Directe kost en de Coëfficiënt ingegeven worden. De directe kost is de kost die een persoon voor het bedrijf kost. De Coëfficiënt is de winstfactor die men telt voor die bepaalde persoon. De gebruiker kan op een heel eenvoudige manier een nieuwe persoon toevoegen. Er hoeft enkel een nieuwe naam onder het laatste record ingegeven te worden. Deze zal automatisch bijgehouden worden in de database. Deze gegevens zullen in de MS-access en in de hypersfiles bijgehouden worden. Wijzigingen in de tabel worden ook in beide databanken aangepast.

 


4.2.4 Project gegevens

 

 

 

 

In dit scherm kan de gebruiker nieuwe projecten aanmaken of de bestaande gegevens aanpassen. De gebuiker moet geen knop indrukken om de aanpassen door te voeren. Deze worden automatisch opgeslagen zonder dat de gebruiker hier iets voor hoeft te doen. Behalve de naam van het project kan ook het status van het project en de klantnaam voor een bepaald project aangepast worden. Met status van het project wordt de vooruitgang van het project in percentage bedoeld.

De gebruiker kan op een heel eenvoudige manier een nieuw project toevoegen. Er hoeft enkel een nieuwe naam onder het laatste record ingegeven te worden. Deze zal automatisch bijgehouden worden in de database. Deze gegevens zullen in de MS-access en in de hypersfiles bijgehouden worden. Wijzigingen in de tabel worden ook in beide databanken aangepast.

 


 

4.2.5 Data pad

 

 

 

 

 

 

In dit scherm kan de gebruiker de locatie van de databanken op de harde schijf bepalen. Deze aanpassing telt enkel voor de hyperSQLFile-bestanden, niet voor de MS-Access database. De MS-Access database staat opslagen op een externe locatie. Zodat het project niet enkel op het bedrijf van Xtendit zelf zou werken, heb ik de MS-Access database offline gezet. Hierdoor is het mogelijk dat iedereen de  offline versie kan testen die men op de cd die bij dit stagerapport zit,  kan terugvinden.


4.2.6 Kost/opbrengst berekenen

 

4.2.6.1 Ingave voorziene K/O

 

 

Het scherm Kost/opbrengst berekenen is onderverdeeld in 3 tabbladen. Om te kunnen starten moet de gebruiker eerst een project kiezen in de combo-box boven de applicatie.

Zodra de gebruiker dit heeft gedaan komt het status van het project naast de combo-box te staan. In het eerste tabblad, Ingave voorziene K/O moet de gebruiker enkele gegevens invoeren. Eerst moet er één of meerdere personen aan het project toegevoegd worden. De gebruiker moet het aantal voorziene uren ingeven dat wordt verwacht nodig te hebben voor dit project. Indien het project al reeds gestart is kan de gebruiker het reeds gewerkte aantal uren ingeven. De coëfficiënt wordt automastisch overgenomen uit de database. Maar de gebruiker kan de coëfficiënt aanpassen per project.

In de tabel “te berekenen gegevens” komen de toegevoegde gegevens te staan. Deze gegevens worden automatisch opgeslaan en kunnen achteraf opnieuw opgevraagd en aangepast worden.

Behalve personen kan men ook onderaannemingen toevoegen aan een project. Er wordt automatisch een berekening gemaakt en getoond. Via de knoppen “wis tabel” en “wis lijn” kunnen gegevens verwijderd worden. De knop “wis tabel” zal alle voorziene EN effectieve berekeningen wissen(voor 1 bepaald project). Via de knop wis lijn kan per lijn verwijderd worden. Deze verwijdering wordt NIET doorgevoerd in de effectieve berekeningen. Dit zodat de gebruiker toch controle heeft om onderscheid te kunnen maken tussen voorziene en effectieve gegevens.

 

 

4.2.6.2 Overzicht Effectieve K/O

 

 

 

 

 

In dit scherm krijgt de gebruiker een overzicht van de effectieve K/O te zien. De reeds gewerkte uren die men eventueel in het vorige tabblad ingegeven had, worden opgenomen in dit tabblad. De Coëfficiënt en de kost worden automatisch berekend op de reeds gewerkte uren. Men kan dit aantal gewerkte uren aanpassen in dit tabblad. De Coëfficiënt en de kost  zullen automatisch herberekend worden. De berekeningen zijn afhankelijk van het status van het project. B.v. de kost bij effectieve K/O is de kost die men op dit ogenblik heeft verbruikt. Als een project voor 10% voltooid is, zullen enkel de kosten die tijdens deze 10% gebruikt zijn meegetelt worden.


4.2.6.3 Totaal overzicht

 

 

 

 

In dit scherm krijgt men een totaal overzicht te zien. De gegevens van de voorziene K/O worden vergelijken met de Effectieve K/O. De gebruiker kan de gegevens printen doormiddel van de rechtermuisknop te klikken op een tabel naar keuze. Via een klik op de rechtermuisknop kan men ook een grafiek tevoorschijn laten komen.

 

 

 

5. Persoonlijke ervaring i.v.m. mijn stage verloop

 

Zoals overal waarschijnlijk het geval is, was het begin van mijn stage een hele aanpassing voor mij. Behalve een nieuwe omgeving met nieuwe gezichten was ook de programmeertaal waarmee ik moest werken, volledig nieuw voor mij.

Zoals bij iedere nieuwe ontwikkelingsomgeving heeft Windev een leerperiode nodig eer men er vlot mee overweg kan. Vooral het feit dat Xtendit gebruikt maakt van de franstalige versie van het ontwikkelingspakket, maakte het niet eenvoudiger. Het aanpassen aan de WinDev omgeving heeft me toch enige tijd gevraagd.

Tijdens mijn stage waren er bepaalde periodes dat de werknemers van Xtendit druk aan hun eigen project bezig waren en hierdoor mij “aan mijn lot overlieten”. Dit zorgde af en toe voor frustratie wanneer ik even vastzat, maar dit had echter ook een positieve kant. Het zelfstandig zoeken naar een oplossing levert misschien minder snel resultaat op, maar zorgt wel voor een zeer leerzame evaring. Het lange tijd zoeken naar een oplossing kan een zeer frusterende en vooral demotiverende taak zijn, maar wanneer men de oplossing eindelijk heeft gevonden, is het omgekeerde waar. Het vinden van een oplossing na lange tijd zoeken zorgt voor een zeer aangenaam, motiverend gevoel voor de ontwikkelaar.

De laatste maand van mijn stage is zonder enige twijfel de meest leerzame maand geweest. De (basis)kennis Windev 14 die ik in de eerste 2 maanden opgedaan heb, kon ik volop in de praktijk toepassen tijdens de 3de en laatste  maand van mijn stage. In die laatste maand was het opvallend dat ik zelfstandiger tewerk kon gaan. Men zou kunnen zeggen dat er na de 2de maand plotseling een lichtje was gaan branden.Dit was duidelijk te merken aan de vooruitgang die ik in die maand maakte.

 

De opdrachten die ik tijdens mijn stage ontving draaide rond de prestatie overzicht applicatie. De oorspronkelijke en ook beperkte versie van deze applicatie werd reeds gebruikt door Dhr. Paul Smeets, COO van Xtendit Solutions. Mijn applicatie zal de oorspronkelijk versie vervangen. Dit wil zeggen dat mijn applicatie daadwerkelijk gebruikt zal worden en niet zomaar aan de kant geschoven zal worden om uiteindelijk onder een dikke laag stof terecht te komen.

Een ander voordeel hiervan was het direct werken voor een opdrachtgever/klant. Mijn applicatie zal slechts door 1 persoon gebruikt worden, Dhr. Paul Smeets. Hierdoor was het noodzakelijk om af en toe een tussentijdse testversie aan Dhr. Smeets te tonen. Dit om te controleren of ik wel degelijk op het goede pad zat. Met andere woorden, testen of mijn applicatie functioneerde naar de wensen van Dhr. Smeets.

 

 

6. Conclusie

 

De bedoeling van een stage is dat de student in praktijk werkervaring kan opdoen en hier zoveel mogelijk uit bijleert.

Zonder enig probleem mag ik stellen dat mijn stage een zeer leerzame ervaring voor mij geweest is. Behalve de technische kennis die ik er heb opgedaan, heb ik een beter idee gekregen over het doen en laten in het bedrijfsleven.

Het was ook heel intressant om de theoretische kennis die ik in mijn schoolcarrière heb opgedaan, in praktijk te kunnen toepassen voor een directe opdrachtgever.

Door het positief beëindigen van mijn stage heb me tegenover mijn omgeving, maar vooral tegenover mezelf bewezen dat ik in staat ben om degelijk te functionen in een professionele werkomgeving.

 

 

 

7. Geraadpleegde bronnen

 

http://www.xtendit.be

http://www-03.ibm.com/systems/i/

http://www.wpamobile.com

http://www.int-sob.be/

http://www.doffis.com/

http://en.wikipedia.org/wiki/WinDev

http://www.windev.com/windev

http://www.pcsoft.fr/

http://www.1keydata.com/sql

http://infogoal.com/sql

http://www.pcsoft-windev-webdev.com/usconcepts/windev/WinDev-14-Concepts-US.pdf

http://helpdesk.ddmgr.com/WXUS_WEB/PAGE_Home.awp

http://www.windev.com.mx/

http://www.windevcanada.com/en/

http://www.haypocalc.com/blog/index.php/2007/11/07/83-pc-soft-windev

http://forum.pcsoft.fr/group.awp?forum=pcsoft.us.windev&lang=us

http://www.windev.com/ts/download/index.html