16.07.2013 Views

Programmering I - xpi.dk

Programmering I - xpi.dk

Programmering I - xpi.dk

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Copyright © 2011 Microsoft.<br />

Microsoft Dynamics ® C5 Version 2012<br />

<strong>Programmering</strong> I<br />

C5 er et varemærke, der tilhører Microsoft.<br />

Produkter og firmaer nævnt i dette dokument er varemærker, der tilhører deres respektive ejere.<br />

Indholdet i dette dokument må på ingen måde gengives - helt eller delvist hverken på tryk eller i anden form<br />

uden forudgående tilladelse fra Microsoft. Indholdet i dette dokument kan ændres uden varsel. Der tages<br />

forbehold for tryk- og stavefejl.<br />

Microsoft Development Center Copenhagen, Frydenlunds Allé 6, DK-2950 Vedbæk, Danmark<br />

Tlf.: +45 4567 8000, www.microsoft.com/danmark/dynamics/losninger/c5.mspx


Indholdsfortegnelse<br />

Indledning ............................................................................................................................................................... 12<br />

Del I - XAL sproget ...................................................................................................... 13<br />

1. XAL editoren ................................................................................................. 14<br />

Sproget XAL ............................................................................................................................................................ 14<br />

Anvendelse af XAL editoren ............................................................................................................................. 14<br />

Funktionstaster ...................................................................................................................................................... 15<br />

Kommentarer { } .................................................................................................................................................... 16<br />

Skrivning af kommentarer på disk ................................................................................................................. 17<br />

Opgaver: XAL editoren ....................................................................................................................................... 19<br />

2. Grundlæggende XAL kommandoer ............................................................ 20<br />

PRINT ......................................................................................................................................................................... 20<br />

PRINT AT .................................................................................................................................................................. 21<br />

PAUSE ........................................................................................................................................................................ 22<br />

WINDOW ................................................................................................................................................................. 23<br />

WINDOW AT ........................................................................................................................................................... 24<br />

WINDOW og PRINT AT ...................................................................................................................................... 25<br />

Opgaver: Grundlæggende XAL kommandoer .......................................................................................... 25<br />

3. Variabler i XAL sproget ............................................................................... 27<br />

Variabeltyper .......................................................................................................................................................... 27<br />

Erklæring af variabler .......................................................................................................................................... 28<br />

Tildeling af værdier til variabler ...................................................................................................................... 29<br />

Udskrivning af indhold fra variabler .............................................................................................................. 30<br />

Opgaver: Variabler i XAL sproget ................................................................................................................... 33<br />

4. PROMPT, grundlæggende brugerdialog .................................................... 34<br />

Tildeling af værdier til variabler ...................................................................................................................... 34<br />

PROMPT ................................................................................................................................................................... 35<br />

Linjeskift i promptbokse .................................................................................................................................... 35<br />

Størrelse på promptboxen ................................................................................................................................ 37<br />

INPUT AT .................................................................................................................................................................. 37<br />

Andre muligheder med promptbokse ......................................................................................................... 38<br />

Opgaver: PROMPT, Grundlæggende brugerdialog ................................................................................ 39<br />

5. Betingelsesstrukturer med IF ...................................................................... 41<br />

IF-THEN-ELSE-ENDIF ........................................................................................................................................... 41<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

2


Betingelsens bestanddele ................................................................................................................................. 42<br />

Opgaver: Betingelsesstrukturer med IF........................................................................................................ 44<br />

6. Fasttekster ..................................................................................................... 46<br />

Fastteksttyper og tekster ................................................................................................................................... 46<br />

Fasttekster i variabler .......................................................................................................................................... 47<br />

Tildeling af værdier til fasttekstvariabler ..................................................................................................... 48<br />

Udskrivning af værdier fra fasttekstvariabler ............................................................................................. 48<br />

Fasttekster i promptboxe .................................................................................................................................. 49<br />

Fasttekster i IF strukturer ................................................................................................................................... 50<br />

Vedligeholdelse af fasttekster ......................................................................................................................... 50<br />

Opgaver: Fasttekster ............................................................................................................................................ 51<br />

7. Funktioner, grundlæggende ........................................................................ 53<br />

Opbygning .............................................................................................................................................................. 53<br />

Syntaks ...................................................................................................................................................................... 54<br />

Datatyper i funktioner ......................................................................................................................................... 55<br />

Funktioner (ToDay(), TimeNow() m.fl.) ......................................................................................................... 56<br />

Opgaver: Funktioner ............................................................................................................................................ 63<br />

8. Brugerdialog med BOX, grundlæggende ................................................... 67<br />

Syntaks BOX() ......................................................................................................................................................... 67<br />

BOX() typerne 1 og 2 ........................................................................................................................................... 68<br />

Opgaver: Brugerdialog med BOX, grundlæggende ............................................................................... 70<br />

9. Kartoteksgennemløb, grundlæggende....................................................... 72<br />

SEARCH ..................................................................................................................................................................... 73<br />

Sortering med USING ......................................................................................................................................... 75<br />

Sortering med ORDER ........................................................................................................................................ 77<br />

Afgrænsning med WHERE ................................................................................................................................ 78<br />

Opgaver: Kartoteksgennemløb, grundlæggende .................................................................................... 81<br />

10. Brugerdialog med kartoteksopslag ............................................................ 82<br />

PROMPT grundlæggende repetition ............................................................................................................ 82<br />

PROMPT til afgrænsning i SEARCH ............................................................................................................... 83<br />

Kartoteksgennemløb med brugerstyret afgrænsning ........................................................................... 84<br />

PROMPT med REF ................................................................................................................................................ 85<br />

Opgaver: Brugerdialog med kartoteksopslag ........................................................................................... 88<br />

11. Kartoteksgennemløb, flere kartoteker ....................................................... 90<br />

Flere kartoteker uden synkronisering ........................................................................................................... 90<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

3


Flere kartoteker med synkronisering ............................................................................................................ 91<br />

Udarbejdelse af total ........................................................................................................................................... 94<br />

Opgaver: Kartoteksgennemløb, flere kartoteker ...................................................................................... 96<br />

12. Huskelister Kommandoer og funktioner ................................................... 99<br />

Box .............................................................................................................................................................................. 99<br />

Dokumentation af XAL-kørsler ..................................................................................................................... 100<br />

Funktion – CurUserID() .................................................................................................................................... 100<br />

Funktion – UserID2Name() ............................................................................................................................. 101<br />

Funktion – TimeNow() ..................................................................................................................................... 101<br />

Funktion – Time2Str() ....................................................................................................................................... 102<br />

Funktion – ToDay() ............................................................................................................................................ 102<br />

IF-THEN-ELSE-ENDIF ........................................................................................................................................ 103<br />

Index - se indhold af......................................................................................................................................... 103<br />

Kommentarer ...................................................................................................................................................... 104<br />

PAUSE ..................................................................................................................................................................... 104<br />

PRINT ...................................................................................................................................................................... 104<br />

PRINT AT ............................................................................................................................................................... 105<br />

<strong>Programmering</strong> – opret .................................................................................................................................. 106<br />

<strong>Programmering</strong> – ret ........................................................................................................................................ 106<br />

PROMPT ................................................................................................................................................................ 107<br />

PROMPT med REF ............................................................................................................................................. 108<br />

SEARCH-END ....................................................................................................................................................... 108<br />

SEARCH-END med USING INDEX ............................................................................................................... 109<br />

SEARCH-END med ORDER............................................................................................................................. 109<br />

SEARCH-END med WHERE ............................................................................................................................ 110<br />

SET ........................................................................................................................................................................... 111<br />

Variabler ................................................................................................................................................................ 112<br />

WINDOW .............................................................................................................................................................. 113<br />

XAL editoren - editeringsfunktioner .......................................................................................................... 114<br />

XAL editoren – nøgleord................................................................................................................................. 115<br />

13. Huskelister XAL sproget ............................................................................116<br />

ENUM ..................................................................................................................................................................... 116<br />

<strong>Programmering</strong> – opret .................................................................................................................................. 116<br />

<strong>Programmering</strong> – ret ........................................................................................................................................ 118<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

4


Del II – Kartoteker og skærmbilleder .....................................................................119<br />

14. Kartoteker ...................................................................................................120<br />

Oprettelse af kartoteker .................................................................................................................................. 120<br />

Navngivning af kartoteker ............................................................................................................................. 121<br />

Hvor ligger data ................................................................................................................................................. 121<br />

fPasswordbeskyttelse af kartoteker ............................................................................................................ 122<br />

Systemfelter i kartoteker ................................................................................................................................. 122<br />

Nye felter i kartoteker ...................................................................................................................................... 122<br />

Opgaver: Kartoteker ......................................................................................................................................... 126<br />

15. Indexer .........................................................................................................130<br />

Anvendelse af indexer...................................................................................................................................... 130<br />

Oprettelse af Index ............................................................................................................................................ 131<br />

Navngivning og indexformel ........................................................................................................................ 132<br />

Navngivning af Index i nye moduler .......................................................................................................... 132<br />

Opgaver: Index ................................................................................................................................................... 134<br />

16. Listbilleder...................................................................................................136<br />

Oprettelse af listbilleder .................................................................................................................................. 136<br />

Navngivning af listbilleder ............................................................................................................................. 138<br />

Kald fra udviklingsmenuen ............................................................................................................................ 138<br />

Kald via kartoteks- og feltreferencer ......................................................................................................... 139<br />

Opgaver: Listbilleder......................................................................................................................................... 141<br />

17. Formens vindue ..........................................................................................144<br />

Formens vindue .................................................................................................................................................. 144<br />

Triggere (forms formler) generelt ............................................................................................................... 145<br />

Triggere i ’Opsætning af vinduet’ ............................................................................................................... 146<br />

Forms kontrolkommandoer og macroer .................................................................................................. 147<br />

#MacroLoad() ...................................................................................................................................................... 148<br />

#FormError ........................................................................................................................................................... 149<br />

#Frm_Index() ........................................................................................................................................................ 149<br />

#Frm_Search()...................................................................................................................................................... 150<br />

#Frm_SearchTop() .............................................................................................................................................. 151<br />

#Frm_SearchEnd() .............................................................................................................................................. 151<br />

Eksempel på fejlhåndtering og styring af poster i en form .............................................................. 152<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

5


Specielt vedr. triggerne Init og Pre-form ................................................................................................. 152<br />

Opgaver: Formens vindue .............................................................................................................................. 154<br />

18. Enkelt record blok .......................................................................................155<br />

Opsætning af Enkelt record blok ................................................................................................................ 155<br />

Felter ....................................................................................................................................................................... 156<br />

Opgaver: Enkelt record blok .......................................................................................................................... 157<br />

19. Multi record blok ........................................................................................158<br />

Opsætning Multi record blok ....................................................................................................................... 159<br />

Felter ....................................................................................................................................................................... 160<br />

Opgaver: Multi record blokke ....................................................................................................................... 161<br />

20. Direkte opslag .............................................................................................162<br />

Opbygning af direkte opslag ........................................................................................................................ 162<br />

Sammenhæng i direkte opslag .................................................................................................................... 163<br />

Direkte opslag i XAL kørsel ............................................................................................................................ 164<br />

Opgaver: Direkte opslag ................................................................................................................................. 166<br />

21. Formens felter, opsætning ........................................................................167<br />

Formattering af felter ....................................................................................................................................... 167<br />

Triggere på felter ............................................................................................................................................... 169<br />

Post-Change ........................................................................................................................................................ 170<br />

Tildeling af værdi til et felt ............................................................................................................................. 171<br />

Valg af felt ............................................................................................................................................................ 172<br />

Valg af trigger ..................................................................................................................................................... 172<br />

Opgaver: Formens felter, opsætning ......................................................................................................... 173<br />

22. Listemenuer .................................................................................................174<br />

Listemenuer ......................................................................................................................................................... 174<br />

Hvor vedligeholdes listemenuer? ................................................................................................................ 176<br />

Opsætning af listemenu.................................................................................................................................. 176<br />

Indsættelse af menupunkter i listemenu .................................................................................................. 177<br />

Undermenuer ...................................................................................................................................................... 178<br />

Opgaver: Listemenuer ...................................................................................................................................... 180<br />

23. Synkronisering mellem forms ...................................................................181<br />

Synkronisering mellem forms ....................................................................................................................... 181<br />

Triggere ved synkronisering .......................................................................................................................... 182<br />

Triggeren Pre-Form .......................................................................................................................................... 182<br />

Buffer ...................................................................................................................................................................... 182<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

6


EXTERN .................................................................................................................................................................. 183<br />

SET ........................................................................................................................................................................... 184<br />

#Frm_Index() ........................................................................................................................................................ 185<br />

#Frm_Search() / #Frm_SearchTop() / #Frm_SearchEnd() ................................................................... 186<br />

Bloktriggeren Init-record ................................................................................................................................ 186<br />

Komplet eks. på synkronisering af forms ................................................................................................. 188<br />

Opgaver: Synkronisering mellem forms ................................................................................................... 190<br />

24. Huskelister forms .......................................................................................191<br />

Fasttekst – Opret ny type ............................................................................................................................... 191<br />

Fasttekst – Tilføj tekster til eksisterende type ........................................................................................ 192<br />

Fasttekst – Ret tekster i eksisterende type .............................................................................................. 193<br />

Kartotek – Navn (opret/ret) ........................................................................................................................... 194<br />

Kartotek – Feltbehandling (opret) ............................................................................................................... 195<br />

Kartotek – Feltbehandling (ret) .................................................................................................................... 196<br />

Kartotek – Feltbehandling (referencer) ..................................................................................................... 196<br />

Kartotek – Dokumentation ............................................................................................................................ 196<br />

Kartotek – Index (opret) .................................................................................................................................. 197<br />

Kartotek – Index (ret)........................................................................................................................................ 197<br />

Kartotek – Index (slet) ...................................................................................................................................... 198<br />

Listbillede – Opret ............................................................................................................................................. 198<br />

Listbillede – Ret .................................................................................................................................................. 199<br />

Listbillede – Slet.................................................................................................................................................. 199<br />

Menuer - Lille udviklingsmenu (CTRL F12) ............................................................................................. 200<br />

Menuer – Lokalmenuer ................................................................................................................................... 200<br />

Menuer – Opsætning af menupunkt ......................................................................................................... 201<br />

Form – Vindue (opret)...................................................................................................................................... 202<br />

Form – Vindue (ret) ........................................................................................................................................... 203<br />

Form – Vindue (slet ) (dvs. hele formen) .................................................................................................. 203<br />

Form – Enkelt record blok (opret) ............................................................................................................... 204<br />

Form – Enkelt record blok (ret) .................................................................................................................... 205<br />

Form – Enkelt record blok (slet) ................................................................................................................... 205<br />

Form – Multi record blok (opret) ................................................................................................................. 206<br />

Form – Multi record blok (ret) ...................................................................................................................... 207<br />

Form – Multi record blok (slet) ..................................................................................................................... 207<br />

Form – Felter (opret) ........................................................................................................................................ 208<br />

Form – Felter (ret) .............................................................................................................................................. 208<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

7


Form – Felter (slet) ............................................................................................................................................ 209<br />

Form – Triggere i vinduet ............................................................................................................................... 209<br />

Form – Triggere i blokke ................................................................................................................................. 210<br />

Form – Triggere i felter .................................................................................................................................... 210<br />

Del III – Rapporter .....................................................................................................211<br />

1. Rapport XAL ................................................................................................212<br />

Processer i rapportgeneratoren ................................................................................................................... 212<br />

Navne på rapporter .......................................................................................................................................... 212<br />

Rapportgeneratorens opbygning ............................................................................................................... 214<br />

Rapport-XAL ........................................................................................................................................................ 215<br />

SEARCH (repetition) .......................................................................................................................................... 215<br />

PROMPT (repetition) ........................................................................................................................................ 216<br />

OUTPUT ................................................................................................................................................................. 217<br />

Komplet eksempel på XAL kode .................................................................................................................. 219<br />

Opgaver: Rapport XAL ..................................................................................................................................... 221<br />

2. Rapport definition grundlæggende ..........................................................222<br />

Definitionsområdet ........................................................................................................................................... 222<br />

Skema med funktionstaster i rapportgeneratoren ............................................................................... 224<br />

Linjetypen Body .................................................................................................................................................. 225<br />

Kartotekskolonnen ............................................................................................................................................ 226<br />

Layoutområdet ................................................................................................................................................... 227<br />

Flere bodylinjer i samme rapport ................................................................................................................ 228<br />

Fritekst og ledetekster ..................................................................................................................................... 229<br />

Opgaver: Rapport definition, grundlæggende ...................................................................................... 232<br />

3. Linjetyper uden kartoteker ........................................................................233<br />

Linjetypen Page header ................................................................................................................................... 234<br />

Linjetypen Page footer .................................................................................................................................... 237<br />

Linjetypen Prolog ............................................................................................................................................... 239<br />

Linjetypen Epilog ............................................................................................................................................... 240<br />

Tegning af streger og kasser ........................................................................................................................ 241<br />

Sideskift ................................................................................................................................................................. 242<br />

Opgaver: Linjetyper uden kartotek ............................................................................................................. 244<br />

4. Rapport definition felter i layout .............................................................246<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

8


Oprettelsesmetoder .......................................................................................................................................... 247<br />

Feltudtryk .............................................................................................................................................................. 248<br />

Formattering ........................................................................................................................................................ 248<br />

Mulige værdier i feltudtryk ............................................................................................................................ 249<br />

Kartoteksfelter uden kvalifikation ............................................................................................................... 250<br />

Kartoteksfelter med kvalifikation ................................................................................................................. 251<br />

Hvornår skal der kvalificeres? ....................................................................................................................... 252<br />

Tekst ........................................................................................................................................................................ 253<br />

Variabler ................................................................................................................................................................ 255<br />

Egne variabler...................................................................................................................................................... 255<br />

Systemvariabler .................................................................................................................................................. 256<br />

Macroer ................................................................................................................................................................. 258<br />

#Company ............................................................................................................................................................ 258<br />

#MacroLoad() ...................................................................................................................................................... 259<br />

Funktioner ............................................................................................................................................................. 261<br />

Regneudtryk ........................................................................................................................................................ 262<br />

Opgaver : Rapport definition felter i layout ............................................................................................ 264<br />

5. Linjetypen Control ......................................................................................265<br />

Opbygning af Control linjer ........................................................................................................................... 265<br />

#Rep_Execute ...................................................................................................................................................... 267<br />

Macroen #Add .................................................................................................................................................... 268<br />

Control linjer og #Add i Rapport-QT ......................................................................................................... 270<br />

Opgaver: Linjetypen Control ......................................................................................................................... 272<br />

6. Linjetyper med kartoteker .........................................................................273<br />

Bindeled i Rapport XAL og Rapport Definition ...................................................................................... 273<br />

Enkeltstående kartoteker ................................................................................................................................ 276<br />

Afhængige synkroniserede kartoteker ...................................................................................................... 277<br />

Linjetypen Body .................................................................................................................................................. 279<br />

Linjetypen Group Header ............................................................................................................................... 279<br />

Linjetypen Group Footer ................................................................................................................................. 282<br />

Linjetypen Subtotal ........................................................................................................................................... 286<br />

Opgaver: Linjetyper med kartoteker .......................................................................................................... 291<br />

7. Rapport QT Grundlæggende funktioner ..................................................293<br />

QT-værktøjet ....................................................................................................................................................... 293<br />

QT i forhold til XAL ............................................................................................................................................ 294<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

9


Tre hovedområder i rapportgeneratoren ................................................................................................ 294<br />

Udtræk med XAL eller QT .............................................................................................................................. 294<br />

XAL og QT i samme rapport .......................................................................................................................... 295<br />

Forskelle ved udsendelse af data til rapport........................................................................................... 296<br />

QT værktøjets vinduer ..................................................................................................................................... 297<br />

Afgrænsningsvinduet ....................................................................................................................................... 298<br />

Relationsvinduet (ved søgning i ét kartotek).......................................................................................... 299<br />

Opsætningsvinduet .......................................................................................................................................... 300<br />

Sorteringsvinduet .............................................................................................................................................. 301<br />

Procedure for QT til søgning i ét kartotek. .............................................................................................. 302<br />

Eksempel på Rapport-XAL og Rapport-QT ............................................................................................. 302<br />

Rapport-XAL ........................................................................................................................................................ 302<br />

Rapport-QT .......................................................................................................................................................... 303<br />

Brugernes muligheder i Rapport-QT ......................................................................................................... 305<br />

Opgaver: Rapport QT Grundlæggende funktioner .............................................................................. 308<br />

8. Rapport QT filtrering og sortering ...........................................................311<br />

Filtrering ................................................................................................................................................................ 311<br />

Filtre i Rapport QT ............................................................................................................................................. 312<br />

Build-filter ............................................................................................................................................................. 312<br />

Run-filter ............................................................................................................................................................... 312<br />

Sortering ................................................................................................................................................................ 313<br />

Anvendelse af sorteringsvinduet ................................................................................................................. 314<br />

Opgaver: Rapport QT filtrering og sortering .......................................................................................... 315<br />

9. Subtotaler automatiske .............................................................................317<br />

Procedure for brug af automatiske subtotaler ...................................................................................... 317<br />

Opsætning af felt ............................................................................................................................................... 317<br />

Opsætning af udskrivningsmåde ................................................................................................................ 320<br />

Opsætning af automatisk ledetekst ........................................................................................................... 321<br />

Sortering ................................................................................................................................................................ 321<br />

Tekst ........................................................................................................................................................................ 322<br />

Opsætning af ledetekst og udskrivningsmåde ...................................................................................... 323<br />

Eksempler.............................................................................................................................................................. 323<br />

Opgaver: Subtotaler automatiske ............................................................................................................... 326<br />

10. Rapport QT triggere grundlæggende .......................................................327<br />

Triggere ................................................................................................................................................................. 327<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

10


Globale triggere i opsætning ........................................................................................................................ 328<br />

Kartotekstriggere ............................................................................................................................................... 329<br />

Rækkefølge på triggere................................................................................................................................... 331<br />

Eksempel på anvendelse ................................................................................................................................. 333<br />

Opgaver: Rapport QT Triggere, grundlæggende ................................................................................. 335<br />

11. Rapport QT med flere kartoteker .............................................................336<br />

Flere kartoteker .................................................................................................................................................. 336<br />

Relaterede kartoteker ...................................................................................................................................... 338<br />

Relation i Rapport-QT ...................................................................................................................................... 339<br />

Opgaver: Rapport QT med flere kartoteker ............................................................................................ 344<br />

12. Huskelister Rapporter ................................................................................346<br />

Oprette rapport .................................................................................................................................................. 346<br />

Oprette rapportlinjer (Kolonnerne) ............................................................................................................ 346<br />

Oprette rapportlinjer med fritekst .............................................................................................................. 346<br />

Oprette rapportlinjer med streger og kasser ......................................................................................... 347<br />

Oprette rapportlinjer med forskellige felter............................................................................................ 347<br />

Rapport – afprøve (køre)................................................................................................................................. 347<br />

Rapport QT – Oprette første kartotek ....................................................................................................... 348<br />

Rapport QT – Oprette flere kartoteker ...................................................................................................... 349<br />

Rapport QT – Sortere ....................................................................................................................................... 350<br />

Rapport QT – Filtrere ........................................................................................................................................ 350<br />

Rapport QT – Feltafgrænse (tilføje / slette) ............................................................................................. 350<br />

Rapport QT – Triggere i opsætning ........................................................................................................... 351<br />

Rapport QT – Triggere på kartoteker ........................................................................................................ 351<br />

Subtotaler ............................................................................................................................................................. 352<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

11


Indledning<br />

Velkommen til kurset Microsoft Dynamics C5 <strong>Programmering</strong> I. Kurset er berammet til 3 dage.<br />

Kursusmaterialet er udarbejdet til version 2012.<br />

Målgruppe<br />

Personer der ønsker et grundlæggende kendskab til udviklingsmiljøet i Microsoft Dynamics C5, og<br />

personer der skal opnå autorisation som Microsoft Dynamics C5 Programmør.<br />

Forudsætninger<br />

Gennemført kurset C5 Supervisor og evt. C5 Applikation II.<br />

Formål<br />

Kurset giver deltageren et grundlæggende kendskab til C5’s udviklingsmiljø og hvordan tilretninger og<br />

opbygning af nye elementer i systemet foretages.<br />

På kurset behandles følgende emner:<br />

Udviklingsmiljøet og kartoteksstrukturen<br />

<strong>Programmering</strong>ssproget XAL<br />

Opbygning af rapporter og skærmbilleder<br />

Opbygning af søgerutiner i XAL og QT<br />

Beskrivelse af materialet<br />

Materialet er opbygget i uafhængige lektioner, der hver behandler et emne eller funktion i C5. Det skal<br />

pointeres, at materialet ikke er beregnet til selvstudium, men som supplement til instruktørens<br />

gennemgang og til at genopfriske funktionerne efter endt kursus.<br />

Til hver lektion findes en huskeliste, der giver et hurtigt overblik over fremgangs-måden og de taster,<br />

der bruges til at udføre funktionen.<br />

Lektionens opgaver er baseret på de arbejdsrutiner, der normalt forestås i virksomheden.<br />

Opgaveløsning er en vigtig del af indlæringsprocessen og da nogle af opgaverne er en fortsættelse af<br />

opgaver fra tidligere lektioner, kan det anbefales at løse opgaverne successivt. Alle opgaver knytter sig<br />

til den datafil, der undervises i.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

12


Del I - XAL sproget<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

13


1. XAL editoren<br />

Formål<br />

Formålet med denne lektion er at give deltagerne viden om XAL editoren, og funktioner der benyttes i<br />

denne. Der undervises desuden i brugen af kommentarer i XAL kørsler.<br />

Efter lektionen skal kursisterne kunne:<br />

Navngive, åbne og lukke XAL kørsler<br />

Redigere i tekst ved at kopiere, flytte, indsætte og slette én linje ad gangen<br />

Markere et antal linjer og kopiere, flytte, indsætte og slette disse linjer<br />

Anvende og indsætte kommentarer.<br />

Generelt<br />

XAL editoren er en form for tekstbehandlingsprogram. Den har bare ikke helt samme funktionalitet. Til<br />

gengæld findes der mange andre faciliteter, der er specielt beregnet til programmering af XAL kørsler.<br />

Teksten, der indtastes i XAL editoren, består af kommandoer, der er samlet i et programmeringssprog<br />

med navnet XAL.<br />

<strong>Programmering</strong>ssproget kan blandes med almindelig tekst i form af kommentarer.<br />

Sproget XAL<br />

I XAL editoren anvendes programmeringssproget XAL, der betyder EXtended Application Language.<br />

Det er dette sprog, der anvendes og undervises i på dette og de følgende kurser.<br />

Sproget anvendes ikke alene i XAL editoren, men også i de mange andre editorbokse, der findes rundt<br />

omkring i C5, f.eks. i skærmbilleder og rapporter.<br />

Anvendelse af XAL editoren<br />

Et program bestående af XAL kommandoer, kaldes en XAL kørsel. Når der skal dannes en XAL kørsel,<br />

skal XAL editoren først navngives, hvorefter den åbnes.<br />

Når XAL editoren er åben, indtastes de XAL kommandoer og kommentarer kørslen består af. Efter<br />

indtastningen gemmes og go<strong>dk</strong>endes XAL kørslen.<br />

Når en XAL kørsel go<strong>dk</strong>endes, aktiveres der automatisk en kodekompiler, der oversætter de indtastede<br />

kommandoer til intern programkode. Det er denne, oversatte kode, der anvendes når XAL kørslen<br />

senere afvikles.<br />

Under oversættelsen foretages der en kontrol af syntaksen og det undersøges om de angivne<br />

kommandoer, kartoteker, felter, index osv. eksisterer og er stavet korrekt.<br />

Hvis der under oversættelsen findes fejl i de indtastede kommandoer, vises der en fejlmeddelelse på<br />

nederste linje på skærmen. Fejlen skal rettes inden XAL kørslen kan oversættes færdig og afvikles.<br />

Hvis der ikke findes nogen fejl, oversættes koden, hvorefter kørslen kan afvikles.<br />

Den kan enten afvikles fra udviklingsmenuen under XAL/Kør, eller den kan indsættes i et menupunkt,<br />

og afvikles derfra.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

14


Funktionstaster<br />

Når editorboksen er åben til indtastning af programkode, findes der en mængde funktioner, der kan<br />

aktiveres gennem tastetryk.<br />

Nogle funktioner anvendes til redigering af koden. Andre funktioner er en hjælp til hurtig fremfinding<br />

af navne på kartoteker, felter, indexer o.a.<br />

Samtlige funktioner kan ses i en oversigt ved at taste F1, ligesom de kan anvendes gennem<br />

funktionsmenuerne i XAL editoren med SHIFT+F10.<br />

Skema med vigtige funktionstaster i XAL editoren<br />

<strong>Programmering</strong> Redigering<br />

Zoom vindue<br />

ALT+Z ALT+D<br />

F2<br />

F6<br />

F7<br />

F8<br />

SH+F8<br />

Op eller ned<br />

Kommandoer<br />

Vælg fra liste<br />

Fasttekster<br />

Vælg fra liste<br />

Kartoteker<br />

Vælg fra liste<br />

Indexer<br />

Vælg kartotek så index<br />

Felter<br />

Vælg kartotek så felt<br />

Skriv afmærket<br />

område til disk<br />

SH+F5<br />

CTRL+F5<br />

ALT+I<br />

ALT+L<br />

DELETE<br />

ALT+S ALT+H<br />

Slet én linje<br />

Kopi én linje<br />

eller afmærkede linjer<br />

Flyt én linje<br />

eller afmærkede linjer<br />

Indsæt én linje<br />

eller afmærkede linjer<br />

Afmærk linjer<br />

Anvend piletaster<br />

Slet markerede<br />

linjer<br />

Hent fra disk<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

15


Kommentarer { }<br />

Der anvendes ofte kommentarer i XAL kørsler.<br />

Kommentarer er tekst, der ikke har nogen indflydelse på selve afviklingen af kørslen. Derimod kan den<br />

indeholde værdifuld information for de personer, der senere skal læse eller rette i den.<br />

Det er f.eks. en god idé at starte et program med at skrive navnet på forfatteren, datoen, version o.a.,<br />

som i nedenstående illustration:<br />

Eksempel på indledende kommentarer i XAL kørsel<br />

{Forfatter .....: Jens Olsen }<br />

{Dato ..........: 05.12.2011 }<br />

{C5 version ....: 2012 }<br />

{Funktion ......: Beregning af nye salgspriser ud fra }<br />

{ dækningsgrader. }<br />

Som det fremgår af illustrationen sættes kommentarer i { }. I materialet kaldes de to tuborg-paranteser<br />

fremover for ’kommentartegn’.<br />

I eksemplet startes og sluttes hver linje med kommentartegn. Dette er ikke absolut nødvendigt. I XAL<br />

editoren kan kommentarer godt strækkes over flere linjer, idet første linje startes med { og sidste linje<br />

sluttes med } som i næste eksempel.<br />

Kommentarer over flere linjer med ét starttegn og ét sluttegn<br />

{Forfatter .....: Jens Olsen<br />

Dato ..........: 05.12.2011<br />

C5 version ....: 2012<br />

Funktion ......: Beregning af nye salgspriser ud fra<br />

Dækningsgrader.}<br />

De to illustrationer er kun eksempler på anvendelsen af kommentartegnene.<br />

Kommentarer kan også anvendes til forklaring af enkelte programafsnit.<br />

Dele af selve programkoden kan desuden kommenteres ud, hvis kørslen f.eks. skal testes, uden at den<br />

u<strong>dk</strong>ommenterede del medtages i afviklingen. Når testningen er slut, kan kommentartegnene fjernes<br />

igen.<br />

Kommentartegnene behøver ikke nødvendigvis at stå i starten og slutningen af en linje, men kan også<br />

stå inde i en linje.<br />

Der skal altid være ét starttegn og ét sluttegn.<br />

Al tekst og kode, der findes mellem to kommentartegn, springes over under afviklingen af kørslen.<br />

Efterfølgende eksempel viser et stykke XAL kode med forskellig anvendelse af kommentarer.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

16


Eksempel på XAL kørsel med forskellige kommentarer<br />

{Forfatter .....: Jens Olsen }<br />

{Dato ..........: 05.12.2011 }<br />

{C5 version ....: 2012 }<br />

{Funktion ......: Erklæring, tildeling og udskrivning }<br />

{ af variabler i XAL sproget. }<br />

{ Erklæring af variabler }<br />

INT &Antal {Antal varer}<br />

REAL &Pris {Varens salgspris}<br />

STR 20 &Varenavn {Varens navn}<br />

DATE &Salgsdato {Den dag varen kan sælges til prisen}<br />

ENUM NejJa &Udsalgsvare {NEJ/JA om det er en udsalgsvare}<br />

{ Tildeling af værdier med SET }<br />

SET &Antal = 200<br />

SET &Pris = 150.75<br />

SET &Varenavn = ”Håndmixer”<br />

SET &Salgsdato = 01\05\1999<br />

SET &Udsalgsvare = 1 {0=Nej 1=Ja}<br />

{ Udskrivning af værdier med PRINT }<br />

PRINT &Antal<br />

PRINT &Pris<br />

PRINT &Varenavn<br />

PRINT &Salgsdato<br />

PRINT &Udsalgsvare<br />

PAUSE<br />

Skrivning af kommentarer på disk<br />

Da startkommentarerne ofte opstilles på samme måde i alle XAL kørsler, kan det være en fordel at<br />

gemme dem i en fil på disken, hvorfra de så kan hentes hver gang, der oprettes en ny XAL kørsel.<br />

De hentede startkommentarer kan herefter ændres, så de passer til den aktuelle kørsel mht. f.eks. dato<br />

og funktion.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

17


Eksempel på at gemme og hente på disk<br />

XAL kørsel<br />

{Forfatter .....: Jens Olsen }<br />

{Dato ..........: 25.08.99 }<br />

{C5 version. ...: 2.10 }<br />

{Funktion ......: }<br />

Ny XAL kørsel<br />

{Forfatter .....: Jens Olsen }<br />

{Dato ..........: 05.12.2011 }<br />

{C5 version ...: 2012 }<br />

{Funktion ......: Debitorliste}<br />

I eksemplet herover gemmes startkommentarerne i en fil med navnet ’Start’.<br />

Filen hentes ind i en ny XAL kørsel, og de forskellige værdier tilpasses den nye kørsel.<br />

Bemærk! Når det afmærkede område udlæses, skal der angives navn på den fil, der skal udlæses til. På<br />

samme måde skal filnavnet angives, når den skal hentes igen.<br />

Alt S<br />

Alt H<br />

Disk<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

18


Eksempel<br />

Opgaver: XAL editoren<br />

Opgave 1: Startkommentarer<br />

Formål med opgaven<br />

At anvende kommentartegnene til startkommentarer i XAL editoren<br />

Huskelister<br />

Kommentarer<br />

Beskrivelse<br />

Der skal oprettes startkommentarer som vist i eksemplet herunder. Kommentarerne skal gemmes på<br />

disken under navnet ’Start’, så de kan anvendes igen i andre XAL kørsler.<br />

{Forfatter .....: }<br />

{Dato ..........: }<br />

{C5 version ....: 2012 }<br />

{Funktion ......: }<br />

1 Opret en ny XAL kørsel<br />

2 Indsæt standard kommentarer som vist i eksemplet herover<br />

Forløb √<br />

Skriv alle ledeteksterne og indsæt dit eget navn, dags dato og C5 version.<br />

3 Markér linjerne og gem dem på disken under navnet ’Start’.<br />

4 Afslut og go<strong>dk</strong>end kørslen<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

19


2. Grundlæggende XAL kommandoer<br />

Formål<br />

Formålet med denne lektion er at give deltagerne forståelse for grundlæggende XAL kommandoer, der<br />

anvendes til skrivning på skærmen.<br />

Efter denne lektion skal kursisterne kunne:<br />

Anvende kommandoerne PRINT, PRINT AT og PAUSE til udskrivning på skærmen<br />

Anvende kommandoerne WINDOW og WINDOW AT til selv at bestemme vinduets størrelse og<br />

placering på skærmen<br />

Kunne udskrive et bestemt sted i et vindue åbnet med kommandoen WINDOW<br />

Kommandoer generelt<br />

Kommandoerne er specielle ord, der anvendes i XAL kørsler. De er specielle, idet de har særlig<br />

betydning i kørsler.<br />

Kommandoerne findes samlet i XAL sproget. Der findes kommandoer, der anvendes, når der udskrives<br />

tekst til skærmen, kommunikeres med brugere, udføres beregninger osv.<br />

Alle kommandoer kan skrives på tastaturet, som de staves, eller de kan hentes med en af<br />

funktionstasterne fra plukkelisten over kommandoer. Plukkelisten åbnes med F2.<br />

Det er lige meget om kommandoerne skrives med STORT eller småt, men som regel skrives de med<br />

STORT, så de er nemme at genkende, og det ser pænere ud.<br />

Når kommandoerne hentes fra plukkelisten, overføres de altid med STORE bogstaver.<br />

PRINT<br />

Kommandoen PRINT anvendes til udskrivning på skærmen. Der kan udskrives forskellige typer af<br />

information, f.eks. tal, tekst, feltindhold fra kartoteker, variabler og funktioner.<br />

Syntaksmæssigt angives PRINT som det første på en linje efterfulgt af de informationer, der skal<br />

udskrives.<br />

Syntaks for PRINT<br />

PRINT , , osv.<br />

Det er ikke helt ligegyldigt, hvordan informationerne angives. Tal kan blot skrives som de er, hvorimod<br />

tekster altid skal noteres i anførselstegn.<br />

Ved flere forskellige dele af information i en og samme PRINT sætning skal disse altid adskilles med<br />

kommaer.<br />

Blanke linjer i programkoden har ingen indvirkning på selve afviklingen. Skal der derimod udskrives en<br />

blank linje på skærmen, gøres dette ved at angive to anførselstegn lige efter hinanden som i<br />

nedenstående eksempel:<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

20


PRINT med forskellig information<br />

{Udskrivning af værdi}<br />

PRINT ”Værdien er ”<br />

PRINT 100<br />

PRINT ”kr”<br />

PRINT ”” {Giver blank linje på skærm}<br />

PRINT ”Værdien er ”,100,” kr”<br />

Det skal bemærkes, at XAL kørsler altid afvikles sekventielt fra toppen og ned.<br />

Hvis ovenstående XAL kørsel køres, resulterer det i følgende resultat, hvor den samme tekst udskrives<br />

på to forskellige måder adskilt med en blank linje:<br />

Resultat af ovenstående kørsel<br />

Værdien er<br />

100<br />

kr<br />

Værdien er 100 kr<br />

Kørselsafvikling<br />

Under afvikling af XAL kørsler læses programkoden altid sekventielt, dvs. linje for linje oppe fra og<br />

nedefter.<br />

Undervejs udføres de kommandoer, kørslen består af.<br />

PRINT sætninger udskrives altid i den nederste linje på skærmen, hvis der ikke angives andet. De<br />

ovenstående linjer rykkes automatisk én linje op.<br />

Kommentarene udskrives ikke, da de ikke har betydning for selve afviklingen.<br />

PRINT AT<br />

Programkoden<br />

læses sekventielt<br />

oppe fra og ned<br />

PRINT sætninger<br />

udskrives i bunden<br />

af skærmen, men<br />

først rykkes de<br />

forrige linjer én op.<br />

Selv om PRINT kommandoen altid skriver i den nederste linje på skærmen, kan der alligevel godt<br />

udskrives andre steder på skærmen.<br />

Dette foregår ved, som det sidste på PRINT linjen, at angive kommandoen AT efterfulgt af et kolonne-<br />

og linjenummer, som vist herunder.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

21


Syntaks for PRINT AT<br />

PRINT , , osv. AT ,<br />

Positionen, der angives med AT, er det sted på printlinjen, hvor informationen i printsætningen<br />

udskrives på skærmen.<br />

Eksempel på anvendelse af PRINT AT<br />

{Udskrivning af værdi et bestemt sted}<br />

PRINT ”Værdien er ”<br />

PRINT 100<br />

PRINT ”kr”<br />

PRINT ””<br />

PRINT ”Værdien er ”,100,” kr” AT 20,3<br />

Resultat af PRINT AT i ovenstående eksempel<br />

Værdien er<br />

100<br />

kr<br />

Værdien er 100 kr<br />

I eksemplet startes teksten ”Værdien er 100 kr” i kolonne 20 linje 3.<br />

Bemærk at de linjer der var udskrevet i forvejen inden sætningen med PRINT AT, bliver stående nederst<br />

på skærmen.<br />

PRINT AT påvirker således kun den ene linje, hvori AT kommandoen angives.<br />

Vigtigt ved anvendelse af PRINT AT<br />

Hvis der i programmet efter en linje med AT kommandoen forekommer flere PRINT linjer uden AT,<br />

udskrives disse linjer nederst i vinduet samtidig med, at alle andre linjer rykkes op, også de der tidligere<br />

blev udskrevet med AT kommandoen.<br />

PAUSE<br />

Ved anvendelse af PAUSE stoppes programafviklingen midlertidigt.<br />

Kommandoen kan indsættes hvor som helst i XAL kørslen, der er behov for det.<br />

PAUSE kan f.eks. anvendes i en XAL kørsel, hvori der udskrives til skærmen.<br />

Når kørslen er slut, lukkes vinduet automatisk, og det ikke er sikkert, at brugeren når at se, hvad der<br />

udskrives.<br />

Hvis kørslen derimod afsluttes med PAUSE kommandoen, stoppes afviklingen midlertidigt, og på<br />

nederste linje på skærmen vises teksten Tryk på RETUR for at fortsætte.<br />

Ved at trykke på RETUR sættes kørslen igang igen og der fortsættes med den næste kommando, hvis<br />

der er flere, ellers lukkes vinduet og kørslen afsluttes.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

22


Anvendelse af PAUSE midt i og som afslutning i XAL kørsel<br />

{Udskrivning af værdi}<br />

PRINT ”Værdien er ”<br />

PRINT 100<br />

PRINT ”kr”<br />

PAUSE<br />

PRINT ””<br />

PRINT ”Værdien er ”,100,” kr”<br />

PAUSE<br />

Resultat ved første PAUSE kommando<br />

Værdien er<br />

100<br />

kr<br />

Tryk på RETUR for at fortsætte<br />

Resultat efter anden PAUSE kommando<br />

Værdien er<br />

100<br />

kr<br />

Værdien er 100 kr<br />

Tryk på RETUR for at fortsætte<br />

WINDOW<br />

Når der udskrives til skærmen med PRINT, skrives der i virkeligheden i et vindue, der standard fylder<br />

hele skærmen.<br />

WINDOW kommandoen kan anvendes til at ændre størrelse og placering af dette vindue.<br />

Syntaks til WINDOW<br />

WINDOW ,<br />

Vinduets størrelse ændres ved at angive WINDOW kommandoen efterfulgt af bredden på vinduet i<br />

antal kolonner og højden i antal linjer som vist herunder.<br />

I næste eksempel vises kommandoen anvendt til at danne et vindue på 30 kolonner og 4 linjer.<br />

Eksempel på anvendelse af WINDOW<br />

WINDOW 30,4<br />

PRINT ”Microsoft Dynamics C5”<br />

PAUSE<br />

Resultat af ovenstående eksempel med WINDOW<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

23


Microsoft Dynamics C5<br />

Tryk på RETUR for at fortsætte<br />

WINDOW åbner, som vist, et tomt vindue, der placeres i øverste venstre hjørne af skærmen. Vinduet<br />

lukkes straks, når kørslen er slut. I eksemplet er PAUSE derfor indsat, for at holde vinduet åbent indtil<br />

der tastes RETUR (ENTER).<br />

WINDOW AT<br />

Med WINDOW AT kan det bestemmes hvor på skærmen, vinduet skal åbnes.<br />

Kommandoen AT anvendes på samme måde som i PRINT AT, idet der skal angives hvilken kolonne og<br />

linje vinduets øverste venstre hjørne skal placeres i.<br />

Syntaks for WINDOW AT<br />

WINDOW , AT ,<br />

I næste eksempel skal et vindue placeres i kolonne 10 linje 3 på skærmen.<br />

Eksempel på WINDOW AT<br />

WINDOW 30,4 AT 10,3<br />

PRINT ”Microsoft Dynamics C5”<br />

PAUSE<br />

Resultat af ovenstående eksempel med WINDOW AT<br />

Microsoft Dynamics C5<br />

Tryk på RETUR for at fortsætte<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

24


Bemærk at det er vinduets øverste venstre hjørne, der placeres i forhold til skærmen.<br />

WINDOW og PRINT AT<br />

Når PRINT AT anvendes i vinduer, der åbnes med WINDOW, udføres placeringen i forhold til selve<br />

vinduet og ikke i forhold til skærmen.<br />

I næste eksempel placeres ordet Microsoft i kolonne 5 linje 3, i et vindue der fylder 30 kolonner og er 4<br />

linjer højt.<br />

Eksempel med PRINT AT i et vinduet åbnet med WINDOW<br />

WINDOW 30,4 AT 10,3<br />

PRINT ”Microosft Dynamics C5” AT 5,3<br />

PAUSE<br />

Resultatet af ovenstående eksempel<br />

Microsoft Dynamics C5<br />

Tryk på RETUR for at fortsætte<br />

Opgaver: Grundlæggende XAL kommandoer<br />

Opgave 1: Udskrive i et vindue i en bestemt linje<br />

Formål med opgaven<br />

At anvende kommandoerne PRINT, PRINT AT og WINDOW til at udskrive linjer et bestemt sted i et<br />

vindue på skærmen.<br />

Huskelister<br />

<strong>Programmering</strong> - opret<br />

Kommentarer<br />

PRINT AT<br />

PAUSE<br />

WINDOW<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

25


XAL editoren - editeringsfunktioner<br />

Beskrivelse<br />

I opgaven skal en vits udskrives i et lille vindue på skærmen.<br />

1 Opret en ny XAL kørsel<br />

2 Indsæt og tilret startkommentarer<br />

3 Print teksten ”Hvad er forskellen på en and?”<br />

4 Print teksten ”Den er lige rund på midten.”<br />

5 Afprøv kørslen<br />

Forløb √<br />

6 Indsæt et vindue der er 40 kolonner bredt og 10 linjer højt. Vinduet skal placeres i<br />

kolonne 20 linje 5.<br />

7 Foretag nødvendige ændringer i opgaven så den angivne vits udskrives startende i<br />

kolonne nr. 10 linje nr. 8 i vinduet.<br />

8 Go<strong>dk</strong>end kørslen og afprøv den igen<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

26


3. Variabler i XAL sproget<br />

Formål<br />

Formålet med denne lektion er, at give deltagerne grundlæggende viden om hvad variabler er for<br />

noget. Der undervises i variabeltyperne INT, REAL, STR og DATE, og hvordan de kan anvendes i XAL<br />

sproget.<br />

Efter lektionen skal kursisterne kunne:<br />

Erklære variabler af typerne INT, REAL, STR og DATE.<br />

Indsætte værdier i de fire variabeltyper .<br />

Udskrive indholdet i de fire variabeltyper.<br />

Variabler generelt<br />

I XAL kørsler kan data gemmes på forskellig vis alt afhængigt af, hvad de skal anvendes til.<br />

Opbevaring af data<br />

Nogle data hentes fra kartoteker og behandles i kørsler, hvorefter de gemmes igen i de samme eller<br />

andre kartoteker. Andre data derimod benyttes og gemmes kun midlertidigt, mens kørsler er åbne og<br />

igang. Denne type data gemmes i variabler.<br />

Variabler<br />

Variabler er pladser i computerens hukommelse. De indeholder data, der kun eksisterer medens en XAL<br />

kørsel er igang. Så snart kørslen afsluttes, forsvinder variablernes data.<br />

Variabler kan f.eks. anvendes til sammentælling af værdier under gennemløbet af et kartotek, idet der<br />

ikke længere er brug for den sammentalte værdi, når gennemløbet er slut, og resultatet er skrevet ud.<br />

Selve variablen med dens indhold gemmes kun midlertidigt i hukommelsen på maskinen, og indholdet<br />

kan læses når som helst, der er behov for det.<br />

En variabel kan sammenlignes med et skab med skuffer i. Hver skuffe må dog kun indeholde én<br />

bestemt type værdi.<br />

Variabeltyper<br />

Der findes 5 forskellige typer variabler, der hver for sig kun kan indeholde én bestemt type data.<br />

De forskellige variabeltyper vises i skemaet herunder. Den sidste variabeltype med navnet ENUM,<br />

forklares ikke yderligere i denne lektion, men i en selvstændig lektion (ikke på kurset <strong>Programmering</strong><br />

begynder).<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

27


De fem variabeltyper<br />

Type Indhold Eksempel på indhold<br />

INT Heltal 350<br />

REAL Decimaltal 235.45<br />

STR Tekster ”Strygejern”<br />

DATE Datoer 01\05\1998<br />

ENUM Fasttekster 1<br />

Erklæring af variabler<br />

Inden variabler kan tages i anvendelse i en XAL kørsel, skal de først oprettes ved en erklæring. Dette<br />

skal altid ske som det første i en kørsel før alle andre programlinjer.<br />

Variabler erklæres ved at angive variablens type efterfulgt af et navn. For tekstvariabler skal der<br />

desuden angives hvor mange tegn, variablen skal kunne indeholde.<br />

Variabler i XAL sproget kendetegnes ved, at navnet foranstilles med et &-tegn. Selve navnet startes<br />

desuden altid med et bogstav og må ikke indeholde mellemrum.<br />

I nedenstående illustration ses eksempler på erklæringer af variabler. Det er frivilligt hvilke navne,<br />

variablerne skal have, men det er en god idé, at benytte navne der siger noget om deres indhold.<br />

Erklæring af variabler<br />

{ Erklæring af variabler }<br />

INT &Antal<br />

REAL &Pris<br />

STR 20 &Varenavn<br />

DATE &Salgsdato<br />

Bemærk at tekstvariablen &Varenavn erklæres til at kunne indeholde 20 tegn.<br />

Bag ved erklæringen af variablerne kan der f.eks. også skrives en lille kommentar om deres anvendelse,<br />

som i nedenstående eksempel.<br />

Erklæring af variabler med kommentarer<br />

{ Erklæring af variabler }<br />

INT &Antal { Antal stk af en vare }<br />

REAL &Pris { Salgspris i kroner og øre }<br />

STR 20 &Varenavn { Navn på varer (højst 20 tegn) }<br />

DATE &Salgsdato { Dato for varesalget }<br />

Der kan erklæres flere variabler af hver type, når der er behov for det, de skal blot have hver sit navn.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

28


Tildeling af værdier til variabler<br />

Oprettede variabler kan tildeles værdier på to forskellige måder:<br />

Ved erklæringen<br />

Med kommandoen SET<br />

Ved erklæringen<br />

Når variabler erklæres, initialiseres de altid automatisk med nulværdier. De kan dog også tildeles andre<br />

værdier, som i nedenstående eksempel.<br />

Erklæring af variabler med samtidig tildeling af værdier<br />

{ Erklæring af variabler med tildeling af værdier }<br />

INT &Antal = 350<br />

REAL &Pris = 235.45<br />

STR 20 &Varenavn = ”Strygejern”<br />

DATE &Salgsdato = 01\05\2011<br />

Tildelte værdier gemmes, indtil der gives en ny værdi med SET eller kørslen afsluttes.<br />

Med kommandoen SET<br />

Med kommandoen SET kan variablerne til hver en tid tildeles nye værdier, medens en kørsel er igang,<br />

og den samme variabel kan tildeles nye værdier flere gange.<br />

Tildelingen foregår med kommandoen SET som i følgende eksempel:<br />

Erklæring af variabler og tildeling med SET<br />

{ Erklæring af variabler }<br />

INT &Antal<br />

REAL &Pris<br />

STR 20 &Varenavn<br />

DATE &Salgsdato<br />

{ Tildeling af ny værdi til variabler med SET kommandoen }<br />

SET &Antal = 200<br />

SET &Pris = 150.75<br />

SET &Varenavn = ”Håndmixer”<br />

SET &Salgsdato = 01\05\2011<br />

Vigtigt ved tildeling af værdier<br />

Type Indhold Eksempel på værdi<br />

INT Heltal skrives som de er 350<br />

REAL Decimaltal skrives altid med punktum 235.45<br />

STR Tekster skrives i anførselstegn (enkelt eller dobbelt) ”Strygejern”<br />

DATE Datoer skrives altid med backslash (bagvendt skråstreg) 01\05\2011<br />

Tildeling af beregninger til variabler<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

29


{ Erklæring af variabler med tildeling af værdi}<br />

INT &Antal = 200<br />

REAL &Pris = 150.75<br />

STR 20 &Varenavn = ”Håndmixer”<br />

DATE &Salgsdato = 01\05\2011<br />

REAL &Sum<br />

{ Tildeling af ny værdi i form af beregning }<br />

SET &Sum = &Antal * &Pris<br />

I ovenstående eksempel multipliceres værdierne i variablerne &Antal og &Pris med hinanden.<br />

Resultatet tildeles variablen &Sum.<br />

Udskrivning af indhold fra variabler<br />

Variablers indhold kan til enhver tid hentes frem og udskrives.<br />

Udskrivning foregår med kommandoen PRINT.<br />

PRINT kan udskrive indholdet direkte ved angivelse af variablens navn.<br />

I nedenstående eksempel erklæres der en variabel af hver type, hvorefter de tildeles værdier og til sidst<br />

udskrives med PRINT kommandoen.<br />

Erklæring, tildeling og udskrivning af variabler<br />

{ Erklæring af variabler }<br />

INT &Antal<br />

REAL &Pris<br />

STR 20 &Varenavn<br />

DATE &Salgsdato<br />

{ Tildeling af værdier med SET }<br />

SET &Antal = 200<br />

SET &Pris = 150.75<br />

SET &Varenavn = ”Håndmixer”<br />

SET &Salgsdato = 01\05\2011<br />

{ Udskrivning af værdier med PRINT }<br />

PRINT &Antal<br />

PRINT &Pris<br />

PRINT &Varenavn<br />

PRINT &Salgsdato<br />

PAUSE<br />

Ovenstående eksempel medfører følgende udskrift på skærmen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

30


Resultat af ovenstående XAL kørsel<br />

200<br />

150,75<br />

Håndmixer<br />

01/05-09<br />

Variabler udskrives således med PRINT kommandoen blot ved at angive deres navn efter den.<br />

Da variabler således kan udskrives som enhver anden komponent efter PRINT kommandoen, kan de<br />

også udskrives sammen med andre komponenter f.eks. i forbindelse med ledetekster.<br />

I nedenstående eksempel udskrives de samme variabler igen med ledetekster:<br />

Udskrivning af variabler med ledetekster<br />

{ Udskrivning af værdier med PRINT }<br />

PRINT ”Antal .......: ”, &Antal<br />

PRINT ”Pris ........: ”, &Pris<br />

PRINT ”Varenavn ....: ”, &Varenavn<br />

PRINT ”Salgsdato ...: ”, &Salgsdato<br />

PAUSE<br />

Husk at de forskellige komponenter på printlinjerne adskilles af komma.<br />

Resultat af ovenstående XAL kørsel<br />

Antal .......: 200<br />

Pris ........: 150,75<br />

Varenavn ....: Håndmixer<br />

Salgsdato ...: 01/05-98<br />

Herunder vises et andet eksempel på en PRINT sætning med blandede komponenter.<br />

Blandede komponenter i én printsætning<br />

{ Udskrivning af værdier med PRINT }<br />

REAL &Pris<br />

STR 20 &Varenavn<br />

SET &Pris = 150.75<br />

SET &Varenavn = ”Håndmixer”<br />

PRINT 1, ” ”, &Varenavn, ” koster ”, &Pris, ”Kr.”<br />

PAUSE<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

31


Resultat af ovenstående XAL kørsel<br />

1 Håndmixer koster 150,75 Kr<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

32


Eksempel<br />

Opgaver: Variabler i XAL sproget<br />

Opgave 1: Anvendelse af variabler<br />

Formål med opgaven<br />

At opbygge en XAL kørsel med erklæring, tildeling og udskrivning af variabler.<br />

Huskelister<br />

<strong>Programmering</strong> - opret<br />

Kommentarer<br />

Variabler<br />

XAL editoren - editeringsfunktioner<br />

Beskrivelse<br />

Der skal opbygges en XAL kørsel der anvender variabler, som du tildeler dit navn og fødselsdato,<br />

hvorefter variablernes indhold udskrives på skærmen. Navn og fødselsdato skal foranstilles med<br />

ledetekster som vist herunder:<br />

Navn.........: Ole Olsen<br />

Fødselsdato..: 30/06-75<br />

1 Opret en ny XAL kørsel<br />

2 Indsæt og tilret startkommentarer<br />

3 Opret variabler<br />

(start med kommentarlinjen ”Erklæring af variabler”)<br />

4 Tildel navn og fødselsdato til variablerne<br />

(start med kommentarlinjen ”Tildeling af værdier”)<br />

Forløb √<br />

5 Udskriv oplysningerne på skærmen med ledetekster som i ovenstående eksempel<br />

(start med kommentarlinjen ”Udskrift”)<br />

6 Go<strong>dk</strong>end kørslen og afprøv den igen<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

33


4. PROMPT, grundlæggende brugerdialog<br />

Formål<br />

Formålet med denne lektion er at give deltagerne grundlæggende viden om brugerdialoger med<br />

kommandoen PROMPT.<br />

Efter lektionen skal kursisterne kunne:<br />

Anvende kommandoen PROMPT til at foretage en dialog med brugeren<br />

Opbygge promptbokse med flere linjer, med og uden indtastningsfelter.<br />

Brugerdialog generelt<br />

Brugerdialoger anvendes ofte til at spørge brugere om, hvilke værdier der skal indsættes i variabler.<br />

Grundlæggende kan variabler tildeles værdier i XAL kørsler direkte under erklæringen, eller med<br />

kommandoen SET som vist herunder.<br />

Tildeling af værdier til variabler<br />

Variabeltildeling med SET<br />

INT &Antal<br />

STR 20 &VareNavn<br />

SET &Antal = 5<br />

SET &VareNavn = ”Tulipaner”<br />

PRINT &Antal,” ”,&VareNavn<br />

Når variabler tildeles værdier, som vist her, kan brugerne ikke påvirke deres værdier. Det kan de<br />

derimod, når der anvendes brugerdialoger.<br />

Tildeling af værdier til variabler gennem brugerdialog<br />

En brugerdialog kan udføres vha. en dialogboks, der er et lille vindue på skærmen.<br />

I dette vindue vises nogle ledetekster, der udfærdiges af programmøren i forvejen. Ved siden af<br />

ledeteksterne er der plads til, at der kan indtastes svar i et eller flere indtastningsfelter som vist i<br />

eksemplet på næste side.<br />

Dialogboks med ledetekster og indtastningsfelter<br />

I ovenstående dialogboks kan der indtastes antal og varenavn, som så kan anvendes videre i den<br />

bagvedliggende XAL kørsel.<br />

Dialogboksens funktion<br />

Indtast vareinformationer<br />

Antal ..........:<br />

Varenavn .......:<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

34


Dialogbokse fungerer på samme måde som kommandoen PAUSE, idet PAUSE stopper XAL kørslen,<br />

indtil der tastes Enter eller Return.<br />

Med en dialogboks stoppes XAL kørslen også midlertidigt. Kørslen fortsættes først, når<br />

indtastningsfelterne udfyldes, og boksen afsluttes med Enter eller Return.<br />

Ovenstående type dialogboks kaldes også en promptboks, idet boksen inde i kørslen dannes med<br />

kommandoen PROMPT.<br />

PROMPT<br />

Kommandoen PROMPT anvendes til at danne en dialogboks med følgende grundlæggende indhold:<br />

Overskrift, ledetekster og felter til indtastning af værdier.<br />

PROMPT boks med overskrift, ledetekster og indtastningsfelter<br />

Ledetekster<br />

Overskrift og ledetekster er almindelig fritekst, hvorimod indtastningsfelterne fremkommer vha. en<br />

særlig kommando.<br />

<strong>Programmering</strong>smæssigt dannes promptboksen i eksemplet med følgende kommandoer:<br />

XAL kørsel til ovenstående promptboks<br />

INT &Antal<br />

STR 20 &VareNavn<br />

PROMPT ”Indtast vareinformationer”,,,<br />

”Antal ..........: ” GET (&Antal),<br />

”Varenavn .......: ” GET (&VareNavn)<br />

INPUT AT 15,4<br />

Bemærk at variabler, der anvendes i XAL kørsler, altid skal angives i toppen af kørslerne. I eksemplet<br />

erklæres der variabler til brug i promptboksen.<br />

I promptbokse er overskrifter og ledetekster almindelig tekst, der angives i anførselstegn. Tekst skal<br />

altid skrives i anførselstegn.<br />

Indtastningsfelter fremkommer ved indsættelse af kommandoen GET, der skal efterfølges af navnet på<br />

en variabel i en parantes. Variablen bliver tildelt den værdi, der indtastes i promptboksen af brugeren.<br />

På denne måde kan variabler tildeles værdier gennem promptbokse i stedet for ved anvendelse af SET<br />

kommandoen.<br />

Bemærk! Der skal altid være mindst én variabel i en promptbox, ellers meldes der syntaksfejl.<br />

Linjeskift i promptbokse<br />

Indtast vareinformationer<br />

Antal ..........:<br />

Varenavn .......:<br />

Overskrift<br />

Indtastningsfelter<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

35


I promptbokse anvendes kommaer, både som normale kommaer i tekster og til linjeskift.<br />

Kommaer i tekster<br />

Kommaer der indsættes i tekster i promptbokse, anvendes som normale pause-kommaer. Når disse<br />

kommaer indsættes i tekster, der står i anførselstegn, vises kommaerne blot som en del af teksten, når<br />

promptboksen ses på skærmen.<br />

Anvendelse af komma i tekst<br />

STR 15 &Varenr<br />

PROMPT ”Indtast vareinformationer”,,,<br />

”Varenummer .......: ” GET (&Varenr),,<br />

”Hvis det ønskes, må varenummeret”,<br />

”gerne være alfanumerisk.”<br />

INPUT AT 15,4<br />

I eksemplet anvendes der et almindeligt pausekomma i teksten Hvis det ønskes, må varenummeret<br />

gerne være alfanumerisk.<br />

Pause komma i tekst i promptboks<br />

Kommaer til linjeskift<br />

Promptbokse udføres ofte med flere linjer, ud over selve overskriften.<br />

Der kan være flere linjer med GET kommandoer, og der kan være flere tekstlinjer uden GET og<br />

variabler.<br />

Hver gang, der skal skiftes linje i en promptboks, udføres dette vha. et komma.<br />

Hvert komma, der indsættes i en promptboks uden for anførselstegnene, vil medføre, at der skiftes<br />

linje. Skal der f.eks. være en blank linje, skal der sættes et ekstra komma.<br />

Promptboks med flere tekstlinjer<br />

STR 15 &Varenr<br />

Indtast vareinformationer<br />

Varenummer .....:<br />

Hvis det ønskes, må varenummeret<br />

gerne være alfanumerisk.<br />

PROMPT ”Indtast vareinformationer”,,,<br />

”Varenummer .......: ” GET (&Varenr),,<br />

”Hvis det ønskes, må varenummeret”,<br />

”gerne være alfanumerisk.”<br />

INPUT AT 15,4<br />

I dette eksempel erklæres der kun én variabel til brug i promptboxen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

36


Det væsentlige i eksemplet er placeringen af kommaerne. Hvert komma, der ikke er en del af teksten i<br />

anførselstegnene, medfører ét linjeskift, når promptboxen vises på skærmen.<br />

Ovenstående kørsel resulterer i følgende promptboks på skærmen.<br />

Promptboks med linjeskift udført vha. kommaer<br />

Størrelse på promptboxen<br />

Der findes ikke nogen parametre til angivelse af boksens størrelse. Den eneste måde, hvorpå boksens<br />

størrelse kan påvirkes, er ved at indsætte flere kommaer, hvilket giver flere linjeskift og således påvirker<br />

højden på boksen. Bredden på boksen kan kun påvirkes ved at angive mere tekst i anførselstegn.<br />

INPUT AT<br />

Promptbokse kan opstilles med eller uden placering.<br />

Promptboks uden placering<br />

Når promptbokse vises på skærmen, vises de altid i øverste venstre hjørne, hvis der ikke angives nogen<br />

placering, som i nedenstående XAL kørsel, med efterfølgende eksempel.<br />

XAL kørsel med promptboks uden placering<br />

STR 15 &Varenr<br />

Indtast vareinformationer<br />

Varenummer .....:<br />

Hvis det ønskes, må varenummeret<br />

gerne være alfanumerisk.<br />

Indtast vareinformationer<br />

Varenummer .....:<br />

Hvis det ønskes, må varenummeret<br />

gerne være alfanumerisk.<br />

Teksternes længde og variablernes størrelse påvirker<br />

boksens bredde<br />

PROMPT ”Indtast vareinformationer”,,,<br />

”Varenummer .......: ” GET (&Varenr),,<br />

”Hvis det ønskes, må varenummeret”,<br />

”gerne være alfanumerisk.”<br />

INPUT<br />

Kommaer<br />

uden for<br />

teksten<br />

påvirker<br />

boksens<br />

højde<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

37


Promptboks placeret i øverste venstre hjørne af skærm<br />

Promptboks med placering<br />

Placering af promptbokse kan angives med kommandoen AT, der anvendes på samme måde som i<br />

WINDOW AT. Kommandoen benyttes til at angive en position med kolonne- og linjenummer.<br />

Positionen angiver boksens øverste venstre hjørne, på samme måde som i WINDOW.<br />

AT kommandoen indsættes efter INPUT som vist i efterfølgende eksempel.<br />

Promptboks med placering vha. AT<br />

STR 15 &Varenr<br />

PROMPT ”Indtast vareinformationer”,,,<br />

”Varenummer .......: ” GET (&Varenr),,<br />

”Hvis det ønskes, må varenummeret”,<br />

”gerne være alfanumerisk.”<br />

INPUT AT 15,4<br />

Ovenstående kommando medfører at promptboxen udskrives med sit øverste venstre hjørne i kolonne<br />

15 linje 4, som vist herunder.<br />

Promptboks med placering<br />

Indtast vareinformationer<br />

Varenummer .....:<br />

Hvis det ønskes, må varenummeret<br />

gerne være alfanumerisk.<br />

Andre muligheder med promptbokse<br />

Indtast vareinformationer<br />

Varenummer .....:<br />

Hvis det ønskes, må varenummeret<br />

gerne være alfanumerisk.<br />

Promptbokse har mange flere muligheder end de ovennævnte. Nogle af dem gennemgås på andre<br />

programmeringskurser.<br />

Desuden henvises til den interne hjælp (<strong>Programmering</strong>smanualen) under PROMPT, hvor der gives en<br />

uddybende forklaring på PROMPT kommandoen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

38


Opgaver: PROMPT, Grundlæggende brugerdialog<br />

Opgave 1: Brugerdialog for sommerhusudlejning<br />

Formål med opgave<br />

At anvende en PROMPT til at modtage værdier til variabler.<br />

Huskelister<br />

PROMPT<br />

Beskrivelse<br />

Der skal opbygges en mindre XAL kørsel til et bureau, der udlejer sommerhuse.<br />

Kørslen skal beregne udlejningsprisen på sommerhuse, idet den i en promptbox skal spørge brugeren<br />

om antal udlejningsdage, dagspris og beregningsmetode.<br />

Variabler<br />

Værdi Variabeltype Erklæring i XAL-kørsel<br />

Dage Heltal<br />

Dagspris Kommatal<br />

Metode Tekst<br />

Udlejningspris Kommatal<br />

I denne opgave oprettes udelukkende promptboksen som vist herunder. Beregningerne tilføres<br />

opgaven efter næste lektion.<br />

Promptboks<br />

Udskrift på skærm<br />

Beregning af udlejningsværdi<br />

Dage ....................:<br />

Dagspris ................:<br />

Metode ..................:<br />

(Weekend, Uge, Dobbeltuge)<br />

Beregning af udlejningsværdi for sommerhuse<br />

-------------------------------------------<br />

Dage ...........: 14<br />

DagsPris .......: 500,00<br />

Metode .........: DobbeltUge<br />

Forløb √<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

39


1 Opret en ny XAL kørsel<br />

2 Indsæt og tilret startkommentarer<br />

3 Opret variabler som vist i skemaet<br />

(start med kommentarlinjen ”Erklæring af variabler”)<br />

4 Opstil promptboksen som vist herover<br />

(start med kommentarlinjen ”Brugerdialog”)<br />

5 Indsæt print sætninger der kan udskrive de informationer, der indtastes i<br />

promptboksen. Se udskriften herover.<br />

(start med kommentarlinjen ”Udskrift”)<br />

6 Go<strong>dk</strong>end kørslen og afprøv den igen<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

40


5. Betingelsesstrukturer med IF<br />

Mål med lektionen<br />

Formålet med denne lektion er at give deltagerne forståelse for anvendelse af betingelsesstrukturer<br />

med kommandoen IF.<br />

Efter lektionen skal kursisterne kunne:<br />

Anvende kommandoen IF til styring af programforløb<br />

Styre et programforløb vha. betingelser, og oplysninger der indtastes i dialogbokse.<br />

Betingelsesstrukturer generelt<br />

Betingelsesstrukturer anvendes til at udføre én ud af to opstillede muligheder afhængig af<br />

sandhedsværdien i en opstillet betingelse.<br />

Betingelse anvendt i dagligdagen<br />

En grønthandler, der sælger æbler, har to forskellige priser på sine æbler. Henholdsvis 2,50 kr. og 3,00<br />

kr. stykket.<br />

Kunderne vil naturligvis gerne købe æblerne til 2,50 kr., men for at få lov til det, skal kunderne opfylde<br />

en bestemt betingelse.<br />

Betingelsen er, at der skal købes mere end 10 æbler. Hvis der købes 10 æbler eller mindre, koster de<br />

3,00 kr stykket.<br />

Hver gang grønthandleren sælger æbler, anvender han således en betingelsesstruktur, for at finde ud<br />

af hvilken pris æblerne skal sælges for.<br />

Gartnerens anvendelse af betingelsesstrukturen<br />

HVIS Antal > 10 SÅ<br />

SÆT pris i alt til Antal * 2.50<br />

ELLERS<br />

SÆT pris i alt til Antal * 3.00<br />

SLUT<br />

Det kan godt være at gartneren ikke tænker over det i dagligdagen, men hver gang der sælges æbler,<br />

er han nødt at udregne prisen som vist oven over.<br />

IF-THEN-ELSE-ENDIF<br />

I XAL kørsler opbygges betingelsesstrukturer med kommandoen IF, der kan opstilles efter følgende<br />

syntaks.<br />

Kommandoen består af ordene IF-THEN-ELSE-ENDIF<br />

Syntaks<br />

IF betingelse THEN<br />

Kommandolinjer at udføre<br />

ELSE<br />

Alternative kommandolinjer at udføre<br />

ENDIF<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

41


Bemærk at kommandoen ALTID skal afsluttes med ENDIF<br />

Kommandoen ELSE kan derimod udelades, hvis der er behov for det. I så fald udføres IF strukturen kun,<br />

hvis betingelsen er opfyldt. Hvis den ikke er opfyldt, overspringes IF strukturen helt, og XAL kørslen<br />

fortsætter, som om intet var hændt.<br />

Det er opfyldelsen af betingelsen, der afgør, om det er første hold kommandolinjer eller de alternative<br />

linjer, der skal udføres. Se afsnittet ’Betingelsens bestanddele’.<br />

Grønthandlerens eksempel kan opstilles i en XAL-kørsel med nedenstående kode.<br />

IF struktur ved salg af æbler<br />

INT &Antal { Antal solgt }<br />

REAL &PrisIalt { Pris pr. stk * Antal)<br />

PROMPT ”Beregning af pris”,,,<br />

”Indtast antal” GET (&Antal)<br />

INPUT<br />

IF &Antal > 10 THEN<br />

SET &PrisIalt = &Antal * 2.50<br />

ELSE<br />

SET &PrisIalt = &Antal * 3.00<br />

ENDIF<br />

PRINT ”Prisen ialt: ”, &PrisIalt<br />

PAUSE<br />

I eksemplet erklæres der to variabler til antal og pris i alt, og der er opstillet en promptboks til<br />

indtastning af antallet.<br />

Det indtastede antal undersøges i betingelsesstrukturen med IF og bestemmer således den endelige<br />

pris, der udregnes og tildeles variablen &PrisIalt. Til sidst udskrives prisen i alt på skærmen.<br />

Hvis betingelsen er opfyldt, antallet er større end 10, bliver den første sætning udført. Hvis betingelsen<br />

ikke er opfyldt, antallet er mindre end eller lig med 10, bliver den alternative sætning efter ELSE udført.<br />

Betingelsens bestanddele<br />

En betingelse består af to dataelementer og en mellemliggende relationel operator.<br />

Betingelse med to dataelementer og relationel operator<br />

&Antal > 10<br />

I eksemplet er dataelementet på venstre side af operatoren en variabel med navnet &Antal og<br />

dataelementet, på højre side af operatoren er tallet 10. Den relationelle operator er tegnet > (større<br />

end).<br />

Det er vigtigt at de to dataelementer, på hver side af den relationelle operator, er af samme type. Det<br />

nytter f.eks. ikke at sammenligne talværdier med tekster.<br />

De eneste dataelementer, der må være forskellige fra hinanden i betingelsesudtryk, er heltal og<br />

kommatal.<br />

I eksemplet er variablen af typen heltal (INT) og den kan derfor sammenlignes med et heltal (REAL).<br />

Relationelle operatorer i betingelser<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

42


Operator Betydning<br />

>= Større end eller lig med<br />

Større end<br />

== Lig med<br />

Forskellig fra<br />

Ovenstående relationelle operatorer kan anvendes i betingelser.<br />

I næste eksempel består betingelsen af direkte sammenligning med to dataelementer af typen tekst.<br />

Betingelse med sammenligning<br />

STR 10 &Måned { Månedens navn }<br />

PROMPT ”Indtast månedens navn” GET (&Måned)<br />

INPUT<br />

IF &Måned == ”April” THEN<br />

PRINT ”Du valgte April måned.”<br />

ELSE<br />

PRINT ”Du valgte noget andet.”<br />

ENDIF<br />

PAUSE<br />

Bemærk at operatoren består af to lighedstegn efter hinanden. I betingelser anvendes der altid to<br />

lighedstegn, når det skal undersøges om to værdier er ens.<br />

Bemærk ligeledes at teksten på højre side af operatoren er sat i citationstegn. Dette fordi variablen på<br />

venstre side er en tekstvariabel. På denne måde er de to dataelementer af samme type.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

43


Opgaver: Betingelsesstrukturer med IF<br />

Opgave 1: Beregning af lejeværdi for sommerhuse<br />

Formål med opgave<br />

At anvende IF-THEN-ELSE-ENDIF i forbindelse med erklærede variabler<br />

Huskelister<br />

PROMPT<br />

IF-THEN-ELSE<br />

Beskrivelse<br />

I lektionen ’PROMPT grundlæggende brugerdialog’ var der en opgave med en promptboks til<br />

indtastning af værdier i forbindelse med udlejning af sommerhuse.<br />

Der skal bygges videre på denne opgave.<br />

Efter indtastning af relevante data, skal kørslen,ved hjælp af betingelsesstrukturer, beregne<br />

udlejningsprisen afhængigt af beregningsmetoden. Hvorefter prisen udskrives på skærmen.<br />

Variabler (udført i forrige opgave)<br />

Værdi Variabeltype Erklæring i XAL-kørsel<br />

Dage Heltal<br />

DagsPris Kommatal<br />

Metode Tekst<br />

Udlejningspris Kommatal<br />

Brugerdialog (udført i forrige opgave)<br />

Beregningsmetoder<br />

Beregning af udlejningsværdi<br />

Dage ....................:<br />

Dagspris ................:<br />

Metode ..................:<br />

(Weekend, Uge, Dobbeltuge)<br />

Metode Beregning<br />

Weekend Dage * DagsPris + 10%<br />

Uge Dage * DagsPris<br />

DobbeltUge Dage * DagsPris – 30 %<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

44


Udskrift på skærm<br />

Beregning af udlejningsværdi for sommerhuse<br />

-------------------------------------------<br />

Dage ...........: 14<br />

DagsPris .......: 500,00<br />

Metode .........: DobbeltUge<br />

-------------------------------------------<br />

Udlejningspris .: 4.900,00<br />

===========================================<br />

1 Opret en ny XAL kørsel.<br />

Forløb √<br />

2 Kopier alle linjer fra opgaven i den forrige lektion ind i denne XAL kørsel.<br />

3 Foretag ændringer i startkommentarerne i teksten til ’Funktion’, så den svarer til<br />

denne opgave.<br />

4 Opret en ny variabel til den beregnede udlejningspris, hvis den ikke findes i<br />

forvejen.<br />

5 Indsæt betingelsesstrukturer med IF-THEN-ELSE for hver metode som vist i<br />

skemaet ’Beregningsmetoder’ herover.<br />

I hver struktur tildeles den beregnede værdi til variablen for udlejningsprisen.<br />

6 Indsæt en print sætning der kan udskrive den beregnede udlejningspris. Se<br />

udskriften herover.<br />

7 Afprøv kørslen og undersøg om beregningerne udføres korrekt ved anvendelse af<br />

de forskellige metoder.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

45


6. Fasttekster<br />

Mål med lektionen<br />

Formålet med denne lektion er at give deltagerne viden om emnet fasttekster.<br />

Efter lektionen skal kursisterne kunne:<br />

Oprette nye fasttekster<br />

Anvende fasttekster i forbindelse med variabler<br />

Anvende fasttekster i forbindelse med promptbokse<br />

Anvende fasttekster i forbindelse med betingelse i IF strukturer.<br />

Fasttekster generelt<br />

Datatyper<br />

Der findes i XAL-sproget fem datatyper.<br />

Fem datatyper i XAL-sproget<br />

Heltal<br />

Kommatal<br />

Tekst<br />

Dato<br />

Fasttekst<br />

De fire første er tidligere behandlet under lektionen om variabler. I denne lektion behandles den sidste<br />

datatype ’Fasttekst’.<br />

Datatypen Fasttekst<br />

Fastteksttyper er samlinger af faste tekster, der anvendes i XAL-sproget.<br />

Teksterne er faste, idet de så godt som aldrig ændres. De kan benyttes igen og igen i XAL-kørsler,<br />

skærmbilleder og udskrifter.<br />

En samling af tekster kaldes herefter en ’fasttekstype’. Hver fastteksttype har sit eget navn, der som<br />

regel siger noget om, hvilken type tekster den indeholder.<br />

I XAL-sproget kan der oprettes yderligere fastteksttyper, og der kan tilføjes flere tekster til de<br />

eksisterende fastteksttyper.<br />

C5 (vers. 4.1 ->)<br />

Et eksempel på en type, der anvendes mange forskellige steder, er fastteksttypen med navnet ’NoYes’.<br />

Denne type indeholder teksterne ’Nej’ og ’Ja’.<br />

C5 (vers. -> 4.0)<br />

Et eksempel på en type, der anvendes mange forskellige steder, er fastteksttypen med navnet ’NejJa’.<br />

Denne type indeholder teksterne ’Nej’ og ’Ja’.<br />

Fastteksttyper og tekster<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

46


Hver tekst i en fastteksttype har en fast position i en indbyrdes rækkefølge. En fastteksttype er således<br />

en kombination af tekster og deres positioner, som vist i eksemplerne herunder.<br />

Fastteksttypen NoYes<br />

Fastteksttypens navn Position Tekst<br />

NoYes 0 Nej<br />

1 Ja<br />

Den første position i en fastteksttype er altid position nul.<br />

Fastteksttypen ItemType<br />

Fastteksttypens navn Position Tekst<br />

ItemType 0 Vare<br />

1 Ydelse<br />

2 Stykliste<br />

3 SamleListe<br />

Begge fastteksttyper anvendes f.eks. i lagerskærmbilledet i C5 under Lager/Kartotek, hvor typen<br />

’NoYes’ f.eks. anvendes i felterne ”Spærret” (Blocked), ”Engangsvare” (OneTimeItem) og ”Negativ”<br />

(NegativeInventory), og hvor typen ’ItemType’ anvendes i feltet ”Varetype” (ItemType).<br />

Fastteksters anvendelse, i forbindelse med kartoteksfelter, behandles i lektionerne om skærmbilleder.<br />

Efterfølgende behandles fasttekster i forbindelse med variabler, promptbokse og IF strukturer.<br />

Fasttekster i variabler<br />

Erklæring af fasttekst variabler<br />

Variabel typer<br />

Type Indhold<br />

INT Heltal<br />

REAL Kommatal<br />

STR Tekst<br />

DATE Datoer<br />

ENUM Fasttekster<br />

Erklæring af variabler af typen fasttekst udføres ved at angive variablens type, den tilknyttede<br />

fastteksttype og variablens navn.<br />

Syntaks for erklæring af fasttekst variabel<br />

ENUM &<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

47


Under erklæringen angives der variabeltype dvs. ENUM, og variabelnavn foranstilles med &-tegnet.<br />

Desuden skal det angives, hvilken fastteksttype der skal tilknyttes variablen.<br />

Eksempel på erklæring af fasttekst variabel<br />

ENUM NoYes &NegativLagerbeholdning<br />

I eksemplet erklæres en variabel af typen ENUM dvs. fasttekst. Variablen knyttes til fastteksttypen<br />

’NoYes’, og navnet på variablen kaldes &NegativLagerBeholdning.<br />

Tildeling af værdier til fasttekstvariabler<br />

Når variabler af typen ENUM skal tildeles værdier, foregår det på en anden måde end ved andre<br />

variabler. Det er stadig SET kommandoen, der anvendes, men i stedet for at skrive selve teksten angives<br />

tekstens position i fastteksttypen.<br />

Tildeling af værdi til fasttekstvariabel<br />

ENUM NoYes &NegativLagerBeholdning<br />

SET &NegativLagerBeholdning = 1 {Ja}<br />

Variablen &NegativLagerBeholdning tildeles tallet 1, der tilsvarer værdien på position 1 i den<br />

tilhørende fastteksttype ’NoYes’.<br />

Tildelingen kunne også være sket under erklæringen, som i næste eksempel.<br />

Tildeling af værdi til fasttekstvariabel under erklæring<br />

ENUM NejJa &NegativLagerBeholdning = 1 {Ja}<br />

Variabler af typen fasttekst indeholder altså positionen på teksten og ikke selve teksten.<br />

Udskrivning af værdier fra fasttekstvariabler<br />

Når værdier fra fasttekstvariabler udskrives, hentes selve teksten automatisk fra den tilhørende<br />

fastteksttype vha. positionen, der er gemt i variablen.<br />

Det er således teksten fra fastteksttypen, der udskrives og ikke selve positionen.<br />

Udskrivning af værdi fra fasttekstvariabel<br />

ENUM NoYes &NegativLagerBeholdning<br />

SET &NegativLagerBeholdning = 1 {Ja}<br />

PRINT ”Negativt lager ...: ”, &NegativLagerBeholdning<br />

PAUSE<br />

Resultat<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

48


Afvikling<br />

Negativt lager ...: Ja<br />

I eksemplet indeholder variablen &NegativLagerBeholdning tallet 1. Det er dog ikke tallet, der<br />

udskrives, men teksten ’Ja’ der hentes automatisk i den tilhørende fastteksttype.<br />

Når fasttekstvariablers indhold præsenteres på skærmen, omformateres de således iflg. fastteksttypen.<br />

Det er f.eks. tilfældet i print sætninger, promptbokse og skærmbilleder.<br />

Fasttekster i promptboxe<br />

Ved at anvende fasttekstvariabler i promptbokse, opnås der to fordele under afviklingen:<br />

I indtastningsfeltet kan der kun indtastes værdier, der findes i forvejen i den tilhørende<br />

fastteksttype.<br />

Der kan tastes ALT+H og en oversigt over teksterne i den tilhørende fastteksttype vises. En af<br />

teksterne kan vælges og overføres til feltet.<br />

Opsætning af promptbokse med fasttekstvariabler er ikke anderledes end andre promptbokse.<br />

De to ovennævnte faciliteter stilles automatisk til rådighed af systemet, når variabler af typen fasttekst<br />

anvendes.<br />

Fasttekstvariabel i promptboks<br />

ENUM NoYes &NegativLager<br />

PROMPT ”Anvendelse af lager”,,,<br />

”Må lageret gå negativt: ” GET (&NegativLager),<br />

INPUT<br />

Må lageret gå negativt:<br />

Anvendelse af lager<br />

Alt H<br />

NejJa<br />

Nej<br />

Ja<br />

I eksemplet anvendes fastteksttypen ’NoYes’. Når promptboksen vises på skærmen, og der tastes<br />

ALT+H i feltet, kan der vælges mellem teksterne ’Nej’ og ’Ja’ i den tilknyttede fastteksttype. Der kan<br />

kun vælges mellem de tekster, der findes i fastteksttypen.<br />

Selv om der vælges en tekst fra listen, og teksten vises i indtastningsfeltet, vil den bagvedliggende<br />

variabel kun komme til at indeholde nummeret på tekstens placering i fastteksttypen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

49


Fasttekster i IF strukturer<br />

Da fasttekst variabler ikke indeholder selve teksten men positionen, betyder det, at der i betingelser i IF<br />

strukturer ikke kan sammenlignes med tekster men med positioner.<br />

Fasttekst i IF struktur<br />

ENUM NoYes &NegativLager<br />

PROMPT ”Anvendelse af lager”,,,<br />

”Må lageret gå negativt: ” GET (&NegativLager),<br />

INPUT<br />

IF &NegativLager == 1 THEN<br />

PRINT &NegativLager, ”, lageret må gå negativt”<br />

ELSE<br />

PRINT &NegativLager, ”, lageret må ikke gå negativt”<br />

ENDIF<br />

PAUSE<br />

I eksemplet er variablen &NegativLager en fasttekstvariabel af typen ENUM.<br />

Når kørslen udføres, vil variablen, efter indtastning i promptboksen, enten indeholde tallet 0 eller 1,<br />

afhængigt af hvad der skrives i indtastningsfeltet.<br />

I betingelsen i IF sætningen sammenlignes variablen med et heltal.<br />

I printsætningerne omformateres variablens indhold til teksten ’Ja’ eller ’Nej’.<br />

Vedligeholdelse af fasttekster<br />

Fasttekster kan til hver en tid oprettes, ændres og slettes.<br />

Nye tekster kan dog kun oprettes nederst i listen over tekster i fastteksttypen.<br />

Hvis de skal slettes, kan det kun ske ved at begynde med den sidst oprettede. Derimod kan selve<br />

teksternes ordlyd godt ændres.<br />

Vigtigt!<br />

Der skal udvises stor forsigtighed ved ændring eller sletning, da der nemt kan skabes<br />

uoverensstemmelse mellem de positioner, der gemmes i variabler og kartoteksfelter, og de tekster der<br />

findes i den tilhørende fastteksttype.<br />

Hvis der f.eks. ændres i en fastteksttype, påvirker dette IKKE de værdier, der står rundt omkring i felter<br />

og variabler. Der sker ikke nogen automatisk ændring af disse.<br />

Huskeliste<br />

Der henvises til huskelisterne om fasttekster, for at lære at oprette og vedligeholde disse.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

50


Opgaver: Fasttekster<br />

Opgave 1: Opret en fasttekst<br />

Formål med opgave<br />

At oprette en helt ny fastteksttype med tilhørende faste tekster.<br />

Huskelister<br />

ENUM<br />

Beskrivelse<br />

Opret en fastteksttype med flg. indhold:<br />

Fastteksttypens navn Position Tekst<br />

Beregningsmetode 0 Weekend<br />

1 Uge<br />

2 DobbeltUge<br />

Fastteksttypen skal anvendes til faste beregningsmetoder i kørslen til beregning af udlejningsværdi for<br />

sommerhuse.<br />

1 Opret fastteksttypen som vist i skemaet herover.<br />

Forløb √<br />

2 Indsæt de faste tekster fra skemaet i ovenstående rækkefølge.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

51


Opgave 2: Anvend fasttekst i XAL-kørsel<br />

Formål med opgave<br />

At erklære en variabel af typen ENUM (fasttekst), og at anvende denne i en promptboks og i en IF<br />

struktur.<br />

Huskelister<br />

PROMPT<br />

IF-THEN-ELSE-ENDIF<br />

Beskrivelse<br />

I forrige lektion blev der udarbejdet en XAL kørsel til beregning af udlejningsværdi for sommerhuse.<br />

I promptboksen skulle der indtastes teksten for den beregningsmetode, der skulle anvendes, men hvis<br />

der blev tastet forkert, gav det intet resultat.<br />

I denne opgave skal det ændres således, at der ikke skal tastes teksten på metoden, men være<br />

mulighed for at vælge metoden fra en fastteksttype med ALT+H.<br />

1 Opret en ny XAL kørsel.<br />

Forløb √<br />

2 Kopiér alle linjerne fra opgaven i forrige lektion ind i denne XAL kørsel.<br />

3 Foretag nødvendige ændringer i den nye kørsel, så variablen til metoder ændres<br />

fra at være en tekstvariabel til at være en fasttekst variabel (med fastteksten fra<br />

opgave 1).<br />

4 Foretag nødvendige ændringer i IF-THEN-ELSE sætningerne, så betingelserne i de<br />

forskellige sætninger kommer til at fungere korrekt mht. fasttekstvariablen.<br />

5 Afprøv kørslen med ALT+ H i promptboxen i indtastningsfeltet til metode<br />

variablen, og prøv i et andet forsøg at indtaste en værdi, der ikke findes i<br />

fastteksttypen til metode variablen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

52


7. Funktioner, grundlæggende<br />

Mål med lektionen<br />

Formålet med denne lektion er at give deltagerne en grundlæggende forståelse for anvendelsen af<br />

funktioner i XAL sproget.<br />

Efter lektionen skal kursisterne kunne<br />

Forstå den grundlæggende opbygning og syntaks til funktioner<br />

Udskrive værdier fra funktioner, tildele værdier fra funktioner til variabler og indbygge funktioner i<br />

hinanden<br />

Anvende funktionerne ToDay(), TimeNow(), Time2Str(), CurUserId() og UserId2Name().<br />

Funktioner generelt<br />

Funktioner er en form for kommandoer, der anvendes til udledning af værdier afhængigt af forskellige<br />

parametre. Der findes f.eks. en funktion, der kan udlede dags dato, og en funktion der kan udlede<br />

navnet på den bruger, der er logget ind i Microsoft Dynamics C5 her og nu.<br />

Typer af funktioner<br />

Der findes følgende grupper af funktioner:<br />

Funktioner til konvertering af datatyper<br />

Funktioner til finansielle beregninger<br />

Funktioner til behandling af kommatal<br />

Funktioner til tekstbehandling<br />

Datobehandlingsfunktioner<br />

Brugerrettigheds- og systemfunktioner<br />

SQL-funktioner<br />

Der henvises til den interne hjælp (<strong>Programmering</strong>smanualen) - Funktioner, for beskrivelse af de<br />

enkelte funktioner.<br />

Opbygning<br />

Virkemåde<br />

Funktioner er mindre programmer, der kaldes eller startes i XAL kørsler. Funktioner udleder værdier,<br />

der returneres til den XAL kørsel, hvorfra de blev kaldt .<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

53


Funktionskald i XAL kørsel<br />

Ved hjælp af overførte parametre kan det bestemmes, hvordan returværdien skal se ud.<br />

Hvor funktioner anvendes uden parametre, returneres der altid en forud bestemt værdi i et bestemt<br />

format eller udseende. Se funktionen Today().<br />

Hvor funktioner anvendes med parametre, anvendes den første parameter ofte til at angive en værdi<br />

f.eks. i form af navnet på en variabel. Med de efterfølgende parametre angives herefter, hvorledes den<br />

første parameter skal behandles inde i funktionen.<br />

På denne måde kan der f.eks. udføres en omformatering af værdien i den første parameter. Se<br />

funktionen Time2Str().<br />

Syntaks<br />

Alle funktioner har et navn, ligesom XAL kommandoer.<br />

I XAL sproget genkendes funktioner ved, at navnet efterfølges af et sæt almindelige parenteser med<br />

eller uden parametre.<br />

Syntaks til funktioner med parametre<br />

Funktionsnavn(parametre)<br />

Funktionsnavn erstattes af funktionens navn, og parametre erstattes af en eller flere parametre. De<br />

indsatte parametre overføres til funktionen, hvor de anvendes til udledningen eller beregningen af den<br />

nye værdi.<br />

Hvis der er flere parametre i parenteserne, skal disse adskilles med kommaer.<br />

Det er ikke alle funktioner, der skal udfyldes med et udtryk inde i parenteserne. I de tilfælde ser<br />

syntaksen sådan ud.<br />

Syntaks til funktioner uden parametre<br />

Funktionsnavn()<br />

XAL kørsel<br />

Funktion(Parametre)<br />

Udledt værdi<br />

Funktion<br />

Udledning eller<br />

beregning af værdier<br />

med de overførte<br />

parametre.<br />

Den udledte værdi<br />

leveres tilbage til XAL<br />

kørslen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

54


Datatyper i funktioner<br />

Datatyper<br />

I XAL sproget findes der følgende fem datatyper:<br />

Datatype Forklaring<br />

INT Heltal<br />

REAL Kommatal<br />

STR Tekst<br />

DATE Dato<br />

ENUM Fasttekst<br />

Det er vigtigt at forholde sig til hvilke datatyper, der anvendes i funktioner i parametre og returværdier.<br />

Ofte anvendes funktioner til omformatering af én datatype til en anden, som vist i figuren herunder.<br />

Omformatering fra heltal til tekst<br />

Heltal Funktion<br />

Tekst<br />

En sådan omformatering udføres, f.eks. i funktionen Time2Str der anvendes til at omformatere<br />

sekunder siden midnat til en tekst i form af timer, minutter og sekunder.<br />

Omformatering af sekunder til tekst med klokkeslet<br />

Funktionsparametre<br />

39510 Time2Str<br />

”10:58:30”<br />

Funktionsparametrene skal altid angives i den rigtige datatype, da funktionen ellers ikke kan fungere.<br />

Det nytter f.eks. ikke at indsætte en dato, hvis funktionen forventer et heltal.<br />

Det er også vigtigt at kende datatypen på den værdi der udledes. Hvis en udledt værdi f.eks. skal<br />

tildeles til en variabel, er det vigtigt at variablen er af samme værdi som funktionsværdien.<br />

Datatyper i funktionsparametre og udledte værdier angives ofte direkte i syntaksbeskrivelserne.<br />

Syntaks med angivelse af datatyper<br />

Funktionsnavn(parameter:DATATYPE):DATATYPE<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

55


I ovenstående eksempel, på syntaks med angivelse af datatyper, vises det hvordan parametrene<br />

angives i to dele i form af parameter og :DATATYPE.<br />

Det betyder ikke, at begge dele skal angives i funktionskaldet. Teksten :DATATYPE angives kun i<br />

syntaksbeskrivelsen, som forklaring til hvilken datatype parameteren skal være.<br />

Teksten :DATATYPE, efter paranteserne, angiver på samme måde hvilken datatype, returværdien er.<br />

Teksten :DATATYPE skal ikke angives under anvendelsen af funktionskaldet.<br />

Eksempel på syntaks med angivelse af datatyper<br />

Time2Str(t:INT, d1:INT, d2:INT):STR<br />

Eksemplet med funktionen Time2Str() er kun medtaget for, at vise hvorledes datatyper angives i<br />

syntaksbeskrivelser. Selve funktionen uddybes senere i sit eget afsnit.<br />

Alle beskrivelser af funktioner i denne lektion og fremover vil følge denne standard for beskrivelse af<br />

syntakser for funktioner. Samme beskrivelse anvendes desuden i den interne hjælp<br />

(<strong>Programmering</strong>smanualen) - Funktioner.<br />

Funktioner (ToDay(), TimeNow() m.fl.)<br />

ToDay()<br />

Beskrivelse<br />

Funktionen ToDay() returnerer dags dato, der hentes fra computerens ur.<br />

Syntaks<br />

Today():DATE<br />

Parametre<br />

Ingen<br />

Returværdi<br />

Dags Dato i form af datatypen DATE<br />

Eksempel 1: ToDay() i PRINT sætning<br />

PRINT ”Datoen i dag: ”, ToDay()<br />

PAUSE<br />

Resultat<br />

Datoen i dag: 08/06-08<br />

Her indgår funktionen ToDay() direkte i PRINT sætningen.<br />

Eksempel 2: ToDay() i variabler<br />

DATE &DD<br />

SET &DD = ToDay()<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

56


PRINT ”Datoen i dag: ”, &DD<br />

PAUSE<br />

Resultat<br />

Datoen i dag: 08/06-08<br />

Her får variablen &DD sin værdi fra funktionen ToDay().<br />

TimeNow()<br />

Beskrivelse<br />

Funktionen TimeNow() returnerer den aktuelle tid, der hentes fra computerens ur. Tiden returneres<br />

som et antal sekunder siden midnat.<br />

Syntaks<br />

TimeNow():INT<br />

Parametre<br />

Ingen<br />

Returværdi<br />

Antal sekunder siden midnat udtrykt som et heltal i form af datatypen INT<br />

Eksempel 1: TimeNow() i PRINT sætning<br />

PRINT ”Tiden i sekunder siden midnat: ”, TimeNow()<br />

PAUSE<br />

Resultat<br />

Tiden i sekunder siden midnat: 39510<br />

Her anvendes funktionen TimeNow() direkte i PRINT sætningen.<br />

Eksempel 2: TimeNow() i variabler<br />

INT &Sekunder<br />

SET &Sekunder = TimeNow()<br />

PRINT ”Tiden i sekunder siden midnat: ”, &Sekunder<br />

PAUSE<br />

Resultat<br />

Tiden i sekunder siden midnat: 39510<br />

Her får variablen &Sekunder sin værdi fra funktionen TimeNow().<br />

Se også Time2Str().<br />

Time2Str()<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

57


Beskrivelse<br />

Funktionen Time2Str() konverterer en tid til tekst.<br />

Tiden angives i sekunder og teksten der returneres, kan formateres til timer, minutter og sekunder ved<br />

angivelse af forskellige parametre.<br />

Syntaks<br />

Time2Str(t:INT, d1:INT, d2:INT):STR<br />

Parametre<br />

Parameteren t er den tid i sekunder, der skal konverteres til en tekst. Tiden kan f.eks. angives i form af<br />

et helt tal, en variabel eller funktionen TimeNow().<br />

Parameter d1 og d2 er formateringsparametre.<br />

Parameter d1 angiver typen af skilletegn mellem timer, minutter og sekunder.<br />

Parameter d2 angiver 24 timers eller 12 timers AM/PM ur.<br />

Parameterværdier for d1<br />

Værdi Skilletegn<br />

0 Intet skilletegn<br />

1 : (kolon)<br />

2 . (punktum)<br />

3 ’ ’ (space eller blankt tegn)<br />

4 , (komma)<br />

5 / (skråstreg)<br />

Parameterværdi for d2<br />

Værdi Skilletegn<br />

1 24 timers ur<br />

2 12 timers AM/PM ur<br />

Returværdi<br />

Timer, minutter og sekunder udtrykt i en tekststreng i form af datatypen STR. De tre værdier adskilles<br />

med skilletegn som angivet i parametrene.<br />

Eksempel 1: Time2Str() i PRINT sætning<br />

PRINT ”Sekunderne 39510 er klokken: ”, Time2Str(39510,1,1)<br />

PAUSE<br />

Resultat<br />

Sekunderne 39510 er klokken: 10:58:30<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

58


Her anvendes funktionen Time2Str() direkte i PRINT sætningen.<br />

Tallet 39510, er antal sekunder siden midnat og det omformateres ved hjælp af parameter 1 og 2.<br />

Parameteren d1 består af tallet 1, der resulterer i skilletegnet kolon. D2 er også 1, der giver 24 timers<br />

ur.<br />

Eksempel 2: Time2Str() i variabler<br />

STR 8 &Klokken<br />

SET &Klokken = Time2Str(39510,5,1)<br />

PRINT ”Sekunderne 39510 er klokken: ”, &klokken<br />

PAUSE<br />

Resultat<br />

Sekunderne 39510 er klokken: 10/58/30<br />

Her får tekstvariablen &Klokken den værdi, der udledes med funktionen Time2Str().<br />

Parameter d1 er sat til 5, der giver / i det returnerede klokkeslet.<br />

Eksempel 3: Time2Str() med TimeNow() indbygget<br />

PRINT ”Klokken er: ”, Time2Str(TimeNow(),3,1)<br />

PAUSE<br />

Resultat<br />

Klokken er: 10 58 30<br />

Her anvendes funktionen TimeNow() som første parameter i funktionen Time2Str(). Parameter d1 er sat<br />

til 3, hvilket medfører blanke tegn som skilletegn.<br />

Funktionen anvendes direkte i PRINT sætningen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

59


CurUserId()<br />

Beskrivelse<br />

Funktionen CurUserId() returnerer den aktuelle brugers user-Id. Dvs. det nummer brugeren automatisk<br />

får tildelt, når denne oprettes i C5.<br />

Syntaks<br />

CurUserId():INT<br />

Parametre<br />

Ingen<br />

Returværdi<br />

Den aktuelle brugers user-Id udtrykt i et heltal i form af datatypen INT.<br />

Eksempler<br />

Eksempel 1: CurUserId() i PRINT sætning<br />

PRINT ”Den aktuelle brugers nummer: ”, CurUserId()<br />

PAUSE<br />

Resultat<br />

Den aktuelle brugers nummer: 1<br />

Her anvendes funktionen CurUserId() direkte i PRINT sætningen. Funktionen returnerer brugerens<br />

nummer, der i eksemplet er 1.<br />

Eksempel 2: CurUserId() i variabler<br />

INT &BrugerNummer<br />

SET &BrugerNummer = CurUserId()<br />

PRINT ”Den aktuelle brugers nummer: ”, &BrugerNummer<br />

PAUSE<br />

Resultat<br />

Den aktuelle brugers nummer: 1<br />

Her får variablen &BrugerNummer sin værdi fra funktionen CurUserId().<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

60


UserId2Name()<br />

Beskrivelse<br />

Hver bruger i systemet er identificeret med en user-Id i form af et unikt nummer.<br />

Funktionen UserId2Name omdanner dette nummer til det tilhørende brugernavn<br />

Syntaks<br />

UserId2Name(i1:INT):STR<br />

Parametre<br />

Parameteren i1 skal være et heltal. Kan angives som et heltal, en variabel eller funktionen CurUserId()<br />

Returværdi<br />

Den udledte brugers navn udtrykt som en tekst i form af datatypen STR<br />

Eksempel 1: UserId2Name() i PRINT sætning<br />

PRINT ”Navn på bruger nummer 5: ”, UserId2Name(5)<br />

PAUSE<br />

Resultat<br />

Navn på bruger nummer 5: Anna<br />

Her anvendes funktionen UserId2Name() direkte i PRINT sætningen. Navnet på bruger nummer 5<br />

udledes og udskrives.<br />

Eksempel 2: UserId2Name() i variabler<br />

STR 15 &BrugerNavn<br />

SET &BrugerNavn = UserId2Name(5)<br />

PRINT ”Navn på bruger nummer 5: ”, &BrugerNavn<br />

PAUSE<br />

Resultat<br />

Navn på bruger nummer 5: Anna<br />

Her får variablen &BrugerNavn sin værdi fra funktionen UserId2Name(). Funktionen udleder navnet på<br />

bruger nummer 5. Variablens værdi udskrives herefter i PRINT sætningen.<br />

Eksempel 3: UserId2Name() med CurUserId() indbygget<br />

PRINT ”Navn på aktuel bruger: ”, UserId2Name(CurUserId())<br />

PAUSE<br />

Resultat<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

61


Navn på aktuel bruger: Anna<br />

Her anvendes funktionen UserId2Name() til omformatering af funktionen CurUserId(). Funktionerne<br />

anvendes direkte i PRINT sætningen, og udskriver således navnet på den aktuelle bruger i stedet for<br />

brugerens nummer.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

62


Eksempel<br />

Opgaver: Funktioner<br />

Opgave 1: Funktioner i print sætninger<br />

Formål med opgaven<br />

At opbygge en XAL kørsel der benytter funktionen CurUserId( ) i en PRINT sætning.<br />

Huskelister<br />

Funktion - CurUserId( )<br />

Beskrivelse<br />

Kørslen skal udskrive den nuværende brugers nummer eller ID på skærmen.<br />

1 Opret en ny XAL kørsel.<br />

Nuværende Bruger ID: 1<br />

2 Indsæt og tilret startkommentarer.<br />

Forløb √<br />

3 Lav en PRINT sætning der udskriver den nuværende brugers ID nummer på<br />

skærmen. Udskriftsområdet skal reduceres til at være 30 bred og 5 høj, samt<br />

positioneres på 10,4.<br />

4 Afprøv kørslen og foretag evt. ændringer.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

63


Eksempel<br />

Opgave 2: Funktioner i variabler<br />

Formål med opgaven<br />

At opbygge en kørsel der gemmer resultatet af funktionen Today( ) i én variabel og udskriver denne til<br />

skærmen.<br />

Huskelister<br />

Variabler<br />

Funktion - Today ( )<br />

Beskrivelse<br />

Kørslen skal udskrive dato i dag, dato i går og dato om en uge.<br />

Bemærk! Der skal kun erklæres én variabel.<br />

1 Opret en ny kørsel<br />

DATOER<br />

2 Indsæt og tilret startkommentarer<br />

I dag ...: 10/08-09<br />

I går ...: 09/08-09<br />

Om en uge: 17/08-09<br />

3 Opret en variabel der kan indeholde datoer<br />

4 Indsæt med TODAY() dags dato i variablen under erklæringen<br />

Forløb √<br />

5 Udskriv resultatet på skærmen som vist i eksemplet. Udskrifts området skal<br />

reduceres til at være 40 bred og 5 høj, samt positioneres på 10,5<br />

6 Med SET kommandoen tildeles funktionen TODAY()-1 til variablen og udskrives<br />

7 Med SET kommandoen tildeles funktionen TODAY()+7 til variablen og udskrives<br />

8 Afprøv kørslen og foretag evt. ændringer<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

64


Eksempel<br />

Opgave 3: Funktioner indbygget i hinanden<br />

Formål med opgaven<br />

At opbygge en kørsel der udskriver forskellige typer funktioner til skærmen (TimeNow( ), Time2Str( ),<br />

Today( ), CurUserID( ) og UserID2Name( )).<br />

Huskelister<br />

Funktion - TimeNow( )<br />

Funktion - Time2Str( )<br />

Funktion - Today( )<br />

Funktion - CurUserID( )<br />

Funktion - UserID2Name( )).<br />

Beskrivelse<br />

Kørslen skal udskrive den nuværende brugers ID og navn, samt dags dato og klokkeslæt.<br />

1 Opret en ny kørsel<br />

2 Indsæt og tilret startkommentarer<br />

Bruger ID: 1 Bruger navn: Supervisor<br />

Dato....: 10/08-99<br />

Klokken.: 11:25:45<br />

Forløb √<br />

3 Udskriv resultatet på skærmen som vist i eksemplet. Udskriftsområdet skal<br />

reduceres til at være 40 bred og 5 høj, samt positioneres på 10,5<br />

4 Bemærk, at udskriften skal indeholde en funktion inden i en funktion, f.eks. ved<br />

Brugers navn og Tid. Tiden skal desuden udformes med kolon som skilletegn<br />

mellem timer, minutter og sekunder)<br />

5 Afprøv kørslen og foretag evt. ændringer<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

65


Eksempel<br />

Opgave 4: Stopur<br />

Formål med opgaven<br />

At opbygge en kørsel der benytter funktionerne TimeNow() og Time2Str() til at danne et stopur.<br />

Huskelister<br />

Funktion - TimeNow()<br />

Funktion - Time2Str()<br />

Beskrivelse<br />

Der skal dannes en kørsel der viser tiden mellem to pauser, idet pauserne anvendes til start og stop af<br />

uret.<br />

Tast for at starte og stoppe uret!<br />

Tid: 00:01:35<br />

1 Opret en ny kørsel<br />

2 Indsæt og tilret startkommentarer<br />

3 Opret to heltalsvariabler &Start og &Stop<br />

Forløb √<br />

4 Opret en PRINT sætning med teksten ”Tast for at starte og stoppe uret!”<br />

5 Der skal anvendes PAUSE kommandoer i forbindelse med start og stop af uret<br />

6 Efter første PAUSE tildeles startvariablen tiden med TIMENOW() og efter næste<br />

PAUSE tildeles stopvariablen tiden med TIMENOW()<br />

7 I printsætningen med ordet ”Tid: ” trækkes de to variabler fra hinanden for, at vise<br />

hvor mange sekunder der gik. (Afprøv kørslen.)<br />

8 Anvend TIME2STR() for at vise tiden i timer, minutter og sekunder.<br />

Afprøv kørslen igen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

66


8. Brugerdialog med BOX, grundlæggende<br />

Formål<br />

Formålet med denne lektion er at give deltagerne grundlæggende viden om funktionen BOX(), der<br />

anvendes til brugerdialoger.<br />

Efter lektionen skal kursisterne kunne<br />

Anvende funktionen BOX() med type 1 og 2 til udskrivning af informationer og advarsler.<br />

Generelt<br />

I XAL kørsler er der ofte behov for at standse kørslen og give brugeren en besked i form af generel<br />

information eller en advarsel.<br />

Denne funktionalitet kan opnås ved anvendelse af funktionen BOX().<br />

Funktionen har forskellige anvendelsesmåder, og kan udføres i fire forskellige typer.<br />

I denne lektion gennemgås den grundlæggende anvendelse af type 1 og 2 i funktionen BOX().<br />

Bokstyper i denne lektion<br />

Type Funktion Farve<br />

1 Infoboks Grå<br />

2 Advarselsboks Rød<br />

Syntaks BOX()<br />

Box() er en funktion og skal behandles på samme måde som alle andre funktioner i XAL sproget.<br />

Syntaksen er derfor også den samme, idet funktionsnavnet skal efterfølges af to paranteser med<br />

parametre.<br />

Generel syntaks for funktioner med parametre<br />

Funktionsnavn(parametre)<br />

Se yderligere forklaring i lektionen ’Funktioner, grundlæggende’.<br />

De parametre, der indgår i funktioner, er forskellige for hver enkelt funktion, idet parametrene<br />

bestemmer hvad, der kommer ud af funktionen.<br />

Parametre og funktionen BOX() typerne 1 og 2<br />

BOX() indeholder altid tre parametre, som vist herunder.<br />

Syntaks for funktionen Box()<br />

Box(type:INT,tekst:STR,std:INT):INT<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

67


Når Box funktionen anvendes i XAL sproget, skal den aktiveres med kommandoen SET eller PRINT, som<br />

vist i næste afsnit.<br />

BOX() typerne 1 og 2<br />

Funktionen BOX() typerne 1 og 2 returnerer en grå informationsboks eller en rød advarselsboks.<br />

Boksen indeholder en tekst som brugeren, programmøren, bestemmer på forhånd ved opsætning af<br />

boksen.<br />

Selve boksen virker som en PAUSE, idet boksen vises på skærmen, indtil der tastes Enter eller Return.<br />

Syntaks<br />

Box(type:INT, tekst:STR, std:INT):INT<br />

Parametre<br />

Parameter nr Datatype Betydning<br />

1 INT 1 = Grå infoboks<br />

2 = Rød advarselsboks<br />

2 STR Tekst der skal stå i boksen. Skal altid stå i citationstegn.<br />

Linjeskift udføres med \n. Se eks.<br />

3 INT 1 = Nummer på knap i boks<br />

Returværdi<br />

(Der er kun én med teksten ’OK’)<br />

Den angivne returværdi er et heltal i form af datatypen INT. Returværdien har ingen praktisk betydning<br />

ved BOX() typerne 1 og 2.<br />

Se eksempler nedenfor.<br />

Eksempel på BOX(1) infoboks<br />

{Forfatter……………: Jens Olsen}<br />

{Dato…………………………: 05.12.2011}<br />

{C5 version ………: 2012}<br />

SET Box(1,”Kørslen startes ved at taste ”,1)<br />

Resultat<br />

Kørslen startes ved at taste <br />

OK<br />

I dette eksempel vises en infoboks. Det tænkes, at der er flere linjer efter SET kommandoen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

68


Eksempel på BOX(2) advarselsboks<br />

{Forfatter……………: Jens Olsen}<br />

{Dato…………………………: 05.12.2011}<br />

{C5 version ………: 2012}<br />

SET Box(1,”Kørslen stoppes nu!”,1)<br />

Resultat<br />

I dette eksempel udskrives der en advarselsboks. Eksemplet er her kun tænkt som en advarsel om, at<br />

kørslen ikke er længere.<br />

Eksempel på BOX(1) infoboks med tekst i flere linjer<br />

{Forfatter……………: Jens Olsen}<br />

{Dato…………………………: 05.12.2011}<br />

{C5 version ………: 2012}<br />

SET Box(1,”Beregning af kostpriser\nTast for<br />

start”,1)<br />

Resultat<br />

Kørslen stoppes nu!<br />

OK<br />

Beregning af kostpriser<br />

Tast for start<br />

OK<br />

I dette eksempel vises en infoboks med flere linjer. Linjeskift indsættes med tekstkommandoen ”\n”.<br />

Når XAL kørslen afvikles og teksten læses vil ”\n” medføre, at der skiftes linje. Linjeskift kan indsættes<br />

hvor som helst og flere gange i teksten, hvis der skal være flere linjer i boksen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

69


Opgaver: Brugerdialog med BOX, grundlæggende<br />

Opgave 1: Bokse anvendt i eksempel<br />

Formål med opgaven<br />

At anvende info- og advarselsbokse i en kørsel sammen med IF sætninger og variabler.<br />

Huskelister<br />

Box<br />

Beskrivelse<br />

Der skal oprettes en kørsel til beregning af salgspris i alt. Kørslen skal starte med en infoboks, med<br />

informationer om hvad kørslen udfører. Derefter vises en promptboks, hvor brugeren skal kunne<br />

indtaste varenavn, antal og pris pr. stk.<br />

Programmet udregner dernæst en total for pågældende køb.<br />

Hvis der tastes en kombination af antal og pris, der giver en total på nul eller mindre, skal der udskrives<br />

en advarsels boks, der orienterer brugeren om, at totalen ikke kan regnes ud, ellers skal totalen<br />

udskrives på skærmen.<br />

Infoboks med forklaring til kørsel<br />

Kørslen udregner samlet salgspris ved at<br />

multiplicere antal og pris.<br />

Promptboks<br />

Varenavn :<br />

Antal ...:<br />

Pris ....:<br />

Advarselsboks<br />

Totalen kan ikke udregnes!<br />

Antal eller pris er lig med eller mindre<br />

end nul.<br />

Udskrift<br />

Varenavn : Bananer<br />

Antal ...: 10<br />

Pris ....: 2.50<br />

Total ...: 25.00<br />

OK<br />

Prisberegning<br />

OK<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

70


1 Opret en ny kørsel. Indsæt og tilret startkommentarer<br />

2 Opret variabler til Varenavn, Antal, Pris og Total<br />

3 Indsæt en infoboks som vist herover<br />

Forløb √<br />

4 Opret en promptboks til indtastning af Varenavn, Antal og Pris som vist herover<br />

5 Tildel udregning af Antal * Pris til Total variablen<br />

6 Undersøg i en IF struktur om total blev nul eller mindre<br />

7 Hvis totalen er nul eller mindre, skal der udskrives en advarselsboks som vist<br />

herover<br />

8 Hvis totalen er større end nul, udskrives Varenavn, Antal, Pris og Total på skærmen,<br />

som vist i udskriften herover<br />

9 Go<strong>dk</strong>end og afprøv kørslen<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

71


9. Kartoteksgennemløb, grundlæggende<br />

Mål med lektionen<br />

Formålet med denne lektion er at give deltagerne grundlæggende viden om kartoteksgennemløb til<br />

fremfinding af poster i givne kartoteker.<br />

Efter lektionen skal kursisterne kunne:<br />

Udføre kartoteksgennemløb med SEARCH på ét kartotek ad gangen<br />

Udskrive oplysninger på skærmen fra det valgte kartotek<br />

Sortere kartoteksposter med USING og ORDER<br />

Afgrænse kartoteksposter med WHERE.<br />

Generelt om kartoteker<br />

Et kartotek er opbygget af en række poster, hvor hver post indeholder en række felter med<br />

informationer. Et lagerkartotek kan f.eks. indeholde felter som varenummer, varenavn, kostpris osv.<br />

Eksemplet herunder viser et antal tænkte poster i et lagerkartotek.<br />

Eksempel på et lagerkartotek<br />

Post nr. Varenummer Varenavn Kostpris Andre<br />

felter<br />

1 18000 Kabinet 1.250,20 -<br />

2 8000 Harddisk type 1 2.520,75 -<br />

3 16000 Ram 520,40 -<br />

4 12000 Harddisk type 2 1.230,75 -<br />

5 14000 CD romdrev 50,10 -<br />

6 20000 Skærm 1.000,10 -<br />

osv. osv. osv. osv. -<br />

Når der oprettes nye varer i lagerkartoteket, svarer det til at oprette nye poster.<br />

Posterne i kartoteket ligger som standard sorteret i den rækkefølge, hvori de indtastes.<br />

For at danne et udtræk af poster i et kartotek er det nødvendigt at udføre et kartoteksgennemløb.<br />

Under gennemløbet stilles hver enkelt post til rådighed for XAL kørslen, og det kan f.eks. vælges om<br />

posten skal springes over, eller om den skal medtages og udskrives.<br />

Kartoteksgennemløb udføres med kommandoen SEARCH.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

72


SEARCH<br />

Kommandoen SEARCH anvendes til gennemløb af poster i kartoteker efter følgende syntaks.<br />

Syntaks for SEARCH<br />

SEARCH <br />

<br />

END<br />

Kartoteksgennemløb startes altid med kommandoen SEARCH og sluttes altid med END.<br />

SEARCH efterfølges desuden af navnet på det kartotek, der skal gennemløbes.<br />

Når kommandoen bruges isoleret, løbes samtlige poster i kartoteket igennem, uden at der sker andet.<br />

Gennemløbet foregår i indtastningsrækkefølgen.<br />

C5 version 4.1 -> Eksempel på isoleret kartoteksgennemløb af lagerkartoteket<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 05.12.2011}<br />

{C5 Version......: 2012}<br />

SEARCH InvenTable<br />

END<br />

C5 version -> 4.1 Eksempel på isoleret kartoteksgennemløb af lagerkartoteket<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 25.08.2007}<br />

{C5 Version......: 4.00}<br />

SEARCH LagKart<br />

END<br />

Hver gang en post findes frem i kartoteksgennemløbet, stilles samtlige feltværdier i posten til rådighed<br />

for XAL kørslen. Disse værdier kan anvendes på forskellig vis, f.eks. kan de udskrives på skærmen med<br />

PRINT.<br />

Det er dog vigtigt, at PRINT kommandoen placeres det rigtige sted i forhold til SEARCH og END.<br />

I forbindelse med PRINT angives navnene på de kartoteksfelter, hvis indhold skal udskrives.<br />

I en søgeløkke er felterne tilgængelige, så længe kartoteket er aktivt, og det er det inde i søgeløkken<br />

mellem SEARCH og END.<br />

XAL:Søgeløkke med udskrivning af feltværdier<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 25.08.1999}<br />

{XAL Version.....: 3.50}<br />

SEARCH InvenTable<br />

PRINT ItemNumber,” ”,ItemName,” ”,CostPrice<br />

END<br />

PAUSE<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

73


Kartoteket, der gennemløbes i dette eksempel, er lagerkartoteket og felterne der udskrives, er<br />

ItemNumber, ItemName og CostPrice. Selve PRINT sætningen er sat op inde i SEARCH løkken.<br />

Ved en eksekvering af ovenstående vil skærmen f.eks. se ud som følger:<br />

C5: Søgeløkke med udskrivning af feltværdier<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 25.08.1999}<br />

{C5 Version......: 4.00}<br />

SEARCH LagKart<br />

PRINT VareNummer,” ”,VareNavn1,” ”,KostPris<br />

END<br />

PAUSE<br />

Kartoteket, der gennemløbes i dette eksempel, er lagerkartoteket og felterne der udskrives, er<br />

VareNummer, VareNavn1 og KostPris. Selve PRINT sætningen er sat op inde i SEARCH løkken.<br />

Ved en eksekvering af ovenstående vil skærmen f.eks. se ud som følger:<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

74


Resultat<br />

18000 Kabinet 1.250,20<br />

8000 Harddisk type 1 2.520,75<br />

16000 Ram 520,40<br />

12000 Harddisk type 2 1.230,75<br />

14000 CD romdrev 50,10<br />

20000 Skærm 1.000,10<br />

Bemærk at kartoteksposterne, her i form af varer, ikke ser ud til at være udskrevet i en bestemt<br />

rækkefølge. Hvis der ikke angives andet, udskrives posterne i den rækkefølge, som de er indtastet i.<br />

Kommandoen PRINT AT kan evt. anvendes til udskrivning af felterne i kolonner.<br />

Sortering af poster i kartoteksgennemløb udføres med kommandoerne USING og ORDER, der<br />

behandles efterfølgende.<br />

Sortering med USING<br />

Alle kartoteker kan indeholde ét eller flere indexer, der anvendes til sortering af kartotekernes indhold<br />

af poster.<br />

Findes der ikke nogen indexer på et kartotek, kan dets poster kun gennemløbes og vises i den<br />

rækkefølge de er indtastet i.<br />

Hvert indeks repræsenterer en sorteringsrækkefølge for det pågældende kartotek. Lagerkartoteket kan<br />

f.eks. indeholde indekserne, som vist herunder.<br />

Index på InvenTable (Lagerkartotek) i C5 vers. 2012 -><br />

Navn på index Sorteringsnøgler i for af felter<br />

ItemIdx ItemNumber<br />

GroupIdx Group, ItemNumber<br />

NameIdx ItemName1<br />

ItemTypeIdx ItemType<br />

TariffIdx TariffNumber<br />

AltItemIdx AltItemIdx<br />

PayCTypeItemIdx PayCType, CostType, ItemNumber<br />

CTypePayItemIdx CostType, PayCType, ItemNumber<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

75


Index på LagKart (Lagerkartotek) i C5 vers. -> 4.1<br />

Navn på index Sorteringsnøgler i for af felter<br />

VareIdx VareNummer<br />

GrpVarIdx Gruppe, VareNummer<br />

NavnIdx VareNavn1<br />

VareTypeIdx VareType<br />

ToldIdx ToldPosition<br />

AltVareIdx AltVare<br />

Indexer anvendes således til at skabe hurtige gennemløb af kartoteker, og til at vise kartoteksposter i<br />

forskellige rækkefølger på skærmen.<br />

Indekser i søgeløkker<br />

I søgeløkker anvendes kommandoen USING til at angive, hvilket af disse faste indekser der skal sorteres<br />

efter, som vist i nedenstående eksempel på syntaks.<br />

Syntaks for SEARCH med USING<br />

SEARCH USING <br />

<br />

END<br />

Bemærk at kommandoen USING og indexnavn angives lige efter kartoteksnavnet.<br />

Et gennemløb af lagerkartoteket kan f.eks. udføres efter et af de indekser, der er oprettet og beskrevet<br />

i ovenstående skema.<br />

C5 vers. 2012 -> Eksempel på kartoteksgennemløb med sortering efter fast index<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 05.12.2011}<br />

{C5 Version......: 2012}<br />

SEARCH InvenTable USING ItemIdx<br />

PRINT ItemNumber, ” ”, ItemName1, ” ”, CostPrice<br />

END<br />

PAUSE<br />

I ovenstående eksempel anvendes indexet ItemIdx på kartoteket ItemTable til sortering af posterne i<br />

varenummerorden.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

76


C5 vers. -> 4.1 Eksempel på kartoteksgennemløb med sortering efter fast index<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 25.08.2007}<br />

{C5 Version......: 4.00}<br />

SEARCH LagKart USING VareIdx<br />

PRINT VareNummer, ” ”, VareNavn1, ” ”, KostPris<br />

END<br />

PAUSE<br />

I ovenstående eksempel anvendes indexet VareIdx på kartoteket LagKart til sortering af posterne i<br />

varenummerorden.<br />

Resultatet af begge eksempler vises herunder.<br />

Resultat af sortering af varer i nummerorden efter indexene ItemIdx / VareIdx.<br />

8000 Harddisk type 1 2.520,75<br />

12000 Harddisk type 2 1.230,75<br />

14000 CD romdrev 50,10<br />

16000 Ram 520,40<br />

18000 Kabinet 1.250,20<br />

20000 Skærm 1.000,10<br />

Gennemløb af kartoteker kan ikke alene udføres vha. af de faste indekser, men også direkte på<br />

kartoteksfelter med kommandoen ORDER, der behandles efterfølgende.<br />

Sortering med ORDER<br />

ORDER anvendes ligesom USING også til sortering af poster i kartoteksgennemløb.<br />

Hvor USING anvendes til faste indekser, anvendes ORDER, når der skal sorteres direkte efter enkelte<br />

kartoteksfelter.<br />

Ved anvendelse af ORDER dannes der først et midlertidigt index, inden gennemløbet startes. ORDER<br />

kan anvende et hvilket som helst felt i kartoteket.<br />

ORDER anvendes således, hvor der ikke findes et fast index. I nedenstående eksempel, skal posterne<br />

f.eks. sorteres i beløbsorden efter feltet KostPris, som der ikke findes et fast index på:<br />

C5 vers. 2012-> Eksempel på kartoteksgennemløb med sortering efter kartoteksfelt<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 05.12.2011}<br />

{C5 Version......: 2012}<br />

SEARCH InvenTable<br />

ORDER BY CostPrice<br />

PRINT ItemNumber, ” ”, ItemName1, ” ”, CostPrice<br />

END<br />

PAUSE<br />

C5 vers. -> 4.1 Eksempel på kartoteksgennemløb med sortering efter kartoteksfelt<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

77


{Forfatter.......: Jens Olsen}<br />

{Dato............: 25.08.2007}<br />

{C5 Version......: 4.00}<br />

SEARCH LagKart<br />

ORDER BY KostPris<br />

PRINT VareNummer, ” ”, VareNavn1, ” ”, KostPris<br />

END<br />

PAUSE<br />

Resultat af kartoteksgennemløb med sortering efter kartoteksfelt<br />

14000 CD romdrev 50,10<br />

16000 Ram 520,40<br />

20000 Skærm 1.000,10<br />

12000 Harddisk type 2 1.230,75<br />

18000 Kabinet 1.250,20<br />

8000 Harddisk type 1 2.520,75<br />

Kommandoerne USING og ORDER anvendes således til sortering af poster i kartoteksgennemløb. Skal<br />

der derimod afgrænses i posterne, udføres dette med kommandoen WHERE, der behandles<br />

efterfølgende.<br />

Afgrænsning med WHERE<br />

Med kommandoen WHERE kan der afgrænses på de poster, der skal udsøges i en søgeløkke. Der kan<br />

således udvælges et antal poster til behandling i gennemløbet. Syntaksen for anvendelse af WHERE er<br />

som følger:<br />

Syntaks for SEARCH med WHERE<br />

SEARCH <br />

WHERE <br />

<br />

END<br />

Kommandoen WHERE efterfølges af en betingelse, der skal opfyldes for, at de enkelte poster skal<br />

medtages i gennemløbet eller ej.<br />

Betingelsen kan f.eks. bestå af navnet på et kartoteksfelt og en værdi, der kan sammenlignes med<br />

indholdet i det angivne felt. De to værdier kan sammenlignes med hinanden med tegnene i<br />

nedenstående skema.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

78


Relationelle operatorer i betingelser<br />

Operator Betydning<br />

>= Større end eller lig med<br />

Større end<br />

== Lig med<br />

Forskellig fra<br />

I nedenstående eksempel anvendes den relationelle operator >=.<br />

I eksemplet udvælges således kun poster, der er større end eller lig med ”10000”.<br />

C5 vers. 2012 -> Eksempel på afgrænsning af poster >= ”10000”<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 05.12.2011}<br />

{C5 Version......: 2012}<br />

SEARCH InvenTable<br />

WHERE ItemNumber >= ”10000”<br />

PRINT ItemNumber, ” ”, ItemName1, ” ”, CostPrice<br />

END<br />

C5 vers. -> 4.1: Eksempel på afgrænsning af poster >= ”10000”<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 25.08.2007}<br />

{C5 Version......: 4.00}<br />

SEARCH LagKart<br />

WHERE VareNummer >= ”10000”<br />

PRINT VareNummer, ” ”, VareNavn1, ” ”, KostPris<br />

END<br />

I dette eksempel gennemløbes lagerkartoteket med SEARCH, og WHERE anvendes til at udvælge de<br />

poster ud, hvis varenummer er større end eller lig med 10000.<br />

Varenummeret står i citationstegn fordi varenumre i C5 er alfanumeriske, hvilket betyder, at de er<br />

tekster.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

79


C5 vers. 2012 -> Eksempel på afgrænsning af poster >= ”10000” og sortering med USING<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 05.12.2011}<br />

{C5 Version......: 2012}<br />

SEARCH InvenTable USING ItemIdx<br />

WHERE ItemNumber >= ”10000”<br />

PRINT ItemNumber, ” ”, ItemName1, ” ”, CostPrice<br />

END<br />

C5 vers. -> 4.1 Eksempel på afgrænsning af poster >= ”10000” og sortering med USING<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 25.08.2007}<br />

{C5 Version......: 4.00}<br />

SEARCH LagKart USING VareIdx<br />

WHERE VareNummer >= ”10000”<br />

PRINT VareNummer, ” ”, VareNavn1, ” ”, KostPris<br />

END<br />

Når der afgrænses med WHERE, og der samtidig sorteres med USING eller ORDER, er det vigtigt at<br />

disse kommandoer placeres rigtigt i forhold til hinanden.<br />

Som det fremgår af ovenstående eksempel, skal sorteringskommandoerne således altid stå efter<br />

kartoteksnavnet, men før WHERE kommandoen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

80


Opgaver: Kartoteksgennemløb, grundlæggende<br />

Opgave 1: Søgeløkke med sortering / afgrænsning<br />

Formål med opgaven<br />

Der skal udarbejdes et kartoteksgennemløb, der afprøves med sortering på både index og felt.<br />

Huskelister<br />

SEARCH-END<br />

SEARCH-END med USING INDEX<br />

SEARCH-END med ORDRE<br />

Beskrivelse<br />

Der skal opbygges en kørsel, der gennemløber kartoteket CustTable og på skærmen udskriver værdier<br />

fra felterne Account, Name og BalanceMST.<br />

Gennemløbet skal sorteres ud fra et index og derefter ud fra et felt. Desuden skal der indsættes en<br />

afgrænsning, så der kun medtages poster fra og med et bestemt kontonummer.<br />

Eksempel på udskrift<br />

10 Dan Rasmussen 38.855,00<br />

20000 Central Kopiering 142.412,50<br />

33344 Computer Hjemme Service A/S 5.311.501,50<br />

100000 Autotester A/S 6.229,00<br />

230896 DebTest Gruppen 38.346,00<br />

42983214 Superfos Korn A/S 1.984.821,20<br />

45934545 IBM Danmark A/S 734.640,00<br />

45999300 Microsoft Data A/S 7.000,00<br />

228729910 Foto og Computer A/S 0,00<br />

1 Opret en ny kørsel. Indsæt og tilret startkommentarer<br />

Forløb I C5 √<br />

2 Opret med SEARCH en søgeløkke, der kan gennemløbe kartoteket CustTable<br />

(debitor) og udskriv felterne Account, Name og BalanceMST. Afprøv XAL kørslen<br />

3 Anvend USING til at sortere efter indexet AccountIdx, der sorterer i<br />

kontonummerorden.<br />

NB: Prøv F8 tasten for at hente et fast index fra kartoteket<br />

Afprøv XAL kørslen<br />

4 Fjern USING og anvend ORDER til at sortere efter feltet BalanceMST, så debitorerne<br />

vises i beløbsorden. Afprøv kørslen<br />

5 Tilføj en afgrænsning ved hjælp af WHERE, så der kun medtages poster med Konto<br />

større end eller lig med 36-12, og sortér efter indexet AccountIdx<br />

Afprøv kørslen<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

81


10. Brugerdialog med kartoteksopslag<br />

Mål med lektionen<br />

Formålet med denne lektion er at give deltagerne en yderligere forståelse for anvendelsen af<br />

brugerdialoger med PROMPT, idet deltagerne lærer at foretage hjælpeopslag i indtastningsfelter.<br />

Efter lektionen skal kursisterne kunne:<br />

Opbygge promptbokse med hjælpeopslag således, at der i indtastningsfelter ved hjælp af ALT+H,<br />

kan overføres værdier fra felter i kartoteker til variabler i promptbokse<br />

Opbygge promptbokse med hjælpeopslag og anvende de overførte feltværdier til afgrænsning af<br />

poster i søgeløkker.<br />

PROMPT grundlæggende repetition<br />

I den grundlæggende anvendelse af PROMPT kommandoen, opbygges der en dialogboks, dvs. en<br />

promptboks med overskrift, ledetekster og et eller flere indtastningsfelter.<br />

Promptboks med ét indtastningsfelt<br />

En promptboks skal altid bestå af mindst ét indtastningsfelt. For hvert indtastningsfelt skal der desuden<br />

altid erklæres en variabel.<br />

Når der indsættes værdier i indtastningsfelterne, opfanges disse værdier i de bagvedliggende variabler<br />

med GET kommandoen, som vist i eksemplet nedenfor.<br />

C5 vers. 2012 -> Eksempel på XAL kørsel med promptboks<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 05.12.2011}<br />

{C5 Version......: 2012}<br />

{Erklæring af variabel}<br />

Str 10 &VareNr<br />

Udsøgning af lagervarer<br />

Varenummer.....:<br />

{Brugerdialog}<br />

PROMPT ”Udsøgning af lagervarer”,,,<br />

”Fra varenummer: ”GET(&VareNr)<br />

INPUT AT 15,5<br />

PRINT ”Varenummer: ”, &VareNr<br />

PAUSE<br />

I ovenstående eksempel er det tekstvariablen &VareNr, der med GET modtager input fra<br />

indtastningsfeltet i promptboksen og den indtastede værdi udskrives på skærmen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

82


Resultat af indtastning i promptboks.<br />

Varenummer: 10000<br />

I dette eksempel forudsættes det, at der indtastes værdien 10000 i indtastningsfeltet i promptboksen,<br />

hvorefter værdien udskrives på skærmen.<br />

Som vist i ovenstående eksempel kan de værdier, der indtastes i promptbokse udskrives på skærmen<br />

med PRINT kommandoen.<br />

Promptboksen kan imidlertid også anvendes i forbindelse med afgrænsning af poster i søgeløkker.<br />

PROMPT til afgrænsning i SEARCH<br />

Kartoteksgennemløb med fast afgrænsning<br />

I kartoteksgennemløb er det ofte kun udvalgte poster, der skal behandles. Ved et gennemløb af<br />

lagerkartoteket skal der f.eks., kun behandles poster med varenummer større end ”10000”.<br />

I XAL kørsler udføres gennemløbet med kommandoen SEARCH, og der kan udføres faste<br />

afgrænsninger med WHERE.<br />

C5 vers. 2012 -> Eksempel på kartoteksgennemløb med fast afgrænsning<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 05.12.2011}<br />

{C5 Version......: 2012}<br />

SEARCH InvenTable<br />

WHERE ItemNumber > ”10000”<br />

PRINT ItemNumber, ” ”, ItemName1<br />

END<br />

I dette eksempel afgrænses posterne med WHERE, idet den opstillede betingelse medfører, at kun<br />

poster med ItemNumber > ”10000” medtages og udskrives.<br />

C5 vers. -> 4.1 Eksempel på kartoteksgennemløb med fast afgrænsning<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 25.08.2007}<br />

{C5 Version......: 4.00}<br />

SEARCH LagKart<br />

WHERE VareNummer > ”10000”<br />

PRINT VareNummer, ” ”, VareNavn1<br />

END<br />

I dette eksempel afgrænses posterne med WHERE, idet den opstillede betingelse medfører, at kun<br />

poster med VareNummer > ”10000” medtages og udskrives.<br />

Problem for brugere<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

83


I dagligdagen kan XAL kørslen, i ovenstående eksempel, være tung at håndtere for brugerne, idet der<br />

altid kun medtages varer, hvor varenummeret er større end ”10000”.<br />

Hvis der skal foretages andre afgrænsninger, og brugerne ikke selv kan eller må rette i XAL kørslen, skal<br />

der først tages fat i supervisoren eller en programmør, der kan udføre de nødvendige ændringer.<br />

Løsning<br />

Problemet kan løses ved at udvide XAL kørslen med en brugerstyret afgrænsning i form af en<br />

promptboks med et indtastningsfelt, hvori der kan indtastes et nyt varenummer, hver gang kørslen<br />

afvikles.<br />

Kartoteksgennemløb med brugerstyret afgrænsning<br />

Kartoteksgennemløb med brugerstyret afgrænsning udføres ved at indsætte en promptboks i XAL<br />

kørslen lige før kartoteksgennemløbet. I promptboksen kan brugeren så indtaste og styre de værdier,<br />

der skal afgrænse kartoteksgennemløbet.<br />

Promptboks til indtastning af værdier for kartoteksgennemløb<br />

Udsøgning af lagervarer<br />

Fra varenummer:<br />

I denne promptboks har brugeren mulighed for at indtaste et varenummer.<br />

Den værdi, der indtastes i feltet, modtages af den bagved liggende variabel. Ved at indsætte variablen i<br />

WHERE sætningen i stedet for det faste varenummer, er det brugerens varenummer, der anvendes til<br />

afgrænsningen i stedet for den faste værdi.<br />

C5 vers. 2012 ->Eksempel på kartoteksgennemløb med brugerstyret afgrænsning<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 05.12.2011}<br />

{C5 Version.....:. 2012}<br />

{Erklæring af variable}<br />

Str 10 &Fravarenr<br />

PROMPT ”Udsøgning af lagervarer”,,,<br />

”Fra varenummer: ”GET(&Fravarenr)<br />

INPUT AT 15,5<br />

SEARCH InvenTable<br />

WHERE ItemNumber > &Fravarenr<br />

PRINT ItemNumber, ” ”, ItemName1<br />

END<br />

Her anvendes variabelen i promptboksen til at modtage værdier med GET og i SEARCH anvendes<br />

variablen i WHERE i afgrænsningsbetingelsen. XAL kørslen medtager således kun poster, hvor<br />

varenummeret er større end, den værdi der indtastes i promptboksen.<br />

C5 vers. -> 4.1 Eksempel på kartoteksgennemløb med brugerstyret afgrænsning<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

84


{Forfatter.......: Jens Olsen}<br />

{Dato............: 25.08.2007}<br />

{C5 Version......: 4.00}<br />

{Erklæring af variable}<br />

Str 10 &Fravarenr<br />

PROMPT ”Udsøgning af lagervarer”,,,<br />

”Fra varenummer: ”GET(&Fravarenr)<br />

INPUT AT 15,5<br />

SEARCH LagKart<br />

WHERE VareNummer > &Fravarenr<br />

PRINT VareNummer, ” ”, VareNavn1<br />

END<br />

Her anvendes variabelen i promptboksen til at modtage værdier med GET og i SEARCH anvendes<br />

variablen i WHERE i afgrænsningsbetingelsen. XAL kørslen medtager således kun poster, hvor<br />

varenummeret er større end, den værdi der indtastes i promptboksen.<br />

PROMPT med REF<br />

Anvendelse af ALT+H i indtastningsfelter<br />

Indtastningsfelter i promptbokse kan udstyres med en hjælpefunktion i form af tastekombinationen<br />

ALT+H.<br />

Tastes der ALT+H i et indtastningsfelt, er det i visse tilfælde muligt at hente en liste over poster i et<br />

kartotek. I listen over kartoteksposter kan der udvælges én post, der så overføres til selve<br />

indtastningsfeltet.<br />

Anvendelse af i indtastningsfelt i promptboks<br />

Udsøgning af lagervarer<br />

Fra varenummer<br />

Ved at taste ALT+H, i indtastningsfeltet i promptboxen, kan brugeren få en liste over varenumre i<br />

kartoteket og vælge et derfra.<br />

Denne funktionalitet opnås ved anvendelsen af PROMPT med REF<br />

Opsætning af PROMPT med REF<br />

ALT+H<br />

Liste over varer i<br />

lagerkartoteket.<br />

Valgt vare overføres<br />

til indtastningsfeltet i<br />

promptboksen<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

85


REF skal altid efterfølges af to parametre i form navnet på det kartotek, der skal refereres til (foretages<br />

opslag i), og navnet på et felt i det pågældende kartotek. De to parametre skal altid adskilles af et<br />

punktum, men uden mellemrum.<br />

C5 vers. 2012 -> Eksempel på PROMPT med indbygget REF<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 05.12.2011}<br />

{C5 Version......: 2012}<br />

{Erklæring af variable}<br />

Str 10 &Fravarenr<br />

PROMPT ”Udsøgning af lagervarer”,,,<br />

”Fra varenummer: ”GET(&Fravarenr REF InvenTable.ItemNumber),<br />

INPUT AT 15,5<br />

SEARCH InvenTable<br />

WHERE ItemNumber >= &Fravarenr<br />

PRINT ItemNumber<br />

END<br />

Det er stadig GET kommandoen, der sørger for, at variablen kan modtage den værdi, der indtastes i<br />

promtpboksen.<br />

REF kommandoen anvendes kun for at give brugeren hjælp, idet den gør det muligt for brugeren i<br />

indtastningsfeltet at taste ALT+H, og få en liste over værdier i det kartotek der angives efter<br />

kommandoen. Når brugeren ser listen, kan der peges på en værdi, der herefter overføres til<br />

indtastningsfeltet.<br />

I eksemplet refereres der til lagerkartoteket (InvenTable)med feltet ItemNumber.<br />

Det betyder, at det er den værdi, der indtastes i promptboxen, der herefter anvendes i søgeløkken i<br />

forbindelse med WHERE, idet WHERE forbindes med variabelnavnet i den opsatte betingelse.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

86


C5 vers. -> 4.1 Eksempel på PROMPT med indbygget REF<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 25.08.2007}<br />

{C5 Version......: 4.00}<br />

{Erklæring af variable}<br />

Str 10 &Fravarenr<br />

PROMPT ”Udsøgning af lagervarer”,,,<br />

”Fra varenummer: ”GET(&Fravarenr REF Lagkart.VareNummer),<br />

INPUT AT 15,5<br />

SEARCH LagKart<br />

WHERE VareNummer >= &Fravarenr<br />

PRINT VareNummer<br />

END<br />

Det er stadig GET kommandoen, der sørger for, at variablen kan modtage den værdi, der indtastes i<br />

promtpboksen.<br />

REF kommandoen anvendes kun for at give brugeren hjælp, idet den gør det muligt for brugeren i<br />

indtastningsfeltet at taste ALT+H, og få en liste over værdier i det kartotek der angives efter<br />

kommandoen. Når brugeren ser listen, kan der peges på en værdi, der herefter overføres til<br />

indtastningsfeltet.<br />

I eksemplet refereres der til lagerkartoteket med feltet VareNummer.<br />

Det betyder, at det er den værdi, der indtastes i promptboxen, der herefter anvendes i søgeløkken i<br />

forbindelse med WHERE, idet WHERE forbindes med variabelnavnet i den opsatte betingelse.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

87


Opgaver: Brugerdialog med kartoteksopslag<br />

Opgave 1: PROMPT med REF til afgrænsning<br />

Formål med opgaven<br />

At udarbejde et kartoteksgennemløb med SEARCH og WHERE, hvor afgrænsningerne til WHERE<br />

betingelserne anvender variabler, der tildeles værdier gennem en prompt-box. I promptboksen skal det<br />

være muligt at foretage hjælpeopslag med ALT+H.<br />

Huskelister<br />

Variabler<br />

PROMPT med REF<br />

SEARCH-END<br />

Beskrivelse<br />

Der skal oprettes en XAL kørsel hvor brugeren indtaster en værdi i en promptboks, der er positioneret<br />

på skærmen. Denne værdi skal fungere som afgrænsning på et efterfølgende gennemløb af<br />

debitorkartoteket.<br />

De fundne poster udskrives til skærmen.<br />

Promptboks<br />

Fra konto ....:<br />

Til konto ....:<br />

Eksempel på resultat udskrevet i vindue<br />

Valg af debitorer<br />

100000 Autotester A/S 6.229,00<br />

230896 DebTest Gruppen 38.346,00<br />

42983214 Superfos Korn A/S 1.984.821,20<br />

45934545 IBM Danmark A/S 734.640,00<br />

45999300 Microsoft Data A/S 7.000,00<br />

228729910 Foto og Computer A/S 0,00<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

88


Forløb i C5 √<br />

1 Opret en ny XAL kørsel. Kopiér alle linjer fra den foregående opgave ind i denne.<br />

Foretag nødvendige ændringer i standard kommentarerne.<br />

2 Der skal nu være to variabler, der kan anvendes til indtastning af Fra kontonummer<br />

og Til kontonummer.<br />

3 Promptboksen skal ændres så den indeholder begge variabler med ledetekster. Se<br />

eksemplet herover.<br />

4 Kartoteksgennemløbet skal afgrænses ved hjælp af en WHERE.<br />

Begge variablerne skal anvendes i WHERE sætningen, idet kun kontonumre der er<br />

større end eller lig med ’FraKonto’ og mindre end eller lig med ’TilKonto’<br />

medtages.<br />

5 Afprøv kørslen.<br />

6 Foretag nødvendige ændringer i promptboksen, så brugeren får mulighed for at<br />

anvende ALT+H i felterne.<br />

Der skal refereres til kartoteket CustTable og feltet Account.<br />

7 Afprøv din XAL kørsel til du er tilfreds.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

89


11. Kartoteksgennemløb, flere kartoteker<br />

Mål med lektionen<br />

Formålet med denne lektion er, at give deltagerne viden om hvordan der kan udføres<br />

kartoteksgennemløb, der synkroniseres med hinanden. Desuden vises det hvordan, der kan foretages<br />

sammentælling af poster under kartoteksgennemløb.<br />

Efter lektionen skal kursisterne kunne:<br />

Udføre kartoteksgennemløb på flere kartoteker<br />

Synkronisere kartoteksgennemløb<br />

Danne totaler på kartoteksgennemløb.<br />

Flere kartoteker uden synkronisering<br />

I XAL kørsler kan der udmærket være flere søgeløkker efter hinanden, uden at disse behøver at være<br />

synkroniseret.<br />

I det følgende eksempel gennemløbes først kartoteket med kreditor grupper. Derefter gennemløbes<br />

selve kreditor kartoteket.:<br />

C5 vers. 2012 -> Eksempel på to kartoteksgennemløb uden synkronisering<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 05.12.2011}<br />

{C5 Version .....: 2012}<br />

SEARCH VendGroup<br />

PRINT VendGroup AT 1,22<br />

PRINT GroupName AT 12,22<br />

PRINT ””<br />

END<br />

PRINT ””<br />

SEARCH VendTable<br />

PRINT Account AT 1,22<br />

PRINT Name AT 12,22<br />

PRINT Phone AT 42,22<br />

PRINT ””<br />

END<br />

PAUSE<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

90


C5 vers. -> 4.1 Eksempel på to kartoteksgennemløb uden synkronisering<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 25.08.2007}<br />

{C5 Version......: 4.00}<br />

SEARCH KreGruppe<br />

PRINT Gruppe AT 1,22<br />

PRINT GruppeNavn AT 12,22<br />

PRINT ””<br />

END<br />

PRINT ””<br />

SEARCH KreKart<br />

PRINT Konto AT 1,22<br />

PRINT Navn AT 12,22<br />

PRINT Telefon AT 42,22<br />

PRINT ””<br />

END<br />

PAUSE<br />

Resultat<br />

DK Danmark<br />

UDL Udland<br />

12000 Kontorforsyningen 45 52 46 11<br />

14000 Emballagefabrikken A/S 77 33 33 12<br />

16000 Smith og Co. 55 81 86 87<br />

18000 Herman Hasse Gmbh 22 35 36 44<br />

20000 Fa. Jensen & Hansen 33 31 32 66<br />

Som det fremgår vises først kreditor grupperne og derefter selve kreditorerne.<br />

Kreditorerne, i den nederste del af eksemplet, har således ingen umiddelbar samhørighed med<br />

kreditorgrupperne i den øverste del.<br />

Flere kartoteker med synkronisering<br />

Ofte er der behov for at koble flere kartoteker sammen, således at poster i et kartotek er afhængige af<br />

poster i et andet kartotek.<br />

I stedet for at udskrive kreditorgrupper og kreditorer hver for sig, som i foregående eksempel, kunne<br />

disse synkroniseres således, at hver kreditorgruppe efterfølges af de tilhørende kreditorer, som vist<br />

herunder.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

91


Kreditorgrupper med tilhørende kreditorer<br />

DK Danmark<br />

12000 Kontorforsyningen 45 52 46 11<br />

14000 Emballagefabrikken A/S 77 33 33 12<br />

20000 Fa. Jensen & Hansen 33 31 32 66<br />

UDL Udland<br />

16000 Smith og Co. 55 81 86 87<br />

18000 Herman Hasse Gmbh 22 35 36 44<br />

I ovenstående eksempel med kreditorgrupper og tilhørende kreditorer er det den enkelte<br />

kreditorgruppe, der afgrænser hvilke kreditorer, der skal udskrives.<br />

Eksemplet opbygges ved at oprette den ene søgeløkke inde i den anden, og ved at synkronisere de to<br />

søgeløkker.<br />

Synkronisering<br />

Synkroniseringen udføres ved, på kartoteket i den yderste søgeløkke, at finde et felt der kan<br />

identificere posterne i den inderste søgeløkke, idet der i den inderste søgeløkke skal findes et felt med<br />

en tilsvarende værdi.<br />

Hvis der fortsættes med eksemplet, der omhandler kreditorgruppe og kreditorer, vil det være<br />

kreditorgruppefeltet, der kan anvendes til at synkronisere de to søgeløkker.<br />

Kreditorgruppefeltet på kreditor kartoteket indeholder den samme værdi som kreditorgruppefeltet på<br />

kreditorgruppe kartoteket. Hvilket betyder, at dette felt kan anvendes til at udlede de poster, der hører<br />

til den enkelte kreditorgruppe.<br />

WHERE<br />

Selve synkroniseringen udføres i gennemløbet med underkartoteket, dvs. i den inderste søgeløkke.<br />

Synkroniseringen opbygges med kommandoen WHERE.<br />

Kommandoen efterfølges af en betingelse, som sammenligner felterne i de to kartoteker som vist i<br />

syntaksen herunder.<br />

Syntaks for WHERE<br />

WHERE == <br />

WHERE kommandoen medfører, at kun poster der opfylder udtrykket medtages i<br />

kartoteksgennemløbet. Således vil det kun være poster i underkartoteket, der har felter af samme<br />

værdi som felter i hove<strong>dk</strong>artoteket, der medtages.<br />

Efterfølgende er et eksempel på kodning af to søgeløkker, hvor den ene søgeløkke afgrænser den<br />

anden. Eksemplet anvender samme kartoteker som i de tidligere anvendte eksempler. Søgeløkkerne er<br />

synkroniseret med WHERE.<br />

C5 vers. 2012 -> Eksempel på kartoteksgennemløb synkroniseret med WHERE<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

92


{Forfatter.......: Jens Olsen}<br />

{Dato............: 05.12.2011}<br />

{C5 Version......: 2012}<br />

SEARCH VendGroup<br />

PRINT VendGroup,” ”,GroupName AT 1,22<br />

PRINT ””<br />

SEARCH VendTable<br />

WHERE VendTable.Group ==<br />

VendGroup.Group<br />

PRINT Account AT 1,22<br />

PRINT Name AT 12,22<br />

PRINT Phone AT 42,22<br />

PRINT ””<br />

END<br />

PRINT ””<br />

END<br />

PAUSE<br />

I ovenstående eksempel startes først en søgeløkke på kartoteket VendGroup. Alt, hvad der står mellem<br />

SEARCH VendGroup og den tilhørende END, udføres ved hvert gennemløb.<br />

En af de ting, der udføres i den yderste søgeløkke med VendGroup, er netop at starte en ny søgeløkke,<br />

nemlig den søgeløkke der gennemsøger VendTable.<br />

Ved i kreditorkartoteket at afgrænse posterne med WHERE, udvælges kun de kreditorer, der har<br />

samme kreditorgruppe, som den gruppe der bearbejdes. Der kan således i den inderste søgeløkke<br />

foretages udvælgelse af kreditorer til den aktuelle gruppe.<br />

C5 vers. -> 4.1 Eksempel på kartoteksgennemløb synkroniseret med WHERE<br />

{Forfatter.......: Jens Olsen}<br />

{Dato............: 25.08.2007}<br />

{C5 Version......: 4.00}<br />

SEARCH KreGruppe<br />

PRINT Gruppe,” ”,GruppeNavn AT 1,22<br />

PRINT ””<br />

SEARCH KreKart<br />

WHERE KreKart.Gruppe ==<br />

KreGruppe.Gruppe<br />

PRINT Konto AT 1,22<br />

PRINT Navn AT 12,22<br />

PRINT Telefon AT 42,22<br />

PRINT ””<br />

END<br />

PRINT ””<br />

END<br />

PAUSE<br />

I ovenstående eksempel startes først en søgeløkke på kartoteket KreGruppe. Alt, hvad der står mellem<br />

SEARCH KreGruppe og den tilhørende END, udføres ved hvert gennemløb.<br />

En af de ting, der udføres i den yderste søgeløkke med KreGruppe, er netop at starte en ny søgeløkke,<br />

nemlig den søgeløkke der gennemsøger KreKart.<br />

Ved i kreditorkartoteket at afgrænse posterne med WHERE, udvælges kun de kreditorer, der har<br />

samme kreditorgruppe, som den gruppe der bearbejdes. Der kan således i den inderste søgeløkken<br />

foretages udvælgelse af kreditorer til den aktuelle gruppe.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

93


Resultat<br />

DK Danmark<br />

12000 Kontorforsyningen 45 52 46 11<br />

14000 Emballagefabrikken A/S 77 33 33 12<br />

20000 Fa. Jensen & Hansen 33 31 32 66<br />

UDL Udland<br />

16000 Smith og Co. 55 81 86 87<br />

18000 Herman Hasse Gmbh 22 35 36 44<br />

Udarbejdelse af total<br />

Totaler er resultater af beregninger. De består f.eks. af de summerede værdier af poster fra et<br />

kartoteksgennemløb.<br />

Totaler skal gemmes i variabler af samme type som feltet, der summeres på.<br />

Sammentælling udføres ved, at tildele variabler deres egen værdi plus værdien af de felter der<br />

sammentælles.<br />

Syntaks for summering i variabel<br />

SET & = & + kartoteksfelt<br />

&variabelnavn1 er navnet på den variabel, der skal indeholde summeringen og kartoteksfelt er navnet<br />

på det felt, der skal summeres.<br />

Tildelingen af værdi til variablen skal udføres på et sted i XAL kørslen, hvor feltværdierne er<br />

tilgængelige, dvs. inde i søgeløkken.<br />

C5 vers. 2012 -> Eksempel på kartoteksgennemløb med summering i variabel<br />

Real &Sum<br />

SEARCH VendTable<br />

SET &Sum = &Sum + BalanceMST<br />

END<br />

PRINT ”Kreditorer i alt: ”, &Sum<br />

PAUSE<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

94


C5 vers. -> 4.1 Eksempel på kartoteksgennemløb med summering i variabel<br />

Real &Sum<br />

SEARCH KreKart<br />

SET &Sum = &Sum + SaldoDkk<br />

END<br />

PRINT ”Kreditorer i alt: ”, &Sum<br />

PAUSE<br />

Resultat<br />

Kreditorer i alt: -523.548,88<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

95


Opgaver: Kartoteksgennemløb, flere kartoteker<br />

Opgave 1: Kartoteker uden synkronisering<br />

Formål med opgaven<br />

At opbygge en XAL kørsel med to kartoteksgennemløb, der ikke er synkroniseret.<br />

Huskelister<br />

<strong>Programmering</strong> - Opret<br />

Variabler<br />

SEARCH-END<br />

PRINT AT<br />

PAUSE<br />

Beskrivelse<br />

Der skal oprettes en XAL kørsel, der udskriver resultaterne af uafhængige gennemløb på kartotekerne<br />

CustGroup og CustTable. Der skal ikke sættes afgrænsninger på kartoteksgennemløbene.<br />

Eksempel på udskrift på skærm<br />

DK Danske debitorer<br />

UDL Export debitorer<br />

------------------------------------------------<br />

DK 10 Dan Rasmussen 38.855,00<br />

UDL 20000 Central Kopiering 142.412,50<br />

DK 33344 Computer Hjemme Service A/S 5.311.501,50<br />

UDL 100000 Autotester A/S 6.229,00<br />

DK 230896 DebTest Gruppen 38.346,00<br />

DK 42983214 Superfos Korn A/S 1.984.821,20<br />

DK 45934545 IBM Danmark A/S 734.640,00<br />

DK 45999300 Microsoft Data A/S 7.000,00<br />

UDL 228729910 Foto og Computer A/S 0,00<br />

1 Opret en ny XAL kørsel. Indsæt og tilret startkommentarer<br />

Forløb I C5 √<br />

2 Opret en søgeløkke til kartoteket CustGroup og udskriv felterne Group og<br />

GroupName<br />

3 Opret derefter en søgeløkke til kartoteket CustTable og udskriv felterne Group,<br />

Account, Name og BalanceMST.<br />

4 Afprøv kørslen<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

96


Opgave 2: Kartoteker med synkronisering<br />

Formål med opgaven<br />

At opbygge en XAL kørsel med to kartoteksgennemløb der er synkroniseret.<br />

Huskelister<br />

<strong>Programmering</strong> - Opret<br />

Variabler<br />

SEARCH-END<br />

PRINT AT<br />

PAUSE<br />

Beskrivelse<br />

Der skal oprettes en XAL kørsel, der udskriver resultaterne af et gennemløb af CustGroup og CustTable,<br />

hvor CustTable er indbygget i CustGroup.<br />

Eksempel på udskrift på skærm<br />

DK Danske debitorer<br />

------------------------------------------------<br />

DK 10 Dan Rasmussen 38.855,00<br />

DK 33344 Computer Hjemme Service A/S 5.311.501,50<br />

DK 230896 DebTest Gruppen 38.346,00<br />

DK 42983214 Superfos Korn A/S 1.984.821,20<br />

DK 45934545 IBM Danmark A/S 734.640,00<br />

DK 45999300 Microsoft Data A/S 7.000,00<br />

UDL Export debitorer<br />

-------------------------------------------------<br />

UDL 20000 Central Kopiering 142.412,50<br />

UDL 100000 Autotester A/S 6.229,00<br />

UDL 228729910 Foto og Computer A/S 0,00<br />

Forløb I C5 √<br />

1 Opret en ny XAL kørsel. Kopiér alle linjerne fra den forrige opgave ind i denne XAL<br />

kørsel. Foretag nødvendige ændringer i standard kommentarerne<br />

2 Flyt søgeløkken på CustTable (med print linjer) ind i søgeløkken på CustGroup<br />

3 Synkronisér CustTable med CustGroup ved hjælp af WHERE<br />

4 Afprøv kørslen<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

97


Opgave 3: Kartoteker med synkronisering og sammentælling.<br />

Formål med opgaven<br />

At bygge videre på den foregående opgave, idet der skal udføres en manuel sammentælling, i en<br />

variabel, i den ene af søgeløkkerne.<br />

Huskelister<br />

<strong>Programmering</strong> - Opret<br />

Variabler<br />

SEARCH-END<br />

Beskrivelse<br />

Der skal bygges videre på den foregående opgave.<br />

Der skal foretages en sammentælling af feltet BalanceMST i CustTable således, at der dannes en total<br />

for hver debitorgruppe. Denne total skal udskrives til skærmen efter gennemløbet af CustTable.<br />

DK Danske debitorer<br />

-----------------------------------------------<br />

DK 10 Dan Rasmussen 38.855,00<br />

DK 33344 Computer Hjemme Service A/S 5.311.501,50<br />

DK 230896 DebTest Gruppen 38.346,00<br />

DK 42983214 Superfos Korn A/S 1.984.821,20<br />

DK 45934545 IBM Danmark A/S 734.640,00<br />

DK 45999300 Microsoft Data A/S 7.000,00<br />

Total 8.115.163,70<br />

UDL Export debitorer<br />

-----------------------------------------------<br />

UDL 20000 Central Kopiering 142.412,50<br />

UDL 100000 Autotester A/S 6.229,00<br />

UDL 228729910 Foto og Computer A/S 0,00<br />

Total 148.641,50<br />

Forløb i C5 √<br />

1 Opret en ny XAL kørsel. Kopiér alle linjerne fra den forrige opgave ind i denne XAL<br />

kørsel. Foretag nødvendige ændringer i standard kommentarerne.<br />

2 Opret en variabel der kan bruges til summering af feltet BalanceMST.<br />

3 Indsæt kode til summering af feltet BalanceMST i den oprettede variabel.<br />

Udskriv værdien i variablen med ledeteksten ’Total’ foran. Værdien udskrives hver<br />

gang en debitorgruppe er færdig. (Husk at nulstille)<br />

4 Afprøv kørslen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

98


12. Huskelister Kommandoer og funktioner<br />

Box<br />

Syntaks Box(type,”tekst”,0)<br />

Beskrivelse Funktionen Box danner en kasse med en tekst.<br />

Eksempel<br />

Infoboks<br />

Eksempel<br />

Advarselsboks<br />

med linjeskift<br />

Der kan dannes forskellige former for bokse afhængigt af indholdet i<br />

parameteren type.<br />

På dette kursus benyttes flg. bokstyper:<br />

Type 1: Infoboksen (tekstboks med grå baggrund).<br />

Type 2: Advarselsboksen (tekstboks med rød baggrund).<br />

I parameteren tekst skrives boksens tekst i citationstegn. Der kan indsættes<br />

linjeskift med \n, der skal være indenfor citationstegnene.<br />

Sidste parameter skal for bokstype 1 og 2 være 0.<br />

SET Box(1,”Kørslen er slut”,0)<br />

SET Box(2,”ADVARSEL\nKørslen blev afbrudt”,0)<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

99


Dokumentation af XAL-kørsler<br />

Udskriv<br />

dokumentation<br />

Funktion – CurUserID()<br />

Syntaks CurUserID():INT<br />

Returværdi INT<br />

Generelt/Tilpasning/Udviklingsmenu/XAL/ Udskriv<br />

Du ser en menuen Vælg kørsel, der er en liste over alle<br />

XAL-kørsler.<br />

Vælg den kørsel der skal udskrives, ved at skrive de første<br />

tegn i kørslens navn.<br />

Billedet ’Udskriftsmuligheder’ er blevet åbnet.<br />

ENTER<br />

Skriv til-feltet udfyldes med PRINTER ALT+H<br />

Printer-feltet udfyldes med navnet på den printer, der<br />

skal skrives til (Spørg evt. instruktøren)<br />

ALT+H<br />

Formattering-feltet skal åbnes med ENTER<br />

Du ser billedet ’Formattering’<br />

Tvungen venstre margen-feltet sættes til 2 for, at undgå<br />

at skrive i hullerne på papiret.<br />

De øvrige felter kan forblive som de er eller ændres efter<br />

ønske.<br />

Go<strong>dk</strong>end vinduet med F3<br />

Du er tilbage i billedet ’Udskriftsmuligheder’<br />

Resten af felterne forbliver, som de er.<br />

Udfør udskriften ved at go<strong>dk</strong>ende med F3<br />

Beskrivelse Funktionen CurUserID() returnerer den nuværende brugers ID nummer som et<br />

heltal. ID nummeret er identisk med Bruger nummeret ved oprettelse af ny<br />

bruger i Generelt/Tilpasning/Adgangskontrol/Brugere og Grupper<br />

Eksempler CurUserID()-> 1 (som er Supervisorens nummer)<br />

100<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Funktion – UserID2Name()<br />

Syntaks UserID2Name(INT):STR<br />

Returværdi STR<br />

Beskrivelse Hver bruger er identificeret ved et unikt brugernavn og funktionen<br />

UserID2Name() returnerer det brugernavn som er tilknyttet<br />

heltalsparameteren, der er brugernummeret.<br />

Eksempler UserID2Name(1)-> ”Supervisor”<br />

Funktion – TimeNow()<br />

Syntaks TimeNow():INT<br />

Returværdi INT<br />

Beskrivelse Funktionen TimeNow() returnerer klokkeslettet, baseret på computer uret. Det<br />

returnerede heltal er defineret som antal sekunder siden midnat.<br />

Eksempler TimeNow()-> 18098<br />

101<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Funktion – Time2Str()<br />

Syntaks Time2Str( Sekunder(INT), TMS(INT), Tid(INT) ):STR<br />

Returværdi STR<br />

Sekunder Antal af sekunder siden midnat<br />

TMS Type af Time, minut og sekund adskiller<br />

= 0 (Ingen adskiller)<br />

= 1 ( ”:” som adskiller)<br />

= 2 ( ”.” som adskiller)<br />

= 3 ( ” ” som adskiller)<br />

= 4 ( ”,” som adskiller)<br />

= 5 ( ”/” som adskiller)<br />

Tid Bestemmer hvordan tiden skal vises, enten i AM/PM format<br />

eller i 24-timers tid.<br />

= 1 (24-timers format benyttes)<br />

= 2 (AM/PM format benyttes)<br />

Beskrivelse Funktionen Time2Str() konverterer en tid, defineret som et antal sekunder siden<br />

midnat, til en tekst, der samtidigt antager et valgfrit tidsformat, alt efter hvilke<br />

parametre der vælges.<br />

Eksempler Time2Str(18098,1,1) -> ”05:01:38<br />

Time2Str(18099,0,0) -> ”050139”<br />

Time2Str(50000,2,1) -> ”13.53.20”<br />

Time2Str(50000,2,2) -> ”01.53.20 PM”<br />

Funktion – ToDay()<br />

Syntaks ToDay():DATE<br />

Returværdi DATE<br />

Beskrivelse Funktionen ToDay() returnerer dags dato. Der skal ikke tastes nogen parametre i<br />

parenteserne<br />

Eksempler PRINT ToDay() { medfører dags dato }<br />

102<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


IF-THEN-ELSE-ENDIF<br />

Syntaks IF THEN<br />

{Kommandoer der afvikles, hvis udtrykket er<br />

sandt}<br />

ELSE<br />

{Kommandoer der afvikles, hvis udtrykket er<br />

falsk}<br />

ENDIF<br />

Beskrivelse Kommandoen IF-THEN-ELSE-ENDIF er en spørgestruktur, hvis resultat bliver<br />

SANDT eller FALSK.<br />

Strukturen har tre bestanddele: En betingelse, en SAND konsekvens og en FALSK<br />

konsekvens.<br />

I nogle tilfælde er det ikke nødvendigt at opstille en FALSK konsekvens. I så fald<br />

vil der ikke blive udført kommandoer, hvis betingelsen evaluerer til falsk.<br />

Eksempler SEARCH CustTable<br />

IF BalanceMST > BalanceMax THEN<br />

PRINT ”Overskredet” { betingelse er sand }<br />

ELSE<br />

PRINT ”OK” { betingelse er falsk }<br />

ENDIF<br />

END<br />

PAUSE<br />

Index - se indhold af<br />

Se indhold af index Ctrl F12/Kartoteker<br />

Gentages for hvert<br />

kartotek, der skal<br />

ses index i<br />

Gentages for hvert<br />

index<br />

Du er i billedet ’Kartoteksopbygning’<br />

Stå i kartotekskolonnen og åbn en liste over kartoteker F4<br />

Vælg kartotek fra listen ved at taste de første tegn i<br />

kartoteksnavnet<br />

ENTER<br />

Billedet består af tre blokke. Flyt til blokken ’Index’ SH+F8<br />

Stil cursoren på det ønskede index PIL Op eller<br />

På nederste linje ses teksten:<br />

’Indexformel: ’ efterfulgt af navnene på de felter indexet<br />

består af.<br />

Afslut når du er færdig ESC<br />

PIL NED<br />

eller flyt til kartotekskolonnen igen og vælg et nyt kartotek SH+F8<br />

103<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Kommentarer<br />

Syntaks { kommentar }<br />

Beskrivelse En kommentar er en fritekst, der indsættes et vilkårligt sted i programmet for at<br />

forklare programmets funktion.<br />

Kommentarer skal altid omgives med { }.<br />

Kommentarer har ingen indvirkning på selve programmet, men er blot en<br />

forklarende tekst, der overspringes på afviklingstidspunktet.<br />

Kommentarer anvendes typisk i flg. tilfælde:<br />

Som introduktion til selve programmet<br />

Som forklaring ved erklæring af variabler<br />

Ved forklaring af programmet<br />

Til at ignorere dele af programmet<br />

Eksempel 1 {Jens Olsen 15.01.2011<br />

C5 version 2012<br />

Udskrift af debitorer med saldo}<br />

Eksempel 2 { Forfatter ....: Jens Olsen }<br />

{ Dato .........: 25.08.2007}<br />

{ C5 version ...: 4.0 }<br />

{ Funktion .....: Summering af saldi på debitorer }<br />

PAUSE<br />

Syntaks<br />

{ Erklæring af variabler }<br />

PAUSE<br />

Beskrivelse Kommandoen PAUSE anvendes til at stoppe en kørsel midlertidigt.<br />

Kommandoen giver brugeren mulighed for, at se udskriften inden kørslen<br />

fortsætter (og måske afsluttes), og vinduet lukkes.<br />

Hvis PAUSE ikke angives, når brugeren ikke at se udskriften.<br />

Kørslen genoptages efter en PAUSE, når brugeren taster ENTER<br />

Eksempler PRINT ”Ole Olsen”<br />

PRINT 25<br />

PRINT ”Ole Olsen ”, 25, ” år”<br />

PRINT<br />

PAUSE<br />

104<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


PRINT<br />

Syntaks PRINT <br />

PRINT ,,...<br />

Beskrivelse Kommandoen PRINT benyttes til udskrivning i XAL-kørsler.<br />

Eksempler<br />

PRINT AT<br />

Syntaks<br />

Der kan bl.a. udskrives informationer fra poster i gennemløbne kartoteker og<br />

værdier på anvendte variabler, ligesom der kan skrives almindelig tekst.<br />

Der kan kun skrives på skærmen med PRINT kommandoen.<br />

Udskriften placeres på nederste linje i vinduet.<br />

Udskrifter bredere en vinduet afskæres og fortsætter ikke på næste linje.<br />

Der kan max udskrives 8 udtryk pr. linje. Er der behov for flere, skal der angives<br />

flere PRINT kommandoer.<br />

PRINT ”Ole Olsen”<br />

PRINT 25<br />

PRINT ”Ole Olsen ”, 25, ” år”<br />

PRINT AT ,<br />

PRINT ,... AT ,<br />

Beskrivelse Kommandoen PRINT AT benyttes til udskrivning i XAL-kørsler, idet<br />

programmøren selv bestemmer, hvor på vinduet printværdierne skal stå.<br />

Eksempler<br />

Kommandoen AT skal anføres til sidst på printlinjen, og den skal efterfølges af<br />

kolonne- og linjenummer adskilt med et komma.<br />

Hvis der efter en sætning med PRINT AT kommer en eller flere andre PRINT<br />

sætninger uden AT, vil de værdier, der er placeret på vinduet på bestemte steder<br />

med PRINT AT, blive rykket en linje op for hver PRINT sætning uden AT.<br />

PRINT ”Ole Olsen” AT 20,5<br />

PRINT 25 AT 20,6<br />

PRINT ”Ole Olsen ”, 25, ” år” AT 20,5<br />

105<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


<strong>Programmering</strong> – opret<br />

Opret Generelt/Tilpasning/Udviklingsmenu/XAL/Opret<br />

Du ser en dialogbox med feltet Kørsel.<br />

Indtast navnet på din kørsel her.<br />

(Brug IKKE punktum i navnet, gerne understreg)<br />

Der åbnes nu en editorbox, der fylder den øverste halvdel<br />

af skærmen.<br />

Zoom editorboxen op i fuld skærmstørrelse.<br />

(Kan gøres mindre igen med samme funktionstast)<br />

Editoren er nu klar til indtastning af et program til en XALkørsel.<br />

Flg. huskelister omhandler arbejdet med editoren:<br />

XAL editoren - editeringsfunktioner<br />

XAL editoren – nøgleord<br />

<strong>Programmering</strong> – ret<br />

Efter endt indtastning go<strong>dk</strong>endes kørslen F3<br />

Ret Generelt/Tilpasning/Udviklingsmenu/XAL/Ret<br />

Vælg kørsel fra plukkelisten.<br />

Der åbnes nu en editorbox, der fylder den øverste halvdel<br />

af skærmen.<br />

Zoom editorboxen op i fuld skærmstørrelse.<br />

(Kan gøres mindre igen med samme funktionstast)<br />

Efter at XAL-kørslen er kommet frem i editoren, kan der<br />

foretages diverse ændringer og tilføjelser.<br />

Der henvises til huskelisterne:<br />

XAL editoren - editeringsfunktioner<br />

XAL editoren – nøgleord<br />

Ændringerne afsluttes og go<strong>dk</strong>endes med F3<br />

Efter go<strong>dk</strong>endelsen vises der en dialogboks med<br />

spørgsmålet: Ønskes kørslen igangsat?<br />

Sæt kørslen i gang Ja<br />

ALT+Z<br />

ALT+Z<br />

Afslut Nej<br />

106<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


PROMPT<br />

Syntaks PROMPT ,,,<br />

,<br />

GET (&Var)<br />

INPUT AT ,<br />

Beskrivelse Kommandoen PROMPT benyttes til at stoppe op i programmet og spørge<br />

brugeren om den værdi, der ønskes indsat i de variabler, der anføres i<br />

paranteserne efter GET.<br />

Overskrifter og ledetekster skal altid stå i citationstegn.<br />

Kommaerne efter linjerne bevirker linjeskift. Hvert komma giver ét linjeskift.<br />

AT er valgfrit. Hvis AT ikke angives, vises promptboxen i skærmens øverste<br />

venstre hjørne.<br />

Eksempel 1 PROMPT ”Vælg farve”,,<br />

”Farve ........: ” GET (&Farve),<br />

”(Rød eller blå) ”<br />

INPUT<br />

Eksempel 2<br />

PROMPT ”Indtast værdier”,,<br />

”Antal ...: ” GET (&Antal),<br />

”Nummer ..: ” GET (&Nummer),<br />

”Pris ....: ” GET (&Pris)<br />

INPUT AT 10,5<br />

107<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


PROMPT med REF<br />

Syntaks PROMPT ,,,<br />

,<br />

GET (&Var REF kartotek.felt)<br />

INPUT AT ,<br />

Beskrivelse Kommandoen PROMPT benyttes til at stoppe op i programmet og spørge<br />

brugeren om den værdi, der ønskes indsat i de variabler, der anføres i<br />

paranteserne efter GET.<br />

Overskrifter og ledetekster skal altid stå i citationstegn.<br />

Kommaerne efter linjerne bevirker linjeskift. Hvert komma giver ét linjeskift.<br />

AT er valgfrit. Hvis AT ikke angives vises promptboxen i skærmens øverste<br />

venstre hjørne.<br />

Ved anvendelse af REF i en promptbox kan brugeren med ALT+H få en<br />

plukkeliste med værdier i det angivne kartotek. Ved valg af en værdi overføres<br />

denne til variablen.<br />

Eksempel PROMPT ”Vælg debitor”,,<br />

”Konto ..: ” GET (&Kto REF CustTable.Account)<br />

INPUT<br />

SEARCH-END<br />

Syntaks<br />

SEARCH <br />

[]<br />

END<br />

Beskrivelse Kommandoen SEARCH anvendes til at gennemløbe poster i et kartotek.<br />

Eksempel<br />

Kartotek er navnet på det kartotek, der skal gennemløbes.<br />

De poster der udvælges kan f.eks. udskrives med PRINT kommandoen.<br />

SEARCH CustTable<br />

PRINT Account,” ”,Name<br />

END<br />

PAUSE<br />

108<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


SEARCH-END med USING INDEX<br />

Syntaks SEARCH [USING [INDEX] Indexnavn]<br />

[]<br />

END<br />

Beskrivelse Kommandoen SEARCH anvendes til at gennemløbe poster i et kartotek.<br />

De poster der udvælges, kan f.eks. udskrives med PRINT kommandoen.<br />

Med USING kan det angives hvilket af de faste indexer, der skal sorteres efter.<br />

Ordet INDEX er et valgfrit nøgleord, der gør kørslen lettere at læse.<br />

Eksempel 1 SEARCH CustTable USING INDEX AccountIdx<br />

PRINT Account,” ”,Name<br />

END<br />

PAUSE<br />

Eksempel 2 SEARCH CustTable USING AccountIdx<br />

PRINT Account,” ”,Name<br />

END<br />

PAUSE<br />

SEARCH-END med ORDER<br />

Syntaks SEARCH <br />

[ORDER ]<br />

[]<br />

END<br />

Beskrivelse Kommandoen SEARCH anvendes til at gennemløbe poster i et kartotek.<br />

Med USING kan der angives sortering efter et af de faste indexer.<br />

Hvis der skal sorteres efter et kartoteksfelt, hvorpå der ikke er noget fast index,<br />

gøres dette med ORDER.<br />

Ordet felt er navnet på det kartoteksfelt, der skal sorteres efter. Der dannes et<br />

midlertidigt index på feltet.<br />

De poster der udvælges, kan f.eks. udskrives med PRINT kommandoen.<br />

Nogle programstumper bruger kommandoen ORDER BY. Der er ingen forskel på<br />

ORDER og ORDER BY og det skal blot nævnes her, i det tilfælde at man støder<br />

på den.<br />

Eksempel 1 SEARCH CustTable ORDER Name<br />

PRINT Name,” ”,Account<br />

END<br />

PAUSE<br />

Eksempel 2<br />

SEARCH CustTable ORDER BY Name<br />

PRINT Name,” ”,Account<br />

END<br />

PAUSE<br />

109<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


SEARCH-END med WHERE<br />

Syntaks SEARCH <br />

[WHERE ]<br />

[]<br />

END<br />

Beskrivelse Kommandoen SEARCH anvendes til at gennemløbe poster i et kartotek.<br />

Med WHERE kan der angives et udvælgelsesskriterium, for hvilke poster i<br />

kartoteket der skal udvælges.<br />

Efter WHERE opstilles en betingelse, der skal være opfyldt for, at de enkelte<br />

poster bliver udvalgt.<br />

De poster der udvælges kan f.eks. udskrives med PRINT kommandoen.<br />

Eksempel SEARCH CustTable<br />

WHERE Group == ”DK”<br />

PRINT Group,” ”,Account,” ”,Name<br />

END<br />

PAUSE<br />

110<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


SET<br />

Syntaks SET = <br />

Beskrivelse Et af formålene med kørsler er at manipulere med dataelementer. Det kan ske<br />

ved at tildele værdier til variabler.<br />

Kommandoen SET benyttes til dette.<br />

I kommatalsvariabler er decimaltegnet et ”.” punktum.<br />

I datovariabler skal ”\” backslash, anvendes til datoer ved tildeling af værdier<br />

med SET. Hvis backslash ikke benyttes eller hvis datoen ligger uden for det<br />

lovlige interval, kommer der en fejlmeddelelse om semantisk fejl.<br />

Hvis årstallet kun tastes med 2 cifre, antager systemet, at det er en dato i dette<br />

århundrede.<br />

Eksempler { Heltal }<br />

SET &Antal = 100<br />

{ Kommatal }<br />

SET &Beløb = 45.25<br />

SET &Beløb = &Beløb + 350.50<br />

{ Tekster }<br />

SET &ForNavn = ”Ole”<br />

SET &EfterNavn = ”Olsen”<br />

SET &Navn = &ForNavn + ” ” + &EfterNavn<br />

{ Datoer }<br />

SET &AnsatDato = 25\01\1997<br />

{ Fasttekster }<br />

SET &Svar = 1<br />

111<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Variabler<br />

Syntaks &<br />

[] &<br />

& = Værdi<br />

Beskrivelse En variabel er en plads i hukommelsen, der benyttes til at gemme værdier i<br />

Eksempler på<br />

erklæringer<br />

Eksempler på<br />

erklæringer<br />

med<br />

tildelinger af<br />

værdier<br />

under afviklingen af programmet.<br />

Der er fem typer variabler:<br />

INT (heltal)<br />

REAL (kommatal)<br />

STR (tekst)<br />

DATE (datoer)<br />

ENUM (fasttekster)<br />

Før en variabel kan anvendes, skal den erklæres i toppen af programmet.<br />

På STR variabler skal der angives længde, og på ENUM skal der angives navn på<br />

fastteksttypen.<br />

Variabler initialiseres med nulværdier i det øjeblik, de bliver erklæret.<br />

Der kan altid tildeles nye værdier med SET kommandoen sålænge, den nye<br />

værdi er af samme type som variablen selv.<br />

Variablerne har i og for sig ingen funktion før, de får tildelt værdier.<br />

INT &Antal<br />

REAL &Beløb<br />

STR 25 &Navn<br />

DATE &AnsatDato<br />

ENUM NejJa &Svar<br />

INT &Antal = 45<br />

REAL &Beløb = 275.50<br />

STR 25 &Navn = ”Olsen”<br />

DATE &AnsatDato = 29\07\09<br />

ENUM NejJa &Svar = 1<br />

112<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


WINDOW<br />

Syntaks WINDOW ,<br />

WINDOW , [AT ,]<br />

Beskrivelse Kommandoen WINDOW åbner et vindue på skærmen.<br />

Eksempel 1<br />

Det er helt tomt, når det åbnes.<br />

Det lukkes automatisk, når kørslen afsluttes eller der åbnes et nyt vindue. Der kan<br />

kun være ét vindue åbent ad gangen.<br />

AT viser hvor øverste venstre hjørne af vinduet placeres på skærmen. Hvis AT<br />

udelades, placeres vinduet i øverste venstre hjørne.<br />

Hvis vinduet f.eks. specificeres med højde og bredde lig 0,0, bliver det ikke åbnet,<br />

men det oprindelige lukkes, dvs. skærmen slukkes. Dette modsvarer<br />

kommandoen CLEAR SCREEN i andre programmeringssprog.<br />

WINDOW 40,5<br />

PRINT ”Ole Olsen ”, 25, ” år”<br />

PAUSE<br />

Eksempel 2 WINDOW 40,5 AT 20,5<br />

PRINT ”Ole Olsen ”, 25, ” år”<br />

PAUSE<br />

113<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


XAL editoren - editeringsfunktioner<br />

Vælg slut linje Cursoren hopper til enden af linjen END<br />

Vælg start<br />

linje<br />

Cursoren hopper til starten af linjen HOME<br />

Slet én linje Den linje, cursoren står på, slettes<br />

Kopier én<br />

linje til buffer<br />

Flyt én linje til<br />

buffer<br />

Indsæt fra<br />

buffer<br />

Markér flere<br />

linjer<br />

(Cursoren kan stå hvor som helst på linjen)<br />

Den linje, cursoren står på, kopieres ud i bufferen<br />

(Cursoren kan stå hvor som helt på linjen)<br />

Den linje, cursoren står på, flyttes ud i bufferen (Cursoren<br />

kan stå hvor som helt på linjen)<br />

ALT+D<br />

SH+F5<br />

CTRL+F5<br />

Bufferens indhold indsættes, der hvor cursoren står ALT+I<br />

Der kan markeres flere linjer på en gang ved at stå på<br />

første linje og taste ALT+L og flytte op og ned med<br />

piletasterne. De markerede linjer vises med gråt<br />

ALT+L<br />

Slet flere linje Markér linjerne ALT+L og pile<br />

Kopier flere<br />

linjer til<br />

buffer<br />

Flyt flere<br />

linjer til<br />

buffer<br />

Pile<br />

Slet de markerede linjer DELETE<br />

Markér linjerne ALT+L og pile<br />

Kopiér de markerede linjer ud i bufferen SHIFT+F5<br />

Flyt cursoren og indsæt igen ALT+I<br />

Markér linjerne<br />

ALT+L og pile<br />

Flyt de markerede linjer ud i bufferen CTRL+F5<br />

Flyt cursoren og indsæt et andet sted ALT+I<br />

114<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


XAL editoren – nøgleord<br />

Zoom vindue Når editoren åbnes, vises vinduet kun i halv størrelse.<br />

Zoom vinduet op eller ned ALT+Z<br />

Nøgleord Nøgleordene (kommandoerne) kan hentes fra en<br />

plukkeliste.<br />

Cursoren står automatisk på den sidst anvendte<br />

kommando.<br />

Når listen vises på skærmen, skrives de første tegn i<br />

kommandoen, hvorefter den vises automatisk og kan<br />

overføres til editoren.<br />

Vælg kommando og overfør til editoren ENTER<br />

Kartoteker Kartoteker hentes fra en plukkeliste.<br />

(Samme fremgangsmåde som under nøgleord)<br />

Vælg kartotek og overfør til editoren ENTER<br />

Felter Felter hentes fra en plukkeliste over kartoteker.<br />

(Samme fremgangsmåde som under nøgleord)<br />

115<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

F2<br />

F7<br />

SH+F8<br />

Vælg kartotek, felt og overfør til editoren ENTER<br />

Index Indexer hentes fra en plukkeliste over kartoteker<br />

(Samme fremgangsmåde som under nøgleord)<br />

Vælg kartotek, index og overfør til editoren ENTER<br />

Fasttekster Fasttekster hentes fra en plukkeliste<br />

Tekster i<br />

fasttekster<br />

(Samme fremgangsmåde som under nøgleord)<br />

Vælg fasttekst og overfør til editoren ENTER<br />

Tekster i fasttekster hentes fra en plukkeliste over<br />

fasttekster.<br />

(Samme fremgangsmåde som under nøgleord)<br />

F8<br />

F6<br />

SH+F6<br />

Vælg fastteksttype, tekst og overfør til editoren ENTER


13. Huskelister XAL sproget<br />

ENUM<br />

Funktion Fremgangsmåde Tast<br />

Opret ny<br />

fastteksttype<br />

Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/ Kerne<br />

Vælg kartotek<br />

(Det skal blot være et tilfældigt kartotek, da oprettelse af<br />

fastteksttyper kan foregå på et hvilket som helst kartotek.)<br />

ENTER<br />

Vælg Fast-Tekst-Typer i menuen ENTER<br />

Vælg Opret ny type i menuen ENTER<br />

Du ser billedet ’Fast-Tekst’<br />

Indtast Navn på typen<br />

Indtast overskriftsnavn i feltet Print Navn<br />

Go<strong>dk</strong>end F3<br />

Tilføj tekster Benyt samme menusti som ovenstående.<br />

Vælg Tilføj/Ret tekster i menuen Fast-Tekst-Typer<br />

Vælg Type<br />

Du ser nu en dialogbox med Fast-Tekst-Typens navn som<br />

overskrift.<br />

ENTER<br />

ENTER<br />

Indsæt tekst i feltet –INDSÆT NY TEKST-- INSERT eller<br />

Du ser nu dialogboxen Fast-Tekst Indhold<br />

Indtast navn i feltet<br />

Go<strong>dk</strong>end (til du er helt ude af programmet) F3<br />

Ret tekster Benyt samme menusti som ovenstående<br />

Vælg Tilføj/Ret tekster i menuen Fast-Tekst-Typer<br />

Vælg Type<br />

Du ser nu en dialogbox med Fast-Tekst-Typens navn som<br />

overskrift<br />

Vælg navn der skal ændres<br />

<strong>Programmering</strong> – opret<br />

ENTER<br />

ENTER<br />

ENTER<br />

Åbn Fast-Tekst Indhold og foretag ændring ENTER<br />

Go<strong>dk</strong>end (til du er helt ude af programmet) F3<br />

Funktion Fremgangsmåde Tast<br />

Opret Generelt/Tilpasning/Udviklingsmenu/XAL/Opret<br />

116<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Funktion Fremgangsmåde Tast<br />

Programelementer<br />

Du ser en dialogbox med feltet ’Kørsel’<br />

Indtast navnet på din kørsel her<br />

(Brug IKKE punktum i navnet, gerne understreg)<br />

Der åbnes nu en editorbox, der fylder den øverste halvdel<br />

af skærmen<br />

Zoom editorboxen op i fuld skærmstørrelse<br />

(Kan gøres mindre igen med samme funktionstast)<br />

Kommentarer sættes i { }<br />

Start programmet med en kommentar om programmets<br />

funktion, XAL version, dato, forfatter o.a.<br />

Variabler indsættes først i programmet<br />

Du vælger selv navne til dine variabler<br />

Indsæt kommando (nøgleord) F2<br />

Hent kartotek F7<br />

Hent Indexnavne<br />

Vælg først kartotek derefter indexnavn<br />

Hent feltnavne<br />

Vælg først kartotek, derefter feltnavn<br />

Hent fast-tekst-typer F6<br />

Hent fast-tekst-indhold<br />

Vælg først fast-tekst-type, derefter indhold<br />

ALT+Z<br />

117<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

{ }<br />

F8<br />

SHIFT+F8<br />

SHIFT+F6


<strong>Programmering</strong> – ret<br />

Funktion Fremgangsmåde Tast<br />

Ret Generelt/Tilpasning/Udviklingsmenu/XAL/Ret<br />

Editeringsmuligheder<br />

Vælg kørsel fra plukkelisten.<br />

Der åbnes nu en editorbox der fylder den øverste halvdel<br />

af skærmen.<br />

Zoom editorboxen op i fuld skærmstørrelse.<br />

(Kan gøres mindre igen med samme funktionstast)<br />

Du kan benytte samme programelementer som i<br />

huskesedlen: <strong>Programmering</strong> – Opret<br />

ALT+Z<br />

Slet hel linje Placér cursoren på linjen og slet. ALT+D<br />

Flyt én linje Placér cursoren på linjen og flyt til buffer<br />

Flyt flere linjer<br />

på én gang<br />

Flyt cursoren til det sted hvor linjen skal indsættes.<br />

CTRL+F5<br />

Indsæt linjen fra bufferen. ALT+I<br />

Placér cursoren på første linje<br />

Afmærk linjer.<br />

(linjerne markeres i anden farve)<br />

Flyt linjerne til bufferen.<br />

Flyt cursoren til det sted hvor linjerne skal indsættes.<br />

ALT+L og<br />

pil ned<br />

CTRL+F5<br />

Indsæt linjerne. ALT+I<br />

Kopiér én linje Placér cursoren på linjen og kopier til buffer<br />

Kopiér flere<br />

linjer på én<br />

gang<br />

Flyt cursoren til det sted hvor linjen skal indsættes.<br />

SH+F5<br />

Indsæt linjen fra bufferen. ALT+I<br />

Placér cursoren på første linje<br />

Afmærk linjer.<br />

(linjerne markeres i anden farve)<br />

Kopier linjerne til bufferen.<br />

Flyt cursoren til det sted hvor linjerne skal indsættes.<br />

ALT+L og<br />

pil ned<br />

SH+F5<br />

Indsæt linjerne. ALT+I<br />

118<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Del II – Kartoteker og skærmbilleder<br />

119<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


14. Kartoteker<br />

Mål med lektionen<br />

Formålet med denne lektion er at lære deltagerne at oprette kartoteker med felter. Desuden forklares<br />

begrebet systemfelter<br />

Efter lektionen skal kursisterne kunne:<br />

Oprette nye kartoteker<br />

Oprette nye felter i kartoteker<br />

og kende til:<br />

Password beskyttelse af kartoteker<br />

Begrebet systemfelter.<br />

Kartoteker generelt<br />

C5 består af over 200 forskellige kartoteker, der hver især igen består af en mængde felter.<br />

Nogle af kartotekerne består kun af ganske få felter. Andre består af mange felter. Afdelingskartoteket<br />

består således kun af 7 forskellige felter, medens lagerkartoteket består af over 70 forskellige felter.<br />

Der kan være op til 255 felter i ét kartotek.<br />

Oprettelse af kartoteker<br />

Supervisoren, eller brugere med tilsvarende rettigheder, kan selv oprette nye kartoteker og felter i C5.<br />

Bemærk! Kartoteker kan IKKE slettes igen, når de først er oprettet.<br />

Oprettelse af nyt kartotek<br />

Felt Betydning<br />

Navn på kartotek Sigende navn der anvendes til identifikation af kartoteket f.eks.<br />

’CustTable’.<br />

Printnavn Navn der benyttes om kartoteket i daglig tale f.eks.<br />

’Debitorkartotek’.<br />

Anvendes som ledetekst, når der skrives til skærmen.<br />

Kan f.eks. ses i QT’er i kartotekskolonnen f.eks.<br />

Debitor/Udskrifter/Stamdata/Debitorer.<br />

Ses også i Generelt/Kartotek/Database Status i<br />

kartotekskolonnen.<br />

Ref. Formnavn Navnet på det skærmbillede der hoppes til, når der tastes CTRL+F4.<br />

Angives der ikke et navn i dette felt, hoppes der automatisk til den<br />

form, der har samme navn som kartoteket f.eks. ’CustTable’.<br />

Titel felt Navnet på et felt i kartoteket f.eks. ’Account’.<br />

Feltnavnet, med indhold, vises i rammen på skærmbilleder, der<br />

anvender dette kartotek.<br />

Hvor ligger data Data i kartoteker kan gemmes på tre forskellige måder:<br />

120<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Eksempel<br />

I hvert regnskab<br />

I en midlertidig eller privat fil<br />

Kun i ”DAT” regnskabet<br />

Se forklaring til de tre muligheder herunder.<br />

Applikationsgruppe Evt. angivelse af hvilken applikationsgruppe kartoteket tilhører.<br />

Navngivning af kartoteker<br />

C5 kontrollerer at koden til denne gruppe er OK.<br />

Nye moduler der kodes til C5 af andre end Microsofts egne udviklere, skal overholde følgende syntaks<br />

for navngivning af kartoteker.<br />

Syntaks<br />

<br />

Kartoteks navn startes således med modulnavnets tre første bogstaver skrevet med STORT efterfulgt<br />

kartoteks navn.<br />

BOODestinationer<br />

I eksemplet er der f.eks. oprettet et Booking modul til et rejsebureau, og der oprettes et kartotek med<br />

destinationer. Kartoteknavnet bliver derfor BOODestinationer.<br />

Ovenstående navngivning SKAL overholdes, hvis modulet skal certificeres af Microsoft.<br />

Hvor ligger data<br />

Hvor ligger data Eksempel på kartotek DAT DMO Øvrige<br />

Midlertidigt regnskab LønKørsel (X) (X) (X)<br />

Hvert regnskab DebTable el. DebKart X X X<br />

Kun DAT regnskabet PostNumre X<br />

Markeringerne i felterne til højre viser, hvordan data i et kartotek gemmes i de forskellige regnskaber.<br />

X viser hvor dataene gemmes og vedligeholdes. (X) viser, at dataene kun er midlertidige og slettes, når<br />

C5 lukkes ned.<br />

Midlertidigt regnskab<br />

Ved midlertidigt regnskab kan der tastes data ind i kartoteket i alle regnskaber, men så snart C5 lukkes<br />

ned, slettes de indtastede data. Kartoteket er midlertidigt.<br />

Hvert regnskab<br />

121<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Ved hvert regnskab kan der tastes data ind i kartotekerne i de enkelte regnskaber, og dataene gemmes<br />

i sit eget regnskab, også efter at C5 er lukket ned.<br />

Kun i DAT regnskabet<br />

Når der vælges kun i DAT regnskabet, betyder det, at dataene kun eksisterer i dette regnskab.<br />

Hvis der f.eks. tastes data ind i et kartotek i et andet regnskab end DAT regnskabet, vil dataene blive<br />

gemt i DAT og ikke i det aktuelle regnskab.<br />

Dataene er samtidig til rådighed i alle de øvrige regnskaber.<br />

Postnummer kartoteket er f.eks. fælles for alle regnskaber, idet postnumrene kun ligger i DAT<br />

regnskabet, men alligevel kan ses, vedligeholdes og anvendes i et hvilket som helst andet regnskab.<br />

Passwordbeskyttelse af kartoteker<br />

Det er muligt at indlægge password på de enkelte kartoteker.<br />

Passwords skal huskes<br />

Passwords kan kun ændres ved at indtaste et nyt, men først når der er opnået adgang til<br />

kartoteket ved angivelse af det gamle password<br />

Passwords kan ikke umiddelbart genetableres. Hvis de glemmes, må data betragtes som tabte,<br />

idet kartoteket er låst<br />

Eneste mulighed, for at få slettet et glemt password, består i, at en medarbejder fra Microsoft kommer<br />

ud i virksomheden med et specielt program, der kan låse op for kartoteket igen.<br />

Systemfelter i kartoteker<br />

Alle kartoteker i C5 har fire ensartede systemfelter.<br />

Systemfelter Beskrivelse<br />

RowNumber Postens nummer i kartoteket<br />

LastChanged Dato for sidste manipulation af posten<br />

RecId Record Id, dvs. postens nummer i databasen<br />

FileId File Id, dvs. kartotekets entydige nummer<br />

De fire felter indsættes automatisk, når der oprettes et nyt kartotek.<br />

Da det er systemfelter, skal der heller ikke indtastes data i dem. De vedligeholdes automatisk.<br />

Felterne kan indsættes i skærmbilleder eller rapporter på lige fod med egne oprettede felter. Der kan<br />

f.eks. være behov for at vise sidste ændringsdato for posteringer.<br />

Nye felter i kartoteker<br />

Når der oprettes et nyt felt på et kartotek, vælges først felttype. Felttyperne svarer til de fem datatyper,<br />

der også anvendes til erklæring af variabler.<br />

122<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Felttyper<br />

Felttyper Beskrivelse Datatyper<br />

Alphanumerisk Tekst STR<br />

Heltal Max. 8 cifre INT<br />

Kommatal Beløb/Værdi REAL<br />

Dato Datoer DATE<br />

Fast-Tekst-Type Faste tekster ENUM<br />

Bemærk! Det er ikke muligt at slette et felt eller at ændre type på det.<br />

Hvis et felt f.eks. er blevet oprettet som et kommatalsfelt, og det i virkeligheden skal være et tekstfelt,<br />

kan det ikke lade sig gøre at ændre typen.<br />

Da feltet heller ikke kan slettes, er der kun en udvej, at give det et andet navn og undlade at bruge det,<br />

og derefter oprette et nyt felt i stedet.<br />

Udvej<br />

Der er en måde at ’snyde’ systemet på, så der alligevel kan slettes og ændres type på et felt.<br />

Dette kan ske ved at:<br />

Eksportere kartoteksdefinitionen ud i en tekstfil<br />

Redigere i den eksporterede tekstfil<br />

Importere den redigerede tekstfil, idet den gamle overskrives.<br />

Denne metode må dog kun benyttes på kartoteker, der er fuldstændigt tomme, da der ellers er risiko<br />

for, at smadre sammenhængen mellem data og kartoteksdefinition, hvorefter dataene er ubrugelige.<br />

Regler for feltnavne<br />

Nedenstående regler skal overholdes for navngivning af felter:<br />

Højst 32 tegn<br />

Bogstaverne a-å og A-Å<br />

Tallene 0-9<br />

Eneste tegn derudover er understreg<br />

Første tegn skal være et bogstav<br />

Ingen blanke tegn (mellemrum)<br />

Ikke navnesammenfald med XAL f.eks. ’by’ som i ORDER BY<br />

123<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Fælles ved oprettelse af alle typer nye felter<br />

Felt Betydning<br />

Feltnavn Navn der identificerer feltet i resten af C5 systemet.<br />

Feltnavnet kan ændres, hvis der er behov for det.<br />

Hjælpetekst Kort forklaring til feltet. Forklaringen vises i bunden af skærmen, når<br />

cursoren placeres på feltet i et skærmbillede.<br />

Evt. ledetekst Tekst der anvendes som overskrift eller ledetekst til feltet i f.eks.<br />

skærmbilleder.<br />

Udfylde under<br />

oprettelse<br />

Angives der ingen tekst, anvender systemet automatisk feltnavnet.<br />

Nej eller Ja til om det skal være muligt at indtaste i feltet under<br />

oprettelse af poster.<br />

Normalt Ja, men der kan være situationer, hvor det ikke skal være<br />

muligt. Hvis indholdet i feltet f.eks. er et resultat af indholdet i et<br />

eller flere andre felter.<br />

Udfylde under rettelse Om det skal være muligt at indtaste i feltet under rettelse af en post.<br />

Fungerer som sikring mod uønskede rettelser.<br />

Svaret vil ofte afhænge af svaret i det foregående felt.<br />

Gem feltets indhold Nej eller Ja til at gemme feltets indhold i databasen.<br />

Normalt Ja, men hvis indholdet i feltet f.eks. hentes via opslag i et<br />

andet kartotek, behøver det ikke at blive gemt, og sparer derved<br />

plads i datafilen.<br />

Referencekartotek Navn på et andet kartotek hvori værdien, af det felt der er ved at<br />

blive oprettet, også optræder.<br />

Anvendes sammen med referencefelt til opslag med ALT+H i<br />

skærmbilleder og listbilleder.<br />

Referencefelt Navn på et felt i referencekartoteket, hvori værdi og type er den<br />

samme, som det felt der er ved at blive oprettet.<br />

Specielt ved nye tekstfelter<br />

Felt Betydning<br />

Sammenlignes justeret Der kan vælges mellem Venstrestillet og Højrestillet.<br />

Justeringen har betydning, hvor et tekstfelt indeholder tal, der skal<br />

anvendes i index eller sammenligninger.<br />

Hvis tekstfelter med talværdier skal sorteres i forhold til talværdien,<br />

skal teksten højrestilles.<br />

Længde Længden på den tekst feltet må kunne indeholde.<br />

Max. 255 tegn.<br />

Dan skyggefelt (SQL) Ved at svare Ja, dannes der en kopi i SQL. Kopien indeholder samme<br />

tekst i store bogstaver til søgning i SQL<br />

Specielt ved nye heltals- og kommatalsfelter<br />

124<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Felt Betydning<br />

Opdatering af tallet Der kan vælges mellem Absolut og Relativ.<br />

Specielt ved nye kommatalsfelter<br />

Felt Betydning<br />

Absolut Absolut opdatering bevirker, at enhver forandring af<br />

værdier i en post med det samme bliver gemt på<br />

harddisken og overskriver den oprindelige værdi.<br />

Relativ Relativ opdatering har kun betydning, hvis det er en<br />

flerbrugerversion, hvor flere brugere kan arbejde med<br />

den samme post samtidigt.<br />

Relativ opdatering medfører, at alle bevægelser på en<br />

post opsummeres og gemmes.<br />

Anvendes normalt ikke, da det kan give kludder i<br />

opdateringer.<br />

National valuta Nej = Vis kun beløb i national valuta.<br />

Specielt ved nye fasttekstfelter<br />

Felt Betydning<br />

Hvilken Fast-Tekst-<br />

Type<br />

Ja = Vis beløb i den valuta der vælges med ALT+W inden en form<br />

åbnes eller en rapport startes.<br />

(Ledeteksterne ændres til at vise valuta i brugeropsætning i feltet<br />

’Vis præsentationsvaluta’)<br />

Her angives navnet på den fastteksttype, der skal tilknyttes dette felt.<br />

Angives der ingen fastteksttype, indsættes der automatisk typen<br />

NejJa. (Ses først når feltet åbnes igen under Ret)<br />

125<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Kartoteker<br />

Opgave 1: Fasttekster<br />

Formål med opgaven<br />

At oprette nye fasttekster<br />

Huskelister<br />

Fasttekst – Opret ny type<br />

Beskrivelse<br />

I forbindelse med et system til styring af varer der udlånes, skal der oprettes to nye fastteksttyper. Den<br />

ene type skal indeholde tekster til de forskellige typer af udlån og den anden skal indeholde tekster,<br />

der vedrører udlånslinjernes status.<br />

Navne og indholdet i de to fastteksttyper er beskrevet i skemaet herunder. Der kan evt. sættes<br />

checkmærker ud for de tekster, der er indtastet.<br />

Fastteksttypen UDLUdlånsType<br />

Fastteksttypens navn Position Tekst √<br />

UDLUdlånsType 0 Udlån<br />

Fastteksttypen UDLUdlånsStatus<br />

1 Kommission<br />

2 Andet<br />

Fastteksttypens navn Position Tekst √<br />

UDLUdlånsStatus 0 Udlånt<br />

1 Returneret<br />

2 Solgt<br />

3 Bortkommet<br />

4 Skrottet<br />

Forløb √<br />

1 Opret først fastteksttypen ’UDLUdlånsType’ og indsæt teksterne iflg. ovenstående<br />

skema<br />

2 Opret derefter fastteksttypen ’UDLUdlånsStatus’ og indsæt teksterne iflg.<br />

ovenstående skema<br />

126<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgave 2: Kartoteker<br />

Formål med opgaven<br />

At oprette nye kartoteker med tilhørende felter<br />

Huskelister<br />

Kartotek – Navn<br />

Kartotek – Feltbehandling<br />

Beskrivelse<br />

Der skal oprettes to nye kartoteker til registrering af udlånte varer.<br />

Registreringen skal foregå på samme måde, som når der oprettes salgsordrer i C5, idet der skal være ét<br />

kartotek til ordrehoveder og ét til ordrelinjer.<br />

Kartoteket til ordrehovederne skal hedde UDLUdlånsKart, og kartoteket til ordrelinjerne skal hedde<br />

UDLUdlånsPost.<br />

Navngivningen følger kodestandarden for nye moduler og kartoteker. Modulet er UDLÅN og de tre<br />

første bogstaver indsættes foran hvert kartoteksnavn.<br />

Kartoteket UDLUdlånsKart<br />

Kartoteksnavn Type Specielt Lgd Feltnavn Udfyld<br />

under<br />

rettelse<br />

UDLUdlånsKart Int Absolut UdlånsNr Nej<br />

Str Højrestillet 10 DebitorKto Nej<br />

Date UdlånsDato ?<br />

Enum UDLUdlåns-type UdlånsType * ?<br />

Str Venstrestillet 25 KontaktPerson ?<br />

Date ReturDato ?<br />

Real Absolut Forsikringssum ?<br />

* Fastteksttypen til feltet UdlånsType er den nyoprettede fasttekst med navnet UDLUdlånstype.<br />

127<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />


Kartoteket UDLUdlånspost<br />

Kartoteks-navn Type Specielt Lgd Feltnavn Udfyld<br />

under<br />

rettelse<br />

UDLUdlånsPost Int Absolut UdlånsNr Nej<br />

Str Venstrestillet 10 VareNr Ja<br />

Str Venstrestillet 30 VareNavn Nej<br />

Str Venstrestillet 10 SerieNr Ja<br />

Enum UDLUdlåns-<br />

Status<br />

Status * Ja<br />

Str Højrestillet 10 DebitorKto Nej<br />

* Fastteksttypen til feltet Status er den nyoprettede fasttekst med navnet UDLUdlånsStatus.<br />

Forløb √<br />

1 Følg huskelisten hvis du ikke ved hvordan, der oprettes kartoteker.<br />

2 Under oprettelsen af felterne i kartotekerne, skal du kun indtaste de informationer,<br />

der er vist i ovenstående skemaer. Resten skal være blanke eller er automatisk<br />

udfyldt med default informationer.<br />

3 Opret først kartoteket ’UDLUdlånsKart’ og indsæt felterne iflg. ovenstående skema.<br />

4 Opret derefter kartoteket ’UDLUdlånsPost’ og indsæt felterne iflg. ovenstående<br />

skema.<br />

5 Du kan evt. indtaste ledetekster og hjælpetekster, hvis du ønsker det, og der er tid til<br />

det.<br />

128<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />


Opgave 3: Dokumentation<br />

Mål med opgaven<br />

At udskrive dokumentation på kartotekerne<br />

Huskelister<br />

Kartotek – Dokumentation<br />

Beskrivelse<br />

Efter oprettelse af de to kartoteker med felter, skal der udskrives dokumentation på dem og det skal<br />

kontrolleres, at alt er oprettet korrekt.<br />

Forløb √<br />

1 Inden udskrivning af dokumentationen skal du, i begge kartoteker, vælge feltet<br />

LøbeNummer og indtaste dit navn i hjælpeteksten<br />

2 Dette er kun for, at du kan kende din dokumentation fra de andre kursisters, når den<br />

udskrives på printeren<br />

3 Følg huskelisten hvis du ikke kan huske hvordan, der udskrives dokumentation på<br />

kartotekerne<br />

4 Udskriv dokumentation for kartotekerne på printeren<br />

5 Kontrollér at kartotekerne er rigtigt oprettet<br />

129<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


15. Indexer<br />

Mål med lektionen<br />

Formålet med denne lektion er at lære deltagerne at oprette og navngive indexer i kartoteker.<br />

Efter lektionen skal kursisterne kunne:<br />

Oprette og navngive nye Index.<br />

Indexer generelt<br />

Index oprettes og vedligeholdes i de kartoteker de tilhører.<br />

C5 leveres med index til de eksisterende kartoteker, men der kan oprettes flere nye, hvis der opstår<br />

behov for det. Der kan således være flere index til hvert kartotek. De oprindelige index kan ikke slettes,<br />

men de kan ændres.<br />

Det anbefales ikke at foretage ændringer i eksisterende index, da det kan give uforudsigelige følger.<br />

Hvis der er behov for det, er det bedre at oprette nye index.<br />

Anvendelse af indexer<br />

Index anvendes til forskellige formål f.eks.:<br />

Sortering af kartoteker<br />

Kontrol af nøgleværdier<br />

Sortering af skærmbilleder<br />

Sortering af listbilleder<br />

Direkte opslag<br />

Nedenstående er en kort introduktion til de forskellige anvendelsesmuligheder.<br />

Mulighederne behandles nærmere i lektioner om de forskellige emner, når der er naturligt behov for<br />

dette.<br />

Sortering af kartoteker i rapporter og XAL kørsler<br />

Indexer giver mulighed for hurtig sortering og fremfinding af poster, idet de peger hen til de enkelte<br />

poster i databasen i den orden, der er angivet i indexet.<br />

Kontrol af nøgleværdier ved oprettelse i skærm- og listbilleder<br />

Et index kan benyttes til, at kontrollere om der må oprettes flere poster med samme nøgleværdier. Om<br />

der f.eks. må oprettes to personer med samme personnummer, eller to kunder med samme<br />

kundenummer.<br />

Sortering af skærmbilleder<br />

Når der skal bladres i poster i skærmbilleder, eller poster skal listes i skærmbilleder, der kan vise flere<br />

poster ad gangen, benytter forms automatisk det først oprettede index som default, hvis der ikke<br />

angives andet.<br />

Mangler index kan der kun søges fortløbende, dvs. i den rækkefølge posterne blev indtastet.<br />

130<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Sortering af listbilleder<br />

Ved kald af et listbillede vil systemet forsøge at finde et index med det aktuelle felt som første<br />

komponent. Hvis det findes vil dette index blive benyttet til sortering af listbilledet.<br />

Hvis det ikke findes, bliver det først oprettede index brugt.<br />

Hvis der slet ikke er nogen Index, benyttes posternes indtastningsrækkefølge.<br />

Direkte opslag<br />

Hvis der skal hentes værdier fra et andet kartotek, end det der aktuelt benyttes, kan dette gøres med et<br />

direkte opslag og et index.<br />

Oprettelse af Index<br />

Index oprettes i udviklingsmenuen under DBD/Ret/Kerne/’Vælg et kartotek’/<br />

Indexbehandling/Opret.<br />

Index oprettes ved at angive følgende feltværdier.<br />

Felter der udfyldes ved oprettelse af Index<br />

Felt Betydning<br />

Indexnavn For indexnavne gælder de samme regler som for felter. Felter og<br />

Index må dog ikke have sammenfaldene navne.<br />

Index navngives ofte ud fra de felter de består af, og afsluttes som<br />

regel med bogstaverne Idx. Se nedenstående eksempler.<br />

Ens nøgler tilladt Indexet styrer hvorvidt, der må være flere poster med samme<br />

nøgleværdier.<br />

Hvis der ikke må være flere debitorer med samme kontonummer,<br />

skal der være et index med kontonummer som eneste komponent<br />

og med ’NEJ’ i feltet: ”Ens nøgler tilladt”.<br />

Hvis der derimod skal være mulighed for at sortere debitorerne i<br />

navneorden, skal der også være et index i navneorden. Da der gerne<br />

må være flere debitorer med samme navn, skal indexet have ’JA’ i<br />

feltet: ”Ens nøgler tilladt”.<br />

Er indexet aktivt Aktive Index vedligeholdes automatisk af systemet.<br />

Et index kan slås fra, så det ikke længere er aktivt, og ikke skal<br />

vedligeholdes mere.<br />

Så snart indexet slås til igen, bliver det automatisk ajourført.<br />

Det skal bemærkes, at jo flere Index der er aktive, jo mere tid skal C5<br />

bruge til at vedligeholde dem.<br />

Beskrivelse af index Beskrivelsen (indexformlen) består af kartoteksfelter adskilt med<br />

komma.<br />

Indexet kan sorteres stigende (ASCEND) eller faldende (DESCEND).<br />

Tekstfelter kan sorteres ud fra et valgt antal tegn i feltet startende fra<br />

venstre mod højre.<br />

Der kan indsættes kommentarer i indexformler.<br />

Se nedenstående eksempler på indexformler.<br />

131<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Navngivning og indexformel<br />

Index navngives ofte ud fra de felter de består af og afsluttes som regel med bogstaverne Idx.<br />

Åbnes nogle af de index der findes i nuværende C5 kartoteker, ses at der er brugt mange forskellige<br />

måder at navngive på.<br />

C5 vers. 2012 -> Eksempler på indexnavne<br />

IndexNavn Felter i Indexformel<br />

AccountIdx Account<br />

AcDateIdx Account, Budgetcode, Date_, Department, RowNumber<br />

C5 vers. -> 4.1 Eksempler på indexnavne<br />

IndexNavn Felter i Indexformel<br />

KontoIdx Konto<br />

KtoDatoIdx Konto, BudgetKode,Dato,LøbeNummer<br />

C5 vers. 2012 -> Eksempler på indexformler<br />

IndexNavn Felter i Indexformel<br />

AccountIdx Account ASCEND<br />

AccDateIdx Account ASCEND, Date_ DESCEND<br />

NameIdx Name DESCEND 3 {Name faldende 3 tegn}<br />

C5 vers. -> 4.1 Eksempler på indexformler<br />

IndexNavn Felter i Indexformel<br />

KontoIdx Konto ASCEND<br />

KtoDatoIdx Konto ASCEND, Dato DESCEND<br />

NavnIdx Navn DESCEND 3 {Navn faldende 3 tegn}<br />

Index med tekstfelter<br />

Hvis et tekstfelt, der har et talindhold, skal indgå i et index og sorteringen skal ske i forhold til<br />

talindholdet, som f.eks. kontofeltet debitorkartoteket, er det vigtigt at feltet er højrestillet.<br />

En højrestilling af feltet betyder således, at eventuelle blanke tegn altid placeres til venstre og værdien<br />

af feltet placeres til højre.<br />

Hvis feltet er venstrestillet, kan indholdet ikke behandles som en talværdi, men vil blive behandlet som<br />

en tekst, hvilket umuliggør en korrekt sortering i både stigende og faldende nummerorden.<br />

(Medmindre længden og sammensætningen af alle tal og tegn er ens for alle poster.)<br />

Navngivning af Index i nye moduler<br />

Nye moduler der kodes til C5 af andre end Microsofts egne udviklere, skal overholde følgende syntaks<br />

for navngivning af Index.<br />

Syntaks<br />

132<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Eksempel<br />

<br />

Indexnavn startes således med modulnavnets tre første bogstaver skrevet med STORT efterfulgt navn<br />

på index. Navn på index skal desuden altid bestå af de tre første tegn af de indgående felters navne,<br />

hvor første tegn skrives med stort. Afslut navnet med Idx.<br />

BOODesLanHotIdx<br />

I eksemplet er der f.eks. oprettet et Booking modul til et rejsebureau og der er oprettet et kartotek<br />

med felterne: Destination, Land, Hotel osv.<br />

Et index med ovenstående felter kommer derfor til at hedde BOODesLanHotIdx.<br />

Navn på index må højst være 16 tegn. Det kan sagtens være længere, men der kan så opstå<br />

uforudsigelige situationer.<br />

Ovenstående navngivning SKAL overholdes, hvis modulet skal certificeres af Microsoft.<br />

133<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Index<br />

Opgave 1: Index<br />

Mål med opgaven<br />

At oprette Index på kartoteker.<br />

Huskelister<br />

Kartotek – Index<br />

Beskrivelse<br />

Der skal oprettes Index til de nye kartoteker, så posterne kan styres ordentligt.<br />

Indexet til ordrehovedet skal styre, at der ikke må findes to ordrer med samme ordrenummer, og at der<br />

ikke må være to ordrer af samme type på samme dag til samme kunde.<br />

Indexet til udlånsposterne styrer, at der gerne må være flere linjer med samme varenummer på den<br />

samme ordre.<br />

Index til UDLUdlånsKart<br />

Indexnavn Ens nøgler Aktivt Beskrivelse af index (felter) √<br />

UDLDebDatTypIdx NEJ JA DebitorKto<br />

UdlånsDato<br />

UdlånsType<br />

UDLUdlIdx NEJ JA UdlånsNr<br />

UDLDebUdlIdx Nej JA DebitorKto<br />

Index til UDLUdlånsPost<br />

UdlånsNr<br />

Indexnavn Ens Nøgler Aktivt Beskrivelse af index (felter) √<br />

UDLUdlVarIdx JA JA UdlånsNr<br />

VareNr<br />

Forløb √<br />

1 Følg huskelisten hvis du ikke ved hvordan, der oprettes Index på kartoteker.<br />

2 Opret først Index på kartoteket UDLUdlånsKart iflg. skemaet<br />

3 Opret derefter indexet på kartoteket UDLUdlånsPost iflg. skemaet<br />

134<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgave 2: Dokumentation<br />

Mål med opgaven<br />

At udskrive dokumentation på kartotekerne til indexkontrol.<br />

Huskelister<br />

Kartotek – Dokumentation<br />

Beskrivelse<br />

Efter oprettelse af Index, skal der udskrives dokumentation på kartotekerne, og det skal kontrolleres, at<br />

Indexne er oprettet korrekt.<br />

Forløb √<br />

1 Inden udskrivning af dokumentationen skal du i begge kartoteker gå ind i feltet<br />

LøbeNummer og indtaste dit navn i hjælpeteksten.<br />

Dette er kun for, at du kan kende din dokumentation fra de andre kursisters, når<br />

den udskrives på printeren.<br />

2 Følg huskelisten hvis du ikke ved hvordan, der udskrives dokumentation på<br />

kartotekerne.<br />

3 Udskriv dokumentation for kartotekerne på printeren.<br />

4 Kontrollér at Indexne er rigtigt oprettet.<br />

135<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


16. Listbilleder<br />

Formål med lektionen<br />

Formålet med denne lektion er at lære deltagerne at oprette og anvende listbilleder.<br />

Efter lektionen skal kursisterne kunne:<br />

Oprette listbilleder<br />

Anvende listbilleder via udviklingsmenuen<br />

Oprette kartoteks- og feltreferencer<br />

Kalde listbilleder via referencer på kartoteksfelter.<br />

Listbilleder generelt<br />

Et listbillede er et hjælpebillede i form af en liste over poster i ét kartotek.<br />

C5 leveres med færdige listbilleder, der er oprettet i forvejen til forskellige kartoteker, men der kan<br />

oprettes flere listbilleder efter behov.<br />

Anvendelse<br />

Listbilleder kan i skærmbilleder eller i andre listbilleder kaldes med ALT+H via referencefelt i<br />

databasen, og feltværdien kan overføres til det felt, der blev kaldt fra.<br />

Listbilleder kan også anvendes fra udviklingsmenuen til oprettelse, ændring og sletning af poster<br />

direkte i databasen.<br />

Oprettelse af listbilleder<br />

Listbilleder oprettes i udviklingsmenuen, i søjlen LST, hvor der først vælges, hvilket kartotek listbilledet<br />

skal oprettes til. Der kan være flere listbilleder til hvert kartotek.<br />

Billederne oprettes ved at åbne for et indtastnings billede til opsætning af listbilledets vindue. Dette<br />

billedet indeholder en del felter, der udfyldes med informationer om størrelse, farve osv. iflg.<br />

nedenstående skema.<br />

I realiteten er det nok at angive, hvad billedet skal hedde i feltet ’Søgenavn i liste’, og så indsætte de<br />

felter der skal vises på billedet.<br />

De øvrige felter udfyldes efter behov.<br />

Opsætning af listbilledets vindue<br />

Felt Betydning<br />

Søgenavn i liste Navn der kendetegner listbilledet fremover og som der søges på i<br />

processer og menuer.<br />

Når billedet go<strong>dk</strong>endes, gemmes det som en brugertilretning, og navnet<br />

foranstilles med et $ tegn.<br />

Tekst i rammen Tekst der vises i vinduets ramme under afvikling.<br />

Vinduets højde /<br />

bredde<br />

Vinduets højde i antal linjer og bredde i antal kolonner.<br />

Felterne indeholder defaultværdier, der kan ændres efter behov.<br />

Farvesæt Standard anvendes altid farvesæt 2.<br />

136<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Vindue Angivelse af hvorledes vinduet skal vises på skærmen.<br />

Indsætning af felter<br />

Fast<br />

(default)<br />

Den angivne vinduesstørrelse benyttes.<br />

Vinduet kan kun skaleres ned. Felter flyttes ikke.<br />

Skalerbart Den angivne vinduesstørrelse benyttes.<br />

Vinduet kan skaleres både op og ned.<br />

Felter flyttes automatisk ved autogenererede blokke, dvs.<br />

multi record blokke og ikke ved enkelt record blokke.<br />

Dynamisk Fylder hele skærmbilledet som default uanset angivet<br />

vinduesstørrelse. Virker ellers som skalérbart.<br />

Lukket Lukker af for aktivering af form (trigger kode kan dog<br />

fortsat afvikles).<br />

Nedarvet Arbejder skjult i det øjeblikkelige vindue.<br />

Dette benyttes ikke standard i applikationen.<br />

Felterne indsættes på billedet via en tabel. De vises i samme rækkefølge som i denne tabel.<br />

Det er muligt at ændre opsætningen af de enkelte felter i listbilledet. Tekstfelter kan f.eks. ændres i<br />

længden og kommatalsfelter kan formateres på forskellige måder.<br />

Et listbillede til debitorkartoteket kunne f.eks. bestå af felterne i nedenstående tabel, og indtastet i<br />

samme rækkefølge:<br />

C5 vers. 2012 -> Eksempel på felter i listbilledet til CustTable<br />

Feltnavn<br />

Account<br />

Name<br />

Phone<br />

C5 vers. -> 4.1 Eksempel på felter i listbilledet til DebKart<br />

Feltnavn<br />

Konto<br />

Navn<br />

Telefon<br />

137<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Resultatet<br />

Listbilledet viser felterne i samme rækkefølge som i opsætningen.<br />

Hvis felterne indtastes i modsat rækkefølge i opsætningen, vises de også i modsat rækkefølge i<br />

listbilledet dvs. Telefon, Navn og Kontonummer.<br />

Navngivning af listbilleder<br />

Listbilleder navngives i ’Opsætning af vindue’ i feltet ’Søgenavn i liste’.<br />

Billederne kan kaldes hvad som helst, men det kan være en fordel at give billederne samme navne som<br />

et af felterne i kartoteket.<br />

Ofte gives billedet samme navn, som det felt der refereres til når der tastes ALT+H.<br />

Betydningen af at give billedet det rigtige navn fremgår af afsnittet ’Kald via kartoteks- og<br />

feltreferencer’. Her vises desuden hvad der sker, hvis listbillederne har andre navne.<br />

Kald fra udviklingsmenuen<br />

Listbilleder kan kaldes direkte fra udviklingsmenuen og afvikles i forskellige tilstande, alt efter hvilken<br />

funktion der skal udføres.<br />

Listbilleder kan således anvendes til afprøvning af kartoteker, idet der kan manipuleres med data<br />

direkte i det tilhørende kartotek.<br />

Funktioner i udviklingsmenuen<br />

Funktion Muligheder<br />

Vis Vise<br />

Ret Vise, rette<br />

Opret Vise, rette, oprette<br />

Slet Vise, rette, oprette, slette<br />

Debitorer<br />

Kontonummer Navn Telefon<br />

138<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Bemærk!<br />

Kald af listbilleder i udviklingsmenuen med ovenstående funktioner, bør ikke anvendes i driften.<br />

Eventuelle inddatakontroller, der er indbygget i skærmbilleder, fungerer ikke i listbilleder.<br />

Data manipuleres direkte i kartoteket.<br />

Kald via kartoteks- og feltreferencer<br />

Listbilleder kan også kaldes fra skærmbilleder og fra andre listbilleder via feltreferencer på<br />

kartoteksfelter i databasen.<br />

Referencerne indsættes i opsætningen af databasefelter i felterne referencekartotek og referencefelt.<br />

Der kan både refereres til andre kartoteker og felter, og til samme kartotek og felt.<br />

Kartoteks- og feltreferencer<br />

Referencekartotek...:<br />

Referencefelt.......:<br />

Bemærk!<br />

Ved kald af listbilleder via feltreferencer kan der kun vises og overføres feltværdier. Der kan ikke<br />

oprettes, rettes og slettes, som ved kald fra udviklingsmenuen.<br />

Opslag med ALT+H fungerer kun på felter med referencer.<br />

Kald af listbillede via referencefelter<br />

Skærmbillede (form)<br />

Felt ABC<br />

Opsætning af databasefelt<br />

ALT+H<br />

B<br />

Listbilledet med samme navn som<br />

reference felt vises<br />

Opsætning på felt ABC i<br />

kartoteket til formen<br />

Ref. Kartotek: Xyz<br />

Referencefelt: B<br />

Listbillederne A, B, C, D i<br />

reference kartoteket Xyz<br />

139<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

A<br />

B<br />

C<br />

D


Automatisk valg af listbillede<br />

Hvis kartoteket, der refereres, til har et listbillede med samme navn som selve referencefeltet, aktiveres<br />

listbilledet i samme øjeblik, der tastes ALT+H.<br />

Findes der ikke et listbillede med samme navn som referencefeltet, vises der først en pickliste med de<br />

eksisterende listbilleder, også hvis der kun findes ét listbillede.<br />

Fra picklisten vælges det billede der skal åbnes.<br />

Sortering af poster i listbillede<br />

Sorteringsrækkefølgen af posterne i listbilledet afhænger af index som flg.:<br />

Hvis der på referencekartoteket er et index med referencefeltet som første komponent, benyttes<br />

dette index.<br />

Hvis der ikke på referencekartoteket er et index med referencefeltet som første komponent,<br />

benyttes det først oprettede index.<br />

Hvis der slet ikke er noget index på referencekartoteket, benyttes indtastningsrækkefølgen.<br />

Værdien i referencefeltet overføres fra den post cursoren står på i listbilledet, også selv om feltet ikke<br />

vises i listbilledet.<br />

140<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Listbilleder<br />

Opgave 1: Kartoteks- og feltreferencer<br />

Mål med opgaven<br />

At indsætte referencer på kartoteksfelter.<br />

Huskelister<br />

Kartotek – Feltbehandling (referencer)<br />

Beskrivelse<br />

Der skal oprettes kartoteks- og feltreferencer på de nye kartoteker, så der kan vises og overføres<br />

feltværdier til listbilleder og skærmbilleder.<br />

Feltreferencer på UDLUdlånsKart<br />

Kartotek Felt Referencekartotek Referencefelt √<br />

UDLUdlånsKart UdlånsNr UDLUdlånsKart UdlånsNr<br />

Feltreferencer på UDLUdlånsPost<br />

DebitorKto CustTable Account<br />

Kartotek Felt Referencekartotek Referencefelt √<br />

UDLUdlånsPost UdlånsNr UDLUdlånsKart UdlånsNr<br />

VareNr InvenTable ItemNumber<br />

VareNavn InvenTable ItemName1<br />

DebitorKto CustTable Account<br />

Forløb √<br />

1 Åben de to kartoteker og indsæt kartoteks- og feltreferencer på felterne iflg.<br />

ovenstående skemaer.<br />

141<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgave 2: Listbillede til UDLUdlånsKart<br />

Mål med opgaven<br />

At oprette et listbilleder samt afprøve om indexene fungerer.<br />

Huskelister<br />

Listbillede – Opret<br />

Beskrivelse<br />

Der skal oprettes et listbillede til UDLUdlånsKart som vist herunder.<br />

Forløb √<br />

1 Følg huskelisten hvis du ikke kan huske hvordan, der skal oprettes listbilleder.<br />

2 Opret et listbillede til kartoteket UDLUdlånsKart efter ovenstående eksempel.<br />

Opsætning af vinduet<br />

Bredde = 50 tegn, Farvesæt = 1, Vindue = Skalérbart.<br />

Felter<br />

UdlånsKart<br />

UdlånsNr DebitorKto UdlånsDa UdlånsType<br />

Kontaktperson ReturDat Forsikr<br />

Indsæt alle de felter du selv oprettede i kartoteket.<br />

3 Opret forskellige udlånsordrer med hver sin debitorkonto.<br />

4 Afprøv om indexet UDLUdldx fungerer ved at indtaste et udlånsnummer, der findes<br />

i forvejen. Det må du ikke kunne, da indexet er entydigt.<br />

5 Afprøv om indexet UDLDebDatTypIdx fungerer ved at indtaste en ny ordre, der har<br />

samme DebitorKonto, UdlånsDato og UdlånsType. Det må du ikke kunne, da index<br />

er entydigt.<br />

6 Prøv også om fastteksten fungerer i feltet UdlånsType.<br />

7 Prøv at finde datoerne med ALT+H.<br />

142<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgave 3: Listbillede til UDLUdlånsPost<br />

Mål med opgaven<br />

At oprette et listbilleder samt afprøve om index fungerer.<br />

Huskelister<br />

Listbillede – Opret<br />

Beskrivelse<br />

Der skal oprettes et listbillede til UDLUdlånsPost som vist herunder:<br />

Forløb √<br />

1 Opret et listbillede til kartoteket UDLUdlånsPost efter ovenstående eksempel.<br />

Opsætning af vinduet<br />

Bredde = 50 tegn, Farvesæt = 1, Vindue = Skalérbart.<br />

Felter<br />

UdlånsPost<br />

UdlånsNr VareNr VareNavn<br />

SerieNr Status DebitorKto<br />

Indsæt alle de felter du selv oprettede i kartoteket.<br />

2 Opret nogle udlånslinjer på forskellige udlånsnumre.<br />

3 Afprøv om index UDLUdlVarIdx fungerer ved at indtaste et af de udlånsnumre der<br />

findes i forvejen og med samme varenummer. Det skal du kunne, da indexet ikke er<br />

entydigt.<br />

4 Prøv at skifte mellem farvesæt 1 og 2 i opsætning af listbilledet.<br />

143<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


17. Formens vindue<br />

Formål med lektionen<br />

Formålet med denne lektion er at lære kursisterne at oprette formens vindue og forstå opbygningen af<br />

forms (skærmbilleder). Desuden lærer de at anvende macroer til styring af forms.<br />

Efter lektionen skal kursisterne kunne:<br />

Oprette formens vindue<br />

Indsætte macroer i triggerne INIT, ERROR og PRE-FORM<br />

Forstå og anvende macroerne #MacroLoad(), #FormError, #Frm_Index(), #Frm_Search() og<br />

#SearchEnd()<br />

Skærmbilleder generelt<br />

Skærmbilleder i C5 kaldes også ’forms’. De oprettes og vedligeholdes i udviklingsmenuen i søjlen FRM.<br />

En form består af ét vindue, en eller flere blokke og felter.<br />

Blokke kan indsættes i vinduet som vist herunder.<br />

Blokke i forms<br />

Én blok med én post repræsenteret ved et antal felter<br />

Én blok med flere poster repræsenteret ved felter i kolonner<br />

Flere blokke af ovennævnte typer<br />

Formens opbygning<br />

Blok med<br />

én post i<br />

felter<br />

Blok med<br />

flere poster i<br />

kolonner<br />

Formens vindue<br />

Formens vindue er altid det første, der sættes op.<br />

Ved opsætningen vises der et skærmbillede med en del felter, der kan udfyldes. Det er dog ikke alle<br />

felter, der behøver at blive udfyldt, da de indeholder defaultværdier, der kan anvendes, som de er.<br />

De vigtigste felter fremgår af nedenstående skema.<br />

Formens<br />

Vindue<br />

Felter<br />

144<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opsætning af vindue (vigtigste felter)<br />

Felt Betydning<br />

Søgenavn i liste Navn der kendetegner formen fremover, og som der søges på i<br />

processer og menuer.<br />

Når formen go<strong>dk</strong>endes, bliver den gemt som en brugertilretning, og<br />

navnet foranstilles med et $ tegn.<br />

Tekst i rammen Tekst der vises i vinduets ramme under afvikling.<br />

Vinduets højde /<br />

bredde<br />

Vinduets højde i antal linjer og bredde i antal kolonner. Felterne<br />

indeholder defaultværdier, der evt. kan ændres efter behov.<br />

Farvesæt Standard anvendes altid farvesæt 2.<br />

Vindue Angivelse af hvorledes vinduet skal vises på skærmen.<br />

Fast<br />

(default)<br />

Angivne vinduesstørrelse benyttes.<br />

Vinduet kan kun skaleres ned. Felter flyttes ikke.<br />

Skalerbart Angivne vinduesstørrelse benyttes.<br />

Vinduet kan skaleres både op og ned.<br />

Felter flyttes automatisk ved autogenererede multi<br />

record blokke, men ikke ved enkelt record blokke.<br />

Dynamisk Fylder hele skærmbilledet som default uanset angivet<br />

vinduesstørrelse. Virker ellers som skalérbart.<br />

Lukket Lukker af for aktivering af form (trigger kode kan dog<br />

fortsat afvikles)<br />

Nedarvet Arbejder skjult i det øjeblikkelige vindue.<br />

Dette benyttes ikke standard i applikationen<br />

Forms formler Triggere i form af XAL editorbokse. Anvendes til indtastning af XAL<br />

kode til styring af forms og deres poster.<br />

Triggere (forms formler) generelt<br />

Det er muligt selv at styre en forms funktion ved at indtaste XAL-kode og specielle forms kontrol<br />

kommandoer i triggere i formen.<br />

Triggere er almindelige XAL editorbokse, der kan åbnes rundt omkring, i de tre niveauer forms består<br />

af, som vist i nedenstående illustration.<br />

145<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Formens tre niveauer med triggere dvs. formler<br />

Indholdet i triggerne eksekveres på bestemte tidspunkter under afviklingen af forms. De enkelte<br />

triggere behandles i lektionerne, efterhånden som der bliver behov for dem.<br />

I denne lektion behandles nogen af de triggere (form formler), der findes under opsætning af formens<br />

vindue.<br />

Triggere i ’Opsætning af vinduet’<br />

Triggere i forms er som tidligere omtalt XAL editorbokse, hvori der kan indtastes kode, der kan styre<br />

formens forskellige funktioner efter programmørens ønsker.<br />

Under ’Opsætning af vinduet’ findes der nogle triggere, der f.eks. kan anvendes til fejlhåndtering og<br />

styring af poster i forms.<br />

Triggere i vinduet<br />

Felter<br />

Felt<br />

formler<br />

Blokke<br />

Blok<br />

formler<br />

Vindue<br />

Vindue<br />

Form<br />

formler<br />

Init<br />

Form<br />

formler<br />

Pre-form<br />

Error<br />

146<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Triggerne i opsætning af vinduet (i denne lektion)<br />

Trigger Eksempler på anvendelse<br />

Init Første trigger der gennemløbes når formen aktiveres.<br />

Anvendes bl.a. til kald af macro biblioteker<br />

Error Indsættelse af macroen #FormError til fejlhåndtering<br />

Pre-form Gennemløbes lige efter Init triggeren.<br />

Forms kontrolkommandoer og macroer<br />

Angivelse af index til sortering af poster i blokke.<br />

Angivelse af opslag på første eller sidste post i indexet.<br />

Funktionerne i forms kan styres med specielle forms kontrolkommandoer i de forskellige triggere der<br />

findes i vinduet, blokkene og felterne.<br />

Forms kontrolkommandoer<br />

Der findes en mængde forskellige forms kontrolkommandoer. Kommandoerne anvendes som vist i<br />

nedenstående syntaks.<br />

Syntaks for kontrolkommando<br />

Control ” ”<br />

Bemærk at kommandoerne startes med ordet Control efterfulgt af selve kommandoen i citationstegn.<br />

Desuden anvendes der forskellige parametre afhængigt af, hvilken kommando det drejer sig om.<br />

Parametrene skrives blot efter hinanden adskilt med et mellemrum.<br />

Da kommandoernes syntaks først kontrolleres når formen afvikles, er der udarbejdet nogle macroer til<br />

erstatning for dem.<br />

Kommandoerne kan stadig anvendes, men macroerne er bedre at bruge, idet de syntakscheckes<br />

allerede under indtastningen.<br />

Macroer<br />

Macroerne angives med en anden syntaks en kommandoerne.<br />

Syntaks for kontrolmacro<br />

#Frm_(, )<br />

I syntaksen startes macroer med ordet #Frm_. Straks efter understregen angives selve kommandoen.<br />

De forskellige parametre angives herefter i en parentes adskilt med kommaer.<br />

147<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. 2012 -> Sammenligning mellem kontrolkommando og -macro<br />

Control ”Index InvenTable ItemIdx”<br />

#Frm_Index(InvenTable, ItemIdx)<br />

C5 vers. -> 4.1 Sammenligning mellem kontrolkommando og -macro<br />

Control ”Index LagKart VareIdx”<br />

#Frm_Index(LagKart, VareIdx)<br />

Ovenstående eksempel viser opstillingen af kommandoen Index sammenlignet med den tilsvarende<br />

macro.<br />

De to linjer i eksemplet udfører således akkurat det samme. I denne og de efterfølgende lektioner<br />

anvendes macroerne.<br />

Kontrolkommandoer og -macroer i denne lektion<br />

Kontrolkommando Kontrolmacro<br />

Control ”Index”<br />

Control ”Search”<br />

Control ”SearchTop”<br />

Control ”SearchEnd”<br />

#Frm_Index()<br />

#Frm_Search()<br />

#Frm_SearchTop()<br />

#Frm_SearchEnd()<br />

Ovenstående macroer behandles efterfølgende.<br />

#MacroLoad()<br />

Macroen #MacroLoad() anvendes til at åbne for macrobiblioteker, så der opnås adgang til deres<br />

macroer.<br />

Af syntaksen fremgår det, at der i paranteserne til macroen skal angives navn på det kartotek, der skal<br />

åbnes (loades).<br />

Syntaks<br />

#MacroLoad(biblioteksnavn)<br />

Macroen anvendes både i XAL kørsler, rapporter og forms.<br />

148<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Eksempel<br />

Der findes mange forskellige macrobiblioteker i XAL sproget. Nogle er dedikeret til specielle formål,<br />

hvilket ofte fremgår af bibliotekets navn.<br />

Macroer der kun anvendes i forms, er f.eks. samlet i et bibliotek med navnet FORMS.<br />

Trigger<br />

Macroen indsættes altid i starten af XAL kørsler, rapporter og forms.<br />

I forms indsættes macroen således i den trigger, der gennemløbes allerførst, når formen aktiveres.<br />

Dette er triggeren med navnet INIT, der står for initialisering.<br />

Trigger Macroer<br />

Init<br />

Eksempel<br />

#FormError<br />

#MacroLoad(FORMS)<br />

Macroen #FormError anvendes til udskrivning af fejlmeddelelser i en boks på skærmen.<br />

Fejlmeddelelserne i boksen er mere sigende, end de fejlmeddelelser der normalt vises på den nederste<br />

linje i skærmbilledet.<br />

Meddelelserne dukker mest op, når der skrives fejl i kommandoer i triggerne, idet disse kommandoer<br />

først syntakscheckes og fejlkontrolleres, når formen afvikles.<br />

Macroen angives som følger uden nogen form for parametre.<br />

Syntaks<br />

#FormError<br />

Trigger<br />

Macroen indsættes altid i triggeren Error.<br />

Trigger Macroer<br />

Error<br />

#Frm_Index()<br />

#FormError<br />

Når der bladres i posterne i en enkelt record blok i en form, sorteres de efter et bestemt index. Dette<br />

gælder også, når posterne vises i en multi record blok.<br />

I macroen #Frm_Index() angives navnet på det index, der skal benyttes.<br />

149<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Syntaks<br />

#Frm_Index(, )<br />

Bemærk!<br />

Første parameter er altid bloknavne, aldrig kartoteksnavne.<br />

Anden parameter er navn på index, der sorteres efter. Indexet skal tilhøre det kartotek, der er knyttet til<br />

blokken.<br />

Trigger<br />

Macroen indsættes som regel i triggeren Pre-Form.<br />

C5 vers. 2012 -> Eksempel<br />

Trigger Macroer<br />

Pre-Form<br />

#Frm_Index(ItemTable, ItemIdx)<br />

I dette eksempel anvendes blokken ItemTable og index ItemIdx. Husk at indexet tilhører det kartotek,<br />

der er tilknyttet blokken, men at det alligevel er blokkens navn, der skal angives som parameter til<br />

macroen.<br />

C5 vers. -> 4.1 Eksempel<br />

Trigger Macroer<br />

Pre-Form<br />

#Frm_Index(LagKart, VareIdx)<br />

I dette eksempel anvendes blokken LagKart og indexet VareIdx. Husk at indexet tilhører det kartotek,<br />

der er tilknyttet blokken, men at det alligevel er blokkens navn, der skal angives som parameter til<br />

macroen.<br />

Manglende index<br />

Angives der ikke et index i Pre-Form triggeren, benyttes som default det først oprettede index. Findes<br />

der ikke noget index vises posterne i indtastnings-rækkefølgen.<br />

#Frm_Search()<br />

Det kan angives om visningen eller bladringen i forms, skal starte på første eller sidste post, i det index<br />

der angives i macroen #Frm_Index().<br />

Macroen #Frm_Search() angiver at der startes på den første post.<br />

Syntaks<br />

#Frm_Search()<br />

I syntaksen er det igen blokkens navn, der angives som parameter.<br />

Trigger<br />

150<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Macroen indsættes som regel i triggeren Pre-Form under macroen #Frm_Index().<br />

C5 vers. 2012 -> Eksempel<br />

Trigger Macroer<br />

Pre-Form<br />

C5 vers. -> 4.1 Eksempel<br />

Trigger Macroer<br />

Pre-Form<br />

#Frm_Index(ItemTable, ItemIdx)<br />

#Frm_Search(ItemTable)<br />

#Frm_Index(LagKart, VareIdx)<br />

#Frm_Search(LagKart)<br />

Husk at det er blokkens navn, der angives som parameter og ikke kartoteksnavnet.<br />

#Frm_SearchTop()<br />

Macroen #Frm_SearchTop() har nøjagtig samme syntaks og funktion som #Frm_Search().<br />

#Frm_SearchEnd()<br />

Det kan angives om visningen eller bladringen i forms, skal starte på første eller sidste post, i det index<br />

der angives i macroen #Frm_Index().<br />

Macroen #Frm_SearchEnd() angiver at der startes på den sidste post.<br />

Syntaks<br />

#Frm_SearchEnd()<br />

I syntaksen er det igen blokkens navn, der angives som parameter.<br />

Trigger<br />

Macroen indsættes som regel i triggeren Pre-Form under macroen #Frm_Index().<br />

C5 vers. 2012 -> Eksempel<br />

Trigger Macroer<br />

Pre-Form<br />

C5 vers. -> 4.1 Eksempel<br />

Trigger Macroer<br />

Pre-Form<br />

#Frm_Index(ItemTable, ItemIdx)<br />

#Frm_SearchEnd(ItemTable)<br />

#Frm_Index(LagKart, VareIdx)<br />

#Frm_SearchEnd(LagKart)<br />

151<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Husk at det er blokkens navn, der angives som parameter og ikke kartoteksnavnet.<br />

Eksempel på fejlhåndtering og styring af poster i en form<br />

Nedenfor vises et samlet eksempel på macroer, der er nødvendige for at foretage fejlhåndtering og<br />

styring af poster i forms. Det er også vist, hvilke triggere macroerne bør anvendes i.<br />

C5 vers. 2012 -><br />

Triggere Macroer<br />

Init<br />

Pre-form<br />

Error<br />

C5 vers. -> 4.1<br />

#MacroLoad(FORMS)<br />

#Frm_Index(ItemTable, ItemIdx)<br />

#Frm_Search(ItemTable)<br />

#FormError<br />

Triggere Macroer<br />

Init<br />

Pre-form<br />

Error<br />

#MacroLoad(FORMS)<br />

#Frm_Index(LagKart, VareIdx)<br />

#Frm_Search(LagKart)<br />

#FormError<br />

Eksemplet kan kun anvendes til forms, der ikke er synkroniserede, idet synkroniserede forms kræver<br />

udfyldelse og kendskab til flere macroer og en af triggerne i blokke.<br />

Specielt vedr. triggerne Init og Pre-form<br />

Ovenfor vises den foreløbige anvendelse af triggerne Init og Pre-form.<br />

Anvendelsen af de to triggere svarer ikke helt til beskrivelsen i hjælpeteksten i de trykte manualer og<br />

på skærmen, idet teksten ikke indeholder nogen beskrivelse af triggeren Pre-form. Denne trigger er<br />

først kommet til senere, og beskrives i tillægget ’CONCORDE XAL til Windows & OS/2 Warp’ fra 1995<br />

på side 16.<br />

Generelt kan Init triggeren anvendes til styring af forms, og de kontrolkommandoer og -macroer der er<br />

omtalt ovenfor i forbindelse med Pre-form triggeren, kan udmærket anvendes i Init triggeren i stedet<br />

for.<br />

Bemærk: Ofte vil det dog være mere rigtigt at indsætte ovenstående kontrolkommandoer og macroer<br />

i Pre-form end i Init, idet Pre-form anvendes i Windows når en ’detail form’ eller en underform er<br />

’linked’ og kaldes fra en ’master form’ eller en hovedform. Se nærmere forklaring til dette i det nævnte<br />

tillæg.<br />

I denne og efterfølgende lektioner anvendes derfor altid triggeren Pre-form.<br />

152<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Bemærk: Er Init og Pre-form helt tomme kan brugerne uden videre oprette, rette og slette poster i<br />

formen, ligesom der kan bladres i posterne.<br />

Så tastes der det mindste i blot én af triggerne, forsvinder denne automatik, og det skal selv styre,<br />

hvordan posterne behandles i formen. Styringen udføres med de specielle forms kontrolkommandoer<br />

eller macroer, der er gennemgået i denne lektion.<br />

153<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Formens vindue<br />

Opgave 1: Formens vindue<br />

Formål med opgaven<br />

At oprette formens vindue og indsætte macroer til styring og fejlhåndtering.<br />

Huskelister<br />

Form – Vindue<br />

Beskrivelse<br />

Der skal oprettes et vindue til hver af de to kartoteker UDLUdlånsKart og UDLUdlånsPost. Desuden skal<br />

relevante triggere udstyres med macroer til styring og fejlhåndtering.<br />

1 Opret vinduet til formen UDLUdlånsKart.<br />

Forløb for UDLUdlånsKart √<br />

Giv den navnet UDLUdlånsKart, og bestem selv teksten i rammen.<br />

Størrelsen på vinduet skal være 10 høj 80 bred.<br />

2 Indsæt macro der kan åbne biblioteket FORMS.<br />

3 Indsæt macro der kan styre fejlhåndteringen i formen.<br />

4 Indsæt macro der kan styre hvilket index der skal anvendes.<br />

Benyt indexet UDLUdlIdx og bloknavnet UDLUdlånsKart.<br />

5 Indsæt macro der kan styre at der startes på den første post i det angivne index.<br />

Benyt bloknavnet UDLUdlånsKart.<br />

1 Opret vinduet til formen UDLUdlånsPost.<br />

Forløb for UDLUdlånsPost √<br />

Giv den navnet UDLUdlånsPost, og bestem selv teksten i rammen.<br />

Størrelsen på vinduet skal være 15 høj og 50 bred, der er default.<br />

Vinduet skal være skalérbart.<br />

2 Indsæt macro der kan åbne biblioteket FORMS.<br />

3 Indsæt macro der kan styre fejlhåndteringen i formen.<br />

4 Indsæt macro der kan styre hvilket index, der skal anvendes.<br />

Benyt indexet UDLUdlVarIdx og bloknavnet UDLUdlånsPost.<br />

5 Indsæt macro der kan styre, at der startes på den sidste post i det angivne index.<br />

Benyt bloknavnet UDLUdlånsPost.<br />

154<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


18. Enkelt record blok<br />

Mål med lektionen<br />

Formålet med denne lektion er at lære deltagerne, hvilken betydning blokke har i forms og hvordan<br />

disse oprettes. Desuden undervises i indsættelse af databasefelter i blokke.<br />

Efter lektionen skal kursisterne kunne:<br />

Oprette forms med én ’enkelt record blok’<br />

Indsætte almindelige databasefelter i blokken.<br />

Enkelt record blok generelt<br />

Enkelt record blokke anvendes, når der skal dannes skærmbilleder, hvori der kun skal vises én post eller<br />

record ad gangen.<br />

Blokken er det næste, der skal opsættes efter formens vindue.<br />

Blokke kan indeholde én eller flere records ad gangen. Denne lektion behandler blokke med én record.<br />

Opsætning af Enkelt record blok<br />

Blokke oprettes, mens formens vindue ses på skærmen.<br />

Ved oprettelsen åbnes vinduet ’Opsætning for blok’ der et indtastningsbillede med felter der beskriver<br />

blokken. Mange af felterne indeholder default værdier og behøver derfor ikke at udfyldes eller ændres.<br />

De vigtigste felter, der skal udfyldes ved opsætning af en enkelt record blok, fremgår af nedenstående<br />

skema.<br />

Felter i opsætning af blokke<br />

Felt Betydning<br />

Blok navn Navn til identifikation af blokken.<br />

Bemærk! Det er det navn, kartoteket kaldes i forbindelse med de<br />

specielle forms kontrol kommandoer.<br />

Det er en god idé at give blokken samme navn, som det kartotek der<br />

evt. bliver tilknyttet.<br />

Kartotek Navn på kartotek der skal tilknyttes blokken, når den skal anvendes til<br />

visning og indtastning af data i kartoteket.<br />

Det er som nævnt ovenfor en god idé at give blokken samme navn som kartoteket.<br />

Ved at indsætte kartotekets navn først, kan det efterfølgende kopieres op i bloknavnet med SHIFT+F5,<br />

så bliver det også stavet rigtigt første gang.<br />

155<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Bloknavn og kartoteksnavn<br />

Felter<br />

Baggrundsvindue Vindue på skærm på skærm<br />

Opsætning for blok<br />

BlokNavn<br />

Kartotetek<br />

En enkelt record blok kan indeholde både enkelt stående felter fra det tilknyttede kartotek og virtuelle<br />

felter der ikke tilhører kartoteket.<br />

Virtuelle felter behandles i en senere lektion.<br />

I en enkelt record blok skal felterne placeres manuelt på skærmen. Cursoren placeres der, hvor selve<br />

feltet skal være og ikke der hvor ledeteksten starter.<br />

Opsætning af felter foregår ved at vælge dem ud fra en plukkeliste med felter.<br />

Der er mulighed for at ændre formatet på felterne både under og efter opsætningen.<br />

Ledeteksterne skal ikke skrives manuelt, men vises automatisk. Der er dog også mulighed for at skrive<br />

tekster direkte på skærmen, hvis der er behov for det.<br />

Felter og tekst i blokke<br />

Ledetekster<br />

fremkommer<br />

automatisk<br />

Cursor<br />

bestemmer<br />

feltets plads<br />

Debitorer<br />

Kontonummer: Kontonummer skal indtastes<br />

Navn.......:<br />

Telefon....:<br />

SH+F2 Opret blok<br />

Samme navn som<br />

kartoteket<br />

Blokkens navn vises i bunden af skærmen under opbygningen<br />

Fritekst kan<br />

skrives overalt<br />

Felter indsættes fra<br />

kartotek med F2 og Enter<br />

Kartotek<br />

156<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Enkelt record blok<br />

Opgave 1: Form med enkelt record blok<br />

Formål med opgaven<br />

At oprette en form med én ’enkelt record blok’ og indsætte felter på blokken.<br />

Huskelister<br />

Form – Enkelt record blok<br />

Form – Felter<br />

Beskrivelse<br />

Der skal oprettes en enkelt record blok i vinduet til formen UDLUdlånsKart.<br />

UdlånsNr..: DebitorKto....:<br />

UdlånsType: KontaktPerson.:<br />

UdlånsDato:<br />

ReturDato: ForsikringsSum:<br />

1 Anvend vinduet til UDLUdlånsKart fra den forrige lektion.<br />

Forløb √<br />

2 Opret blokken på vinduet og giv den samme navn som kartoteket.<br />

3 Indsæt og placér felterne som vist i ovenstående eksempel.<br />

4 Opret et par udlånsordrer med hver sit udlånsnummer.<br />

5 Opret et nyt udlån der findes i forvejen. Det må du ikke kunne.<br />

6 Opret et nyt udlån der har samme DebitorKonto, UdlånsDato og UdlånsType. Det må<br />

du ikke kunne, da indexet er entydigt.<br />

7 Prøv også om fastteksten fungerer i feltet UdlånsType.<br />

8 Prøv at bladre mellem ordrene.<br />

Udlånskartotek<br />

9 Kontrollér om listbillederne til felterne UdlånsNr og DebitorKto åbnes direkte. Ellers<br />

skal du foretage de nødvendige ændringer, så de kommer til det.<br />

157<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


19. Multi record blok<br />

Mål med lektionen<br />

Formålet med denne lektion er at lære deltagerne at oprette blokke med flere records, og hvordan<br />

felter indsættes i disse blokke.<br />

Efter lektionen skal kursisterne kunne:<br />

Oprette forms med én ’multi record blok’<br />

Indsætte almindelige databasefelter i blokken.<br />

Generelt<br />

En multi record blok kendetegnes ved den måde, felterne er placeret på, idet de opstilles som kolonner<br />

ved siden af hinanden.<br />

Hver enkelt linje indeholder én post på tværs af kolonnerne, og blokken er derfor beregnet til at vise<br />

flere poster på én gang.<br />

Form med multi record blok<br />

Varelinjer<br />

Varenummer Varenavn Serienr Status<br />

Er der ikke plads, til at placere alle felter i kolonner, indsættes de resterende felter i bunden af blokken<br />

som enkeltstående felter, som vist på næste side.<br />

158<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Multi record blok med enkeltstående felter:<br />

Opsætning Multi record blok<br />

Blokke er det næste, der opsættes efter vinduet. De oprettes mens formens vindue er vist på skærmen.<br />

Ved oprettelsen åbnes vinduet ’Opsætning for blok’, der er et indtastningsbillede med felter der<br />

beskriver blokken. Mange af felterne indeholder default værdier og behøver derfor ikke at udfyldes<br />

eller ændres.<br />

De vigtigste felter at udfylde, vises i nedenstående skema.<br />

Felter i opsætning af multi record blokke<br />

Felt Betydning<br />

Blok navn Navn til identifikation af blokken.<br />

Varelinjer<br />

Varenummer Varenavn Serienr Status<br />

Type.: Følgeseddel: Valuta:<br />

Ref..: Faktura....: Beløb.:<br />

Bemærk! Det er det navn kartoteket kaldes i forbindelse med de<br />

specielle forms kontrol kommandoer.<br />

Det er en god idé at give blokken samme navn, som det kartotek det evt.<br />

tilknyttes.<br />

Kartotek Navn på kartotek der skal tilknyttes blokken, når den skal anvendes til<br />

visning og indtastning af data i kartoteket.<br />

Autogenerér blok Forskellen på en multi- og en enkelt record blok ligger i besvarelsen af<br />

dette felt.<br />

NEJ = Blokken autogenereres ikke. Felterne skal placeres manuelt i<br />

blokken.<br />

JA = Blokken autogenereres. Felterne placeres automatisk i blokken,<br />

hvor der er plads til det. Felterne placeres desuden i kolonner, der kan<br />

vise mange records på én gang.<br />

En autogenereret blok er således det samme som en multi record blok.<br />

159<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Bloknavn<br />

Det er som nævnt ovenfor en god idé at give blokken samme navn som kartoteket.<br />

Ved at indsætte kartotekets navn først, kan det efterfølgende kopieres op i bloknavnet med SHIFT+F5,<br />

så bliver det også stavet rigtigt første gang.<br />

I de få tilfælde hvor der skal være to blokke til samme kartotek i en form, skal de dog have hvert sit<br />

navn, da der ikke må være to blokke med samme navn.<br />

Under opbygning af forms vises det aktuelle bloknavn i nederste linje på skærmen.<br />

Felter<br />

En multi record blok kan både indeholde felter fra det tilknyttede kartotek, og virtuelle felter der ikke<br />

tilhører kartoteket.<br />

Virtuelle felter behandles i en senere lektion.<br />

I en multi record blok ses felterne som kolonner, og evt. samtidig som en række felter, hvis der ikke er<br />

plads til dem alle i kolonnerne, som i nedenstående eksempel:<br />

Indsætning af felter<br />

Felterne indsættes ved at vælge dem fra en plukkeliste over felter i det kartotek, der er tilknyttet<br />

blokken.<br />

I en multi record blok foregår placeringen automatisk. Cursoren skal derfor ikke stilles manuelt nogen<br />

steder for at indsætte felterne.<br />

Overskrifter / ledetekster vises automatisk.<br />

Felternes format kan ændres både under og efter opsætningen på formen.<br />

Varelinjer<br />

Varenummer Varenavn Serienr Status<br />

Felter indsættes fra kartotek med F2<br />

og ENTER.<br />

Placeringen udføres automatisk<br />

Type.: Følgeseddel: Valuta:<br />

Ref..: Faktura....: Beløb.:<br />

160<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Multi record blokke<br />

Opgave 1: Form med multi record blok<br />

Formål med opgaven<br />

At oprette en form med én ’multi record blok’<br />

Huskelister<br />

Form – Multi record blok<br />

Form – Felter<br />

Beskrivelse<br />

Der skal oprettes en multi record blok i vinduet til formen UDLUdlånsPost.<br />

Skærmbilledet skal bestå af én ’multi record blok’ og have samme navn som kartoteket UDLUdlånPost.<br />

Udlånsnr Varenr Varenavn<br />

Serienr Status DebitorKto<br />

Forløb √<br />

1 Anvend vinduet til formen UDLUdlånsPost, der blev oprettet i lektionen om<br />

kartoteker<br />

2 Opret blokken på vinduet med Ja i autogenér, og giv den samme navn som<br />

kartoteket<br />

3 Indsæt felterne og lad dem blive placeret automatisk som ovenfor.<br />

4 Prøv at ændre formens størrelse ved at skalere op og ned med CTRL+R<br />

5 Go<strong>dk</strong>end og afprøv formen<br />

6 Opret 3-4 forskellige udlånslinjer.<br />

Udlånslinjer<br />

7 Opret en ordre der findes i forvejen og med samme varenummer. Det skal du kunne,<br />

da indexet ikke er entydigt.<br />

8 Prøv at bladre mellem udlånslinjerne, og gå til hh. første og sidste linje<br />

9 Kontrollér om listbillederne fungerer i felterne UdlånsNr, DebitorKto og VareNr.<br />

161<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


20. Direkte opslag<br />

Mål med lektionen<br />

Formålet med denne lektion er, at lære deltagerne om direkte opslag, hvad de anvendes til og hvordan<br />

de opbygges.<br />

Efter lektionen skal kursisterne:<br />

Vide hvordan direkte opslag opbygges<br />

Kunne anvende direkte opslag til at hente værdier fra et andet kartotek.<br />

Direkte opslag generelt<br />

Direkte opslag er, som navnet hentyder til, et ’opslag direkte’ i et andet kartotek, end det der<br />

behandles lige nu.<br />

I nedenstående eksempel er der et udsnit af et ordrehoved, hvori der kan indtastes ordrenummer og<br />

kontonummer. Kundens navn skrives ikke, men hentes fra debitorkartoteket vha. et direkte opslag.<br />

Anvendelse af direkte opslag<br />

Ordrenummer<br />

Kontonummer Navn<br />

Et direkte opslag består af fire hove<strong>dk</strong>omponenter, som vist på næste side.<br />

Opbygning af direkte opslag<br />

Direkte opslag består af fire hove<strong>dk</strong>omponenter:<br />

Denne værdi er kendt og kan evt.<br />

stamme fra det aktuelle kartotek<br />

Kartoteksnavn [IndexNavn, Udtryk]. Feltnavn<br />

Disse tre værdier tilhører alle det kartotek, der skal slås op i.<br />

Syntaks for direkte opslag med lighedstegn<br />

Ordrer<br />

Navnet hentes med<br />

direkte opslag i<br />

debitorkartoteket når<br />

kontonummeret er<br />

indtastet.<br />

162<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Kartoteksnavn[IndexNavn == Udtryk].Feltnavn<br />

Syntaks for direkte opslag med komma<br />

Kartoteksnavn[IndexNavn, Udtryk].Feltnavn<br />

De enkelte komponenter behandles i nedenstående skema.<br />

Betydning af de enkelte komponenter i direkte opslag<br />

Komponent Betydning<br />

Kartoteksnavn Navn på opslagskartotek hvorfra der skal hentes en værdi.<br />

IndexNavn Navn på et Index i opslagskartoteket.<br />

Udtryk Et udtryk der består af en værdi, der findes i det angivne<br />

index.<br />

Skal der angives mere end én værdi for at slå op i indexet,<br />

adskilles disse med kommaer.<br />

Værdien kan anføres direkte, eller i form af navn på et felt<br />

eller en variabel.<br />

Feltnavn Navn på felt i opslagskartotek, hvorfra der skal hentes en<br />

værdi.<br />

[ ] Direkte opslag skal altid indeholde et sæt skarpe parenteser<br />

omkring indexnavnet og udtrykket.<br />

Komma Når der skal hentes en bestemt værdi i opslags-kartoteket,<br />

skal den hentes vha. af et opslag i indexet.<br />

I opslaget sættes index lig med udtryk.<br />

Dette angives ved at sættet et komma eller dobbelte<br />

lighedstegn mellem Indexnavn og Udtryk.<br />

Punktum Punktum sættes som angivelse af, at der efterfølger et felt.<br />

Sammenhæng i direkte opslag<br />

Nedenstående eksempel illustrerer virkemåden i et direkte opslag. På et skærmbillede Ordrer hentes<br />

debitorens navn med et direkte opslag i debitorkartoteket.<br />

163<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Virkemåden i et direkte opslag<br />

CustTable[AccountIdx==Account].Name<br />

I det direkte opslag henviser CustTable til debitorkartoteket. AccountIdx henviser til indexet med<br />

samme navn i debitorkartoteket. Debitorens navn kopieres fra debitorkartoteket over til Name-feltet i<br />

ordren.<br />

I det direkte opslag anvendes Account-feltet fra ordren til opslaget i indexet. Feltet indeholder<br />

debitorens kontonummer, hvilket er første komponent i indexet.<br />

Direkte opslag kan anvendes mange forskellige steder f.eks. i triggere i forms, i rapportfelter og i XAL<br />

kørsler.<br />

Direkte opslag i XAL kørsel<br />

Debitorkartoteket (CustTable)<br />

AccountIdx Poster<br />

Konto Pos<br />

1400 2<br />

1500 4<br />

1600 1<br />

1700 3<br />

1800 5<br />

Ordre<br />

1234<br />

Konto 1500 Navn<br />

Pos Konto Navn Tlf<br />

1 1600 Olsen<br />

2 1400 Jensen<br />

3 1700 Hansen<br />

4 1500 Petersen<br />

5 1800 Sørensen<br />

Direkte opslag kan anvendes i XAL kørsler, forms, rapporter osv. I nedenstående eksempel på en XAL<br />

kørsel anvendes direkte opslag til at hente bynavne i PostNummer kartoteket.<br />

C5 vers. 2012 -> Eksempel på XAL kørsel med direkte opslag efter bynavn<br />

Ordre<br />

r<br />

Petersen<br />

Search CustTable<br />

PRINT Name<br />

PRINT Address1<br />

PRINT ZipCity, ” ”, ZipCode[ZipCodeIdx, ZipCode].CityName<br />

PRINT ””<br />

END<br />

PAUSE<br />

164<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. -> 4.1 Eksempel på XAL kørsel med direkte opslag efter bynavn<br />

Search DebKart<br />

PRINT Navn<br />

PRINT Adresse1<br />

PRINT PostNr, ” ”, PostNummer[PostNrIdx, PostNr].ByNavn<br />

PRINT ””<br />

END<br />

PAUSE<br />

Resultat<br />

IBM Danmark A/S<br />

Nymøllevej 91<br />

2800 Lyngby<br />

Central Kopiering A/S<br />

Postbox 35<br />

1101 København K<br />

Bynavnet er hentet med et direkte opslag.<br />

Direkte opslag kan også tildeles til variabler, kan indsættes direkte i felter i rapporter, og tildeles som<br />

værdier til felter i forms.<br />

165<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Direkte opslag<br />

Opgave 1: Direkte opslag (Ekstra opgave)<br />

Mål med opgaven<br />

At benytte direkte opslag for at hente værdier fra et andet kartotek.<br />

Beskrivelse<br />

Der skal dannes en XAL kørsel med debitorposter, med søgning i kartoteket CustTrans.<br />

Kartoteket CustTrans indeholder poster til de enkelte debitorer, der findes i CustTable. Der er dog ikke<br />

noget felt i CustTrans, der indeholder debitorernes navne.<br />

I denne opgave skal der laves en liste med følgende felter fra CustTrans:<br />

Account<br />

Date_<br />

AmountMst<br />

Desuden skal der, efter feltet Account, indsættes navnet på debitor. Dette skal hentes med direkte<br />

opslag i CustTable.<br />

1 Start en ny XAL kørsel. Indsæt og tilret startkommentarer.<br />

2 Dan en søgeløkke på kartoteket CustTrans.<br />

Forløb i C5 √<br />

3 Indsæt en linje der udskriver felterne Account, Date_ og AmountMst.<br />

4 Afprøv kørslen.<br />

5 Indsæt efter Account et direkte opslag der i CustTable kan hente feltet Name.<br />

6 Afprøv kørslen.<br />

166<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


21. Formens felter, opsætning<br />

Mål med lektionen<br />

Formålet med denne lektion er at lære deltagerne om mulighederne for formattering af felter i forms.<br />

Desuden gives kendskab til triggerne i felter.<br />

Efter lektionen skal kursisterne kunne:<br />

Anvende triggeren Post-Change<br />

Og have kende til:<br />

Mulighederne for formattering af felter i forms<br />

Triggerne i felter.<br />

Generelt<br />

Felter i forms indsættes altid i blokke.<br />

I enkelt record blokke indsættes felterne manuelt og i multi record blokke indsættes de automatisk.<br />

I begge tilfælde medtager felterne deres opsætning fra databasen. Det vil sige at de beholder deres<br />

oprindelige opsætning.<br />

I begge tilfælde gælder, at der kan ændres i feltets formatering og anvendelse i forms. Desuden findes<br />

der nogle få triggere i felter.<br />

Formattering af felter<br />

Formattering udføres når felter oprettes og ændres med funktionerne Opret felt og Ret felt. I billedet<br />

Opsætning af ... felt er der felter med informationer om opsætningen.<br />

Nogle felter indeholder opsætningen fra databasen og andre indeholder default opsætninger for<br />

feltets anvendelse i selve formen. Begge dele kan ændres efter behov.<br />

Feltopsætning kan udføres når der oprettes nye felter med F2 og når der rettes i felter med F6. Når<br />

funktionerne aktiveres, vises der en dialogboks til justering af det aktuelle felt. Dialogboksen har<br />

forskelligt indhold afhængigt af felttype.<br />

Felttyper i C5<br />

Heltal Kommatal Tekst Dato Fasttekst<br />

Skemaet på næste side indeholder en samlet oversigt over alle justeringsmuligheder. De første fem<br />

kolonner viser hvad der kan justeres på de enkelte linjer.<br />

167<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Mulige justeringer på felter i forms<br />

Felttype Felt i opsætning Muligheder<br />

H K T D F Feltnavn Navn på felt (kan ikke ændres)<br />

H K T D F Feltets bredde Antal tegn<br />

H K T D F Feltets justering Venstrestillet, Højrestillet, Centreret<br />

T F Store bogstaver Nej eller Ja<br />

H K T D F Rette i feltets indhold Nej eller Ja<br />

H K T D F Hvor mange linjer vises Alle linjer eller én linje<br />

H K T D F Skal feltet autoplaceres Nej eller Ja<br />

H K T D F Vis automatisk ledetekst Nej eller Ja<br />

H K T D F Autohop til næste felt Nej eller Ja<br />

H K T D F Kopier felt Nej eller Ja<br />

H K T D F Skal feltet vises Nej eller Ja<br />

H K T D F Ledetekst Evt. ny ledetekst (hvis blank bruges databasens)<br />

H K T D F Må feltet brugeropsættes Nej eller Ja<br />

H K T D F Spring feltet over Nej eller Ja<br />

H K T D F Søgning efter input Nej eller Ja<br />

H K T D F Formler på feltet ENTER og der åbnes for triggere<br />

D Rækkefølge (DMÅ) DMÅ (Dag, Måned, ÅR)<br />

D 2 seperatorer / - , mellemrum #<br />

D År skrives som Skrives ej, 2 cifre, 4 cifre<br />

D Måned skrives som Skrives ej, 1/ 2 cifre, altid 2, fuldt navn, 3 bogstaver<br />

D Dag skrives som Skrives ej, 1 eller 2 cifre, altid 2 cifre<br />

H K Hvordan vises minus Ej fortegn, -NNNN,DD, NNNN,DD-, (NNNN,DD)<br />

H K Vend fortegn Nej eller JA<br />

H K Vis tallet 0 (nul) Nej eller Ja<br />

H K Negativ forskydning Antal tegn<br />

K 1000 seperator Ingen, Komma, Punktum, Mellemrum<br />

K Decimal tegn Komma (,) eller Punktum (.)<br />

K Antal decimaler Antal<br />

K Automatisk dec. tegn Nej eller Ja<br />

168<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Triggere på felter<br />

På samme måde som der er triggere i formens vindue og dens blokke, er der også triggere i felterne.<br />

Det er triggere, der f.eks. aktiveres, når en post loades ind i formen, når cursoren går ind i eller forlader<br />

et felt eller når musen aktiveres i et felt.<br />

Triggere i ’Opsætning af felt’<br />

Der er 6 triggere eller Felt Formler i hvert felt<br />

Triggere i felter Anvendelse<br />

Felter<br />

Felt<br />

formler<br />

Post-Load Udføres umiddelbart før posten skrives på skærmen.<br />

Anvendes f.eks. til at udfylde virtuelle felter.<br />

Pre-Field Udføres før markøren får adgang til feltet.<br />

Post-Edit Udføres efter editering i et felt, men inden værdien gemmes i<br />

feltet.<br />

Den tekst, der står i feltet, kan inspiceres gennem variablen<br />

&INVAL og kan evt. ændres.<br />

Post-Change Udføres når markøren forlader feltet og der samtidig er foretaget<br />

ændringer i feltet.<br />

Post-Field Udføres når markøren forlader feltet, uanset om der er foretaget<br />

ændringer eller ej.<br />

Mouse Udføres når musen aktiveres i feltet.<br />

169<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Rækkefølge for aktivering af felttriggerne<br />

Post-Load<br />

Pre-Field<br />

Felt<br />

Post-Edit<br />

Post-Change<br />

Post-Field<br />

Efterfølgende behandles triggeren Post-Change.<br />

Post-Change<br />

Triggeren Post-Change aktiveres, når cursoren forlader feltet, kun hvis der samtidig er foretaget<br />

ændringer i det.<br />

Post-Change kan f.eks. anvendes til at tildele værdier til andre felter i en form. Disse andre felters<br />

indhold er så afhængigt af det felt, hvorfra de får tildelt deres værdi.<br />

C5 vers. 2012 -> Eksempel<br />

Når en post loades ind i formen<br />

Når cursoren flyttes ind i feltet<br />

Mouse<br />

(Når der klikkes med musen i feltet)<br />

I et tænkt eksempel findes der, på en form til in<strong>dk</strong>øbsordrelinjer, ud over feltet ItemNumber, også<br />

felterne Txt og UnitCode, samt flere andre.<br />

Felterne Txt og UnitCode udfyldes automatisk, når der indtastes varenummer.<br />

Felterne hænger således nøje sammen med feltet ItemNumber, idet disse altid skal passe sammen, når<br />

de vises i formen.<br />

Ændres et varenummer i feltet til et andet varenummer, skal felterne Txt og UnitCode derfor også<br />

automatisk ændres tilsvarende.<br />

Én metode til at hente værdierne til Txt og UnitCode kan være med direkte opslag i lagerkartoteket.<br />

Ved at indsætte det direkte opslag i triggeren Post-Change på feltet ItemNumber, vil de to felter altid<br />

blive opdateret, hver gang der er blevet ændret i indholdet i ItemNumber.<br />

Dette gælder også, når der oprettes varenummer på en ny linje, idet feltet da er tomt. Feltet ændres<br />

således fra at være tomt til at indeholde et varenummer og Post-Change triggeren aktiveres når feltet<br />

forlades.<br />

170<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Anvendelse af Post-Change i feltet ItemNumber<br />

ItemNumber<br />

Post-Load<br />

Pre-Field<br />

Post-Edit<br />

Post-Change<br />

Post-Field<br />

Mouse<br />

Tildeling af værdi til et felt<br />

Tildeling af værdier til felter i en form foretages med kommandoen SET, på samme måde som når der<br />

tildeles værdier til variabler. Her er det bare felter i en form, der tildeles værdier.<br />

C5 vers. 2012 -><br />

Herunder vises eksempler på tildeling af direkte opslag til felterne Txt og UnitCode. Ved at indsætte<br />

koden i Post-Change på feltet ItemNumber, vil de to felter altid indeholde de værdier, der tilhører det<br />

indtastede ItemNumber.<br />

Tildeling af værdier til felter i Post-Change på feltet ItemNumber<br />

SET Txt = InvenTable[ItemIdx, ItemNumber].ItemName1<br />

SET UnitCode = InvenTable[ItemIdx, ItemNumber].UnitCode<br />

C5 vers. -> 4.1<br />

Tildeling af værdi til Txt<br />

og UnitCode med<br />

direkte opslag<br />

Herunder vises eksempler på tildeling af direkte opslag til felterne VareNavn1 og Enhed. Ved at<br />

indsætte koden i Post-Change på feltet VareNummer, vil de to felter altid indeholde de værdier, der<br />

tilhører det indtastede varenummer.<br />

Tildeling af værdier til felter i Post-Change på feltet VareNummer<br />

Txt<br />

UnitCode<br />

SET VareNavn1 = LagKart[VareIdx, VareNummer].VareNavn1<br />

SET Enhed = LagKart[VareIdx, VareNummer].Enhed<br />

171<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Valg af felt<br />

Det er ikke uden betydning, hvilket felt der anvendes til opdatering.<br />

Anvendes feltet ItemNumber, vil opdateringen udføres hver gang, der er indtastet et varenummer og<br />

feltet forlades.<br />

Anvendes et af felterne Txt eller UnitCode, vil opdateringen først findes, når cursoren forlader et af<br />

disse felter. Springes de over, vil de derfor aldrig blive opdateret, da cursoren ikke kommer ind i dem<br />

og således heller ikke kan forlade dem.<br />

Det rigtige felt i denne situation er således feltet ItemNumber.<br />

Valg af trigger<br />

Det er heller ikke uden betydning, hvilken trigger der anvendes. Af de seks triggere der findes på felter,<br />

er det nødvendigt af finde ud af, hvilken funktionalitet der skal opnås.<br />

I det tænkte eksempel herover skulle funktionen være, at ved ændring i feltet ItemNumber skulle<br />

felterne Txt og UnitCode ændres automatisk. Denne funktionalitet kan faktisk opnås både med Post-<br />

Change og Post-Edit triggerne.<br />

172<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Formens felter, opsætning<br />

Opgave 1: Triggere, felter og direkte opslag<br />

Formål<br />

Mål med opgaven<br />

At benytte direkte opslag for at hente værdier fra et andet kartotek<br />

At vælge det rigtige felt og den rigtige trigger til det direkte opslag<br />

At justere felter så de springes over i indtastningen.<br />

Huskelister<br />

Form – Triggere i felter<br />

Beskrivelse<br />

I de foregående opgaver har du selv måttet indtaste varenavnet i skærmbilledet til UDLUdlånsPost.<br />

I denne opgave skal du sørge for, at feltet VareNavn automatisk opdateres med varenavnet fra<br />

lagerkartoteket. Det skal ske, både når der oprettes en ny varelinje og når der ændres i varenummeret<br />

på en eksisterende linje.<br />

Felterne UdlånsNr, VareNavn og DebitorKto skal springes over under indtastning i formen til<br />

UDLUdlånsPost.<br />

Feltet DebitorKto skal springes over under indtastning i formen til UDLUdlånsKart.<br />

Forløb √<br />

1 Vælg formen til UDLUdlånsPost og vælg det felt der skal anvendes til direkte<br />

opslag for at opdatere feltet VareNavn.<br />

2 Indtast det direkte opslag og tildel værdien til feltet VareNavn.<br />

3 Foretag nødvendige ændringer så feltet VareNavn overspringes.<br />

4 Afprøv som følger:<br />

5 Opret en ny varelinje og kontrollér at varenavnet er rigtigt.<br />

6 Udskift et varenummer i en linje med et andet varenummer og kontrollér at<br />

varenavnet også ændres i dette tilfælde.<br />

7 Kontrollér at feltet med varenavnet springes over.<br />

173<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


22. Listemenuer<br />

Mål med lektionen<br />

Efter lektionen skal kursisterne kunne:<br />

Oprette, tilrette og vedligeholde listemenuer i form af undermenuer til gittermenuer, lokalmenuer<br />

og generelle menuer.<br />

Emner<br />

Listemenuer i C5<br />

Opsætning og vedligeholdelse af listemenuer<br />

Menuer generelt<br />

C5 indeholder et menusystem, der hjælper til at finde rundt i de mange forskellige skærmbilleder,<br />

rapporter, kørsler osv.<br />

Menusystemet består af to forskellige typer menuer.<br />

Menutyper<br />

Menu Forklaring<br />

Gittermenu Menu i form af en matrix bestående af kolonner og linjer.<br />

Cellerne i matrixen indeholder menupunkterne. Hvis der er<br />

mere end ét menupunkt, opstilles disse automatisk som en<br />

listemenu.<br />

Listemenu Menu i form af en liste af menupunkter.<br />

Der findes følgende typer listemenuer:<br />

Undermenu til gittermenuer<br />

Undermenu til listemenuer<br />

Lokalmenuer i skærmbilleder<br />

Generelle menuer<br />

Alle menuer kan i vid udstrækning tilrettes den enkelte brugers eller brugergruppes behov.<br />

Denne lektion behandler listemenuer.<br />

Listemenuer<br />

Listemenuer er menuer i form af menupunkter opsat som en liste under hinanden.<br />

174<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Eksempel på listemenu<br />

Finans<br />

Kontoplan ><br />

Posteringer ><br />

Kontoudtog<br />

Balancer ><br />

Budgetter ><br />

Regnskab<br />

Pengeinstitut ><br />

---------------<br />

Dimensioner ><br />

---------------<br />

Forespørgsler ><br />

Menupunkter med tegnet > viser at der åbnes en undermenu. Menupunkter uden tegnet > starter det<br />

tilknyttede program direkte. Det kan f.eks. være et skærmbillede eller en rapport.<br />

Listemenuer findes forskellige steder i menusystemet, men opsættes og vedligeholdes ens.<br />

Listemenuer i C5<br />

Listemenu Forklaring<br />

Undermenu til<br />

gittermenuer<br />

Undermenu til<br />

listemenu<br />

Menupunkter i celler i gittermenuer består altid af en listemenu.<br />

Et menupunkt i en listemenu kan kalde en undermenu i form af en<br />

anden listemenu.<br />

Lokalmenuer i forms Lokalmenuer er menuer, der kan kaldes frem med F10 i et åbent<br />

skærmbillede.<br />

Menuen er netop lokal, idet den kun findes i det ene skærmbillede.<br />

En lokalmenu kan således heller ikke kaldes fra andre skærmbilleder.<br />

Hvert skærmbillede har sin egen lokalmenu.<br />

Generelle menuer Generelle menuer er selvstændige listemenuer der oprettes og<br />

vedligeholdes i udviklingsmenuen i søjlen MNU.<br />

Til forskel fra lokalmenuer kan generelle menuer kaldes overalt i C5,<br />

idet de kan tilknyttes f.eks. en procestaste eller en hvilken som helst<br />

anden menu.<br />

175<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Listemenuer<br />

Skærmbillede<br />

Hvor vedligeholdes listemenuer?<br />

Vedligeholdelse af listemenuer består i opsætning af selve menuen og indsættelse af menupunkter.<br />

Vedligeholdelse foregår der, hvor listemenuen befinder sig.<br />

Vedligeholdelsessted<br />

Gittermenuen<br />

Listemenu Sted for oprettelse og vedligeholdelse<br />

Undermenu til gittermenu I celler i gittermenuer<br />

Generelt/Tilpasning/Udviklingsmenu/MNX/Ret<br />

Undermenu til listemenu I en hvilken som helst anden listemenu<br />

Generelt/Tilpasning/Udviklingsmenu/MNX/Ret<br />

I den valgte gittermenu vælges undermenu der skal vedligeholdes<br />

Lokalmenu I det skærmbillede der indeholder lokalmenuen<br />

Generelt/Tilpasning/Udviklingsmenu/FRM/Ret<br />

Generel menu I udviklingsmenuen i søjlen MNU<br />

Generelt/Tilpasning/Udviklingsmenu/MNU/Ret<br />

Opsætning og indsættelse af menupunkter er ens for alle listemenuer. Se afsnittet ’Opsætning af<br />

listemenu’.<br />

Opsætning af listemenu<br />

Lokal menu<br />

til skærmbillede<br />

Opsætning af listemenuer udføres med funktionen Opsætning, der startes med CTRL+F6. Funktionen<br />

åbner billedet Opsætning af menu.<br />

Billedet indeholder felter til indtastning af menuens titel osv.<br />

Undermenu<br />

til<br />

gittermenu<br />

Undermenu<br />

til listemenu<br />

Generel menu<br />

til procestaste<br />

eller listemenu<br />

176<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Felter i ’Opsætning af menu’<br />

Felt Forklaring<br />

Menutitel Tekst der skrives som overskrift til menuen.<br />

Hvis teksten fylder mere end det længste navn på et af<br />

menupunkterne, afkortes den automatisk.<br />

Skal der være en længere tekst, skal et af menupunkternes navne<br />

forlænges med blanke tegn.<br />

Ryd baggrund Om baggrunden skal ryddes når menupunktet åbnes<br />

Første menu i serie Om det er første menu i en serie.<br />

Det kan ikke bestemmes, hvor menuen skal placeres på skærmen,<br />

men ved at svare ja her, placeres menuen i øverste venstre hjørne af<br />

skærmen for at gøre plads til flere undermenuer.<br />

Forlad menu efter valg Om menuen skal forlades efter valg.<br />

Ved at forlade menuen efter valg vendes der ikke tilbage til den<br />

igen når menupunktet er afsluttet.<br />

Rammetype Hvilken ramme type der skal være rundt om menuen<br />

Bemærk: Det er ikke muligt at bestemme placering og størrelse på menuen.<br />

Indsættelse af menupunkter i listemenu<br />

I alle menupunkter foregår der et programkald af et skærmbillede, en rapport, en kørsel eller andet der<br />

skal afvikles.<br />

Menupunkter indsættes med funktionen Insert, der åbner billedet Opsætning af menupunkt.<br />

Felter i Opsætning af menupunkt<br />

Felter Betydning<br />

Proces Navn på den proces der skal afvikles.<br />

Parametre til proces Hver proces kan have forskellige parametre. Som regel skal der<br />

mindst angives navn på det applikationselement, der skal afvikles.<br />

Angives som Parameter=værdi Parameter=værdi . . .<br />

Menupunktets navn Den tekst der skal stå som menupunkt i menuen.<br />

Bogstav til hurtigvalg Et bogstav i menupunktets navn. Bogstavet bør ikke være anvendt et<br />

andet sted i menuen.<br />

Bogstavet aktiverer menupunktet med det samme.<br />

Hjælpetekst Den tekst der skal vises i bunden af skærmen, når cursoren står på<br />

menupunktet.<br />

Gruppe rettigheder Navn på den eller de grupper der må afvikle dette menupunkt.<br />

C5 vers. 2012 -> Eksempel<br />

Kun de grupper, der angives her, kan se menupunktet.<br />

177<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Felter Eksempel<br />

Proces Form-afvikling<br />

Parametre til proces Form=CustTable<br />

Menupunktets navn Debitorer<br />

Bogstav til hurtigvalg D<br />

Hjælpetekst Debitorkartotek<br />

Gruppe rettigheder Liste<br />

I C5 kaldes skærmbilleder for FORMS.<br />

I ovenstående eksempel skal der udføres en afvikling af et skærmbillede, derfor processen ’Formafvikling’.<br />

Skærmbilledet der skal afvikles hedder CustTable, hvorfor parametrene til processen er<br />

’Form=CustTable’.<br />

C5 vers. -> 4.1 Eksempel<br />

Felter Eksempel<br />

Proces Form-afvikling<br />

Parametre til proces Form=Debkart<br />

Menupunktets navn Debitorer<br />

Bogstav til hurtigvalg D<br />

Hjælpetekst Debitorkartotek<br />

Gruppe rettigheder Liste<br />

I C5 kaldes skærmbilleder for FORMS.<br />

I ovenstående eksempel skal der udføres en afvikling af et skærmbillede, derfor processen ’Formafvikling’.<br />

Skærmbilledet der skal afvikles hedder DebKart, hvorfor parametrene til processen er<br />

’Form=DebKart’.<br />

Undermenuer<br />

Undermenuer oprettes ved at vælge processen ’Undermenu’ og give menupunktet et navn. I menuen<br />

efterfølges navnet automatisk af tegnet ’>’.<br />

178<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Vedligeholdelse af listemenuer<br />

Finans<br />

Kontoplan ><br />

Posteringer ><br />

Kontoudtog<br />

Balancer ><br />

Budgetter ><br />

Regnskab<br />

Pengeinstitut ><br />

---------------<br />

Dimensioner ><br />

---------------<br />

Forespørgsler ><br />

CTRL F6<br />

Insert<br />

Opsætning af menuen<br />

Menunavn..............:<br />

Menutitel.............:<br />

Ryd baggrunden........:<br />

Første menu i serie...:<br />

Forlad menu efter valg:<br />

Rammetype (0-9).......:<br />

Opsætning af menupunkt<br />

Proces..................:<br />

Parametre til proces....:<br />

Menupunktets navn.......:<br />

Bogstav til hurtigvalg..:<br />

Hjælpetekst.............:<br />

Grupperettigheder.......:<br />

179<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Listemenuer<br />

Opgave 1: Kald af skærmbilleder fra lokalmenuer<br />

Formål med opgaven<br />

At benytte lokalmenuer til kald af andre skærmbilleder.<br />

Huskelister<br />

Menuer – Lokalmenuer<br />

Menuer – Opsætning af menupunkt<br />

Beskrivelse<br />

I denne opgave skal du, med lokalmenuer, kalde formen UDLUdlånsKart fra formen CustTable, og<br />

UDLUdlånsPost skal kaldes fra formen UDLUdlånsKart. Se nedenstående skitse.<br />

CustTable<br />

Lokal<br />

menu<br />

UDLUdlånsKart<br />

Forløb i C5 √<br />

1 Vælg formen CustTable og opret et nyt menupunkt i lokalmenuen. Menupunktet<br />

skal kalde formen UDLUdlånsKart.<br />

2 Vælg formen UDLUdlånsKart og opret en ny lokalmenu.<br />

3 Vælg den nye lokalmenu og opret et nyt menupunkt, der kan kalde formen<br />

UDLUdlånsPost.<br />

4 Afprøv de nye menupunkter som følger:<br />

Lokal<br />

menu<br />

5 Vælg formen CustTable og foretag et kald af UDLUdlånsKart.<br />

6 Du skal kunne se og bladre i alle debitorers udlån.<br />

7 Inde i udlånsbilledet skal du kalde kalde udlånslinjerne.<br />

UDLUdlånsPost<br />

8 Du skal kunne se og bladre i samtlige udlånslinjer, også de der tilhører de andre<br />

udlån end det aktuelle.<br />

180<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


23. Synkronisering mellem forms<br />

Mål med lektionen<br />

Formålet med denne lektion er at lære deltagerne at synkronisere forms med hinanden, således at en<br />

indeholdet i en form er afhængigt af indholdet i en anden form.<br />

Efter lektionen skal kursisterne kunne:<br />

Synkronisere to forms med hinanden<br />

Forstå hvilke forms kontrol kommandoer der skal anvendes til synkroniseringen mellem to forms<br />

Forstå hvilke triggere der skal anvendes til synkroniseringen mellem to forms.<br />

Generelt<br />

Synkronisering anvendes f.eks. når der foretages kald fra en form til en anden eller fra en form til en<br />

rapport.<br />

Synkroniseringen består i at den kaldte form eller rapport sættes op, så indholdet her stemmer overens<br />

med indholdet i den form der blev kaldt fra.<br />

I denne lektion behandles synkronisering mellem forms.<br />

Synkronisering mellem forms<br />

Synkronisering mellem forms udføres som hovedregel ved hjælp af kald fra lokalmenuen i<br />

’hovedformen’ og opsætning af selve synkroniseringen i ’underformen’.<br />

I illustrationen herunder er ’Ordrekartotek’ hovedform til ’Ordrelinjer’ og ’Ordrelinjer’ er hovedform til<br />

’Ordretotaler’.<br />

Kald af forms fra lokalmenuer<br />

Ordrekartotek<br />

Lokal<br />

menu<br />

Ordrelinjer<br />

Lokal<br />

menu<br />

Ordretotaler<br />

181<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Når en form kaldes fra en menu, er det muligt at synkronisere den, med den form der kaldes fra. I<br />

illustrationen kan det f.eks. synkroniseres, så formen med ordrelinjerne kun viser de linjer, der tilhører<br />

den ordre, der blev kaldt fra.<br />

Det er vigtigt at forstå, at et kald af en form via en menu ikke alene er nok til, at hente de rigtige<br />

informationer i den underliggende form. Det er i den underliggende form selve synkroniseringen<br />

finder sted, og at de rigtige informationer findes frem.<br />

Triggere ved synkronisering<br />

Ved synkronisering mellem to forms anvendes følgende triggere i vinduet og på blokken i<br />

underformen.<br />

Triggere i underform ved synkronisering<br />

Triggere i vinduet Anvendelse<br />

Pre-form Åbning af buffer<br />

Triggere i blokken Anvendelse<br />

Init-record Åbning af buffer<br />

Triggeren Pre-Form<br />

Tildeling af værdier i blokken (fra buffer)<br />

Angivelse og låsning af index til sortering af poster i blokken.<br />

Angivelse af opslag på første eller sidste af de fundne poster.<br />

Tildeling af startværdier fra buffer til ny record<br />

I triggeren Pre-form ligger koden til selve synkroniseringen.<br />

Der er her de rigtige poster findes frem.<br />

Synkroniseringen foregår ved hjælp af følgende kommandoer og macroer:<br />

En buffer<br />

EXTERN<br />

SET<br />

#Frm_Index() (med låsning af antal indexkomponenter)<br />

#Frm_Search() eller #Frm_SearchEnd()<br />

De enkelte punkter behandles på de følgende sider.<br />

Buffer<br />

Foretages der et kald af en anden form via en lokalmenu, gemmes posten i den oprindelige form i en<br />

buffer med samtlige sine data.<br />

Det betyder, at der til enhver tid kan hentes information i bufferen om den post eller record, der blev<br />

kaldt fra.<br />

182<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Bufferen indeholder den aktuelle record<br />

I underformen er det vigtigt at vide hvilken post, der kaldes fra, så de rigtige posteringer (linjer) kan<br />

findes frem. Dette kan gøres ved at åbne bufferen med kommandoen EXTERN.<br />

EXTERN<br />

Kommandoen EXTERN åbner for en buffer med informationer om den record, der kaldes fra.<br />

Åbning af buffer med EXTERN<br />

Syntaksen for EXTERN er som følger, idet kommandoen efterfølges af bufferens dvs. kartotekets navn.<br />

Syntaks<br />

Ordrekartotek<br />

Ordrekartotek<br />

EXTERN <br />

C5 vers. 2012 -> :<br />

Lokal<br />

menu<br />

Lokal<br />

menu<br />

Buffer<br />

Buffer<br />

Aktuel<br />

record<br />

Hovedform Underform<br />

Ordrekartotek<br />

Ordrelinjer<br />

Hovedform Underform<br />

Bufferen åbnes med<br />

kommandoen EXTERN<br />

’buffernavn’<br />

Ordrelinjer<br />

EXTERN OrdreKart<br />

Information om<br />

aktuel record (ordre)<br />

hentes i bufferen<br />

183<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Hvis der f.eks. fra formen SalesTable skal foretages et kald af formen SalesLine med ordrelinjerne<br />

indsættes der et menupunkt i formen SalesTable til kald af posteringerne i SalesLine.<br />

I SalesLine skal der så åbnes for bufferen til SalesTable for, at se hvilket ordrenummer der blev kaldt fra.<br />

Åbningen af bufferen skal da se ud som følger:<br />

C5 vers. 2012 -> Eksempel<br />

EXTERN SalesTable<br />

C5 vers. -> 4.1 :<br />

Hvis der f.eks. fra formen OrdKart skal foretages et kald af formen OrdLinje med ordrelinjerne<br />

indsættes der et menupunkt i formen OrdKart til kald af posteringerne i OrdLinje.<br />

I OrdLinje skal der så åbnes for bufferen til OrdKart for, at se hvilket ordrenummer der blev kaldt fra.<br />

Åbningen af bufferen skal da se ud som følger.<br />

C5 vers. -> 4.1 Eksempel<br />

EXTERN OrdKart<br />

Når bufferen er åbnet, skal blokkens nøglefelter tildeles værdier fra den. Det udføres med<br />

kommandoen SET.<br />

SET<br />

Når der skal synkroniseres mellem to forms, anvendes SET kommandoen til at tildele værdier (fra<br />

bufferen) til felter i blokken, idet de poster der skal vises i underformen, skal tilhøre den record, der<br />

findes i bufferen.<br />

Tildeling med SET fra Buffer<br />

Syntaksen for SET kommandoen ved tildeling af værdier til blokken fra bufferen, er som følger.<br />

Syntaks<br />

Ordrekartotek<br />

Lokal<br />

menu<br />

Buffer<br />

Ordrekartotek<br />

Hovedform Underform<br />

Ordrelinjer<br />

EXTERN<br />

Ordrekartotek<br />

SET blok.felt =<br />

buffer.felt<br />

SET . = .<br />

Tildeling med SET fra<br />

buffer felter til felter i<br />

blok i form<br />

184<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


I eksemplet fra afnittet om EXTERN med kald af ordrelinjer fra ordrekartoteket, vil SET kommandoen da<br />

se ud, som følger.<br />

C5 vers. 2012 -> Eksempel<br />

SET SalesLine.Number = SalesTable.Number<br />

I formen er der en blok med navnet SalesLine, der har et felt med navnet Number. Dette felt tildeles<br />

den værdi, feltet Number har i bufferen SalesTable.<br />

C5 vers. -> 4.1 Eksempel<br />

SET OrdLinje.Nummer = OrdKart.Nummer<br />

I formen er der en blok med navnet OrdLinje, der har et felt med navnet Nummer. Dette felt tildeles<br />

den værdi, feltet Nummer har i bufferen OrdKart.<br />

Ved hjælp af macroen #Frm_Index() kan de rigtige poster herefter findes frem.<br />

#Frm_Index()<br />

Macroen #Frm_Index() anvendes ikke alene til visning af poster, men også til fremfinding af bestemte<br />

poster, der så vises i samme sortering som indexet.<br />

Ved synkronisering mellem forms, skal der netop i underformen, fremfindes bestemte poster, nemlig<br />

de poster der tilhører den record, der befinder sig i bufferen.<br />

Efter at bufferen er åbnet, og værdier er tildelt blokken, anvendes macroen #Frm_Index() til at finde de<br />

rigtige poster frem.<br />

Poster findes med #Frm_Index()<br />

Ordrekartotek<br />

Lokal<br />

menu<br />

Buffer<br />

Ordrekartotek<br />

Hovedform Underform<br />

Ordrelinjer<br />

Posterne findes med<br />

#Frm_Index(Blok, Index, 1)<br />

EXTERN Ordrekartotek<br />

SET blok.felt =<br />

buffer.felt<br />

#Frm_Index(Blok,Index,1)<br />

Det er vigtigt at anvende indexmacroen rigtigt, idet det er nødvendigt at angive hvilke komponenter i<br />

indexet, der skal benyttes i søgningen efter posterne.<br />

I eksemplet med kaldet af ordrelinjerne fra ordrekartoteket, er der f.eks. kun én kendt værdi, der kan<br />

hentes i bufferen og som samtidig kan anvendes til fremfinding af ordrelinjeposterne. Det er<br />

ordrenummeret, da dette felt findes i begge kartoteker.<br />

Ordrenummeret fra bufferen bliver da også med SET kommandoen tildelt Ordrenummeret i blokken<br />

185<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


For at finde de rigtige poster skal der anvendes et index med ordrenummeret som første komponent.<br />

Hvis dette index består af flere komponenter, skal det angives hvilke af disse, der er kendte. Det siges at<br />

indexkomponenterne låses.<br />

Syntaksen for #Frm_Index() med låsning af komponenter er som følger.<br />

Syntaks<br />

#Frm_Index(, , )<br />

Hensigten med de låste komponenter vises i følgende eksempel, hvor der anvendes et index med flere<br />

komponenter.<br />

C5 vers. 2012 -> Eksempel<br />

#Frm_Index(SalesLine, NumTransLineIdx, 1)<br />

Blokken SalesLine er tilknyttet et kartotek SalesLine, der har et index NumTransLineIdx, der består af 4<br />

komponenter.<br />

Indexnavn Komponenter (felter) i indexet<br />

NumTransLineIdx Number, Transaction, LineNumber, RowNumber<br />

C5 vers. -> 4.1 Eksempel<br />

#Frm_Index(OrdLinje, NumTraLinIdx, 1)<br />

Blokken OrdLinje er tilknyttet et kartotek OrdLinje, der har et index NumTraLinIdx, der består af 4<br />

komponenter.<br />

Indexnavn Komponenter (felter) i indexet<br />

NumTraLinIdx Nummer, Transaktion, LinjeNr, Løbenummer<br />

Da det kun er den første komponent i indexet dvs. ordrenummeret, der er kendt, skal det fastlåses, at<br />

indexet i fremfindingen af poster kun skal anvende denne komponent. Derfor angives tallet 1 i<br />

#Frm_Index().<br />

Der kan låses mere end én komponent, hvis værdierne kendes, men altid fra venstre mod højre. Der<br />

kan ikke låses på en komponent midt i indexet.<br />

De poster, der findes med #Frm_Index(), vises stadig sorteret efter alle komponenter i indexet, idet<br />

låsningen kun gælder udsøgningen af posterne.<br />

#Frm_Search() / #Frm_SearchTop() / #Frm_SearchEnd()<br />

Der er stadig mulighed for, at angive om cursoren skal starte på den første eller den sidste post. Når<br />

der er tale om låste poster, gælder dette så kun, de der er fundet.<br />

Første eller sidste post vælges med en af macroerne #Frm_Search(), #Frm_SearchTop() eller<br />

#Frm_SearchEnd().<br />

Bloktriggeren Init-record<br />

Når der skal oprettes en ny record i en underform, kan det være nødvendigt at tildele nogle<br />

startværdier til den. Det kan f.eks. være værdier, der findes i bufferen.<br />

186<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Selv om disse værdier bliver tildelt blokken med SET kommandoen i Pre-form triggeren, kan disse<br />

værdier ikke automatisk anvendes, når der skal oprettes en ny record.<br />

Init-record<br />

Tildeling af startværdier til records foregår i triggeren med navnet Init-record.<br />

Init-Record aktiveres, når der i en form sker en begivenhed f.eks. i form af at oprette en ny record.<br />

Dette sker f.eks. ved at taste F2 eller ved, at markøren placeres på en ny tom post, der skal oprettes.<br />

Tildeling af værdier fra bufferen foregår på samme måde som i Pre-form ved at åbne bufferen med<br />

EXTERN og tildele værdier med SET.<br />

C5 vers. 2012 -> Pre-form<br />

EXTERN SalesTable<br />

SET SalesLine.Number = SalesTable.Number<br />

C5 vers. -> 4.1 Pre-form<br />

EXTERN OrdKart<br />

SET OrdLinje.Nummer = OrdKart.Nummer<br />

Ofte kan det betale sig at kopiere linjerne fra Pre-form og så tilføje flere linjer med SET kommandoer,<br />

hvis der er behov for det.<br />

C5 vers. 2012 -> Init-record<br />

EXTERN SalesTable<br />

SET SalesLine.Number = SalesTable.Number<br />

SET SalesLine.Account = SalesTable.Account<br />

I dette eksempel tildeles der værdier fra bufferen til felterne Number og Account. Der kan også tildeles<br />

andre former for startværdier f.eks. dags dato.<br />

187<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. -> 4.1 Init-record<br />

EXTERN OrdKart<br />

SET OrdLinje.Nummer = OrdKart.Nummer<br />

SET OrdLinje.Konto = OrdKart.Konto<br />

I dette eksempel tildeles der værdier fra bufferen til felterne Nummer og Konto. Der kan også tildeles<br />

andre former for startværdier f.eks. dags dato.<br />

Komplet eks. på synkronisering af forms<br />

Synkronisering i triggere i vinduet og blokke<br />

Ordrekartotek<br />

Lokal<br />

menu<br />

Buffer<br />

Ordrekartotek<br />

Hovedform Underform<br />

Ordrelinjer<br />

(Vindue)<br />

(Blok)<br />

Triggere i vinduet<br />

Init<br />

Error<br />

Pre-form<br />

Triggere i blok<br />

Init-record<br />

Eksemplet indeholder kun triggere, der anvendes i underformen, idet hovedformen ikke har nogen<br />

ændringer i sine triggere. Eksemplet er vist på næste side.<br />

188<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. 2012 -> Komplet eksempel med triggere og tilhørende kode<br />

Trigger i<br />

vinduet<br />

Init<br />

Pre-form<br />

Error<br />

Triggere i<br />

blokken<br />

Initrecord<br />

Anvendelse<br />

#MacroLoad(FORMS)<br />

EXTERN SalesTable<br />

SET SalesLine.Number = SalesTable.Number<br />

#Frm_Index(SalesLine, NumTransLineIdx, 1)<br />

#Frm_SearchEnd(SalesLine)<br />

#FormError<br />

Anvendelse<br />

EXTERN SalesTable<br />

SET SalesLine.Number = SalesTable.Number<br />

SET SalesLine.Account = SalesTable.Account<br />

C5 vers. -> 4.1 Komplet eksempel med triggere og tilhørende kode<br />

Trigger i<br />

vinduet<br />

Init<br />

Pre-form<br />

Error<br />

Triggere i<br />

blokken<br />

Init-record<br />

Anvendelse<br />

#MacroLoad(FORMS)<br />

EXTERN OrdKart<br />

SET OrdLinje.Nummer = OrdKart.Nummer<br />

#Frm_Index(OrdLinje, NumTraLinIdx, 1)<br />

#Frm_SearchEnd(OrdLinje)<br />

#FormError<br />

Anvendelse<br />

EXTERN OrdKart<br />

SET OrdLinje.Nummer = OrdKart.Nummer<br />

SET OrdLinje.Konto = OrdKart.Konto<br />

189<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Synkronisering mellem forms<br />

Opgave 1: Synkronisering mellem forms<br />

Formål med opgaven<br />

At benytte XAL kommandoer og forms kontrol kommandoer i form af macroer til synkronisering<br />

mellem forms.<br />

Huskelister<br />

Form – Triggere i vinduet<br />

Form – Triggere i blokke<br />

Beskrivelse<br />

Efter opsætning og afprøvning af lokalmenuer skal der synkroniseres mellem forms, så der kun vises<br />

poster, der tilhører den aktuelle post i den form, der kaldes fra.<br />

Når UDLUdlånsKart kaldes fra CustTable, skal det synkroniseres, så der kun vises udlån, der tilhører den<br />

aktuelle debitor.<br />

Når UDLUdlånsPost kaldes fra UDLUdlånsKart, skal det synkroniseres, så der kun vises udlånslinjer, der<br />

tilhører det udlån, der var fremme ved kaldet.<br />

Forløb i C5 √<br />

1 Vælg formen til UDLUdlånsKart og opsæt synkroniseringen til CustTable. Benyt<br />

indexet UDLDebDatTypIdx til opslag og start på første post i indexet.<br />

2 Vælg formen til UDLUdlånsPost og opsæt synkroniseringen med UDLUdlånsKart.<br />

Benyt UDLUdlVarIdx til opslag og start på sidste post i indexet.<br />

3 Afprøv synkroniseringen som følger:<br />

4 Vælg formen CustTable og foretag et kald af UDLUdlånsKart.<br />

Du må kun kunne se og bladre i udlån til den aktuelle debitor.<br />

5 Inde i udlånsbilledet skal du kalde udlånslinjerne.<br />

Du må kun kunne se og bladre i de udlånslinjer, der tilhører det udlån du kaldte<br />

fra.<br />

6 Opret et nyt udlån på en debitor og indsæt 2-3 udlånslinjer.<br />

7 Gentag punkt 6 et par gange med en anden debitor.<br />

8 Afprøv om du stadig kun kan bladre i udlån og udlånslinjer der tilhører den<br />

aktuelle debitor og udlån.<br />

9 Vælg listbilledet til UDLUdlånsPost og kontrollér at felterne DebitorKto og<br />

UdlånsNr er udfyldt. Hvis de ikke er det, skal du foretage nødvendige ændringer i<br />

synkroniseringen.<br />

190<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


24. Huskelister forms<br />

Fasttekst – Opret ny type<br />

Funktion Fremgangsmåde Tast<br />

Oprette ny<br />

fasttekst-type<br />

Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/ Kerne<br />

Vælg kartotek<br />

(Det skal blot være et tilfældigt kartotek, da oprettelse af<br />

fastteksttyper kan foregå på et hvilket som helst kartotek.)<br />

ENTER<br />

Vælg Fast-Tekst-Typer i kartotekets menu ENTER<br />

Vælg Opret en ny type i menuen Fast-Tekst-Typer ENTER<br />

Du ser billedet Fast-Tekst<br />

Indtast Navn på typen.<br />

Indtast overskriftsnavn i feltet Print Navn.<br />

Go<strong>dk</strong>end ENTER eller F3<br />

Du er nu tilbage i menuen Fast-Tekst-Typer og kan<br />

vælge at afslutte med<br />

eller du kan indsætte tekster ved at gå til fasen ’Tilføj’<br />

tekster her i huskelisten.<br />

Tilføje tekster Du er i menuen Fast-Tekst-Typer<br />

Gentages for<br />

hver ny tekst<br />

Vælg Tilføj/ret tekster<br />

Vælg den oprettede fastteksttype i menuen. Vælg Type<br />

Du ser nu en dialogbox med Fast-Tekst-Typens printnavn<br />

som overskrift.<br />

191<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

F3<br />

ENTER<br />

ENTER<br />

Indsæt tekst i feltet Indsæt ny tekst INS eller ENTER<br />

Du ser nu dialogboxen Fast-Tekst Indhold<br />

Indtast teksten i feltet<br />

Når du er færdig med at indsætte tekster, kan du afslutte<br />

ved at go<strong>dk</strong>ende (til du er helt ude af programmet).<br />

F3


Fasttekst – Tilføj tekster til eksisterende type<br />

Funktion Fremgangsmåde Tast<br />

Starte Generelt/Tilpasning/Udviklingsmenu/DBD<br />

Vælge<br />

kartotek<br />

Der er nu to muligheder:<br />

Hvis du vælger Diverse/Fasttekst, kan du gå direkte til<br />

Vælg Type her i huskelisten.<br />

Hvis du vælger Ret/Kerne, skal du starte i Vælge kartotek.<br />

Vælg kartotek<br />

(Det skal blot være et tilfældigt kartotek, da oprettelse af<br />

fastteksttyper kan foregå på et hvilket som helst kartotek.)<br />

ENTER<br />

Vælg Fast-Tekst-Typer i kartotekets menu ENTER<br />

Vælg Tilføj/ret tekster i menuen Fast-Tekst-Typer ENTER<br />

Vælge type Vælg fastteksttype i menuen Vælg Type<br />

Gentages for<br />

hver ny tekst<br />

Du ser nu en liste over tekster i den valgte fastteksttype.<br />

ENTER<br />

Indsæt tekst i feltet Indsæt ny tekst INS eller ENTER<br />

Du ser nu dialogboxen Fast-Tekst Indhold.<br />

Indtast teksten i feltet F3<br />

Når du er færdig med at indsætte tekster, kan du afslutte<br />

ved at go<strong>dk</strong>ende (til du er helt ude af programmet).<br />

F3<br />

192<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Fasttekst – Ret tekster i eksisterende type<br />

Funktion Fremgangsmåde Tast<br />

Starte Generelt/Tilpasning/Udviklingsmenu/DBD<br />

Vælge<br />

kartotek<br />

Der er nu to muligheder:<br />

Hvis du vælger Diverse/Fasttekst, kan du gå direkte til<br />

Vælge Type her i huskelisten.<br />

Hvis du vælger Ret/Kerne, skal du starte i Vælge kartotek.<br />

Vælg kartotek<br />

(Det skal blot være et tilfældigt kartotek, da oprettelse af<br />

fastteksttyper kan foregå på et hvilket som helst kartotek.)<br />

ENTER<br />

Vælg Fast-Tekst-Typer i kartotekets menu ENTER<br />

Vælg Tilføj/ret tekster i menuen Fast-Tekst-Typer ENTER<br />

Vælge type Vælg fastteksttype i menuen Vælg Type<br />

Gentages for<br />

hver tekst der<br />

ændres<br />

Du ser nu en liste over tekster i den valgte fastteksttype.<br />

ENTER<br />

Vælg tekst der skal ændres ENTER<br />

Du ser nu dialogboxen Fast-Tekst indhold.<br />

Foretag ændringerne i teksten ENTER<br />

Når du er færdig med at indsætte tekster, kan du afslutte<br />

ved at go<strong>dk</strong>ende (til du er helt ude af programmet).<br />

F3<br />

193<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Kartotek – Navn (opret/ret)<br />

Funktion Fremgangsmåde Tast<br />

Oprette<br />

kartotek med<br />

navn<br />

Rette<br />

kartoteksnavn<br />

Generelt/Tilpasning/Udviklingsmenu/DBD/<br />

Opret<br />

Du er nu i billedet ’Opret/Se Kartotek’.<br />

Som standard er det nok at udfylde flg. felter:<br />

Navn på kartotek:<br />

Skriv et sigende navn på kartoteket.<br />

Benyt evt. forkortelse som f.eks. DebTable eller Debkart.<br />

Print Navn:<br />

Skriv det navn kartoteket skal kaldes i det daglige f.eks.<br />

Debitorkartotek.<br />

Go<strong>dk</strong>end oprettelsen med<br />

Du ser nu en menu med kartoteksnavnet som overskrift.<br />

Du kan nu vælge at afslutte menuen med<br />

eller<br />

vælge at gå til et af menupunkterne.<br />

(Se andre huskelister)<br />

Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/<br />

Kerne<br />

Du ser nu en liste over kartoteker.<br />

Vælg det kartotek der skal ændres<br />

Du ser nu en menu med kartoteksnavnet som overskrift.<br />

Vælg menupunktet Navn<br />

Du er nu i billedet Opret/Se Kartotek<br />

Som standard er der kun behov for at ændre flg. felter:<br />

Navn på kartotek:<br />

Indtast evt. nyt navn på kartoteket.<br />

Print Navn:<br />

Indtast evt. et andet kaldenavn på kartoteket.<br />

Go<strong>dk</strong>end ændringerne med<br />

Afslut menuen med<br />

Slette kartotek Kartoteker kan ikke slettes.<br />

194<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

F3<br />

F3<br />

ENTER<br />

F3<br />

F3<br />

ENTER


Kartotek – Feltbehandling (opret)<br />

Funktion Fremgangsmåde Tast<br />

Finde kartotek Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/ Kerne<br />

Vælg kartotek fra den viste liste<br />

ENTER<br />

Vælg Feltbehandling/Opret fra den viste menu ENTER<br />

Opret felt Vælg felttype fra menuen Felttyper ENTER<br />

Gentages for<br />

hvert felt at<br />

oprette<br />

Særegne<br />

informationer<br />

Sammenlign.<br />

Justeret<br />

Længde<br />

Opdatering af<br />

tallet<br />

Hvilken Fast-<br />

Tekst-Type<br />

Fælles<br />

informationer<br />

Indtastningsbilledet Opsætning af databasefelt vises.<br />

For hver felttype er der nogle særegne og nogle fælles<br />

Informationer, der skal angives.<br />

I denne huskeliste vises de vigtigste felter at udfylde.<br />

Udfyld de særegne informationer for felttypen og gå<br />

videre til de fælles informationer.<br />

Alfanumerisk-felt<br />

Vælg Højre- eller venstrestillet.<br />

Angiv længde.<br />

Heltals-felt og Kommatals-felt<br />

Vælg default værdien Absolut.<br />

Dato-felt<br />

Intet specielt.<br />

Fast-Tekst-Type<br />

Vælg fastteksttype med<br />

Udfyldes for alle felter.<br />

Feltnavn Giv feltet et sigende navn.<br />

Anvend tegnene a-å, AÅ, 0-9 og understreg.<br />

Evt. Ledetekst Hvis ledeteksten ikke udfyldes anvendes feltnavnet som<br />

ledetekst i listbilleder og skærmbilleder.<br />

Udfylde under<br />

rettelse<br />

Hvis der svarers ja kan feltværdien senere ændres, det må<br />

man ikke ved nøglefelter, hvor der findes underliggende<br />

poster, f.eks. Debitorkontonr. med posteringer.<br />

Afslutte Go<strong>dk</strong>end med F3<br />

ALT+H<br />

195<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Kartotek – Feltbehandling (ret)<br />

Funktion Fremgangsmåde Tast<br />

Finde felt Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/ Kerne<br />

Vælg kartotek fra den viste liste<br />

ENTER<br />

Vælg Feltbehandling/Ret fra den viste menu ENTER<br />

Åbne felt Vælg felt fra feltlisten ENTER<br />

Indtastningsbilledet Opsætning af databasefelt vises.<br />

Udfør nødvendige ændringer.<br />

Afslutte Go<strong>dk</strong>end med F3<br />

Kartotek – Feltbehandling (referencer)<br />

Funktion Fremgangsmåde Tast<br />

Indsætte<br />

referencer<br />

Åbne<br />

opsætning af<br />

databasefelt<br />

Gentages for<br />

hvert felt<br />

Referencekartotek<br />

Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/ Kerne<br />

Vælg kartotek fra den viste liste<br />

ENTER<br />

Vælg Feltbehandling/Ret fra den viste menu ENTER<br />

Vælg felt fra feltlisten ENTER<br />

Indtastningsbilledet Opsætning af databasefelt vises.<br />

Udfyld flg. felter:<br />

Angiv navn på kartotek der skal referes til<br />

Referencefelt Angiv navn på felt i referencekartoteket, hvori værdi og<br />

type er den samme, som det felt du står i her.<br />

Afslutte Go<strong>dk</strong>end med F3<br />

Kartotek – Dokumentation<br />

ALT+H<br />

ALT+H<br />

Funktion Fremgangsmåde Tast<br />

Udskrive<br />

dokumentation<br />

Generelt/Tilpasning/Udviklingsmenu/DBD/ Udskriv<br />

Vælg kartotek fra den viste liste<br />

Udfyld billedet ’Udskriftsmuligheder’ med nødvendige<br />

informationer.<br />

Go<strong>dk</strong>end med<br />

ENTER<br />

Vælg kartotek fra kartotekslisten ENTER<br />

196<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

F3


Kartotek – Index (opret)<br />

Funktion Fremgangsmåde Tast<br />

Finde kartotek<br />

til index<br />

Oprette index<br />

Gentages for<br />

hvert index der<br />

skal oprettes<br />

Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/ Kerne<br />

Vælg kartotek fra den viste liste<br />

Vælg Indexbehandling/Opret fra den viste menu<br />

Du ser nu indtastningsbilledet Opsætning af Index<br />

Udfyld flg. felter (alle):<br />

IndexNavn Giv indexet et sigende navn.<br />

Ens Nøgler<br />

tilladt<br />

Eksempel på indexnavn: KtoDatoIdx.Navnet viser at<br />

indexet består af felterne KontoNr og Dato.<br />

NEJ = Der må kun være én post med samme indexnøgle.<br />

JA = Hvis der gerne må være flere poster med samme<br />

indexnøgle.<br />

Er indexet aktivt Angiv med Ja eller Nej om indexet er aktivt.<br />

Beskrivelse af<br />

index<br />

(Indexformel)<br />

Gentages for<br />

hver felt der<br />

skal indsættes<br />

Åbn editorbox til indtastning af felter<br />

Indsæt felter ved at vælge kartotek<br />

Vælg felt<br />

(Felter adskilles med komma)<br />

Go<strong>dk</strong>end editorboxen med F3<br />

Go<strong>dk</strong>end opsætningen af indexet F3<br />

Afslutte Go<strong>dk</strong>end resten med F3<br />

Kartotek – Index (ret)<br />

ENTER<br />

ENTER<br />

ENTER<br />

SHIFT+F8<br />

ENTER<br />

Funktion Fremgangsmåde Tast<br />

Finde index Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/ Kerne<br />

Vælg kartotek fra den viste liste<br />

ENTER<br />

Vælg Indexbehandling/Ret fra den viste menu ENTER<br />

Rette Index Vælg index fra listen ENTER<br />

Gentages for<br />

hvert index der<br />

skal rettes<br />

Du ser nu indtastningsbilledet ’Opsætning af Index’.<br />

Udfør nødvendige ændringer.<br />

Go<strong>dk</strong>end editorboxen med F3<br />

Go<strong>dk</strong>end opsætningen af indexet F3<br />

Afslutte Go<strong>dk</strong>end resten med F3<br />

197<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Kartotek – Index (slet)<br />

Funktion Fremgangsmåde Tast<br />

Finde index Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/ Kerne<br />

Vælg kartotek fra den viste liste<br />

Slette index Vælg Indexbehandling/Slet fra den viste menu<br />

(Indexet slettes uden advarsel.)<br />

Afslutte Go<strong>dk</strong>end resten med F3<br />

Listbillede – Opret<br />

ENTER<br />

Funktion Fremgangsmåde Tast<br />

Finde kartotek<br />

til listbillede<br />

Opsætte<br />

vindue<br />

Generelt/Tilpasning/Udviklingsmenu/Lst/Opret<br />

Vælg kartotek fra liste ENTER<br />

Indtastningsbilledet Opsætning af vinduet åbnes.<br />

De vigtigste felter at udfylde er:<br />

Søgenavn i liste Billedets navn som det skal søges under.<br />

NB.: Benyt samme navn som det felt der skal slås op på i<br />

kartoteket, så åbnes listbilledet direkte.<br />

Tekst i rammen Indsæt den tekst der skal vises i rammen på selve<br />

listbilledet.<br />

Udfyldes feltet ikke, benytter systemet indholdet i det<br />

ovenstående felt Søgenavn i liste.<br />

Øvrige felter Resten af felterne kan udfyldes efter eget valg, ellers<br />

udfyldes de automatisk med defaultværdier.<br />

Go<strong>dk</strong>end med<br />

Billedet ’Design af listbillede’ vises. (Felter indsættes heri.)<br />

Indsætte felt Felter indsættes i ’Design af listbillede’.<br />

Gentages for<br />

hvert felt der<br />

skal indsættes<br />

Afslutte<br />

listbillede<br />

Vis plukkeliste over felter i kartoteket INSERT<br />

Vælg felt fra plukkelisten ENTER<br />

Billedet ’Opsætning af . . . felt’ vises.<br />

Go<strong>dk</strong>end<br />

Gør klar til næste felt<br />

NB.: Felterne vises i den rækkefølge, de står i her. Hvis du<br />

ikke taster PIL NED bliver de indsat før.<br />

Gentag for næste felt eller<br />

Afslut og go<strong>dk</strong>end. F3<br />

ENTER<br />

198<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

F3<br />

F3<br />

PIL NED


Listbillede – Ret<br />

Funktion Fremgangsmåde Tast<br />

Finde<br />

listbillede<br />

Ændre<br />

opsætning af<br />

vindue<br />

Generelt/Tilpasning/Udviklingsmenu/Lst/Ret<br />

Vælg kartotek fra liste ENTER<br />

Vælg listbillede fra liste ENTER<br />

Indtastningsbilledet Design af listbillede vises.<br />

Du kan nu vælge at indsætte eller ændre felter eller<br />

at ændre i opsætningen af vinduet.<br />

Åbn indtastningsbilledet Opsætning af vinduet<br />

Udfør nødvendige ændringer.<br />

Go<strong>dk</strong>end med<br />

Du er tilbage i Design af listbillede.<br />

Indsætte felter Felter indsættes i Design af listbillede.<br />

Gentages for<br />

hvert felt der<br />

skal indsættes<br />

Afslutte<br />

listbillede<br />

Vis plukkeliste over felter i kartoteket<br />

CTRL+F6<br />

199<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

F3<br />

INSERT<br />

Vælg felt fra plukkelisten ENTER<br />

Billedet ’Opsætning af . . . felt’ vises.<br />

Go<strong>dk</strong>end<br />

Gør klar til næste felt<br />

NB.: Felterne vises i den rækkefølge, de står i her. Hvis du<br />

ikke taster PIL NED bliver de indsat før.<br />

Gentag for næste felt eller<br />

Afslut og go<strong>dk</strong>end F3<br />

Slette felt Et felt kan slettes ved at markere feltet med cursoren og<br />

taste<br />

Listbillede – Slet<br />

F3<br />

PIL NED<br />

DELETE<br />

Funktion Fremgangsmåde Tast<br />

Finde<br />

listbillede<br />

Slette<br />

listbillede<br />

Generelt/Tilpasning/Udviklingsmenu/Lst/Slet<br />

Vælg kartotek fra liste ENTER<br />

Vælg listbillede fra liste ENTER<br />

Boksen Slet listbillede vises.<br />

Slet listbilledet<br />

(Listbilledet slettes.)<br />

JA


Menuer - Lille udviklingsmenu (CTRL F12)<br />

Funktion Fremgangsmåde Tast<br />

Kald af<br />

menuen<br />

Kald den lille udviklingsmenu CTRL+F12<br />

Vælg XAL-Navne.<br />

Menuer – Lokalmenuer<br />

Du ser en liste over applikationselementer tilhørende<br />

den sidste procestype du var inde i.<br />

Skift procestype (hvis nødvendigt) ALT+T<br />

Vælg procestype og vis applikationselementer ENTER<br />

Vælg applikation der skal udføres ENTER<br />

Vælg linje der vises med Procestype=Applikation f.eks.<br />

Form=CustTable og overfør linjen til feltet<br />

ENTER<br />

Funktion Fremgangsmåde Tast<br />

Menusti Generelt/Tilpasning/Udviklingsmenu/FRM/Ret<br />

Indsætte<br />

Ændre<br />

Slette<br />

Vælg skærmbillede (form) fra plukkelisten.<br />

Aktiver Lokalmenuen F10<br />

Du ser nu lokalmenuen til det aktuelle skærmbillede.<br />

Indsætning, ændring eller sletning af menupunkter<br />

foregår nu som i huskelisten:<br />

Menuer – Opsætning af menupunkt.<br />

Opsætte I opsætning af menu kan du angive:<br />

Menutitel<br />

Om baggrunden skal ryddes<br />

Om menuen er den første i en serie<br />

Om menuen skal forlades efter valg<br />

Hvilken rammetype de skal anvendes<br />

CTRL+F6<br />

200<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Menuer – Opsætning af menupunkt<br />

Funktion Fremgangsmåde Tast<br />

Finde plads til<br />

menupunkt<br />

Vælge<br />

indsætte,<br />

ændre eller<br />

slette<br />

Ved indsætte<br />

eller ændre<br />

Du kommer fra en af huskelisterne:<br />

Menuer – Undermenuer til gittermenuer<br />

Menuer – Generelle menuer<br />

Menuer – Lokale menuer<br />

Placér bjælken hvor der skal indsættes et nyt menupunkt,<br />

eller hvor der skal ændres i et eksisterende.<br />

Du kan nu vælge:<br />

at indsætte et nyt menupunkt<br />

at ændre i et eksisterende menupunkt<br />

at slette et menupunkt<br />

I de to første tilfælde åbnes opsætningsbilledet<br />

Opsætning af menupunkt med felterne:<br />

PILE eller hurtigvalg<br />

INS<br />

ENTER<br />

Proces Angiv procestype eller vælg fra plukkeliste. ALT+H<br />

Parametre til<br />

proces<br />

Menu-punktets<br />

navn<br />

Bogstav til<br />

hurtigvalg<br />

Anfør hvilke parametre der skal benyttes til processen<br />

f.eks. Form=DebKart, hvis det er processen Form-afvikling.<br />

Se evt. huskelisten: Menuer - Lille Udviklingsmenu.<br />

Anfør det navn der skal stå i menuen.<br />

Er der kun et menupunkt i menuen, vises navnet ikke.<br />

Derimod udføres punktet umiddelbart.<br />

Bogstav til aktivering af menuen direkte.<br />

Hjælpetekst Teksten vises på nederste linje på skærmen.<br />

Gruppe<br />

rettigheder<br />

DEL<br />

(CTRL+F12)<br />

Du kan åbne feltet med og ENTER<br />

indsætte grupper eller<br />

slette grupper<br />

Hvis ingen grupper angives, kan alle afvikle menupunktet.<br />

Angives en eller flere grupper er det kun de angivne, der<br />

kan se og afvikle menupunktet.<br />

INS<br />

DEL<br />

201<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Form – Vindue (opret)<br />

Funktion Fremgangsmåde Tast<br />

Opsætte<br />

vindue<br />

Åbne<br />

opsætning af<br />

vindue<br />

Generelt/Tilpasning/Udviklingsmenu/Frm/Opret<br />

Indtastningsbilledet Opsætning af vinduet åbnes.<br />

De vigtigste felter at udfylde er:<br />

Søgenavn i liste Formens navn som den skal søges under.<br />

Tekst i rammen Indsæt den tekst der skal vises i rammen på selve<br />

skærmbilledet.<br />

Vinduets højde Angiv vinduets højde i antal linjer.<br />

Bredde Angiv vinduets bredde i antal karakterer (kolonner)<br />

Farvesæt Som standard vælges farvesæt2.<br />

Vindue Fast:<br />

Dette er default værdien.<br />

Er god at anvende ved Enkelt Record Blokke, idet vinduets<br />

højde og bredde benyttes som angivet.<br />

CTRL+R kan kun skalere ned og felterne flyttes ikke.<br />

Skalerbart:<br />

Værdien Skalérbart er god ved Multi Record Blokke.<br />

CTRL+R kan både skalere op og ned, og felterne flyttes<br />

automatisk.<br />

Go<strong>dk</strong>end med<br />

Vinduet vises på skærmen og er klar til oprettelse af<br />

blokke.<br />

Afslutte form Billedet kan lukkes med F3 eller<br />

der kan oprettes blokke (se huskelister hertil).<br />

202<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

F3<br />

F3


Form – Vindue (ret)<br />

Funktion Fremgangsmåde Tast<br />

Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />

Vælg form fra listen over forms ENTER<br />

Formen vises på skærmen.<br />

Åbne vindue Åbn for indtastningsbilledet Opsætning af vindue. CTRL+F6<br />

Foretag ønskede ændringer.<br />

Go<strong>dk</strong>end med<br />

Formen vises igen på skærmen.<br />

Afslutte form Billedet kan lukkes med<br />

eller<br />

blokke og felter kan behandles (se huskelister hertil)<br />

Form – Vindue (slet ) (dvs. hele formen)<br />

Funktion Fremgangsmåde Tast<br />

Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Slet<br />

Vælg form fra listen over forms ENTER<br />

Slette form Der vises en advarselsboks, med spørgsmålet om formen<br />

skal slettes.<br />

Slet formen<br />

(formen slettes herefter.)<br />

Slet ikke formen<br />

(formen slettes ikke.)<br />

203<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

F3<br />

F3<br />

JA<br />

NEJ


Form – Enkelt record blok (opret)<br />

Funktion Fremgangsmåde Tast<br />

Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />

Vælg form fra listen over forms ENTER<br />

Formen vises på skærmen.<br />

Oprette blok Opret en blok. SH+F2<br />

Gentages for<br />

hver blok der<br />

skal oprettes<br />

Indtastningsbilledet Opsætning for blok åbnes.<br />

De vigtigste feltet at udfylde er:<br />

Blok navn Feltet skal udfyldes.<br />

Anvend om muligt samme navn som kartoteket. Det gør<br />

det nemmere at anvende forms control kommandoerne,<br />

idet disse altid refererer til bloknavnet og ikke til<br />

kartoteksnavnet.<br />

Kartotek Udfyldes kun når blokken skal indeholde felter fra et<br />

kartotek.<br />

Hent kartoteksnavnet fra listen over kartoteker<br />

Bemærk:<br />

Felterne Autogenerér blok og Auto options skal ikke<br />

udfyldes ved Enkelt Record Blokke.<br />

Go<strong>dk</strong>end med<br />

Formen vises igen på skærmen.<br />

Afslutte form Billedet kan lukkes med<br />

eller<br />

blokke og felter kan behandles (se huskelister hertil)<br />

ALT+H<br />

204<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

F3<br />

F3


Form – Enkelt record blok (ret)<br />

Funktion Fremgangsmåde Tast<br />

Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />

Vælg form fra listen over forms ENTER<br />

Formen vises på skærmen.<br />

Bloknavn ses i bunden af skærmen.<br />

Åbne blok Vælg blok der skal ændres SHIFT+F8<br />

Gentages for<br />

hver blok der<br />

skal rettes<br />

Åbn for indtastningsbilledet Opsætning for blok SHIFT+F6<br />

Foretag ønskede ændringer.<br />

Go<strong>dk</strong>end med<br />

Formen vises igen på skærmen.<br />

Afslutte form Billedet kan lukkes med F3 eller blokke og felter kan<br />

behandles (se huskelister hertil)<br />

Form – Enkelt record blok (slet)<br />

Funktion Fremgangsmåde Tast<br />

Slette blok Blokke kan ikke slette i en form.<br />

Exportere<br />

form<br />

Hvis en blok skal slettes, skal formen først eksporteres ud i<br />

en fil i styresystemet, bloklinjerne fjernes og formen<br />

importeres igen.<br />

Generelt/Tilpasning/Udviklingsmenu/Frm/<br />

Export/Export<br />

Vælg form fra listen over forms ENTER<br />

Angiv stinavn på den fil hvortil formen skal exporteres.<br />

Slette blok i fil Generelt/Tilpasning/Hop til operativsystem<br />

Importere<br />

form igen<br />

Åbn filen med den exporterede form.<br />

(Anvend dos editoren eller andet værktøj til editering.)<br />

Slet alle linjer vedr. den blok der fjernes.<br />

Linjerne begynder med ’BLOCK bloknavn’ og slutter med<br />

’ENDBLOCK’.<br />

Afslut og go<strong>dk</strong>end ændringerne.<br />

Luk styresystemet EXIT<br />

Generelt/Tilpasning/Udviklingsmenu/Frm/ Import<br />

Angiv stinavn på filen med formen der skal importeres.<br />

Blokken er nu fjernet fra formen.<br />

205<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

F3<br />

F3


Form – Multi record blok (opret)<br />

Funktion Fremgangsmåde Tast<br />

Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />

Vælg form fra listen over forms ENTER<br />

Formen vises på skærmen.<br />

Oprette blok Opret en blok SHIFT+F2<br />

Gentages for<br />

hver blok der<br />

skal oprettes<br />

Indtastningsbilledet Opsætning for blok åbnes.<br />

De vigtigste feltet at udfylde er:<br />

Blok navn Feltet skal udfyldes.<br />

Anvend om muligt samme navn som kartoteket. Det gør<br />

det nemmere at anvende forms control kommandoerne,<br />

idet disse altid refererer til bloknavnet og ikke til<br />

kartoteksnavnet.<br />

Kartotek Udfyldes kun når blokken skal indeholde felter fra et<br />

Autogenerér<br />

blok<br />

kartotek.<br />

Hent kartoteksnavnet fra listen over kartoteker.<br />

Udfyldes med JA<br />

Auto options Åbn indtastningsbilledet Blok auto-options ENTER<br />

Ved anvendelse af defaultværdierne fylder det<br />

autogenererede område automatisk hele vinduet.<br />

Du kan ændre værdierne efter ønske.<br />

Go<strong>dk</strong>end billedet Blok auto-options F3<br />

Go<strong>dk</strong>end billedet Opsætning for blok F3<br />

Afslutte form Go<strong>dk</strong>end og luk selve formen med<br />

eller<br />

arbejd videre med blokke og felter (se huskelister hertil).<br />

F3<br />

ALT+H<br />

206<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Form – Multi record blok (ret)<br />

Funktion Fremgangsmåde Tast<br />

Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />

Vælg form fra listen over forms ENTER<br />

Formen vises på skærmen.<br />

Bloknavn ses i bunden af skærmen.<br />

Åbne blok Vælg blok der skal ændres SHIFT+F8<br />

Gentages for<br />

hver blok der<br />

skal ændres<br />

Åbn for indtastningsbilledet Opsætning for blok SHIFT+F6<br />

Foretag ønskede ændringer i selve indtastningsbilledet<br />

Opsætning for blok eller i billedet Blok auto-options.<br />

Go<strong>dk</strong>end med<br />

Formen vises igen på skærmen.<br />

Afslutte Billedet kan lukkes med<br />

eller<br />

blokke og felter kan behandles (se huskelister hertil).<br />

Form – Multi record blok (slet)<br />

Funktion Fremgangsmåde Tast<br />

Slette blok Der henvises til huskelisten:<br />

Form – Enkelt record blok (slet).<br />

207<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

F3<br />

F3


Form – Felter (opret)<br />

Funktion Fremgangsmåde Tast<br />

Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />

I enkelt record<br />

blok<br />

I multi record<br />

blok<br />

Indsætte felt<br />

Gentages for<br />

hvert felt der<br />

skal indsættes<br />

Vælg form fra listen over forms ENTER<br />

Formen vises på skærmen.<br />

Du skal selv placere cursoren, hvor feltet skal stå.<br />

I en multi record blok, autogenereret, placeres felterne<br />

automatisk. Du skal derfor ikke selv placere cursoren.<br />

Indsæt feltet.<br />

Du ser nu boksen til indtastning af feltnavn.<br />

Vis liste over felter ENTER<br />

Hent feltnavn fra listen<br />

Du ser nu skærmbilledet med feltets opsætning.<br />

.Opsætningen kan ændres efter behov.<br />

Go<strong>dk</strong>end feltet F3<br />

Afslutte form Go<strong>dk</strong>end og afslut hele formen<br />

Form – Felter (ret)<br />

208<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

F2<br />

ENTER<br />

Funktion Fremgangsmåde Tast<br />

Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />

Vælg form fra listen over forms ENTER<br />

Formen vises på skærmen.<br />

Åbne felt Placér cursoren på feltet PILE<br />

Gentages for<br />

hvert felt der<br />

skal ændres<br />

Åbn billedet med feltets opsætning F6<br />

Foretag ønskede ændringer i opsætningen.<br />

Go<strong>dk</strong>end feltet F3<br />

Afslutte form Go<strong>dk</strong>end og afslut hele formen F3<br />

F3


Form – Felter (slet)<br />

Funktion Fremgangsmåde Tast<br />

Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />

Vælg form fra listen over forms ENTER<br />

Formen vises på skærmen.<br />

Finde felt Placér cursoren på feltet PILE<br />

Gentages for<br />

hvert felt der<br />

skal slettes<br />

Slet feltet ALT+F9<br />

Afslutte form Go<strong>dk</strong>end og afslut hele formen F3<br />

Form – Triggere i vinduet<br />

Funktion Fremgangsmåde Tast<br />

Finde trigger i<br />

vindue<br />

Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />

Vælg form fra listen over forms ENTER<br />

Formen vises på skærmen.<br />

Åbn skærmbilledet Opsætning af vinduet CTRL+F6<br />

Vælg feltet Forms formler og åbn listen over triggere PILE<br />

ENTER<br />

Åbne trigger Vælg trigger og åbn tilhørende editorboks PILE og ENTER<br />

Gentages ved<br />

flere trigger<br />

Afslutte<br />

trigger i<br />

vindue<br />

Indtast ønsket kode.<br />

Go<strong>dk</strong>end og afslut koden F3<br />

Vælg anden trigger eller<br />

luk listen over triggere ESC<br />

Go<strong>dk</strong>end og afslut Opsætning af vinduet F3<br />

209<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Form – Triggere i blokke<br />

Funktion Fremgangsmåde Tast<br />

Finde blok<br />

med triggere<br />

Åbne trigger<br />

Gentages ved<br />

flere triggere<br />

Afslutte<br />

bloktrigger<br />

Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />

Vælg form fra listen over forms ENTER<br />

Formen vises på skærmen.<br />

Vælg blok SHIFT+F8<br />

Åbn skærmbilledet Opsætning for blok SHIFT+F6<br />

Vælg feltet Blok formler og åbn listen over triggere PILE / ENTER<br />

Vælg trigger og åbn tilhørende editorboks PILE / ENTER<br />

Indtast ønsket kode.<br />

Go<strong>dk</strong>end og afslut koden F3<br />

Vælg anden trigger eller<br />

Form – Triggere i felter<br />

luk listen over triggere ESC<br />

Go<strong>dk</strong>end og afslut Opsætning for blok F3<br />

Afslut selve formen F3<br />

Funktion Fremgangsmåde Tast<br />

Finde felt med<br />

triggere<br />

Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />

Vælg form fra listen over forms ENTER<br />

Formen vises på skærmen. Vælg felt<br />

Åbn skærmbilledet ’Opsætning af … felt’ F6<br />

Vælg feltet Formler for selve feltet og åbn listen over<br />

triggere<br />

PILE<br />

PILE<br />

ENTER<br />

Åbne trigger Vælg trigger og åbn tilhørende editorboks PILE og ENTER<br />

Gentages ved<br />

flere triggere<br />

Afslutte<br />

felttrigger<br />

Indtast ønsket kode.<br />

Go<strong>dk</strong>end og afslut koden F3<br />

Vælg anden trigger eller<br />

luk listen over triggere ESC<br />

Go<strong>dk</strong>end og afslut ’Opsætning af … felt’ F3<br />

Afslut selve formen F3<br />

210<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Del III – Rapporter<br />

211<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


1. Rapport XAL<br />

Mål med lektionen<br />

Formålet med denne lektion er at give deltagerne grundlæggende viden om opbygningen af<br />

rapportgeneratoren i C5.<br />

I lektionen lægges der særlig vægt på rapportgeneratorens XAL editor.<br />

Kommandoerne SEARCH, USING, ORDER, WHERE og PROMPT repeteres.<br />

Efter lektionen skal kursisterne kunne:<br />

Anvende rapportgeneratorens XAL editor til indtastning af XAL kørsler<br />

Anvende kommandoen OUTPUT, og kende forskel på anvendelsen af OUTPUT og PRINT<br />

Gemme rapporter.<br />

Generelt<br />

Rapportgeneratoren er det værktøj i C5 der anvendes til opbygning og udskrivning af rapporter på<br />

papir.<br />

Generatoren anvendes både til oprettelse og vedligeholdelse af rapporter. Den kan startes i<br />

udviklingsmenuen i kolonnen REP og består af to processer.<br />

Processer i rapportgeneratoren<br />

Rapportgeneratoren i C5 arbejder med to processer.<br />

Rapportgeneratorens to processer<br />

Nr Navn Anvendelse<br />

14 Rapport-opbygning Oprettelse af nye og ændring af eksisterende rapporter i<br />

menulinjerne Opret og Ret<br />

15 Rapport-afvikling Afvikling af rapporter i menulinjen Kør<br />

Rapporter der oprettes og vedligeholdes i de to processer har alle for- og efternavne.<br />

Navne på rapporter<br />

I nye rapporter bestemmer du selv, hvad fornavnet skal være. Efternavnet tildeles automatisk af<br />

rapportgeneratoren afhængigt af hvilket ’lag’, der er åbnet.<br />

I denne lektion tages der udgangspunkt i brugerlaget ’USR’, der er det lag, der altid arbejdes i som<br />

standard. (Der henvises til Supervisor kurset for forklaring til de forskellige lag).<br />

Standardrapporterne der udvikles af Microsoft ligger i SYS laget, og de tilrettede standardrapporter og<br />

bruger-rapporter ligger i USR laget.<br />

Når standardrapporter i SYS laget tilrettes af brugerne, gemmes de automatisk i brugerlaget under<br />

samme fornavn som standardrapporten, men med efternavnet USR.<br />

212<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Vigtigt!<br />

Standardrapporterne kan ikke overskrives, og de kan ikke slettes. Det kan bruger-rapporterne derimod.<br />

Det anbefales derfor at udvise forsigtighed, når der ændres i brugerrapporter.<br />

C5 vers. 2012 -> Eksempel på rapporter i udviklingsmenuen i kolonnen REP<br />

Rapportnavn Efternavn<br />

$InvenList Usr<br />

$CustBalanceList Usr<br />

... Sys<br />

CustBalanceList Sys<br />

... Sys<br />

... Sys<br />

I ovenstående eksempel er rapporten InvenList en ny brugerrapport, hvorfor den har fået efternavnet<br />

USR. Rapporten CustBalanceList findes både i en SYS og en USR version. Dvs. at der er foretaget en<br />

tilretning af den originale CustBalanceList.<br />

Selve rapportgeneratorens opbygning behandles i næste afsnit.<br />

Bemærk! Navne på rapporter og andre elementer skal altid være i ét ord. Eneste tegn, ud over<br />

bogstaverne i alfabetet, er understreg og ved navne der består af flere ord, bør hvert ord starte med<br />

stort bogstav, men uden mellemrum mellem ordene.<br />

C5 vers. -> 4.1 Eksempel på rapporter i udviklingsmenuen i kolonnen REP<br />

Rapportnavn Efternavn<br />

$LagerListe Usr<br />

$DebSaldoListe Usr<br />

... Sys<br />

DebSaldoListe Sys<br />

... Sys<br />

... Sys<br />

I ovenstående eksempel er rapporten LagerListe en ny brugerrapport, hvorfor den har fået efternavnet<br />

USR. Rapporten DebSaldoListe findes både i en SYS og en USR version. Dvs. at der er foretaget en<br />

tilretning af den originale DebSaldoListe.<br />

Selve rapportgeneratorens opbygning behandles i næste afsnit.<br />

Bemærk! Navne på rapporter og andre elementer skal altid være i ét ord. Eneste tegn, ud over<br />

bogstaverne i alfabetet, er understreg og ved navne der består af flere ord, bør hvert ord starte med<br />

stort bogstav, men uden mellemrum mellem ordene.<br />

213<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Rapportgeneratorens opbygning<br />

Rapportgeneratoren består af to hovedområder:<br />

Område Anvendelse<br />

Rapport-XAL Indeholder XAL kørsel med kommandoer til udtræk af data fra<br />

kartoteker i databasen<br />

Rapport-definition Definition af linjer og opsætning af layout<br />

Data udtrækkes i rapport-XAL fra kartoteker og videresendes til rapport-definition til udskrivning i<br />

rapporten, som illustreret herunder.<br />

Dataudtræk med XAL<br />

Kartoteker<br />

Rapport-<br />

XAL<br />

Rapport-definition<br />

Når rapportgeneratoren aktiveres og åbnes, vises begge hovedområder samtidig. Områdernes<br />

placering i rapportgeneratoren ses i figuren på næste side.<br />

Hovedområdernes placering i rapportgeneratoren<br />

Rapport-XAL<br />

Rapport-definition<br />

Ved oprettelse af nye rapporter er det frivilligt hvilket hovedelement, der skal anvendes først.<br />

Denne lektion tager udgangspunkt i rapport-XAL, der behandles i næste afsnit.<br />

214<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Rapport-XAL<br />

Rapport-XAL er en almindelig XAL editorbox, der befinder sig i rapportgeneratorens øverste del.<br />

Rapport-XAL i form af en almindelig XAL editorboks<br />

ALT<br />

+ Z<br />

SH<br />

+<br />

F6<br />

Rapport-XAL i form af en XAL-editorboks<br />

Rapport-definition<br />

Når rapportgeneratoren åbnes stilles cursoren automatisk i området rapport-definition i venstre side.<br />

Med SH+F6 kan der herefter skiftes til rapport-XAL området.<br />

Rapportgeneratorens XAL editorbox fylder som default 3 linjer, men kan med ALT+Z zoomes op til fuld<br />

størrelse, så det er nemmere at overskue den kode, der indtastes.<br />

I editorboxen kan alle de normale XAL kommandoer og funktionstaster anvendes til søgning af data,<br />

der skal udskrives i rapporten.<br />

For at trække data ud af databasen og sende disse videre til rapporten, anvendes bl.a. XAL<br />

kommandoerne SEARCH og PROMPT, der repeteres efterfølgende.<br />

SEARCH (repetition)<br />

SEARCH kommandoerne består af SEARCH, END, USING, ORDER og WHERE.<br />

SEARCH kommandoernes betydning<br />

Kommando Betydning<br />

SEARCH Udfører en løkke ved at gennemløbe poster i et kartotek.<br />

END Afslutter søgeløkker<br />

Efterfølges af navnet på kartotek der skal gennemløbes.<br />

USING Angiver at der skal sorteres efter et fast index.<br />

Indexnavnet skrives efter kommandoen USING.<br />

ORDER Angiver at der skal sorteres efter et kartoteksfelt.<br />

Feltnavnet angives efter kommandoen ORDER.<br />

WHERE Angiver at der skal foretages en afgrænsning under gennemløbet.<br />

Kommandoen efterfølges af en betingelse, der skal være opfyldt for,<br />

at poster udleveres til XAL kørslen.<br />

215<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Herunder nogle få eksempler på anvendelsen af SEARCH kommandoerne.<br />

C5 vers. 2012 -> Eksempel på kartoteksgennemløb med sortering efter fast index<br />

SEARCH InvenTable USING ItemIdx<br />

PRINT ItemNumber, ” ”, ItemName1, ” ”, CostPrice<br />

END<br />

PAUSE<br />

C5 vers. -> 4.1 Eksempel på kartoteksgennemløb med sortering efter fast index<br />

SEARCH LagKart USING VareIdx<br />

PRINT VareNummer, ” ”, VareNavn1, ” ”, KostPris<br />

END<br />

PAUSE<br />

C5 vers. 2012 -> Eksempel på kartoteksgennemløb med sortering efter kartoteksfelt<br />

SEARCH InvenTable ORDER BY CostPrice<br />

PRINT ItemNumber, ” ”, ItemName1, ” ”, CostPrice<br />

END<br />

PAUSE<br />

C5 vers. -> 4.1 Eksempel på kartoteksgennemløb med sortering efter kartoteksfelt<br />

SEARCH LagKart ORDER BY KostPris<br />

PRINT VareNummer, ” ”, VareNavn1, ” ”, KostPris<br />

END<br />

PAUSE<br />

C5 vers. 2012 -> Eksempel på afgrænsning af poster med varenummer >= ”10000”<br />

SEARCH InvenTable<br />

WHERE ItemNumber >= ”10000”<br />

PRINT ItemNumber, ” ”, ItemName1, ” ”, CostPrice<br />

END<br />

C5 vers. -> 4.1 Eksempel på afgrænsning af poster med varenummer >= ”10000”<br />

SEARCH LagKart<br />

WHERE VareNummer >= ”10000”<br />

PRINT VareNummer, ” ”, VareNavn1, ” ”, KostPris<br />

END<br />

HUSK at PRINT kun udskriver på skærmen. Skal der udskrives på en printer anvendes kommandoen<br />

OUTPUT, der behandles i afsnittet om OUTPUT.<br />

PROMPT (repetition)<br />

PROMPT kommandoen anvendes til at give brugeren mulighed for selv at indtaste værdier i<br />

indtastningsfelter i en dialogboks.<br />

PROMPT kommandoerne består af PROMPT, INPUT, AT, GET og REF.<br />

PROMPT kommandoernes betydning<br />

Kommando Betydning<br />

PROMPT Danner en dialogboks bestående af overskrifter, ledetekster og<br />

indtastningsfelter.<br />

216<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Alle tekster SKAL stå i anførselstegn.<br />

GET GET efterfølges af navnet på en variabel i en parantes.<br />

Den angivne variabel modtager værdien, der indtastes i<br />

indtastningsfeltet.<br />

REF Anvendes for at give brugeren hjælp fra et givet kartotek.<br />

REF efterfølges af navn på referencekartotek og felt.<br />

Bruger kan med ALT+H slå op i det angivne kartotek.<br />

INPUT Afslutter boksen. Boksen placeres i øverste venstre hjørne på<br />

skærmen<br />

INPUT AT Afslutter boksen. Boksen placeres et bestemt sted på skærmen. AT<br />

efterfølges af kolonnenummer og linjenummer.<br />

Herunder eksempler på anvendelsen af PROMPT kommandoerne.<br />

Promptboks med to variabler<br />

INT &Antal<br />

STR 20 &VareNavn<br />

PROMPT ”Indtast vareinformationer”,,,<br />

”Antal ..........: ” GET (&Antal),<br />

”Varenavn .......: ” GET (&VareNavn)<br />

INPUT<br />

Promptboks med tekstlinje uden GET, men med INPUT AT<br />

STR 15 &Varenr<br />

PROMPT ”Indtast vareinformationer”,,,<br />

”Varenummer .......: ” GET (&Varenr),,<br />

”Hvis det ønskes, må varenummeret”,<br />

”gerne være alfanumerisk.”<br />

INPUT AT 15,4<br />

OUTPUT<br />

Kommandoen OUTPUT anvendes i Rapport-XAL til at sende udsøgte poster videre til rapportdefinition,<br />

så værdier herfra kan udskrives på printer.<br />

Syntaks for OUTPUT kommandoen<br />

OUTPUT <br />

Bemærk at OUTPUT kun efterfølges af navnet på et kartotek og ikke af navne på felter, som det er<br />

tilfældet med PRINT kommandoen.<br />

Hvor PRINT sender data til et vindue på skærmen, sender OUTPUT i stedet data til en rapport, der kan<br />

udskrives på papir.<br />

Anvendelse af PRINT eller OUTPUT<br />

217<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


XAL kørsel<br />

SEARCH Kartotek<br />

END<br />

PRINT<br />

OUTPUT<br />

Forskel på PRINT og OUTPUT<br />

Når data skal sendes til et vindue på skærmen, skal programmøren selv styre hvilke felter, der skal<br />

udskrives. Det sker ved at angive PRINT kommandoen efterfulgt af navnene på de enkelte felter.<br />

Når data skal sendes til en rapport, anvendes OUTPUT kommandoen, der tager fat i hele posten og<br />

sender samtlige felter videre til rapport-definitionen, hvor de enkelte felter udfyldes med værdier fra<br />

den modtagne post.<br />

Eksempler på anvendelse af PRINT og OUTPUT<br />

Efterfølgende vises eksempler på anvendelse af de to kommandoer PRINT og OUTPUT.<br />

C5 vers. 2012 -> Eksempel på PRINT<br />

SEARCH ItemTable<br />

PRINT ItemNumber, ” ”, ItemName1, ” ”, CostPrice<br />

END<br />

PAUSE<br />

C5 vers. -> 4.1 Eksempel på PRINT<br />

SEARCH LagKart<br />

PRINT VareNummer, ” ”, VareNavn1, ” ”, KostPris<br />

END<br />

PAUSE<br />

PRINT kommandoen efterfølges af de enkelte feltnavne, der skal udskrives på skærmen.<br />

C5 vers. 2012 -> Eksempel på OUTPUT<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

C5 vers. -> 4.1 Eksempel på OUTPUT<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

Skærm<br />

Rapport<br />

218<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


END<br />

OUTPUT kommandoen efterfølges af navnet på kartoteket. Det betyder at denne kommando sender<br />

hele posten videre til rapport-definitionen, hvor felternes værdier fordeles på rapporten.<br />

Bemærk at PAUSE ikke er nødvendig her.<br />

Komplet eksempel på XAL kode<br />

C5 vers. 2012 -> Promptboks med REF anvendt sammen med SEARCH<br />

Str 10 &FraVare<br />

Str 10 &TilVare<br />

PROMPT ”Udsøgning af lagervarer”,,,<br />

”Fra varenummer: ” GET(&FraVare REF InvenTable.ItemNumber),<br />

”Til varenummer: ” GET(&TilVare REF InvenTable.ItemNumber)<br />

INPUT AT 15,5<br />

SEARCH InvenTable<br />

WHERE ItemNumber >= &FraVare AND ItemNumber 4.1 Promptboks med REF anvendt sammen med SEARCH<br />

Str 10 &FraVare<br />

Str 10 &TilVare<br />

PROMPT ”Udsøgning af lagervarer”,,,<br />

”Fra varenummer: ” GET(&FraVare REF Lagkart.VareNummer),<br />

”Til varenummer: ” GET(&TilVare REF LagKart.VareNummer)<br />

INPUT AT 15,5<br />

SEARCH LagKart<br />

WHERE VareNummer >= &FraVare AND VareNummer


18000 Kabinet 1.250,20<br />

16000 Ram 520,40<br />

12000 Harddisk type 2 1.230,75<br />

14000 CD romdrev 50,10<br />

20000 Skærm 1.000,10<br />

Afhængig af hvad brugeren indtaster i PROMPT boxen, vil listen kun indeholde de varer, der har et<br />

varenummer, der er større end eller lig med og mindre end eller lig med de varenumre, der blev<br />

indtastet.<br />

220<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Rapport XAL<br />

Opgave 1: Rapport-XAL til ’Udlånsliste’<br />

Formål med opgaven<br />

At oprette XAL koden til en rapport med navnet ’Udlånsliste’. Rapporten er sorteret efter debitor og<br />

udlånsnummer.<br />

Beskrivelse<br />

Der skal oprettes XAL kode til en rapport med navnet ’Udlånsliste’.<br />

Data til listen hentes fra kartoteket UDLUdlånsKart og posterne afgrænses på debitorkontonummer.<br />

Afgrænsninger skal kunne indtastes i en promptboks med referencer til debitorkartotekets<br />

kontonummer.<br />

1 Opret en ny rapport.<br />

Forløb i C5 √<br />

2 Vælg Rapport XAL, hvor du indsætter og tilretter startkommentarer.<br />

3 Opret variabler til ’Fra konto’ og ’Til konto’<br />

4 Opret en promptboks med overskriften ’Udlånsliste’.<br />

Boksen skal prompte for ’Fra konto’ og ’Til konto’.<br />

Indsæt referencer til kartoteket CustTable feltet Account, så det bliver muligt i<br />

promptboksen at anvende ALT+H.<br />

5 Opret en søgeløkke på kartoteket UDLUdlånsKart.<br />

Anvend indexet UDLDebUdlIdx til sortering.<br />

Anvend afgrænsningerne fra variablerne i promptboksen.<br />

Send data til Rapport definition med OUTPUT kommandoen.<br />

6 Go<strong>dk</strong>end koden i Rapport XAL editoren og luk rapporten.<br />

7 Afprøv om promptboksen ser rigtig ud og virker mht. opslag i debitorkartoteket.<br />

221<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


2. Rapport definition grundlæggende<br />

Mål med lektionen<br />

At give deltagerne grundlæggende indsigt i rapportgeneratorens definitionsområde.<br />

Efter lektionen skal kursisterne kunne:<br />

Oprette rapportlinjer med kartoteksfelter, ledetekster og fritekster<br />

Anvende kommandoen OUTPUT og kartotekskolonnen som bindeled mellem<br />

rapportgeneratorens XAL-editor og definitionsområdet<br />

Afvikle rapporter.<br />

Generelt<br />

Når der skal udfærdiges rapporter i rapportgeneratoren, dannes der først en XAL-kode i rapport-XAL. I<br />

denne kode indsættes kommandoen OUTPUT, der sørger for at sende udtrukne poster videre til<br />

definitionsområdet.<br />

Dataudtræk med XAL<br />

Definitionsområdet<br />

Introduktion til definitionsområdet<br />

Kartoteker<br />

Rapport-XAL<br />

(OUTPUT)<br />

Rapport-definition<br />

Rapportgeneratorens definitionsområde består af fire kolonner som vist i illustrationen herunder.<br />

222<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Rapport-definition med de fire kolonner<br />

Linje-<br />

Typer<br />

Linje-XAL<br />

Kartoteker Layoutområde<br />

De fire kolonners betydning<br />

Kolonner Anvendelse<br />

Rapport-definition<br />

Linje-typer Anvendes til definition af, hvilke typer linjer der skal udskrives.<br />

En rapport kan, ud over selve dataene, f.eks. indeholde linjer med<br />

sideoverskrifter eller bundtekster, samt flere andre former for<br />

linjer. Dette behandles nærmere i lektionen om linjetyper.<br />

Kartoteker Anvendes først og fremmest til at definere, hvilket kartotek den<br />

enkelte linje får sine data fra, f.eks. når der udskrives data i<br />

rapporten.<br />

Linje-XAL Beregnet til XAL kode der kun gælder den aktuelle linje.<br />

Layoutområde Her opsættes selve rapportens layout med felter og fritekster.<br />

De enkelte kolonner og deres anvendelse bliver hver især behandlet nærmere i efterfølgende lektioner<br />

på dette og det efterfølgende kursus. Der vil således ikke blive givet en komplet vejledning alene på<br />

dette kursus, men nok til at kunne fremstille egne rapporter og redigere i eksisterende.<br />

Oprettelse af rapportlinjer foregår ved at udfylde de forskellige kolonner med værdier, der svarer til<br />

udskriftens indhold og udsøgte data.<br />

Linjetypen bestemmer ofte, hvad linjen skal anvendes til i rapporten, og hvordan de øvrige kolonner<br />

skal udfyldes. Den vigtigste linjetype er Body, der behandles efterfølgende.<br />

223<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Skema med funktionstaster i rapportgeneratoren<br />

Feltbehandling Redigering<br />

Opret felt<br />

F2 ALT D<br />

CTRL F2<br />

ALT F2<br />

F6<br />

ALT F9<br />

SH F6<br />

Opret felt<br />

Direkte fra kartotek<br />

Opret felt<br />

Ledetekst eller overskrift<br />

Ret felt<br />

Alle typer<br />

Slet felt<br />

Stå først på feltet<br />

Rapport XAL<br />

Hop til editorboksen<br />

Flere funktioner kan findes med F1.<br />

SH F5<br />

CTRL F5<br />

ALT I<br />

ALT L<br />

DELETE<br />

Slet én linje<br />

Kopiér felt<br />

eller afmærkede linjer<br />

Flyt felt<br />

eller afmærkede linjer<br />

Indsæt felt<br />

eller afmærkede linjer<br />

Afmærk linjer<br />

Anvend piletaster. Fjernes<br />

med ALT+F5<br />

Slet markerede linjer<br />

224<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Linjetypen Body<br />

Kolonnen linjetyper<br />

De vigtigste linjer i en rapport er de, der udgør selve ’kroppen’ i rapporten.<br />

I definitionsområdet kaldes disse linjer for Body linjer. Body linjer oprettes ved at vælge typen Body i<br />

kolonnen med linjetyper.<br />

Body linjer er således de linjer i rapporten, der indeholder data fra databasen. Derfor indeholder Body<br />

linjerne i definitionsområdet også informationer om, hvilket kartotek data kommer fra, og hvilke felter<br />

der skal udskrives på papiret.<br />

Body linjer til en rapport opstilles som vist i nedenstående figur.<br />

C5 vers. 2012 -> Opsætning Body linje i definitionsområdet<br />

Body<br />

InvenTable<br />

Definitionsområde<br />

Layoutområde<br />

Bemærk at kartotekskolonnen og layoutområdet også er udfyldt. Dette er vigtigt ved linjetypen Body.<br />

C5 vers. -> 4.1 Opsætning op Body linje i definitionsområdet<br />

Body<br />

LagKart<br />

Rapportens ’krop’ i form af data fra databasen<br />

Disse linjer angives som linjetypen Body<br />

ItemNumber ItemName1<br />

VareNummer VareNavn1<br />

Definitionsområde<br />

Layoutområde<br />

CostPrice<br />

KostPris<br />

Bemærk at kartotekskolonnen og layoutområdet også er udfyldt. Dette er vigtigt ved linjetypen Body.<br />

225<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Kartotekskolonnen<br />

Kartotekskolonnen er bindeleddet mellem rapportgeneratorens XAL-editor og definitionsområdet.<br />

Kartotekskolonnen skal udfyldes med navnet på det kartotek, der angives med kommandoen OUTPUT<br />

i rapport-XAL.<br />

C5 vers. 2012 -> Kartotekskolonne med samme kartotek som i OUTPUT<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

Body InvenTable ItemNumber ItemName1<br />

CostPrice<br />

Definitionsområde<br />

Layoutområde<br />

C5 vers. -> 4.1 Kartotekskolonne med samme kartotek som i OUTPUT<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

Body LagKart VareNummer VareNavn1<br />

KostPris<br />

Definitionsområde<br />

Layoutområde<br />

Hvis kartotekskolonnen udfyldes med et andet kartoteksnavn end det, der angives i OUTPUT<br />

kommandoen, afvikles rapporten ikke korrekt.<br />

Første gang der indsættes en Body linje, udfyldes kartotekskolonnen automatisk med en *. Denne<br />

stjerne er et wildcard, der kan erstatte et hvilket som helst kartotek. For at dette fungerer, kræver det,<br />

at kartoteksfelterne i layoutområdet bliver kvalificeret med kartoteksnavnet.<br />

Det anbefales, at der altid indsættes kartoteksnavn!<br />

Det anbefales, at der ALTID indsættes kartoteksnavn i kartotekskolonnen, idet det kan blive svært, at<br />

overskue definitionsområder med mange rapportlinjer.<br />

Resultat af ovenstående rapportopstilling<br />

18000 Kabinet 1.250,20<br />

16000 Ram 520,40<br />

12000 Harddisk type 2 1.230,75<br />

14000 CD romdrev 50,10<br />

20000 Skærm 1.000,10<br />

226<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Layoutområdet<br />

Layoutområdet anvendes til beskrivelse af rapportens udseende eller layout.<br />

Beskrivelsen udføres ved at indsætte kartoteksfelter, ledetekster eller fritekster.<br />

Kartoteksfelter<br />

Kartoteksfelter kan indsættes med forskellige metoder.<br />

I denne lektion anvendes metoden CTRL+F2. Med denne metode skal cursoren først placeres i<br />

layoutområdet i den kolonne, hvor feltet skal starte. Når funktionstasten aktiveres, vælges først<br />

kartoteksnavn og derefter feltnavn, der så overføres til layoutområdet.<br />

C5 vers. 2012 -> Oprettelse af felt i layoutområde<br />

Body<br />

Bemærk!<br />

InvenTable<br />

Ved oprettelse af felter med CTRL+F2, føres kartoteksnavnet med over i feltet i layoutområdet. I<br />

ovenstående eksempel står der ’ItemName1’ i feltet, ved rigtig overførsel med CTRL+F2 kommer der<br />

til at stå ’InvenTable.ItemName1’.<br />

Når felter foranstilles med kartoteksnavn, siges det, at feltet er kvalificeret.<br />

C5 vers. -> 4.1 Oprettelse af felt i layoutområde<br />

Body<br />

LagKart<br />

Cursor placeres, hvor feltet skal starte.<br />

ItemNumber ItemName1<br />

Vælg<br />

kartotek<br />

Ctrl F2<br />

Vælg felt<br />

Cursor placeres, hvor feltet skal starte.<br />

VareNummer VareNavn1<br />

Vælg<br />

kartotek<br />

Ctrl F2<br />

Vælg felt<br />

227<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Bemærk!<br />

Ved oprettelse af felter med CTRL+F2, føres kartoteksnavnet med over i feltet i layoutområdet. I<br />

ovenstående eksempel står der ’VareNavn1’ i feltet, ved rigtig overførsel med CTRL+F2 kommer der<br />

til at stå ’LagerKart.VareNavn1’.<br />

Når felter foranstilles med kartoteksnavn, siges det, at feltet er kvalificeret.<br />

Flere bodylinjer i samme rapport<br />

Der kan være flere body linjer til samme kartotek. Ovenstående eksempel kunne f.eks. ændres, så<br />

felterne står under hinanden.<br />

C5 vers. 2012 -> Flere Body linjer i samme rapport<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

Body<br />

Body<br />

Body<br />

Body<br />

InvenTable<br />

InvenTable<br />

InvenTable<br />

InvenTable<br />

C5 vers. -> 4.1 Flere Body linjer i samme rapport<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

Body<br />

Body<br />

Body<br />

Body<br />

LagKart<br />

LagKart<br />

LagKart<br />

LagKart<br />

I layoutet er der yderligere indsat en ekstra bodylinje uden felter. Denne vil medføre, at der udskrives<br />

en blank linje.<br />

Hver gang OUTPUT kommandoen eksekveres i søgeløkken, sendes der data til definitionsområdet,<br />

hvor samtlige bodylinjer med samme kartoteksnavn bliver udskrevet. Det betyder, at varerne kommer<br />

til at stå under hinanden med en blank linje mellem hver vare.<br />

Bodylinjerne udskrives i den rækkefølge, de har i definitionsområdet.<br />

C5 vers. 2012 -> Flere Body linjer pr. post<br />

18000<br />

Kabinet<br />

1.250,20<br />

16000<br />

Ram<br />

520,40<br />

12000<br />

Harddisk type 2<br />

1.230,75<br />

ItemNumber<br />

ItemName1<br />

CostPrice<br />

VareNummer<br />

VareNavn1<br />

KostPris<br />

228<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


I eksemplet udskrives ItemNumber, ItemName1 og CostPrice på hver sin linje. Hver vare adskilles med<br />

en blank linje.<br />

C5 vers. -> 4.1 Flere Body linjer pr. post<br />

18000<br />

Kabinet<br />

1.250,20<br />

16000<br />

Ram<br />

520,40<br />

12000<br />

Harddisk type 2<br />

1.230,75<br />

I eksemplet udskrives VareNummer, VareNavn1 og KostPris på hver sin linje. Hver vare adskilles med en<br />

blank linje.<br />

Fritekst og ledetekster<br />

Der findes forskellige muligheder for indtastning af tekst i layoutområdet.<br />

Fritekst<br />

Fritekst er tekst, der blot indtastes på linjerne, hvor der er plads til det. Det kan være bogstaver, tal og<br />

andre tegn, der findes på tastaturet.<br />

Teksten behøver ikke at stå i anførselstegn, sådan som det er nødvendigt, når PRINT kommandoen<br />

skriver tekst på skærmen.<br />

Teksten kan være forklaringer eller som ledetekster. Ledetekster kan dog også hentes direkte fra<br />

opsætningen i databasen.<br />

Ledetekster<br />

I stedet for selv at finde på ledetekster til felter, kan disse hentes direkte fra kartoteksdefinitionen med<br />

funktionen ALT+F2 Opret ledetekst.<br />

Når funktionen vælges, åbner skærmbilledet med overskriften ’Opret ledetekst’. I skærmbilledet er det<br />

muligt, at justere ledetekstens udseende ved at udfylde nogle felter som vist i nedenstående skema:<br />

229<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Felter i ’Opret ledetekst’<br />

Felter Værdier<br />

Kartotek Navn på kartotek hvorfra ledetekst skal hentes.<br />

Åbnes med ALT+H, hvis det ikke vises ved åbning.<br />

Felt Felt hvorfra der skal hentes ledetekst. Åbnes med ALT+H.<br />

Feltets bredde Antal tegn ledeteksten skal fylde i rapporten.<br />

Overskrift/<br />

ledetekst<br />

Tekstens justering Vælg mellem:<br />

Ret til store<br />

bogstaver<br />

Ved bredder større end teksten udfyldes automatisk med punkter og<br />

kolon.<br />

Der kan vælges, om det er en kolonne overskrift eller en ledetekst.<br />

Forskellen er ”....: ” ved ledetekst.<br />

Venstrestillet, Højrestillet eller Centreret.<br />

Skal ledeteksten vises med store eller små bogstaver.<br />

Vælg mellem: Nej eller Ja.<br />

Feltbetingelse Ved at taste ENTER åbnes en editorboks, hvori der kan indtastes<br />

betingelser for, om ledeteksten skal udskrives eller ej.<br />

Der kan være fordele ved at anvende ledetekster fra kartotekerne, idet teksterne således altid er ens fra<br />

rapport til rapport.<br />

C5 vers. 2012 -> Opsætning af ledetekst og fritekst<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

Body<br />

Body<br />

Body<br />

Body<br />

InvenTable<br />

InvenTable<br />

InvenTable<br />

InvenTable<br />

VARENUMMER........: ItemNumber<br />

VARENAVN..........: ItemName1<br />

KOSTPRIS..........: CostPrice<br />

---------------------------------------<br />

ALT+F2<br />

Opret ledetekst<br />

230<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. -> 4.1 Opsætning af ledetekst og fritekst<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

Body<br />

Body<br />

Body<br />

Body<br />

LagKart<br />

LagKart<br />

LagKart<br />

LagKart<br />

VARENUMMER........: VareNummer<br />

VARENAVN..........: VareNavn1<br />

KOSTPRIS..........: KostPris<br />

---------------------------------------<br />

ALT+F2<br />

Opret ledetekst<br />

I dette eksempel er der oprettet ledetekster foran hver af de tre felter. Ledeteksterne udskrives med<br />

store bogstaver.<br />

Den stiplede linje er et eksempel på fritekst. Linjen er tekst, idet den blot er dannet af bindestreger. Det<br />

kunne være * eller et hvilket som helst andet tegn.<br />

Eksempel på rapport med ledetekster og fritekster<br />

VARENUMMER........: 18000<br />

VARENAVN..........: Kabinet<br />

KOSTPRIS..........: 1.250,20<br />

---------------------------------------<br />

VARENUMMER........: 16000<br />

VARENAVN..........: Ram<br />

KOSTPRIS..........: 520,40<br />

---------------------------------------<br />

VARENUMMER........: 12000<br />

VARENAVN..........: Harddisk type 2<br />

KOSTPRIS..........: 1.230,75<br />

---------------------------------------<br />

231<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Rapport definition, grundlæggende<br />

Opgave 1: Rapport-Layout til ’Udlånsliste’<br />

Formål med opgaven<br />

At oprette en Bodylinje i layoutet til rapporten ’Udlånsliste’.<br />

Beskrivelse<br />

I rapporten ’Udlånsliste’ fra forrige opgave, skal der oprettes en enkelt Bodylinje med felterne<br />

DebitorKto, UdlånsNr, ReturDato og Forsikringssum.<br />

1 Vælg rapporten ’Udlånsliste’ fra forrige opgave.<br />

Forløb √<br />

2 Opret en enkelt Bodylinje til kartoteket UDLUdlånsKart og indsæt felterne<br />

DebitorKto, UdlånsNr, ReturDato og ForsikringsSum.<br />

3 Go<strong>dk</strong>end rapporten.<br />

4 Afprøv rapporten med forskellige afgrænsninger.<br />

232<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


3. Linjetyper uden kartoteker<br />

Mål med lektionen<br />

Formålet med denne lektion er at give deltagerne overblik over linjetyper, der ikke anvender<br />

kartotekskolonnen.<br />

Efter lektionen skal kursisterne kunne:<br />

Anvende linjetyperne Page Header, Page Footer, Prolog og Epilog.<br />

Linjetyper generelt<br />

Ved at betragte en standardrapport på et stykke papir kan det ses, at den har forskellige grupper af<br />

indhold fordelt på papiret.<br />

Grundlæggende indeholder en rapport altid data fra databasen. Derudover kan der f.eks. være side<br />

hovede og side fod samt flere andre områder eller linjer med data.<br />

Grupper med informationer på papiret<br />

I rapportgeneratoren skelnes der mellem de forskellige grupper af indhold, idet disse<br />

gruppeinddelinger dannes i området rapport-definition vha. forskellige typer af linjer.<br />

Den første kolonne i definitions området anvendes til at definere de forskellige linjetyper, der kan være<br />

på rapporten.<br />

Kolonnen linjetyper i rapport-definition<br />

Linje<br />

Typer<br />

Side hovede<br />

Rapportens ’krop’ i form af data<br />

Side fod<br />

Rapport-definition<br />

233<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Linjetyper<br />

Linjetyperne vælges ved at placere cursoren i første kolonne.<br />

Tastes der ENTER, vises der en liste over mulige linjetyper. Den type, der vælges, overføres til kolonnen.<br />

Grupper af linjetyper<br />

Linjetyperne kan inddeles i følgende tre grupper:<br />

Linjetyper UDEN kartoteker<br />

Type Navn Anvendelse<br />

PgHd Page Header Overskriftslinje på hver side i rapporten<br />

PgFt Page Footer Underskriftslinje på hver side i rapporten<br />

Prol Prolog Indledende bemærkninger i starten af rapporten<br />

Epil Epilog Afsluttende bemærkninger i slutningen af rapporten<br />

Linjetyper MED kartoteker<br />

Type Navn Anvendelse<br />

GrHd Group Header Overskriftslinje til hver gruppe af poster i kartotek<br />

Body Body Linje med værdier fra OUTPUT kartoteket<br />

GrFt Page Header Underskriftslinje til hver gruppe af poster<br />

Subt Subtotal Kun til tekst der udskrives foran automatiske totaler<br />

Linjetype med speciel styring<br />

Type Navn Anvendelse<br />

Ctrl Control Linje der styres med specielle Control macroer<br />

Denne lektion behandler kun linjetyper uden kartoteker.<br />

Linjetypen Page header<br />

Linjetypen Page Header anvendes til at definere de linjer, der øverst på hver side udgør sidens hoved.<br />

Placering af Page Header på papiret<br />

Page Header<br />

Body linjer<br />

Rapportens ’krop’ i form af data<br />

234<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Sidens hoved er oftest almindelig tekst, der udskrives i toppen af hver side på rapporten. Det kan f.eks.<br />

være kolonneoverskrifter til Body linjer eller forskellige typer af felter. Teksterne kan indsættes som<br />

almindelig tekst uden citationstegn.<br />

C5 vers. 2012 -> Eksempel på anvendelse af Page Header<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

PgHd<br />

Varenummer Navn KostPris<br />

Body InvenTable ItemNumber ItemName1<br />

CostPrice<br />

C5 vers. -> 4.1 Eksempel på anvendelse af Page Header<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

PgHd<br />

Body LagKart<br />

Resultat<br />

Varenummer Navn Kostpris<br />

VareNummer VareNavn1<br />

KostPris<br />

VareNummer Navn KostPris<br />

18000 Kabinet 1.250,20<br />

16000 Ram 520,40<br />

12000 Harddisk type 2 1.230,75<br />

Flere linjer<br />

Der kan udmærket være flere Page Header linjer på en side, hvis der er behov for det. Blanke linjer<br />

opnås ved at indsætte linjer uden tekst eller felter i layoutområdet.<br />

235<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. 2012 -> Eksempel med flere Page Header linjer<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

PgHd<br />

PgHd<br />

PgHd<br />

PgHd<br />

Body<br />

Body<br />

Body<br />

InvenTable<br />

InvenTable<br />

InvenTable<br />

Vareliste med kostpriser<br />

C5 vers. -> 4.1 Eksempel med flere Page Header linjer<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

PgHd<br />

PgHd<br />

PgHd<br />

PgHd<br />

Body<br />

Body<br />

Body<br />

Resultat<br />

LagKart<br />

LagKart<br />

LagKart<br />

Vareliste med kostpriser<br />

Varenummer Navn Kostpris<br />

----------- ------------------- ---------<br />

ItemNumber ItemName1<br />

CostPrice<br />

VareNavn1 ItemName2<br />

mmer<br />

Vareliste med kostpriser<br />

Varenummer Navn Kostpris<br />

----------- ------------------- ---------<br />

VareNummer VareNavn1<br />

KostPris<br />

VareNavn1 VareNavn2<br />

mmer<br />

VareNummer Navn KostPris<br />

----------- -------------------- --------<br />

18000 Kabinet 1.250,20<br />

Plastic grå<br />

16000 Ram 520,40<br />

8MB<br />

12000 Harddisk type 2 1.230,75<br />

500MB<br />

I ovenstående eksempel er der indsat en blank linje i Page Header og en i Body.<br />

Rækkefølge<br />

Page Header<br />

Hver gang der startes på en ny side i rapporten, udføres alle Page Header linjer automatisk. Linjerne<br />

udføres i den rækkefølge, de har i området rapport-definition.<br />

Body<br />

Bodylinjerne udføres ikke automatisk, men derimod hver gang kommandoen OUTPUT eksekveres i<br />

XAL-koden.<br />

236<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Linjetypen Page footer<br />

Linjetypen Page footer anvendes til at definere de linjer, der nederst på hver side udgør sidens fod.<br />

Placering af Page Footer på papiret<br />

Sidens fod er oftest almindelig tekst, der udskrives i bunden af hver side på rapporten. Det kan f.eks.<br />

være en forklaring til forskellige forekomster i bodylinjerne.<br />

C5 vers. 2012 -> Eksempel på anvendelse af Page Footer<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

PgHd<br />

Body<br />

PgFt<br />

InvenTable<br />

C5 vers. -> 4.1 Eksempel på anvendelse af Page Footer<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

PgHd<br />

Body<br />

PgFt<br />

Resultat<br />

LagKart<br />

Page Header<br />

Body linjer<br />

Rapportens ’krop’ i form af data<br />

Page Footer<br />

Varenummer Navn Kostpris<br />

ItemNumber ItemName1 CostPrice<br />

VareNavn1 Varetyper på listen: Vare, Stykliste, Ydelse<br />

mmer<br />

Varenummer Navn Kostpris<br />

VareNummer VareNavn1 KostPris<br />

VareNavn1 Varetyper på listen: Vare, Stykliste, Ydelse<br />

mmer<br />

Varenummer Navn Kostpris<br />

237<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


18000 Kabinet 1.250,20<br />

16000 Ram 520,40<br />

12000 Harddisk type 2 1.230,75<br />

Varetyper på listen: Vare, Stykliste, Ydelse<br />

Flere linjer<br />

Der kan udmærket være flere Page Footer linjer på en side, hvis der er behov for det. Blanke linjer<br />

opnås ved at indsætte linjer uden tekst eller felter i layoutområdet.<br />

C5 vers. 2012 -> Eksempel med flere Page Footer linjer<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

PgHd<br />

PgHd<br />

PgHd<br />

PgHd<br />

Body<br />

PgFt<br />

PgFt<br />

PgFt<br />

InvenTable<br />

Vareliste med kostpriser<br />

C5 vers. -> 4.1 Eksempel med flere Page Footer linjer<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

PgHd<br />

PgHd<br />

PgHd<br />

PgHd<br />

Body<br />

PgFt<br />

PgFt<br />

PgFt<br />

Resultat<br />

LagKart<br />

Vareliste med kostpriser<br />

Varenummer Navn Kostpris<br />

----------- ------------------- ---------<br />

ItemNumber ItemName1 CostPrice<br />

VareNavn1<br />

Listen mmer indeholder varetyperne: Vare<br />

Stykliste<br />

Ydelse<br />

Vareliste med kostpriser<br />

Varenummer Navn Kostpris<br />

----------- ------------------- ---------<br />

VareNummer VareNavn1 KostPris<br />

VareNavn1<br />

Listen mmer indeholder varetyperne: Vare<br />

Stykliste<br />

Ydelse<br />

Varenummer Navn Kostpris<br />

---------- -------------------- --------<br />

18000 Kabinet 1.250,20<br />

16000 Ram 520,40<br />

12000 Harddisk type 2 1.230,75<br />

Listen indeholder varetyperne: Vare<br />

Stykliste<br />

Ydelse<br />

I ovenstående eksempel er der indsat en blank linje i Page Header.<br />

Rækkefølge<br />

Page Header<br />

238<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Hver gang der startes på en ny side i rapporten, udføres alle Page Header linjer automatisk. Linjerne<br />

udføres i den rækkefølge de har i området rapport-definition.<br />

Body<br />

Bodylinjerne udføres ikke automatisk, men derimod hver gang kommandoen OUTPUT eksekveres i<br />

XAL-koden.<br />

Page Footer<br />

Hver gang en side afsluttes udføres alle Pager Footer linjer automatisk. Linjerne udføres i den<br />

rækkefølge, de har i området rapport-definition.<br />

Bemærk! Linjetyperne kan godt stå blandet i rapport-definition, men den aktuelle linjetype udføres<br />

altid i rækkefølge fra oven og nedefter.<br />

Linjetypen Prolog<br />

Linjetypen Prolog anvendes til at definere linjer, der kun udskrives én gang i toppen af hele rapporten<br />

lige før linjer af typen Page Header.<br />

Placering af Prolog på papiret<br />

Prolog linjer anvendes f.eks. som overskrift eller indledende bemærkning til den samlede rapport.<br />

Bemærkninger i form af tekst indsættes som almindelig tekst uden citationstegn. Der kan desuden<br />

indgå felter af forskellig art i Prolog linjerne. Der henvises til lektionen om felter.<br />

C5 vers. 2012 -> Eksempel på anvendelse af Prolog<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

Prol<br />

Prol<br />

PgHd<br />

Body<br />

InvenTable<br />

C5 vers. -> 4.1 Eksempel på anvendelse af Prolog<br />

Prolog<br />

Page Header<br />

Body linjer<br />

Rapportens ’krop’ i form af data<br />

*** ANVENDES TIL KONTROL AF KOSTPRISER ***<br />

Varenummer Navn Kostpris<br />

ItemNumber ItemName1<br />

CostPrice<br />

239<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

Prol<br />

Prol<br />

PgHd<br />

Body<br />

Resultat<br />

LagKart<br />

*** ANVENDES TIL KONTROL AF KOSTPRISER ***<br />

Varenummer Navn Kostpris<br />

VareNummer VareNavn1<br />

KostPris<br />

*** ANVENDES TIL KONTROL AF KOSTPRISER ***<br />

Varenummer Navn Kostpris<br />

18000 Kabinet 1.250,20<br />

16000 Ram 520,40<br />

12000 Harddisk type 2 1.230,75<br />

Linjetypen Epilog<br />

Linjetypen Epilog anvendes til at definere linjer, der kun udskrives én gang som afslutning på hele<br />

rapporten, lige før en evt. Page Footer på sidste side.<br />

Placering af Epilog på papiret<br />

Epilog linjer anvendes til afsluttende bemærkninger til den samlede rapport. Bemærkninger indsættes<br />

som almindelig tekst uden citationstegn.<br />

C5 vers. 2012 -> Eksempel på anvendelse af Epilog<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

Page Header<br />

Body linjer<br />

Rapportens ’krop’ i form af data<br />

Epilog<br />

Page Footer<br />

240<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


PgHd<br />

Body<br />

PgFt<br />

Pgft<br />

Epil<br />

Epil<br />

InvenTable<br />

C5 vers. -> 4.1 Eksempel på anvendelse af Epilog<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

PgHd<br />

Body<br />

PgFt<br />

Pgft<br />

Epil<br />

Epil<br />

Resultat<br />

LagKart<br />

Varenummer Navn Kostpris<br />

18000 Kabinet 1.250,20<br />

16000 Ram 520,40<br />

Varenummer Navn Kostpris<br />

ItemNumber ItemName1<br />

CostPrice<br />

Varetyper på listen: Vare, Stykliste, Ydelse<br />

*** KONTROLLERET AF:_______DATO:_______***<br />

Varenummer Navn Kostpris<br />

VareNummer VareNavn1<br />

KostPris<br />

Varetyper på listen: Vare, Stykliste, Ydelse<br />

*** KONTROLLERET AF:_______DATO:_______***<br />

*** KONTROLLERET AF:_______DATO:_______ ***<br />

Varetyper på listen: Vare, Stykliste, Ydelse<br />

Tegning af streger og kasser<br />

Streger og kasser tegnes i layoutområdet med funktionen ALT+T.<br />

Funktion har tre virkemåder, afhængigt hvor mange gange den aktiveres.<br />

1. gang Enkelt streg<br />

2. gang Dobbelt streg<br />

3. gang Viskelæder<br />

Flyttes cursoren følger stregen med i alle retninger.<br />

Funktionen afsluttes med RETURN/ENTER , F3 eller ESC.<br />

Der kan tegnes streger og kasser i og på tværs af alle linjetyper. Nemmest er det at tegne lukkede<br />

kasser inden for samme linjetype.<br />

Tegning på tværs af flere linjetyper kan give problemer med sammenhæng, og linjer som ikke hænger<br />

helt sammen. Dette kan dog løses, men kræver kendskab til kontrol macroer og flere andre linjetyper<br />

end de der er gennemgået i denne lektion.<br />

C5 vers. 2012 -> Eksempel på tegning af streger<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

PgHd<br />

PgHd<br />

PgHd<br />

Body<br />

Inventable<br />

Varenummer<br />

Navn<br />

Kostpris<br />

ItemNumber ItemName1<br />

CostPrice<br />

241<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


PgFt<br />

Epil<br />

Epil<br />

Epil<br />

C5 vers. -> 4.1 Eksempel på tegning af streger<br />

¨¨¨¨¨¨¨¨¨¨¨<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

PgHd<br />

PgHd<br />

PgHd<br />

Body<br />

PgFt<br />

Epil<br />

Epil<br />

Epil<br />

Resultat<br />

Varenummer<br />

LagKart<br />

Varetyper på listen: Vare, Stykliste, Ydelse<br />

*** KONTROLLERET AF: DATO: ***<br />

VareNummer VareNavn1<br />

KostPris<br />

Varetyper på listen: Vare, Stykliste, Ydelse<br />

*** KONTROLLERET AF: DATO: ***<br />

18000 Kabinet 1.250,20<br />

16000 Ram 520,40<br />

12000 Harddisk type 2 1.230,75<br />

*** KONTROLLERET AF: DATO: ***<br />

Varetyper på listen: Vare, Stykliste, Ydelse<br />

I dette eksempel er der anvendt enkeltstreg rundt om overskrifterne i Page Header og dobbelt streg i<br />

Epilog til underskrift og dato.<br />

Sideskift<br />

Sideskift udføres i layoutområdet med funktionen ALT+S, men kan også indsættes fra lokalmenuen<br />

under Layout.<br />

Indsatte sideskift ses med tegnet ¨¨¨¨¨¨¨¨¨¨¨ og fylder hele linjen.<br />

C5 vers. 2012 -> Eksempel på anvendelse sideskift i Prolog<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

Prol<br />

Prol<br />

Prol<br />

Prol<br />

PgHd<br />

Body<br />

Navn<br />

InvenTable<br />

Varenummer<br />

Navn<br />

Kostpris<br />

Kostpris<br />

*******************************************<br />

* KONTROL AF KOSTPRISER *<br />

*******************************************<br />

¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨<br />

¨ Varenummer Navn Kostpris<br />

ItemNumber ItemName1<br />

CostPrice<br />

242<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. -> 4.1 Eksempel på anvendelse sideskift i Prolog<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

Prol<br />

Prol<br />

Prol<br />

Prol<br />

PgHd<br />

Body LagKart<br />

Resultat første side<br />

*******************************************<br />

* KONTROL AF KOSTPRISER *<br />

*******************************************<br />

¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨<br />

¨<br />

Varenummer Navn Kostpris<br />

VareNummer VareNavn1<br />

KostPris<br />

*******************************************<br />

* KONTROL AF KOSTPRISER *<br />

*******************************************<br />

Resultat efterfølgende sider<br />

Varenummer Navn Kostpris<br />

18000 Kabinet 1.250,20<br />

16000 Ram 520,40<br />

12000 Harddisk type 2 1.230,75<br />

Bemærk! I ovenstående eksempel findes der Prolog og Page Header linjer, og resultatet bliver som<br />

vist. Hvis der også tilføjes Page Footer linjer, resulterer det i at både Page Header og Page Footer<br />

udskrives på Prolog siden.<br />

243<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Linjetyper uden kartotek<br />

Opgave 1: Page header og -footer i ’Udlånsliste’<br />

Formål med opgaven<br />

At indsætte Page header og Page footer i rapporten ’Udlånsliste’.<br />

Beskrivelse<br />

Der skal indsættes Page header og Page footer linjer i rapporten ’Udlånsliste’ fra forrige opgave.<br />

Page header linjerne anvendes til rapportens navn og overskrifter over felterne.<br />

Page footer linjerne anvendes til en tekst om hvordan rapporten er sorteret.<br />

1 Vælg rapporten ’Udlånsliste’ fra forrige opgave<br />

2 Indsæt Page header linjer som følger:<br />

Teksten ’Udlånsliste’ der er rapportens navn<br />

Forløb √<br />

Tegnet streg under rapportens navn, lige så lang som felterne til sammen<br />

Overskrifter til hvert felt f.eks. Konto, Udlån, ReturDato og Forsikringssum.<br />

Højre- og venstrestil overskrifterne så de passer til felterne<br />

Tegnet streg under hver overskrift, men i felternes længde<br />

3 Indsæt Page footer linjer som følger:<br />

Blank linje<br />

Teksten: Rapporten er sorteret pr. debitor pr. udlånsnummer!<br />

4 Go<strong>dk</strong>end og afprøv rapporten.<br />

244<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgave 2: Prolog og Epilog i ’Udlånsliste’<br />

Formål med opgaven<br />

At indsætte linjer af typen Prolog og Epilog i rapporten ’Udlånsliste’.<br />

Beskrivelse<br />

Der skal indsættes Prolog og Epilog linjer i rapporten ’Udlånsliste’ fra forrige opgave.<br />

Prolog linjerne skal indeholde informationer om rapportens navn, anvendelse og sortering.<br />

Epilog linjerne skal indeholde en besked om feltet ReturDato.<br />

1 Vælg rapporten ’Udlånsliste’ fra forrige opgave.<br />

2 Fjern Page footer linjerne fra rapporten, hvis der er nogen.<br />

3 Indsæt Prolog linjer som følger:<br />

Blank linje til ramme<br />

Teksten: Rapport .....: Udlånsliste<br />

Teksten: Anvendelse: Kontrol af udlånsordrer pr. debitor<br />

Teksten: Sortering ...: Pr. debitor pr. udlånsordre<br />

Blank linje til ramme<br />

Sideskrift<br />

Forløb √<br />

Tegn en ramme der omkranser de tre linjer og tegn en lodret streg efter<br />

ledeteksterne. Den lodrette streg skal herefter opdele rammen i to felter.<br />

4 Indsæt Epilog linjer som følger:<br />

Blank linje<br />

Teksten: Bemærk! ReturDato er den forventede returdato!<br />

5 Go<strong>dk</strong>end og afprøv rapporten.<br />

245<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


4. Rapport definition felter i layout<br />

Mål med lektionen<br />

Formålet med denne lektion er, at give deltagerne indsigt i de forskellige typer af værdier, der kan<br />

indsættes i felter i layoutområdet. Desuden gives anvisning i de forskellige metoder, der findes til<br />

oprettelse af felter.<br />

Efter lektionen skal kursisterne kunne:<br />

Oprette og formatere felter i rapportlayoutet<br />

Oprette kartoteksfelter, felter med regneudtryk, tekst, macroer, variabler og funktioner.<br />

Felter generelt<br />

Udtrykket ’felter’ henviser ofte til værdier fra kartoteker. I rapportgeneratorens layoutområde anvendes<br />

tastekombinationen CTRL+F2 da også kun til indsættelse af felter direkte fra kartoteker.<br />

C5 vers. 2012 -> Felter i rapport layout kan være mange ting<br />

ItemNumber<br />

VareNavn1<br />

mmer<br />

Felter betragtes oftest som<br />

værende fra kartoteker, men kan<br />

være meget andet<br />

C5 vers. -> 4.1 Felter i rapport layout kan være mange ting<br />

VareNummer<br />

VareNavn1<br />

mmer<br />

ItemName1 CostPrice<br />

VareNavn1 KostPris<br />

Felter betragtes oftest som<br />

værende fra kartoteker, men kan<br />

være meget andet<br />

Skemaet herunder viser forskellige værdier der kan indsættes i rapportfelter.<br />

246<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Indhold i rapportfelter<br />

Feltnavne fra kartoteker<br />

Tekst<br />

Variabler<br />

Macroer<br />

Funktioner<br />

RegneUdtryk<br />

Der findes to metoder til oprettelse af felter, men kun den ene anvendes til oprettelse af ovenstående<br />

feltindhold. Metoderne beskrives i næste afsnit.<br />

Oprettelsesmetoder<br />

Der findes to metoder til oprettelse af felter:<br />

Metoder til oprettelse af felter<br />

Metode Anvendelse<br />

Tastekombinationen<br />

CTRL+F2<br />

Indsættelse af felt direkte fra kartotek. Der kan kun<br />

indsættes kartoteksfelter.<br />

Funktionen Opret felt F2 Indsættelse af felt via menu. Der kan både indsættes<br />

kartoteksfelter og alle andre typer værdier f.eks. macroer<br />

og variabler.<br />

Tastekombinationen CTRL+F2<br />

CTRL+F2 anvendes kun til indsættelse af felter direkte fra kartoteker.<br />

I det øjeblik funktionen aktiveres, åbnes en liste over alle kartoteker. Ud fra et valgt kartotek, kan der<br />

åbnes en ny liste over felter.<br />

I feltlisten vælges et felt, der overføres til rapportlayoutet.<br />

CTRL+F2 kan således kun anvendes til indsættelse af kartoteksfelter.<br />

I alle andre situationer anvendes funktionen Opret Felt.<br />

Funktionen Opret Felt - F2<br />

Funktionen Opret felt giver flere muligheder for at påvirke selve feltet allerede under oprettelsen.<br />

Funktionen kan startes på lokalmenuen eller via funktionstasten F2. Se huskeliste: Opret felt.<br />

247<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Menuen Opret felt<br />

Menupunkt Anvendelse<br />

Feltudtryk Indsættelse af alle typer udtryk f.eks. macroer, tekst,<br />

variabler o.a.<br />

Feltbetingelse Kode med betingelse der afgør om feltværdien skal<br />

udskrives<br />

Format Viser feltets format, der evt. kan ændres<br />

Subtotal Opstilling af automatiske totaler<br />

Når der oprettes nye felter, er det ikke nødvendigt at gå ind i alle menupunkter.<br />

I denne lektion behandles kun ’Feltudtryk’.<br />

Menuen anvendes også med funktionen ’Ret felt’ F6, når der skal ændres i eksisterende felter.<br />

Feltudtryk<br />

I menupunktet Feltudtryk åbnes et vindue i form af en editorboks.<br />

I boksen skrives XAL kode i form af tidligere nævnte mulige typer af feltindhold. Resultatet eller<br />

værdien af dette udtryk udskrives på rapporten.<br />

Oprettelse af nyt felt med F2<br />

I editorboksen kan de samme funktionstaster anvendes som i den normale XAL editor. Der kan dog<br />

ikke anvendes kommandoer som f.eks. IF-THEN-ELSE, SEARCH osv.<br />

De forskellige former for feltudtryk, der kan indtastes, behandles efterfølgende i egne afsnit.<br />

Formattering<br />

F2<br />

Cursor<br />

Feltudtryk<br />

Feltbetingelse<br />

Format<br />

Subtotaler<br />

I menupunktet Formattering gives mulighed for at ændre felters opsætning, så deres værdier skrives på<br />

anden vis end standarden.<br />

I C5 findes der fem felttyper, der opsættes forskelligt afhængigt af type.<br />

Editorboks til indtastning<br />

af feltindhold<br />

248<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Felttyper<br />

Heltal Kommatal Tekst Dato Fasttekst<br />

Feltopsætning kan udføres, når der oprettes nye felter med F2, og når der rettes i felter med F6. Når<br />

menupunktet Formattering vælges, vises der en dialogboks til justering af det aktuelle felt.<br />

Dialogboksen har forskelligt indhold afhængigt af felttype.<br />

Nedenstående skema indeholder en samlet oversigt over alle justeringsmuligheder. De første fem<br />

kolonner viser hvad, der kan justeres på de enkelte felter.<br />

Mulige justeringer på rapportfelter<br />

Felttype Felt i opsætning Muligheder<br />

H K T D F Feltnavn Navn på felt (kan ikke ændres)<br />

H K T D F Feltets bredde Antal tegn<br />

H K T D F Feltets justering Venstrestillet, Højrestillet, Centreret<br />

T F Store bogstaver Nej eller Ja<br />

D Rækkefølge (DMÅ) DMÅ (Dag, Måned, ÅR)<br />

D 2 seperatorer / - , mellemrum #<br />

D År skrives som Skrives ej, 2 cifre, 4 cifre<br />

D Måned skrives som Skrives ej, 1/ 2 cifre, altid 2, fuldt navn, 3 bogstaver<br />

D Dag skrives som Skrives ej, 1 eller 2 cifre, altid 2 cifre<br />

H K Hvordan vises minus Ej fortegn, -NNNN,DD, NNNN,DD-, (NNNN,DD)<br />

H K Vend fortegn Nej eller JA<br />

H K Vis tallet 0 (nul) Nej eller Ja<br />

H K Negativ forskydning Antal tegn<br />

K 1000 seperator Ingen, Komma, Punktum, Mellemrum<br />

K Decimal tegn Komma (,) eller Punktum (.)<br />

K Antal decimaler Antal<br />

Mulige værdier i feltudtryk<br />

Kartoteksfelter<br />

Det mest anvendte feltudtryk består af feltnavne fra kartoteker.<br />

Feltnavne angives med eller uden kvalifikation som vist i de næste afsnit.<br />

Bemærk! Kartoteker, der indsættes i kartotekskolonnen eller anvendes til kvalifikation af felter, skal<br />

altid indgå i XAL kørslen. Hvis dette ikke er tilfældet, skal der anvendes direkte opslag.<br />

249<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Kartoteker<br />

Kartoteksfelter uden kvalifikation<br />

Angives feltnavne uden kvalifikation, står de alene. Felterne SKAL tilhøre kartoteket i<br />

kartotekskolonnen.<br />

Syntaks for feltnavn uden kvalifikation<br />

<br />

C5 vers. 2012 -> Felt uden kvalifikation<br />

Body<br />

InvenTable<br />

I eksemplet tilhører ItemNumber-feltet kartoteket InvenTable. På samme måde kan de øvrige felter i<br />

lagerkartoteket angives.<br />

C5 vers. -> 4.1 Felt uden kvalifikation<br />

Body<br />

LagKart<br />

ItemNumber<br />

VareNavn1<br />

mmer<br />

Feltet tilhører kartoteket<br />

VareNummer<br />

VareNavn1<br />

mmer<br />

Feltet tilhører kartoteket<br />

Kartoteker i kartotekskolonnen, eller i<br />

kvalifikation af felter, skal altid indgå i en<br />

SEARCH løkke (eller en QT)<br />

I eksemplet tilhører VareNummer-feltet kartoteket LagKart. På samme måde kan de øvrige felter i<br />

lagerkartoteket angives.<br />

250<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Kartoteksfelter med kvalifikation<br />

Felter, der ikke tilhører kartoteket i kartotekskolonnen, skal kvalificeres.<br />

Kvalifikation udføres ved, at feltnavnet foranstilles med navnet på det kartotek, feltet tilhører. De to<br />

navne adskilles med et punktum.<br />

Syntaks for kvalifikation af feltnavn<br />

.<br />

Syntaksen består af kartoteksnavn og feltnavn adskilt med punktum.<br />

C5 vers. 2012 -> Felt med kvalifikation<br />

Body<br />

InvenTrans<br />

I dette eksempel findes ItemName1-feltet ikke i det givne kartotek StockTrans.<br />

For at få fat i varenavnet, der befinder sig i lagerkartoteket, bliver det derfor kvalificeret med navnet på<br />

lagerkartoteket som flg. ’InvenTable.ItemName1’.<br />

Det forudsættes at både InvenTrans og InvenTable indgår i Rapport-XAL på en eller anden måde f.eks. i<br />

en søgeløkke.<br />

C5 vers. -> 4.1 Felt med kvalifikation<br />

Body<br />

LagPost<br />

Feltet tilhører ikke<br />

kartoteket, og skal<br />

kvalificeres<br />

Feltet tilhører ikke<br />

kartoteket, og skal<br />

kvalificeres<br />

InvenTable.ItemName1<br />

LagKart.VareNavn1<br />

I dette eksempel findes VareNavn-feltet ikke i det givne kartotek LagPost.<br />

251<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


For at få fat i varenavnet, der befinder sig i lagerkartoteket, bliver det derfor kvalificeret med navnet på<br />

lagerkartoteket som flg. ’LagKart.VareNavn1’.<br />

Det forudsættes at både LagPost og LagKart indgår i Rapport-XAL på en eller anden måde f.eks. i en<br />

søgeløkke.<br />

Hvornår skal der kvalificeres?<br />

Generelt er det en god idé altid at anvende kvalifikation, så der aldrig er tvivl om, hvilke kartoteker de<br />

forskellige felter tilhører.<br />

Linjetyper uden kartoteksnavn<br />

Anvendes kartoteksfelter på linjetyper uden navn i kartotekskolonnen, SKAL disse altid kvalificeres.<br />

Dette gælder linjetyperne Page Header og Page Footer, Prolog og Epilog samt Control.<br />

C5 vers. 2012 -> Kvalifikation af felt i linjetype uden kartoteksnavn<br />

PgHd<br />

PgHd<br />

Body<br />

PgFt<br />

InvenTable<br />

Varegruppe: InvenTable.Group<br />

C5 vers. -> 4.1 Kvalifikation af felt i linjetype uden kartoteksnavn<br />

PgHd<br />

PgHd<br />

Body<br />

PgFt<br />

LagKart<br />

Linjetypen har ikke<br />

kartotek. Feltet skal<br />

kvalificeres<br />

Linjetypen har ikke<br />

kartotek. Feltet skal<br />

kvalificeres<br />

ItemNumber<br />

Linjetyper med andet kartoteksnavn<br />

Varegruppe: LagKart.Gruppe<br />

VareNummer<br />

ItemName1<br />

VareNavn1<br />

Anvendes kartoteksfelter på linjetyper med et andet navn i kartotekskolonnen end det kartotek<br />

felterne tilhører, SKAL disse felter også kvalificeres.<br />

Dette gælder linjetyperne Body, Group Header og Group Footer samt Subtotal.<br />

C5 vers. 2012 -> Kvalifikation af felt i linjetype med andet kartoteksnavn<br />

252<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Body<br />

InvenTrans<br />

ItemName1-feltet tilhører et andet kartotek end det i kartotekskolonnen, hvorfor det skal kvalificeres<br />

som vist.<br />

C5 vers. -> 4.1 Kvalifikation af felt i linjetype med andet kartoteksnavn<br />

Body<br />

LagPost<br />

VareNavn1-feltet tilhører et andet kartotek end det i kartotekskolonnen, hvorfor det skal kvalificeres<br />

som vist.<br />

HUSK! Kartoteker, der anvendes til kvalifikation, skal altid indgå i XAL kørslen. Hvis dette ikke er<br />

tilfældet, skal der anvendes direkte opslag.<br />

Tekst<br />

Feltudtryk kan udmærket være ren tekst. Den skal blot skrives i anførselstegn.<br />

I eksemplet herunder består feltudtrykket af teksten ”Go<strong>dk</strong>endt af:”, hvor teksten er angivet i<br />

anførselstegn.<br />

Dette kunne f.eks. være en rapport over kostpriser, hvor en medarbejder skal gennemse rapporten og<br />

go<strong>dk</strong>ende hver enkelt kostpris. Go<strong>dk</strong>endelsen udføres ved at skrive initialer ud for hver kostpris.<br />

C5 vers. 2012 -> Eksempel på feltudtryk med tekst<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

PgHd<br />

PgHd<br />

Body<br />

InvenTable<br />

Linjetypen har andet<br />

kartotek. Feltet skal<br />

kvalificeres<br />

Linjetypen har andet<br />

kartotek. Feltet skal<br />

kvalificeres<br />

ItemNumber InvenTable.ItemName1<br />

VareNummer LagKart.VareNavn1<br />

Go<strong>dk</strong>endelse af kostpriser<br />

------------------------------------------<br />

- ItemNumber CostPrice ”Go<strong>dk</strong>endt af:”<br />

253<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. -> 4.1 Eksempel på feltudtryk med tekst<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

PgHd<br />

PgHd<br />

Body<br />

Resultat<br />

LagKart<br />

Go<strong>dk</strong>endelse af kostpriser<br />

------------------------------------------<br />

- VareNummer KostPris ”Go<strong>dk</strong>endt af:”<br />

Go<strong>dk</strong>endelse af kostpriser<br />

--------------------------------------------------------------<br />

1545 15,75 Go<strong>dk</strong>endt af:<br />

4711 202,50 Go<strong>dk</strong>endt af:<br />

4718 1,25 Go<strong>dk</strong>endt af:<br />

4850 225,75 Go<strong>dk</strong>endt af:<br />

Glemmes anførselstegnene, medfører det en syntaksfejl, idet systemet tror, at der er tale om to<br />

kartoteksfelter ’Go<strong>dk</strong>endt’ og ’af’, som jo ikke findes.<br />

Hvorfor anvende felter med tekst i stedet for tekster direkte i rapportlayoutet?<br />

Når tekster oprettes som felter, kan der indsættes betingelser, for hvornår teksten skal skrives ud. Se<br />

afsnittet ’Feltbetingelse’.<br />

254<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Variabler<br />

Der findes to former for variabler, der begge kan indsættes i feltudtryk. Egne variabler og<br />

systemvariabler.<br />

Det skal erindres, at variabelnavne altid skal foranstilles med &-tegnet. Det er den måde variabler<br />

genkendes på i forhold til andre nøgleord i XAL sproget.<br />

Dette gælder både egne variabler og systemvariabler.<br />

Egne variabler<br />

Egne variabler erklæres og vedligeholdes af en selv. De skal altid erklæres i toppen af XAL kørsler. Dette<br />

gælder også i rapport XAL.<br />

Egne variabler kan tildeles værdier direkte under erklæringen eller efterfølgende med SET<br />

kommandoen eller gennem en promptbox.<br />

Tildeling af værdier til variabler<br />

Metode Eksempel<br />

Direkte under<br />

erklæring<br />

INT &Fradrag = 100<br />

Med kommandoen SET INT &Fradrag<br />

SET &Fradrag = 100<br />

Gennem en promptbox INT &Fradrag<br />

PROMPT ”Fradrag ”,,,<br />

”Indtast fradrag: ” GET (&Fradrag)<br />

INPUT<br />

En variabels indhold kan til enhver tid udskrives på en rapport, hvis dens navn indsættes i et feltudtryk<br />

på en rapportlinje.<br />

Erklæring af variabel<br />

INT &Fradrag<br />

&Fradrag<br />

Bemærk at variabler altid skal erklæres, inden de kan indsættes i et feltudtryk.<br />

Hvis datasøgningen udføres i rapport XAL, erklæres variablerne der.<br />

255<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. 2012 -> Eksempel på anvendelse af egne variabler<br />

REAL &NyPris<br />

SEARCH InvenTable<br />

SET &NyPris = CostPrice * 1.10<br />

OUTPUT InvenTable<br />

END<br />

PgHd<br />

Body<br />

InvenTable<br />

Varenummer Gammel pris Ny pris<br />

ItemNumber CostPrice &NyPris<br />

Variablen &NyPris erklæres i toppen af XAL kørslen i editorboksen.<br />

Med SET kommandoen tildeles variablen en værdi i form af et regneudtryk, hvor CostPrice-feltet<br />

multipliceres med 1.10. Da tildelingen udføres inde i søgeløkken, udregnes der således en ny pris, for<br />

hver vare der udsøges.<br />

Idet variablen &NyPris er indsat i Body linjen, udskrives dens aktuelle værdi, hver gang Body linjen<br />

aktiveres af kommandoen OUTPUT i søgningen.<br />

C5 vers. -> 4.1 Eksempel på anvendelse af egne variabler<br />

REAL &NyPris<br />

SEARCH LagKart<br />

SET &NyPris = KostPris * 1.10<br />

OUTPUT LagKart<br />

END<br />

PgHd<br />

Body<br />

LagKart<br />

Varenummer Gammel pris Ny pris<br />

VareNummer KostPris &NyPris<br />

Variablen &NyPris erklæres i toppen af XAL kørslen i editorboksen.<br />

Med SET kommandoen tildeles variablen en værdi i form af et regneudtryk, hvor KostPris-feltet<br />

multipliceres med 1.10. Da tildelingen udføres inde i søgeløkken, udregnes der således en ny pris, for<br />

hver vare der udsøges.<br />

Idet variablen &NyPris er indsat i Body linjen, udskrives dens aktuelle værdi, hver gang Body linjen<br />

aktiveres af kommandoen OUTPUT i søgningen.<br />

Resultat<br />

VareNummer Gammel pris Ny pris<br />

1545 15,50 17,05<br />

4711 210,00 231,00<br />

4718 1,20 1,32<br />

4850 230,10 253,11<br />

Systemvariabler<br />

256<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Systemvariabler er variabler der i forvejen er defineret i C5<br />

Systemvariabler<br />

Skal ikke erklæres og vedligeholdes (udføres automatisk).<br />

Indholdet kan til enhver tid udskrives i rapporter.<br />

Foranstilles med & tegnet når de anvendes.<br />

Eksempler på systemvariabler<br />

Systemvariabel Forklaring<br />

&Page Indeholder til stadighed det sidenummer, der udskrives.<br />

&Line Indeholder det linjenummer, der skrives ud.<br />

&Report Indeholder navnet på den aktuelle rapport.<br />

C5 vers. 2012 -> Eksempel på feltudtryk med systemvariabler<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

PgHd<br />

PgHd<br />

PgHd<br />

Body<br />

InvenTable<br />

&Report Side: &Page<br />

Varenummer Kostpris<br />

ItemNumber CostPric<br />

e<br />

C5 vers. -> 4.1 Eksempel på feltudtryk med systemvariabler<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

PgHd<br />

PgHd<br />

PgHd<br />

Body<br />

LagKart<br />

&Report Side: &Page<br />

Varenummer Kostpris<br />

VareNummer KostPris<br />

Variablerne, &Report og &Page, anvendes i den første Page Header linje og udskrives således på hver<br />

side. Variablerne erklæres ikke i XAL kørslen, da de er systemvariabler.<br />

Resultat<br />

Prisoversigt Side: 1<br />

VareNummer Kostpris<br />

1545 15,50<br />

4711 210,00<br />

4718 1,20<br />

Det forudsættes, at rapportens navn er ’Prisoversigt’ og at siden der vises er nr. 1.<br />

257<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Macroer<br />

Der findes et utal af macroer i C5, som anvendes meget forskelligt.<br />

Nogle macroer kan indsættes i feltudtryk i rapportfelter.<br />

Hvad er macroer?<br />

Macroer er mindre XAL kørsler, der kun kan afvikles ved, at de startes fra andre XAL kørsler.<br />

I denne lektion skal det blot kendes, at macroer findes i udviklingsmenuen i søjlen MAC, og at de<br />

findes som Globale macroer og i Biblioteks macroer.<br />

Kendetegn ved macroer<br />

Type på macro Forklaring<br />

Global Staves med stort begyndelsesbogstav og resten med småt<br />

Indsættes uden videre direkte i feltudtryk<br />

Bibliotek Staves med STORE bogstaver<br />

En samling af enkeltstående macroer, der har noget tilfælles<br />

Biblioteket REPORTS består af macroer, der anvendes i rapporter<br />

Biblioteket skal først loades ind i XAL kørslen, før dets macroer kan<br />

indsættes i feltudtryk<br />

Ved anvendelse skal macroer altid foranstilles med et #-tegn, så de f.eks. kan skelnes fra variabler, der<br />

altid begynder med et &-tegn.<br />

Når rapport opbygningen afsluttes og go<strong>dk</strong>endes, oversættes de indsatte macroer sammen med<br />

rapportens XAL kode og bliver en del af denne.<br />

Når en rapport afvikles, udføres macroens kode og resultatet udskrives på feltets plads.<br />

#Company<br />

#Company er en global macro, der anvendes til udskrift af firmanavn på rapporter. Macroen henter<br />

den tekst, der står i Name-feltet i firmakartoteket.<br />

Den anvendes ofte i linjer af typen Page Header som herunder, men kan også anvendes i alle andre<br />

linjetyper.<br />

C5 vers. 2012 -> Eksempel på feltudtryk med macroen #Company<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

PgHd<br />

PgHd<br />

PgHd<br />

Body<br />

InvenTable<br />

#Company<br />

Varenummer Kostpris<br />

ItemNumber CostPric<br />

e<br />

258<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. -> 4.1 Eksempel på feltudtryk med macroen #Firma<br />

I ældre versioner af C5 hedder den globale makro ikke #Company men #Firma.<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

PgHd<br />

PgHd<br />

PgHd<br />

Body<br />

Resultat<br />

LagKart<br />

Lises Bolsjefabrik<br />

VareNummer Kostpris<br />

1545 15,50<br />

4711 210,00<br />

4718 1,20<br />

4850 230,10<br />

Varenummer Kostpris<br />

VareNummer KostPris<br />

I eksemplet forudsættes det, at det aktuelle firmanavn er ’Lises Bolsjefabrik’.<br />

#MacroLoad()<br />

Macroer, der ligger i biblioteker, kan ikke anvendes direkte, som det er tilfældet med de globale<br />

macroer.<br />

Der skal først skaffes adgang til biblioteket ved at ’loade’ det ind i XAL-kørslen. Dette udføres med<br />

macroen #MacroLoad().<br />

#MacroLoad() indsættes ofte i starten af XAL kørsler, og må gerne udføres før erklæringen af variabler.<br />

Syntaks for macroload af biblioteker<br />

#MacroLoad(BIBLIOTEKSNAVN)<br />

#MacroLoad() er i sig selv en global macro, der i parenteserne skal have et navn på et macrobibliotek.<br />

#ReportDatePage<br />

#Firma<br />

#ReportDatePage anvendes til at udskrive dato, klokkeslæt og sidenummer.<br />

Macroen findes i biblioteket REPORTS. For at få adgang til at anvende den skal biblioteket REPORTS<br />

først loades.<br />

259<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Eksempel på udtryk med macroer fra biblioteker<br />

#MacroLoad(REPORTS)<br />

PgHd<br />

Bemærk at biblioteket loades, før der kan indsættes macroer i feltudtryk.<br />

C5 vers. 2012 -> Eksempel på feltudtryk med macroen #ReportDatePage<br />

#MacroLoad(REPORTS)<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

PgHd<br />

PgHd<br />

PgHd<br />

Body<br />

Resultat<br />

InvenTable<br />

Varenummer Kostpris<br />

ItemNumber CostPric<br />

e<br />

Lises Bolsjefabrik Dato 07/01-09 13:47 Side 1<br />

VareNummer Kostpris<br />

1545 15,50<br />

4711 210,00<br />

4718 1,20<br />

4850 230,10<br />

#RapportDatoSide<br />

Biblioteket skal loades<br />

inden macroen kan<br />

indsættes i feltet<br />

#Company<br />

#ReportDatePage<br />

#ReportDatePage<br />

Ovennævnte makro hedder i ældre versioner af C5 #RapportDatoSide, og anvendes til at udskrive dato,<br />

klokkeslæt og sidenummer.<br />

Macroen findes i biblioteket REPORTS. For at få adgang til at anvende den skal biblioteket REPORTS<br />

først loades.<br />

260<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. -> 4.1 Eksempel på udtryk med macroer fra biblioteker<br />

#MacroLoad(REPORTS)<br />

PgHd<br />

Bemærk at biblioteket loades, før der kan indsættes macroer i feltudtryk.<br />

C5 vers. -> 4.1 Eksempel på feltudtryk med macroen #RapportDatoSide<br />

#MacroLoad(REPORTS)<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

PgHd<br />

PgHd<br />

PgHd<br />

Body<br />

Resultat<br />

LagKart<br />

Varenummer Kostpris<br />

VareNummer KostPris<br />

Lises Bolsjefabrik Dato 07/01-09 13:47 Side 1<br />

VareNummer Kostpris<br />

1545 15,50<br />

4711 210,00<br />

4718 1,20<br />

4850 230,10<br />

Funktioner<br />

Feltudtryk kan også indeholde navne på funktioner.<br />

Funktioner er beskrevet i lektionen ’Funktioner, grundlæggende’.<br />

Indsættelse i feltudtryk<br />

Biblioteket skal loades<br />

inden macroen kan<br />

indsættes i feltet<br />

#Firma<br />

#RapportDatoSide<br />

#RapportDatoSide<br />

Funktioner kan indsættes i alle linjetyper, da de ikke er afhængige af nogen kartoteker.<br />

I dette afsnit vises eksempler på anvendelse af funktionerne ToDay(), CurUserId() og UserId2Name().<br />

261<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. 2012 -> Eksempel på feltudtryk med funktioner<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

PgHd<br />

PgHd<br />

PgHd<br />

Body<br />

PgFt<br />

InvenTable<br />

C5 vers. -> 4.1 Eksempel på feltudtryk med funktioner<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

PgHd<br />

PgHd<br />

PgHd<br />

Body<br />

PgFt<br />

Resultat<br />

LagKart<br />

Dato:<br />

Varenummer Kostpris<br />

ItemNumber CostPric<br />

Udskrevet af: UserId2Name(CurUserId())<br />

e<br />

Dato:<br />

Varenummer Kostpris<br />

VareNummer KostPris<br />

Udskrevet af: UserId2Name(CurUserId())<br />

Lises Bolsjefabrik Dato: 07/01-09<br />

VareNummer Kostpris<br />

1545 15,50<br />

4711 210,00<br />

4718 1,20<br />

4850 230,10<br />

Udskrevet af: Karin Petersen<br />

I eksemplet forudsættes det at den aktuelle bruger er ’Karin Petersen’.<br />

Regneudtryk<br />

Feltudtryk anvendes udmærket til udskrivning af beregninger i form af forskellige regneudtryk.<br />

Regneudtrykket kan f.eks. være et kartoteksfelt, der multipliceres med et tal eller en variabel.<br />

C5 vers. 2012 -> Eksempel på rapport med regneudtryk i felt<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

PgHd<br />

Body<br />

IvenTable<br />

#Company<br />

#Firma<br />

C5 vers. -> 4.1 Eksempel på rapport med regneudtryk i felt<br />

Varenummer Gl. pris Ny pris<br />

ItemNumber CostPrice CostPrice*1.2<br />

ToDay()<br />

ToDay()<br />

262<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

PgHd<br />

Body<br />

Resultat<br />

LagKart<br />

VareNummer Gl. pris Ny pris<br />

1545 15,50 18,06<br />

4711 210,00 252,00<br />

4718 1,20 1,44<br />

4850 230,10 276,12<br />

Varenummer Gl. pris Ny pris<br />

VareNummer KostPris KostPris*1.2<br />

263<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver : Rapport definition felter i layout<br />

Opgave 1: Nye feltudtryk i ’Udlånsliste’<br />

Formål med opgaven<br />

At anvende felter med forskellige feltudtryk i rapporten ’Udlånsliste’.<br />

Beskrivelse<br />

Der skal arbejdes videre med rapporten ’Udlånsliste’ fra forrige opgave, idet der skal indsættes felter<br />

med macroer til firmanavnet, rapportens dato og side.<br />

I Bodylinjen skal der indsættes et felt til debitornavn. Feltet skal hente navnet fra debitorkartoteket<br />

med et direkte opslag.<br />

1 Vælg rapporten ’Udlånsliste’ fra forrige opgave.<br />

Forløb i C5 √<br />

2 Tilføj to nye Page header linjer som linje et og to, således at linjerne kommer til at<br />

stå øverst i Page headeren:<br />

I første linje indsættes der i venstre side et felt med macroen #Company og en<br />

længde på 30 tegn. I højre side indsættes der et felt med macroen<br />

#ReportDatePage og en længde på 30 tegn højrestillet.<br />

Anden linje udfyldes med en tegnet streg<br />

NB: Har du huske at macroloade biblioteket REPORTS?<br />

3 I Bodylinjen indsættes et felt til debitors navn. Det indsættes mellem felterne<br />

DebitorKto og UdlånsNr. Feltet udfyldes med et direkte opslag i kartoteket<br />

CustTabel, hvor debitors navn hentes.<br />

Feltets længde skal være 20 tegn venstrestillet.<br />

4 Tilret overskrifterne så de passer over felterne.<br />

5 Go<strong>dk</strong>end og afprøv om felterne fungerer efter hensigten.<br />

264<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


5. Linjetypen Control<br />

Mål med lektionen<br />

Formålet med denne lektion er at lære deltagerne at anvende linjetypen Control.<br />

Efter lektionen skal kursisterne kunne:<br />

Opbygge og anvende control linjer<br />

Anvende macroen #Rep_Execute til styring af control linjer<br />

Danne manuelle totaler med macroen #Add,<br />

Generelt<br />

Control linjer er i virkeligheden de mest magtfulde linjer, idet programmøren med disse linjetyper kan<br />

få fuld kontrol over rapporten.<br />

Det er den eneste linjetype der ikke styres automatisk og ikke har nogen fast placering på den færdige<br />

rapport.<br />

Linjetypers placering på færdig udskrift<br />

Linjetype Placering<br />

Prolog<br />

Epilog<br />

Page Header<br />

Page Footer<br />

Group Header<br />

Group Footer<br />

Body<br />

Subtotal<br />

Control<br />

Én gang i starten af rapporten<br />

Én gang i slutningen af rapporten<br />

I toppen af hver enkelt side i rapporten<br />

I bunden af hver enkelt side i rapporten<br />

Før hvert skift til et kartotek<br />

Hver gang der sluttes af fra et kartotek<br />

Hver gang kommandoen OUTPUT anvendes, eller når der<br />

sendes automatisk fra en QT.<br />

Tekslinjer med tekst til automatiske totaler<br />

Styres ene og alene af programmøren<br />

Control linjer er således linjer, der udelukkende styres af programmøren. De anvendes for eksempel i<br />

tilfælde, hvor programmøren har vanskeligt ved at løse en opgave alene vha. de andre linjetyper.<br />

Opbygning af Control linjer<br />

Control linjer opbygges i Rapport Definition ved at angive linjetypen Control.<br />

Kartotekskolonnen får i den forbindelse en anden betydning, idet der her skal indtastes et linjenummer<br />

i stedet for navn på et kartotek.<br />

Nummeret er valgfrit og indtastes i et vindue, der åbnes, når cursoren flyttes ind i kartotekskolonnen.<br />

Layoutområdet kan, som ved de andre linjetyper anvendes til tekst og felter af forskellig art.<br />

C5 vers. 2012 -> Eksempel på opbygning af Control linje<br />

265<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Ctrl<br />

25<br />

Total for :<br />

C5 vers. -> 4.1 Eksempel på opbygning af Control linje<br />

Ctrl<br />

25<br />

Linjenummer<br />

Total for :<br />

Linjenummeret i kartotekskolonnen har en ganske særlig betydning, idet alle control linjer skal have<br />

et nummer der kan refereres til fra koden i Rapport XAL eller Rapport QT.<br />

Nummeret er valgfrit og vælges af programmøren ved oprettelsen af linjen.<br />

Bemærk at systemet selv foreslår nummer nul, men at dette ikke er gyldigt.<br />

Anvend fra nummer et og opefter. Der kan være lige så mange control linjer, som der er behov for, og<br />

der kan være flere med samme nummer.<br />

C5 vers. 2012 -> Flere Control linjer med samme nummer<br />

Ctrl<br />

Ctrl<br />

Ctrl<br />

Ctrl<br />

Ctrl<br />

3<br />

3<br />

25<br />

25<br />

25<br />

Nummer på den aktuelle<br />

control linje. Nummeret er<br />

valgfrit og vælges af<br />

programmøren<br />

Nummer på den aktuelle<br />

control linje. Nummeret er<br />

valgfrit og vælges af<br />

programmøren<br />

InvenTable.ItemName1 &Total<br />

Total for : InvenTable.ItemName1 &Total<br />

Der kan være forskellige<br />

control linjer i samme<br />

rapport, og der må gerne<br />

være flere med samme<br />

nummer<br />

LagKart.VareNavn1 &Total<br />

266<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. -> 4.1 Flere Control linjer med samme nummer<br />

Ctrl<br />

Ctrl<br />

Ctrl<br />

Ctrl<br />

Ctrl<br />

3<br />

3<br />

25<br />

25<br />

25<br />

#Rep_Execute<br />

Total for :<br />

#Rep_Execute er en macro, der bl.a. anvendes til styring af control linjer.<br />

Macroen befinder sig i biblioteket REPORTS, hvorfor dette bibliotek skal loades før den kan anvendes.<br />

Syntaks<br />

#Rep_Execute()<br />

er nummeret på den control linje, der skal aktiveres.<br />

Ved at indsætte macroen i en Rapport XAL eller Rapport QT udskrives den angivne linje, når macroen<br />

mødes i programforløbet.<br />

Er der mere end en linje med samme nummer, udskrives alle linjer med det nummer i den rækkefølge,<br />

de forekommer i rapportdefinitionen.<br />

Dette gælder også, hvis de ligger spredt med andre linjetyper ind imellem.<br />

Det er således macroen #Rep_Execute() og nummeret, der styrer hvilke control linjer, der udskrives.<br />

C5 vers. 2012 -> Eksempel<br />

#MacroLoad(REPORTS)<br />

REAL &Total<br />

SEARCH VendTable<br />

OUTPUT VendTable<br />

SET &Total = &Total + BalanceMst<br />

END<br />

#Rep_Execute(3)<br />

#Rep_Execute(25)<br />

Body<br />

Ctrl<br />

Ctrl<br />

Ctrl<br />

VendTable<br />

3<br />

25<br />

25<br />

C5 vers. -> 4.1 Eksempel<br />

Der kan være forskellige<br />

control linjer i samme<br />

rapport, og der må gerne<br />

være flere med samme<br />

nummer<br />

Account<br />

Kreditorer i alt:<br />

LagKart.VareNavn1 &Total<br />

Name<br />

Der kan være forskellige control linjer<br />

i samme rapport, og der må gerne<br />

være flere med samme nummer<br />

BalanceMst<br />

&Total<br />

267<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


#MacroLoad(REPORTS)<br />

REAL &Total<br />

SEARCH KreKart<br />

OUTPUT KreKart<br />

SET &Total = &Total + SaldoDkk<br />

END<br />

#Rep_Execute(3)<br />

#Rep_Execute(25)<br />

Body<br />

Ctrl<br />

Ctrl<br />

Ctrl<br />

KreKart<br />

3<br />

25<br />

25<br />

Kreditorer i alt:<br />

Control macroen anbringes i Rapport XAL eller Rapport QT, på det sted hvor linjerne skal udskrives i<br />

rapporten. I eksemplet styrer macroen at control linjerne med nummer 3 og 25 igangsættes når<br />

søgeløkken er slut.<br />

Macroen #Add<br />

Macroen #Add anvendes bl.a. til sammentælling af værdier i søgeløkker.<br />

Macroen er global, idet den er stavet med stort begyndelsesbogstav og derefter med småt.<br />

Syntaks<br />

#Add(parameter1, parameter2)<br />

Parameter1 er f.eks. navnet på en variabel, der anvendes som tæller, og parameter2 er den værdi, der<br />

skal lægges til variablen. De to parametre skal være af samme datatype.<br />

Opbygning<br />

Macroen er opbygget af SET kommandoen og nogle parametre i form af procenttegn og tal. Åbnes<br />

macroen, indeholder den således følgende kode:<br />

Kode i macroen #Add<br />

SET %1 = (%1) + (%2)<br />

Konto<br />

Navn<br />

Der kan være forskellige control linjer<br />

i samme rapport, og der må gerne<br />

være flere med samme nummer<br />

SaldoDkk<br />

&Total<br />

Værdierne %1 og %2 svarer til parametrene, der er vist i syntaksen. De steder, hvor der står %1,<br />

indsættes parameter1, og hvor der står %2, indsættes parameter2.<br />

Datatypen på den værdi der indsættes i parameter1, bestemmer, hvad der kan lægges sammen i<br />

macroen.<br />

268<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Hvis parameter1 er en tekst, skal parameter2 også være det. I så fald sammenlægges de to tekster til én<br />

tekststreng.<br />

Er parameter1 en kommatalsvariabel, skal parameter2 også være det.<br />

Se eksemplet nenenfor.<br />

C5 vers. 2012 Eksempel på macroen #Add<br />

#MacroLoad(REPORTS)<br />

REAL &Total<br />

SEARCH VendTable<br />

OUTPUT VendTable<br />

#Add(&Total, BalanceMst)<br />

END<br />

#Rep_Execute(3)<br />

Body<br />

Ctrl<br />

Ctrl<br />

Ctrl<br />

VendTable<br />

3<br />

3<br />

3<br />

C5 vers. -> 4.1 Eksempel på macroen #Add<br />

#MacroLoad(REPORTS)<br />

REAL &Total<br />

SEARCH KreKart<br />

OUTPUT KreKart<br />

#Add(&Total, SaldoDkk)<br />

END<br />

#Rep_Execute(3)<br />

Body<br />

Ctrl<br />

Ctrl<br />

Ctrl<br />

KreKart<br />

3<br />

3<br />

3<br />

Kreditorer i alt:<br />

Kreditorer i alt:<br />

I dette eksempel anvendes macroen #Add som en tæller til sammentælling af kartotekets saldofelt.<br />

Macroen #Rep_Execute(3) sørger for at aktivere de tre control linjer med nummer 3, så disse kan<br />

udskrives.<br />

Bemærk at control macroen er indsat efter afslutningen af END i søgeløkken.<br />

Dette bevirker, at control linjerne udskrives til sidst på rapporten, når søgeløkken er færdig, som vist<br />

efterfølgende:<br />

Resultat<br />

Account<br />

Konto<br />

Name<br />

Navn<br />

BalanceMst<br />

&Total<br />

SaldoDkk<br />

&Total<br />

269<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


45999000 Microsoft A/S -100.000,00<br />

45934545 IMB Danmark A/S -20.000,00<br />

971249987 Intel Corporation -93.531,00<br />

Kreditorer i alt: -213.531.00<br />

Control linjer og #Add i Rapport-QT<br />

Control linjer kan også styres fra Rapport QT. Det er blot vigtigt at indsætte macroerne i de rigtige<br />

triggere.<br />

Opbygningen af Rapport definition er den samme som vist i de forrige afsnit.<br />

C5 vers. 2012 -> Eksempel på macroer i Rapport QT<br />

Triggere Kommandoer og macroer<br />

Init<br />

Post-Output<br />

Post-Search<br />

#MacroLoad(REPORTS)<br />

REAL &Total<br />

#Add(&Total, BalanceMst)<br />

#Rep_Execute(1)<br />

#Rep_Execute(2)<br />

#Rep_Execute(3)<br />

C5 vers. 2012 -> Eksempel på Rapport Definition<br />

Body<br />

Ctrl<br />

Ctrl<br />

Ctrl<br />

VendTable<br />

1<br />

2<br />

3<br />

Kreditorer i alt:<br />

C5 vers. -> 4.1 Eksempel på macroer i Rapport QT<br />

Triggere Kommandoer og macroer<br />

Init<br />

Post-Output<br />

Post-Search<br />

Account<br />

#MacroLoad(REPORTS)<br />

REAL &Total<br />

#Add(&Total, SaldoDkk)<br />

#Rep_Execute(1)<br />

#Rep_Execute(2)<br />

#Rep_Execute(3)<br />

Name<br />

BalanceMst<br />

&Total<br />

270<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. -> 4.1 Eksempel på Rapport Definition<br />

Body<br />

Ctrl<br />

Ctrl<br />

Ctrl<br />

KreKart<br />

1<br />

2<br />

3<br />

Konto<br />

Navn<br />

Kreditorer i alt:<br />

SaldoDkk<br />

&Total<br />

Bemærk at control linjerne nu har fået numrene 1, 2 og 3, og at der henvises til disse i Post-Search<br />

triggeren.<br />

At linjerne har fået disse numre, er ikke en nødvendighed, men kun for at vise, at linjerne godt kan<br />

have forskellige numre til forskel fra tidligere eksempler, hvor linjerne havde samme nummer.<br />

271<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Linjetypen Control<br />

Opgave 1: Control linjer i ’Udlånsliste’<br />

Formål med opgaven<br />

At anvende control linjer i rapporten ’Udlånsliste’.<br />

Beskrivelse<br />

Der skal arbejdes videre med rapporten ’Udlånsliste’ fra forrige opgave.<br />

Rapporten skal udvides med en optælling af hvor mange udlån, der findes af typerne Udlån,<br />

Kommission og Andet.<br />

Værdierne skal sammentælles i variabler, der oprettes til formålet. Optællingen udføres i søgeløkken<br />

og resultatet udskrives med control linjer, når søgeløkken er slut.<br />

1 Vælg rapporten ’Udlånsliste’ fra forrige opgave.<br />

Forløb √<br />

2 I Rapport XAL skal der erklæres en variabel til hver af typerne Udlån, Kommission<br />

og Andet. Variablerne skal være af typen heltal.<br />

3 I søgeløkken skal der opstilles tre IF sætninger, der hver for sig undersøger, hvilken<br />

af de tre typer udlånene tilhører. I hver sætning adderes værdien 1 til den aktuelle<br />

variabel.<br />

4 Efter søgeløkken er afsluttet, aktiveres den eller de Control linjer du opretter eller<br />

har oprettet til udskrivning af optællingen<br />

Anvend macroen #Rep_Execute<br />

5 I Rapport definition skal nedenstående Control linjer oprettes til udskrivning af<br />

resultatet. Vælg selv et eller flere numre til linjerne.<br />

Teksten: Fordeling<br />

Tegnet: streg<br />

Teksten: Udlån, efterfulgt af den tilsvarende variabel<br />

Teksten: Kommission, efterfulgt af den tilsvarende variabel<br />

Teksten: Andet, efterfulgt af den tilsvarende variabel<br />

Tegnet: streg, under de tre linjer til adskillelse mellem ’i alt’<br />

Teksten: I alt, efterfulgt af et felt med et feltudtryk, der adderer de tre variabler<br />

Tegnet: dobbeltstreg under totalen<br />

6 Go<strong>dk</strong>end og afprøv rapporten.<br />

272<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


6. Linjetyper med kartoteker<br />

Mål med lektionen<br />

Formålet med denne lektion er at lære deltagerne at opbygge linjetyper med kartoteker i<br />

kartotekskolonnen.<br />

Efter lektionen skal kursisterne kunne:<br />

Opbygge linjetyperne Group Header, Body, Group Footer og Subtotal<br />

Opbygge rapporter med udtræk fra flere kartoteker<br />

Udskrive automatiske subtotaler med egen ledetekst.<br />

Generelt<br />

I Rapport Definition opbygges rapportlinjerne med linjetyper af forskellig art.<br />

Nogle linjetyper anvendes uden angivelse af kartotek, medens andre skal have et kartotek i<br />

kartotekskolonnen.<br />

Denne lektion omhandler de fire linjetyper, der skal have kartoteker.<br />

Linjetyper med kartoteker<br />

Linje-type<br />

Group header<br />

Body<br />

Group footer<br />

Subtotal<br />

Først en forklaring til betydningen af kartoteker og derefter gennemgang af de enkelte linjetyper.<br />

Bindeled i Rapport XAL og Rapport Definition<br />

Kartotekerne er bindeleddet mellem koden i Rapport XAL og linjerne i Rapport Definition.<br />

I eksemplet herunder ses Rapport XAL med udtræk af data fra ét kartotek. Data sendes til Rapport<br />

Definition med kommandoen OUTPUT og modtages af linjetypen Body, der har samme kartoteksnavn<br />

som i OUTPUT linjen.<br />

C5 vers. 2012 -> Eksempel med udtræk af data fra ét kartotek<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

Body InvenTable ItemNumber ItemName1 CostPrice<br />

C5 vers. -> 4.1 Eksempel med udtræk af data fra ét kartotek<br />

273<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

Body LagKart<br />

Hvis OUTPUT kommandoen ikke indsættes, virker rapporten ikke, da der ikke sendes data til Rapport<br />

Definition.<br />

Betydningen af kartotekskolonnen ses bedre af næste eksempel, hvor der i koden i Rapport XAL er<br />

indsat to søgeløkker med hvert sit kartotek.<br />

I Rapport Definition er der indsat en linje til hver kartotek. Var der ikke en kolonne til angivelse af<br />

OUTPUT kartotek, ville systemet ikke vide hvilken linje, der skulle modtage outputtet fra søgeløkkerne.<br />

For at anskueliggøre betydningen af kartotekskolonnen, er der i eksemplet indsat to kartoteker, der<br />

ikke har noget med hinanden at gøre.<br />

C5 vers. 2012 -> Eksempel med udtræk af data fra to forskellige kartoteker<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

SEARCH LedTable<br />

OUTPUT LedTable<br />

END<br />

Body<br />

Body<br />

InvenTable<br />

LedTable<br />

C5 vers. -> 4.1 Eksempel med udtræk af data fra to forskellige kartoteker<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

SEARCH FinKart<br />

OUTPUT FinKart<br />

END<br />

Body<br />

Body<br />

Resultat<br />

LagKart<br />

FinKart<br />

VareNummer VareNavn1 KostPris<br />

Itemnumber ItemName1<br />

Account AccountName<br />

VareNummer VareNavn1<br />

Konto<br />

KontoNavn<br />

CostPrice<br />

KostPris<br />

274<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


18000 Kabinet 1.250,20<br />

16000 Ram 520,40<br />

12000 Harddisk type 2 1.230,75<br />

14000 CD romdrev 50,10<br />

20000 Skærm 1.000,10<br />

100000 AKTIVER<br />

200000 PASSIVER<br />

300000 RESULTAT<br />

110000 Anlægsaktiver<br />

120000 Omsætningsaktiver<br />

Da der således kan trækkes data ud af flere forskellige kartoteker i samme rapport, ses det tydeligt,<br />

hvor vigtigt det er, at angive det rigtige kartotek i kartotekskolonnen.<br />

Wildcard i form af *<br />

Angives der ikke OUTPUT kartotek i bodylinjerne, indsættes der automatisk en * i kartotekskolonnen.<br />

Stjernen er et Wildcard, der betyder ’Alle kartoteker’.<br />

Dette betyder at alle bodylinjer forsøges udskrevet, hver gang en OUTPUT kommando afvikles i XAL<br />

koden, uafhængigt af kartotek.<br />

Dette kan resultere i nogle mærkelige udskrifter, men i visse tilfælde kan det være hensigtsmæssigt. I<br />

følgende eksempel skal der udskrives en blank linje mellem hver eneste post i begge kartoteker. Derfor<br />

angives kun én blank linje i form af en bodylinje med en * i kartotekskolonnen.<br />

C5 vers. 2012 -> Eksempel med * i kartotekskolonnen<br />

Body<br />

Body<br />

Body<br />

InvenTable<br />

LedTable<br />

*<br />

C5 vers. -> 4.1 Eksempel med * i kartotekskolonnen<br />

Body<br />

Body<br />

Body<br />

LagKart<br />

FinKart<br />

*<br />

ItemNumber ItemName1<br />

Account AccountName<br />

VareNummer VareNavn1<br />

Konto<br />

KontoNavn<br />

CostPrice<br />

KostPris<br />

Hver gang OUTPUT kommandoen udføres i XAL koden, sendes den blanke linje således afsted til<br />

rapporten. Resultatet bliver som følger, idet der indsættes blanke linjer mellem hver enkelt post i<br />

begge kartoteker.<br />

275<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Resultat<br />

18000 Kabinet 1.250,20<br />

16000 Ram 520,40<br />

12000 Harddisk type 2 1.230,75<br />

14000 CD romdrev 50,10<br />

20000 Skærm 1.000,10<br />

100000 AKTIVER<br />

200000 PASSIVER<br />

300000 RESULTAT<br />

110000 Anlægsaktiver<br />

120000 Omsætningsaktiver<br />

Når der skal anvendes mere end ét kartotek, kan dette udføres på to måder.<br />

Metoder med flere kartoteker<br />

Metode Betydning<br />

Enkeltstående kartoteker Kartotekerne afvikles ét ad gangen efter hinanden.<br />

Afhængige kartoteker Hver gang en post hentes i hove<strong>dk</strong>artoteket, er der mulighed for<br />

at hente tilhørende poster i underkartoteket.<br />

Enkeltstående kartoteker<br />

Ved enkeltstående uafhængige kartoteker, bliver disse afviklet et ad gangen i den rækkefølge, de<br />

forekommer i Rapport XAL eller en evt. Rapport QT. Hver gang ét kartotek er færdigt, startes på det<br />

næste.<br />

Herunder vises der eksempler på anvendelsen af uafhængige kartoteker i Rapport XAL<br />

C5 vers. 2012 -> Eksempel på enkeltstående kartoteker i Rapport XAL<br />

SEARCH InvenItemGroup<br />

OUTPUT InvenItemGroup<br />

END<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

Body<br />

Body<br />

InvenItemG<br />

InvenTable<br />

Group GroupName<br />

ItemNumber ItemName1<br />

Group<br />

C5 vers. -> 4.1 Eksempel på enkeltstående kartoteker i Rapport XAL<br />

276<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


SEARCH LagGruppe<br />

OUTPUT LagGruppe<br />

END<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

Body<br />

Body<br />

LagGruppe<br />

LagKart<br />

Selv om kartotekerne er enkeltstående, har de i dette eksempel alligevel en fællesnævner, idet det<br />

første kartotek udskriver en liste over de varegrupper der findes. Dette kan anvendes til manuel<br />

reference til de poster, der skrives ud fra det andet kartotek, hvor varegruppen vises, men ikke hvad<br />

den hedder.<br />

Resultat<br />

10 Harddiske<br />

20 Skærme<br />

30 Kabinetter<br />

40 Ram<br />

12000 Harddisk type 2 10<br />

14000 Skærm 14” 20<br />

16000 Ram 8 MB 40<br />

16004 Ram 16 MB 40<br />

17006 Harddisk type 5 10<br />

18000 Kabinet 30<br />

20000 Skærm 17” 20<br />

Afhængige synkroniserede kartoteker<br />

Gruppe GruppeNavn<br />

VareNummer VareNavn1<br />

Gruppe<br />

Ved afhængige kartoteker oprettes der i Rapport XAL to søgeløkker, hvor den ene bygges ind i den<br />

anden. Den inderste søgeløkke synkroniseres under opbygningen med den yderste.<br />

Ved afviklingen af Rapport XAL findes posterne i den yderste søgeløkke (hove<strong>dk</strong>artoteket) frem en ad<br />

gangen. Hver gang en post er fundet, udføres der en gennemsøgning af samtlige poster i den inderste<br />

søgeløkke (underkartoteket).<br />

Da samtlige poster gennemsøges i den inderste søgeløkke (underkartoteket), er det vigtigt at<br />

synkronisere de to søgeløkker (kartoteker) med hinanden således, at der under gennemsøgningen af<br />

den inderste søgeløkke kun hentes poster, der kan relateres til den aktuelle post, der er fundet i den<br />

yderste søgeløkke (hove<strong>dk</strong>artoteket).<br />

Synkronisering meller hoved- og underkartotek<br />

Synkroniseringen i Rapport XAL foregår ved anvendelse af kommandoen WHERE. Kommandoen<br />

anvendes ved at opstille en betingelse, der skal være opfyldt, for at en post udvælges fra<br />

underkartoteket.<br />

Det er vigtigt at bemærke, at synkroniseringen finder sted i den inderste søgeløkke (underkartoteket).<br />

Det er altså underkartoteket, der skal synkroniseres med hove<strong>dk</strong>artoteket og ikke omvendt.<br />

277<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Syntaksen for anvendelsen af WHERE er her følgende:<br />

Syntaks til WHERE<br />

WHERE == <br />

Herunder vises der eksempler på anvendelsen af flere afhængige kartoteker i Rapport XAL.<br />

C5 vers. 2012 -> Eksempel på afhængige kartoteker i Rapport XAL<br />

SEARCH InvenItemGroup<br />

OUTPUT InvenItemGroup<br />

SEARCH InvenTable<br />

WHERE InvenTable.Group == InvenItemGroup.Group<br />

OUTPUT InvenTable<br />

END<br />

END<br />

Body<br />

Body<br />

InvenItemG<br />

InvenTable<br />

I figuren med resultatet ses det, hvordan der først trækkes én post ud af hove<strong>dk</strong>artoteket<br />

InvenItemGroup og derefter de tilhørende poster i underkartoteket InvenTable.<br />

Det kan ses at synkroniseringen virker, idet der for hver post i hove<strong>dk</strong>artoteket kun vises de tilhørende<br />

synkroniserede poster fra underkartoteket.<br />

C5 vers. -> 4.1 Eksempel på afhængige kartoteker i Rapport XAL<br />

SEARCH LagGruppe<br />

OUTPUT LagGruppe<br />

SEARCH LagKart<br />

WHERE LagKart.Gruppe == LagGruppe.Gruppe<br />

OUTPUT LagKart<br />

END<br />

END<br />

Body<br />

Body<br />

LagGruppe<br />

LagKart<br />

I figuren med resultatet ses det, hvordan der først trækkes én post ud af hove<strong>dk</strong>artoteket LagGruppe<br />

og derefter de tilhørende poster i underkartoteket LagKart.<br />

Det kan ses at synkroniseringen virker, idet der for hver post i hove<strong>dk</strong>artoteket kun vises de tilhørende<br />

synkroniserede poster fra underkartoteket.<br />

Resultat<br />

Group GroupName<br />

ItemNumber ItemName1<br />

Group<br />

Gruppe GruppeNavn<br />

VareNummer VareNavn1<br />

Gruppe<br />

278<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


10 Harddiske<br />

12000 Harddisk type 2 10<br />

17006 Harddisk type 5 10<br />

20 Skærme<br />

20000 Skærm 17” 20<br />

14000 Skærm 14” 20<br />

30 Kabinetter<br />

18000 Kabinet 30<br />

40 Ram<br />

16000 Ram 8 MB 40<br />

14000 Ram 16 MB 40<br />

Linjetypen Body<br />

Linjetypen Body er den vigtigste linjetype i Rapport Definition. Det er den linjetype, der indeholder de<br />

data, der fra kartotekerne udskrives på rapporten.<br />

Linjetypen indeholder felterne, der tilhører kartotekerne i kartotekskolonnen. Derfor skal der også altid<br />

indsættes et kartotek hertil.<br />

Linjetypen blev nøje behandlet i lektionen ’Rapport Definition grundlæggende’, hvorfor der henvises til<br />

denne lektion om yderligere information.<br />

Linjetypen Group Header<br />

Linjetypen Group Header skal altid udfyldes i kartotekskolonnen med navn på kartotek eller med en *.<br />

I layoutområdet kan der indsættes felter og tekster på samme måde som i andre linjetyper.<br />

Aktivering af linjetypen Group Header<br />

Linjetypen Group Header aktiveres og udskrives automatisk, hver gang der startes på udskrivning af<br />

poster fra et kartotek.<br />

Dette gælder både ved enkeltstående kartoteker og afhængige kartoteker.<br />

Linjetypen aktiveres således hver gang, der kommer output til et nyt kartotek fra en Rapport XAL eller<br />

en evt. Rapport QT.<br />

279<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. 2012 -> Eksempel på Group Header ved enkeltstående kartoteker uden relation<br />

Ved enkeltstående uafhængige kartoteker udskrives Group Headerne hver gang, der startes på et nyt<br />

kartotek.<br />

SEARCH InvenItemGroup<br />

OUTPUT InvenItemGroup<br />

END<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

GrHd<br />

GrHd<br />

Body<br />

GrHd<br />

GrHd<br />

Body<br />

InvenItemG<br />

InvenItemG<br />

InvenItemG<br />

InvenTable<br />

InvenTable<br />

InvenTable<br />

Varegrupper<br />

Group GroupName<br />

Varer<br />

C5 vers. -> 4.1 Eksempel på Group Header ved enkeltstående kartoteker uden relation<br />

Ved enkeltstående uafhængige kartoteker udskrives Group Headerne hver gang, der startes på et nyt<br />

kartotek.<br />

SEARCH LagGruppe<br />

OUTPUT LagGruppe<br />

END<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

GrHd<br />

GrHd<br />

Body<br />

GrHd<br />

GrHd<br />

Body<br />

LagGruppe<br />

LagGruppe<br />

LagGruppe<br />

LagKart<br />

LagKart<br />

LagKart<br />

ItemNumber ItemName1<br />

Group<br />

Varegrupper<br />

Gruppe GruppeNavn<br />

Varer<br />

VareNummer VareNavn1<br />

Gruppe<br />

280<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Resultat<br />

Varegrupper<br />

10 Harddiske<br />

20 Skærme<br />

30 Kabinetter<br />

40 Ram<br />

Varer<br />

12000 Harddisk type 2 10<br />

14000 Skærm 14” 20<br />

16000 Ram 8 MB 40<br />

16004 Ram 16 MB 40<br />

17006 Harddisk type 5 10<br />

18000 Kabinet 30<br />

20000 Skærm 17” 20<br />

Eksemplet kunne f.eks. finde anvendelse, hvor en rapport fylder mange sider og der ikke er plads nok<br />

på linjerne til gruppenavnet. Rapporten kunne da starte med en liste over varegrupper som<br />

opslagsreference for resten af rapporten.<br />

Eksempler på Group Headere ved afhængige kartoteker<br />

Ved flere afhængige kartoteker vil Group Headerne blive udskrevet hver gang, der skiftes mellem<br />

udskrivning fra henholdsvis hove<strong>dk</strong>artotek og underkartotek.<br />

C5 vers. 2012 -> Eksempel på Group Header ved afhængige kartoteker<br />

SEARCH InvenItemGroup<br />

OUTPUT InvenItemGroup<br />

SEARCH InvenTable<br />

WHERE InvenTable.Group == InvenItemGroup.Group<br />

OUTPUT InvenTable<br />

END<br />

END<br />

Body<br />

GrHd<br />

Body<br />

InvenItemG<br />

InvenTable<br />

InvenTable<br />

Group GroupName<br />

ItemNumber ItemName1<br />

Group<br />

281<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. -> 4.1 Eksempel på Group Header ved afhængige kartoteker<br />

SEARCH LagGruppe<br />

OUTPUT LagGruppe<br />

SEARCH LagKart<br />

WHERE LagKart.Gruppe == LagGruppe.Gruppe<br />

OUTPUT LagKart<br />

END<br />

END<br />

Body<br />

GrHd<br />

Body<br />

Resultat<br />

LagGruppe<br />

LagKart<br />

LagKart<br />

10 Harddiske<br />

12000 Harddisk type 2 10<br />

17006 Harddisk type 5 10<br />

20 Skærme<br />

20000 Skærm 17” 20<br />

14000 Skærm 14” 20<br />

30 Kabinetter<br />

18000 Kabinetter 30<br />

40 Ram<br />

16000 Ram 8 MB 40<br />

14000 Ram 16 MB 40<br />

I dette eksempel anvendes Group Headeren kun til at sætte en streg, inden der skrives ud fra<br />

underkartoteket. På denne måde kommer hove<strong>dk</strong>artoteket til at virke som en form for overskrift til<br />

underkartoteket.<br />

Linjetypen Group Footer<br />

Gruppe GruppeNavn<br />

VareNummer VareNavn1<br />

Gruppe<br />

Linjetypen Group Footer skal altid udfyldes i kartotekskolonnen med navn på kartotek eller med en *.<br />

I layoutområdet indsættes der felter og tekster på samme måde som i andre linjetyper.<br />

Linjetypen Group Footer aktiveres hver gang, der afsluttes med output fra et kartotek i Rapport XAL<br />

eller en evt. Rapport QT.<br />

Dette gælder både ved enkeltstående kartoteker og afhængige kartoteker.<br />

Linjetypen aktiveres således hver gang, der ikke længere kommer output fra et kartotek i Rapport XAL<br />

eller Rapport QT.<br />

De to næste sider indeholder eksempler på henholdsvis anvendelse af Group Footer i enkeltstående<br />

kartoteker uden relation og i sammenhængende kartoteker med relation.<br />

282<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Eksempel på Group Footer ved enkeltstående kartoteker uden relation<br />

Ved enkeltstående uafhængige kartoteker udskrives Group Footerne hver gang, der sluttes et kartotek.<br />

C5 vers. 2012 -> Eksempel på Group Footer i enkeltstående kartoteker<br />

SEARCH InvenItemGroup<br />

OUTPUT InvenItemGroup<br />

END<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

GrHd<br />

GrHd<br />

Body<br />

GrFt<br />

GrHd<br />

GrHd<br />

Body<br />

GrFt<br />

InvenItemG<br />

InvenItemG<br />

InvenItemG<br />

InvenItemG<br />

InvenTable<br />

InvenTable<br />

InvenTable<br />

InvenTable<br />

Varegrupper<br />

Varer<br />

C5 vers. -> 4.1 Eksempel på Group Footer i enkeltstående kartoteker<br />

SEARCH LagGruppe<br />

OUTPUT LagGruppe<br />

END<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

GrHd<br />

GrHd<br />

Body<br />

GrFt<br />

GrHd<br />

GrHd<br />

Body<br />

GrFt<br />

Resultat<br />

LagGruppe<br />

LagGruppe<br />

LagGruppe<br />

LagGruppe<br />

LagKart<br />

LagKart<br />

LagKart<br />

LagKart<br />

Group GroupName<br />

ItemNumber ItemName1<br />

Group<br />

Varegrupper<br />

Gruppe GruppeNavn<br />

Varer<br />

VareNummer VareNavn1<br />

Gruppe<br />

283<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Varegrupper<br />

10 Harddiske<br />

20 Skærme<br />

30 Kabinetter<br />

40 Ram<br />

Varer<br />

12000 Harddisk type 2 10<br />

14000 Skærm 14” 20<br />

16000 Ram 8 MB 40<br />

16004 Ram 16 MB 40<br />

17006 Harddisk type 5 10<br />

18000 Kabinet 30<br />

20000 Skærm 17” 20<br />

I eksemplet anvendes Group Footerne kun til at skrive en dobbeltstreg for at vise, at udskrivning af<br />

poster fra kartoteket er slut.<br />

Definitionsområdet til ovenstående eksempel kunne også sættes op som nedenstående figur, idet<br />

Group Footerne med kartoteker erstattes af én enkelt Group Footer med angivelse af * i<br />

kartotekskolonnen, hvilket betyder, at den pågældende linje udskrives hver gang, et hvilket som helst<br />

kartotek afsluttes.<br />

C5 vers. 2012 -> Eksempel på Group Footer med *<br />

GrHd<br />

GrHd<br />

Body<br />

GrHd<br />

GrHd<br />

Body<br />

GrFt<br />

InvenItemG<br />

InvenItemG<br />

InvenItemG<br />

InvenTable<br />

InvenTable<br />

InvenTable<br />

*<br />

Varegrupper<br />

C5 vers. -> 4.1 Eksempel på Group Footer med *<br />

GrHd<br />

GrHd<br />

Body<br />

GrHd<br />

GrHd<br />

Body<br />

GrFt<br />

LagGruppe<br />

LagGruppe<br />

LagGruppe<br />

LagKart<br />

LagKart<br />

LagKart<br />

*<br />

Group GroupName<br />

Varer<br />

ItemNumber ItemName1<br />

Group<br />

Varegrupper<br />

Gruppe GruppeNavn<br />

Varer<br />

VareNummer VareNavn1<br />

Gruppe<br />

284<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Eksempel på Group Footer ved afhængige kartoteker<br />

Ved flere afhængige kartoteker udskrives Group Footerne hver gang, der ikke længere kommer poster<br />

fra et af kartotekerne. Det er tilfældet hver gang, der fra underkartoteket vendes tilbage til<br />

hove<strong>dk</strong>artoteket .<br />

C5 vers. 2012 -> Eksempel Group Footer ved flere kartoteker<br />

SEARCH InvenItemGroup<br />

OUTPUT InvenItemGroup<br />

SEARCH InvenTable<br />

WHERE InvenTable.Group == InvenItemGroup.Group<br />

OUTPUT InvenTable<br />

END<br />

END<br />

Body<br />

Body<br />

GrFt<br />

InvenItemG<br />

InvenTable<br />

*<br />

C5 vers. -> 4.1 Eksempel Group Footer ved flere kartoteker<br />

SEARCH LagGruppe<br />

OUTPUT LagGruppe<br />

SEARCH LagKart<br />

WHERE LagKart.Gruppe == LagGruppe.Gruppe<br />

OUTPUT LagKart<br />

END<br />

END<br />

Body<br />

Body<br />

GrFt<br />

LagGruppe<br />

LagKart<br />

*<br />

Group GroupName<br />

ItemNumber ItemName1<br />

Group<br />

Gruppe GruppeNavn<br />

VareNummer VareNavn1<br />

Gruppe<br />

I denne opsætning af definitionsområdet angives der én Group Footer linje med en * i<br />

kartotekskolonnen. Det betyder, at hver gang der afsluttes med udskrivning fra et kartotek, udskrives<br />

denne linje. Definitionen kan f.eks. give følgende resultat.<br />

285<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Resultat<br />

10 Harddiske<br />

12000 Harddisk type 2 10<br />

17006 Harddisk type 5 10<br />

20 Skærme<br />

20000 Skærm 17” 20<br />

14000 Skærm 14” 20<br />

30 Kabinetter<br />

18000 Kabinetter 30<br />

40 Ram<br />

16000 Ram 8 MB 40<br />

14000 Ram 16 MB 40<br />

I stedet for Group Footeren med * i kartotekskolonnen, kunne der indsættes en Group Footer linje til<br />

hvert kartotek med angivelse af kartotek i kartotekskolonnen.<br />

Linjetypen Subtotal<br />

Opsætning af linjetypen<br />

Linjetypen Subtotal har kun ét formål, at udskrive ledetekster til automatiske subtotaler.<br />

Kartotekskolonnen skal altid udfyldes med navn på kartotek eller *.<br />

I layoutområdet indsættes den ledetekst, der skal stå foran automatiske totaler. Ledeteksten kan<br />

udmærket bestå af tekst og evt. relevante felter.<br />

Linjetypen Subtotal aktiveres hver gang, der udskrives en total fra et kartotek i Rapport XAL eller en<br />

evt. Rapport QT.<br />

Dette gælder både ved enkeltstående kartoteker og afhængige kartoteker.<br />

C5 vers. 2012 -> Eksempel med Subtotal på ét kartotek<br />

SEARCH VendTrans<br />

WHERE Account == ”971249987”<br />

OUTPUT VendTrans<br />

END<br />

PgHd<br />

PgHd<br />

Body<br />

Subt<br />

VendTrans<br />

VendTrans<br />

C5 vers. -> 4.1 Eksempel med Subtotal på ét kartotek<br />

Konto Dato Bilag BeløbDkr<br />

Account Date_ Voucher<br />

Kreditorposter i alt ........:<br />

AmountMst<br />

286<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


SEARCH KrePost<br />

WHERE Konto == ”971249987”<br />

OUTPUT KrePost<br />

END<br />

PgHd<br />

PgHd<br />

Body<br />

Subt<br />

KrePost<br />

KrePost<br />

Resultat med linjetypen Subtotal<br />

Konto Dato Bilag BeløbDkr<br />

Konto Dato Bilag<br />

Kreditorposter i alt ........:<br />

Konto Dato Bilag Beløb Dkr<br />

971249987 23/05-97 500016 -222.693,75<br />

971249987 20/10-97 70025 222.693,75<br />

971249987 04/01-98 500025 -26.723,25<br />

971249987 02/03-98 70056 26.723,25<br />

971249987 31/03-98 500050 -93.531,38<br />

Kreditorposter i alt .......: -93.531,38<br />

Herunder følger et eksempel med to afhængige kartoteker.<br />

Eksempel på Subtotal ved afhængige kartoteker<br />

Ved flere afhængige kartoteker udskrives Subtotal linjerne hver gang, der udskrives en subtotal fra et af<br />

kartotekerne.<br />

C5 vers. 2012 -> Eksempel med subtotaler på flere kartoteker<br />

SEARCH VendTable<br />

OUTPUT VendTable<br />

SEARCH VendTrans<br />

WHERE VendTrans.Account == VendTable.Account<br />

OUTPUT VendTrans<br />

END<br />

END<br />

Body<br />

Body<br />

Subt<br />

Subt<br />

VendTable<br />

VendTrans<br />

VendTrans<br />

VendTable<br />

C5 vers. -> 4.1 Eksempel med subtotaler på flere kartoteker<br />

BeløbDkk<br />

Account Name<br />

BalanceMst<br />

Account Date_ AmountMst<br />

Poster i alt .....:<br />

Kreditorer i alt ............:<br />

287<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


SEARCH KreKart<br />

OUTPUT KreKart<br />

SEARCH KrePost<br />

WHERE KrePost.Konto == KreKart.Konto<br />

OUTPUT KrePost<br />

END<br />

END<br />

Body<br />

Body<br />

Subt<br />

Subt<br />

KreKart<br />

KrePost<br />

KrePost<br />

KreKart<br />

Resultat med linjetypen Subtotal<br />

Konto Navn<br />

SaldoDkk<br />

Konto Dato BeløbDkk<br />

Poster i alt .....:<br />

Kreditorer i alt ............:<br />

971249987 Intel Corporation -93.531,38<br />

971249987 23/05-97 -222.693,75<br />

971249987 20/10-97 222.693,75<br />

971249987 04/01-98 -26.723,25<br />

971249987 02/03-98 26.723,25<br />

971249987 31/03-98 -93.531,38<br />

Poster i alt ....: -93.531,38<br />

Kreditorer i alt .............: -523.548,88<br />

Ovenstående eksempel viser data fra to kartoteker, med hver sin ledetekst til subtotalerne.<br />

I Rapport XAL udsøges faktisk alle kreditorer og poster, men i resultatet i eksemplet vises kun et udsnit<br />

af posterne og den samlede subtotal.<br />

Hvis der skulle være samme ledetekst til begge kartoteker, havde det været nok med en subtotal linje<br />

med * i kartotekskolonnen.<br />

Opsætning af felt<br />

Opsætning af felter med subtotal udføres i layoutområdet i Rapport Definition.<br />

Feltet, der skal summeres åbnes og i menuen Ret felt i menupunktet Subtotaler indsættes en af<br />

summerings metoderne fra nedenstående skema.<br />

De enkelte metoder gennemgås nøjere i lektionen ’Subtotaler automatiske’.<br />

288<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Metoder til summering<br />

Metode Anvendelse<br />

Sum alle Alle poster summeres<br />

Sum positive Kun positive poster summeres<br />

Sum negative Kun negative poster summeres<br />

Opsætningen foregår som vist i nedenstående figur.<br />

C5 vers. 2012 -> Opsætning af subtotal på feltet AmountMst<br />

PgHd<br />

PgHd<br />

Body<br />

VendTrans<br />

Konto Dato Bilag BeløbDkr<br />

C5 vers. -> 4.1 Opsætning af subtotal på feltet BeløbDkk<br />

PgHd<br />

PgHd<br />

Body<br />

KrePost<br />

Account Date_ Voucher<br />

Opsæt subtotal<br />

INSERT<br />

AmountMst<br />

Ret felt<br />

...<br />

...<br />

...<br />

Subtotaler<br />

Sum alle<br />

Sum positive<br />

Sum negative<br />

Konto Dato Bilag BeløbDkr<br />

Konto Dato Bilag<br />

Opsæt subtotal<br />

INSERT<br />

289<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

F6<br />

BeløbDkk<br />

F6<br />

Ret felt<br />

...<br />

...<br />

...<br />

Subtotaler<br />

Sum alle<br />

Sum positive<br />

Sum negative


Opsætning til automatiske subtotaler<br />

I skemaet herover vises opsætningen, som den udføres under Opsætning i Rapport Definition. Det vises<br />

øverst i figuren med CTRL+F6, der åbner for boksen Opsætning. Placeres cursoren i feltet Subtotal, og<br />

der tastes Enter åbnes boksen Opsæt subtotaler, hvor kartotek vælges. (Er der kun et kartotek vises<br />

denne boks ikke. Der hoppes derimod direkte til næste boks.)<br />

Efter valgt kartotek åbnes en ny boks med kartoteksnavnet som overskrift. I denne boks, skal der svares<br />

JA til om subtotalen skal udskrives eller ej, og det kan med JA, udfyldes, om der skal være sideskift efter<br />

at subtotaler er udskrevet.<br />

Der findes flere felter i de forskellige bokse, men dette er de vigtigste i nuværende situation.<br />

Defaultværdier<br />

Rapport-definition<br />

CTRL +F6<br />

Subtotal ......: Vælg<br />

Udskriftsmuligheder<br />

(under afvikling)<br />

Subtotal ......: Vælg<br />

Opsætning<br />

ENTER<br />

ENTER<br />

Udskriv subtotal:<br />

Opsæt subtotaler<br />

* Første kartoteksnavn<br />

* Andet kartoteksnavn<br />

KartoteksNavn<br />

Sideskift efter subtotal:<br />

De værdier, der indsættes under opsætningen, fungerer som default i boksen Udskriftsmuligheder,<br />

når denne vises under afviklingen.<br />

Boksen Udskriftsmuligheder ses nederst i figuren. I feltet Subtotal tastes Enter og samme bokse vises<br />

som under opsætning af Rapport Definition.<br />

290<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

JA


Opgaver: Linjetyper med kartoteker<br />

Opgave 1: Automatisk subtotal i ’Udlånsliste’<br />

Formål med opgaven<br />

At udføre automatisk sammentælling af feltet ForsikringsSum i rapporten Udlånsliste.<br />

Beskrivelse<br />

Der skal arbejdes videre med rapporten ’Udlånsliste’ fra forrige opgave.<br />

I rapporten skal der foretages en automatisk summering af værdierne i feltet ForsikringsSum og der<br />

skal indsættes en speciel tekst til totalen i en linje af typen Subtotal.<br />

1 Vælg rapporten ’Udlånsliste’ fra forrige opgave.<br />

Forløb √<br />

2 Opsæt feltet ForsikringsSum således at alle værdier summeres automatisk.<br />

3 Indsæt en linje af typen subtotal med teksten: Forsikringsværdi i alt:<br />

Husk at angive det rigtige kartoteksnavn i kartotekskolonnen.<br />

4 Vælg opsætning af rapporten og sæt feltet ’Udskriv subtotal’ til JA.<br />

5 Go<strong>dk</strong>end og afprøv rapporten.<br />

291<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgave 2: Group header og –footer i ’Udlånsliste’<br />

Formål med opgaven<br />

At tilføje en søgning af et ekstra kartotek i rapporten Udlånsliste og at anvende linjetyperne Group<br />

header og –footer til dette kartotek.<br />

Beskrivelse<br />

Der skal arbejdes videre med rapporten ’Udlånsliste’ fra forrige opgave.<br />

Rapporten skal udvides med en søgning af kartoteket UDLUdlånsPost, således at der for hver<br />

udlånsordre vises hvilke udlånslinjer, den indeholder.<br />

Linjerne skal synkroniseres med ordrerne og der skal indsættes linjer af typerne Group header og –<br />

footer, for at vise hvor posterne starter og slutter.<br />

1 Vælg rapporten Udlånsliste fra forrige opgave.<br />

Forløb √<br />

2 I Rapport XAL, i søgeløkken på UDLUdlånsKart, skal der indsættes en ny søgeløkke<br />

på UDLUdlånsPost.<br />

UDLUdlånsPost skal synkroniseres med UDLUdlånsKart.<br />

Posterne fra UDLUdlånsPost skal desuden sendes til Rapport definition til en<br />

Bodylinje med samme kartoteksnavn.<br />

3 I Rapport definition skal der oprettes en ny Bodylinje til kartoteket UDLUdlånsPost.<br />

Indsæt felterne VareNr, VareNavn og Status.<br />

4 Opret en Group header linje til kartoteket UDLUdlånsPost. Linjen skal være blank<br />

og anvendes kun til adskillelse med ordrer og linjer.<br />

5 Opret to Group footer linjer til kartoteket UDLUdlånsPost. Den første skal<br />

indeholde en gennemgående tegnet dobbeltstreg og den anden skal være blank.<br />

Dette viser at posterne slutter her.<br />

6 Go<strong>dk</strong>end og afprøv rapporten.<br />

292<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


7. Rapport QT Grundlæggende funktioner<br />

Mål med lektionen<br />

At give deltagerne grundlæggende indsigt i opsætning af rapport-QT, samt viden om opsætning af<br />

brugernes muligheder.<br />

Efter lektionen skal kursisterne kunne:<br />

Opsætte rapport QT med ét kartotek<br />

Opsætte brugermulighederne i rapport-QT.<br />

QT generelt<br />

QT er en forkortelse for Query Tool, hvilket vil sige forespørgselsværktøj. Værktøjet anvendes til<br />

forespørgsler i databasen på lige fod med rapport-XAL.<br />

Selve QT-boksen minder mest om en promptboks med ledetekster og indtastningsfelter. Opbygningen<br />

er derimod helt anderledes.<br />

Eksempel på en QT<br />

Kartotek Afgrænsning Fra Til Status<br />

LagerKartotek Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Skjul<br />

Varenummer.: Åben<br />

QT-værktøjet<br />

Værktøjet hjælper programmøren til at danne ensartede forespørgsler, og samtidig spares der en del<br />

programmeringsarbejde. Desuden får brugeren visse muligheder der ellers er meget besværlige at<br />

kode i en XAL-kørsel.<br />

Med hensyn til XAL-editoren findes denne i en søjle i udviklingsmenuen og som en del af<br />

rapportgeneratoren. Det samme gælder for QT-værktøjet. Det findes også som søjle i<br />

udviklingsmenuen og er integreret i rapportgeneratoren.<br />

To muligheder for anvendelse af QT-værktøjet<br />

Mulighed Anvendelse<br />

Selvstændig Proces Selvstændigt forespørgselsværktøj. Findes under QT i<br />

udviklingsmenuen.<br />

Integreret i<br />

Rapportgeneratoren<br />

Udtrukne data sendes til skærmen med PRINT.<br />

Integreret som en del af rapportgeneratoren. Findes under<br />

RAP i udviklingsmenuen.<br />

Udtrukne data udskrives i form af rapporter.<br />

De to QT’er har ikke noget med hinanden at gøre, men de er bygget ens op og fungerer ens, bortset<br />

fra at den ene skriver til skærmen, medens den anden sender sine data til rapporten.<br />

Denne lektion omhandler kun QT-værktøjet som en integreret del af rapportgeneratoren.<br />

293<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


QT i forhold til XAL<br />

QT’en kan sammenlignes med en XAL-kørsel, hvor nogle kommandoer som standard er indbygget som<br />

faste komponenter. Det er f.eks. ikke nødvendigt at angive SEARCH for at trække data fra et kartotek.<br />

Kartoteksnavnet indsættes blot i et felt i opsætningen af QT’en.<br />

Fordele og ulemper ved at anvendelse af QT<br />

Fordele<br />

Søgestrukturer skal ikke programmeres.<br />

Større frihed til ændring af afgrænsninger og sortering under selve afviklingen.<br />

Generelt mindre programmering.<br />

Dialogen omkring afgrænsningen af poster skal ikke programmeres.<br />

Dialogen bliver ensartet fra opgave til opgave.<br />

Ulemper<br />

Der er ikke muligt at styre logikken 100% i programmet.<br />

Det er ikke muligt at tilgå de værdier, der indtastes i afgrænsningsboksene.<br />

Tre hovedområder i rapportgeneratoren<br />

Rapportgeneratoren består altså ikke kun af hovedområderne Rapport-XAL og Rapport-definition, men<br />

også af et tredje hovedområde Rapport-QT.<br />

De tre hovedområder i rapportgeneratoren<br />

Område Anvendelse<br />

Rapport-XAL Datasøgning vha. XAL-kommandoer.<br />

Rapport-QT Datasøgning vha. QT-værktøjet.<br />

Rapport-definition Definition af linjetyper og opsætning af layout.<br />

Udtræk med XAL eller QT<br />

Data udtrækkes i databasen med enten Rapport-XAL eller Rapport-QT som illustreret i nedenstående<br />

figur.<br />

294<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Dataudtræk med XAL eller QT<br />

Når rapportgeneratoren vælges, vises Rapport-XAL og Rapport-definition samtidig. Rapport-QT skal<br />

derimod først åbnes med funktionen ’Hop til søgning’, ALT+F6.<br />

Områdernes placering i rapportgeneratoren ses i figuren herunder.<br />

Hovedområdernes placering i rapportgeneratoren<br />

Bemærk!<br />

Rapport-<br />

XAL<br />

Rapport-XAL<br />

Rapport-definition<br />

Ved oprettelse af nye rapporter er det valgfrit, hvilket hovedelement der anvendes først.<br />

XAL og QT i samme rapport<br />

Kartoteker<br />

Rapport-definition<br />

Rapport-QT<br />

(Kaldes med ALT+F6)<br />

Rapport-<br />

QT<br />

Der må ikke forekomme både Rapport-XAL og Rapport-QT i den samme rapport.<br />

Hvis begge dele forekommer samtidig, anvender systemet automatisk Rapport-XAL.<br />

295<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Systemet anvender Rapport-XAL hvis begge forefindes<br />

Rapport-<br />

XAL<br />

Kartoteker<br />

Rapport-definition<br />

Hvis begge værktøjer anvendes i samme rapport, er reglen den, at XAL får første prioritet og derfor<br />

anvendes. Det gælder også, hvis der blot er indsat en blank linje eller en kommentar i XAL’en.<br />

Oprettes der en Rapport-QT, og den ikke kan startes, er det vigtigt først at undersøge, om der evt.<br />

findes blanke linjer, kommentarer eller kodelinjer i Rapport-XAL.<br />

En rapport kan afprøves med ALT+R uden at være gemt, og derfor opdages en sådan fejl først ved<br />

afprøvningen, eller når rapporten gemmes. Når fejlen opstår vises nedenstående meddelelse på<br />

skærmen.<br />

Fejlmeddelelse ved både Rapport-XAL og Rapport-QT i samme rapport<br />

Rapporten ... har både søgning<br />

og ikke-tom rapport-editorbox.<br />

Kun rapport-editorboxen vil<br />

blive anvendt under afvikling.<br />

Rapport-<br />

QT<br />

Med søgning menes Rapport-QT, og med rapport-editorbox menes Rapport-XAL.<br />

Forskelle ved udsendelse af data til rapport<br />

Når der fra Rapport-XAL skal sendes data til en rapport, anvendes kommandoen OUTPUT med et<br />

kartoteksnavn.<br />

Kommandoen anvendes kun i Rapport-XAL. I QT’en anvendes der ingen kommando til dette. QT’en er<br />

implementeret på en sådan måde, at udtrukne data automatisk ledes videre til rapporten.<br />

296<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Dataudtræk med XAL eller QT<br />

QT værktøjets vinduer<br />

I QT-værktøjet anvendes flere vinduer med felter, der skal udfyldes for at opnå den ønskede<br />

funktionalitet i QT’en.<br />

Vinduer i QT-værktøjet<br />

Rapport-<br />

XAL<br />

OUTPUT<br />

OUTPUT<br />

Vinduer Anvendelse<br />

Kartoteker<br />

Rapport-definition<br />

Rapport-<br />

QT<br />

Afgrænsningsvinduet Viser de kartoteker der skal søges i. Felter til afgrænsning kan<br />

indsættes.<br />

(Kartotekerne indsættes i relationsvinduet.)<br />

Opsætningsvinduet Opsætning af selve afgrænsningsvinduet mht. overskrift,<br />

størrelse på afgrænsningsfelter o.a.<br />

Relationsvinduet Indsættelse af kartotek der skal søges i.<br />

Kartotekerne ses i afgrænsningsvinduet.<br />

(Ved flere kartoteker angives også felter, der skal relatere til<br />

hinanden).<br />

Sorteringsvinduet Indsættelse af felter eller indeks til sortering.<br />

297<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Vinduernes indbyrdes forhold<br />

SH+F2<br />

Relationssvindue<br />

SH+F2 = Oprette<br />

SH+F6 = Rette<br />

På de næste sider beskrives de forskellige vinduer.<br />

Afgrænsningsvinduet<br />

Afgrænsningsvindue<br />

Opsætningsvindue<br />

CTRL+F6<br />

Afgrænsningsvinduet er det vindue, brugeren ser, når QT’en afvikles. I vinduet ses f.eks. navnet på<br />

søgekartoteket og de felter, der kan afgrænses på.<br />

Opsætningen af vinduet foregår i rapportgeneratoren, hvor det åbnes med funktionstaster.<br />

Afgrænsningsvinduet når det er åbnet i rapportgeneratoren<br />

(XAL område)<br />

(Rapportområde)<br />

-Kartotek-Afgrænsning-Fra-------Til-------Status<br />

(Afgrænsningsvinduet i Rapport-QT)<br />

ENTER i Sortering- feltet<br />

Sorteringssvindue<br />

298<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Når afgrænsningsvinduet første gang åbnes, er det tomt og består kun af nogle søjleoverskrifter som i<br />

eksemplet herover.<br />

For at QT’en kan fungere skal vinduet først udfyldes med navne på det eller de kartoteker, der skal<br />

søges data ud fra. Desuden skal der også indsættes navne på felter, der skal anvendes til afgrænsning<br />

af posterne i de angivne kartoteker.<br />

Efterfølgende vises et eksempel på en færdig QT.<br />

Eksempel på afgrænsningsvindue<br />

Kartotek Afgrænsning Fra Til Status<br />

LagerKartotek Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Skjul<br />

Varenummer.: Åben<br />

I eksemplet fremgår det, at det drejer sig om en søgning i kartoteket InvenTable, og at der er mulighed<br />

for at afgrænse på Varenummer-feltet (ItemNumber). Der er ikke angivet nogen sortering i<br />

Sortering-feltet.<br />

Vedr. søjlen Status henvises til afsnittet ’Brugernes muligheder i Rapport-QT’.<br />

Inden kartotekerne kan ses i afgrænsningsvinduet, skal de opsættes i Relationsvinduet. Dette behandles<br />

i næste afsnit.<br />

Relationsvinduet (ved søgning i ét kartotek)<br />

Relationsvinduet består af forskellige felter, der benyttes til styring og angivelse af de kartoteker, der<br />

skal søges i.<br />

Vinduet anvendes forskelligt, afhængigt af om der skal søges i ét eller flere kartoteker. I denne lektion<br />

behandles vinduets anvendelse i forbindelse med søgning i ét kartotek.<br />

Nedenstående figur viser relationsvinduet, hvor de felter, der anvendes ved søgning i ét kartotek, er<br />

fremhævet med grå skygge.<br />

Relationsvinduet ved søgning i ét kartotek<br />

Relater<br />

Output<br />

Tilføj<br />

Felt Felt<br />

Altid Før join<br />

Alle felter<br />

Bemærk at alle felter er synlige, men at kun to af dem skal anvendes.<br />

Kartoteksnavn<br />

Alle felter<br />

Samme felter<br />

Ingen felter<br />

299<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Når vinduet åbnes, er cursoren altid i det øverste felt i højre side. Her indsættes navnet på det kartotek,<br />

der skal søges i.<br />

I det nederste felt med ledeteksten Tilføj, angives om brugeren selv må have lov til at tilføje felter til<br />

afgrænsning, når QT’en afvikles.<br />

Brugerens muligheder for tilføjelse af felter til afgrænsning i QT’en<br />

Mulighed Anvendelse<br />

Alle felter Brugeren har mulighed for at tilføje alle de felter der findes i<br />

kartoteket. Dette er default.<br />

Samme felter Brugeren har kun mulighed for at tilføje de samme felter, som<br />

programmøren i forvejen har sat på som afgrænsningsfelter.<br />

Ingen felter Brugeren må slet ikke tilføje nogen felter, og kan således kun<br />

afgrænse på de felter, programmøren har indsat i QT’en.<br />

Opsætningsvinduet<br />

Opsætningsvinduet anvendes til at bestemme, hvordan afgrænsningsvinduet skal se ud mht. overskrift,<br />

bredde på kolonner, om søgekartotekets navn skal vises for brugeren o.a.<br />

Opsætningsvindue<br />

Overskrift.....:<br />

Bredder Kartoteker 0 Fra<br />

Afgrænsning 0 Til<br />

Vis kartoteker.:<br />

Vis filter.....:<br />

Globale formler:<br />

Lagerliste<br />

Ja<br />

Ja<br />

Formler<br />

Eksempel på opsætning til nedenstående afgrænsningsvindue.<br />

Vinduet åbnes ved kald fra afgrænsningsvinduet.<br />

Afgrænsningsvindue med overskrift<br />

Lagerliste<br />

-Kartotek Afgrænsning Fra Til<br />

LagerKartotek Sortering..:<br />

Filter ....:<br />

Kørsler ...:<br />

Varenummer.:<br />

Der er følgende muligheder i opsætningen.<br />

15<br />

15<br />

300<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Muligheder i opsætningsvinduet<br />

Mulighed Anvendelse<br />

Overskrift QT’ens overskrift. Indtastes som fri tekst.<br />

Bredder Bredden på søjlerne Kartoteker, Afgrænsning, Fra og Til.<br />

Angives i form af antal karakterer.<br />

Vis kartoteker Ja eller Nej (default) til om kartoteksnavnet skal vises for<br />

brugeren, når denne anvender QT’en.<br />

Vis filter Ja eller Nej til om linjen med filteret skal vises for brugeren,<br />

når QT’en anvendes (Behandles ikke i denne lektion).<br />

Globale formler Dette felt vises ikke for brugeren, men er beregnet til at åbne<br />

for en liste over triggere til indtastning af ekstra kode<br />

(Behandles ikke i denne lektion).<br />

Sorteringsvinduet<br />

Sorteringsvinduet består af tre felter, der anvendes til sortering af poster, der fremfindes, når en QT<br />

afvikles.<br />

Der kan sorteres på felter og faste indekser. Felter kan sorteres efter stigende eller faldende værdi.<br />

Sorteringsvindue<br />

Felt Retning<br />

Tvunget Index<br />

Muligheder i sorteringsvinduet<br />

Mulighed Anvendelse<br />

Felt<br />

Angivelse af kartoteksfelter at sortere på.<br />

Svarer til ORDER i XAL.<br />

Retning Sorteringsfølge for indsatte kartoteksfelter.<br />

Svarer til ASCENDING og DESCENDING i XAL.<br />

Tvunget indeks Angivelse af et fast indeks.<br />

Svarer til USING i XAL.<br />

301<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Procedure for QT til søgning i ét kartotek.<br />

Start afgrænsningsvinduet fra en ny eller eksisterende rapport i rapportgeneratoren.<br />

Vælg opsætningsvinduet og indsæt overskrift og evt. vis kartoteker.<br />

Vælg relationsvinduet og indsæt søgekartotek. Giv evt. bruger rettigheder til selv at<br />

tilføje afgrænsningsfelter.<br />

Tilbage i afgrænsningsvinduet tilføjes afgrænsningsfelter og QT’en go<strong>dk</strong>endes.<br />

Eksempel på Rapport-XAL og Rapport-QT<br />

Til sammenligning vises efterfølgende eksempler på henholdsvis en rapport-XAL og en rapport-QT.<br />

Begge opsætninger resulterer i samme rapport. Det vil sige, at Body linjen i layoutområdet er ens i<br />

begge tilfælde. Kun søgningen er forskellig.<br />

Rapport-XAL<br />

Eksempel på Rapport-XAL med promptboks. Indtastede værdier anvendes i søgeløkken.<br />

C5 vers. 2012 -> Eksempel på opsætning i rapport-XAL<br />

STR 10 &FraVare<br />

STR 10 &TilVare<br />

PROMPT ”Lagerliste med kostpriser”,,,<br />

”Fra ...: ” GET (&FraVare REF InvenTable.ItemNumber),<br />

”Til ...: ” GET (&TilVare REF InvenTable.ItemNumber)<br />

INPUT<br />

SEARCH InvenTable<br />

WHERE ItemNumber >= &FraVare AND ItemNumber


C5 vers. -> 4.1 Eksempel på opsætning i rapport-XAL<br />

STR 10 &FraVare<br />

STR 10 &TilVare<br />

PROMPT ”Lagerliste med kostpriser”,,,<br />

”Fra ...: ” GET (&FraVare REF LagKart.VareNummer),<br />

”Til ...: ” GET (&TilVare REF LagKart.VareNummer)<br />

INPUT<br />

SEARCH LagKart<br />

WHERE VareNummer >= &FraVare AND VareNummer


Opsætningsvindue<br />

(Indsættelse af overskrift og evt. vis kartotek CTRL+F6)<br />

Overskrift.....:<br />

Bredder Kartoteker 0 Fra<br />

Afgrænsning 0 Til<br />

Vis kartoteker.:<br />

Vis filter.....:<br />

Globale formler:<br />

C5 vers. 2012 -> Relationsvindue<br />

(Valg af kartotek til søgning SH+F2)<br />

Relater<br />

Output<br />

Tilføj<br />

InvenTable<br />

Felt Felt<br />

123456789012345<br />

C5 vers. -> 4.1 Relationsvindue<br />

(Valg af kartotek til søgning SH+F2)<br />

Relater<br />

Output<br />

Tilføj<br />

Altid Før join<br />

Alle felter<br />

Lagerliste med kostpriser<br />

Nej<br />

Nej<br />

Formler<br />

15<br />

15<br />

LagKart<br />

Felt Felt<br />

123456789012345 Kart<br />

Altid Før join<br />

Alle felter<br />

304<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Afgrænsningsvinduet<br />

(Tilføje afgrænsningsfelter og go<strong>dk</strong>ende QT’en)<br />

Kartotek Afgrænsning Fra Til Status<br />

Lagerkartotek Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Skjul<br />

Varenummer.: Åben<br />

Varenummer-feltet (ItemNumber) er indsat som afgrænsningsfelt.<br />

På næste side vises det færdige afgrænsningsvindue, der svarer til promptboksen i Rapport-XAL.<br />

Det færdige afgrænsningsvindue (som brugeren anvender det)<br />

Afgrænsning Fra Til<br />

Sortering..:<br />

Varenummer.:<br />

Det er ikke muligt for brugerne at ændre på promptbokse. De kan imidlertid ændre visse ting i QTbokse.<br />

I næste afsnit behandles brugernes muligheder for at ændre i QT boksen under afviklingen.<br />

Brugernes muligheder i Rapport-QT<br />

Når der anvendes Rapport-QT har brugerne nogle fordele, der ikke findes i Rapport-XAL. Brugeren kan<br />

f.eks. selv tilføje og slette afgrænsninger, afhængigt af om programmøren har åbnet for denne<br />

mulighed.<br />

De enkelte muligheder beskrives i nedenstående skema.<br />

Brugerens muligheder ved anvendelse af Rapport-QT<br />

Mulighed Anvendelse<br />

Tilføj afgrænsning Kan selv tilføje afgrænsninger inden for de muligheder<br />

programmøren har opsat i relationsvinduet.<br />

Fjern afgrænsning Kan selv fjerne både egne og programmørens afgrænsninger.<br />

Kopiere feltindhold Kan kopiere feltindhold fra et afgrænsningsfelt til et andet.<br />

Skift mellem 1 og 2<br />

afgrænsninger<br />

Kan bestemme om der skal være afgrænsningsfelt både i Fra og<br />

Til kolonnen eller kun i Fra kolonnen.<br />

Opsætning Der kan ændre bredde på kolonner via opsætning.<br />

Kan vælge at vise kartoteker og filter.<br />

Slet brugerrettelser Kan slette alle sine egne ændringer i forhold til den oprindelige<br />

opsætning udført af programmøren.<br />

305<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Afgrænsningsvindue opsat af programmør<br />

Afgrænsning Fra Til<br />

Sortering..:<br />

Varenummer.:<br />

Afgrænsningsvindue ændret af bruger under afvikling<br />

Lagerliste med kostpriser<br />

Kartotek Afgrænsning Fra Til<br />

Lagerkartotek Sortering..:<br />

Varenummer.: 10000<br />

10000<br />

Varenummer.: 18000<br />

20000<br />

Varegruppe.: 10<br />

-----<br />

Vis kartotek<br />

Bredde på<br />

kolonner<br />

CTRL+F6<br />

Det fremgår, at der findes visse standard opsætningsmuligheder for brugerne.<br />

Brugernes mulighed for at tilføje afgrænsningsfelter kan begrænses i relationsvinduet.<br />

Ud over ovenstående tiltag for at styre brugernes muligheder, kan de enkelte linjer også styres. Det<br />

foregår i afgrænsningsvinduet i søjlen Status.<br />

Afgrænsningsvindue med søjlen Status<br />

Lagerliste med kostpriser<br />

Tilføj afgrænsning F2 Slet<br />

afgrænsning ALT+F9 1 eller 2 felter<br />

Kan begrænses i<br />

relationsvinduet<br />

ALT+L<br />

Kopiere felt<br />

ALT+C<br />

Kartotek Afgrænsning Fra Til Status<br />

Lagerkartotek Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Skjul<br />

Varenummer.: Åben<br />

306<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Søjlen status har tre valgmuligheder.<br />

Mulighed Anvendelse<br />

Åben<br />

Lås<br />

Skjul<br />

Bruger kan indtaste i felter.<br />

Bruger kan desuden tilføje og slette felter, hvis dette er åbent i<br />

relationsvinduet.<br />

Bruger kan se værdier som programmøren har indlagt i forvejen,<br />

men kan ikke ændre disse værdier.<br />

Bruger kan selv tilføje afgrænsningsfelter.<br />

Bruger kan ikke se værdier indsat i forvejen.<br />

Bruger kan heller ikke tilføje nye afgrænsningsfelter, selv om det<br />

er lovligt i relationsvinduet.<br />

307<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Rapport QT Grundlæggende funktioner<br />

Opgave 1: Rapport QT til ’Vareudlån’<br />

Formål med opgaven<br />

At oprette Rapport QT til en rapport med navnet ’Vareudlån’. Rapporten er en liste over udlånte varer i<br />

kartoteket UDLUdlånsPost.<br />

Huskelister<br />

Rapport QT – Oprette første kartotek<br />

Beskrivelse<br />

Der skal oprettes Rapport QT til en rapport med navnet ’Vareudlån’.<br />

Data til rapporten udtrækkes fra kartoteket UDLUdlånsPost. Der indsættes afgrænsningsfelter til<br />

felterne UdlånsNr og VareNr.<br />

1 Opret en ny rapport.<br />

2 Vælg Rapport QT og giv QT’ overskriften: Vareudlån.<br />

3 Tilføj kartoteket UDLUdlånsPost.<br />

4 Tilføj afgrænsningsfelterne UdlånsNr og VareNr.<br />

5 Go<strong>dk</strong>end opsætningen af QT’en og luk rapporten.<br />

6 Afprøv om QT boksen ser rigtig ud.<br />

Forløb √<br />

308<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgave 2: Rapport-layout til ’Vareudlån’<br />

Formål med opgaven<br />

At oprette en Bodylinje og Page headere til rapporten ’Vareudlån’.<br />

Beskrivelse<br />

I rapporten ’Vareudlån’, fra forrige opgave, skal der oprettes en enkelt Bodylinje med felterne<br />

UdlånsNr, VareNr, VareNavn og Status. Desuden skal der oprettes et felt, der henter CostPrise fra<br />

InvenTable.<br />

Der skal også oprettes Page headere med overskrifter til felterne.<br />

1 Vælg rapporten ’Vareudlån’ fra forrige opgave.<br />

Forløb √<br />

2 Opret en enkelt Bodylinje til kartoteket UDLUdlånsPost og indsæt felterne UdlånsNr,<br />

VareNr, VareNavn og Status.<br />

Indsæt til sidst på linjen et felt, hvor feltudtrykket består af et direkte opslag, der<br />

henter feltet CostPrice på kartoteket InvenTable<br />

3 Indsæt en Page header linje med overskrifter til felterne.<br />

Venstre- og højrestil overskrifterne, så de passer til værdierne i felterne.<br />

4 Indsæt en Page header linje med tegnede streger under overskrifterne.<br />

Tilpas stregerne efter felternes længde.<br />

5 Go<strong>dk</strong>end rapporten og afprøv rapporten.<br />

309<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgave 3: Begrænsninger i QT til ’Vareudlån’<br />

Formål med opgaven<br />

At indsætte begrænsninger i QT’en til rapporten ’Vareudlån’, så brugerne kun kan tilføje de samme<br />

felter, som du har indsat. Desuden skal det skjules, så brugerne ikke kan se sortering og filter.<br />

Beskrivelse<br />

I rapporten ’Vareudlån’ fra forrige opgave, skal der i QT’en opsættes begrænsninger for brugerne, så<br />

de kun kan tilføje de samme felter, som de ser på QT’en, når den afvikles.<br />

Felterne sortering og filter skal desuden skjules for brugerne.<br />

1 Vælg rapporten ’Vareudlån’ fra forrige opgave.<br />

Forløb √<br />

2 Indsæt begrænsninger i Rapport QT, så brugerne kun kan tilføje samme felter, som<br />

de ser på QT’en.<br />

3 Skjul Sortering og Filter i Rapport QT, så brugerne ikke kan se dem.<br />

4 Go<strong>dk</strong>end rapporten og afprøv om afgrænsningerne virker.<br />

310<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


8. Rapport QT filtrering og sortering<br />

Mål med lektionen<br />

Formålet med denne lektion er at give deltagerne kendskab til filtrering og sortering i Rapport QT.<br />

Efter lektionen skal kursisterne kunne:<br />

Filtrere poster i Rapport QT<br />

Sortere poster i Rapport QT<br />

og kende:<br />

Forskel på Build-filter og Run-filter.<br />

Generelt<br />

Ved filtrering i Rapport QT forstås muligheden for at indlægge kode, der er bestemmende for, om de<br />

udvalgte poster skal sendes videre til Rapport Definition.<br />

Sortering i Rapport QT anvendes til at bestemme, den rækkefølge posterne udleveres på.<br />

Filtrering<br />

Filtrering i Rapport QT giver yderligere mulighed for at udvælge, de poster der skal med på en rapport.<br />

Den anden mulighed er afgrænsningsfelterne, som både programmør og bruger kan indsætte.<br />

Filtrering foregår i afgrænsningsvinduet i Rapport QT i feltet ’Filter’.<br />

Afgrænsningsvindue i Rapport QT med feltet ’Filter’<br />

Kartotek Afgrænsning Fra Til Status<br />

Debitorkartotek Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Skjul<br />

Kontonummer: Åben<br />

I ovenstående eksempel, på et afgrænsningsvindue til debitorkartoteket, ses både feltet Filter og et<br />

afgrænsningsfelt i form af kontonummerfeltet.<br />

Det skal bemærkes at afgrænsningsvinduet vises, som det ser ud under opsætningen. Under<br />

afviklingen ændrer vinduet form, idet kolonnen ’Status’ ikke vises, ligesom der er mulighed for at<br />

begrænse, hvad brugeren ellers må se under afviklingen.<br />

Afgrænsningsfelter<br />

I kontonummer-feltet kan der vælges fra og til kontonummer og hvis der skulle være behov for flere<br />

intervaller af kontonumre, kan der blot tilføjes et eller flere afgrænsningsfelter mere på feltet.<br />

Filter<br />

Filter-feltet giver en anden mulighed for filtrering af posterne, idet der her kun indsættes betingelser,<br />

der skal være opfyldt for at posterne kommer med i rapporten.<br />

Der kan således ikke indtastes XAL kode med kommandoer, men udelukkende betingelser.<br />

311<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Filtre i Rapport QT<br />

Der findes to filtre i Rapport QT, et der anvendes under opsætningen og et der anvendes under<br />

afviklingen.<br />

Filtre i Rapport QT<br />

Filter Anvendelse<br />

Build-filter Kan kun udfyldes under opsætningen. Kan ikke ses under afvikling.<br />

Run-filter Kan kun udfyldes under afviklingen. Ses ikke under opbygningen.<br />

Build-filter<br />

Opsætning af Build-filter<br />

Opsætning af Build-filter udføres i afgrænsningsvinduet, ved at placere cursoren i feltet Filter og taste<br />

ENTER, hvorved der åbnes en editorboks med overskriften ’Build-filter’.<br />

Selv om det er en editorboks, kan der alligevel kun indtastes betingelser, som de der f.eks. anvendes i<br />

IF strukturer.<br />

Eksempel på opsætning af Build-filter i afgrænsningsvinduet<br />

I ovenstående eksempel er der, i filteret, indsat betingelsen ’Saldofelt0’.<br />

Da der ikke er indsat værdier i afgrænsningsfeltet konto, medtages alle kontonumre, dog træder<br />

filteret i kraft og medfører, at kun poster der opfylder betingelsen i Build-filteret, medtages.<br />

Run-filter<br />

Opsætning af Run-filter<br />

Build-filter<br />

saldofelt0<br />

ENTER<br />

Kartotek Afgrænsning Fra Til Status<br />

Debitorkartotek Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Skjul<br />

Konto......: Åben<br />

Opsætning af run-filter udføres i afgrænsningsvinduet under afviklingen, ved at placere cursoren i<br />

feltet Filter og taste ENTER. Til forskel fra opbygningen af Rapport QT’en, åbnes denne gang en<br />

editorboks med overskriften ’Run-filter’.<br />

Selv om det er en editorboks, kan der alligevel kun indtastes betingelser, som de der f.eks. anvendes i<br />

IF strukturer.<br />

312<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Eksempel på Run-filter under afvikling af afgrænsningsvinduet<br />

I ovenstående eksempel starter feltet Filter med at være tomt. Det viser at Build-filteret ikke kan ses.<br />

Det filter, der ses under afviklingen, er således Run-filteret.<br />

Under opbygningen kan der således opbygges et filter, der ikke kan ændres eller ses under afviklingen.<br />

Til gengæld kan brugeren selv tilføje sine egne betingelser i Run-filteret.<br />

Bemærk! Build-filterets betingelser anvendes før Run-filterets.<br />

Dette kan have betydning i visse tilfælde. Hvis der i Build-filteret f.eks. opstilles betingelsen<br />

’Saldofelt>2000’, og der i Run-filteret opstilles betingelsen ’Saldofelt>1000’, giver dette kun poster, der<br />

tilsvarer betingelsen fra Build-filteret.<br />

Der medtages altså ikke poster, der har mindre saldo end 2000, selv om det anfordres i Run-filteret.<br />

Sortering<br />

Sortering udføres enten underopsætning eller afvikling. I begge tilfælde foregår det på samme måde i<br />

samme vindue.<br />

Opsætningen foregår fra Afgrænsningsvinduet i Rapport QT, ved at placere cursoren i feltet Sortering<br />

og taste ENTER, hvorved Sorteringsvinduet åbnes.<br />

Sorteringsvinduet<br />

Sorteringsvinduet består af tre felter der anvendes til sortering af poster.<br />

Der kan sorteres på felter og faste indekser, og felter kan sorteres stigende eller faldende.<br />

Sorteringsvindue<br />

Run-filter<br />

KreditMax>1000<br />

Felt Retning<br />

ENTER<br />

Kartotek Afgrænsning Fra Til<br />

DebitorKartotek Sortering..:<br />

Filter.....:<br />

Konto......:<br />

313<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Tvunget Index<br />

Muligheder i sorteringsvinduet<br />

Mulighed Anvendelse<br />

Felt Angivelse af kartoteksfelter at sortere på<br />

Svarer til ORDER eller ORDER BY i XAL<br />

Retning Sorteringsfølge for indsatte kartoteksfelter<br />

Svarer til ASCENDING og DESCENDING i XAL<br />

Tvunget indeks Angivelse af et fast indeks<br />

Anvendelse af sorteringsvinduet<br />

Svarer til USING eller USING INDEX i XAL<br />

Åbning af sorteringsvindue under afvikling af Rapport QT<br />

Liste<br />

over<br />

felter<br />

Liste<br />

over<br />

indekser<br />

ALT+ H<br />

ALT+H<br />

Kartotek Afgrænsning Fra Til<br />

Debitorkartotek Sortering..:<br />

Filter.....:<br />

Konto......:<br />

Sortering<br />

Felt Retning<br />

Tvunget Index<br />

ENTER<br />

314<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Rapport QT filtrering og sortering<br />

Opgave 1: Filter og sortering efter index i QT til ’Vareudlån’<br />

Formål med opgaven<br />

At anvende filter og sortering i QT’en til rapporten ’Vareudlån’.<br />

Beskrivelse<br />

Der skal indsættes filter i Rapport QT, så kun varer med status Udlånt vises.<br />

Desuden skal linjerne sorteres efter indexet UDLUdlVarIdx, der sorterer efter udlånsnummer og<br />

varenummer.<br />

1 Vælg rapporten ’Vareudlån’ fra forrige opgave.<br />

Forløb √<br />

2 Indsæt et filter så kun varer med status Udlånt medtages i rapporten.<br />

3 Indsæt sortering så varerne sorteres efter udlånsnummer og varenummer. Anvend<br />

indexet UDLUdlVarIdx.<br />

4 Go<strong>dk</strong>end rapporten og afprøv.<br />

315<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgave 2: Sortering efter felt i QT til ’Vareudlån’<br />

Formål med opgaven<br />

At anvende sortering efter et felt i QT’en til rapporten ’Vareudlån’.<br />

Beskrivelse<br />

Der skal arbejdes videre med rapporten fra forrige opgave, idet der her skal sorteres efter et bestemt<br />

felt i stedet for et index.<br />

1 Vælg rapporten ’Vareudlån’ fra forrige opgave.<br />

Forløb √<br />

2 Indsæt en sortering så varerne sorteres alene efter feltet VareNr.<br />

3 Hvis der er filter i QT’en, skal det fjernes, så alle varer medtages.<br />

4 Go<strong>dk</strong>end rapporten og afprøv.<br />

316<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


9. Subtotaler automatiske<br />

Mål med lektionen<br />

At give deltagerne indsigt i anvendelse af automatiske subtotaler i rapporter.<br />

Efter lektionen skal kursisterne kunne:<br />

Opsætter felter til automatiske subtotaler<br />

Anvende automatiske ledetekster foran subtotaler.<br />

Automatiske subtotaler generelt<br />

Automatiske subtotaler dannes uden erklæring af variabler, og sammentælling udføres uden<br />

tildeling af værdier til variabler.<br />

Automatiske subtotaler anvendes både sammen med Rapport-XAL og Rapport-QT.<br />

Procedure for brug af automatiske subtotaler<br />

Ved automatiske subtotaler skal følgende tre trin gennemføres.<br />

Procedure for anvendelse af automatiske totaler<br />

Trin Anvendelse<br />

1 Opsætning af felt Opsætning af det eller de felter der skal dannes subtotal for.<br />

2 Opsætning af<br />

udskrivningsmåde<br />

Om og hvordan totalen skal udskrives.<br />

3 Opsætning af ledetekst Opsætning af hvilken type ledetekst der skal anvendes til<br />

totalen.<br />

De tre trin behandles efterfølgende.<br />

Opsætning af felt<br />

Felter med subtotal sættes op i layoutområdet i Rapport-definition. Feltet åbnes og i menuen Ret felt i<br />

menupunktet Subtotaler indsættes en af summeringsmetoderne fra nedenstående skema.<br />

Metoder til summering<br />

Metode Anvendelse<br />

Sum alle Alle poster summeres.<br />

Sum positive Kun positive poster summeres.<br />

Sum negative Kun negative poster summeres.<br />

Opsætningen foregår som vist i nedenstående figur.<br />

317<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. 2012 -> Opsætning af subtotal på feltet AmountMst<br />

PgHd<br />

PgHd<br />

Body<br />

VendTrans<br />

Konto Dato Bilag SaldoDkr<br />

---------- -------- ---------- -----------<br />

Account Date_ Voucher AmountMst<br />

Efterfølgende vises eksempler på anvendelse af de tre metoder. Eksemplerne har ovenstående<br />

rapportdefinition som udgangspunkt.<br />

Summering udføres på AmountMst-feltet. De efterfølgende rapporter viser resultatet afhængigt af<br />

den valgte metode i feltet.<br />

C5 vers. -> 4.1 Opsætning af subtotal på feltet BeløbDkk<br />

PgHd<br />

PgHd<br />

Body<br />

KrePost<br />

Opsæt subtotal<br />

Konto Dato Bilag SaldoDkr<br />

---------- -------- ---------- -----------<br />

Konto Dato Bilag BeløbDkk<br />

Opsæt subtotal<br />

INSERT<br />

INSERT<br />

Ret felt<br />

...<br />

...<br />

...<br />

Subtotaler<br />

Sum alle<br />

Sum positive<br />

Sum negative<br />

Efterfølgende vises eksempler på anvendelse af de tre metoder. Eksemplerne har ovenstående<br />

rapportdefinition som udgangspunkt.<br />

Summering udføres på BeløbDkk-feltet. De efterfølgende rapporter viser resultatet afhængigt af den<br />

valgte metode i feltet.<br />

318<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012<br />

F6<br />

F6<br />

Ret felt<br />

...<br />

...<br />

...<br />

Subtotaler<br />

Sum alle<br />

Sum positive<br />

Sum negative


Resultat ’Sum Alle’<br />

Konto Dato Bilag Saldo DKK<br />

--------- -------- ---------- -----------<br />

971249987 23/05-97 500016 -222.693,75<br />

971249987 20/10-97 70025 222.693,75<br />

971249987 04/01-98 500025 -26.723,25<br />

971249987 02/03-98 70056 26.723,25<br />

971249987 31/03-98 500050 -93.531,38<br />

-----------<br />

Grandtotal -93.531,38<br />

===========<br />

I dette eksempel dannes der en samlet sum for alle poster både positive og negative.<br />

Ved at anvende Sum positive eller Sum negative, vil selve rapporten ligne ovenstående, idet der kun<br />

udskrives en total i rapporten. Der kan dog godt anvendes flere metoder samtidig, hvilket fremgår af<br />

de to efterfølgende eksempler.<br />

Når der angives mere end en metode på samme felt, vil der blive udskrevet en total for enkelt hver<br />

metode.<br />

Resultat ’Sum positive’ og ’Sum negative’ samtidig<br />

Konto Dato Bilag Saldo DKK<br />

--------- -------- ---------- -----------<br />

971249987 23/05-97 500016 -222.693,75<br />

971249987 20/10-97 70025 222.693,75<br />

971249987 04/01-98 500025 -26.723,25<br />

971249987 02/03-98 70056 26.723,25<br />

971249987 31/03-98 500050 -93.531,38<br />

-----------<br />

Grandtotal 249.417,00<br />

-342.948,38<br />

===========<br />

I dette eksempel dannes der to subtotaler, en for positive og en for negative tal.<br />

I næste eksempel anvendes alle metoder samtidig.<br />

Sum alle<br />

Sum positive<br />

Sum negative<br />

319<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Resultat alle metoder samtidig<br />

Konto Dato Bilag Saldo DKK<br />

--------- -------- ---------- ------------------------<br />

971249987 23/05-97 500016 -222.693,75<br />

971249987 20/10-97 70025 222.693,75<br />

971249987 04/01-98 500025 -26.723,25<br />

971249987 02/03-98 70056 26.723,25<br />

971249987 31/03-98 500050 -93.531,38<br />

------------------------<br />

Grandtotal Sum positive 249.417,00 -93.531,38<br />

Sum alle<br />

Sum negative<br />

-342.948,38<br />

========================<br />

Bemærk at værdien for Sum alle (-93.531,38) i eksemplet udskrives på linjen over værdien for Sum<br />

negative (-342.948,38).<br />

Desuden udskrives beløbs-feltet med negativ forskydning. Dette er nødvendigt, for at kunne se<br />

værdien for Sum alle. Negativ forskydning udføres i opsætningen på feltet i format i menuen Ret felt .<br />

Hvis der ikke anvendes negativ forskydning, eller den negative forskydning ikke er stor nok, vil værdien<br />

for Sum alle blive helt eller delvist overskrevet af værdien for Sum positive.<br />

I alle de ovenstående eksempler udskrives ledeteksten Grandtotal foran totalerne.<br />

Opsætning af udskrivningsmåde<br />

Inden der kan udskrives automatiske totaler på rapporter, skal der også vælges udskrivningsmåde. Det<br />

vil sige, at der skal vælges, om rapporten skal udskrives med eller uden totaler.<br />

Opsætningen foregår i Rapport-definition i billedet Opsætning eller under afviklingen af rapporten i<br />

billedet Udskriftsmuligheder. I begge billeder findes Subtotaler-feltet, der kan åbne for et nyt billede<br />

med kartoteksnavnet som overskrift.<br />

I dette billedet kan der udføres en nærmere definition af rapportens udseende, når der udskrives med<br />

totaler. Billedet indholder følgende felter.<br />

320<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Felter ved udskrivning af totaler<br />

Felter Anvendelse<br />

Udskriv Subtotal Ja eller Nej om subtotalen skal udskrives<br />

Udskriv kun totaler Ja eller Nej om der KUN skal udskrives totaler<br />

Niveau Med et tal angives, hvilket niveau der skal udskrives totaler<br />

for. Niveauet fremgår af valgt index eller egen sortering i<br />

Rapport-XAL eller rapport-QT.<br />

Linjeskift Hvor mange linjeskift der skal være efter totalen<br />

Sideskift efter subtotal Ja eller Nej om der skal skiftes side efter subtotalen<br />

Nulstil efter udskrift Ja eller Nej om totalen skal nulstilles efter udskrift<br />

Skriv total hvis kun een Ja eller Nej om totalen også skal udskrives, hvis der kun er een<br />

total.<br />

Gentag ens totaler Ja eller Nej om totalen skal gentages, hvis samme total har<br />

været udskrevet lige før.<br />

Linje over subtotal Hvordan linjen over subtotalen skal se ud.<br />

Linje under subtotal Hvordan linjen under subtotalen skal se ud.<br />

Linje under grandtotal Hvordan linjen under grandtotalen skal se ud.<br />

Det vigtigste felt er Udskriv subtotal, der skal besvares med Ja eller Nej. Feltet SKAL besvares med Ja<br />

for at udskrive totaler. De øvrige felter påvirker rapportens udseende i større eller mindre grad.<br />

Opsætning af automatisk ledetekst<br />

Teksten i automatiske ledetekster afhænger af, hvilke niveauer der udskrives subtotaler for.<br />

Niveau<br />

Niveauer opstår når der sorteres i rapporter, idet hvert felt der sorteres på svarer til et niveau.<br />

Niveau Felt<br />

0 Intet felt (giver grandtotal)<br />

1 Første felt i sorteringsrækkefølge<br />

2 Andet felt i sorteringsrækkefølge<br />

Osv. Osv.<br />

Sortering<br />

Sortering kan opsættes i:<br />

Rapport-XAL i søgeløkker med kommandoerne USING eller ORDER<br />

Rapport-QT i Sortering-feltet.<br />

321<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Tekst<br />

Der er to opsætninger til automatiske ledetekster<br />

Kopi af linje<br />

Feltnavn værdi.<br />

I begge opsætninger afhænger teksten af, hvilket niveau der udskrives subtotaler for. De automatiske<br />

ledetekster fremgår af nedenstående skema.<br />

Indhold af automatiske ledetekster<br />

Opsætning Niveau 0 (grandtotal) Niveau 1 og op<br />

Kopi af linje Ingen ledetekst<br />

Ved talfelter der ikke summeres<br />

udskrives tallet 0 på samme linje<br />

som totalen.<br />

Feltnavn værdi Udskriver som ledetekst ordet<br />

Grandtotal.<br />

Udskriver som ledetekst den<br />

aktuelle værdi fra Niveau-feltet.<br />

Ved talfelter, der ikke summeres,<br />

udskrives tallet 0 på samme linje<br />

som totalen.<br />

Udskriver som ledetekst Niveaufeltets<br />

navn efterfulgt af den<br />

aktuelle værdi fra feltet.<br />

Ledetekster udskrives når Niveau-felter skifter værdi og subtotalen udskrives.<br />

Opsætning af ledetekst, niveau og om totaler skal udskrives fremgår af nedenstående skema.<br />

322<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opsætning af ledetekst og udskrivningsmåde<br />

Defaultværdier<br />

De værdier, der indsættes under opsætningen, fungerer som default i billedet Udskriftsmuligheder, når<br />

dette vises under afviklingen.<br />

Eksempler<br />

Rapport-definition<br />

CTRL+F6<br />

Subtotal linje.:<br />

Subtotal ......: Vælg<br />

Udskriftsmuligheder<br />

(under afvikling)<br />

Subtotal ......: Vælg<br />

Eksempel med ’Kopi af linje’ og niveau 0<br />

Opsætning<br />

ENTER<br />

ENTER<br />

ALT+H<br />

Konto Dato Bilag SaldoDkr<br />

--------- -------- ---------- -----------<br />

971249987 23/05-97 500016 -222.693,75<br />

971249987 20/10-97 70025 222.693,75<br />

971249987 04/01-98 500025 -26.723,25<br />

971249987 02/03-98 70056 26.723,25<br />

971249987 31/03-98 500050 -93.531,38<br />

-----------<br />

0 -93.531,38<br />

===========<br />

Kopi af linje<br />

Feltnavn værdi<br />

KartoteksNavn<br />

Udskriv subtotal: JA<br />

Niveau .........:<br />

I dette eksempel udskrives totalen uden ledetekst og under søjlen bilag skrives et 0.<br />

323<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Eksempel med ’Feltnavn værdi’ og niveau 0<br />

Konto Dato Bilag Saldo Dkr<br />

--------- -------- ---------- -----------<br />

971249987 23/05-97 500016 -222.693,75<br />

971249987 20/10-97 70025 222.693,75<br />

971249987 04/01-98 500025 -26.723,25<br />

971249987 02/03-98 70056 26.723,25<br />

971249987 31/03-98 500050 -93.531,38<br />

-----------<br />

Grandtotal -93.531,38<br />

===========<br />

I dette eksempel udskrives totalen med ledeteksten Grandtotal, og der er intet 0 under kolonnen Bilag.<br />

Eksempel med ’Kopi al linje’ og niveau 1<br />

Konto Dato Bilag SaldoDkr<br />

---------- -------- ---------- -----------<br />

971249987 23/05-97 500016 –222.693,75<br />

971249987 20/10-97 70025 222.693,75<br />

971249987 04/01-98 500025 -26.723,25<br />

971249987 02/03-98 70056 26.723,25<br />

971249987 31/03-98 500050 -93.531,38<br />

-----------<br />

971249987 0 -93.531,38<br />

-----------<br />

7147274141 30/05-94 500018 –395.160,00<br />

7147274141 20/10-94 70026 395.160,00<br />

7147274141 03/01-95 500049 -17.246,63<br />

7147274141 02/03-95 70008 17.246,63<br />

-----------<br />

7147274141 0 0,00<br />

-----------<br />

0 -93.531,38<br />

===========<br />

324<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Eksempel med ’Feltnavn værdi’ og niveau 1<br />

Konto Dato Bilag SaldoDkr<br />

---------- -------- ---------- -----------<br />

971249987 23/05-97 500016 –222.693,75<br />

971249987 20/10-97 70025 222.693,75<br />

971249987 04/01-98 500025 -26.723,25<br />

971249987 02/03-98 70056 26.723,25<br />

971249987 31/03-98 500050 -93.531,38<br />

-----------<br />

Konto: 971249987 -93.531,38<br />

-----------<br />

7147274141 30/05-94 500018 –395.160,00<br />

7147274141 20/10-94 70026 395.160,00<br />

7147274141 03/01-95 500049 -17.246,63<br />

7147274141 02/03-95 70008 17.246,63<br />

-----------<br />

Konto: 7147274141 0,00<br />

-----------<br />

Grandtotal -93.531,38<br />

===========<br />

325<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Subtotaler automatiske<br />

Opgave 1: Automatiske subtotaler i ’Vareudlån’<br />

Formål med opgaven<br />

At udføre automatisk sammentælling af feltet med kostprisen i rapporten ’Vareudlån’. Subtotalerne<br />

skal desuden udskrives i forskellige niveauer.<br />

Beskrivelse<br />

Der skal arbejdes videre med rapporten ’Vareudlån’ fra forrige opgave.<br />

I rapporten skal der foretages en automatisk summering af værdierne i feltet med kostprisen.<br />

Da der altid kun er én vare pr. udlånslinje, er subtotalerne et udmærket udtryk for den samlede kostpris<br />

for de udlånte varer.<br />

1 Vælg rapporten ’Vareudlån’ fra forrige opgave.<br />

2 Kontroller at rapporten sorteres alene efter feltet VareNr.<br />

Forløb √<br />

3 Opsæt feltet med kostprisen således at alle værdier summeres automatisk.<br />

4 Vælg opsætning af rapporten og sæt feltet Udskriv total til JA<br />

Sæt feltet Subtotal linje med den automatiske ledetekst til værdien ’Feltnavn<br />

værdi’.<br />

5 Go<strong>dk</strong>end rapporten og afprøv.<br />

6 Vælg opsætning af rapporten og sæt niveau til 1.<br />

7 Go<strong>dk</strong>end rapporten og afprøv en gang til.<br />

326<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


10. Rapport QT triggere grundlæggende<br />

Mål med lektionen<br />

Formålet med denne lektion er at give kursisterne overblik over triggerne i Rapport QT. Med et<br />

eksempel afprøves triggerne Init, Pre-body og Post-search.<br />

Efter lektionen skal kursisterne kunne:<br />

Anvende triggerne Init, Pre-body og Post-search<br />

Og kende til:<br />

Hvor de forskellige triggere befinder sig.<br />

Generelt<br />

Triggere i Rapport QT er editorbokse, hvori der kan indtastes XAL kode til yderligere styring af en<br />

Rapport QT.<br />

Triggerne afvikles på forskellige tidspunkter under afviklingen af Rapport QT’en.<br />

Næste afsnit giver et overblik over, hvor triggerne befinder sig i Rapport QT.<br />

Triggere<br />

Oversigt over triggernes placering<br />

Der findes triggere to forskellige steder i Rapport QT.<br />

Trigger placering<br />

I afgrænsningsvinduet<br />

I opsætning af afgrænsningsvinduet<br />

327<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Triggernes placering i Rapport QT<br />

(Opsætning)<br />

Globale formler: Formler<br />

Kørsler....:<br />

CTRL+F6<br />

(Afgrænsningsvindue)<br />

Kørsler<br />

Globale triggere i opsætning<br />

ENTER<br />

ENTER<br />

Liste<br />

over<br />

triggere<br />

i<br />

kartoteket<br />

ENTER<br />

Liste<br />

over<br />

globale<br />

triggere<br />

ENTER<br />

Trigger<br />

Trigger<br />

Triggerne der findes i Opsætning af Afgrænsningsvinduet, kaldes også globale triggere, idet de gælder<br />

for hele Rapport QT’en med alle kartoteker.<br />

328<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Globale triggere<br />

Trigger Anvendelse<br />

Init Start af QT. Macroload af biblioteker. Eneste trigger til erklæring af<br />

globale variabler.<br />

Prompt Ekstra promptbokse indsættes her. Triggeren overspringes ved en<br />

batchkørsel.<br />

Start Startes umiddelbart efter prompt triggeren inden afviklingen af selve<br />

kørslen.<br />

Break Ved ’Control Break’ kommandoen. Stop og Exit overspringes.<br />

Stop Ved kørsels stop efter fuldendt afvikling.<br />

Error Ved fejl i Control afviklingen.<br />

Abort Ved brug af ALT+Q i Afgrænsningsvinduet inden kørslen startes.<br />

Exit Ved brug af F3 for at go<strong>dk</strong>ende og forlade rapporten efter succesfuld<br />

afvikling.<br />

Bemærk! Init triggeren er den eneste, hvori der kan erklæres variabler til fælles brug for alle andre<br />

triggere.<br />

Der kan udmærket erklæres variabler i de øvrige triggere, men disse variabler bliver lokale, i forhold til<br />

den trigger de erklæres i. De kan kun anvendes i den ene trigger.<br />

Kartotekstriggere<br />

Kartotekstriggere er triggere der findes på hver enkelt kartotek, der indsættes i en Rapport QT.<br />

Disse triggere gælder således kun, for det kartotek de tilhører. Se i oversigten hvordan de findes.<br />

329<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Trigger Anvendelse<br />

Pre-search Igangsættes umiddelbart før et gennemløb af pågældende kartotek.<br />

Pre-body Igangsættes for hver post i gennemløbet af det pågældende kartotek,<br />

umiddelbart efter udvælgelsen af posten.<br />

Pre-output Igangsættes for hver udvalgt post, umiddelbart før posten sendes til<br />

output i Rapport Definition.<br />

Post-output Igangsættes for hver udvalgt post, der sendes til output, umiddelbart efter<br />

at den er blevet sendt.<br />

Pre-join Igangsættes for hver udvalgt post umiddelbart før et eller flere<br />

underkartoteker gennemløbes.<br />

Post-join Igangsættes for hver udvalgt post, der forårsagede et gennemløb af et<br />

underkartotek, efter gennemløbet.<br />

Index-break Anvendes ved sortering efter index eller felter. Igangsættes for den sidste<br />

post, hver gang indexet brydes, lige inden der startes på nye poster i<br />

index.<br />

Post-body Igangsættes for hver udvalgt post i gennemløbet, umiddelbart før<br />

udvælgelsen af den næste post.<br />

Post-search Igangsættes umiddelbart efter gennemløb af pågældende kartotek.<br />

330<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Rækkefølge på triggere<br />

Rækkefølge på triggere ved ét kartotek<br />

Globale Hove<strong>dk</strong>artotek SEARCH løkke<br />

Init<br />

(Afgrænsningsvindue vises)<br />

Prompt<br />

(Udskriftsmuligheder vises)<br />

Start Pre-search<br />

Pre-body<br />

Pre-output<br />

SEARCH<br />

(Danner side x, linje y) OUTPUT<br />

Post-output<br />

Index-break<br />

Post-body<br />

Stop Post-Search<br />

(Udskrift printes / vises)<br />

Exit<br />

Break<br />

Error<br />

Abort<br />

END<br />

331<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Rækkefølge på triggere ved flere kartoteker<br />

Globale Hove<strong>dk</strong>artotek Underkartotek<br />

Init<br />

(Afgrænsningsvindue vises)<br />

Prompt<br />

(Udskriftsmuligheder vises)<br />

Start Pre-search<br />

Pre-body<br />

Pre-output<br />

(Danner side x, linje y)<br />

Post-output<br />

Pre-join Pre-Search<br />

Pre-body<br />

Pre-output<br />

Post-output<br />

Pre-join<br />

Post-join<br />

Index-break<br />

Post-body<br />

Post-join Post-search<br />

Index-break<br />

Post-body<br />

Stop Post-Search<br />

(Udskrift printes / vises)<br />

Exit<br />

Break<br />

Error<br />

Abort<br />

332<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Eksempel på anvendelse<br />

Herunder dannes en rapport med en manuel total. Dette kræver erklæring af en variabel, tildeling af<br />

værdier til variablen og udskrivning af den samlede sum.<br />

Eksemplet vises i en matrix for at sammenligne Rapport QT med Rapport XAL.<br />

C5 vers. 2012 -> Triggere anvendt til manuel total<br />

Triggere Kode i triggere Kode i Rapport XAL<br />

Init<br />

(Afgrænsningsvindue vises)<br />

Prompt<br />

(Udskriftsmuligheder vises)<br />

Start<br />

Pre-search<br />

#MacroLoad(REPORTS)<br />

REAL &Sum<br />

#MacroLoad(REPORTS)<br />

REAL &Sum<br />

SEARCH CustTable<br />

Pre-body #Add(&Sum,BalanceMst) #Add(&Sum,BalanceMst)<br />

Pre-output<br />

(Danner side x, linje y) OUTPUT CustTable<br />

Post-output<br />

Index-break<br />

Post-body<br />

END<br />

Post-Search #Rep_Execute(1) #Rep_Execute(1)<br />

Stop<br />

(Udskrift printes / vises)<br />

Exit<br />

I eksemplet forudsættes det at totalen udskrives i Control linje nummer 1.<br />

Rapport Definition med Control linje til udskrivning af variabel<br />

Body<br />

Ctrl<br />

Ctrl<br />

Ctrl<br />

CustTable<br />

1<br />

1<br />

1<br />

Account<br />

Name<br />

Debitorer i alt:<br />

BalanceMst<br />

&Sum<br />

333<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. -> 4.1 Triggere anvendt til manuel total<br />

Triggere Kode i triggere Kode i Rapport XAL<br />

Init<br />

(Afgrænsningsvindue vises)<br />

Prompt<br />

(Udskriftsmuligheder vises)<br />

Start<br />

Pre-search<br />

#MacroLoad(REPORTS)<br />

REAL &Sum<br />

#MacroLoad(REPORTS)<br />

REAL &Sum<br />

SEARCH DebKart<br />

Pre-body #Add(&Sum,SaldoDkk) #Add(&Sum,SaldoDkk)<br />

Pre-output<br />

(Danner side x, linje y) OUTPUT DebKart<br />

Post-output<br />

Index-break<br />

Post-body<br />

END<br />

Post-Search #Rep_Execute(1) #Rep_Execute(1)<br />

Stop<br />

(Udskrift printes / vises)<br />

Exit<br />

I eksemplet forudsættes det at totalen udskrives i Control linje nummer 1.<br />

Rapport Definition med Control linje til udskrivning af variabel<br />

Body<br />

Ctrl<br />

Ctrl<br />

Ctrl<br />

DebKart<br />

1<br />

1<br />

1<br />

Konto<br />

Navn<br />

Debitorer i alt:<br />

SaldoDkk<br />

&Sum<br />

334<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Rapport QT Triggere, grundlæggende<br />

Opgave 1: Triggere i Rapport QT til ’Vareudlån’<br />

Formål med opgaven<br />

At anvende nogle af triggerne i Rapport QT til rapporten ’Vareudlån’. Triggerne anvendes til erklæring<br />

af variabler, sammentælling i variabler og udskrivning af Control linjer.<br />

Beskrivelse<br />

Der skal arbejdes videre med rapporten ’Vareudlån’ fra forrige opgave.<br />

Rapporten skal ændres til en manuel optælling af kostprisen, så der gives en samlet kostpris for alle<br />

udlån, der præsenteres på rapporten.<br />

Kostpriserne skal sammentælles i en variabel, der oprettes til formålet i triggeren Init.<br />

Sammentællingen udføres i triggeren Pre-body og udskrivning udføres i triggeren Post-search.<br />

1 Vælg rapporten ’Vareudlån’ fra forrige opgave.<br />

Forløb √<br />

2 Hvis der i forvejen er indsat automatisk subtotal i feltet med kostprisen, skal du<br />

fjerne automatikken.<br />

3 I Rapport QT skal der i INIT triggeren, erklæres en variabel med navnet &Sum.<br />

Indsæt også en macroload af biblioteket REPORTS.<br />

4 Indsæt i Pre-body triggeren macroen #Add til opsummering i variablen &Sum.<br />

Kostprisen (CostPrice) hentes med direkte opslag i lagerkartoteket (InvenTable).<br />

5 I triggeren Post-search aktiveres den eller de Control linjer, du opretter eller har<br />

oprettet til udskrivning af resultatet af optællingen.<br />

Anvend macroen #Rep_Execute.<br />

6 I Rapport definition skal du indsætte Control linjer til udskrivning af resultatet.<br />

Vælg selv et eller flere numre til linjerne.<br />

7 Go<strong>dk</strong>end og afprøv rapporten.<br />

335<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


11. Rapport QT med flere kartoteker<br />

Mål med lektionen<br />

At give deltagerne kendskab til opbygning af Rapport QT med flere kartoteker.<br />

Efter lektionen skal kursisterne kunne:<br />

Opbygge Rapport-QT med flere enkeltstående kartoteker<br />

Opbygge Rapport-QT flere relaterede kartoteker.<br />

Generelt<br />

Rapport QT kan opbygges med flere kartoteker, på samme måde som der i XAL-kørsler kan anvendes<br />

flere SEARCH løkker.<br />

Når der anvendes mere end ét kartotek i Rapport-QT, kan dette udføres på to måder. Det er vigtigt at<br />

kende forskel på de to metoder, da det i starten kan være svært at se forskel på dem.<br />

Metoder med flere kartoteker<br />

Metode Betydning<br />

Enkeltstående kartoteker Kartotekerne afvikles ét ad gangen efter hinanden.<br />

Relaterede kartoteker Hver gang en post hentes i hove<strong>dk</strong>artoteket, er der mulighed for<br />

at hente tilhørende poster i underkartoteket.<br />

Flere kartoteker<br />

Enkeltstående kartoteker<br />

Ved enkeltstående kartoteker afvikles disse et ad gangen, i den rækkefølge de forekommer i Rapport-<br />

QT’en. Hver gang ét kartotek er færdigt, startes på det næste.<br />

Herunder vises eksempler på anvendelsen af enkeltstående kartoteker først i en Rapport XAL og<br />

derefter i en Rapport QT.<br />

C5 vers. 2012 -> Eksempel på enkeltstående kartoteker i Rapport-XAL<br />

SEARCH InvenItemGroup<br />

OUTPUT InvenItemGroup<br />

END<br />

SEARCH InvenTable<br />

OUTPUT InvenTable<br />

END<br />

Body<br />

Body<br />

InvenItemG<br />

InvenTable<br />

Group GroupName<br />

ItemNumber ItemName1<br />

Group<br />

C5 vers. -> 4.1 Eksempel på enkeltstående kartoteker i Rapport-XAL<br />

336<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


SEARCH LagGruppe<br />

OUTPUT LagGruppe<br />

END<br />

SEARCH LagKart<br />

OUTPUT LagKart<br />

END<br />

Body<br />

Body<br />

LagGruppe<br />

LagKart<br />

Eksempel på enkeltstående kartoteker i Rapport-QT<br />

Kartotek Afgrænsning Fra Til Status<br />

Varegruppekarto Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Kørsler<br />

Skjul<br />

Varekartotek Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Kørsler<br />

Skjul<br />

I begge eksempler er det samme opstilling af kartoteker og felter i definitionsområdet. Derfor er dette<br />

ikke vist i forbindelse med Rapport-QT’en.<br />

Begge eksempler vil derfor også kunne resultere i en udskrift som vist i næste figur.<br />

I figuren vises først posterne fra kartotek nummer et, der i eksemplet er varegrupperne fra<br />

varegruppekartoteket. Efter varegrupperne kommer alle varerne fra kartotek nummer to<br />

varekartoteket.<br />

Resultat der er ens for begge ovenstående eksempler<br />

10 Harddiske<br />

20 Skærme<br />

30 Kabinetter<br />

40 Ram<br />

12000 Harddisk type 2 10<br />

14000 Skærm 14” 20<br />

16000 Ram 8 MB 40<br />

16004 Ram 16 MB 40<br />

17006 Harddisk type 5 10<br />

18000 Kabinet 30<br />

20000 Skærm 17” 20<br />

Gruppe GruppeNavn<br />

VareNummer VareNavn1<br />

Gruppe<br />

Der henvises til huskelisterne, idet der gøres opmærksom på, at der er forskel på om der i Rapport-QT<br />

oprettes enkeltstående kartoteker, eller om der oprettes relaterede kartoteker.<br />

337<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Relaterede kartoteker<br />

Ved relaterede kartoteker oprettes der i Rapport-QT først et hove<strong>dk</strong>artotek og derefter et eller flere<br />

underkartoteker. I en Rapport-XAL svarer dette til en ydre og en indre søgeløkke.<br />

Ved afvikling af Rapport-XAL eller Rapport-QT med relaterede kartoteker, findes posterne, i den<br />

yderste søgeløkke (hove<strong>dk</strong>artoteket), frem en ad gangen.<br />

Hver gang en post findes, udføres der en gennemsøgning af samtlige poster i den inderste søgeløkke<br />

(underkartoteket).<br />

Da samtlige poster gennemsøges i den inderste søgeløkke (underkartoteket), er det vigtigt at relatere<br />

de to søgeløkker (kartoteker) med hinanden, således at der under gennemsøgningen af den inderste<br />

søgeløkke kun hentes poster, der kan relateres til den aktuelle post i den yderste søgeløkke<br />

(hove<strong>dk</strong>artoteket).<br />

Relatering meller hoved- og underkartotek<br />

Relatering i Rapport-XAL foregår ved anvendelse af kommandoen WHERE. Kommandoen anvendes<br />

ved at opstille en betingelse, der skal opfyldes, for at en post medtages fra underkartoteket.<br />

Det er vigtigt at bemærke, at relateringen finder sted i den inderste søgeløkke (underkartoteket). Det<br />

er altså underkartoteket, der skal relateres med hove<strong>dk</strong>artoteket, og ikke omvendt.<br />

Syntaksen for anvendelsen af WHERE er her følgende:<br />

Syntaks til WHERE<br />

WHERE == <br />

Herunder vises der eksempler på anvendelsen af flere afhængige kartoteker først i Rapport-XAL og<br />

derefter i Rapport-QT.<br />

C5 vers. 2012 -> Eksempel på relaterede kartoteker Rapport-XAL<br />

SEARCH InvenItemGroup<br />

OUTPUT InvenItemGroup<br />

SEARCH InvenTable<br />

WHERE InvenTable.Group == InvenItemGroup.Group<br />

OUTPUT InvenTable<br />

END<br />

END<br />

Body<br />

Body<br />

InvenItemG<br />

InvenTable<br />

Group GroupName<br />

ItemNumber ItemName1<br />

Group<br />

338<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. -> 4.1 Eksempel på relaterede kartoteker Rapport-XAL<br />

SEARCH LagGruppe<br />

OUTPUT LagGruppe<br />

SEARCH LagKart<br />

WHERE LagKart.Gruppe == LagGruppe.Gruppe<br />

OUTPUT LagKart<br />

END<br />

END<br />

Body<br />

Body<br />

LagGruppe<br />

LagKart<br />

Eksempler på relaterede kartoteker i Rapport-QT<br />

Kartotek Afgrænsning Fra Til Status<br />

Varegruppekartotek Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Kørsler<br />

Skjul<br />

Varekartotek Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Kørsler<br />

Skjul<br />

I begge eksempler er det samme opstilling af kartoteker og felter i definitionsområdet. Derfor er dette<br />

ikke vist i forbindelse med Rapport-QT.<br />

Begge eksempler vil derfor også kunne resultere i en udskrift som vist i næste figur.<br />

I figuren ses det, hvordan der først trækkes én post ud af hove<strong>dk</strong>artoteket varegruppekartoteket og<br />

derefter de tilhørende poster i underkartoteket varekartoteket.<br />

Det kan ses, at relateringen virker, idet der for hver post i hove<strong>dk</strong>artoteket kun vises de tilhørende<br />

relaterede poster fra underkartoteket.<br />

Resultat til begge ovenstående eksempler<br />

10 Harddiske<br />

12000 Harddisk type 2 10<br />

17006 Harddisk type 5 10<br />

20 Skærme<br />

20000 Skærm 17” 20<br />

14000 Skærm 14” 20<br />

30 Kabinetter<br />

18000 Kabinet 30<br />

41 Ram<br />

16000 Ram 8 MB 40<br />

14000 Ram 16 MB 40<br />

Relation i Rapport-QT<br />

Gruppe GruppeNavn<br />

VareNummer VareNavn1<br />

Gruppe<br />

339<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Når to kartoteker relateres i en RAPPORT-QT, ses dette i form af en streg, der trækkes fra<br />

underkartoteket op til hove<strong>dk</strong>artoteket, som det ses i figuren herunder.<br />

Eksempel på Rapport QT med relaterede kartoteker<br />

Kartotek Afgrænsning Fra Til Status<br />

Varegruppekartotek Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Kørsler<br />

Skjul<br />

Varekartotek Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Kørsler<br />

Skjul<br />

Stregen viser kun, at de to kartoteker er relaterede. Den er ikke bevis på, om relationen er udført<br />

korrekt.<br />

Korrekt opstilling af relation<br />

Når to XAL-søgeløkker opstilles inden i hinanden, anvendes kommandoen WHERE til at relatere den<br />

inderste søgeløkke med den yderste, som vist herunder.<br />

C5 vers. 2012 -> Eksempel på relaterede søgeløkker<br />

SEARCH InvenItemgroup<br />

OUTPUT InvenItemGroup<br />

SEARCH InvenTable<br />

WHERE InvenTable.Group == InvenItemGroup.Group<br />

OUTPUT InvenTable<br />

END<br />

END<br />

C5 vers. -> 4.1 Eksempel på relaterede søgeløkker<br />

SEARCH LagGruppe<br />

OUTPUT LagGruppe<br />

SEARCH LagKart<br />

WHERE LagKart.Gruppe == LagGruppe.Gruppe<br />

OUTPUT LagKart<br />

END<br />

END<br />

I en Rapport-QT foregår dette ved at angive felterne, der svarer til WHERE i Relationsvinduet, i<br />

underkartoteket i Rapport-QT’en som vist i figuren på næste side:<br />

340<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


C5 vers. 2012 -> Relationsvindue til underkartoteket<br />

Relater<br />

Output<br />

Tilføj<br />

InvenItemGroup InvenTable<br />

Felt Felt<br />

123456789012345<br />

Group Group<br />

C5 vers. -> 4.1 Relationsvindue til underkartoteket<br />

Relater<br />

Output<br />

Tilføj<br />

Altid Før join<br />

Alle felter<br />

LagGruppe LagKart<br />

Felt Felt<br />

123456789012345<br />

Gruppe Gruppe<br />

Altid Før join<br />

Alle felter<br />

Bemærk, at det i Rapport-XAL eksemplet er i den inderste søgeløkke, at WHERE kommandoen befinder<br />

sig. Det er i den inderste søgeløkke, at relationen findes.<br />

Dette gælder også for eksemplet med Rapport-QT’en. Her er det også i underkartoteket, at relationen<br />

opstilles. I eksemplet er det i LagerKart, idet dette kartotek relateres til varegrupperne, efterhånden<br />

som disse søges ud i Rapport-QT’en.<br />

I de to søjler i relationsvinduet ses de to kartoteker med de relaterede felter.<br />

Det vigtigste i relationen er de to felter, der indsættes.<br />

Det er ikke så meget felternes navne, det kommer an på, men derimod deres indhold.<br />

Det drejer sig således om at angive felter, hvis indhold kan relateres til hinanden.<br />

Der kan i øvrigt godt indsættes flere relaterede felter, hvis det ønskes, de skal blot relatere til hinanden<br />

parvist.<br />

Stregen der trækkes mellem to kartoteker i afgrænsningsvinduet, opstår så snart to kartoteker er indsat<br />

i relationstabellen, også uden at der er indsat relationsfelter.<br />

Stregen er ikke bevis på at relationen er sat korrekt op, kun at der er en relation.<br />

341<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Hvis feltrelationerne ikke indsættes, bliver resultatet, at der for hver post i hove<strong>dk</strong>artoteket udskrives<br />

samtlige poster i underkartoteket. Det vil sige også posterne for de andre poster i hove<strong>dk</strong>artoteket.<br />

Efterfølgende eksempel passer til ovenstående Relationsvindue.<br />

C5 vers. 2012 -> Eksempel på relaterede kartoteker<br />

Kartotek Afgrænsning Fra Til Status<br />

InvenItemGroup Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Kørsler<br />

Skjul<br />

Body<br />

Body<br />

GrFt<br />

InvenTable Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Kørsler<br />

Skjul<br />

InvenItemG<br />

InvenTable<br />

*<br />

C5 vers. -> 4.1 Eksempel på relaterede kartoteker<br />

Kartotek Afgrænsning Fra Til Status<br />

LagGruppe Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Kørsler<br />

Skjul<br />

Body<br />

Body<br />

GrFt<br />

LagKart Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Kørsler<br />

Skjul<br />

LagGruppe<br />

LagKart<br />

*<br />

I denne opsætning af definitionsområdet angives der én Group Footer linje med en * i<br />

kartotekskolonnen. Hver gang der afsluttes med udskrivning fra et af kartotekerne, udskrives denne<br />

Group Footer derfor. Definitionen kan f.eks. give følgende resultat:<br />

Resultat<br />

Group GroupName<br />

ItemNumber ItemName1<br />

Group<br />

Gruppe GruppeNavn<br />

VareNummer VareNavn1<br />

Gruppe<br />

342<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


10 Harddiske<br />

12000 Harddisk type 2 10<br />

17006 Harddisk type 5 10<br />

20 Skærme<br />

20000 Skærm 17” 20<br />

14000 Skærm 14” 20<br />

30 Kabinetter<br />

18000 Kabinetter 30<br />

40 Ram<br />

16000 Ram 8 MB 40<br />

14000 Ram 16 MB 40<br />

I stedet for Group Footeren med * i kartotekskolonnen, kunne der indsættes en Group Footer linje til<br />

hvert kartotek med angivelse af kartotek i kartotekskolonnen.<br />

343<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgaver: Rapport QT med flere kartoteker<br />

Opgave 1: Ordreliste<br />

Formål med opgaven<br />

At oprette en rapport med navnet ’Ordreliste’. Rapporten skal indeholde data fra begge<br />

udlånskartoteker på en gang.<br />

Beskrivelse<br />

Der skal oprettes en rapport, der både henter data i UDLUdlånsKart og UDLUdlånsPost. Rapporten skal<br />

fungere som en ’ordreliste’ med samtlige informationer om hver enkelt udlånsordre.<br />

1 Opret en ny rapport med navnet ’Ordreliste’.<br />

Forløb √<br />

2 Indsæt en Rapport QT med kartotekerne UDLUdlånsKart og UDLUdlånsPost.<br />

Husk at opsætte relationer mellem kartotekerne.<br />

3 Indsæt Page header linjer med macroerne #Company og #ReportDatePage.<br />

Tegn en streg under felterne.<br />

4 Indsæt Bodylinjer på UDLUdlånsKart med nedenstående felter. Felterne skal stå<br />

under hinanden på hver sin linje.<br />

UdlånsNr, DebitorKto, UdlånsDato, ReturDato, UdlånsType og ForsikringsSum.<br />

Foran hvert enkelt felt skal der indsættes ledetekstfelter fra kartoteket. Felterne<br />

skal være 15 tegn, venstrestillede og udskrives med store bogstaver.<br />

Bag ved feltet DebitorKto skal der indsættes et felt, der med et direkte opslag<br />

henter debitorens navn i kartoteket CustTable.<br />

5 Indsæt en Bodylinje fra UDLUdlånsPost med felterne:<br />

VareNr, VareNavn, SerieNr og Status<br />

Indsæt overskrifter til disse felter i de nederste Body linjer til UDLUdlånsKart, og<br />

tegn en streg under overskrifterne.<br />

6 Indsæt en Control linje der kun indeholder et sideskift.<br />

Aktiver denne linje i QT’en i triggeren Post-join i UDLUdlånsKart, så får du<br />

sideskift, hver gang der skiftes til en ny ordre.<br />

7 Go<strong>dk</strong>end rapporten og afprøv.<br />

344<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Opgave 2: Ordreliste med prolog (ekstra opgave)<br />

Formål med opgaven<br />

At indsætte en prolog i rapporten ’Ordreliste’.<br />

Beskrivelse<br />

Der skal indsættes en prolog i rapporten ’Ordreliste’, der blev oprettet i forrige opgave.<br />

Prologen skal indeholde forskellige informationer om rapporten. Informationerne fremgår af forløbet.<br />

1 Fortsæt i rapporten ’Ordreliste’ fra forrige opgave.<br />

2 Opret 13 linjer af typen Prolog.<br />

3 Indsæt følgende tekster og felter i Prolog linjerne:<br />

Blank linje<br />

Teksten ”Firma: ” + felt med firmanavn<br />

Teksten ”Rapport: ” + felt med rapports navn<br />

Teksten ”Udskrevet af: ” + felt med brugernavn<br />

Teksten ”Dato: ” + felt med dags dato<br />

Forløb √<br />

Teksten ”Klokkeslet: ” + felt med aktuel tid for rapporten<br />

Blank linje<br />

Teksten ”Anvendelse: Anvendes til kontrol af status på”<br />

Teksten ” udlånsordrer og udlånslinjer.”<br />

Blank linje<br />

Teksten ”Sortering: Pr. debitor pr. udlånsordre”<br />

Blank linje<br />

Linje med sideskift.<br />

4 Tegn en kasse med dobbeltstreg hele vejen rundt om teksterne og felterne.<br />

Øverste linje i kassen skal være på den første blanke linje og den nederste skal<br />

være i linje tolv.<br />

5 Go<strong>dk</strong>end og afprøv rapporten.<br />

345<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


12. Huskelister Rapporter<br />

Oprette rapport<br />

Funktion Fremgangsmåde Tast<br />

Oprette Generelt/Tilpasning/Udviklingsmenu/REP/Opret<br />

Når rapportgeneratoren starter op, står du automatisk i<br />

definitionsområdet.<br />

Navngive Giv rapporten et navn, gerne sigende F10/RAPPORT/<br />

GEM<br />

Du kan nu vælge mellem faserne:<br />

Oprette rapportlinjer<br />

Oprette søge-XAL<br />

Oprette QT<br />

Når du er færdig med en af faserne, kan du vende tilbage<br />

hertil og vælge en anden fase eller<br />

Go<strong>dk</strong>ende Go<strong>dk</strong>ende hele rapporten F3<br />

Oprette rapportlinjer (Kolonnerne)<br />

Funktion Fremgangsmåde Tast<br />

Definitionsområdet<br />

De tre første kolonner i rapportlinjerne kaldes<br />

definitionsområdet, den sidste er layoutområdet.<br />

Linjetype Vælg linjetype (se bilag ’Linjetyper’) ENTER<br />

Kartotek Vælg kartotek i kartotekskolonnen, hvis den valgte<br />

linjetype kræver det (Se bilag ’Kartoteker’)<br />

ENTER<br />

Linje-XAL Du kan åbne editorboksen og indtaste XAL-kode ENTER<br />

Layoutområde<br />

Go<strong>dk</strong>end indtastningen i linje-XAL F3<br />

Opbygning af rapportens layout (udseende).<br />

Her indsættes fritekst, streger og kasser, ledetekstfelter,<br />

samt felter med forskelligt indhold.<br />

Oprette rapportlinjer med fritekst<br />

Funktion Fremgangsmåde Tast<br />

Indtaste tekst<br />

Du kan uden videre indtaste klar tekst overalt i<br />

layoutområdet.<br />

346<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Oprette rapportlinjer med streger og kasser<br />

Funktion Fremgangsmåde Tast<br />

Tegne streger<br />

og kasser<br />

Du kan frit tegne kasser og linjer i layoutområdet.<br />

Funktionen startes med<br />

Den valgte stregtype i følge pilene<br />

Skift mellem stregtyperne: enkelt streg, dobbelt streg eller<br />

udviske streg<br />

ALT+T<br />

Alle pile<br />

ALT+T<br />

Afslut kasse/linje ENTER<br />

Oprette rapportlinjer med forskellige felter<br />

Funktion Fremgangsmåde Tast<br />

Oprette felt Opret felt F2<br />

Vælg Feltudtryk i menuen Opret felt og editorboksen<br />

’Feltformel’ åbnes.<br />

Det du indtaster i editorboksen, bestemmer hvilken type<br />

felt du opretter:<br />

Kartoteksfelt Hent kartoteksfelt SHIFT+F8<br />

Vælg kartotek ENTER<br />

Vælg felt ENTER<br />

Variabelfelt Indtast variablens navn som &Variabelnavn<br />

Tekstfelt Indtast tekst i “” citationstegn<br />

Macrofelt Indtast macronavn som #Macronavn<br />

Direkte opslag Tast direkte opslag som Kartotek[Index,Nøgler].Felt<br />

Go<strong>dk</strong>end Go<strong>dk</strong>end editorboksen F3<br />

Go<strong>dk</strong>end<br />

feltmenu<br />

Rapport – afprøve (køre)<br />

Go<strong>dk</strong>end menuen for at vende tilbage til layoutområdet. F3<br />

Funktion Fremgangsmåde Tast<br />

Generelt/Tilpasning/Udviklingsmenu/REP/Kør<br />

Vælge rapport Vælg rapport fra plukkeliste og kør<br />

eller<br />

Genvejstast Du kan også afvikle rapporten under oprettelsen<br />

ENTER<br />

ALT+R<br />

347<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Rapport QT – Oprette første kartotek<br />

Funktion Fremgangsmåde Tast<br />

Oprette Du starter med et tomt ’startskærmbillede’, hvori der skal<br />

indsættes et kartotek med forskellige oplysninger.<br />

Åbne relationsvindue<br />

Denne fase gælder kun for det første kartotek i QT’en.<br />

Ved yderligere kartoteker se huskelisten Rapport QT –<br />

Oprette flere kartoteker.<br />

Åbne relationsvindue hvor du i feltet i øverste højre<br />

hjørne skal indsætte kartoteksnavnet.<br />

ALT+F6<br />

SHIFT+F2<br />

Indsæt kartotek Indsæt kartotek fra plukkeliste ALT+H<br />

Spring de øvrige felter over.<br />

Go<strong>dk</strong>ende Go<strong>dk</strong>end relationsvinduet F3<br />

Du er nu tilbage i startskærmbilledet, hvor dit kartotek nu<br />

kan ses i venstre side.<br />

348<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Rapport QT – Oprette flere kartoteker<br />

Funktion Fremgangsmåde Tast<br />

Tilføje flere<br />

kartoteker<br />

Tilføjelse af flere kartoteker foregår i startskærmbilledet.<br />

Flyt cursoren Flyt cursoren over i kartotekskolonnen i venstre side. Pil<br />

Gå til tomt<br />

kartoteksfelt<br />

Vælg et tomt kartoteksfelt Pil ned<br />

Tilføj kartotek Tilføj kartotek SHIFT+F2<br />

Indsæt kartotek<br />

(Navn)<br />

Indsæt kartotek<br />

(Relation)<br />

Du ser nu relationsvinduet til indtastning af de kartoteker<br />

der skal relateres til hinanden.<br />

I øverste venstre hjørne indsættes det bestående kartotek.<br />

Indsæt kartotek<br />

I plukkelisten ser du kun de kartoteker, der er oprettet i<br />

QT’en i forvejen.<br />

I øverste højre hjørne indtastes navnet på det nye<br />

kartotek, der skal relateres til det bestående kartotek.<br />

ALT+H<br />

Indsæt kartotek fra plukkelisten ALT+H<br />

I kolonnerne felt, under de to kartoteker, skal du indtaste<br />

de felter der relaterer til hinanden i kartotekerne f.eks. har<br />

kartotekerne Debitorkartotek og Debitorposter feltet<br />

KontoNummer som fælles relation.<br />

Indsæt felter Indsæt felter fra plukkelisten i begge kolonner.<br />

Gentag hvis der er flere felter der skal relateres.<br />

Spring resten af felterne over.<br />

Go<strong>dk</strong>end Go<strong>dk</strong>end F3<br />

Alt H<br />

349<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Rapport QT – Sortere<br />

Funktion Fremgangsmåde Tast<br />

Sortere Vælg feltet Sortering<br />

Åbne<br />

dialogboksen<br />

Åbne dialogboksen Sortering<br />

Du kan nu:<br />

Vælge felt Vælge felt der skal sorteres efter<br />

eller<br />

ENTER<br />

ALT+H<br />

Vælge index Vælge index der skal sorteres efter ALT+H<br />

Vælge retning Du kan også bestemme retning, som posterne skal<br />

sorteres i.<br />

Vælg mellem stigende (blank) eller faldende ALT+H<br />

Go<strong>dk</strong>end Go<strong>dk</strong>end sorteringsboksen F3<br />

Rapport QT – Filtrere<br />

Funktion Fremgangsmåde Tast<br />

Filtrere Vælg feltet Filter<br />

Åbne<br />

editorboxen<br />

Åbne editorboxen Build-filter ENTER<br />

Indtast udtryk der for hver post kan evalueres til sand eller<br />

falsk f.eks. Saldofelt > 0. Hvis posten er falsk sorteres den<br />

fra.<br />

Go<strong>dk</strong>end Go<strong>dk</strong>end editorboksen F3<br />

Rapport QT – Feltafgrænse (tilføje / slette)<br />

Funktion Fremgangsmåde Tast<br />

Felt-afgrænse Du kan tilføje og slette afgrænsningfelter efter behov.<br />

Tilføje Tilføj afgrænsningfelt fra listen over kartoteksfelter F2<br />

Slette Slet afgrænsningsfelt ALT+F9<br />

350<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Rapport QT – Triggere i opsætning<br />

Funktion Fremgangsmåde Tast<br />

Opsætning Start opsætning af QT<br />

Gentages for hver trigger.<br />

Vise triggere Gå til feltet Globale formler og åbn feltet<br />

Du ser nu en liste over globale triggere.<br />

Init triggeren er den første, der køres i QT, og derfor vil<br />

det f.eks. være naturligt at erklære sine variabler her.<br />

CTRL+F6<br />

ENTER<br />

Åbne trigger Vælg Trigger og åbn editorboxen hertil. Pile og Enter<br />

Indtast kode.<br />

Go<strong>dk</strong>end Go<strong>dk</strong>end koden F3<br />

Rapport QT – Triggere på kartoteker<br />

Funktion Fremgangsmåde Tast<br />

Kartotek Vælg feltet kørsler i det kartotek , hvori der skal indsættes<br />

kode i triggere.<br />

Gentages for hver trigger.<br />

Vise triggere Åbn feltet kørsler<br />

Du ser nu triggerne på det aktuelle kartotek.<br />

ENTER<br />

Åbne trigger Vælg Trigger og åbn editorboxen hertil. ENTER<br />

Indtast kode.<br />

Go<strong>dk</strong>end Go<strong>dk</strong>end koden F3<br />

351<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012


Subtotaler<br />

Funktion Fremgangsmåde Tast<br />

Find rapport Generelt/Tilpasning/Udviklingsmenu/REP/Ret<br />

Vælg rapport.<br />

Opsætte felt Vælg felt, der skal dannes subtotal for.<br />

Gentages for hvert felt der skal have totaler.<br />

Åbne felt Vælg funktionen Ret felt/Subtotaler F6<br />

Indsæt funktion Indsæt funktion for subtotalen f.eks. ’Sum alle’<br />

’Opsætning’ af<br />

rapport<br />

Åbne<br />

opsætning<br />

Subtotaler udskrives ikke automatisk. Kun hvis det<br />

defineres i ’Opsætning’ i rapporten.<br />

Pile<br />

Åbne dialogboksen Opsætning i rapporten CTRL+F6<br />

I dialogboksen vælges, hvordan subtotalerne skal<br />

udskrives, og om de skal udskrives.<br />

De vigtigste felter er:<br />

Ledetekst Subtotal-linje vælg metode til udskrivning af<br />

automatiske ledetekster.<br />

Kopi af linje udskriver værdien af teksten til venstre for<br />

subtotalfeltet.<br />

Feltnavn værdi udskriver ordet ’Grandtotal’ foran totalen.<br />

Udskrivning Udskriv subtotal: Svar JA / NEJ til om subtotalen skal<br />

udskrives eller ej.<br />

Manuel<br />

ledetekst<br />

Linjetypen<br />

Subtotal<br />

Udskriv kun totaler: Svar JA / NEJ til om der kun skal<br />

udskrives subtotaler.<br />

Manuelle ledetekster indsættes i linjetypen Subtotal.<br />

Du kan i stedet for ovenstående ’automatik’ selv<br />

bestemme den tekst, der skal stå på subtotal linjen ved at<br />

oprette en linje af typen subtotal.<br />

INS<br />

ALT+H<br />

ALT+H<br />

ALT+H<br />

Vælg linjetype Vælg linjetype Subtotal Pile og Enter<br />

Vælg kartotek Vælg kartotek til linjetypen ENTER<br />

Indtast tekst Indtast tekst til subtotalen i layoutdelen f.eks.:<br />

’Sum af beløb: ’<br />

Hvis totalen f.eks. er 9.999,00 vil rapporten se sådan ud:<br />

Sum af beløb: 9.999,00<br />

352<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />

® C5 VERSION 2012

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!