11.09.2013 Views

Programmering II - Xpi

Programmering II - Xpi

Programmering II - Xpi

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> <strong>II</strong><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 ...................................................................................................... 14<br />

1. Multi import .................................................................................................. 15<br />

Filer ............................................................................................................................................................................. 15<br />

Elementfiler ............................................................................................................................................................. 15<br />

Import definitionsfil (Import.def) .................................................................................................................... 16<br />

Import log (Import.log) ...................................................................................................................................... 17<br />

Import kørsel .......................................................................................................................................................... 17<br />

Multi oversættelse ................................................................................................................................................ 19<br />

Matchudtryk............................................................................................................................................................ 19<br />

Opgaver: Multi import ........................................................................................................................................ 21<br />

2. Kartoteker ...................................................................................................... 22<br />

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

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

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

Passwordbeskyttelse af kartoteker ................................................................................................................ 24<br />

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

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

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

3. Indexer ........................................................................................................... 33<br />

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

Oprettelse af indexer ........................................................................................................................................... 34<br />

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

Navngivning af Indexer i nye moduler ......................................................................................................... 35<br />

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

4. INTRODUCE og transaktionskommandoer ................................................ 40<br />

Åbning af fiktiv post med INTRODUCE ........................................................................................................ 40<br />

Åbning af faktisk post med INTRODUCE .................................................................................................... 42<br />

Åbning af faktisk post med INTRODUCE og index ................................................................................. 44<br />

INSERT, UPDATE, DELETE................................................................................................................................... 44<br />

INSERT ....................................................................................................................................................................... 45<br />

UPDATE ..................................................................................................................................................................... 45<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

2


DELETE....................................................................................................................................................................... 46<br />

INSERT/UPDATE i samme XAL kørsel ........................................................................................................... 46<br />

Opgaver: INTRODUCE og transaktionskommandoer ............................................................................ 48<br />

5. PROMPT, videregående brugerdialog ........................................................ 51<br />

Grundlæggende opsætning ............................................................................................................................. 51<br />

Tillægskommandoer ............................................................................................................................................ 53<br />

REF .............................................................................................................................................................................. 53<br />

Sammenbyggede tekster .................................................................................................................................. 53<br />

GET på felter ........................................................................................................................................................... 55<br />

ASENUM ................................................................................................................................................................... 56<br />

DECIMALS ................................................................................................................................................................ 57<br />

LENGTH..................................................................................................................................................................... 59<br />

Opgaver: PROMPT, videregående brugerdialog ...................................................................................... 61<br />

6. Videregående løkkekommandoer ............................................................... 66<br />

WHILE ........................................................................................................................................................................ 66<br />

Afbrydelse af WHILE løkke vha. promptboks ............................................................................................ 67<br />

Opgaver: Videregående løkkekommandoer .............................................................................................. 69<br />

7. READ og WRITE ............................................................................................. 71<br />

READ .......................................................................................................................................................................... 71<br />

WRITE ........................................................................................................................................................................ 73<br />

CLOSE ........................................................................................................................................................................ 74<br />

Faste formater ........................................................................................................................................................ 74<br />

Opgaver: READ og WRITE ................................................................................................................................. 76<br />

8. Funktioner videregående ............................................................................. 80<br />

Funktionen Box() ................................................................................................................................................... 80<br />

Box(1) Infoboks ...................................................................................................................................................... 81<br />

Box(2) Advarselsboks .......................................................................................................................................... 82<br />

Box(3) Ja/Nej boks ................................................................................................................................................ 82<br />

Box(4) Pickliste boks ............................................................................................................................................ 84<br />

Box(1-3) Bokse med ekstra knapper ............................................................................................................. 84<br />

Konverteringsfunktioner .................................................................................................................................... 85<br />

Int2Str() ..................................................................................................................................................................... 85<br />

Num2Str ................................................................................................................................................................... 86<br />

Date2Str() ................................................................................................................................................................. 88<br />

Enum2Str() ............................................................................................................................................................... 90<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

3


Opgaver: Funktioner, videregående .............................................................................................................. 92<br />

9. Macroer .......................................................................................................... 93<br />

Kendetegn ............................................................................................................................................................... 93<br />

Generel opbygning .............................................................................................................................................. 93<br />

Macro typer ............................................................................................................................................................. 95<br />

Globale macroer .................................................................................................................................................... 96<br />

Lokale macroer ...................................................................................................................................................... 97<br />

Macro biblioteker ................................................................................................................................................. 97<br />

Specifikke macroer ............................................................................................................................................... 98<br />

#Num2Str ................................................................................................................................................................ 98<br />

#StrLFix .................................................................................................................................................................. 100<br />

#StrRFix .................................................................................................................................................................. 101<br />

#Date2Str .............................................................................................................................................................. 102<br />

#Time2Str .............................................................................................................................................................. 103<br />

Indirektioner ........................................................................................................................................................ 104<br />

Indirektioner på fasttekster............................................................................................................................ 104<br />

Opgaver: Macroer .............................................................................................................................................. 106<br />

10. Huskelister XAL sproget ............................................................................ 109<br />

ENUM ..................................................................................................................................................................... 109<br />

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

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

11. Huskelister Kommandoer og funktioner ................................................. 112<br />

PRINT AT ............................................................................................................................................................... 112<br />

PAUSE ..................................................................................................................................................................... 112<br />

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

Variabler ................................................................................................................................................................ 114<br />

Kommentar .......................................................................................................................................................... 115<br />

SET ........................................................................................................................................................................... 116<br />

PROMPT ................................................................................................................................................................ 117<br />

Infobox ................................................................................................................................................................... 117<br />

Advarselsbox ....................................................................................................................................................... 118<br />

Dialogbox .............................................................................................................................................................. 118<br />

Ja/Nej box ............................................................................................................................................................. 119<br />

Picklistebox........................................................................................................................................................... 119<br />

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

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

4


IF-THEN-(ELSE)-ENDIF ..................................................................................................................................... 121<br />

NextYr ..................................................................................................................................................................... 121<br />

DayOfWk ............................................................................................................................................................... 122<br />

DayName .............................................................................................................................................................. 122<br />

INTRODUCE ......................................................................................................................................................... 123<br />

INSERT .................................................................................................................................................................... 124<br />

UPDATE .................................................................................................................................................................. 124<br />

DELETE.................................................................................................................................................................... 124<br />

OUTPUT ................................................................................................................................................................. 125<br />

FIND ........................................................................................................................................................................ 125<br />

WRITE ..................................................................................................................................................................... 126<br />

READ ....................................................................................................................................................................... 126<br />

WHILE-END .......................................................................................................................................................... 127<br />

PROCESS ............................................................................................................................................................... 127<br />

#Debug .................................................................................................................................................................. 127<br />

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

12. Kartoteker, triggere med inddatakontrol................................................ 130<br />

Kartoteker ............................................................................................................................................................. 130<br />

Inddatakontrol på kartoteker ........................................................................................................................ 131<br />

Kartoteksfelter ..................................................................................................................................................... 131<br />

Inddatakontrol på felter .................................................................................................................................. 132<br />

Opgaver: Kartoteker, triggere med inddatakontrol ............................................................................. 133<br />

13. Formens vindue .......................................................................................... 136<br />

Blokke i forms...................................................................................................................................................... 136<br />

Formens vindue .................................................................................................................................................. 136<br />

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

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

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

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

#FormError ........................................................................................................................................................... 141<br />

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

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

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

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

5


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

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

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

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

14. Enkelt record blok ...................................................................................... 146<br />

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

Felter ....................................................................................................................................................................... 147<br />

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

15. Multi record blok ........................................................................................ 149<br />

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

Felter ....................................................................................................................................................................... 151<br />

Opgaver: Multi record blok ........................................................................................................................... 152<br />

16. Virtuelle felter i forms ............................................................................... 154<br />

Oprettelse af virtuelle felter ........................................................................................................................... 154<br />

Opsætning ............................................................................................................................................................ 155<br />

Tildeling ................................................................................................................................................................. 157<br />

Opgaver: Virtuelle felter i forms .................................................................................................................. 158<br />

17. Synkronisering mellem blokke ................................................................. 160<br />

Fremfinding og visning af poster i underblok........................................................................................ 160<br />

Triggeren Pre-record ........................................................................................................................................ 161<br />

Tildeling af værdier fra hovedblok til felter i underblok .................................................................... 161<br />

Fremfinding af poster i underblok med #Frm_Index() ........................................................................ 161<br />

Placering af cursor på første eller sidste af de fundne poster ......................................................... 163<br />

Initiering af nye poster i underblok ............................................................................................................ 163<br />

Triggeren Init-record ........................................................................................................................................ 163<br />

Tildeling af initieringsværdier til nøglefelter ........................................................................................... 163<br />

Komplet eksempel på synkronisering ....................................................................................................... 164<br />

Opgaver: Synkronisering mellem blokke: ................................................................................................ 165<br />

18. Direkte opslag ............................................................................................ 166<br />

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

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

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

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

19. Listemenuer ................................................................................................ 173<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

6


Listemenuer i C5 ................................................................................................................................................ 173<br />

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

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

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

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

20. Synkronisering mellem forms................................................................... 179<br />

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

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

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

Buffer ...................................................................................................................................................................... 180<br />

EXTERN .................................................................................................................................................................. 181<br />

SET ........................................................................................................................................................................... 182<br />

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

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

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

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

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

21. Tabsider og gruppebokse .......................................................................... 188<br />

Tabsider ................................................................................................................................................................. 188<br />

Grupppebokse .................................................................................................................................................... 189<br />

22. USRKEY triggere ......................................................................................... 191<br />

Triggere ................................................................................................................................................................. 191<br />

Taster ...................................................................................................................................................................... 192<br />

Taster til én blok................................................................................................................................................. 193<br />

Taster til flere blokke ........................................................................................................................................ 193<br />

Taster med eksempler ..................................................................................................................................... 193<br />

Kontrol kommandoer ....................................................................................................................................... 194<br />

Kald af USRKEY trigger .................................................................................................................................... 195<br />

Styring af XAL kode i triggerne .................................................................................................................... 196<br />

Blokering af tastetryk ....................................................................................................................................... 196<br />

Tastetryk og kald fra andre triggere samtidig ....................................................................................... 197<br />

Tidspunkter for aktivering af øvrige triggere ......................................................................................... 197<br />

Form macroer ...................................................................................................................................................... 198<br />

REPAINT ................................................................................................................................................................. 198<br />

Opgaver: USRKEY triggere ............................................................................................................................. 200<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

7


23. Notater i forms ........................................................................................... 203<br />

Procestasten ALT+N ......................................................................................................................................... 204<br />

Virtuelt notatfelt ................................................................................................................................................. 204<br />

Macroer til notater ............................................................................................................................................ 205<br />

#NotesPreKey ...................................................................................................................................................... 205<br />

#Frm_NoteMark ................................................................................................................................................. 207<br />

#NotesPostKeyMark ......................................................................................................................................... 207<br />

#NotesMark ......................................................................................................................................................... 208<br />

#NotesKey ............................................................................................................................................................ 209<br />

Notater på forms med flere blokke ............................................................................................................ 209<br />

Kartoteket Notes ................................................................................................................................................ 211<br />

Oversigter ............................................................................................................................................................. 213<br />

Notater på forms med en blok ..................................................................................................................... 214<br />

Notater på forms med flere blokke ............................................................................................................ 215<br />

Opgaver: Notater i forms................................................................................................................................ 216<br />

24. SystemVariabler i forms ............................................................................ 219<br />

Systemvariabler .................................................................................................................................................. 219<br />

Globale variabler ................................................................................................................................................ 221<br />

25. Huskelister forms ....................................................................................... 222<br />

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

8


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Del <strong>II</strong>I – Rapporter .................................................................................................... 246<br />

26. Systemvariabler i rapporter ...................................................................... 247<br />

Systemvariabler i rapporter ........................................................................................................................... 247<br />

Globale variabler ................................................................................................................................................ 249<br />

Opgaver: Systemvariabler i rapporter ....................................................................................................... 250<br />

27. Rapport Control macroer .......................................................................... 252<br />

Skema over rapport control macroer ........................................................................................................ 253<br />

28. Linje-XAL og feltbetingelser ..................................................................... 257<br />

Linje XAL ................................................................................................................................................................ 257<br />

Kolonnen ............................................................................................................................................................... 257<br />

Tildeling af værdier til felter og variabler ................................................................................................. 258<br />

Styring af om linjer skal udskrives eller ikke. .......................................................................................... 259<br />

Direkte anvendelse af RETURN 0 og RETURN 1 .................................................................................... 259<br />

Anvendelse med felter ..................................................................................................................................... 260<br />

Feltbetingelser .................................................................................................................................................... 261<br />

Opgaver: Linje-XAL og feltbetingelser ...................................................................................................... 263<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

9


29. Linjetypen Subtotal .................................................................................... 265<br />

Linjetypen Subtotal med egne ledetekster ............................................................................................. 265<br />

Subtotal linje med for lang ledetekst ........................................................................................................ 266<br />

Udskrift i flere niveauer med samme ledetekst ..................................................................................... 267<br />

Udskrift i flere niveauer med forskellige ledetekster ........................................................................... 267<br />

&Breaklevel .......................................................................................................................................................... 268<br />

Linje XAL ................................................................................................................................................................ 268<br />

Forskellige ledetekster til flere kartoteker ............................................................................................... 270<br />

Opgaver: Linjetypen Subtotal ....................................................................................................................... 271<br />

30. Notater i rapporter .................................................................................... 273<br />

Opsætning af linje i Rapport-definition.................................................................................................... 273<br />

Søgning efter notater i Rapport-XAL ......................................................................................................... 275<br />

Søgning efter notater i Rapport-QT ........................................................................................................... 276<br />

Søgning med macroer ..................................................................................................................................... 278<br />

#OutputNotes() .................................................................................................................................................. 278<br />

Rapport QT ........................................................................................................................................................... 278<br />

Opgaver: Notater i rapporter ........................................................................................................................ 280<br />

31. Tekstlag i rapporter ................................................................................... 283<br />

Tekstlag i layoutområdet ................................................................................................................................ 283<br />

Automatisk valg af tekstlag ........................................................................................................................... 285<br />

Opgaver: Tekstlag i rapporter ....................................................................................................................... 287<br />

32. QT control macroer .................................................................................... 291<br />

QT control macroer ........................................................................................................................................... 291<br />

Skema med macroer ........................................................................................................................................ 292<br />

Anvendt til defaultværdier i QT.................................................................................................................... 292<br />

Opgaver: QT Control macroer ...................................................................................................................... 295<br />

33. Rapport synkronisering ............................................................................. 297<br />

Synkronisering .................................................................................................................................................... 297<br />

Buffer ...................................................................................................................................................................... 298<br />

EXTERN med RENAME ..................................................................................................................................... 298<br />

Synkronisering i rapport QT .......................................................................................................................... 299<br />

Synkronisering i rapport XAL ........................................................................................................................ 300<br />

Uden udskriftsmuligheder i rapport ........................................................................................................... 300<br />

Opgaver: Rapport synkronisering ............................................................................................................... 303<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

10


34. Rapporter i Windows ................................................................................. 304<br />

Planlægning af rapport layout ..................................................................................................................... 304<br />

Usynligt gitter ...................................................................................................................................................... 305<br />

Spatiering i skrifttyper ..................................................................................................................................... 306<br />

Forskel på fast spatiering og proportional skrift ................................................................................... 306<br />

Felter i rapporter ................................................................................................................................................ 307<br />

Fritekst i rapporter ............................................................................................................................................. 307<br />

Opsætning af tekstfelt ..................................................................................................................................... 308<br />

Nye skrifttyper i Windows .............................................................................................................................. 309<br />

Printerkoder ......................................................................................................................................................... 310<br />

Eksempel på rapport i Windows .................................................................................................................. 311<br />

Opgaver: Rapporter i Windows .................................................................................................................... 312<br />

35. Multi Export ................................................................................................ 315<br />

Elementfiler .......................................................................................................................................................... 315<br />

Import definitionsfil (Import.def) ................................................................................................................. 316<br />

Export log (Export.log) ..................................................................................................................................... 317<br />

Export kørsel ........................................................................................................................................................ 317<br />

Matchudtryk......................................................................................................................................................... 318<br />

Opgaver: Multi Export ...................................................................................................................................... 320<br />

36. Huskelister Rapporter ................................................................................ 321<br />

Oprette rapport .................................................................................................................................................. 321<br />

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

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

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

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

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

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

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

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

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

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

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

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

Subtotaler ............................................................................................................................................................. 327<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> <strong>II</strong>. Kurset er berammet til 4 dage.<br />

Kursusmaterialet er udarbejdet til version 2012.<br />

Målgruppe<br />

Personer der ønsker et udvidet kendskab til udviklingsmiljøet i C5.<br />

Forudsætninger<br />

Kurset C5 <strong>Programmering</strong> I<br />

Formål<br />

Kurset gør deltageren i stand til at beherske C5 udviklingsmiljøet, udarbejde tilretninger og opbygning<br />

af nye elementer i systemet.<br />

Emner<br />

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

Datamanipulation ved at indsætte, opdatere og slette poster fra en kørsel<br />

Opbygningen af makroer<br />

Proceskald<br />

Løkkestrukturer<br />

Skrivning til- og læsning fra fremmede filer<br />

QT til forespørgsler og til rapporter<br />

Triggere og kommandoer i QT-værktøjet<br />

Proceskald af rapporter<br />

Synkronisering mellem skærmbilleder og rapporter<br />

Funktioner, makroer, direkte opslag i felter<br />

Feltbetingelser<br />

Tekster til subtotaler<br />

Notater i rapporter vha. makroer<br />

Sprog i rapporter<br />

Inddatakontrol på kartoteker<br />

Synkronisering mellem blokke<br />

Kontrol kommandoer<br />

Virtuelle felter på skærmbilleder<br />

USRKEY og andre triggere<br />

Rapporter i Windows-miljøet<br />

Kurset afsluttes med en test<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

12


Videreuddannelse<br />

Kurset Microsoft Dynamics C5 <strong>Programmering</strong> <strong>II</strong>I.<br />

Beskrivelse af materialet<br />

Materialet er opbygget i uafhængige lektioner, der hver behandler et emne eller funktion. 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 de fleste lektioner findes en huskeliste, der giver et hurtigt overblik over fremgangsmåden og de<br />

taster, 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 />

13


Del I - XAL sproget<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

14


1. Multi import<br />

Formål<br />

Formålet med denne lektion er at lære deltagerne at foretage multi import af filer, der er eksporteret<br />

med multi export.<br />

Efter lektionen skal kursisterne kunne:<br />

Uføre multi import.<br />

Og kende til:<br />

Import.def<br />

Import.log<br />

Multi oversættelse.<br />

Multi import generelt<br />

I alle kolonner, i udviklingsmenuen, er der mulighed for at foretage import af elementer, der tilhører<br />

den aktuelle kolonne.<br />

Der er dog også mulighed for i en og samme kørsel, at importere elementer fra flere kolonner ad<br />

gangen. Dette udføres i kolonnen Multi under Import.<br />

Multi import udføres på filer, der i forvejen er eksporteret med Multi export.<br />

En multi import består af følgende:<br />

Elementfiler<br />

Import definitionsfil<br />

Import logfil<br />

Import kørsel<br />

Filer<br />

Elementfiler<br />

Elementfilerne dannes under Multi Export, idet der dannes én elementfil for hvert element, der<br />

eksporteres.<br />

Filernes navne starter med EXP efterfulgt af et femcifret tal, og afsluttes med punktum og elementtype.<br />

Eksempel på elementfiler<br />

EXP00001.MAC<br />

EXP00002.MAC<br />

EXP00264.DBD<br />

EXP00265.DBD<br />

EXP00001.LST<br />

EXP00002.LST<br />

EXP00001.XAL<br />

EXP00002.XAL<br />

EXP00001.FRM<br />

EXP00002.FRM<br />

EXP00003.FRM<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

15


Navnene på elementfilerne er ikke de samme som selve elementnavnene. Det fremgår derfor ikke<br />

umiddelbart, hvilket indhold filerne har.<br />

For at vide hvilke filer der er eksporteret samtidig, er der en liste over disse i import definitionsfilen.<br />

Import definitionsfil (Import.def)<br />

Import definitionsfilen hedder som standard Import.def, men den kan have et andet navn, hvis det er<br />

tilkendegivet under exportopsætningen.<br />

Filen indeholder en liste over de eksporterede elementer. Den anvendes under multi import, idet<br />

importkørslen her finder de filer, der skal importeres.<br />

Ud over de eksporterede elementer, indeholder filen i de to første linjer informationer om stinavn,<br />

versionsnummer, dato o.a.:<br />

Eksempel på Import.def<br />

"Microsoft© C5 EXPORT","c:\DebExp\","c:\DebExp\Import.log",<br />

"Use Xal: ImportObjekts","Vers. 4.1.0.180 21/12-07 14:00","",<br />

"Dbd","CustTable","exp00043.dbd",<br />

"LST","CustTable.Account","EXP00001.LST",0<br />

"FRM","CustTable","EXP00001.FRM",4<br />

Definitionsfilens indhold forklares herunder. De forskellige felter i filen adskilles af kommaer.<br />

Indhold i linje1<br />

Felt Indhold<br />

1 Teksten ’Microsoft© C5 EXPORT’<br />

2 Stinavn på det sted elementfilerne ligger (Sættes under exportopsætning)<br />

3 Stinavn og navn på import loggen (Sættes under exportopsætning)<br />

Indhold i linje2<br />

Felt Indhold<br />

1 Teksten ”Use XAL: ImportObjekts” (Navn på XAL kørsel til import)<br />

2 Versionsnummer, dato og klokkeslæt<br />

3 Frivillig kommentar der sættes under eksportopsætningen<br />

Indhold i elementlinjerne<br />

Felt Indhold<br />

1 Elementtype<br />

2 Elementnavn<br />

3 Navn på eksportfil<br />

4 Applikationsgruppe<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

16


Import log (Import.log)<br />

Under Multi Import oprettes der en import logfil.<br />

Navn og placering af denne fil er angivet i Import.def i første linje felt 3.<br />

Navnet er som standard Import.log, men kan være ændret under exportopsætningen.<br />

Importloggen indeholder informationer om selve importen, idet der vises en liste over importerede<br />

filer og eventuelle fejl.<br />

Ved en multi import med importdefinitionen i forrige afsnit, dannes der en importlogfil som vist<br />

herunder.<br />

Eksempel på Import.log<br />

Import af applikation 21-12/2007<br />

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

Vers. 4.1.0.180 21/12-2007 14:00<br />

Export af CustTable<br />

Path..............: c:\DebExp\<br />

Database..<br />

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

exp00043.dbd -> CustTable<br />

List......<br />

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

EXP00001.LST -> CustTable.Account<br />

Form......<br />

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

EXP00001.FRM -> CustTable<br />

Første linje viser datoen for importen. De to næste tekstlinjer gengiver de to kommentarlinjer, der<br />

findes i Import.Def. Kommentarerne efterfølges af en linje med stinavnet, hvorfra filerne er importeret.<br />

De enkelte elementer er opstillet i en liste med overskrift for hver elementtype.<br />

Det fremgår også af importloggen, hvis der opstår fejl under importen og den efterfølgende<br />

oversættelse.<br />

Eksempel på Import.log med fejl<br />

Form......<br />

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

*** EXP00001.FRM -> CustTable<br />

Fejl i oversættelse<br />

Ovenstående eksempel er et udpluk af en Import.log, hvor det angives, at der er fejl i oversættelsen.<br />

Bemærk at elementet ér blevet importeret. Det er derfor vigtigt at kontrollere, hvori fejlen består og<br />

rette den. Når fejlen er rettet, skal det importerede element oversættes igen.<br />

Import kørsel<br />

Multi import består i at importere C5 elementer fra nogle af de elementfiler, der tidligere er dannet<br />

med en multi export. De elementfiler, der skal importeres fra, er beskrevet i filen Import.def.<br />

En multi import anvender således både filen Import.def og de tilhørende elementfiler.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

17


Selve importen udføres fra udviklingsmenuen ved aktivering af menupunktet Multi Import. Brugeren<br />

ledes igennem to promptbokse med felter, der skal udfyldes.<br />

Prompt 1 (Import af applikation til C5UTIL.USR)<br />

Felt Forklaring<br />

Import def Fulde stinavn på definitionsfilen Import.def<br />

Hvis der ikke angives stinavn, forsøges det at finde filen i C5’s bibliotek<br />

Navne ’Import def’ eller ’Export filer’<br />

Feltet angiver, om elementernes navne skal tages fra de enkelte<br />

eksporterede elementer eller fra definitionsfilen.<br />

Normalt er dette uden betydning, men er navnene ændret manuelt et af<br />

stederne, er angivelsen i dette felt afgørende for elementernes navne efter<br />

import.<br />

Oprydning pr Feltet angiver, at C5UTIL.USR skal reorganiseres efter import af det<br />

angivne antal elementer. Da C5UTIL.USR også er opbygget efter<br />

versionskontrol-princippet, vil berørte elementer ligge dobbelt i filen.<br />

XAL-kode Ja eller Nej<br />

Dette gælder dog kun import af elementer, der allerede eksisterer i<br />

C5UTIL.USR. Reorganiseringen fjerner den ældste kopi, som ikke mere er<br />

tilgængelig. Ved angivelse af værdien 0 i feltet, foretages ingen<br />

reorganisering.<br />

Udfyldes og accepteres den første prompt, vises der en ny prompt.<br />

Øverst i den nye prompt vises stinavn og navn på den aktuelle import definitionsfil med tilhørende<br />

kommentarer i form af bl.a. versionsnummer, dato og klokkeslæt.<br />

Prompt 2 (Import af applikation)<br />

Felt Forklaring<br />

Import path Fulde stinavn på det directory, der indeholder de filer, der skal importeres.<br />

Som standard vises biblioteket fra exportopsætningen.<br />

Hvis filerne er flyttet, angives det nye directory her.<br />

Import log Fulde stinavn på det directory, der skal indeholde import loggen.<br />

Som standard vises biblioteket fra exportopsætningen.<br />

Hvis elementfilerne er lagt et andet sted, angives det nye directory her.<br />

Import Import består af en række JA/NEJ felter. Et til hver elementtype.<br />

Ved at udfylde disse felter bestemmes hvilke elementtyper, der skal<br />

importeres.<br />

Det er således muligt at begrænse en import til visse elementtyper, selv<br />

om den tilhørende multi export indeholder flere andre.<br />

Efter en multi import foreslås det, at multi oversætte hele applikationen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

18


Multi oversættelse<br />

Oversættelse<br />

Multi oversættelse udfører en komplet oversættelse af hele applikationen.<br />

Dette kan være nødvendigt efter en multi import, idet det ikke er altid, at elementerne importeres i<br />

den rigtige rækkefølge.<br />

Multi oversættelse udføres i udviklingsmenuen i Multi Oversæt. Her åbnes der for en promptboks, med<br />

en række felter der bestemmer hvad der skal oversættes.<br />

Oversættelse af applikation<br />

Felt Forklaring<br />

Incl. Et udtryk som skal matches af de elementer, der skal oversættes.<br />

Efterlades feltet tomt medtages elementtypen ikke.<br />

Excl. Et udtryk som skal matches af de elementer, der ikke skal oversættes, men<br />

som indgår i matchudtrykket i feltet Incl.<br />

Fra Navn på element der startes fra (skal indgå i matchudtrykket)<br />

Til Navn på element der sluttes med (skal indgå i matchudtrykket)<br />

C_util Her vælges den C5util fil, hvis elementer skal oversættes.<br />

Kun fejl i logfil Udfyldes feltet ’Logfil’, kan det her angives, om logfilen kun skal indeholde<br />

eventuelle fejl, eller alle filer der oversættes.<br />

Oprydning pr På grund af versionskontrol-princippet findes alle elementerne to gange.<br />

Debuginformation<br />

Feltet udfyldes med et tal, der angiver hvor mange elementer, der skal<br />

oversættes ad gangen, inden der ryddes op i elementerne.<br />

Angives nul ryddes, der ikke op (alle elementer ligger dobbelt).<br />

Det er muligt under oversættelsen at tilføje debuginformation til<br />

elementerne.<br />

Hvis dette udføres, skal der foretages en oversættelse senere for at fjerne<br />

debuginformationen igen.<br />

Logfil Fulde navn og stinavn på logfilen der skal indeholde informationer om<br />

oversættelsen<br />

Kommentar Der er to kommentarfelter, der kan udfyldes. Værdierne skrives i logfilen.<br />

Matchudtryk<br />

Felt 1: Indeholder som standard versionsnummer, dato og Klokkeslæt.<br />

Felt 2: Kan frit udfyldes med ekstra information.<br />

I felterne Incl. og Excl. kan der anvendes matchudtryk.<br />

De vigtigste match udtryk vises i skemaet herunder efterfulgt af eksempler. Yderligere forklaring findes<br />

i manualerne under ordet Match.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

19


Matchudtryk<br />

Udtryk Forklaring<br />

aaa Ethvert element, der indeholder de pågældende tegn, medtages.<br />

Ethvert udtryk, der slutter med bogstaverne ’aaa’, medtages.<br />

? eller . Tegnene indsættes i udtrykket som erstatning for enkelte tegn.<br />

* Erstatter ingen eller flere forekomster af tegn.<br />

Tegnet lige før medtages ikke.<br />

+ Erstatter én eller flere forekomster af tegn.<br />

- Erstatter ingen eller én forekomst af tegnene.<br />

Eksempler<br />

Udtryk Forklaring<br />

sal DebitorSaldo, FinansBudgetSaldi, LønSaldiMed<br />

DebFakHist, KreFakHist<br />

k?ist DebFakHist, DebFakList, LagerStykListPrompt<br />

DebFakHist, DebFakList, DebPost, DebPostList<br />

Fak?*st> DebFakHist, DebFakList, KreFakHist, KreFakList<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

20


Opgaver: Multi import<br />

Opgave 1: Multi import af kartoteker<br />

Formål med opgaven<br />

At udføre multi import af kartoteker fra det grundlæggende programmeringskursus.<br />

Beskrivelse<br />

Der skal udføres multi import af kartotekerne UDLUdlånsKart og UDLUdlånsPost, der blev oprettet på<br />

det grundlæggende programmeringskursus.<br />

Filerne udleveres af instruktøren.<br />

Filerne indeholder kun selve kartotekerne. Der er ingen fastteksttyper, indexer eller listbilleder.<br />

Forløb √<br />

1 Kontrollér om import definitionsfilen findes og åben den for at se indholdet.<br />

Hvilket navn har elementfilerne fået:<br />

UDLUdlånsKart:<br />

UDLUdlånsPost:<br />

2 Kontrollér om elementfilerne findes<br />

3 Vælg Udviklings menuen og start en multi import<br />

4 Udfyld de relevante felter i promptboks 1 og 2<br />

5 Kontrollér filen Import.log for, at begge filer er importeret uden fejl.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

21


2. 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, hver for sig, af over 200 forskellige kartoteker, der hver især igen består af en mængde<br />

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 />

Supervisoren, eller brugere med tilsvarende rettigheder, kan selv oprette nye kartoteker og felter i C5.<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 />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

22


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 />

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 />

Eksempel<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 />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

23


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 CustTable X X X<br />

Kun DAT regnskabet ZipCode 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 />

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 />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

24


Systemfelter i kartoteker<br />

Alle kartoteker i C5 har fire ensartede systemfelter.<br />

Systemfelter i C5<br />

Systemfelter Beskrivelse<br />

LøbeNummer Postens nummer i kartoteket<br />

SidstRettet 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 tilsvarer de fem datatyper,<br />

der også anvendes til erklæring af variabler.<br />

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 />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

25


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 />

Feltnavne<br />

Nedenstående regler skal overholdes for navngivning af felter.<br />

Regler for feltnavne<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 />

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 />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

26


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 />

Felt Betydning<br />

Opdatering af tallet Der kan vælges mellem Absolut og Relativ.<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 />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

27


Specielt ved nye kommatalsfelter<br />

Felt Betydning<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 />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

28


Opgaver: Kartoteker<br />

Opgave 1: Fasttekster<br />

Formål med opgaven<br />

At oprette nye fasttekster<br />

Huskelister<br />

ENUM<br />

Beskrivelse<br />

Der skal være to fastteksttyper i registreringssystemet. Den ene type skal indeholde tekster til de<br />

forskellige typer af udlån, og den anden skal indeholde tekster, 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 Følg huskelisten hvis du ikke kan huske hvordan, der oprettes fasttekster.<br />

2 Opret først fastteksttypen ’UDLUdlånsType’ og indsæt teksterne iflg. ovenstående<br />

skema.<br />

3 Opret derefter fastteksttypen ’UDLUdlånsStatus’ og indsæt teksterne iflg.<br />

ovenstående skema.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

29


Opgave 2: Kartoteker<br />

Formål med opgaven<br />

At oprette nye kartoteker med tilhørende felter<br />

At slette et felt i et kartotek.<br />

Beskrivelse<br />

Der skal oprettes to nye kartoteker til registrering af udlånte varer og et til indhold af procentsatser til<br />

udlejningsværdi og forsikringsværdi.<br />

Registreringen af udlån skal foregå på samme måde, som når der oprettes salgsordrer i C5, idet der<br />

skal være ét kartotek til ordrehoveder og ét til ordrelinjer.<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 til ordrehovederne skal hedde UDLUdlånsKart, og kartoteket til ordrelinjerne skal hedde<br />

UDLUdlånsPost. Kartoteket til procentsatserne skal hedde UDLUdlånsSats.<br />

Vigtigt!<br />

Har du i en tidligere lektion importeret databasedefinitionen til kartotekerne, skal du kontrollere at alle<br />

felterne er til stede. Er de ikke det, skal du oprette de der mangler. Kartoteket UDLUdlånsSats mangler<br />

helt sikkert og skal oprettes med felter. Hvis importen ikke indeholdt fastteksttyper, skal du bemærke,<br />

at felterne af typen fasttekst er importeret med navnet CREATE. Giv disse felter deres rigtige navne og<br />

tilføj den rigtige fastteksttype.<br />

Kartotek: UDLUdlånsKart<br />

Type Specielt Feltnavn Ledetekst √<br />

Int Absolut UdlånsNummer Nummer<br />

Str Højrestillet 10 DebitorKonto Konto<br />

Date UdlånsDato UdlånsDato<br />

Enum UDLUdlånsType UdlånsType * UdlånsType<br />

Str Venstrestillet 25 Attention Attention<br />

Date ReturDato ReturDato<br />

Real Opdatering af tal: Absolut<br />

National valuta: JA<br />

ForsikringsSum %3Forsikring **<br />

* Fastteksttypen til feltet UdlånsType er den nyoprettede fasttekst med navnet UDLUdlånsType.<br />

** %3 er en substitutionsvariabel der indsætter præsentationsvalutaen i ledeteksten efter et<br />

mellemrum. Anvendes når der samtidig er JA i National valuta.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

30


Kartotek: UDLUdlånsPost<br />

Type Specielt Feltnavn Ledetekst √<br />

Int Opdatering af tal: Absolut UdlånsNummer Nummer<br />

Str Højrestillet 10 DebitorKonto Konto<br />

Str Venstrestillet 10 VareNummer VareNr<br />

Str Venstrestillet 30 VareNavn VareNavn<br />

Str Venstrestillet 10 SerieNummer SerieNr<br />

Enum UDLUdlånsStatus UdlånsStatus * UdlånsStatus<br />

Real Opdatering af tal: Absolut<br />

National valuta: JA<br />

Real Opdatering af tal: Absolut<br />

National valuta: JA<br />

Udlejningsværdi %3Udlejning **<br />

Forsikringsværdi %3Forsikring **<br />

* Fastteksttypen til feltet Status er den nyoprettede fasttekst med navnet UDLUdlånsStatus.<br />

** %3 er en substitutionsvariabel der indsætter præsentationsvalutaen i ledeteksten efter et<br />

mellemrum. Anvendes når der samtidig er JA i National valuta.<br />

Kartotek: UDLUdlånsSats<br />

Type Specielt Feltnavn Ledetekst √<br />

Str Venstrestillet 10 VareNummer VareNr<br />

Real Opdatering af tal: Absolut UdlejningsPct Udlejning<br />

Real Opdatering af tal: Absolut ForsikringsPct Forsikring<br />

Forløb √<br />

1 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 />

2 Opret først kartoteket ’UDLUdlånsKart’ og indsæt felterne iflg. ovenstående skema.<br />

(Er kartoteket importeret kontrolleres felterne.)<br />

3 Opret derefter kartoteket ’UDLUdlånsPost’ og indsæt felterne iflg. ovenstående<br />

skema. (Er kartoteket importeret kontrolleres felterne.)<br />

4 Opret herefter kartoteket ’UDLUdlånsSats’ og indsæt felterne iflg. ovenstående<br />

skema.<br />

5 I UDLUdlånsKart slettes feltet Forsikringssum ved at ændre navnet til Slettet1, og i<br />

UDLUdlånsPost slettes feltet VareNavn, ved at ændre feltnavnet til Slettet2.<br />

6 Husk at rette fasttekstfelterne der blev importeret som CREATE.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

31


Opgave 3: Dokumentation<br />

Mål med opgaven<br />

At udskrive dokumentation på kartotekerne.<br />

Beskrivelse<br />

Efter oprettelse af de tre 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 alle tre kartoteker gå ind i feltet<br />

RowNumber og indtaste dit navn i hjælpeteksten<br />

Dette er kun for, at du kan kende din dokumentation fra de andre kursisters, når den<br />

udskrives på printeren<br />

2 Udskriv dokumentation for kartotekerne på printeren<br />

3 Kontrollér at kartotekerne er rigtigt oprettet.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

32


3. 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 Indexer.<br />

Indexer generelt<br />

Indexer oprettes og vedligeholdes i de kartoteker de tilhører.<br />

C5 leveres med indexer til de eksisterende kartoteker, men der kan oprettes flere nye, hvis der opstår<br />

behov for det.<br />

Der kan således være flere indexer til hvert kartotek.<br />

De oprindelige indexer kan ikke slettes, men de kan ændres.<br />

Det anbefales ikke at foretage ændringer i eksisterende indexer, da det kan give uforudsigelige følger.<br />

Hvis der er behov for det, er det bedre at oprette nye indexer.<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 />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

33


Mangler index kan der kun søges fortløbende, dvs. i den rækkefølge posterne blev indtastet.<br />

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 indexer<br />

Indexer oprettes i udviklingsmenuen under DBD/Ret/Kerne/’Vælg et kartotek’/<br />

Indexbehandling/Opret.<br />

Indexer 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 />

indexer må dog ikke have sammenfaldene navne.<br />

Indexer 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 indexer 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. Se nedenfor.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

34


Navngivning og indexformel<br />

Indexer navngives ofte ud fra de felter de består af og afsluttes som regel med bogstaverne Idx.<br />

Åbnes nogle af de indexer der findes i nuværende C5 kartoteker, ses at der er brugt mange forskellige<br />

måder at navngive på.<br />

Eksempler på indexnavne<br />

IndexNavn Felter i Indexformel<br />

AccountIdx Account<br />

AccDateIdx Account, Date<br />

Eksempler på indexformler<br />

IndexNavn Felter i Indexformel<br />

AccountIdx Account ASCEND<br />

AccDateIdx Account ASCEND, Date DESCEND<br />

NameIdx Name DESCEND 3 {Navn faldende 3 tegn}<br />

Hvis der skal sorteres på teksten i et fastteksfelt, skal dette først konverteres til en tekst med funktionen<br />

Enum2Str.<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. feltet Account i kartoteket CustTable, 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 Indexer 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 Indexer.<br />

Syntaks<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 />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

35


Eksempel<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 />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

36


Opgaver: Index<br />

Opgave 1: Index<br />

Formål med opgaven<br />

At oprette indexer på kartoteker<br />

Huskelister<br />

Kartotek – Index<br />

Beskrivelse<br />

Der skal oprettes indexer 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 />

Indexer til UDLUdlånsKart<br />

Indexnavn Ens nøgler Aktivt Beskrivelse af index (felter) √<br />

UDLDebDatTypIdx NEJ JA DebitorKonto<br />

UdlånsDato<br />

UdlånsType<br />

UDLUdlIdx NEJ JA UdlånsNummer<br />

UDLDebUdlIdx Nej JA DebitorKonto<br />

UdlånsNummer<br />

NB: Indexet UDLDebDatTypIdx overholder ikke kodestandarden for navngivning af indexer, idet det er<br />

lovligt at give indexet et sigende navn som her.<br />

Index til UDLUdlånsPost<br />

Indexnavn Ens Nøgler Aktivt Beskrivelse af index (felter) √<br />

UDLUdlVarIdx JA JA UdlånsNummer<br />

Index til UDLUdlånsSats<br />

VareNummer<br />

Indexnavn Ens Nøgler Aktivt Beskrivelse af index (felter) √<br />

UDLVarIdx NEJ JA VareNummer<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

37


1 Opret først indexer på kartoteket UDLUdlånsKart iflg. skemaet<br />

Forløb √<br />

2 Opret derefter indexet på kartoteket UDLUdlånsPost iflg. skemaet<br />

3 Opret derefter indexet på kartoteket UDLUdlånsSats<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

38


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 indexer, skal der udskrives dokumentation på kartotekerne og det skal kontrolleres,<br />

at indexerne er oprettet korrekt.<br />

Forløb √<br />

1 Inden udskrivning af dokumentationen skal du i alle tre kartoteker gå ind i feltet<br />

RowNumber og indtaste dit navn i hjælpeteksten. (Hvis du ikke har gjort det i<br />

forvejen)<br />

Dette er kun for, at du kan kende din dokumentation fra de andre kursisters, når<br />

den udskrives på printeren.<br />

2 Udskriv dokumentation for kartotekerne på printeren.<br />

3 Kontrollér at indexerne er rigtigt oprettet.<br />

4 Gem dokumentationen i kursusmappen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

39


4. INTRODUCE og transaktionskommandoer<br />

Formål<br />

Formålet med denne lektion er at lære deltagerne at anvende kommandoen INTRODUCE med dens<br />

forskellige muligheder. Desuden undervises i kommandoerne INSERT, UPDATE og DELETE.<br />

Efter lektionen skal kursisterne kunne:<br />

Anvende INTRODUCE til åbning af fiktive og faktiske poster<br />

Anvende kommandoerne INSERT, UPDATE og DELETE.<br />

Generelt<br />

INTRODUCE anvendes, når der kun skal gives adgang til én post i et kartotek.<br />

Til forskel fra SEARCH løkker der giver adgang til mange poster, indfører og åbner INTRODUCE kun én<br />

post ad gangen.<br />

Der er tre anvendelsesmuligheder med INTRODUCE:<br />

Åbning af fiktiv post med INTRODUCE<br />

Åbning af faktisk post med INTRODUCE<br />

Åbning af faktisk post med INTRODUCE og index.<br />

Åbning af fiktiv post med INTRODUCE<br />

Poster der åbnes med INTRODUCE kan enten være fiktive eller faktiske.<br />

En fiktiv post er tom, dvs. udfyldt med nulværdier, hvor en faktisk post er udfyldt med værdier fra<br />

databasen.<br />

Åbning af fiktiv post med INTRODUCE<br />

KontoNummer<br />

Navn<br />

XAL kørsel<br />

INTRODUCE kartotek<br />

Fiktiv (tom) post uden værdier<br />

DebitorGruppe<br />

Andre felter<br />

databasedefinition<br />

Beskrivelse af kartotek<br />

med felter<br />

KontoNummer<br />

Navn<br />

DebitorGruppe<br />

Andre felter<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

40


Når INTRODUCE anvendes, kigger systemet i databasedefinitionen til det pågældende kartotek, og<br />

danner en tom post bestående af felterne i kartoteket. Den tomme post stilles til rådighed for XAL<br />

kørslen.<br />

Syntaks for åbning af fiktiv post med INTRODUCE<br />

INTRODUCE <br />

Når en post indføres på denne måde, er der adgang til alle felterne i den, de er bare tomme, og kan<br />

tildeles værdier med SET kommandoen.<br />

Eksempel på åbning af fiktiv post med INTRODUCE<br />

INTRODUCE CustTable<br />

SET Account = ”1000”<br />

SET Name = ”Søren Sørensen”<br />

SET Group = ”DK”<br />

I eksemplet indføres der en tom post fra debitorkartoteket, og felterne Account, Name og Group<br />

tildeles værdier med SET kommandoen.<br />

Grunden til af feltet Account tildeles værdien ”1000” i anførselstegn, er at feltet i debitorkartoteket er<br />

et tekstfelt.<br />

Eksemplet, på næste side, viser hvordan INTRODUCE alene efterfulgt af kartoteksnavn, kun indfører en<br />

tom post.<br />

Eksempel der viser at posten er tom<br />

{ Indførsel af en tom post med kommandoen INTRODUCE }<br />

INTRODUCE CustTable<br />

{ Udskrivning af den tomme post }<br />

PRINT ”KontoNummer ....: ”, Account<br />

PRINT ”Navn ...........: ”, Name<br />

PRINT ”DebitorGruppe ..: ”, Group<br />

PRINT ””<br />

{ Tildeling af værdier til den tomme post med SET }<br />

SET Account = ”1000”<br />

SET Name = ”Søren Sørensen”<br />

SET Group = ”DK”<br />

{ Udskrivning af den udfyldte post }<br />

PRINT ”KontoNummer ....: ”, Account<br />

PRINT ”Navn ...........: ”, Name<br />

PRINT ”DebitorGruppe ..: ”, Group<br />

PAUSE<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

41


Resultat<br />

KontoNummer ....:<br />

Navn ...........:<br />

DebitorGruppe ..:<br />

KontoNummer ....: 1000<br />

Navn ...........: Søren Sørensen<br />

DebitorGruppe ..: DK<br />

Efter tildeling af værdier til den tomme post, kan den udskrives som vist i eksemplet, men den kan også<br />

indsættes i kartoteket med kommandoen INSERT.<br />

Åbning af faktisk post med INTRODUCE<br />

INTRODUCE kan også åbne for faktiske poster, dvs. poster der eksisterer i kartoteket i forvejen.<br />

Faktiske poster åbnes med INTRODUCE og direkte opslag.<br />

Åbning af faktisk post med INTRODUCE og direkte opslag<br />

XAL kørsel<br />

INTRODUCE kartotek [direkte opslag]<br />

KontoNummer<br />

Navn<br />

Faktisk post udfyldt med<br />

værdier fra kartoteket<br />

DebitorGruppe<br />

Andre felter<br />

1000<br />

Sørensen<br />

DK<br />

Osv.<br />

Faktiske poster åbnes ved at tilføje et direkte opslag til INTRODUCE kommandoen. Det direkte opslag<br />

skal pege på, den post der skal åbnes.<br />

Syntaks for åbning af faktisk post med INTRODUCE<br />

INTRODUCE [direkte opslag]<br />

Kartotek<br />

Postering findes i<br />

kartoteket<br />

KontoNummer<br />

Navn<br />

DebitorGruppe<br />

Andre felter<br />

1000<br />

Sørensen<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

DK<br />

Osv.<br />

42


Husk, at der i det direkte opslag altid skal angives et index og en værdi der kan bruges til at slå op i<br />

dette index med.<br />

Eksempel med direkte opslag<br />

INTRODUCE CustTable [AccountIdx==”100875”]<br />

I direkte opslag kan lighedstegnene erstattes med et komma.<br />

Direkte opslag med komma<br />

INTRODUCE CustTable [AccountIdx,”100875”]<br />

Når der angives INTRODUCE med direkte opslag, forsøger programmet at finde posten og indføre den<br />

i XAL-kørslen med værdierne fra kartoteket.<br />

Findes posten ikke, indføres der alligevel en post, den er bare fiktiv (tom).<br />

Faktisk eller fiktiv?<br />

Hvordan kan det vides om posten findes (om den er faktisk eller fiktiv)?<br />

Alle poster i kartoteker har et RowNumber, der automatisk tildeles posterne på oprettelsestidspunktet.<br />

Ved at undersøge om indførte poster har et RowNumber, kan det således kontrolleres om de eksisterer<br />

dvs. om de er faktiske.<br />

Syntaksen for kontrol af RowNumber<br />

INTRODUCE Kartotek [Direkte opslag]<br />

IF RowNumber THEN<br />

Kommandoblok<br />

ENDIF<br />

Eksempel<br />

INTRODUCE CustTable [AccountIdx==”100875”]<br />

IF CustTable.RowNumber THEN<br />

PRINT ”Posten er faktisk!”<br />

ELSE<br />

PRINT ”Posten er fiktiv!”<br />

ENDIF<br />

I ovenstående eksempel indføres en post fra CustTable med kontonummer 100875.<br />

Da det ikke vides om posten eksisterer, kontrolleres det med en IF struktur om den har et RowNumber.<br />

Har den det, er den faktisk. Den eksisterer og teksten ’Posten er faktisk!’ udskrives.<br />

Er der ikke noget RowNumber springes første del i IF strukturen over, og der fortsættes efter ELSE, hvor<br />

teksten ’Posten er fiktiv!’ udskrives.<br />

Denne struktur kan anvendes sammen med kommandoerne INSERT og UPDATE, der behandles senere<br />

i denne lektion.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

43


Åbning af faktisk post med INTRODUCE og index<br />

I de to foregående afsnit så vi, hvordan INTRODUCE anvendes til åbning af fiktive og faktiske poster.<br />

Der kan også åbnes faktiske poster alene med index.<br />

I dette tilfælde åbnes en faktisk post, udfyldt med værdier fra første post i det angivne index.<br />

Syntaks for åbning af faktisk post med INTRODUCE og index<br />

INTRODUCE [Indexnavn]<br />

Eksempel<br />

INTRODUCE CustTable [AccountIdx]<br />

PRINT ”Løbenummer...: ”,RowNumber<br />

PRINT ”Kontonummer..: ”,Account<br />

PRINT ”Navn.........: ”,Navn<br />

PAUSE<br />

I dette eksempel åbnes en faktisk post udfyldt med værdier fra det første kontonummer i indexet<br />

AccountIdx.<br />

Resultat<br />

Løbenummer...: 7<br />

Kontonummer..: 20000<br />

Navn.........: Central Kopiering<br />

Konto 20000 er den første i det anvendte index.<br />

Betydningen af index fremgår tydeligere, når retningskommandoerne FIRST, NEXT, PREV og LAST<br />

anvendes. Disse behandles i en efterfølgende lektion.<br />

INSERT, UPDATE, DELETE<br />

Fælles syntaks<br />

Kommandoerne INSERT, UPDATE og DELETE er transaktionskommandoer, der anvendes når der<br />

udføres transaktioner på poster i kartoteker.<br />

Syntaksen for de tre kommandoer er ens, idet alle efterfølges af navnet på det kartotek den aktuelle<br />

post tilhører.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

44


Syntaks for INSERT, UPDATE og DELETE<br />

INSERT <br />

UPDATE <br />

DELETE <br />

INSERT<br />

INSERT indsætter nye poster i et kartotek, hvor i de ikke findes i forvejen.<br />

Kommandoen kan således anvendes på fiktive tomme poster, der udfyldes med værdier.<br />

Kommandoen anvendes typisk i forlængelse af INTRODUCE, efter at der er indført en fiktiv post fra et<br />

kartotek, men den kan også benyttes i forbindelse med kommandoen READ til indlæsning af poster fra<br />

en fremmed fil.<br />

INSERT indsætter en post i det angivne kartotek, efter at den f.eks. er blevet tildelt værdier inde i<br />

kørslen. Feltet RowNumber udfyldes automatisk.<br />

Eksempel<br />

INTRODUCE CustTable<br />

SET Account = ”1000”<br />

SET Name = ”Søren Sørensen”<br />

SET Group = ”DK”<br />

INSERT CustTable<br />

I eksemplet indføres der en tom post fra debitorkartoteket (INTRODUCE CustTable) og felterne<br />

Account, Name og Group tildeles værdier med SET kommandoen (SET Account = ”1000” osv.) Til sidst<br />

indsættes/oprettes den udfyldte post i debitorkartoteket (INSERT CustTable).<br />

UPDATE<br />

UPDATE opdaterer eksisterende poster der findes i et kartotek i forvejen.<br />

Kommandoen anvendes typisk i forlængelse af INTRODUCE, efter at der er indført en faktisk post fra et<br />

kartotek .<br />

Kommandoen kan således anvendes på faktiske poster, der er udfyldt med værdier fra kartoteket, og<br />

hvor værdierne ændres med SET kommandoen.<br />

Eksempel med UPDATE<br />

INTRODUCE CustTable [AccountIdx,”100875”]<br />

IF CustTable.RowNumber THEN<br />

SET CustTable.Adress1 = ”Koldingvej 25”<br />

UPDATE CustTable<br />

ENDIF<br />

I dette eksempel indføres posten med nummer 100875 fra debitorkartoteket. Hvis den findes tildeles<br />

feltet Adress1 værdien ”Koldingvej 25”, hvorefter posten opdateres i kartoteket.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

45


DELETE<br />

DELETE sletter eksisterende poster der findes i forvejen i et kartotek.<br />

Kommandoen anvendes typisk i forlængelse af INTRODUCE, efter at der er indført en faktisk post fra et<br />

kartotek.<br />

Eksempel med DELETE<br />

INTRODUCE CustTable [AccountIdx==”100875”]<br />

IF CustTable.RowNumber THEN<br />

PRINT ”Posten blev fundet, og slettes nu!”<br />

DELETE CustTable<br />

ELSE<br />

PRINT ”Posten findes ikke, og kan ikke slettes!”<br />

ENDIF<br />

I dette eksempel undersøges det om posten findes, idet der checkes på RowNumber (IF<br />

CustTable.RowNumber THEN).<br />

Findes posten udskrives teksten ’Posten blev fundet, og slettes nu!’, hvorefter den slettes med<br />

kommandoen DELETE.<br />

Findes den ikke, er der ikke noget RowNumber og anden del af IF strukturen anvendes med teksten<br />

’Posten findes ikke, og kan ikke slettes!’.<br />

I stedet for PRINT sætninger, kan funktionen Box anvendes til at udskrive Advarselsbokse eller<br />

Infobokse.<br />

Eksempel med funktionen BOX til teksterne<br />

INTRODUCE CustTable [AccountIdx==”100875”]<br />

IF CustTable.RowNumber THEN<br />

SET BOX(1,”Posten blev fundet, og slettes nu!”,0)<br />

DELETE CustTable<br />

ELSE<br />

SET BOX(2,”Posten findes ikke, og kan ikke slettes!”,0)<br />

ENDIF<br />

INSERT/UPDATE i samme XAL kørsel<br />

Det kan sagtens lade sig gøre at udføre INSERT og UPDATE i samme XAL kørsel. Hvilken af de to<br />

kommandoer der skal anvendes i den aktuelle situation, bestemmes med kontrol af RowNumber.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

46


INSERT/UPDATE i samme XAL kørsel<br />

INTRODUCE CustTable [AccountIdx==”300”]<br />

SET CustTable.Name = ”Poul Poulsen”<br />

IF CustTable.RowNumber THEN<br />

UPDATE CustTable<br />

ELSE<br />

INSERT CustTable<br />

ENDIF<br />

I eksemplet forsøges det at åbne en post med kontonummer ’300’.<br />

Uanset om posten er fiktiv eller faktisk tildeles feltet CustTable.Name værdien ’Poul Poulsen’.<br />

I IF sætningen udføres der RowNumber kontrol, så det kan bestemmes om posten skal opdateres med<br />

navnet, eller der skal indsættes (oprettes) en ny post i kartoteket.<br />

Bemærk! Hvis posten ikke findes og der oprettes en fiktiv post, vil denne fiktive post automatisk blive<br />

tildelt værdien i det direkte opslag. I dette eksempel værdien ’300’.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

47


Opgaver: INTRODUCE og transaktionskommandoer<br />

Opgave 1: INTRODUCE med fiktiv post<br />

Formål med opgaven<br />

At anvende INTRODUCE og INSERT til at indsætte nye poster i et kartotek.<br />

Huskelister<br />

INTRODUCE<br />

Beskrivelse<br />

Kartoteket UDLUdlånsSats er helt tomt. Det skal udfyldes med varenumre fra lagerkartoteket<br />

InvenTable, og samtidig skal der indsættes faste procentsatser i felterne til UdlejningsPct og<br />

ForsikringsPct.<br />

Procenterne skal være ens for alle varer.<br />

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

2 Indsæt og tilret startkommentarer<br />

3 Introducer en tom post fra UDLUdlånsSats<br />

4 Indsæt en søgeløkke på lagerkartoteket InvenTable<br />

Forløb √<br />

5 I søgeløkken skal den tomme post tildeles værdier til felterne som følgende:<br />

ItemNumber fra lagerkartotekets varenummer<br />

UdlejningsPct skal være 10<br />

ForsikringsPct skal være 100<br />

6 Indsæt den udfyldte post i UDLUdlånsSats<br />

7 Godkend kørslen og afprøv den<br />

8 Kontrollér i et listbillede til kartoteket UDLUdlånsSats, at alle varerne er oprettet<br />

med procenter og at alle er ens.<br />

Hvis du ikke har et listbillede til UDLUdlånsSats, skal du lave et.<br />

(Anvend farvesæt 1 i listbilledet).<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

48


Opgave 2: INTRODUCE med faktisk post<br />

Formål med opgaven<br />

At afprøve kommandoen INTRODUCE med direkte opslag, for at åbne en bestemt post. Desuden<br />

skal der udføres RowNumber kontrol, for at undersøge om posten eksisterer.<br />

Huskelister<br />

INTRODUCE<br />

Beskrivelse<br />

Kartoteket UDLUdlånsSats er nu udfyldt med nyoprettede poster.<br />

Der skal oprettes en ny XAL kørsel, der starter med en promptboks, hvor i der spørges om et<br />

varenummer.<br />

Vise udlånssatser for varer<br />

Indtast varenummer :<br />

Efter indtastning af varenummer skal det undersøges, om nummeret findes i UDLUdlånsSats. Hvis det<br />

findes, skal det udskrives på skærmen med forskellige felter, som vist herunder.<br />

VareNummer...: 10-GC-1<br />

Udlejning....: 10,00<br />

Forsikring...: 110,00<br />

RowNumber...: 4<br />

Sidst rettet.: 07/09-07<br />

Hvis det ikke findes, skal der udskrives en advarselsboks om at varenummeret ikke findes.<br />

Varenummer 1234 findes ikke!<br />

OK<br />

Se forløbet næste side.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

49


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

2 Indsæt og tilret startkommentarer<br />

3 Spørg i en promptboks hvilket varenummer brugeren ønsker<br />

Husk at erklære en variabel først<br />

Forløb √<br />

Indsæt reference til kartoteket UDLUdlånsSats og feltet VareNummer<br />

4 Introducer UDLUdlånsSats med direkte opslag, og anvend det indtastede<br />

varenummer i opslaget<br />

5 I en IF struktur undersøges om der er et RowNumber<br />

Hvis der er det udskrives følgende felter på skærmen, med feltets eget navn som<br />

ledetekst foran:<br />

ItemNumber, UdlejningsPct, ForsikringsPct, RowNumber og LastChanged<br />

Hvis der ikke er et RowNumber, udskrives en advarselsboks med ’Varenummer xxx<br />

findes ikke!’. De tre xxx skal erstattes af varenummeret. Dvs. at varenummeret skal<br />

indbygges som en del af teksten.<br />

6 Godkend kørslen og afprøv den<br />

Indtast både varenumre der findes og ikke findes, så du kan se at begge<br />

muligheder fungerer.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

50


5. PROMPT, videregående brugerdialog<br />

Formål<br />

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

kommandoen PROMPT.<br />

Efter lektionen skal kursisterne, ud over de grundlæggende funktioner, kunne:<br />

Anvende funktionerne ASENUM, DECIMALS og LENGTH<br />

Indsætte forskellige datatyper i overskrifter og ledetekster<br />

Anvende GET på kartoteksfelter.<br />

Generelt om brugerdialoger<br />

Brugerdialoger med promptbokse anvendes til kommunikation mellem brugere og program. Hvor<br />

program kan være XAL kørsler, forms osv.<br />

I promptbokse kan programmøren stille spørgsmål til brugeren, der kan skrive svarene i<br />

indtastningsfelter. De indtastede værdier gemmes i variabler eller kartoteksfelter.<br />

Den grundlæggende opsætning af promptbokse er tidligere behandlet i lektionen ’PROMPT,<br />

grundlæggende brugerdialog’, og PROMPT med REF er tidligere behandlet i lektionen ’Brugerdialog<br />

med kartoteksopslag’.<br />

I denne lektion repeteres kort den grundlæggende opsætning, samt referenceopslag med REF.<br />

Derefter behandles udvidede funktioner i promptbokse i form af forskellige datatyper i overskrifter og<br />

ledetekster, GET på kartoteksfelter, funktionerne ASENUM, DECIMALS og LENGTH.<br />

Grundlæggende opsætning<br />

Den grundlæggende opsætning af kommandoen PROMPT består af en dialogboks med overskrift,<br />

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

Promptboks med overskrift, ledetekster og indtastningsfelter<br />

Ledetekster<br />

Indtast vareinformationer<br />

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

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

Overskrift<br />

Indtastningsfelter<br />

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

kommandoen GET.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

51


Grundlæggende promptboks med to spørgsmål og ekstra tekstlinjer<br />

STR 15 &Varenr<br />

STR 30 &VareNavn<br />

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

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

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

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

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

INPUT AT 15,4<br />

Resultat<br />

Varenummer ..:<br />

Varenavn ....:<br />

Se næste side en liste over vigtige punkter om grundlæggende opsætning af promptbokse.<br />

Punkter om grundlæggende opsætning af promptbokse:<br />

Overskrift og ledetekster skrives ALTID i anførselstegn<br />

Indtastningsfelter dannes af GET efterfulgt af variabel i ()<br />

Variabler erklæres i toppen af kørslen<br />

Der skal altid være mindst én GET kommando<br />

Der tillades ledetekster uden GET kommando<br />

Der tillades GET kommandoer uden ledetekst<br />

Linjeskift udføres på kommaernes placering<br />

Hvert komma medfører et linjeskift<br />

Efter overskriften indsættes altid et ekstra komma<br />

Der udføres ikke linjeskift ved komma efter den sidste linje<br />

Blanke linjer indsættes med ekstra kommaer<br />

Indtast vareinformationer<br />

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

Gerne være alfanumerisk.<br />

Der dannes ikke linjeskift ved kommaer i overskrifter og ledetekster<br />

Med INPUT placeres promptbokse i vinduets øverste venstre hjørne<br />

Med INPUT AT placeres øverste venstre hjørne af promptbokse i angivne kolonne og linje.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

52


Tillægskommandoer<br />

REF<br />

Udtrykket REF anvende i forbindelse med indtastningsfelter, hvori der indtastes værdier, der findes i<br />

andre kartoteker. Ved hjælp af REF får brugeren mulighed for, med ALT+H i indtastningsfeltet, at få en<br />

liste over mulige værdier i kartoteket. Én af værdierne kan vælges og overføres til indtastningsfeltet.<br />

Grundlæggende promptboks med REF<br />

STR 15 &Varenr<br />

STR 30 &VareNavn<br />

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

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

InvenTable.VareNummer),<br />

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

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

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

INPUT AT 15,4<br />

REF efterfølges altid af navne på kartotek og felt der refereres til. Navnene adskilles med et punktum.<br />

Resultat<br />

(Listbillede fra InvenTable)<br />

Varenummer ..:<br />

Varenavn ....:<br />

Bemærk! Findes der et listbillede med samme navn som referencefeltet, vises dette listbillede.<br />

Sammenbyggede tekster<br />

ALT+H<br />

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

Gerne være alfanumerisk.<br />

Overskrifter og ledetekster i promptbokse kan udvides og bygges sammen med værdier fra andre<br />

datatyper f.eks. variabler, kartoteksfelter, funktioner og macroer.<br />

Teksterne kan således opsættes til at vise varierende tekst, afhængigt af de værdier de bygges sammen<br />

med.<br />

Syntaks for sammenbygning af tekst med andre typer værdier<br />

”Tekst” + + ”Tekst”<br />

Indtast vareinformationer<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

53


Tekster bygges sammen med andre typer værdier ved hjælp af plus tegnet. Hensigten er, at plus<br />

tegnet skal knytte det hele sammen til én lang tekststreng.<br />

I syntaksen herover er f.eks. variabler, kartoteksfelter, funktioner osv.<br />

Da teksterne står i anførselstegn og bygges sammen med værdier der ikke gør det, kræver det, at disse<br />

værdier i sig selv er tekst eller konverteres til tekst.<br />

Konvertering af forskellige datatyper til tekst<br />

Datatype Funktion Konvertering til tekst<br />

INT INT2STR Heltal vises som de er<br />

NUM2STR Heltal vises som kommatal (format kan bestemmes)<br />

REAL NUM2STR Kommatal vises som kommatal (format kan ændres)<br />

INT2STR Kommatal vises som heltal (decimaler fjernes)<br />

STR Ingen Behøver ikke konvertering<br />

DATE DATE2STR Datoer vises i standardformat (format kan ændres)<br />

ENUM ENUM2STR Talværdien konverteres til tilsvarende fasttekst<br />

Funktionerne, vises på næste side, anvendt i eksempler uden yderligere forklaring på deres opbygning.<br />

Der henvises til lektionerne om funktioner grundlæggende og videregående, samt til huskelister om<br />

disse.<br />

Eksempel på forskellige konverteringer til tekst<br />

REAL &NyMax<br />

SEARCH CustTable<br />

SET &NyMax = BalanceMax<br />

PROMPT ”Kontrol af konto” + Account + ” ” + Name,,,<br />

”Kreditmax: ” + NUM2STR(BalanceMax,12,2,1,0),<br />

”Saldo....: ” + NUM2STR(BalanceMST,12,2,1,0),<br />

” ------------”,<br />

”Forskel..: ” + NUM2STR(BalanceMax-<br />

BalanceMST,12,2,1,0),,<br />

”S.rettet : ” + DATE2STR(LastChanged,123,2,2,2,2,2),<br />

”Spærret..: ” + ENUM2STR(Blocked),,,<br />

”Ny max...: ” GET (&NyMax)<br />

INPUT AT 10,3<br />

SET BalanceMax = &NyMax<br />

UPDATE CustTable<br />

END<br />

I eksemplet bygges teksten i overskriften sammen med felterne Account og Name der begge er<br />

tekstfelter og derfor ikke skal konverteres.<br />

Funktionen NUM2STR() konverterer felterne BalanceMax og BalanceMST. Den beregnede forskel<br />

konverteres på samme måde.<br />

DATE2STR konverterer datofeltet LastChanged og ENUM2STR konverterer værdien i feltet spærret.<br />

Bemærk at der på begge sider af plusserne er indsat mellemrum. Det er ikke nødvendigt,<br />

promptboksen fungere også uden.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

54


Hensigten med eksemplet er at gennemløbe debitorkartoteket. For hver debitor vises promptboksen<br />

med de sammenbyggede tekster og ét indtastningsfelt på variablen &NyMax.<br />

Brugeren kan læse de forskellige informationer og indtaste en ny kreditmax.<br />

Efter hver enkelt debitor sættes feltet BalanceMax lig med variablen &NyMax, hvorefter<br />

debitorkartoteket opdateres med den nye værdi (UPDATE CustTable). UPDATE kommandoen<br />

behandles andet sted i kursusmaterialet.<br />

Resultat<br />

GET på felter<br />

Kontrol af 42983214 Super Korn A/S<br />

Kreditmax: 100000,00<br />

Saldo....: 30145,90<br />

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

Forskel..: 69854,10<br />

S.rettet : 29.08.06<br />

Spærret..: Nej<br />

Ny max...:<br />

GET kommandoen anvendes sammen med en variabler i (), til at danne indtastningsfelter i<br />

promptbokse. Variablerne modtager de værdier der skrives i indtastningsfelterne.<br />

GET kommandoen kan imidlertid også anvendes på kartoteksfelter, så disse felter direkte modtager<br />

den indtastede værdi.<br />

Felter kan kun anvendes, når kartoteker har virkefelt. Det vil sige, at kartoteket skal være åbnet med<br />

kommandoen SEARCH eller INTRODUCE.<br />

Bemærk! De indtastede værdier opdateres ikke automatisk på selve kartoteket. Dette skal udføres<br />

med kommandoen UPDATE.<br />

Eksempel på GET til kartoteksfelt<br />

50000,00<br />

SEARCH CustTable<br />

PROMPT ”Kontrol af konto” + Account + ” ” + Name,,,<br />

”Kreditmax: ” + NUM2STR(BalanceMax,12,2,1,0),<br />

”Saldo....: ” + NUM2STR(BalanceMST,12,2,1,0),<br />

” ------------”,<br />

”Forskel..: ” + NUM2STR(BalanceMax-<br />

BalanceMST,12,2,1,0),,<br />

”S.rettet : ” + DATE2STR(LastChanged,123,2,2,2,2,2),<br />

”Spærret..: ” + ENUM2STR(Blocked),,,<br />

”Ny max...: ” GET (BalanceMax)<br />

INPUT AT 10,3<br />

UPDATE CustTable<br />

END<br />

Eksemplet er det samme som i forrige afsnit. I dette eksempel er der dog ingen variabler til<br />

BalanceMax. I stedet anvendes GET kommandoen direkte sammen med kartoteksfeltet BalanceMax<br />

(GET (BalanceMax))<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

55


Resultat<br />

ASENUM<br />

ASENUM har ikke noget at gøre med de fastteksttyper der oprettes og vedligeholdes i kartotekerne.<br />

ASENUM får blot et indtastningsfelt til at fungere, som om der ligger en fasttekst bag. Det gør der i<br />

realiteten også, men den er indbygget direkte i indtastningsfeltet.<br />

Eksempel på anvendelse af ASENUM<br />

INT &Farve<br />

Kontrol af 42983214 Super Korn A/S<br />

Kreditmax: 100000,00<br />

Saldo....: 30145,90<br />

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

Forskel..: 69854,10<br />

S.rettet : 29.08.07<br />

Spærret..: Nej<br />

Ny max...:<br />

PROMPT ”Vælg farve: ” GET (&Farve ASENUM ”Rød\nGrøn\nGul”)<br />

INPUT<br />

ASENUM angives sidst i parentesen, efterfulgt af en række tekster adskilt af \n. Det skal være et lille n<br />

og tekstrækken sættes i anførselstegn.<br />

Indtastningsfeltet fungerer som et almindeligt felt med en fasttekst. I stedet for at hente de faste<br />

tekster i en fastteksttype, er de bare indbygget direkte i feltet.<br />

De værdier der gemmes i variablen eller feltet, er som ved almindelige fasttekster ikke selve teksten,<br />

men tekstens nummer i tekstrækken startende med nummer nul for den første tekst.<br />

Værdien der gemmes, er således et heltal, hvilket betyder at variablen eller feltet også skal være af<br />

typen heltal.<br />

HUSK! Første tekst er nummer nul.<br />

50000,00<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

56


Eksempel med ASENUM<br />

REAL &Kurs = 4.468 {100 xx (valuta) i DKK}<br />

REAL &Beløb<br />

INT &Metode<br />

PROMPT ”Omregning af valuta”,,,<br />

”Indstil kurs .........: ” GET (&Kurs),<br />

”(Beløb i DKK svarende til”,<br />

”100 enheder i fremmed valuta!”,,,<br />

”Beløb..: ” GET (&Beløb),<br />

”Metode.: ” GET (&Metode ASENUM ”Til fremmed\nTil DKK”),<br />

INPUT<br />

IF &Metode == 0 THEN<br />

PRINT ”DKK til fremmed valuta: ”, &Beløb/&Kurs*100<br />

ELSE<br />

PRINT ”Fremmed valuta til DKK: ”, &Beløb*&Kurs/100<br />

ENDIF<br />

PAUSE<br />

Ovenstående eksempel er beregnet til omregning af valuta. Der er to metoder, idet et indtastet beløb<br />

kan omregnes til fremmed valuta eller til danske kroner.<br />

I eksemplet anvendes ASENUM til variablen &Metode, så der kan vælges mellem værdierne ’Til<br />

fremmed’ og ’Til DKK’.<br />

I IF sætningen checkes om metoden er lig med nul, der svarer til den første tekst.<br />

Resultat<br />

Taster der ALT+H indtastningsfeltet til metode vises listen over de indbyggede fasttekster, hvorfra der<br />

kan vælges en.<br />

DECIMALS<br />

Indstil kurs .........: 4,47<br />

(Beløb i DKK svarende til<br />

100 enheder i fremmed valuta!)<br />

Beløb..:<br />

Metode.:<br />

Omregning af valuta<br />

0,00 Til fremmed<br />

Til fremmed ALT+H<br />

Til DKK<br />

Med udtrykket DECIMALS angives hvor mange decimaler, der kan indtastes og vises i indtastningsfelter<br />

i promptbokse.<br />

Udtrykket kan kun anvendes ved indtastningsfelter til variabler og felter af typen REAL.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

57


Værdien angives som et heltal f.eks. 4, der betyder at der kan indtastes og vises tal med fire decimaler.<br />

Standardværdien er to decimaler.<br />

DECIMALS placeres til sidst (også efter evt. LENGTH).<br />

Uden DECIMALS<br />

I indtastningsfelter uden DECIMALS, hvor værdien er nul vises værdien 0,00. Der vises de to decimaler,<br />

som er standard.<br />

Der kan udmærket indtastes tal med flere decimaler, f.eks. 250,2234 der er et tal med fire decimaler. Så<br />

snart feltet forlades, ændres værdien dog til den afrundede værdi med to decimaler. Det er desuden<br />

også den afrundet værdi, der gemmes i variablen eller feltet<br />

Med DECIMALS<br />

I indtastningsfelter med DECIMALS, hvor værdien er nul, vises værdien nul komma efterfulgt af så<br />

mange nuller som angivet med DECIMALS.<br />

Indtastes et tal med det givne antal decimaler f.eks. 4 decimaler som i tallet 250,2234 vises tallet med<br />

de fire decimaler, også når indtastningsfeltet forlades. Det er også tallet med de fire decimaler, der<br />

gemmes i variabler eller felter.<br />

Eksempel med ASENUM<br />

REAL &Kurs = 4.468 {100 enheder i fremmed valuta i DKK}<br />

REAL &Beløb<br />

INT &Metode<br />

PROMPT ”Omregning af valuta”,,,<br />

”Indstil kurs .........: ” GET (&Kurs DECIMALS 4),<br />

”(Beløb i DKK svarende til”,<br />

”100 enheder i fremmed valuta!”,,,<br />

”Beløb..: ” GET (&Beløb),<br />

”Metode.: ” GET (&Metode ASENUM ”Til fremmed\nTil DKK”),<br />

INPUT<br />

IF &Metode == 0 THEN<br />

PRINT ”DKK til fremmed valuta: ”, &Beløb/&Kurs*100<br />

ELSE<br />

PRINT ”Fremmed valuta til DKK: ”, &Beløb*&Kurs/100<br />

ENDIF<br />

PAUSE<br />

Ovenstående eksempel er det samme i forrige afsnit. Forskellen er at der i det ovenstående eksempel<br />

anvendes DECIMALS 4 til kursen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

58


Resultat<br />

Kursen kan i eksemplet indtastes med fire decimaler og giver en mere korrekt udregning.<br />

LENGTH<br />

Indstil kurs .........: 4,4680<br />

(Beløb i DKK svarende til<br />

100 enheder i fremmed valuta!)<br />

Beløb..:<br />

Metode.:<br />

LENGTH angiver længden på indtastningsfelter i promptbokse.<br />

Udtrykket kan anvendes på alle typer variabler og kartoteksfelter INT, REAL, STR, DATE og ENUM.<br />

Værdien angives som et helt tal, f.eks. 15, som betyder at pågældende indtastningsfelt, vises som<br />

værende 15 tegn langt.<br />

I promptbokse placeres LENGTH med talværdien lige efter navnet på variabler eller felter, der skal vises<br />

med en bestemt længde.<br />

Grundlæggende promptboks med to spørgsmål og ekstra tekstlinjer<br />

STR 15 &Varenr<br />

STR 30 &VareNavn<br />

0,00<br />

Til fremmed<br />

Omregning af valuta<br />

ALT+H<br />

Til fremmed<br />

Til DKK<br />

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

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

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

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

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

INPUT AT 15,4<br />

I dette eksempel anvendes LENGTH 15 i feltet med variablen &Navn. Variablen er erklæret med 30<br />

tegn.<br />

Det betyder at der kan indtastes 30 tegn, selv om feltet kun vises med 15 tegn.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

59


Resultat<br />

Indtast vareinformationer<br />

Varenummer ..:<br />

Varenavn ....:<br />

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

Gerne være alfanumerisk.<br />

På næste side vises et skema med informationer standardværdier og de mulige ændringer, samt<br />

betydningen af evt. ændringer.<br />

LENGTH på forskellige variabel og felttyper<br />

Datatyper Bemærkning<br />

INT Standardværdi 12 tegn<br />

Sættes længden mindre end tolv tegn kan der ikke tastes tal, der fylder<br />

mere end indtastningsfeltets længde.<br />

Sættes længden større end standardværdien kan der tastes så meget, der<br />

er plads til, men der er en øvre og nedre grænse på størrelse af heltal.<br />

Hvis indtastede tal passerer denne grænse vises en Infoboks med besked<br />

om at tallet ligger uden for grænserne. Desuden vises grænseværdierne.<br />

REAL Standardværdi 12 tegn. Længden på kommatalsfelter kan både sættes til<br />

at være større og mindre en 12 tegn.<br />

Uafhængigt af feltets størrelse kan der altid indtastes tal der fylder mere<br />

end feltets længde. Hvis dette er tilfældet udfyldes feltet med *.<br />

STR Standardværdi er variablers længde under erklæring eller feltlængde i<br />

databasedefinition.<br />

I visse tilfælde er det ønskeligt at tilpasse feltlængden til andre feltet i<br />

promptbokse, så den bliver samme længde.<br />

Sættes længden mindre end standardværdien, er det alligevel muligt at<br />

indtaste det fulde antal tegn som standardlængden bestemmer, teksten<br />

forrykkes blot mod venstre under indtastningen.<br />

Sættes længden større end standardværdien, kan der kun indtastes det<br />

antal tegn, der er i standardværdien.<br />

DATE Standardværdi 12 tegn<br />

Fuld dato kan indtastes eller hentes med ALT+ H. Er der ikke plads til at<br />

vise datoen, vises kun det, der er plads til.<br />

ENUM Standardværdi 12 tegn<br />

Da standardværdien er 12 tegn er det ikke altid den fulde tekst kan ses i<br />

indtastningsfeltet.<br />

Fastteksttypen ’Lagerbevægelse’ har f.eks. flere tekster, der er længere<br />

end de 12 tegn. F.eks. ’Produktionslinje’ og ’Styklistefantom’.<br />

Skal disse ord vises i deres fulde længde er det nødvendigt at indsætte<br />

LENGTH.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

60


Opgaver: PROMPT, videregående brugerdialog<br />

Opgave 1: PROMPT med GET på kartoteksfelter<br />

Formål med opgaven<br />

At afprøve kommandoen PROMPT med GET direkte på kartoteksfelter i stedet for variabler<br />

At anvende kommandoen UPDATE til at opdatere poster, der er ændret i.<br />

Beskrivelse<br />

Kartoteket UDLUdlånsSats er udfyldt med nyoprettede poster.<br />

I forrige opgave oprettede du en promptboks, hvori der promptes for varenummer.<br />

Med løbenummer kontrol undersøges om varenummeret findes og hvis det gør det, udskrives værdier<br />

fra den fundne post, ellers udskrives en advarselsboks med besked om at posten ikke findes.<br />

I denne opgave skal der oprettes endnu en promptboks til indtastning af nye satser.<br />

Promptboksen skal vises på skærmen, efter at printlinjerne er udskrevet med satser for den<br />

pågældende vare.<br />

Udlejningssats...:<br />

Forsikringssats..:<br />

VareNummer...: 10-GC-1<br />

Udlejning....: 10,00<br />

Forsikring...: 110,00<br />

LøbeNummer...: 4<br />

Sidst rettet.: 07/09-99<br />

Det skal således være muligt, på det varenummer der vælges, at indtaste nye satser i felterne<br />

UdlejningsPct og ForsikringsPct. Efter ændringen skal posten opdateres med UPDATE, så ændringerne<br />

gemmes i kartoteket.<br />

Den nye promptboks og UPDATE skal indsættes efter printlinjerne før ELSE.<br />

Se forløbet på næste side:<br />

Satser for varenummer<br />

10,00<br />

110,00<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

61


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

Forløb √<br />

2 Kopiér alle kodelinjer fra forrige opgave, og foretag nødvendige ændringer i<br />

standardkommentarerne.<br />

3 Spørg i en ny promptboks om nye værdier til felterne UdlejningsPct og<br />

ForsikringsPct.<br />

I promptboksen skal de indtastede værdier gemmes direkte i kartoteksfelterne.<br />

4 Opdatér kartoteket med udlånssatserne.<br />

5 Godkend kørslen og afprøv den.<br />

Indtast både varenumre der findes og ikke findes, så du kan se at begge<br />

muligheder fungerer.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

62


Opgave 2: PROMPT med udvidede faciliteter<br />

Formål med opgaven<br />

At afprøve kommandoen PROMPT med LENGTH og DECIMALS, samt indbygge felter direkte i<br />

ledeteksten i en promptboks.<br />

Beskrivelse<br />

I forrige opgave oprettede du en promptboks til indtastning af nye satser.<br />

I denne opgave skal du ændre i opsætningen af boksen.<br />

I ledeteksten skal du indbygge varenummeret, så det indgår som en del af selve teksten. Desuden skal<br />

du i begge felter indsætte en fast længde på fem tegn og der skal kun være én decimal.<br />

VareNummer...: 10-GC-1<br />

Udlejning....: 10,00<br />

Forsikring...: 110,00<br />

LøbeNummer...: 4<br />

Sidst rettet.: 07/09-08<br />

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

Satser for varenummer 10-GC-1<br />

Udlejningssats...:<br />

Forsikringssats..:<br />

Forløb √<br />

2 Kopiér alle kodelinjer fra forrige opgave, og foretag nødvendige ændringer i<br />

standardkommentarerne.<br />

3 I promptboksen til indtastning af satser skal du i overskriften indføje feltet<br />

VareNummer, så det fremgår af overskriften når brugeren ser den på skærmen.<br />

Desuden skal begge feltet sættes til en længde på 5 tegn, og 1 decimal.<br />

4 Godkend kørslen og afprøv den.<br />

Kontrollér at de nye faciliteter fungerer.<br />

10,0<br />

110,0<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

63


Opgave 3: PROMPT med indbygget fasttekst<br />

Formål med opgaven<br />

At afprøve kommandoen PROMPT med indbygget fasttekst og at anvende de indtastede værdier i<br />

en IF sætning.<br />

Beskrivelse<br />

I forrige opgave er der en promptboks til indtastning af nye satser i de enkelte varenumre.<br />

Opgaven skal ændres så der i den første promptboks, hvor der spørges om varenummer, også spørges<br />

om varenummeret kun skal vises, eller det også skal være muligt at ændre satser.<br />

Indtast varenummer:<br />

Vise eller ændre..:<br />

Forespørgslen udfærdiges med ASENUM, og der skal være to muligheder ’Vise’ og ’Ændre’.<br />

Vælges ’Ændre’ fremkommer promptboksen til indtastning af satser i de to felter.<br />

VareNummer...: 10-GC-1<br />

Udlejning....: 10,00<br />

Forsikring...: 110,00<br />

LøbeNummer...: 4<br />

Sidst rettet.: 07/09-08<br />

Svaret indbygges i en IF sætning der omklamrer promptboksen med satsfelterne.<br />

Se forløbet på næste side.<br />

Udlånssatser<br />

Vise<br />

Satser for varenummer 10-GC-1<br />

Udlejningssats...:<br />

Forsikringssats..:<br />

10,0<br />

110,0<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

64


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

Forløb √<br />

2 Kopiér alle kodelinjer fra forrige opgave, og foretag nødvendige ændringer i<br />

standardkommentarerne.<br />

3 I promptboksen til indtastning af varenummer skal der tilføjes et ekstra felt med en<br />

variabel. Feltet skal fungere som indbygget fasttekst med værdierne ’Vise’ på pos 0<br />

og ’Ændre’ pos 1.<br />

Indtastningsfeltet sættes til en længde på 10 tegn.<br />

4 Den værdi der indtastes i det nye felt med den indbyggede fasttekst, skal anvendes<br />

i en IF sætning hvor det kontrolleres om der svares ’Vise’ eller ’Ændre’.<br />

Det er kun når der svares ’Ændre’ at promptboksen med sats felterne skal aktiveres<br />

sammen med opdateringskommandoen.<br />

5 Svares der ’vise’ er det således kun printlinjerne, der skal vises på skærmen.<br />

Svares der ’Ændre’ skal printlinjerne vises først, hvorefter promptboksen med sats<br />

felterne fremkommer.<br />

Find det rigtige sted at indsætte PAUSE.<br />

6 Godkend kørslen og afprøv den.<br />

Kontrollér at de nye faciliteter fungerer.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

65


6. Videregående løkkekommandoer<br />

Formål<br />

Formålet med denne lektion er at lære at anvende kommandoen WHILE.<br />

Efter denne lektion skal kursisterne kunne:<br />

Anvende kommandoen WHILE.<br />

Generelt<br />

Løkker er gentagelser af de samme kommandoer flere gange efter hinanden.<br />

Kommandoen SEARCH er f.eks. en løkke. Den er afhængig af, at der er poster i et kartotek, og den<br />

udføres, indtil der ikke er flere poster at søge i.<br />

De kommandoer, der befinder sig mellem SEARCH og END, gentages hver gang en ny post findes<br />

frem.<br />

Kommandoen WHILE er også en løkkekommando, der udfører indeholdte kommandoer et antal<br />

gange.<br />

WHILE<br />

WHILE er også en løkke, men i modsætning til SEARCH løkken gennemløber den ikke kartoteker.<br />

WHILE er afhængig en betingelse i form af et boolsk udtryk. Den udføres et vilkårligt antal gange<br />

afhængigt af, om denne betingelse er opfyldt.<br />

Syntaks<br />

WHILE <br />

[]<br />

END<br />

WHILE løkker anvendes typisk til at foretage en række kommandoer et bestemt antal gange. Hvor<br />

mange gange afhænger af om værdien i det boolske udtryk evaluerer til sand eller falsk.<br />

Så længe udtrykket er sandt udføres løkken, og de indbyggede kommandoer gentages.<br />

Eksempel<br />

INT &Nummer<br />

WHILE &Nummer < 12<br />

#Add(&Nummer,1)<br />

PRINT ”Nummer: ”,&Nummer<br />

END<br />

PAUSE<br />

I ovenstående eksempel erklæres der en heltalsvariabel &Nummer.<br />

WHILE løkken er afhængig af det boolske udtryk ”&Nummer < 12”.<br />

Løkken udføres og kommandoerne gentages, så længe variablen &Nummer er mindre end værdien 12.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

66


I eksemplet består kommandoerne af en optælling af variablen &Nummer og en printsætning, der<br />

udskriver værdien.<br />

Det er vigtigt at programmøren selv sørger for at stoppe løkken, idet den ellers fortsætter i det<br />

uendelige.<br />

Idet variablen erklæres, får den automatisk værdien nul. Inde i løkken lægges der én til variablen ved<br />

hver gentagelse, og i det øjeblik variablen bliver 12, standses løkken, da betingelsen ikke længere er<br />

opfyldt.<br />

MthName()<br />

Eksemplet kunne ændres til noget mere fornuftigt, idet kørslen kunne sættes til at udskrive<br />

månedernes navne.<br />

Funktionen MthName() kan anvendes til dette. Den er nem at anvende, idet der som parameter i<br />

Parenteserne kun skal tilføjes en værdi i form af et heltal. Ved at indsætte variablen i Parenteserne,<br />

tilføjes funktionen nye værdier ved hver enkelt gentagelse af løkken.<br />

Eksempel på løkke med måneder<br />

INT &Nummer<br />

WHILE &Nummer < 12<br />

#Add(&Nummer,1)<br />

PRINT MthName(&Nummer)<br />

END<br />

PAUSE<br />

Resultat<br />

Januar<br />

Februar<br />

Marts<br />

April<br />

Maj<br />

Juni<br />

Juli<br />

August<br />

September<br />

Oktober<br />

November<br />

December<br />

Afbrydelse af WHILE løkke vha. promptboks<br />

WHILE løkker kan også afbrydes ved at indsætte en promptboks, der spørger brugeren om en værdi,<br />

der indgår i betingelsen til løkken.<br />

Brugeren kan således selv bestemme, hvornår løkken skal afbrydes, idet der kan indtastes en værdi der<br />

får udtrykket til at evaluere til falsk, så løkken stopper.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

67


Eksempel på WHILE løkke med prompt<br />

ENUM NejJa &Ok = 1<br />

INT &Nummer<br />

WHILE &Ok == 1<br />

PRINT &Nummer<br />

#Add(&Nummer,1)<br />

END<br />

PAUSE<br />

Resultat<br />

PROMPT ”Skal der fortsat tælles op? ”,,<br />

”Tæl op Nej/Ja : ” GET(&Ok)<br />

INPUT<br />

Skal der fortsat tælles op?<br />

Tæl op Nej/Ja: Ja<br />

1<br />

2<br />

3<br />

4<br />

5<br />

WHILE løkker er således meget anvendelige til gentagelser af forskellige kommandoer. Det er bare<br />

vigtigt, at de opbygges på en sådan måde, at de afbrydes ved hjælp af kode eller ved hjælp af<br />

promptboks til brugeren, så brugeren selv kan bestemme. hvornår afbrydelsen skal finde sted.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

68


Opgaver: Videregående løkkekommandoer<br />

Opgave 1: WHILE til kontrol af værdier i PROMPT<br />

Formål med opgaven<br />

At afprøve kommandoen WHILE sammen med en promptboks, så det styres at promptboksen<br />

ikke kan forlades, hvis de opstillede betingelser ikke er opfyldt.<br />

Beskrivelse<br />

I forrige opgave er der en promptboks til indtastning af nye satser i de enkelte varenumre.<br />

Opgaven skal ændres, så der ikke kan indtastes satser, der er mindre end eller lig med nul.<br />

Promptboksen må altså ikke forlades før, der indtastes korrekte værdier i begge felter.<br />

VareNummer...: 10-GC-1<br />

Udlejning....: 10,00<br />

Forsikring...: 110,00<br />

LøbeNummer...: 4<br />

Sidst rettet.: 07/09-99<br />

Indtastes der nul eller mindre, skal der vises en info- eller advarselsboks til hver af de to felter som vist<br />

herunder.<br />

Til feltet UdlejningsPct.<br />

Til feltet ForsikringsPct.<br />

Opgaven løses ved at indsætte promptboksen i en WHILE løkke, og med IF sætninger sikre at løkke<br />

ikke forlades hvis der tastes forkert i et af de to felter.<br />

Se forløbet på næste side.<br />

Satser for varenummer 10-GC-1<br />

Udlejningssats...:<br />

Forsikringssats..:<br />

ForsikringsPct SKAL være større end nul!<br />

OK<br />

0,0<br />

0,0<br />

UdlejningsPct SKAL være større end nul!<br />

OK<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

69


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

Forløb √<br />

2 Kopiér alle kodelinjer fra forrige opgave, og foretag nødvendige ændringer i<br />

standardkommentarerne.<br />

3 Der skal indsættes en WHILE løkke, der omkranser promptboksen med<br />

satsfelterne.<br />

4 Inde i WHILE løkken efter promptboksen skal der indsættes en IF sætning for hvert<br />

indtastningsfelt.<br />

I IF sætningen undersøges om værdien er mindre end eller lig med nul.<br />

Hvis den er det, må WHILE løkken ikke forlades, og der skal opstilles en info- eller<br />

advarselsboks med teksten ”UdlejningsPct SKAL være større end nul!” for det ene<br />

felt, og teksten ”ForsikringsPct SKAL være større end nul!” for det andet felt.<br />

5 Godkend kørslen og afprøv den.<br />

Kontrollér at de nye faciliteter fungerer.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

70


7. READ og WRITE<br />

Formål<br />

Formålet med denne lektion er at give deltagerne grundlæggende indsigt i anvendelsen af<br />

kommandoerne READ og WRITE, så de bliver i stand til at importere og exportere kommafiler og andre<br />

filer med faste formater.<br />

Efter denne lektion skal kursisterne kunne anvende kommandoerne:<br />

READ<br />

WRITE<br />

CLOSE<br />

Generelt<br />

Import og export af data til og fra C5 kan udføres ved hjælp af ’Datamanipulation’, hvor brugeren i<br />

skærmbilleder udfylder forskellige felter om importen eller exporten.<br />

Det er ligeledes muligt at gemme opsætningen, så samme opsætning kan anvendes igen.<br />

Programmører eller brugere med adgang til programmeringssproget, har dog også mulighed for selv<br />

at oprette XAL kørsler til import og export af data.<br />

Dette udføres med kommandoerne READ og WRITE, hvor den grundlæggende anvendelse af de to<br />

kommandoer behandles i denne lektion.<br />

READ<br />

Kommandoen READ anvendes til læsning (import) af eksterne filer.<br />

READ er i virkeligheden en løkke, idet den gennemløber samtlige poster i den eksterne fil.<br />

Gennemløbet kan kun udføres sekventielt fra den ene ende til den anden, og der er ikke mulighed for<br />

at indsætte afgrænsninger.<br />

Syntaks<br />

READ AS<br />

[INTO ]<br />

[]<br />

END<br />

Filnavn<br />

Filnavn er fulde stinavn på den fil, der skal åbnes til læsning. Befinder filen sig der, hvor Microsoft<br />

Dynamics C5 er installeret, er det nok at angive filnavnet. (I forbindelse med SQL og ODBC udfyldes<br />

’filnavn’ med et SQL statement).<br />

Filtype<br />

Filtype er formatet på den eksterne fil.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

71


Skabelon<br />

Skabelon består af en række pladser adskilt af kommaer. Hver plads svarer til et af felterne i de poster,<br />

der læses i den fremmede fil.<br />

Overførsel fra fremmed fil til skabelon<br />

Fremmed fil Skabelon<br />

Felt 1 Plads 1<br />

Felt 2 Plads 2<br />

Felt 3 Plads 3<br />

Osv. Osv.<br />

Variabler<br />

Pladserne i skabelonen kan f.eks. udfyldes med navne på variabler, der skal modtage de læste data.<br />

Eksempel 1 (Skabelon med variabler)<br />

STR 10 &KontoNummer<br />

STR 20 &Navn<br />

STR 10 &Telefon<br />

REAL &SaldoDkr<br />

READ “Debitor” AS COMMA<br />

INTO(&KontoNummer, &Navn, &Telefon, &SaldoDkr)<br />

PRINT &KontoNummer, &Navn, &Telefon, &SaldoDkr<br />

END<br />

PAUSE<br />

I eksemplet erklæres én variabel til hver af de fire felter i filen. Det forudsættes at posterne i filen består<br />

af de nævnte fire felter.<br />

Skabelonens pladser udfyldes med de fire variabler, som tildeles værdierne under kørslen.<br />

Kartoteksfelter<br />

Pladserne kan også udfyldes med kartoteksfelter. Kartoteket skal i så fald først introduceres, så felterne<br />

er til rådighed.<br />

Eksempel 2 (Skabelon med kartoteksfelter)<br />

INTRODUCE CustTable<br />

READ “Debitor” AS COMMA<br />

INTO(Account, Name, Phone, BalanceMST)<br />

PRINT Account, Name, Phone, BalanceMST<br />

END<br />

PAUSE<br />

I eksempel 2 er skabelonen udfyldt med kartoteksfelter, der modtager data under kørslen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

72


Tomme pladser<br />

Under indlæsning af en post læses alle felter på en gang og værdierne tildeles pladserne i skabelonen.<br />

Hvis et af de læste felter ikke skal anvendes, skal den pågældende plads mellem to kommaer være<br />

tom.<br />

Eksempel 3 (Skabelon med tom plads)<br />

INTRODUCE CustTable<br />

READ “Debitor” AS COMMA<br />

INTO(Account, Name, , BalanceMST)<br />

PRINT Account, Name, BalanceMST<br />

END<br />

PAUSE<br />

I eksempel 3 forudsættes det, at filen er den samme som i de to tidligere eksempler. Felt tre er således<br />

feltet Phone, der ikke skal anvendes.<br />

Da alle felter alligevel indlæses, lades plads tre tom i skabelonen.<br />

Samme datatyper i eksterne fil og skabelon<br />

Felterne i de eksterne filer beskrives ikke i C5. Derfor er det ikke muligt at kontrollere om felterne er af<br />

samme type som dataelementerne i skabelonen. Programmøren skal således selv sikre sig, at der er<br />

overensstemmelse mellem værdierne, der indlæses og elementerne i skabelonen.<br />

Udlægningen og typen af dataelementerne i skabelonen, skal derfor svare til udlægningen og typen af<br />

felterne i kartoteket.<br />

WRITE<br />

WRITE anvendes til at skrive data fra C5 til eksterne filer.<br />

WRITE er ikke en løkke, men en Kommando. Skal der udskrives poster fra et kartotek, er det derfor<br />

nødvendigt at WRITE indgår i en søgeløkke med SEARCH.<br />

Syntaks<br />

WRITE AS <br />

FROM ()<br />

Filnavn<br />

Filnavn skal være udtrykt som det fulde stinavn. Findes filen det sted, hvor C5 er installeret, er det nok<br />

at skrive selve filnavnet.<br />

Filtype<br />

Filtype er en af de faste typer.<br />

Udtryk<br />

Udtryk er en liste over værdier, der skal skrives i den fremmede fil.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

73


Værdierne kan opstilles i form af f.eks. kartoteksfelter, variabler og tekster i anførselstegn. De<br />

forskellige værdier adskilles med kommaer.<br />

Eksempel 1 (Udskrivning af kartoteksfelter)<br />

SEARCH CustTable USING AccountIdx<br />

WRITE “Debitor” AS COMMA<br />

FROM(Account, Name, Phone)<br />

END<br />

I eksemplet skrives felterne Account, Name og Phone til filen med navnet ’Debitor.com’.<br />

Eksempel 2 (Udskrivning af tekst, felter og funktion)<br />

SEARCH CustTable USING AccountIdx<br />

WRITE “A:\Debitor” AS COMMA<br />

FROM(”Konto: ”,Account, Name, Phone, Today())<br />

END<br />

I eksemplet skrives de samme felter som i eksempel 1, men derudover skrives Teksten ’Konto: ’ og dags<br />

dato i form af funktionen Today(). Desuden skrives filen til A drevet.<br />

Skrivning til eksisterende fil<br />

Der kan ikke tilføjes nye records direkte til eksisterende eksterne filer.<br />

Hvis nye records skal tilføjes en eksisterende fil, skal alle records i filen først læses ind i et tilsvarende C5<br />

kartotek, hvorefter hele C5 kartoteket udskrives for at overskrive den originale eksterne fil.<br />

CLOSE<br />

Kommandoen CLOSE anvendes til at lukke filer, der er åbnet med READ eller WRITE.<br />

Syntaks<br />

CLOSE <br />

Bemærk! Commandoen CLOSE er ’case sensitive’. Det vil sige, at filnavnet skal skrives nøjagtigt, som<br />

det staves med store og små bogstaver de rigtige steder.<br />

Anvendelse<br />

Normalt lukkes filer af sig selv, når de XAL kørsler afsluttes, som de åbnes og lukkes i. Der kan dog<br />

opstå situationer, hvor det er nødvendigt at filerne lukkes manuelt.<br />

En og samme fil kan således ikke både læses og skrives i samme XAL kørsel, uden at den først lukkes<br />

med CLOSE.<br />

Faste formater<br />

Efterfølgende skema viser de faste formater, der findes til XAL v. 2.70 og C5 v. 1.70. Det fremgår af<br />

skemaet om formatet kan anvendes i READ eller WRITE eller begge steder.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

74


Formater til READ og WRITE<br />

Fast format Program der kan læse den READ WRITE<br />

LOTUS1 Lotus 123 regneark v 1 Ja Ja<br />

LOTUS2 Lotus 123 regneark v 2 Ja Ja<br />

QUATTRO Quattro regneark Ja Ja<br />

QUATTROPRO QuattroPro regneark Ja Ja<br />

SYMPHONY10 Symphony regneark v 1.0 Ja Ja<br />

SYMPHONY11 Symphony regneark v 1.1 Ja Ja<br />

COMMA Standard 8-bit komma fil formatet Ja Ja<br />

COMMA7 Standard 7-bit komma fil formatet. Ja Ja<br />

TEXT Mulighed for valg af egne skilletegn<br />

mellem records og felter.<br />

DDE<br />

DDE bruges til aktiv kommunikation<br />

mellem to windows programmer.<br />

Ja Ja<br />

Ja Ja<br />

ODBC ODBC kompatible databaser Ja Nej<br />

SQL SQL databaser (Kun muligt i Oracle<br />

versionen).<br />

Ja Nej<br />

Grunden til at der i ODBC og SQL formatet ikke kan anvendes WRITE er, at disse formater ikke er filer.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

75


Opgaver: READ og WRITE<br />

Opgave 1: Skrivning til fremmed fil med WRITE<br />

Formål med opgaven<br />

At afprøve kommandoen WRITE til udskrivning af kartoteksposter til en fremmed fil. Desuden<br />

prøves at skrive tekst til den samme fremmede fil.<br />

Huskelister<br />

WRITE<br />

Beskrivelse<br />

Der skal oprettes en XAL kørsel, der ved hjælp af WRITE kan eksportere kartoteksposterne fra<br />

kartoteket UDLUdlånsSats. Der eksporteres kun værdier fra felterne VareNummer, UdlejningsPct og<br />

ForsikringsPct.<br />

I filen med de eksporterede poster skal der, øverst i filen lige før posterne, indsættes en linje med<br />

navnene på de tre felter og deres typer.<br />

Kørslen skal starte med en promptboks, der spørger om navnet på den fil, der skal skrives til.<br />

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

2 Indsæt og tilret startkommentarer<br />

Forløb √<br />

3 Opret en tekstvariabel med en længde på 254 tegn, kald den &Filnavn.<br />

4 Opret en promptboks til indtastning af filnavn, idet du anvender den oprettede<br />

variabel til indtastningsfeltet. Indtastningsfeltet må kun være 30 tegn langt.<br />

Boksen skal stå i kolonne 20 linje 5.<br />

5 Opret en WRITE der anvender den oprettede variabel til filnavn.<br />

WRITE kommandoen skal udskrive følgende tekst til filen:<br />

”Felter og typer i rækkefølge”<br />

”VareNummer STR 10”, ”UdlejningsPct REAL”, ”ForsikringsPct REAL”<br />

Dette medfører, at den første linje i filen indeholder ovenstående tekster, som<br />

forklaring til de felter, der udskrives i filen.<br />

6 Opret en WRITE mere, der også anvender den oprettede variabel til filnavn.<br />

Kun værdier fra felterne VareNummer, UdlejningsPct og ForsikringsPct skal<br />

eksporteres.<br />

7 Godkend kørslen og afprøv den<br />

Kontrollér at de nye faciliteter fungerer.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

76


Opgave 2: Sletning af poster med DELETE<br />

Formål med opgaven<br />

At afprøve kommandoen DELETE fra lektionen ’INTRODUCE og transaktionskommandoer’. DELETE<br />

er en transaktionskommando, der sletter poster i et kartotek.<br />

Huskelister<br />

DELETE<br />

Beskrivelse<br />

I forrige opgave eksporterede du med WRITE alle posterne i kartoteket UDLUdlånsSats.<br />

I denne opgave skal du opbygge en XAL kørsel, der med kommandoen DELETE, kan slette alle posterne<br />

i kartoteket.<br />

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

2 Indsæt og tilret startkommentarer.<br />

Forløb √<br />

3 Opret en søgeløkke på UDLUdlånsSats og anvend kommandoen DELETE til sletning<br />

af posterne.<br />

4 Kontrollér, i et listbillede til UDLUdlånsSats, at kartoteket er helt tomt.<br />

5 Godkend kørslen og afprøv den.<br />

Kontrollér at de nye faciliteter fungerer.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

77


Opgave 3: Læsning fra fremmed fil med READ<br />

Formål med opgaven<br />

At afprøve kommandoen READ til læsning af kartoteksposter fra en fremmed fil.<br />

Huskelister<br />

READ<br />

Beskrivelse<br />

Den fil der blev dannet i den første opgave med alle posterne fra kartoteket UDLUdlånsSats, skal<br />

importeres igen med READ kommandoen.<br />

Der skal oprettes en promptboks, hvori der spørges om navnet på den fil, der skal importeres.<br />

Indtast filnavn :<br />

READ kommandoen skal læse posterne ind i nogle variabler, hvorefter UDLUdlånsSats introduceres, og<br />

variablernes indhold tildeles til de tilsvarende felter i den åbnede post.<br />

I et lille vindue skal det vises hvilket varenummer, der læses aktuelt.<br />

Indlæsning af udlånssatser!<br />

Indlæser nu varenummer: 10-RM-1<br />

Når kørslen er slut skrives ordet ’Slut!’ i vinduet.<br />

Indlæsning af udlånssatser!<br />

Indlæser nu varenummer: 10-RM-2<br />

SLUT!<br />

Se forløbet på næste side.<br />

Import af udlånssatser<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

78


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

2 Indsæt og tilret startkommentarer.<br />

Forløb √<br />

3 Opret en tekstvariabel med en længde på 254 tegn, kald den &Filnavn.<br />

Opret desuden variabler til felterne VareNummer, UdlejningsPct og ForsikringsPct.<br />

Variablerne må gerne have samme navn som felterne, der skal blot være & tegn<br />

foran.<br />

4 Opret en promptboks til indtastning af filnavn, idet du anvender den oprettede<br />

variabel til indtastningsfelt. Indtastningsfeltet må kun være 30 tegn langt.<br />

Boksen skal stå i kolonne 20 linje 5.<br />

5 Opret en READ løkke der anvender den oprettede variabel til filnavn.<br />

Læs posterne ind de tre variabler, der tilsvarer felterne i kartoteket.<br />

Introducér kartoteket UDLUdlånsSats med direkte opslag og anvend variablen med<br />

varenummeret i opslaget.<br />

Tildel variabelværdierne til de tilsvarende kartoteksfelter.<br />

Opret et vindue på 40 kolonner og 4 linjer. Vinduet skal stå i kolonne 10 linje 10.<br />

6 Godkend kørslen og afprøv den.<br />

Kontrollér at de nye faciliteter fungerer.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

79


8. Funktioner videregående<br />

Formål<br />

Formålet med denne lektion er at give deltagerne indsigt i anvendelsen af videregående funktioner i<br />

form af funktionen Box() og forskellige konverteringsfunktioner.<br />

Efter denne lektion skal kursisterne kunne anvende funktionerne:<br />

Box()<br />

Int2Str()<br />

Num2Str()<br />

Date2Str()<br />

Enum2Str()<br />

Generelt<br />

Generel opbygning, generel virkemåde og generel syntaks for funktioner er gennemgået på tidligere<br />

kurser. På kurserne er desuden behandlet funktioner til visning af dags dato, klokkeslæt,<br />

brugernummer og brugernavn. Desuden er funktionen Box behandlet på et grundlæggende niveau.<br />

Denne lektion behandler funktionen Box på et videregående niveau, efterfulgt af funktioner til<br />

konvertering af data til tekst.<br />

Funktionen Box()<br />

Generel beskrivelse<br />

Funktionen BOX() danner en dialogboks, der er en ramme med en tekst.<br />

Når boksen vises på skærmen, gives brugeren mulighed for at give respons på teksten. Brugerens<br />

svarmuligheder afhænger dog af boksens type, idet der ikke kan svares med fritekst. Derimod kan der<br />

vælges mellem faste tekster i form af trykknapper eller linjer i en tabel.<br />

Eksempler på de forskellige bokstyper vises på efterfølgende sider.<br />

Bokstyper<br />

Nummer Type Beskrivelse<br />

1 Infobox Grå boks med tekst. Én knap med teksten ’OK’.<br />

2 Advarselsbox Rød boks med tekst. Én knap med teksten ’OK’.<br />

3 Ja/Nej box Grå boks med tekst. To knapper med teksterne ’Ja’ og ’Nej’.<br />

4 Picklistebox Blå boks i form af en liste over værdier. Ingen knapper, men<br />

valg mellem de viste værdier.<br />

Syntaks<br />

Box(Type:INT, Tekst:STR, Std:INT): INT<br />

Funktionen Box() anvender tre parametre i form af type, tekst og standardværdi.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

80


Parametre<br />

Parametre Betydning<br />

Type 1 = Infoboks, 2 = Advarselsboks, 3 = Ja/Nej boks, 4 = Picklisteboks.<br />

Tekst Tekst anføres i citationstegn.<br />

Linjeskift udføres med ’\n’, og indsættes som en del af teksten.<br />

I type 4 Picklisteboksen adskilles de forskellige tekster også af ’\n’, idet<br />

teksterne netop skal stå under hinanden som en liste.<br />

Std I type 1, 2 og 3 er det nummer på den knap, cursoren stiller sig i som default.<br />

Returværdi<br />

I type 4 er det nummeret på den linje, cursoren skal stå i.<br />

Returværdien er et heltal i form af positionen på den knap eller linje, der vælges af brugeren.<br />

Ekstra knapper<br />

Til Info- Advarsels- og Ja/Nej boksene kan der tilføjes yderligere trykknapper, så brugerne får flere<br />

muligheder for tilbagemelding på teksten i boksen.<br />

Ekstra knapper dannes ved at placere firkantede parenteser ’[[’ og ’]]’ rundt om de dele af teksten, der<br />

skal være knapper.<br />

I type 1 infoboksen og type 2 advarselsboksen erstattes ’OK’ knappen automatisk af de knapper, der<br />

dannes med de firkantede parenteser.<br />

I type 3 Ja/Nej boksen bibeholdes knapperne ’Ja’ og ’Nej’ altid nederst i boksen på en linje for sig,<br />

I type 4 Pickliste boksen er det ikke muligt at anvende knapper. Hvis der defineres knapper med<br />

firkantede Parenteser og boksen udføres, dannes der ingen knapper. Derimod vises de firkantede<br />

Parenteser som en del af teksten.<br />

Andre typer<br />

Det er muligt at angive andre numre på typer end de fire angivne. Type 5 og 6 svarer til type 1 og<br />

opfører sig på samme måde.<br />

Type 7 og højere numre kan indsættes, men har ingen praktisk værdi, idet boksen ikke vises.<br />

Returværdien er defaultværdien fra parameter 3.<br />

Box(1) Infoboks<br />

Eksempel 1 (Infoboks med én linje)<br />

I dette eksempel dannes der en infoboks. Det tænkes, at der er flere linjer efter SET kommandoen, og<br />

at disse linjer udføres, når der tastes ENTER.<br />

Kørsel<br />

SET BOX(1,”Tast ENTER for at starte kørslen”,1)<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

81


Resultat<br />

Tast ENTER for at starte kørslen<br />

Eksempel 2 (Infoboks med flere linjer)<br />

I dette eksempel dannes der en infoboks med flere linjer. Linjeskift indsættes med tekstkommandoen<br />

’\n’.<br />

Det tænkes, at der er flere linjer efter SET kommandoen, og at disse linjer udføres, når der tastes<br />

ENTER.<br />

Kørsel<br />

SET Box(1,”Beregning af kostpriser\nTast ENTER for start”,1)<br />

Resultat<br />

Beregning af kostpriser<br />

Tast ENTER for start<br />

Box(2) Advarselsboks<br />

Eksempel 1 (Advarselsboks med én linje)<br />

I dette eksempel dannes der en advarselsboks. Eksemplet tænkes anvendt som en advarsel om, at<br />

kørslen ikke er længere.<br />

Kørsel<br />

SET Box(2,”Kørslen stoppes nu!”,1)<br />

Resultat<br />

Kørslen stoppes nu!<br />

OK<br />

OK<br />

Box(3) Ja/Nej boks<br />

Ja/Nej bokse anvendes til at stille brugeren spørgsmål, der kan besvares med Ja eller Nej.<br />

Som vist i eksemplerne herunder er der forskellige muligheder for at få fat i brugerens svar.<br />

Navnet ’Ja/Nej boks’<br />

OK<br />

Navnet ”Ja/Nej boks” må ikke forveksles med fastteksttypen ’Nej/Ja’.<br />

7<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

82


Det er opstået pga. Microsoft’s navne konvention, der altid tildeler værdien 0 til ’Nej’ eller ’Falsk’ og<br />

alle andre værdier til ’Ja’ eller ’Sand’.<br />

I fastteksttyper er den første værdi altid 0. Derfor er den første værdi i fastteksttypen ’Nej/Ja’ teksten<br />

’Nej’, der svarer til 0, og ’Ja’ er 1.<br />

I funktioner som f.eks. Box(3) er den første værdi altid 1. Derfor er den første værdi i ’Ja/Nej boksen’<br />

teksten ’Ja’, der svarer til 1, og ’Nej’ er 2.<br />

Eksempel 1 (Ja/Nej boks, returværdi tildeles variabel)<br />

I dette eksempel tildeles brugerens svar til en variabel, der efterfølgende kontrolleres og anvendes i en<br />

IF struktur, hvor der tages stilling til, hvad der skal ske.<br />

Kørsel<br />

INT &Svar<br />

SET &Svar = Box(3,”Skal harddisken slettes for data?”,2)<br />

IF &Svar == 1 THEN {1=Ja}<br />

PRINT ”Det var dumt, hva’?”<br />

PRINT ”Tænk dig om næste gang!”<br />

ENDIF<br />

PAUSE<br />

Resultat<br />

Skal harddisken slettes for data?<br />

Resultat hvis der svares Ja<br />

Det var dumt, hva’?<br />

Tænk dig om næste gang!<br />

Eksempel 2 (Ja/Nej boks direkte i IF struktur)<br />

I dette eksempel indsættes boksen direkte i IF strukturen, i stedet for at svaret tildeles en variabel.<br />

Kørsel<br />

IF Box(3,”Skal harddisken slettes for data?”,2) == 1 THEN<br />

PRINT ”Det var dumt, hva’?”<br />

PRINT ”Tænk dig om næste gang!”<br />

ENDIF<br />

PAUSE<br />

Ja Nej<br />

Eksempel 3 (Ja/Nej boks til standsning af kørsel)<br />

I dette eksempel anvendes en Ja/Nej boks til, at spørge brugeren om kørslen fortsat skal udføres.<br />

Svares der Nej i eksemplet, sættes værdien i boksen til 2 og kørslen afbrydes med RETURN.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

83


Kørsel<br />

IF Box(3,”Fortsæt udførelse?”,2) == 2 {Nej} THEN<br />

RETURN<br />

ENDIF<br />

Resultat<br />

Fortsæt udførelse?<br />

Box(4) Pickliste boks<br />

Pickliste boksen danner en liste over de tekster, der i tekstparameteren adskilles med ’\n’. Der kan ikke<br />

indsættes knapper i denne type boks.<br />

Picklister ligner til forveksling de lister, der vises fra fasttekster, når der tastes ALT+H i en promptboks<br />

eller i en form.<br />

Til forskel fra fast-tekster starter den første tekst i en pickliste altid med værdien 1. Desuden kan<br />

teksten heller ikke udskrives automatisk i PRINT sætninger.<br />

Eksempel 1 (Pickliste boks med 5 linjer)<br />

I eksemplet opstilles der en picklisteboks med 5 linjer og cursoren stilles default på linje 2.<br />

Kørsel<br />

Ja Nej<br />

INT &Frugt<br />

SET &Frugt = BOX(4,”Æbler\nPærer\nBananer\nGrape\nKiwi”,2)<br />

PRINT &Frugt<br />

Resultat<br />

Æbler<br />

Pærer<br />

Bananer<br />

Grape<br />

Kiwi<br />

Box(1-3) Bokse med ekstra knapper<br />

Info- Advarsels- og Ja/Nej bokse kan tilføjes flere knapper.<br />

Når der indsættes knapper i type 1 og 2 fjernes ’OK’ knappen automatisk og i type 3 forbliver ’JA’ og<br />

’NEJ’ knapperne på den nederste linje.<br />

Eksempel 1 (Infoboks med flere knapper)<br />

I dette eksempel indsættes knapperne som stående alene i teksten. Funktionen returnerer værdien 1, 2<br />

eller 3 afhængigt af hvilken knap, der vælges. Cursoren stilles default på knap 2, der er ’B’.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

84


Kørsel<br />

INT &Knap<br />

SET &Knap = BOX(1,”Vælg mellem [[ A ]] [[ B ]] og [[ C ]]”,2)<br />

PRINT &Knap<br />

Resultat<br />

Vælg mellem A B og C<br />

B<br />

Eksempel 2 (Knapper som del af ord)<br />

I dette eksempel indsættes knapperne som første bogstav i ordene. På denne måde ser det for<br />

brugeren ud som om, der vælges mellem de forskellige frugter.<br />

Bemærk i kørslen at linjen med boxen er delt i to. Det er kun muligt ved at dele teksten i to og<br />

sammenlægge de to tekster med + tegnet.<br />

I resultatet ses knapperne med en lysere farve, og cursoren er placeret på knap nummer to ’Pærer’.<br />

Kørsel<br />

INT &Frugt<br />

SET &Frugt=BOX(1,”[[Æ]]bler [[P]]ærer [[B]]ananer ”+<br />

”[[G]]rape [[K]]iwi”,2)<br />

PRINT &Frugt<br />

Resultat<br />

Æbler Pærer Bananer Grape Kiwi<br />

På skærmen udskrives kun nummeret på knappen, og ikke teksten. Hvis teksten skal udskrives, skal der<br />

indsættes en IF struktur, der undersøger hvilken knap, der er valgt, og derefter udskriver en tilsvarende<br />

tekst.<br />

Konverteringsfunktioner<br />

Int2Str()<br />

Beskrivelse<br />

Funktionen Int2Str() konverterer et heltal til en tekst. Dette kan være nødvendigt, når et heltal f.eks.<br />

skal udskrives som en del af teksten i en boks.<br />

Syntaks<br />

Int2Str(i:Int):Str<br />

Parametre<br />

Parameteren i er et heltal, der skal konverteres til en tekst. Der er ingen parametre til styring af<br />

længden på den konverterede tekst.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

85


Returværdi<br />

Returværdien er tallet konverteret til en tekst på samme længde som antallet af tegn i tallet.<br />

Eksempel<br />

INT &Antal = 25000<br />

SET BOX(1,”Der blev behandlet ”+Int2Str(&Antal)+” poster!”<br />

Resultat<br />

Der blev behandlet 25000 poster!<br />

Variablen i eksemplet kan kun udskrives som en del af teksten, fordi den konverteres til en tekst.<br />

Hvis den ikke konverteres, vises en fejlmeddelelse i bunden af skærmen (se næste side).<br />

Eksempel på fejlmeddelelse<br />

INT &Antal = 25000<br />

SET BOX(1,”Der blev behandlet ”+&Antal+” poster!”<br />

Fejl: 1, Operandernes typer er ikke kompatible med operatoren<br />

I eksemplet er funktionen Int2Str() fjernet fra variablen<br />

Operanderne er variablen og teksterne. Meddelelsen betyder således at disse ikke er af samme type og<br />

derfor ikke kan sammenlægges vha. operatoren, der er tegnet +.<br />

Num2Str<br />

Beskrivelse<br />

Funktionen Num2Str() konverterer et kommatal til en tekst, men kan også konvertere heltal.<br />

Tal konverteres f.eks. for at kunne sammenlægges med tekster, der udskrives i funktionen Box(). Det<br />

kan også være for at få tal til at være lige lange ved udskrivning i søgeløkker, så værdierne kan komme<br />

til at stå i kolonner under hinanden.<br />

De konverterede tal højrestilles automatisk.<br />

Syntaks<br />

OK<br />

Num2Str(x:REAL,i:INT,d:INT,k:INT,t:INT):Str<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

86


Parametre<br />

Værdi Indhold Bemærkning<br />

x Tal der skal konverteres<br />

i Længden på den resulterende tekst<br />

(returværdien)<br />

Angives –1 i længden bliver teksten<br />

samme længde som antallet af tegn i<br />

tallet.<br />

d Antal decimaler Sættes antal til 0 eller mindre f.eks. –1<br />

afrundes tallet og udskrives uden<br />

decimaler.<br />

k Decimal seperatoren<br />

1=komma<br />

2=punktum<br />

t Tusind seperatoren<br />

Returværdi<br />

0=ingen<br />

1=komma<br />

2=punktum<br />

3=space (ét blankt tegn)<br />

Indsættes andre værdier end de angivne<br />

f.eks. –1, anvendes værdien fra feltet<br />

’Seperatorer’ i ’Brugeropsætning’.<br />

Indsættes andre værdier end de angivne<br />

f.eks. –1, anvendes værdien fra feltet<br />

’Seperatorer’ i ’Brugeropsætning’.<br />

Returværdien er tallet konverteret til en tekst med længde, decimaler og seperatorer som angivet.<br />

Eksempel<br />

REAL &Sum<br />

SEARCH VendTable WHERE BalanceMST 0<br />

PRINT Num2Str(BalanceMST,15,2,1,2)<br />

#Add(&Sum,BalanceMST)<br />

END<br />

SET BOX(1,”Samlet gæld ”+Num2Str(&Sum,-1,2,1,2)+” Kr”,1)<br />

Resultat<br />

-93.531,38<br />

-576,00<br />

-47,00<br />

-2.475,00<br />

-1.905,00<br />

-125,000.00<br />

-300,014.50<br />

Samlet gæld –523.548,88 kr<br />

OK<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

87


I ovenstående eksempel anvendes Num2Str() på to forskellige måder.<br />

I søgeløkken sørger Num2Str() for, at tallene fylder lige meget og højrestilles.<br />

I infoboksen anvendes Num2Str sammen med variablen &Sum, så værdien kan udskrives som en<br />

del af teksten.<br />

Længden er sat til –1, hvilket medfører, at tallet virker som en integreret del af teksten, når den<br />

udskrives. Hvis der var angivet en fast længde på f.eks. 15, ville det resultere i blanke tegn foran tallet.<br />

Hvis et kommatal eller et heltal skal udskrives sammen med en tekst, og konverteringen glemmes vises<br />

følgende fejlmeddelelse i bunden af skærmen.<br />

Eksempel på fejlmeddelelse<br />

REAL &Sum<br />

SEARCH VendTable WHERE BalanceMST 0<br />

PRINT Num2Str(BalanceMST,15,2,1,2)<br />

#Add(&Sum,BalanceMST)<br />

END<br />

SET BOX(1,”Samlet gæld ”+&Sum+” Kr”,1)<br />

Fejl: 1, Operandernes typer er ikke kompatible med operatoren<br />

I eksemplet mangler Num2Str i forbindelse med &Sum i Box funktionen.<br />

Date2Str()<br />

Beskrivelse<br />

Funktionen Date2Str konverterer en dato til en tekst. Dette kan være nødvendigt, når datoer skal<br />

udskrives som en del af en tekst f.eks. i funktionen Box().<br />

Det kan bestemmes, hvordan datoen skal se ud efter konverteringen. (Se parametre)<br />

Syntaks<br />

Date2Str(d:DATE,p1:INT,p2:INT,p3:INT,p4:INT,p5:INT,p6:INT):STR<br />

I syntaksen kræver funktionen 7 parametre, som beskrevet herunder.<br />

Hvis der angives ugyldige parametre til formatteringen, indsættes der automatisk gyldige værdier af<br />

programmet.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

88


Parametre<br />

Parameter Indhold<br />

d Dato der skal konverteres<br />

p1 Rækkefølge for dag, måned og år.<br />

123 = dag, måned, år<br />

321 = år, måned, dag<br />

312 = år, dag, måned<br />

p2 Format på dag<br />

1 = dag vises med 1 eller 2 tal<br />

2 = dag vises altid med 2 tal<br />

p3 Angiver det første skilletegn<br />

1 = ét blankt tegn, 2 = punktum, 3 = bindestreg, 4 = skråstreg<br />

p4 Format for måned<br />

1 = måned vises med 1 eller 2 tal<br />

2 = måned vises altid med 2 tal<br />

3 = måned vises forkortet som 3 bogstaver<br />

4 = måned vises med hele navnet<br />

p5 Angiver det andet skilletegn<br />

1 = ét blankt tegn, 2 = punktum, 3 = bindestreg, 4 = skråstreg<br />

p6 Formatet på år<br />

Returværdi<br />

2 = år vises med 2 tal<br />

4 = år vises med 4 tal<br />

Returværdien er datoen konverteret til en tekst med dag, måned og år arrangeret som bestemt i<br />

parametrene.<br />

Efterfølgende vises 4 eksempler uden nærmere forklaring, idet parametrene fremgår af ovenstående<br />

tabel.<br />

Eksempel 1<br />

PRINT Date2Str(15\03\2000,123,2,2,2,2,4)<br />

PAUSE<br />

Resultat<br />

15.03.2000<br />

Eksempel 2<br />

PRINT Date2Str(15\03\2000,321,2,2,2,2,4)<br />

PAUSE<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

89


Resultat<br />

2000.03.15<br />

Eksempel 3<br />

PRINT Date2Str(15\03\2000,123,2,1,3,1,2)<br />

PAUSE<br />

Resultat<br />

15 Mar 00<br />

Eksempel 4<br />

SET BOX(1,”Kurset starter ”+<br />

Date2Str(15\03\2000,123,2,1,4,1,4),1)<br />

PAUSE<br />

Resultat<br />

Kurset starter 15 Marts 2000<br />

Enum2Str()<br />

Beskrivelse<br />

Enum2Str() konverterer nummeret på en fasttekst til dens tekst.<br />

Funktionen fungerer kun på variabler af typen fasttekst, hvorfor disse først skal erklæres.<br />

Syntaks<br />

Enum2Str(e:ENUM):Str<br />

Parametre<br />

Parameter Indhold<br />

e Variabel til den fasttekst, der skal konverteres.<br />

Returværdi<br />

OK<br />

Bemærk at der kun er én parameter i form af en variabel. Variablen SKAL være<br />

af typen fasttekst, så systemet automatisk kan vide hvilken fastteksttype, den<br />

tilhører. (Bestemmes under erklæringen.)<br />

Fastteksten til den værdi der står i variablen, idet teksten hentes fra den tilhørende fastteksttype.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

90


Eksempel 1<br />

ENUM Sprog &Sprogkode = 3<br />

PRINT &Sprogkode<br />

PRINT Enum2Str(&Sprogkode)<br />

PAUSE<br />

Resultat<br />

Tysk<br />

Tysk<br />

I eksemplet erklæres en variabel &Sprogkode. Den anvender fastteksttypen Sprog med teksterne 0 =<br />

Standard, 1 = Dansk, 2 = Engelsk og 3 = Tysk.<br />

Under erklæringen tildeles variablen værdien 3.<br />

Bemærk at der er to printsætninger. Den første udskriver variablen som den er, og den anden udskriver<br />

variablen med konvertering ved hjælp af Enum2Str. I begge tilfælde udskrives teksten ’Tysk’.<br />

Der er således ingen forskel på de to printsætninger og det kan derfor virke overflødigt at anvende<br />

Num2Str.<br />

Konvertering med Num2Str har sin berettigelse, når en fasttekst skal udskrives i forbindelse med anden<br />

tekst f.eks. i en Box(). Dette fremgår i næste eksempel.<br />

Eksempel 2<br />

ENUM Sprog &Sprogkode = 3<br />

SET Box(1,”I Tyskland tales der ”+Enum2Str(&Sprogkode)+”!”,1)<br />

Resultat<br />

Fejl<br />

I Tyskland tales der Tysk!<br />

OK<br />

Hvis en fasttekst skal udskrives sammen med en tekst i f.eks. en Box() og konverteringen glemmes, vises<br />

følgende fejlmeddelelse i bunden af skærmen.<br />

Eksempel på fejlmeddelelse<br />

ENUM Sprog &Sprogkode = 3<br />

SET Box(1,”I Tyskland tales der ”+&Sprogkode+”!”,1)<br />

Fejl: 1, Operandernes typer er ikke kompatible med operatoren<br />

I eksemplet mangler Enum2Str i forbindelse med &Sprogkode i Box funktionen.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

91


Opgaver: Funktioner, videregående<br />

Opgave 1: Liste over udlejningssatser<br />

Formål med opgaven<br />

At oprette en XAL kørsel med felter konverteret ved hjælp funktionerne NUM2STR() og<br />

DATE2STR().<br />

Beskrivelse<br />

Du skal oprette en XAL kørsel, der gennemløber UDLUdlånsSats.<br />

Kørslen skal udskrive felterne ItemNumber, ItemName (fra lagerkartoteket), CostPrice (fra<br />

lagerkartoteket), UdlejningsPct og SidstRettet.<br />

1<br />

Opret en ny XAL kørsel med startkommentarer.<br />

Forløb √<br />

2 Indsæt en søgning på kartoteket UDLUdlånsSats sorteret i vareorden.<br />

I stedet for at hentet felter fra lagerkartoteket med direkte opslag, skal du<br />

introducere InvenTable med INTRODUCE.<br />

3 Udskriv følgende felter:<br />

ItemNumber<br />

ItemName1 fra InvenTable<br />

CostPrice fra InvenTable (Lgd=10, 2 decimaler)<br />

UdlejningsPct, (Lgd=6, 1 decimal)<br />

LastChanged (DMÅ, dag, måned og år med 2 cifre, skilletegn med punktum.<br />

4 Afprøv kørslen.<br />

Pga. tekstfelterne ItemNumber og ItemName kommer felterne ikke til at stå under<br />

hinanden i søjler.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

92


9. Macroer<br />

Formål<br />

Formålet med denne lektion er give deltagerne en generel indsigt i opbygning og anvendelse af<br />

macroer. Der gives specifikke eksempler på macroer.<br />

Efter denne lektion skal kursisterne kunne forstå den generelle opbygning af macroer, og anvende<br />

følgende specifikke macroer:<br />

#Num2Str<br />

#StrLFix<br />

#StrRFix<br />

#Date2Str<br />

#Time2Str<br />

Generelt<br />

Macroer anvendes i vid udstrækning i XAL sproget. De kan til dels sammenlignes med kommandoer og<br />

funktioner, idet de udfører bestemte ting, når de aktiveres i en XAL kørsel.<br />

Hvor der ikke findes en kommando eller funktion i kernen, er der i mange tilfælde oprettet macroer til<br />

erstatning for disse.<br />

Andre macroer er oprettet for at gøre det nemmere at anvende nogle af de eksisterende funktioner,<br />

idet de indeholder standardværdier som parametre, så disse ikke behøver at udfyldes.<br />

Kendetegn<br />

Macroer kendetegnes ved at de starter med et # foran navnet, de steder hvor de bruges i<br />

applikationselementerne f.eks. XAL kørsler eller forms.<br />

Under selve oprettelsen af macroer anvendes # ikke.<br />

Generel opbygning<br />

Macroer opbygges i udviklingsmenuen i søjlen MAC eller direkte i de elementer, hvori de anvendes.<br />

De opbygges som almindelige XAL kørsler med kommandoer, funktioner osv.<br />

Macroer er stykker af XAL kode. De kan bare ikke afvikles alene. De kan kun afvikles som dele af rigtige<br />

XAL kørsler, forms osv.<br />

Problemer ved fejl<br />

Da macroer ikke kan afvikles, kan de heller ikke oversættes selvstændigt. Eventuelle fejl findes således<br />

først under oversættelsen af det element, de kaldes fra. Det er derfor en god ide, at udføre macroerne<br />

som XAL kørsler, inden de omdannes til macroer.<br />

Opbygning<br />

Macroer opbygges med eller uden parametre.<br />

Macroer uden parametre udfører blot den kode, der står i dem. Macroer med parametre tilføres data<br />

fra den kørsel, de anvendes i.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

93


Macro uden parametre<br />

PRINT ”Bil til salg!”<br />

Denne macro modtager ingen parametre, og udskriver blot den indeholdte tekst.<br />

Macro med parametre<br />

PRINT ”Mærke: ”, %1, ” Pris: ”, %2<br />

Denne macro indeholder forskellige parametre angivet som %1, %2.<br />

Tallene med % tegnene fungerer som variabler i macroen. De anvendes til at modtage værdier, der<br />

overføres fra den kørsel, der kalder macroen.<br />

Overførsel af data til macro<br />

Macrokald (p1, p2)<br />

Macro med %1 %2<br />

Inkludering i kørsler<br />

Macroer er ikke funktioner med selvstændig hukommelse. Deres indhold indsættes i koden det sted,<br />

hvor de kaldes.<br />

Den aktuelle kørsel, form osv. ekspanderes således med koden fra macroerne. Dette medfører, at<br />

macroers kode tælles med i programmets totale størrelse, der ikke må overstige 64 kb.<br />

Indsættelsen i kørslen foretages i det øjeblik, den godkendes og XAL kernen oversætter koden.<br />

Kørsel med kald af global macro<br />

Kald af global macro<br />

Kopi af kode i global<br />

macro<br />

Parametrene overføres fra macrokald til macro som<br />

1 til 1, dvs. første parameter til %1, anden parameter<br />

til %2 osv.<br />

Global macro<br />

Kode indsættes i kørsel under oversættelse<br />

(ikke synligt for programmør)<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

94


Kørsel med lokal macro<br />

Lokal macro<br />

Kald af lokal macro<br />

Kopi af kode i lokal<br />

macro<br />

Anvendelse af macro fra macro bibliotek<br />

Macroload BIBLIOTEK<br />

Kald af macro fra<br />

macro BIBLIOTEK<br />

Kopi af macro fra<br />

macro BIBLIOTEK<br />

I alle tre tilfælde ekspanderes elementerne med koden i macroerne.<br />

Macro typer<br />

Der findes tre forskellige typer af macroer:<br />

Typer Forklaring Scope<br />

Globale macroer Opbygges direkte i udviklingsmenuen.<br />

Navnet skrives med små bogstaver.<br />

Lokale macroer Opbygges i det element hvori de<br />

anvendes f.eks. en XAL kørsel eller form.<br />

Kan også samles i macrobiblioteker.<br />

Macrobiblioteker Opbygges i udviklingsmenuen og<br />

indeholder samlinger af lokale macroer.<br />

Kode indsættes i kørsel under oversættelse<br />

(ikke synligt for programmør)<br />

Åbning for adgang til<br />

bibliotek<br />

Navnet på biblioteket skrives med STORE<br />

bogstaver.<br />

Macro BIBLIOTEK<br />

Kode indsættes i kørsel under oversættelse<br />

(ikke synligt for programmør)<br />

Kan bruges overalt direkte.<br />

Kan KUN ANVENDES i det<br />

element, macroerne<br />

opbygges i.<br />

Kan anvendes overalt, hvis<br />

deres bibliotek først<br />

macroloades.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

95


Eksempler på globale macroer<br />

Bibliotek Indhold<br />

Add Svarer til SET A = A + B<br />

Sub Svarer til SET A = A – B<br />

Firma Returnerer firmanavnet<br />

Macroload Giver adgang til macroer i givet macrobibliotek<br />

Bemærk at navne på globale macroer skrives med små bogstaver.<br />

Eksempler på biblioteker<br />

Bibliotek Indhold<br />

FORMS Macroer til brug i forms<br />

REPORTS Macroer til brug i rapporter<br />

QUERY Macroer til brug i forespørgsler (QT’er)<br />

FUNKTIONER Macroer til behandling af tekststrenge, datoer o.a.<br />

Bemærk at navne på macrobiblioteker skrives med store bogstaver.<br />

Efterfølgende gives eksempler på de forskellige typer af macroer.<br />

Globale macroer<br />

Globale macroer opbygges direkte i søjlen MAC i udviklingsmenuen. De kendetegnes ved at deres<br />

navne skrives med små bogstaver.<br />

De kan uden videre kaldes fra alle elementer. Deraf navnet ’global’.<br />

Global macro uden parametre<br />

PRINT ”Bil til salg!”<br />

Denne macro modtager ingen parametre, og udskriver blot den indeholdte tekst.<br />

Global macro ’BilSalg’ med parametre<br />

PRINT ”Mærke: ”, %1, ” Pris: ”, %2<br />

Denne macro indeholder forskellige parametre angivet som %1, %2.<br />

Tallene med % tegnene fungerer som variabler i macroen. De anvendes til at modtage værdier, der<br />

overføres fra den kørsel, der kalder macroen.<br />

Eksempel med anvendelse af global macro med parametre<br />

PRINT ”Biler til salg!”<br />

PRINT ”---------------------------------”<br />

#BilSalg(”Toyota Carina”,250000)<br />

#Bilsalg(”Toyota Previa”,260000)<br />

PAUSE<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

96


Resultat<br />

Biler til salg!<br />

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

Mærke: Toyota Carina Pris: 250000<br />

Mærke: Toyota Previa Pris: 260000<br />

Lokale macroer<br />

Lokale macroer opbygges direkte i den kørsel, form osv. , hvori de anvendes. Deraf udtrykket ’lokal’.<br />

Koden i macroen opbygges på samme måde som i globale macroer. Til forskel fra globale macroer,<br />

skal de dog startes med macrodirektivet #LOCALMACRO.Navn og sluttes med #ENDMACRO.<br />

Opbygning af lokal macro med navnet BilSalg<br />

#LOCALMACRO.BilSalg<br />

PRINT ”Mærke....: ”, %1, ” Pris: ”, %2<br />

#ENDMACRO<br />

Denne macro indeholder forskellige parametre angivet som %1, %2.<br />

%1 = bilmærke og %2 = pris.<br />

Eksempel med anvendelse af lokal macro med parametre<br />

#LOCALMACRO.BilSalg<br />

PRINT ”Mærke: ”, %1, ” Pris: ”, %2<br />

#ENDMACRO<br />

PRINT ”Biler til salg!”<br />

PRINT ”---------------------------------”<br />

#BilSalg(”Toyota Carina”,250000)<br />

#Bilsalg(”Toyota Previa”,260000)<br />

PAUSE<br />

Resultat<br />

Biler til salg!<br />

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

Mærke: Toyota Carina Pris: 250000<br />

Mærke: Toyota Previa Pris: 260000<br />

Macro biblioteker<br />

Macro biblioteker er blot samlinger af lokale macroer, der som regel har noget til fælles. De oprettes i<br />

udviklingsmenuen i søjlen MAC.<br />

Bibliotekerne kendetegnes ved, at deres navne er skrevet med store bogstaver, som vist i skemaet<br />

herunder.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

97


Macro bibliotek ’BILER’ med to lokale macroer<br />

#LOCALMACRO.Overskrift<br />

PRINT ”Biler til salg!”<br />

PRINT ”---------------------------------”<br />

#ENDMACRO<br />

#LOCALMACRO.BilSalg<br />

PRINT ”Mærke: ”,%1, ”Pris: ”,%2<br />

#ENDMACRO<br />

Macroer i macrobiblioteker kan kun anvendes ved først at loade biblioteket ind i den aktuelle kørsel,<br />

form osv. Dette udføres med macroen #MacroLoad()<br />

Eksempel med anvendelse af macro fra macrobibliotek<br />

#MacroLoad(BILER)<br />

#Overskrift<br />

#BilSalg(”Toyota Carina”,250000)<br />

#Bilsalg(”Toyota Previa”,260000)<br />

PAUSE<br />

Resultat<br />

Biler til salg!<br />

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

Mærke: Toyota Carina Pris: 250000<br />

Mærke: Toyota Previa Pris: 260000<br />

Specifikke macroer<br />

Efterfølgende specifikke macroer befinder sig alle i biblioteket FUNKTIONER.<br />

#Num2Str<br />

Beskrivelse<br />

Macroen er en omskrivning af funktionen Num2Str.<br />

Hvor funktionen skal have alle parametre udfyldt, er macroen skrevet på en sådan måde, at det er<br />

frivilligt hvor mange parametre, der udfyldes.<br />

Udfyldes en parameter ikke, er der i macroen indsat default parametre, der anvendes i stedet.<br />

Som minimum udfyldes tallet, der skal konverteres.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

98


#Num2Str (indhold)<br />

Num2Str(%1, #IFNOT.EMPTY(%2) %2 #ENDIF<br />

#IF.EMPTY(%2) 0 #ENDIF,<br />

#IFNOT.EMPTY(%3) %3 #ENDIF<br />

#IF.EMPTY(%3) 0 #ENDIF,<br />

#IFNOT.EMPTY(%4) %4 #ENDIF<br />

#IF.EMPTY(%4) 1 #ENDIF,<br />

#IFNOT.EMPTY(%5) %5 #ENDIF<br />

#IF.EMPTY(%5) 2 #ENDIF)<br />

For hver parameter er der indsat to IF sætninger i form af macroer.<br />

#IFNOT.EMPTY<br />

Træder i kraft, hvis den givne parameter IKKE ER TOM. Derved er parameterens egen værdi gældende.<br />

#IF.EMPTY<br />

Træder i kraft, hvis den givne parameter ER TOM. Derved udfyldes parameteren med den værdi, der<br />

står i #IF.EMPTY macroen.<br />

Syntaks med parametre<br />

#Num2Str(x:REAL,i:INT,d:INT,k:INT,t:INT):Str<br />

Syntaksen er beskrevet på samme måde som i funktionen Num2Str.<br />

Da macroen ofte anvendes uden parametre, vises syntaksen også for dette.<br />

Syntaks uden parametre<br />

#Num2Str(x:REAL):Str<br />

Parametre<br />

Værdi Indhold Bemærkning<br />

x Tal der skal konverteres<br />

i Længden på den resulterende tekst<br />

(returværdien)<br />

Angives 0 eller mindre f.eks. –1 i længden<br />

bliver teksten samme længde som antallet af<br />

tegn i tallet.<br />

d Antal decimaler Sættes antal til 0 eller mindre f.eks. –1<br />

afrundes tallet og udskrives uden decimaler.<br />

k Decimal seperatoren<br />

1=komma<br />

2=punktum<br />

t Tusind seperatoren<br />

0=ingen<br />

1=komma<br />

2=punktum<br />

3=space (ét blankt tegn)<br />

Indsættes andre værdier end de angivne<br />

f.eks. –1, anvendes værdien fra feltet<br />

’Seperatorer’ i ’Brugeropsætning’.<br />

Indsættes andre værdier end de angivne<br />

f.eks. –1, anvendes værdien fra feltet<br />

’Seperatorer’ i ’Brugeropsætning’.<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

99


Returværdi<br />

Returværdien er tallet konverteret til en tekst med længde, decimaler og seperatorer som angivet.<br />

Angives der ingen parametre, er defaultværdierne ifølge ’Indhold’ herover følgende.<br />

Defaultværdier<br />

Parameter Default værdi Betydning<br />

Længde 0 Længde = antal tegn i tallet<br />

Antal decimaler 0 Ingen decimaler<br />

Decimal seperator 1 Komma<br />

Tusind seperator 2 Punktum<br />

Eksempel uden parametre<br />

#MacroLoad(FUNKTIONER)<br />

PRINT #Num2Str(12345.678)<br />

PAUSE<br />

Resultat<br />

12.346<br />

#StrLFix<br />

Beskrivelse<br />

Macroen #StrLFix venstrestiller en tekst til en given længde.<br />

Navnet er en forkortelse af ordene Streng Left Fix.<br />

Macroen anvendes f.eks. i søgeløkker, hvor der udskrives tekstfelter, idet felterne udskrives<br />

venstrestillede og lige lange.<br />

Macroen tilhører biblioteket FUNKTIONER, hvorfor dette skal loades først.<br />

#StrLFix (indhold)<br />

(SubStr(%1,1,%2)+StrRep(&Parm,” ”,%2-StrLen(%1)))<br />

Macroen tager med SubStr en delstreng af %1. Længden angives med %2. Er længden større end<br />

delstrengen, anvendes StrRep til at udfylde den resterende plads med blanke tegn. På denne måde<br />

fylder teksten altid den givne længde.<br />

Syntaks<br />

#StrLFix(Tekst, Længde)<br />

100<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Parametre<br />

Macroen anvender to parametre. Den første er teksten, der skal konverteres, og den anden er længden<br />

på den tekst, der returneres.<br />

Returværdi<br />

Returværdien er teksten i %1 konverteret til længden i %2. Teksten venstrestilles.<br />

Eksempel<br />

#MacroLoad(FUNCTIONS)<br />

SEARCH CustTable<br />

PRINT #StrLFix(Name, 30), #StrLFix(Attention, 20)<br />

END<br />

PAUSE<br />

Resultat<br />

Microsoft A/S P. Damgaard<br />

Super Korn A/S Hans c. Haugaard<br />

Auto A/S Birger Andersen<br />

Computer A/S Per Hildebrandt<br />

Ved hjælp af #StrLFix opstilles felterne i to kolonner, der er venstrestillede.<br />

#StrRFix<br />

Beskrivelse<br />

Macroen #StrRFix højrestiller en given tekst til en given længde.<br />

Navnet er en forkortelse af ordene Streng Right Fix.<br />

Macroen anvendes f.eks. i søgeløkker, hvor der udskrives tekstfelter, idet felterne udskrives højrestillede<br />

og lige lange.<br />

Macroen tilhører biblioteket FUNKTIONER, hvorfor dette skal loades først.<br />

#StrRFix (indhold)<br />

(StrRep(&Parm,” ”,%2-StrLen(%1))+ SubStr(%1,1,%2))<br />

Macroen udskriver med StrRep et antal blanke tegn. Antallet af tegn er den angivne længde minus<br />

længden på teksten. Herefter tager macroen med SubStr en delstreng af %1. Længden af delstrengen<br />

angives med %2.<br />

Syntaks<br />

#StrRFix(Tekst, Længde)<br />

Parametre<br />

Macroen anvender to parametre. Den første er teksten, der skal konverteres, og den anden er længden<br />

på den tekst, der returneres.<br />

101<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Returværdi<br />

Returværdien er teksten i %1 konverteret til længden i %2. Teksten højrestilles.<br />

Eksempel<br />

#MacroLoad(FUNCTIONS)<br />

SEARCH CustTable<br />

PRINT #StrRFix(Account,10), ” ”, Name<br />

END<br />

PAUSE<br />

Resultat<br />

45999000 Microsoft A/S<br />

42983214 Super Korn A/S<br />

100000 Auto A/S<br />

33344 Computer A/S<br />

Ved hjælp af #StrRFix opstilles feltet Account i en kolonne på 10 tegn højrestillet.<br />

#Date2Str<br />

Beskrivelse<br />

Macroen #Date2Str er en omskrivning af funktionen Date2Str. Den udfylder datoparameteren med %1.<br />

Alle andre parametre udfyldes med tallet –1.<br />

Bemærk! Da alle parametre er udfyldt med –1, betyder det, at funktionen anvender det format, der<br />

angives i skærmbilledet ’Brugeropsætning’ i feltet ’Dato-formattering’.<br />

#Date2Str (indhold)<br />

Date2Str(%1,-1,-1,-1,-1,-1,-1)<br />

Syntaks<br />

#Date2Str(Dato)<br />

Parametre<br />

Macroen modtager kun én parameter i form af en dato.<br />

Returværdi<br />

Datoen returneres i det format, der angives i ’Brugeropsætning’ i feltet ’Dato-formattering’.<br />

102<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Defaultværdier i feltet Dato-formattering i Brugeropsætning<br />

Felt Værdi<br />

Rækkefølge (DMÅ) DMÅ<br />

2 seperatorer (/-. #) /-<br />

År skrives som 2 cifre<br />

Måned skrives som Altid 2 cifre<br />

Dag skrives som Altid 2 cifre<br />

Eksempel<br />

PRINT #Date2Str(15\03\2012)<br />

PAUSE<br />

Resultat<br />

15/03-09<br />

#Time2Str<br />

Beskrivelse<br />

Macroen #Time2Str konverterer et antal sekunder til almindelig tid i form af en tekst i formatet TT:MM<br />

dvs. timer og minutter med kolon som skilletegn.<br />

Macroen findes i biblioteket FUNKTIONER, der skal loades inden anvendelse.<br />

#Time2Str (indhold)<br />

Num2Str((%1) DIV 3600,2,0,0,0)+”:”+<br />

#Num2Str0((%1) MOD 3600 DIV 60,2,0,0,0)<br />

Timerne udregnes med funktionen Num2Str, idet sekunderne divideres med 3600 og kun heltallet<br />

gemmes.<br />

Minutterne udregnes med macroen #Num2Str0, der dividerer sekunderne med 3600 og beholder<br />

resten, der divideres med 60, for at få hele antal minutter.<br />

Syntaks<br />

#Time2Str(Sekunder)<br />

Parametre<br />

Der er kun én parameter i form af antal sekunder.<br />

Returværdi<br />

Sekunderne konverteret til en tekst i formatet TT:MM.<br />

103<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Eksempel 1 (Fast antal sekunder)<br />

#MacroLoad(FUNCTIONS)<br />

PRINT #Time2Str(44100)<br />

PAUSE<br />

Resultat<br />

12:15<br />

I stedet for den faste værdi 44100 kan der f.eks. indsættes en funktion som TimeNow().<br />

Indirektioner<br />

Indirektioner medtages i denne lektion, da de i virkeligheden er macroer.<br />

Ordet betyder faktisk fif eller kneb og indirektioner anvendes netop i vid udstrækning som kneb for at<br />

gøre ting nemmere.<br />

Mange kommandoer og funktioner er således erstattet af indirektioner.<br />

Alle control kommandoer til forms, rapporter og QT’er er også erstattet af indirektioner.<br />

Ved at undersøge macro bibliotekerne FORMS, REPORTS og QUERY, kan det f.eks. ses, hvordan de<br />

forskellige control kommandoer opbygges som indirektioner i form af lokale macroer.<br />

Fordelen (fiffet eller knebet) er her, at indirektionerne (macroerne) kontrolleres allerede ved<br />

oversættelsen af et element, medens fejl i control kommandoerne først opdages ved afviklingen.<br />

Indirektioner på fasttekster<br />

Biblioteket ENUMS indeholder indirektioner på nogle af fastteksttyperne. Der er specielt to fordele ved<br />

at anvende indirektioner på fasttekster.<br />

Koden bliver nemmere at læse.<br />

I IF sætninger undersøges indholdet af fasttekst variabler altid ved sammenligning med tekstens<br />

nummer i den tilhørende fastteksttype og ikke med tekstens ordlyd.<br />

Desuden er det svært, at se hvad tallene i sammenligningen betyder. Dette kan kun ses ved at<br />

kontrollere fastteksten.<br />

I indirektioner er det makroernes navne, der anvendes i IF sætninger.<br />

Eventuelle ændringer i fasttekster bliver nemmere at gennemføre.<br />

Hvis der skal ændres i en fastteksttype, er det en fordel, hvis der i alle kørsler, forms, rapporter osv. er<br />

anvendt indirektioner i stedet for fasttekster.<br />

Hvis en fasttekst ændres til en anden betydning, skal dette rettes manuelt i samtlige kørsler, hvori<br />

fastteksten indgår. Er der derimod anvendt indirektioner i stedet for fasttekster, er det nok at ændre i<br />

selve fastteksttypen og i den tilhørende macro med indirektionerne.<br />

Bemærk! Det anbefales ikke at ændre i eksisterende fastteksttyper. Det kan få uoverskuelige følger.<br />

104<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Eksempel 1 (kode uden indirektioner)<br />

ENUM Sprog &Sprog<br />

PROMPT ”Vælg sprog: ” GET(&Sprog) INPUT<br />

IF &Sprog == 1 THEN PRINT ”Valgt sprog: ”, &Sprog ENDIF<br />

IF &Sprog == 2 THEN PRINT ”Valgt sprog: ”, &Sprog ENDIF<br />

IF &Sprog == 3 THEN PRINT ”Valgt sprog: ”, &Sprog ENDIF<br />

PAUSE<br />

I dette eksempel er det svært at se hvilke sprog, der svarer til tallene 1, 2 og 3. Kan det ikke huskes, kan<br />

det være nødvendigt, at slå op i fastteksttypen.<br />

Fastteksttypen Sprog<br />

Position Fasttekst<br />

0 Standard<br />

1 Dansk<br />

2 Engelsk<br />

3 Tysk<br />

Det er nemmere at læse koden og foretage ændringer i fastteksttypen ved, at oprette et<br />

macrobibliotek med indirektioner til fastteksten.<br />

Macrobibliotek med indirektioner til fastteksttypen Sprog<br />

#LOCALMACRO.Dansk 1 #ENDMACRO<br />

#LOCALMACRO.Engelsk 2 #ENDMACRO<br />

#LOCALMACRO.Tysk 3 #ENDMACRO<br />

Biblioteket kan f.eks. kaldes SPROGINDIREKTIONER, og navnet skrives med stort.<br />

Ved at erstatte tallene 1, 2 og 3 i eksempel 1, bliver koden nemmere at læse. Se eksempel 2 herunder.<br />

Eksempel 2 (kode med indirektioner)<br />

#MacroLoad(SPROGINDIREKTIONER)<br />

ENUM _Language &Sprog<br />

PROMPT ”Vælg sprog: ” GET(&Sprog) INPUT<br />

IF &Sprog == #Dansk THEN PRINT ”Sprog: ”, &Sprog ENDIF<br />

IF &Sprog == #Engelsk THEN PRINT ”Sprog: ”, &Sprog ENDIF<br />

IF &Sprog == #Tysk THEN PRINT ”Sprog: ”, &Sprog ENDIF<br />

Indirektioner på fastteksttypen sprog (_Language) overalt hvor denne type anvendes, gør det ikke<br />

alene nemmere at læse og overskue selve kørslerne, men ved ændringer i rækkefølgen af teksterne i<br />

fastteksttypen, er det nok at ændre i fastteksten og i macrobiblioteket med indirektionerne.<br />

105<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgaver: Macroer<br />

Opgave 1: Macroen #UDLSatser<br />

Formål med opgaven<br />

At oprette en ny global macro med to parametre.<br />

Beskrivelse<br />

Oprettelse af macro<br />

Der skal oprettes en ny global macro til beregning af lejeværdi og forsikringsværdi. Macroen er med to<br />

parametre til modtagelse af henholdsvis et beløb og en procentsats.<br />

Returværdien er beløbet i parameter 1 forhøjet med satsen i parameter 2.<br />

1 Åben udviklingsmenuen og opret macroen.<br />

2 Opret en ny macro med navnet UDLSatser.<br />

Forløb √<br />

Kode i macro:<br />

{ %1 er KostPris fra LagerKart }<br />

{ %2 er procentsats fra et af felterne i UDLUdlånsSats}<br />

{ Macroen returnerer en værdi i form af kostprisen }<br />

{ justeret med procentsatsen. }<br />

{ Kan anvendes på andre beløb og procentsatser. }<br />

%1*(%2/100)<br />

Macroen foranstilles automatisk med $ tegnet, fordi det er en bruger oprettelse.<br />

3 Godkend macroen.<br />

106<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgave 2: Liste over udlejningsværdier<br />

Formål med opgaven<br />

At afprøve den nye globale macro #UDLSatser og konverteringsmacroerne #StrRFix, #StrLFix,<br />

#Num2Str og #Date2Str.<br />

Beskrivelse<br />

Du skal arbejde videre i XAL kørslen fra lektionen om funktioner.<br />

Alle felterne skal ændres så du ikke anvender funktioner til konvertering men macroer. Desuden skal<br />

felterne ItemNumber og ItemName1 konverteres med #StrRFix og #StrLFix, og lejeværdien skal<br />

beregnes den nye macro og udskrives efter feltet med udlejningsprocenten.<br />

Forløb √<br />

1 Forsæt i XAL kørslen fra forrige opgave og tilret startkommentarerne.<br />

2 Felterne:<br />

ItemNumber konverteres med #StrRFix (lgd=10)<br />

ItemName1 konverteres med #StrLFix (lgd=28)<br />

CostPrice konverteres med #Num2Str (lgd=10, 2 decimaler)<br />

Udlejningsprocent konverteres med #Num2Str (lgd=5, 1 decimal)<br />

Udlejningsværdi beregnes med #UDLSatser og konverteres med #Num2Str<br />

(lgd=10, 2 decimaler)<br />

SidstRettet konverteres med #Date2Str<br />

3 Godkend kørslen og kontrollér at den nye macro fungerer.<br />

107<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgave 3: Liste over udlejningsværdier pause for hver side<br />

Formål med opgaven<br />

At stoppe kørslen hver gang der er udskrevet 20 poster, samt at indsætte overskrifter.<br />

Beskrivelse<br />

Du skal arbejde videre i XAL kørslen fra forrige opgave.<br />

Kørslen skal ændres således at der holdes en pause for hver 20. postering og skærmen cleares.<br />

Desuden skal du indsætte overskrifter på hver side.<br />

Forløb √<br />

1 Forsæt i XAL kørslen fra forrige opgave og tilret startkommentarerne.<br />

2 Opret en variabel til tælling af poster.<br />

3 Anvend IF sætninger til kontrol af hvor mange linjer der udskrives.<br />

4 Indsæt overskrifter så de udskrives på hver side.<br />

5 Godkend kørslen og kontrollér at den nye macro fungerer.<br />

108<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


10. 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 />

Godkend 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 />

Godkend (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 />

Godkend (til du er helt ude af programmet) F3<br />

Funktion Fremgangsmåde Tast<br />

Opret Generelt/Tilpasning/Udviklingsmenu/XAL/Opret<br />

109<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 />

110<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 på<br />

é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 linjer<br />

på én 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 />

111<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


11. Huskelister Kommandoer og funktioner<br />

PRINT AT<br />

Syntaks PRINT <br />

PRINT ,,<br />

PRINT , AT ,<br />

Beskrivelse Kommandoen PRINT benyttes til udskrivning af status under XAL-kørsler.<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. Hvis der skal<br />

udskrives på andre medier, skal der benyttes WRITE eller OUTPUT.<br />

Hvis AT udelades rulles vinduet en linje op, og udskriften placeres på nederste<br />

linje i vinduet.<br />

Udskrifter bredere end vinduet afskæres, og fortsætter ikke på næste linje.<br />

Der kan max udskrives 8 udtryk. Er der behov for flere skal der angives flere<br />

PRINT kommandoer.<br />

Eksempler PRINT ”Ole Olsen”<br />

PAUSE<br />

PRINT 25<br />

Syntaks PAUSE<br />

PRINT ”Ole Olsen ”, 25, ” år”<br />

PRINT ”Ole Olsen ”, 25, ” år” AT 20,5<br />

Beskrivelse Kommandoen PAUSE anvendes til at stille en kørsel i bero midlertidigt.<br />

Kommandoen giver brugeren mulighed for at se udskriften, inden kørslen slutter<br />

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 ”Ole Olsen ”, 25, ” år” AT 20,5<br />

PAUSE<br />

112<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


WINDOW<br />

Syntaks<br />

WINDOW ,<br />

WINDOW , [AT ,]<br />

Beskrivelse Kommandoen WINDOW åbner et vindue på skærmen.<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 skal placeres på skærmen. Hvis AT<br />

udelades placeres vinduet i øverste venstre hjørne.<br />

Det oprindelige vindue lukkes før et nyt åbnes.<br />

Dette kan benyttes til at rydde det oprindelige vindue. Hvis vinduet f.eks.<br />

specificeres med højde og bredde lig 0,0 bliver det ikke åbnet, men det<br />

oprindelige lukkes.<br />

Eksempler 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


Variabler<br />

Syntaks<br />

&<br />

[] &<br />

Beskrivelse En variabel er en lille plads i hukommelsen der benyttes til at gemme værdier i<br />

Eksempler<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 />

Variabler initialiseres med nul-væ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 LEFT &Navn<br />

DATE &AnsatDato<br />

ENUM NejJa &Svar<br />

114<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Kommentar<br />

Syntaks<br />

{ }<br />

Beskrivelse En kommentar er en fritekst der indsættes et vilkårligt sted i programmet for at<br />

forklare funktionen.<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 />

Ved erklæring af variabler<br />

Ved forklaring af programmet<br />

Til at ignorere dele af programmet<br />

Eksempler { Ole Olsen 15.01.2012 }<br />

{ C5 version 2012 }<br />

{ Udskrift af debitorer med saldo}<br />

{ Erklæring af variable }<br />

115<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


SET<br />

Syntaks<br />

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 />

Dataelement kan være en lovlig venstreværdi dvs. variabler og felter.<br />

Udtryk er en højreværdi f.eks. et algebraisk udtryk.<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 SET &Antal = 100<br />

SET &Beløb = 45.25<br />

SET &Beløb = &Beløb + 350.50<br />

SET &ForNavn = ”Ole”<br />

SET &EfterNavn = ”Olsen”<br />

SET &Navn = &ForNavn + ” ” + &EfterNavn<br />

SET &AnsatDato = 25\01\1997<br />

SET &Svar = 1<br />

116<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


PROMPT<br />

Syntaks<br />

PROMPT [AT ,]<br />

<br />

INPUT AT ,<br />

Hvor kan være som flg.:<br />

GET (&Var),<br />

GET (&Var LENGTH ),<br />

GET (&Var DECIMALS ),<br />

GET (&Var REF .),<br />

GET (&Var ASENUM )<br />

Beskrivelse Kommandoen PROMPT benyttes til at stoppe op i programmet og spørge<br />

brugeren om nogle værdier der indsættes i variabler.<br />

Dette kan benyttes til styring videre i kørslen.<br />

PROMPT opstiller et modificerbart vindue. Der er dog ikke mulighed for at styre<br />

størrelsen af vinduet direkte. Det bliver automatisk tilpasset de specificerede<br />

linjer.<br />

Kommaerne efter linjerne bevirker linjeskift. Hvert komma giver ét linjeskift.<br />

Tekstrække i ASENUM kan være ’Teksts1\nTekst2\nTekst3’ osv.<br />

Eksempler PROMPT ”Indtast værdier”,,<br />

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

”Beløb..:” GET (&Beløb DECIMALS 2),<br />

”Navn...:” GET (&Navn LENGTH 15) ,<br />

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

”Svar...:” GET (&Svar)<br />

INPUT AT 10,5<br />

Infobox<br />

Syntaks Box(type:INT,tekst:STR,std:INT):INT<br />

Returværdi INT<br />

Beskrivelse Funktionen Box findes i fire typer.<br />

Infoboxen er en type 1 box.<br />

Den vises med grå baggrund.<br />

I teksten kan der indsættes linjeskift med \n.<br />

Eksempler SET Box(1,”Slut på kørslen”,0)<br />

117<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Advarselsbox<br />

Syntaks<br />

Returværdi INT<br />

Box(type:INT,tekst:STR,std:INT):INT<br />

Beskrivelse Funktionen Box findes i fire typer.<br />

Eksempler<br />

Dialogbox<br />

Advarselsboxen er en type 2 box.<br />

Boxen vises med rød baggrund.<br />

I teksten kan der indsættes linjeskift med \n.<br />

SET Box(2,”ADVARSEL\nSlut på kørslen”,0)<br />

Syntaks Box(type:INT,tekst:STR,std:INT):INT<br />

Returværdi INT<br />

Beskrivelse Funktionen Box findes i fire typer.<br />

Dialogboxen er en type 1 box.<br />

Boxen vises med grå baggrund.<br />

Eksempler INT &BoxTal<br />

I teksten kan der indsættes linjeskift med \n.<br />

I en dialogbox kan der indsættes trykknapper ved at omgive trykknappens tekst<br />

med to firkantede paranteser. Der kan være op til 11 trykknapper i en dialogbox.<br />

Svaret der kommer ind i variablen er IKKE værdien der står skrevet i knapperne,<br />

men positionen på knappen.<br />

I std angives det felt (trykknap) cursoren skal stille sig på default.<br />

SET &Boxtal = Box(1,”Vælg mellem [[ A ]] [[ B ]]<br />

eller [[ C ]]”,2)<br />

PRINT &BoxTal<br />

PAUSE<br />

118<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Ja/Nej box<br />

Syntaks<br />

Returværdi INT<br />

Box(type:INT,tekst:STR,std:INT):INT<br />

Beskrivelse Funktionen Box findes i fire typer.<br />

JA/NEJ boxen er en type 3 box.<br />

Ved NEJ sættes værdien til 2 og ved JA sættes værdien til 1.<br />

Hvis der i eksemplet svares NEJ sættes værdien af boxen til 2 og kørslen stopper<br />

med RETURN.<br />

Eksempel IF Box(3,”Skal kørslen fortsætte”,2) == 2 THEN<br />

Picklistebox<br />

RETURN<br />

ENDIF<br />

Syntaks Box(type:INT,tekst:STR,std:INT):INT<br />

Returværdi INT<br />

Beskrivelse Funktionen Box findes i fire typer.<br />

Eksempel<br />

Picklisteboxen er en type 4 box.<br />

Svaret der vendes tilbage med er positionen i picklisten startende med position<br />

1.<br />

Ved flere end 11 positioner i teksten dannes der et rullevindue.<br />

SET &Værdi = Box(4,”Æbler\nPærer\nBananer”,1)<br />

PRINT &Værdi<br />

PAUSE<br />

119<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


SEARCH-END<br />

Syntaks<br />

SEARCH <br />

[RENAME ]<br />

[USING [INDEX] ] eller [SEQ]<br />

[ORDER [BY] [SHOW ] ]<br />

[WHERE ]<br />

[]<br />

END<br />

Beskrivelse Kommandoen SEARCH anvendes til at gennemløbe poster i et kartotek.<br />

Med USING kan man angive sorteringsmåde iflg. det angivne index.<br />

De poster der udvælges vha. SEARCH kan oprettes, slettes, opdateres eller<br />

udleveres til f.eks. rapporter.<br />

Eksempler SEARCH CustTable<br />

PRINT Account,” ”,Name<br />

END<br />

PAUSE<br />

SEARCH CustTable USING AccountIdx<br />

PRINT Account,” ”,Name<br />

END<br />

PAUSE<br />

SEARCH CustTable USING AccountIdx<br />

ORDER BY Name SHOW Account<br />

WHERE Group == ”DK”<br />

PRINT Group,” ”,Account,” ”,Name<br />

END<br />

PAUSE<br />

SEARCH CustTable USING AccountIdx<br />

PRINT Account,” ”,Name<br />

SEARCH CustTrans<br />

WHERE Account == CustTable.Account<br />

PRINT Account,” ”,AmountMST,” ”,Date_<br />

END<br />

END<br />

PAUSE<br />

120<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<br />

IF THEN<br />

<br />

[ELSE<br />

]<br />

ENDIF<br />

Beskrivelse Kommandoen IF-THEN-(ELSE)-ENDIF er en betingelsesstruktur der foreskriver én<br />

eller to konsekvenser af en opstillet betingelse.<br />

Betingelsesstrukturen har tre bestanddele: En betingelse, en betinget konsekvens<br />

og en alternativ konsekvens.<br />

Hvis betingelsen evaluerer til SAND, afvikles kommandoerne i den betingede<br />

konsekvens. Ellers, hvis betingelsen evaluerer til FALSK, afvikles kommandoerne i<br />

den alternative konsekvens dvs. efter ELSE.<br />

I nogle tilfælde er det ikke nødvendigt at opstille en alternativ konsekvens. I så<br />

fald vil der ikke blive udført kommandoer, hvis betingelsen evaluerer til falsk.<br />

Eksempler SEARCH CustTable<br />

IF BalanceMST > BalanceMax THEN<br />

PRINT ”Over (betingelsen er sand)”<br />

ELSE<br />

PRINT ”Under (betingelsen er falsk)”<br />

ENDIF<br />

END<br />

PAUSE<br />

Eksempel med<br />

boolsk udtryk<br />

NextYr<br />

En IF-THEN-ENDIF betingelse kan også opstilles som et boolsk udtryk med<br />

syntaksen: ? : <br />

SEARCH CustTable<br />

PRINT BalanceMST > BalanceMax ? ”Over” : ”Under”<br />

END<br />

PAUSE<br />

Syntaks NextYr(d:DATE):DATE<br />

Returværdi DATE<br />

Beskrivelse NextYr beregner den samme dato næste år.<br />

Eksempler NextYr(29\02\1988) -> 28\02\1989<br />

NextYr(28\02\1989) -> 28\02\1990<br />

121<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


DayOfWk<br />

Syntaks<br />

Returværdi INT<br />

DayOfWk(d:DATE):INT<br />

Beskrivelse DayOfWk beregner hvilken dag i ugen, det er.<br />

Eksempler<br />

DayName<br />

Mandag er dag nr. 1.<br />

DayOfWk(02\02\1989) -> 4<br />

Syntaks DayName(i:INT):STR<br />

Returværdi STR<br />

Beskrivelse DayName returnerer navnet på ugedagen nummer i.<br />

Eksempler DayName(1) -> ”Mandag”<br />

DayName(7) -> ”Søndag”<br />

122<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


INTRODUCE<br />

Syntaks<br />

INTRODUCE [] RENAME <br />

Beskrivelse INTRODUCE indfører og åbner for én post ad gangen, i modsætning til SEARCH<br />

der åbner for mange poster ved et gennemløb af et kartotek.<br />

Eksempler<br />

Uden direkte opslag udfyldes posten med nul-værdier. man siger at den er fiktiv.<br />

Med direkte opslag udfyldes posten med værdier fra databasen. Man siger at<br />

den er faktisk.<br />

Hvis man forsøger at åbne med INTRODUCE og et direkte opslag, og posten ikke<br />

findes vil den blive fiktiv.<br />

Man kan finde ud af om en post er fiktiv eller faktisk ved, at undersøge indholdet<br />

i feltet LøbeNummer. Hvis LøbeNummer er 0 er posten fiktiv ellers er den faktisk.<br />

INTRODUCE CustTable[AccountIdx==”33344”]<br />

PRINT Account,” ”,Name<br />

PAUSE<br />

INTRODUCE CustTable[AccountIdx==”33344”]<br />

RENAME Customer<br />

PRINT Customer.Account,” ”,Customer.Name<br />

PAUSE<br />

INTRODUCE CustTable<br />

SET Account = ”1000”<br />

SET Name = ”Søren Sørensen”<br />

SET Group = ”UDL”<br />

INSERT CustTable<br />

123<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


INSERT<br />

Syntaks<br />

INSERT [DELAYED]<br />

Beskrivelse INSERT anvendes til at oprette nye poster i et kartotek.<br />

Benyttes typisk i forlængelse af INTRODUCE, der indfører en fiktiv post.<br />

Anvendes også i forbindelse med READ til indlæsning af poster fra en fremmed<br />

fil.<br />

Eksempler INTRODUCE CustTable<br />

SET Account = ”2000”<br />

SET Name = ”Ole Olsen”<br />

SET Group = ”UDL”<br />

INSERT CustTable<br />

UPDATE<br />

Syntaks UPDATE [DELAYED]<br />

Beskrivelse UPDATE anvendes til at overskrive en post i et kartotek.<br />

Den kan foretage permanente ændringer på poster i et kartotek.<br />

Anvendes typisk i forlængelse af en eller flere tildelinger til felter i en post.<br />

Ændringerne til posten registreres på disken.<br />

Eksempler INTRODUCE CustTable[AccountIdx==”2000”]<br />

SET Adress1 = ”Koldingvej 25”<br />

SET ZipCity = ”6000 Kolding”<br />

SET Adress2 = ”Bramdrupdam”<br />

UPDATE CustTable<br />

DELETE<br />

Syntaks DELETE [DELAYED]<br />

Beskrivelse DELETE anvendes til at slette en post i et kartotek.<br />

Eksempler<br />

Anvendes typisk i periodiske kørsler, når der skal ryddes op i kartoteker.<br />

INTRODUCE CustTable[AccountIdx==”2000”]<br />

DELETE CustTable<br />

124<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


OUTPUT<br />

Syntaks<br />

OUTPUT [DELAYED]<br />

Beskrivelse OUTPUT er en rapport-opbygningsspecifik kommando.<br />

Kommandoen udleverer poster til Rapport-opbygning.<br />

Anvendes i den kørsel der udleder posterne, som rapporten skal omfatte.<br />

Eksempler SEARCH CustTable USING AccountIdx<br />

WHERE BalanceMST > 0.00<br />

OUTPUT CustTable<br />

END<br />

FIND<br />

Syntaks FIND []<br />

Beskrivelse FIND tildeler nye værdier til en post med virkefelt.<br />

Virkefelt kan være tildelt poster der er udsøgt med SEARCH, indført med<br />

INTRODUCE eller opfanget med EXTERN.<br />

Kommandoen udpeger en post uden først at søge hele kartoteket igennem.<br />

FIND finder nye poster vilkårligt mange gange, når der først er blevet indført en<br />

én gang vha. INTRODUCE.<br />

Sammenligning med INTRODUCE:<br />

INTRODUCE opretter poster, FIND udfylder kun.<br />

INTRODUCE bruger RENAME, det kan FIND ikke.<br />

INTRODUCE bruger hukommelse hver gang, FIND benytter samme hukommelse<br />

vilkårligt mange gange.<br />

Eksempler INTRODUCE CustTable<br />

FIND CustTable[AccountIdx==”33344”]<br />

PRINT Account,” ”,Name<br />

PAUSE<br />

125<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


WRITE<br />

Syntaks<br />

WRITE AS FROM ()<br />

Beskrivelse Anvendes til at oprette poster i fremmede filer.<br />

Udfører en export af data.<br />

’Data-manipulation’ benyttes med fordel til, at danne en kørsel til export af data.<br />

Gemmes kørslen vil den blive placeret som en $ markeret QTX i<br />

udviklingsmenuen.<br />

Eksempler SEARCH CustTable USING AccountIdx<br />

WRITE ”CustTable.com” AS COMMA<br />

FROM (Account,Name)<br />

END<br />

READ<br />

Syntaks<br />

READ RENAME AS <br />

INTO ()<br />

END<br />

Beskrivelse READ er en løkke, der afsluttes med END.<br />

Eksempler<br />

Anvendes til at gennemløbe poster i en fremmed fil.<br />

’Data-manipulation’ kan med fordel benyttes til at danne en kørsel til import af<br />

data.<br />

Gemmes kørslen vil den blive placeret som en $ markeret XAL-kørsel i<br />

udviklingsmenuen.<br />

INTRODUCE CustTable<br />

READ ”CustTable.com” AS COMMA<br />

INTO (Account,Name)<br />

INSERT CustTable<br />

END<br />

126<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


WHILE-END<br />

Syntaks<br />

WHILE <br />

<br />

END<br />

Beskrivelse Er en løkke, men gennemløber ikke kartoteker som SEARCH.<br />

Eksempler<br />

PROCESS<br />

Anvendes typisk til at foretage en række kommandoer et bestemt antal gange.<br />

Betingelsen for den fortsatte afvikling af kommandoerne i løkken er et boolsk<br />

udtryk.<br />

Betingelsen er opfyldt når det boolske udtryk evaluerer til sand.<br />

INT &Tæller<br />

WHILE &Tæller


Syntaks #Debug(&Variabelnavn)<br />

Beskrivelse Print af variabelnavn og indhold<br />

Kørsel oversat med debuginformation<br />

Eksempler REAL &Saldo<br />

SEARCH CustTable<br />

#Add(&Saldo,BalanceMST)<br />

PRINT #Debug(&Saldo)<br />

END<br />

PAUSE<br />

128<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


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

129<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


12. Kartoteker, triggere med inddatakontrol<br />

Mål med lektionen<br />

Formålet med denne lektion er at give deltagerne kendskab til triggerne i kartoteker og<br />

kartoteksfelter. Deltagerne lærer at udføre inddatakontrol i et par af triggerne .<br />

Efter lektionen skal kursisterne kunne:<br />

Anvende kartotekstriggeren Post-change-record til inddatakontrol af hele records<br />

Anvende felttriggeren Checkformel i feltet Check af indtastning til inddatakontrol af feltindhold.<br />

Generelt<br />

Kartoteker og kartoteksfelter i C5 indeholder en del triggere, der kan anvendes til styring af poster i<br />

kartotekerne. Triggerne kan bl.a. anvendes til inddatakontrol direkte i kartoteker og i kartoteksfelter.<br />

Kartoteker<br />

Alle kartoteker har deres eget sæt af triggere, der aktiveres på forskellige tidspunkter i forhold til<br />

behandlingen af indholdet i de enkelte poster i kartotekerne.<br />

Triggerne findes i udviklingsmenuen i søjlen DBD under Ret/Kerne/Vælg kartotek. I menuen med<br />

kartotekets navn vælges menupunktet Formler for kartotek. Det er samme menu, der vises, når der<br />

oprettes nye kartoteker.<br />

Formler for kartotek er det samme som kartotekstriggere.<br />

Det skal bemærkes, at det ikke kan ses, om der er kode i de enkelte triggere som f.eks. med Forms-<br />

Triggere og QT-Triggere. Der bliver ikke anført en ’stjerne’ foran triggernavnet, når en kartotekstrigger<br />

indholder kode. Derfor kan man ikke danne sig et overblik over, hvilke triggere der er kode i, ved blot<br />

at kigge på triggerne i oversigten. Man skal ind i hver enkelt trigger, og efterse om der er kode og i<br />

givet fald, hvad koden udfører.<br />

Desuden kan kartoteks triggere IKKE debugges.<br />

Formler for kartotek (triggere)<br />

Trigger Anvendelse<br />

Post-change-record Kontrollere en komplet indtastning af en post<br />

Post-load Afvikles når en post læses fra disken<br />

Init-record Udfyldning af startværdier i en nyoprettet post<br />

Pre-delete FØR sletning af post. Kontrollere om en post må slettes<br />

Post-delete EFTER sletning af en post<br />

Pre-update FØR rettelse af en post. Kontrollere om en post må rettes<br />

Post-update EFTER rettelse af en post<br />

Pre-insert FØR oprettelse af en post. Kontrollere om posten må oprettes<br />

Post-insert (OK) EFTER oprettelse af en post blev afsluttet med succes<br />

Post-insert (Fail) EFTER oprettelse af en post blev afvist.<br />

130<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Inddatakontrol på kartoteker<br />

Triggeren Post-change-record<br />

I denne lektion behandles kun triggeren Post-change-record, da den kan anvendes til inddatakontrol.<br />

Triggeren afvikles hver gang en post afsluttes og der er ændret i mindst et af felterne. Triggeren<br />

anvendes til en samlet kontrol af hele indtastningen af en post.<br />

Triggeren kan f.eks. anvendes til kontrol af, at bestemte felter ér blevet udfyldt inden, posten gemmes i<br />

kartoteket.<br />

Efterfølgende vises et eksempel fra triggeren Post-change-record i kartoteket CustTable.<br />

Eksempel på inddatakontrol i Post-change-record i CustTable<br />

STR 255 &Message<br />

IF NOT Group THEN<br />

#Add(&Message, ”GRUPPE skal angives. \n”)<br />

ENDIF<br />

IF NOT Account THEN<br />

#Add(&Message, ”KONTO skal angives. \n”)<br />

ENDIF<br />

IF &Message THEN<br />

SET BOX(1,&Message,0)<br />

RETURN 0<br />

ENDIF<br />

I eksemplet erklæres først en variabel af typen tekst med navnet &Message.<br />

Derefter undersøges det i to IF strukturer, om felterne Debitorgruppe (Group) og Kontonummer<br />

(Account) er udfyldt (IF NOT).<br />

Hvis felterne er udfyldt, springes IF strukturerne over. Er de derimod ikke udfyldt, tilføjes teksten<br />

’GRUPPE skal angives’ eller ’KONTO skal angives’, til variablen &Message. (#Add(&Message …)).<br />

Til sidst undersøges det, om variablen &Message har et indhold (IF &Message). Hvis den har det, er det<br />

fordi et af felterne mangler, og værdien i variablen udskrives, SET BOX, derefter vendes tilbage til den<br />

form eller det listbillede, hvori posten findes, RETURN 0.<br />

Vigtigt! Det er kommandoen RETURN 0, der sørger for, at der vendes tilbage til den form eller det<br />

listbillede, hvor posten anvendes lige nu, og at formen eller listbilledet ikke kan forlades, før felterne er<br />

udfyldt.<br />

Fjernes eller glemmes kommandoen medfører det, at meddelelsen til brugeren blot vises, og at posten<br />

alligevel godkendes, som den er, og gemmes i kartoteket.<br />

Kartoteksfelter<br />

Triggere<br />

Ved oprettelse af et nyt kartoteksfelt åbnes der et indtastningsbillede til opsætning og beskrivelse af<br />

selve feltet.<br />

Alle kartoteksfelter indeholder i dette billede fire felter med felttriggere.<br />

131<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Felttriggere<br />

Felt (trigger) Værdi Anvendelse<br />

Check af indtastning Checkformel Kode der checker om indtastningen er OK<br />

Manipulationsformler Førformel Afvikles FØR der ændres i feltet<br />

Efterformel Afvikles EFTER der ændres i feltet<br />

Udfør Efterformel fra* Efterformel udføres fra et andet angivet felt.<br />

Feltliste vises med ALT+H.<br />

* Feltet ’Udfør Efterformel fra’ er ikke i sig selv en trigger, men derimod et felt beregnet til indsættelse<br />

af navn på et andet felt (i kartoteket), hvorfra triggeren ’Efterformel’ skal aktiveres.<br />

Inddatakontrol på felter<br />

Triggeren ’Check af indtastning’<br />

I denne lektion behandles kun triggeren ’Check af indtastning’.<br />

Triggeren afvikles hver gang, der ændres værdi i det felt, den tilhører og feltet forlades.<br />

Bemærk at kontrollen ligger på feltet i databasen og derfor træder i funktion i samtlige forms og<br />

listbilleder, hvori feltet indgår og der ændres indhold i det.<br />

Triggeren kan indeholde hvad som helst, programmøren har behov for i forbindelse med, at der<br />

ændres værdi i et felt. Der kan f.eks. indsættes en besked til brugeren.<br />

Eksempel på kontrol i triggeren ’Check af indtastning’<br />

IF Date < 01\01\99 THEN<br />

SET BOX(2,”Dato er for gammel!”,0)<br />

RETURN 0<br />

ENDIF<br />

I ovenstående eksempel forudsættes, at triggeren ligger i et datofelt i et tænkt kartotek.<br />

I IF sætningen er der opsat en betingelse, der kontrollere datoen i feltet.<br />

Det kontrolleres således, om der indtastes en dato, der er for gammel i forhold til datoen i IF<br />

sætningen. Datoen må således IKKE være før 1. Januar 1999.<br />

Hvis datoen er i orden overspringes hele koden.<br />

Hvis den er for gammel, udføres de to linjer inde i IF strukturen. Først udskrives en advarselsboks med<br />

besked til brugeren om, at datoen er for gammel, SET BOX, derefter vendes tilbage til den form eller<br />

det listbillede, hvori datoen blev indtastet, RETURN 0.<br />

Vigtigt! Det er kommandoen RETURN 0, der sørger for, at der vendes tilbage til det sted, hvor feltet<br />

anvendes lige nu og at feltet ikke kan forlades før, der er tastet en korrekt dato.<br />

Fjernes eller glemmes kommandoen, medfører det at meddelelsen til brugeren blot vises, og der kan<br />

fortsættes med indtastning i næste felt.<br />

132<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgaver: Kartoteker, triggere med inddatakontrol<br />

Opgave 1: Inddatakontrol på UDLUdlånsKart<br />

Formål med opgaven<br />

At udføre inddatakontrol i kartotekstriggere i UDLUdlånsKart<br />

Huskelister<br />

Listbillede-opret<br />

Beskrivelse<br />

Der skal udføres inddatakontrol i triggeren Post-change-record på kartoteket UDLUdlånsKart.<br />

Det skal kontrolleres at bestemte felter er udfyldt inden poster kan forlades i listbilleder eller forms til<br />

kartoteket.<br />

Kontrollerne udføres på samme måde som i triggeren Post-change-record i kartoteket CustTable i C5.<br />

Forløb √<br />

1 Opret inddatakontrol i triggeren Post-change-record i kartoteket UDLUdlånsKart.<br />

Felterne UdlånsNummer, UdlånsDato og Attention SKAL udfyldes.<br />

2 Opret et listbillede til kartoteket UDLUdlånsKart med alle felter, undtagen<br />

systemfelterne.<br />

3 Afprøv om inddatakontrollerne fungerer ved at oprette forskellige udlånsnumre<br />

med ovenstående felter. Prøv at undlade at udfylde felterne.<br />

133<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgave 2: Inddatakontrol på UDLUdlånsPost<br />

Formål med opgaven<br />

At udføre inddatakontrol i kartotekstriggere i UDLUdlånsPost<br />

Huskelister<br />

Listbillede-opret<br />

Beskrivelse<br />

Der skal udføres inddatakontrol i triggeren Post-change-record på kartoteket UDLUdlånsPost.<br />

Det skal kontrolleres, at bestemte felter er udfyldt, inden poster kan forlades i listbilleder eller forms til<br />

kartoteket.<br />

Kontrollerne udføres på samme måde som i triggeren Post-change-record i kartoteket CustTable.<br />

Forløb √<br />

1 Opret inddatakontrol i triggeren Post-change-record i kartoteket UDLUdlånsPost.<br />

Felterne UdlånsNummer, DebitorKonto og VareNummer SKAL udfyldes.<br />

2 Opret et listbillede til kartoteket UDLUdlånsPost med alle felter, undtagen<br />

systemfelterne.<br />

3 Afprøv om inddatakontrollerne fungerer ved at oprette forskellige udlånslinjer med<br />

ovenstående felter. Prøv at undlade at udfylde felterne.<br />

134<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgave 3: Inddatakontrol på kartoteksfelter<br />

Formål med opgaven<br />

At udføre inddatakontrol i en trigger i et felt i kartoteket UDLUdlånsKart<br />

Beskrivelse<br />

Der skal udføres inddatakontrol i triggeren Checkformel på felterne UdlånsDato og ReturDato i<br />

kartoteket UDLUdlånsKart.<br />

Det skal kontrolleres, at datoen der indtastes i feltet UdlånsDato, ikke er mere end én måned gammel.<br />

Hvis den er det, skal der udskrives en advarselsboks med forklaring til brugeren.<br />

I feltet ReturDato skal det desuden kontrolleres, at returdatoen ikke er mindre end UdlånsDatoen.<br />

Kontrollerne skal udføres på en sådan måde, at felterne ikke kan forlades før datoerne er rigtige.<br />

Forløb √<br />

1 Opret inddatakontrol i triggeren Checkformel i kartoteket UDLUdlånsKart i feltet<br />

UdlånsDato.<br />

Datoen må ikke være mere end én måned gammel. Hvis den er det, skal der<br />

udskrives en advarselsboks og returneres til feltet.<br />

Feltet må ikke forlades, før datoen er rigtig.<br />

2 Opret inddatakontrol i triggeren Checkformel i kartoteket UDLUdlånsKart i feltet<br />

ReturDato.<br />

Datoen må ikke være før UdlånsDatoen. Hvis den er det, skal der udskrives en<br />

advarselsboks og returneres til feltet.<br />

Feltet må ikke forlades før datoen er rigtig.<br />

3 Afprøv om inddatakontrollerne fungerer ved at oprette forskellige udlån med<br />

ovenstående felter.<br />

Prøv at indtaste forskellige datoer der er ’forkerte’, så du kan se, at<br />

inddatakontrollerne fungerer efter hensigten.<br />

135<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


13. 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 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 />

136<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 godkendes, 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 />

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 />

137<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


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 />

Form<br />

formler<br />

Vindue<br />

Form<br />

formler<br />

Init<br />

Pre-form<br />

Error<br />

138<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.<br />

Kommandoerne anvendes som vist i 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 parantes adskilt med kommaer.<br />

139<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Sammenligning mellem kontrolkommando og -macro<br />

Control ”Index InvenTable ItemIdx”<br />

#Frm_Index(InvenTable, ItemIdx)<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.<br />

I denne og de efterfølgende lektioner anvendes macroerne.<br />

Hvis der ønskes yderlige information i Teknisk Reference, skal der søges efter de tilsvarende<br />

kontrolkommandoer.<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 />

Der findes mange forskellige macrobiblioteker i XAL sproget. Nogle er dedikeret til specielle formål,<br />

hvilket ofte fremgår af bibliotekets navn.<br />

140<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


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 />

Eksempel<br />

Trigger Macroer<br />

Init<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 />

Eksempel<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 />

Syntaks<br />

#Frm_Index(, )<br />

141<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Bemærk! 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 />

Eksempel<br />

Trigger Macroer<br />

Pre-Form<br />

#Frm_Index(InvenTable, ItemIdx)<br />

I dette eksempel anvendes blokken InvenTable og indexet ItemIdx. Husk at indexet tilhører det<br />

kartotek, der er tilknyttet blokken, men at det alligevel er blokkens navn, der skal angives som<br />

parameter til 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 />

Macroen indsættes som regel i triggeren Pre-Form under macroen #Frm_Index().<br />

Eksempel<br />

Trigger Macroer<br />

Pre-Form<br />

#Frm_Index(InvenTable, ItemIdx)<br />

#Frm_Search(InvenTable)<br />

Husk at det er blokkens navn, der angives som parameter og ikke kartoteksnavnet.<br />

142<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


#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 />

Eksempel<br />

Trigger Macroer<br />

Pre-Form<br />

#Frm_Index(InvenTable, ItemIdx)<br />

#Frm_SearchEnd(InvenTable)<br />

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 />

Triggere Macroer<br />

Init<br />

Pre-form<br />

Error<br />

#MacroLoad(FORMS)<br />

#Frm_Index(InveTable, ItemIdx)<br />

#Frm_Search(InvenTable)<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 />

143<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


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

Ovenfor vises den foreløbige anvendelse af triggerne Init og Pre-form.<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!<br />

Ofte vil det dog være mere rigtigt at indsætte ovenstående kontrolkommandoer og macroer i Preform<br />

end i Init, idet Pre-form anvendes i Windows når en ’detail form’ eller en underform er ’linked’ og<br />

kaldes fra en ’master form’ eller en hovedform. Se nærmere forklaring til dette i det nævnte tillæg.<br />

I denne og efterfølgende lektioner anvendes derfor altid triggeren Pre-form.<br />

Bemærk!<br />

Er Init og Pre-form helt tomme kan brugerne uden videre oprette, rette og slette poster i formen,<br />

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 />

144<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: Vindue til formen UDLUdlånsKart<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 kartoteket UDLUdlånsKart. Desuden skal relevante triggere udstyres med<br />

macroer til styring og fejlhåndtering<br />

1 Opret vinduet til formen UDLUdlånsKart.<br />

Forløb √<br />

Giv den navnet UDLUdlånsKart. Teksten i rammen skal være ’Udlånskartotek’.<br />

Størrelsen på vinduet skal være 22 høj 63 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, benyt indexet<br />

UDLUdlIdx.<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 />

145<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


14. 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 />

146<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 />

Debitorer<br />

KontoNummer: Kontonummer skal indtastes<br />

Navn ......:<br />

Telefon ...:<br />

Ledetekster<br />

fremkommer<br />

automatisk<br />

Cursor<br />

bestemmer<br />

feltets plads<br />

SH+F2 Opret blok<br />

Samme navn som<br />

kartoteket<br />

Blokkens navn vises i bunden af skærmen under opbygningen<br />

Kartotek<br />

Fritekst kan<br />

skrives overalt<br />

Felter indsættes fra<br />

kartotek med F2 og Enter<br />

147<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’<br />

At 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 />

Blokken skal have samme navn som kartoteket.<br />

Nummer...: UdlånsType:<br />

Konto....: UdlånsDato:<br />

Attention: ReturDato.:<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 />

Felterne er: UdlånsNummer, DebitorKonto, Attention, UdlånsType, UdlånsDato og<br />

ReturDato.<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 UDLUdlånsType 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ånsNummer og DebitorKonto åbnes<br />

direkte. Ellers skal du foretage de nødvendige ændringer, så de kommer til det.<br />

148<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


15. 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 />

149<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 />

Varelinjer<br />

Varenummer Varenavn Serienr Status<br />

Type...: Følgeseddel: Valuta:<br />

Ref....: Faktura....: Beløb.:<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 />

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 />

Bloknavn<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 />

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 />

150<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


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 />

Varelinjer<br />

Varenummer Varenavn Serienr Status<br />

Type...: Følgeseddel: Valuta:<br />

Ref....: Faktura....: Beløb.:<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 />

Felter indsættes fra kartotek med F2<br />

og ENTER.<br />

Placeringen udføres automatisk<br />

Felternes format kan ændres både under og efter opsætningen på formen.<br />

151<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgaver: Multi record blok<br />

Opgave 1: Form med multi record blok<br />

Formål med opgaven<br />

At oprette en ’multi record blok’ i en form der allerede har en anden 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ånsKart.<br />

Formen består i forvejen af en enkelt record blok med navnet UDLUdlånsKart. Multi record blokken<br />

skal tilknyttes kartoteket UDLUdlånsPost og den skal have samme navn.<br />

Blokken skal være autogenereret og starte i kolonne 0 linje 12 som vist herunder.<br />

Udlånskartotek<br />

Nummer...: UdlånsType:<br />

Konto....: UdlånsDato:<br />

Attention: ReturDato.:<br />

Varenr SerieNr UdlånsStat Dkk Udlejn Dkk Forsik<br />

152<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


1 Fortsæt i formen der blev anvendt i den forrige lektion.<br />

Forløb √<br />

2 Opret blokken på vinduet med Ja i autogenér og giv den samme navn som<br />

kartoteket UDLUdlånsPost. Blokken skal starte i kolonne 0 linje 12.<br />

3 Indsæt felterne og lad dem blive placeret automatisk som ovenfor.<br />

Felterne er: VareNummer, SerieNummer, UdlånsStatus, UdlejningsVærdi og<br />

Forsikringsværdi.<br />

4 Godkend formen.<br />

153<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


16. Virtuelle felter i forms<br />

Mål med lektionen<br />

Formålet med denne lektion er at lære deltagerne at anvende virtuelle felter i forms.<br />

Efter lektionen skal kursisterne kunne:<br />

Indsætte virtuelle felter i forms<br />

Tildele værdier af forskellig art til virtuelle felter.<br />

Generelt<br />

Forms består altid af en eller flere blokke, hvorpå der indsættes felter, der hentes fra det tilknyttede<br />

kartotek.<br />

Til tider er der behov for at anvende ’Virtuelle felter’.<br />

Virtuelle felter er felter, der ikke tilhører et bestemt kartotek. Felterne anvendes f.eks. til visning af<br />

værdier, der ikke skal gemmes i kartoteker.<br />

Der kan oprettes blokke der ikke tilknyttes et kartotek. Hvis en blok ikke tilknyttes et kartotek, kan der<br />

kun indsættes virtuelle felter.<br />

Et eksempel herpå er lommeregneren, Calculator, i C5. Denne består udelukkende af virtuelle felter.<br />

Oprettelse af virtuelle felter<br />

Virtuelle felter oprettes næsten på samme måde som almindelige kartoteksfelter.<br />

I Enkelt Record blokke oprettes felterne manuelt og i Multi Record blokke oprettes de automatisk.<br />

Felterne oprettes med funktionen Opret felt der startes med F2.<br />

Funktionen åbner en boks med indtastningsfeltet Feltnavn, hvori der angives navnet på det felt, der<br />

skal oprettes.<br />

Vigtigt! Kartoteksfelter indsættes fra en liste over felter ved at taste ENTER og vælge et felt.<br />

Virtuelle felter oprettes ved at indtaste navnet på feltet.<br />

Navngivning<br />

Virtuelle felter navngives efter samme principper som kartoteksfelter. Desuden må der ikke være<br />

sammenfald med navne fra andre felter i formen eller kartoteker der er knyttet til blokke i formen.<br />

Regler for feltnavne<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 />

154<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Virtuelle felter foranstilles automatisk med et & tegn. Dette skal således ikke indsættes manuelt. Under<br />

oprettelsen indtastes blot selve navnet på det virtuelle felt.<br />

Virtuelle felter kan formatteres eller opsættes på ligefod med almindelige kartoteksfelter.<br />

Opsætning<br />

Opsætning eller formattering kan udføres når virtuelle felter oprettes eller ændres med funktionerne<br />

’Opret felt’ F2 eller ’Ret felt’ F6.<br />

Når funktionerne aktiveres, fremkommer der en dialogboks til justering af det aktuelle felt.<br />

Dialogboksen har forskelligt indhold afhængigt af felttype.<br />

Der er seks felttyper at vælge mellem, når der oprettes virtuelle felter.<br />

Typer på virtuelle felter i C5<br />

Felttyper (virtuelle)<br />

Heltal<br />

Kommatal<br />

Alfanumerisk<br />

Dato<br />

Fasttekst<br />

Trykknap<br />

Skemaet, på næste side, indeholder en samlet oversigt over opsætningsmulighederne i virtuelle felter.<br />

De første seks kolonner viser hvad, der kan justeres på de enkelte felter, og svarer til skemaet herover.<br />

155<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opsætningsmuligheder på virtuelle felter i forms<br />

Felttyper Felt i opsætning Muligheder<br />

H K A D F T Feltnavn Navn på felt (kan ikke ændres)<br />

H K A D F T Feltets bredde Antal tegn<br />

H K A D F T Feltets justering Venstrestillet, Højrestillet, Centreret<br />

A F Store bogstaver Nej eller Ja<br />

H K A D F Rette i indhold Nej eller Ja<br />

H K A D F T Hvor mange linjer Alle linjer eller én linje<br />

H K A D F T Feltet autoplaceres Nej eller Ja<br />

H K A D F T Automatisk ledetekst Nej eller Ja<br />

H K A D F Autohop næste felt Nej eller Ja<br />

H K A D F Kopier felt Nej eller Ja<br />

H K A D F Skal feltet vises Nej eller Ja<br />

H K A D F T Ledetekst Evt. ny ledetekst (hvis blank bruges databasens)<br />

H K A D F T Brugeropsættes Nej eller Ja<br />

H K A D F Spring feltet over Nej eller Ja<br />

H K A D F Søgning efter input Nej eller Ja<br />

H K A 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 T National valuta Nej eller Ja<br />

K Automatisk dec. tegn Nej eller Ja<br />

T Skygge Nej eller Ja<br />

T Start/Sluttegn i ender Nej eller Ja<br />

T Tænd/sluk knap Nej eller Ja<br />

T Farve for inaktiv Nummer på farve<br />

156<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Tildeling<br />

Virtuelle felter betragtes som variabler, hvilket fremgår af, at deres navne foranstilles med & tegnet.<br />

Felterne er ikke variabler i den forstand, at de skal erklæres inden, de kan bruges. De oprettes blot som<br />

virtuelle felter og skal herefter behandles som variabler.<br />

Tildeling af værdier til virtuelle felter udføres således med SET kommandoen på samme måde som ved<br />

variabler.<br />

Der kan tildeles mange forskellige typer af værdier til felterne. Det kan være værdier i form af tekster,<br />

heltal, kommatal, funktioner, direkte opslag osv.<br />

Husk! Værdierne skal svare til felttypen.<br />

Eksempel på funktionen Today()<br />

SET &DagsDato = Today()<br />

I eksemplet forudsættes det, at der i en form er oprettet et virtuelt felt med navnet &DagsDato.<br />

Meningen med feltet er, at det i formen skal vise, hvilken dato det er i dag.<br />

Når virtuelle felter skal tildeles værdier, foregår det i en af triggerne i formen.<br />

I ovenstående eksempel kunne tildelingen f.eks. foregå i felttriggeren Post-Load på feltet selv. Denne<br />

trigger aktiveres hver gang en post vises på skærmen, hvad enten det er en ny der oprettes eller der<br />

bladres mellem eksisterende poster.<br />

Det er ikke altid de samme triggere der anvendes. Det afhænger af de aktuelle situationer, og skal<br />

derfor bestemmes fra gang til gang.<br />

157<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgaver: Virtuelle felter i forms<br />

Opgave 1: Virtuelle felter<br />

Formål med opgaven<br />

At indsætte virtuelle felter i en form med to blokke.<br />

Beskrivelse<br />

Der skal indsættes virtuelle felter i den nye form UDLUdlånsKart.<br />

Der skal indsættes et felt i hovedet til visning af den samlede lejeværdi for udlånet og i linjerne skal der<br />

indsættes et felt til visning af varenavnet. Desuden skal der i hver blok, også indsættes et ’Notat’ felt.<br />

Der skal således indsættes fire virtuelle felter på formen, som vist herunder.<br />

Nummer...: UdlånsType:<br />

Konto....: UdlånsDato:<br />

Attention: ReturDato.:<br />

Dkk Forsikring:<br />

Dkk Lejeværdi.: Notat.....:<br />

Varenr VareNavn SerieNr UdlånsStat<br />

Dkk Udlejn Dkk Forsik Notat<br />

Opdatering af virtuelle felter<br />

Opdateringen af de virtuelle felter vil finde sted i andre lektioner.<br />

Udlånskartotek<br />

Lejeværdien opdateres under lektionen ’USRKEY triggere’. VareNavn opdateres under lektionen<br />

’Direkte opslag’ og notatfelterne opdateres under lektionen ’Notater’.<br />

158<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Forløb √<br />

1 Anvend formen fra UDLUdlånsKart fra opgaven i forrige lektion.<br />

2 Placér cursor i blokken UDLUdlånsKart.<br />

Indsæt manuelt felter i hovedblokken ’UDLUdlånsKart’.<br />

ForsikringsSum: (REAL, Lgd=10, Ledetekst=%3Forsikring, Spring over = JA)<br />

LejeSum: (REAL, Lgd=10, Ledetekst=%3Lejeværdi, Spring over = JA)<br />

NotatUdlånsKart: (INT,<br />

Lgd=5, Ledetekst = Notat, Spring over = JA)<br />

3 Skift til blokken UDLUdlånsPost.<br />

Indsæt felterne nedenfor og lad dem blive placeret automatisk som ovenfor.<br />

VareNavn: (STR, Lgd=30, Ledetekst = VareNavn, Spring over = JA)<br />

NotatUdlånsPost: (INT, Lgd=5, Ledetekst = Notat, Spring over = JA)<br />

4 Placér cursor på feltet VareNavn og ’Ændre indtastningsrækkefølge’ på feltet til nr. 2.<br />

Dette skal automatisk placere feltet på højre side af Varenummeret.<br />

5 Godkend og afprøv formen.<br />

Du må ikke kunne komme ind i nogen af de virtuelle felter, da de er sat til at skulle<br />

springes over. Felterne må heller ikke udvise nogen værdier.<br />

HUSK at felterne vil blive opdateret i andre lektioner.<br />

159<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


17. Synkronisering mellem blokke<br />

Mål med lektionen<br />

Formålet med denne lektion er at lære deltagerne at udføre synkronisering mellem flere blokke i<br />

samme form.<br />

Efter lektionen skal kursisterne kunne:<br />

Anvende forms kontrol macroer til synkronisering mellem blokke i samme form<br />

Vælge de rigtige triggere til synkroniseringen.<br />

Generelt<br />

Synkronisering mellem blokke anvendes i skærmbilleder med flere blokke, hvor indholdet i en blok er<br />

afhængig af indholdet i en anden blok.<br />

I kursusmaterialet betegnes blokkene som hovedblokke og underblokke.<br />

Oprettes der f.eks. en hovedblok til visning af varer fra lagerkartoteket og en underblok til visning af<br />

lagerposter, vil det være naturligt, at de poster der vises i underblokken, passer til den post der vises i<br />

hovedblokken.<br />

Synkronisering mellem blokke<br />

Synkronisering<br />

InvenTable (hovedblok)<br />

LagerTrans (underblok)<br />

Vises varenummer 1750 i hovedblokken, skal det således kun være lagerposter til vare 1750, der vises i<br />

underblokken og ikke andre varers poster.<br />

Synkroniseringen er nødvendig for at få helhed og sammenhæng i skærmbilledet.<br />

Fremfinding og visning af poster i underblok<br />

Når hovedblokken udfyldes med en post, skal de rette poster straks vises i underblokken.<br />

Til dette formål skal der anvendes en trigger, der i hovedblokken aktiveres på det rette tidspunkt.<br />

Der findes et sæt ens triggere i alle blokke.<br />

Enkelt record blok<br />

med varer<br />

Multi record blok<br />

med vareposter<br />

Triggeren Pre-record er den rigtige til synkroniseringen af posterne i underblokken, så de vises på rette<br />

tidspunkt.<br />

160<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Triggeren Pre-record<br />

Triggeren Pre-record aktiveres hver gang, der vises en ny post på skærmen. Det gælder også så snart<br />

skærmbilledet åbnes, og den første post vises.<br />

Triggeren anvendes f.eks. til tildeling af værdier i sin egen blok, men også til tildeling af værdier i andre<br />

blokke.<br />

Pre-record i en hovedblok kan således anvendes til at styre, hvad der skal ske i en underblok.<br />

Synkroniseringen i Pre-record består af tre punkter:<br />

Tildeling af feltværdier fra hovedblok til opslagsfelter i underblok<br />

Fremfinding af poster i underblokken med macroen #Frm_Index()<br />

Placering af cursor på den første eller sidste af de fundne poster.<br />

Tildeling af værdier fra hovedblok til felter i underblok<br />

Inden posten kan findes i underblokken, skal denne forsynes med informationer om posterne.<br />

De vigtigste informationer er værdier, der kan anvendes til opslag efter posterne i et af de indexer, der<br />

er tilknyttet underblokkens kartotek.<br />

Tildelingen af disse værdier udføres med SET kommandoen på samme måde som ved variabler.<br />

Syntaksen for denne tildeling af opslagsfelter beskrives på næste side.<br />

Syntaks<br />

SET Underblok.Opslagsfelt = Hovedblok.Opslagsfelt<br />

Bemærk at ’Underblok’ og ’Hovedblok’ er bloknavne og ikke kartoteksnavne.<br />

Det er derfor det er en god idé, at give blokke samme navne som tilknyttede kartoteker.<br />

Eksempel<br />

SET InvenTrans.ItemNumber = InvenTable.ItemNumber<br />

I eksemplet findes underblokken InvenTrans med feltet ItemNumber og hovedblokken InvenTable med<br />

feltet ItemNumber.<br />

Felterne behøver nødvendigvis ikke at have samme navne.<br />

Det er vigtigt, ved synkronisering, at feltet i underblokken indgår som første komponent i et index til<br />

blokkens kartotek. Er det ikke tilfældet, kan der ikke fremfindes nogen poster.<br />

Der kan udmærket tildeles værdier til flere felter i underblokken, hvis der er behov for det. Det gælder<br />

også felter, der ikke har med synkronisering at gøre.<br />

Selve fremfindingen af posterne udføres med control macroen #Frm_Index().<br />

Fremfinding af poster i underblok med #Frm_Index()<br />

Fremfinding af poster i underblokken udføres med macroen #Frm_Index(), der tilsvarer kontrol<br />

kommandoen Control ”Index”.<br />

161<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Syntaksen for macroen er som vist herunder.<br />

Syntaks<br />

#Frm_Index(Bloknavn, Indexnavn, x)<br />

Bemærk igen at det er bloknavn og ikke kartoteksnavn der angives.<br />

I macroen angives som parameter to navnet på det index, der skal anvendes, når posterne skal findes.<br />

Det angives ikke hvilke felter, der skal anvendes fra blokken.<br />

Macroen finder automatisk de felter i blokken, der svarer til felterne i det angivne index. Er felterne<br />

udfyldt, kan de således anvendes til fremfinding af poster. Er de ikke udfyldt, kan der ikke findes nogen<br />

poster.<br />

Er der mere end et nøglefelt i indexet, skal alle de tilsvarende felter i blokken være udfyldt for at give<br />

resultat.<br />

Hvis det kun er et af nøglefelterne, der er udfyldt, skal det angives i macroen, så der i indexet kun ledes<br />

efter poster, der passer til dette felt. Antallet af felter angives som parameter tre, der i syntaksen er<br />

mærket med x.<br />

Bemærk! Tallet angiver hvor mange nøgler i indexet, der skal søges på fra venstre mod højre i de<br />

felter der indgår i indexet.<br />

Eksempel på anvendelse af første komponent i index<br />

SET InvenTrans.ItemNumber = InvenTable.ItemNumber<br />

#Frm_Index(InvenTrans,ItemDateIdx,1)<br />

I ovenstående eksempel fremgår det, at der kun tildeles værdi til ét felt i blokken InvenTrans, nemlig<br />

feltet ItemNumber.<br />

I macroen til blokken InvenTrans anvendes indexet ItemDateIdx, der indeholder felterne ItemNumber<br />

og Date.<br />

Da det kun er feltet ItemNumber, der er udfyldt med værdier i blokken, er der taget hensyn til dette<br />

ved i macroen at angive tallet ’1’, der låser indexet på første komponent.<br />

Hvis feltet Dato også var blevet tildelt værdi med SET kommandoen, og den skulle anvendes i indexet,<br />

skulle tallet ændres til ’2’.<br />

Eksempel på anvendelse af to komponenter i index<br />

SET InvenTrans.Date_ = 15\08\99<br />

SET InvenTrans.ItemNumber = InvenTable.ItemNumber<br />

#Frm_Index(InvenTrans,ItemDateIdx,2)<br />

Forskellen<br />

I eksempel 1 vises alle poster til det ItemNumber, der er fremme i hovedblokken.<br />

I eksempel 2 vises også poster til varenummeret i hovedblokken, men i fremfindingen af posterne er<br />

datoen også anvendt, så der desuden kun vises poster, der har den givne dato.<br />

162<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Placering af cursor på første eller sidste af de fundne poster<br />

Når posterne er fundet med macroen #Frm_Index(), skal de vises på skærmen, men først skal det<br />

bestemmes om cursoren skal stå på den første eller den sidste af de poster, der er fundet frem.<br />

Dette udføres med en af følgende tre macroer, der er behandlet i en tidligere lektion.<br />

Kontrol macro Anvendelse<br />

#Frm_Search(Bloknavn) Slår op på første post iflg. angivne index<br />

#Frm_SearchTop(Bloknavn) Slår op på første post iflg. angivne index<br />

#Frm_SearchEnd(Bloknavn) Slår op på sidste post iflg. angivne index<br />

Skal cursoren f.eks. stå på første post anvendes følgende eksempel.<br />

Eksempel med opslag på første post<br />

#Frm_Search(InvenTrans)<br />

Initiering af nye poster i underblok<br />

Når der skal oprettes nye poster i underblokken, er det vigtigt at disse får tildelt nogle<br />

initieringsværdier (startværdier).<br />

Til dette formål skal der anvendes en trigger i underblokken, der aktiveres på det rette tidspunkt.<br />

Triggeren Init-record er den rigtige til initiering af nye poster.<br />

Triggeren Init-record<br />

Triggeren Init-Record aktiveres hver gang, der skal oprettes en ny post.<br />

Den anvendes for det meste til tildeling af værdier til felter i sin egen blok.<br />

Det kan være almindelige startværdier, f.eks. tildeling af en oprettelsesdato til et datofelt, og det kan<br />

være tildeling af værdier til nøglefelter.<br />

Tildeling af initieringsværdier til nøglefelter<br />

Nøgleværdier er i denne henseende værdier til felter, der indgår som nøgler i indexer.<br />

Tildelingen udføres med SET kommandoen som tidligere vist.<br />

Eksempel<br />

SET InvenTrans.ItemNumber = InvenTable.ItemNumber<br />

I eksemplet forudsættes det, at der må oprettes lagerposter i blokken InvenTrans.<br />

Oprettes der en ny post i underblokken på formen, aktiveres triggeren Init-record, og posten initieres<br />

med varenummeret fra hovedblokken. Feltet ItemNumber i underblokken InvenTrans tildeles værdien<br />

fra feltet ItemNumber i hovedblokken InvenTable.<br />

163<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Som regel skal der udføres initiering i Init-record af de samme felter, som tildeles værdier i Pre-record,<br />

da det er nøglefelterne. På denne måde sikres det, at der altid er sammenhæng mellem poster i<br />

underblok og hovedblok.<br />

Komplet eksempel på synkronisering<br />

Nedenstående eksempel viser en færdig synkronisering med fremfinding af poster fra triggeren Prerecord<br />

og initiering af nye poster i triggeren Init-record.<br />

Fremfinding af poster i underblok udført fra Pre-record i hovedblok<br />

SET InvenTrans.ItemNumber = InvenTable.ItemNumber<br />

#Frm_Index(InvenTrans,ItemDateIdx,1)<br />

#Frm_SearchEnd(InvenTrans)<br />

Initiering i Init-record i underblok<br />

SET InvenTrans.ItemNumber = InvenTable.ItemNumber<br />

164<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgaver: Synkronisering mellem blokke:<br />

Opgave 1: Synkronisering mellem to blokke<br />

Mål med opgaven<br />

At synkronisere to blokke i samme form.<br />

Beskrivelse<br />

De to blokke i formen UDLUdlånsKart, fra den forrige opgave, skal synkroniseres med hinanden,<br />

således at der altid kun vises udlånslinjer, der tilhører det udlån der aktuelt vises i hovedblokken.<br />

1 Åben formen UDLUdlånsKart fra opgaven i forrige lektion.<br />

Forløb √<br />

2 Udfør synkronisering mellem de to blokke, så der i underblokken kun vises poster,<br />

der tilhører den aktuelle post i hovedblokken. Anvend UDLUdlVarIdx.<br />

3 Udfør initiering af nye poster i underblokken således, at de altid tildeles nødvendige<br />

nøgleværdier. I dette tilfælde felterne UdlånsNummer og DebitorKonto.<br />

4 Opret et par nye udlån med tilhørende linjer.<br />

5 Afprøv om de rigtige linjer vises, når du bladrer i udlånsordrerne.<br />

6 Åben listbilledet til UDLUdlånsPost og kontrollér at felterne UdlånsNummer og<br />

DebitorKonto er udfyldt. Hvis de ikke er det, skal du foretage de nødvendige<br />

ændringer i synkroniseringen.<br />

165<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


18. 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 (CustTable) vha. et direkte<br />

opslag.<br />

Anvendelse af direkte opslag<br />

OrdreNummer<br />

KontoNummer Navn<br />

Et direkte opslag består af fire hovedkomponenter, som vist på næste side.<br />

Opbygning af direkte opslag<br />

Direkte opslag består af fire hovedkomponenter.<br />

Ordrer<br />

Navnet hentes med<br />

direkte opslag i<br />

debitorkartoteket når<br />

kontonummeret er<br />

indtastet.<br />

166<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Komponenter i et direkte opslag<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 />

Bemærk placeringen af de firkantede paranteser, kommaet og punktummet. Kommaet kan evt.<br />

erstattes af to lighedstegn som vist herefter.<br />

Syntaks for direkte opslag med lighedstegn<br />

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 />

167<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


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 paranteser<br />

omkring indexnavnet og udtrykket.<br />

Komma Når der skal hentes en bestemt værdi i opslagskartoteket, skal<br />

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 />

Der henvises til programmeringsmanualen, for yderligere information om direkte opslag og anvendelse<br />

med Index.<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 />

168<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 />

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 />

Eksempel på XAL kørsel med direkte opslag efter bynavn<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 />

Ordre<br />

r<br />

Petersen<br />

Search CustTable<br />

PRINT Name<br />

PRINT Adress1<br />

PRINT ZipCity, ” ”, ZipCode[ZipCodeIdx, ZipCode].CityName<br />

PRINT ””<br />

END<br />

PAUSE<br />

169<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


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 />

170<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 til feltet ItemName<br />

Mål med opgaven<br />

At benytte direkte opslag for at hente værdier fra andre kartoteker.<br />

Beskrivelse<br />

I formen UDLUdlånsKart skal det virtuelle felt VareNavn tildeles varenavnet fra lagerkartoteket.<br />

Tildelingen skal udføres med direkte opslag i InvenTable.<br />

Da feltet er virtuelt, indeholder det aldrig automatisk nogen værdi, hvorfor det både skal opdateres,<br />

når der bladres mellem udlånsordrer i hovedblokken, og når der oprettes nye varenumre i<br />

underblokken.<br />

1 Åben formen UDLUdlånsKart fra forrige opgave<br />

Forløb √<br />

2 Indsæt direkte opslag i triggeren ________________ på underblokken, så feltet<br />

VareNavn altid opdateres, når der bladres mellem posterne i hovedblokken. Dvs.<br />

hver gang en ny post er kommet frem på skærmen.<br />

3 Indsæt direkte opslag i triggeren ___________________ på feltet ______________________ ,<br />

så feltet VareNavn altid opdateres når der oprettes nye udlånslinjer, eller der<br />

ændres varenummer på en linje.<br />

4 Godkend og afprøv formen.<br />

171<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgave 2: Direkte opslag til UdlejningsVærdi og Forsikringsværdi<br />

Mål med opgaven<br />

At benytte direkte opslag for at hente værdier fra andre kartoteker<br />

Beskrivelse<br />

I formen UDLUdlånsKart skal kartoteksfelterne UdlejningsVærdi og ForsikringsVærdi i blokken<br />

UDLUdlånsPost ikke indtastes manuelt. Felternes værdi skal indsættes automatisk, hver gang der<br />

oprettes et nyt varenummer i en af udlånslinjerne.<br />

Værdien beregnes ved at tage kostprisen i lagerkartoteket og forhøje med den procentsats, der svarer<br />

til feltet.<br />

Værdien udregnes ved hjælp af den nye macro med navnet #UDLSatser.<br />

Da felterne er databasefelter, gemmes de beregnede værdier i databasen. Derfor behøver beregningen<br />

kun at blive udført, hver gang der oprettes en ny vare eller ændres varenummer på en af<br />

udlånslinjerne.<br />

Forløb √<br />

1 Åben blokken UDLUdlånsPost i formen UDLUdlånsKart fra forrige opgave.<br />

2 Anvend macroen #UDLSatser til beregning af værdien for feltet UdlejningsVærdi.<br />

Benyt direkte opslag til at hente værdierne til de to parametre der skal indsættes i<br />

macroen.<br />

Parameter 1:<br />

Parameter 2:<br />

Indsættes i feltet:<br />

Indsættes i triggeren:<br />

3 Anvend macroen #UDLSatser til beregning af værdien for feltet ForsikringsVærdi.<br />

Benyt direkte opslag til at hente værdierne til de to parametre der skal indsættes i<br />

macroen.<br />

Parameter 1:<br />

Parameter 2:<br />

Indsættes i feltet:<br />

Indsættes i triggeren:<br />

4 Godkend og afprøv formen.<br />

172<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


19. 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 og<br />

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 i C5<br />

Listemenuer er menuer i form af menupunkter opsat som en liste under hinanden.<br />

173<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Eksempel på listemenu<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 />

Finans<br />

Kontoplan ><br />

Posteringer ><br />

Kontoudtog<br />

Balancer ><br />

Budgetter ><br />

Regnskab<br />

Pengeinstitut ><br />

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

Dimensioner ><br />

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

Forespørgsler ><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 XAL<br />

og C5, idet de kan tilknyttes f.eks. en procestaste eller en hvilken<br />

som helst anden menu.<br />

174<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 />

175<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 />

Kun de grupper, der angives her, kan se menupunktet.<br />

176<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Eksempel<br />

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 />

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 />

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 />

177<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 fra lokalmenuen i formen CustTable kalde formen UDLUdlånsKart.<br />

DebKart<br />

Lokal<br />

menu<br />

Forløb √<br />

1 Åben formen CustTable og opret et nyt menupunkt i lokalmenuen. Menupunktet<br />

skal kalde formen UDLUdlånsKart.<br />

2 Afprøv det nye menupunkter som følger:<br />

3 Åben skærmbilledet debitor og foretag et kald af UDLUdlånsKart.<br />

4 Du skal kunne se og bladre i alle debitorers udlån.<br />

UDLUdlånsKart<br />

178<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


20. 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 />

179<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 i de efterfølgende afsnit.<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 />

180<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 />

EXTERN <br />

Lokal<br />

menu<br />

Ordrekartotek<br />

Lokal<br />

menu<br />

Buffer<br />

Aktuel<br />

record<br />

Hovedform Underform<br />

Buffer<br />

OrdreKart<br />

Ordrelinjer<br />

Hovedform Underform<br />

Bufferen åbnes med<br />

kommandoen EXTERN<br />

’buffernavn’<br />

Ordrelinjer<br />

Information om<br />

aktuel record (ordre)<br />

hentes i bufferen<br />

EXTERN OrdreKart<br />

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 />

181<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Åbningen af bufferen skal da se ud som følger.<br />

Eksempel<br />

EXTERN SalesTable<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 til form<br />

Syntaksen for SET kommandoen ved tildeling af værdier til blokken fra bufferen, er som følger.<br />

Syntaks<br />

SET . = .<br />

I eksemplet fra afnittet om EXTERN med kald af ordrelinjer fra ordrekartoteket, vil SET kommandoen da<br />

se ud, som følger.<br />

Eksempel<br />

Ordrekartotek<br />

Lokal<br />

menu<br />

Buffer<br />

OrdreKart<br />

Hovedform Underform<br />

SET SalesLine.Number = SalesTable.Number<br />

Ordrelinjer<br />

EXTERN SalesTable<br />

SET blok.felt =<br />

buffer.felt<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 />

Ved hjælp af macroen #Frm_Index() kan de rigtige poster herefter findes frem.<br />

Tildeling med SET fra<br />

buffer felter til felter i<br />

blok i form<br />

182<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


#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 />

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 SalesLine fra SalesTable, er der f.eks. kun én kendt værdi, der kan hentes i<br />

bufferen og som samtidig kan anvendes til fremfinding af posterne i SalesLine. Det er OrdreNummeret<br />

(Number), da dette felt findes i begge kartoteker.<br />

OrdreNummeret fra bufferen bliver da også med SET kommandoen tildelt OrdreNummeret i blokken<br />

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 />

Eksempel<br />

Ordrekartotek<br />

Lokal<br />

menu<br />

Buffer<br />

OrdreKart<br />

Hovedform Underform<br />

Ordrelinjer<br />

#Frm_Index(SalesLine, NumTransLineIdx, 1)<br />

Posterne findes med<br />

#Frm_Index(Blok, Index, 1)<br />

EXTERN SalesTable<br />

SET blok.felt =<br />

buffer.felt<br />

#Frm_Index(Blok,Index,1)<br />

183<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


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 />

Da det kun er den første komponent i indexet dvs. Number, der er kendt, skal det fastlåses, at indexet i<br />

fremfindingen af poster kun skal anvende denne komponent. Derfor angives tallet 1 i #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 />

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 />

Pre-form<br />

EXTERN SalesTable<br />

SET SalesLine.Number = SalesTable.Number<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 />

Init-record<br />

EXTERN SalesTable<br />

184<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


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 />

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

Synkronisering i triggere i vinduet og blokke<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 />

Triggere i blok<br />

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 />

Ordrekartotek<br />

Lokal<br />

menu<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 />

Buffer<br />

OrdreKart<br />

Hovedform Underform<br />

Ordrelinjer<br />

(Vindue)<br />

(Blok)<br />

Triggere i vinduet<br />

Init<br />

Error<br />

Pre-form<br />

Init-record<br />

185<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Init-record<br />

EXTERN SalesTable<br />

SET SalesLine.Number = SalesTable.Number<br />

SET SalesLine.Account = SalesTable.Account<br />

186<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 to forms.<br />

Huskelister<br />

Form – Triggere i vinduet<br />

Form – Triggere i blokke<br />

Beskrivelse<br />

Efter oprettelse af et nyt menupunkt i lokalmenuen, i formen CustTable til kald af formen<br />

UDLUdlånsKart, skal de to forms synkroniseres med hinanden.<br />

I formen UDLUdlånsKart skal der således kun vises poster, der tilhører den aktuelle debitor, der kaldes<br />

fra.<br />

Forløb √<br />

1 Åben 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 />

HUSK også tildeling af værdier til nye poster.<br />

2 Afprøv synkroniseringen som følger:<br />

3 Åben 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 />

4 Opret et nyt udlån på en debitor og indsæt 2-3 udlånslinjer.<br />

5 Gentag punkt 4 et par gange med en anden debitor.<br />

6 Afprøv om du stadig kun kan bladre i udlån og udlånslinjer der tilhører den<br />

aktuelle debitor.<br />

7 Åben listbilledet til UDLUdlånsPost og kontrollér at felterne DebitorKonto og<br />

UdlånsNummer er udfyldt. Hvis de ikke er det, skal du foretage nødvendige<br />

ændringer i synkroniseringen<br />

187<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


21. Tabsider og gruppebokse<br />

Mål med lektionen<br />

Formålet med denne lektion er, at give oversigt over tabsider og gruppebokse, samt at vise hvordan de<br />

anvendes i henholdsvis den tegnbaserede og den GUI baserede udgave af Navision XAL og C5.<br />

Efter denne lektion skal kursisterne kunne:<br />

Oprette tabsider<br />

Oprette gruppebokse.<br />

Tabsider<br />

Tabsider er kun henvendt til GUI versionen, hvor forms kan inddeles i flere tabsider med hver sin<br />

overskrift.<br />

Tabsider er blot almindelige sider i forms. De kan dog nu få tildelt overskrifter, der vises i fanerne på<br />

tabsiderne.<br />

Ved at dele en forms felter eller blokke over flere sider, kommer formen mere til at ligne Windows<br />

overfladen.<br />

Der er dog den bieffekt ved tabsider, at der i den tegnbaserede udgave kommer lige så mange sider,<br />

som der er tabsider. Desuden kan de tildelte overskrifter ikke ses i denne udgave. Det eneste der viser,<br />

at der er flere sider, er sidetallene i øverste venstre hjørne.<br />

Det overblik der gives i GUI versionen, følger altså ikke med i den tegnbaserede version.<br />

Tabsider oprettes som hidtil i den tegnbaserede udgave af C5, da det kun er her, der kan oprettes<br />

forms.<br />

De oprettes ved at danne en ny side med PAGE UP eller PAGE DOWN. Når siden er fremme på<br />

skærmen, gives den en overskrift med CTRL+F8.<br />

Når forms er i drift skiftes der mellem sider og tabsider med ALT+F7 og ALT+F8. Dette gælder begge<br />

versioner.<br />

Når forms er under udarbejdelse i den tegnbaserede udgave, skiftes der mellem siderne med PAGE UP<br />

og PAGE DOWN.<br />

Tabsider i GUI og almindelige sider i tegnbaseret udgave<br />

Side 1 Side 2<br />

2/2<br />

1/2<br />

Tabsider Almindelige sider<br />

188<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Bemærk! Overskrifterne og tabsiderne kan kun ses i GUI versionen. I den tegnbaserede version kommer<br />

der en ny side for hver tabside.<br />

Grupppebokse<br />

Gruppebokse eller groupboxes anvendes til at opdele felter i skærmbilleder i mindre enheder, hvor<br />

felterne f.eks. grupperes efter indhold.<br />

Boksene er ikke andet end almindelige bokse, der tegnes med ALT+T. Der er dog nu tilføjet<br />

muligheden for at vælge forskellige rammetyper og der er mulighed for at skrive en tekst i toppen af<br />

rammen.<br />

Tekst og type vælges med ALT+Y, medens boksen er i gang med ALT+T.<br />

Teksten står altid i toppen, men kan venstrestilles, højrestilles eller centreres i forhold til rammen.<br />

Boksene er kun til visuel kontrol. De har således ingen indflydelse på data, der indtastes eller vises i<br />

formen.<br />

Boksene optræder forskelligt, afhængigt om de vises i den tegnbaserede eller den GUI baserede<br />

udgave af Navision XAL eller C5.<br />

Kassernes udseende i tegnbaseret og GUI baseret C5<br />

Type Tegnbaseret GUI baseret<br />

0 Ingen synlig ramme Flad kasse med sort streg. Tekst i rammen.<br />

1 Enkelt streg (som 0)<br />

2 Dobbelt streg Ophævet kasse. Tekst i rammen.<br />

3 (som 2) Nedsænket kasse. Tekst i rammen.<br />

4 (som 1) Flad kasse med fordybet streg. Tekst i rammen.<br />

5 (som 2) (som 4)<br />

6 (som 1) Flad kasse med sort streg. Tekst i sort felt i tekstens<br />

længde.<br />

7 Fed streg Flad kasse med sort streg. Tekst i sort felt i kassens<br />

længde.<br />

8 (som 1) Flad kasse med grå streg. Tekst i gråt felt i tekstens<br />

længde.<br />

9 (som 7) Flad kasse med grå streg. Tekst i gråt felt i kassens<br />

længde.<br />

Som det fremgår er det kun type 0, 1, 2 og 7, der umiddelbart kan finde anvendelse i den<br />

tegnbaserede udgave af C5. Dette gælder i det mindste, når de grå standardfarver anvendes i forms.<br />

Bemærk! Boksene er kun beregnet til at gruppere felter eller tekst i formen, de har ingen indflydelse på<br />

formens funktioner.<br />

I det efterfølgende vises, hvilke gruppebokse der dannes og hvordan de ser ud i den GUI baserede og<br />

den tegnbaserede version.<br />

189<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Eksempel på gruppebokse i GUI versionen<br />

Eksempel på gruppebokse i den tegnbaserede version<br />

190<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


22. USRKEY triggere<br />

Formål<br />

Formålet med denne lektion er at lære deltagerne at anvende USRKEY triggere i forms.<br />

Efter lektionen skal kursisterne kunne:<br />

Anvende USRKEY triggere til indtastning af XAL kode<br />

Aktivere USRKEY triggere vha. tastetryk<br />

Aktivere USRKEY triggere fra andre triggere vha. kontrol macroer.<br />

Generelt<br />

USRKEY triggere er som alle andre triggere editorbokse til indtastning af XAL kode.<br />

De aktiveres dog ikke automatisk, som de øvrige triggere i forms, men kun vha. taster eller kald fra<br />

andre triggere.<br />

Lektionen består af følgende afsnit:<br />

Triggere<br />

Taster<br />

Kontrol kommandoer<br />

Styring af XAL kode<br />

Form macroer.<br />

Triggere<br />

I alle blokke i forms findes der er 10 USRKEY triggere.<br />

USRKEY triggere i blokke i forms<br />

Triggere<br />

USRKEY0<br />

USRKEY1<br />

USRKEY2<br />

USRKEY3<br />

USRKEY4<br />

USRKEY5<br />

USRKEY6<br />

USRKEY7<br />

USRKEY8<br />

USRKEY9<br />

191<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Triggerne er, som alle andre triggere, editorboxe til indtastning af XAL koder. De kan benyttes til<br />

mange forskellige formål f.eks. beregninger.<br />

Triggerne befinder sig i de enkelte blokke.<br />

USRKEY triggere i blokke<br />

FORM<br />

SH+F6<br />

Taster<br />

Nogle taster kan anvendes sammen med USRKEY triggerne, idet disse triggere er anderledes end de<br />

øvrige triggere.<br />

USRKEY triggerne kan kun aktiveres med tastetryk eller ved kald fra andre triggere.<br />

Taster bundet til USRKEY triggere<br />

Tasterne ALT+0 til ALT+9 er bundet sammen med de tilsvarende USRKEY triggere.<br />

Taster og USRKEY triggere<br />

Blok formler: Formler<br />

Taster Triggere<br />

ALT+0 USRKEY0<br />

ALT+1 USRKEY1<br />

ALT+2 USRKEY2<br />

ALT+3 USRKEY3<br />

ALT+4 USRKEY4<br />

ALT+5 USRKEY5<br />

ALT+6 USRKEY6<br />

ALT+7 USRKEY7<br />

ALT+8 USRKEY8<br />

ALT+9 USRKEY9<br />

Opsætning for blok<br />

ENTER<br />

Blok formler<br />

USRKEY0<br />

USRKEY9<br />

192<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Bindingen mellem taster og USRKEY triggere er permanent. Det betyder, at det ikke er nødvendigt selv<br />

at udføre nogen programmering for at binde tasterne til triggerne.<br />

I USRKEY triggerne skal der blot indtastes den XAL kode, der er behov for, så virker det.<br />

Taster til én blok<br />

Det er nemt at anvende tasterne sammen med USRKEY triggerne i én blok. Prøv at indtaste følgende<br />

kode i formen ’CustTable’ i blokken ’CustTable’ i triggeren USRKEY3 .<br />

Eksempel<br />

SET BOX(1,”Hej, med dig!\nDu tastede ALT+3”,0)<br />

Herefter er det blot at starte formen CustTable, og prøve at taste ALT+3. Så vises følgende box midt på<br />

skærmen.<br />

Resultat<br />

Taster til flere blokke<br />

Det er også nemt at anvende tasterne sammen med USRKEY triggerne i flere blokke.<br />

Tasterne er bundet til USRKEY triggerne i den blok, cursoren befinder sig i.<br />

Der er ikke nogen forskel på kodning i triggerne og der skal heller ikke kodes noget for at tasterne<br />

fungerer. Det er lige så nemt som i ovenstående eksempel.<br />

Da de samme USRKEY triggere findes i hver blok i formen, betyder det, at de samme taster kan have<br />

forskellige betydning afhængigt af, hvilken blok cursoren befinder sig i.<br />

Eksempel<br />

USRKEY2 kan i én blok udføre et kald af et skærmbillede, medens samme trigger i en anden blok<br />

udfører en beregning.<br />

Når cursoren står i den første blok og der tastes ALT+2 åbnes skærmbilledet. Når der skiftes til den<br />

anden blok og der igen tastes ALT+2 udføres beregningen.<br />

På næste side vises et par eksempler på andre ting der kunne kodes i USRKEY triggere.<br />

Taster med eksempler<br />

Kald af anden proces<br />

Hej, med dig!<br />

Du tastede ALT+3<br />

OK<br />

I USRKEY triggerne kan der indlægges kald af andre processer.<br />

193<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Der kunne f.eks. bindes en rapport til en af tasterne ved at kalde processen Rapport-Afvikling.<br />

Eksempel<br />

PROCESS 15 ”REPORT=CustAccStatement OUTPUT=Printer,getopts-”<br />

Indsættes ovenstående kode i USRKEY7 i en form f.eks. CustTable, udskrives rapporten<br />

’CustAccStatement’ (Kontoudtog), hver gang der tastes ALT+7 i formen.<br />

Kald af båndoptager<br />

I USRKEY triggere kan der også indlægges kald af båndoptageren.<br />

Hvis en virksomhed har forskellige varetyper, der hver for sig indeholder mange ens udfyldte felter på<br />

de enkelte varer, kunne der oprettes forskellige båndoptagelser til hver varetype.<br />

Ved at afspille båndoptagelsen når der oprettes en ny vare, udfyldes de indspillede felter automatisk,<br />

hvorefter resten af felterne udfyldes manuelt.<br />

I stedet for at starte båndoptageren hver gang og vælge optagelse at afspille, kan afspilningen<br />

indlægges i en USRKEY trigger, der startes med et tastetryk.<br />

Hver indspilning bindes til sin egen USRKEY taste.<br />

Eksempel<br />

PROCESS 8 ”Mode=execute name=Varetype_1”<br />

Proces 8 er båndoptageren. Parameteren ’Mode=execute’ viser at båndoptageren skal eksekveres, og<br />

’name=Varetype_1’ viser navnet på den indspilning, der skal udføres.<br />

Kontrol kommandoer<br />

Triggerne kan også aktiveres eller kaldes fra andre triggere med specielle forms kontrol kommandoer<br />

og macroer.<br />

194<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Kontrol kommandoer og macroer til kald af USRKEY triggerne<br />

Triggere Kommandoer Macroer<br />

USRKEY0 CONTROL ”USRKEY0” #Frm_USRKEY(bloknavn, 0)<br />

USRKEY1 CONTROL ”USRKEY1” #Frm_USRKEY(bloknavn, 1)<br />

USRKEY2 CONTROL ”USRKEY2” #Frm_USRKEY(bloknavn, 2)<br />

USRKEY3 CONTROL ”USRKEY3” #Frm_USRKEY(bloknavn, 3)<br />

USRKEY4 CONTROL ”USRKEY4” #Frm_USRKEY(bloknavn, 4)<br />

USRKEY5 CONTROL ”USRKEY5” #Frm_USRKEY(bloknavn, 5)<br />

USRKEY6 CONTROL ”USRKEY6” #Frm_USRKEY(bloknavn, 6)<br />

USRKEY7 CONTROL ”USRKEY7” #Frm_USRKEY(bloknavn, 7)<br />

USRKEY8 CONTROL ”USRKEY8” #Frm_USRKEY(bloknavn, 8)<br />

USRKEY9 CONTROL ”USRKEY9” #Frm_USRKEY(bloknavn, 9)<br />

Anvendes det samme stykke XAL kode ofte i mange forskellige triggere i en form, kan det med fordel<br />

lægges i bare én af USRKEY triggerne.<br />

XAL koden i den pågældende USRKEY trigger, kan herefter kaldes fra en hvilken som helst anden<br />

trigger i formen.<br />

Hvis samme XAL kode f.eks. er fordelt på mange forskellige triggere og der skal rettes et eller andet,<br />

kan der være fare for at ændringerne glemmes i en af triggerne.<br />

Fordelen er klar. Ved at lægge XAL koden i bare én trigger er det meget nemmere at vedligeholde den.<br />

Kald af USRKEY trigger<br />

Når USRKEY triggere skal kaldes fra andre triggere, anvendes en af kontrol kommandoerne eller<br />

macroerne i ovenstående skema.<br />

I alle tilfælde er der to ting der skal angives i kaldet:<br />

Hvilken blok triggeren befinder sig i<br />

Triggerens nummer<br />

Kald med kontrol kommando<br />

Syntaks<br />

CONTROL ”USRKEY0 ”<br />

Ovenstående kommando medfører at USRKEY0 triggeren i blokken kaldes.<br />

Syntaksen er analog for de øvrige USRKEY triggere.<br />

195<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Bemærk! Anvendes control kommandoen, er det frivilligt at angive blokkens navn. Hvis den ikke<br />

angives, kaldes USRKEY triggeren i den aktive blok.<br />

Kald med kontrol macro<br />

Syntaks<br />

#Frm_USRKEY(, )<br />

Ovenstående macro medfører at USRKEY triggeren i blokken kaldes.<br />

Styring af XAL kode i triggerne<br />

USRKEY triggere kan som vist aktiveres på to forskellige måder:<br />

Med tasterne ALT+0 til ALT+9<br />

Med kontrolkommandoer og macroer.<br />

Blokering af tastetryk<br />

Det er ikke altid XAL koden, i en trigger, må udføres, når der trykkes på den tilhørende taste.<br />

Tastetrykket kan blokeres ved at indlægge en kontrol i starten af koden i USRKEY triggeren.<br />

Til kontrollen anvendes systemvariablen &CMD, der betyder &Command. Variablen indeholder altid<br />

den sidste taste, der er trykket på.<br />

Ved at undersøge om der er trykket på den taste der tilhører den aktuelle USRKEY trigger, kan der<br />

træffes afgørelse om, om koden i triggeren må udføres.<br />

Eksempel (triggeren USRKEY3)<br />

IF &CMD == ”USRKEY3” THEN<br />

RETURN 0<br />

ENDIF<br />

{Øvrig kode der kun skal udføres}<br />

{ved kald fra andre triggere. }<br />

I ovenstående eksempel undersøges i IF sætningen om systemvariablen &CMD indeholder ’USRKEY3’.<br />

Gør den det udføres kommandoen ’RETURN 0’, der stopper afviklingen af XAL koden i triggeren og<br />

vender tilbage til skærmbilledet.<br />

På denne måde kan det blokeres, at koden i triggeren udføres når der trykkes på tasten.<br />

196<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Tastetryk og kald fra andre triggere samtidig<br />

I nogen tilfælde kan det være ønskeligt, at en URSKEY trigger skal udføre én ting, når der trykkes på<br />

den tilhørende taste og en anden ting når triggeren kaldes med control kommandoen eller macroen<br />

fra en anden trigger.<br />

Kontrollen, der blev nævnt i foregående eksempel, anvendes også i dette tilfælde.<br />

Eksempel (USRKEY3)<br />

IF &CMD == ”USRKEY3” THEN<br />

PROCESS 8 “Mode=execute name=Varetype_1”<br />

RETURN 0<br />

ENDIF<br />

SET &SaldoIalt = 0<br />

SEARCH CustTable USING AccountIdx<br />

#Add(&SaldoIalt,BalanceMST)<br />

END<br />

I eksemplet undersøges det, i betingelsen i IF sætningen, om systemvariablen &CMD indeholder<br />

’USRKEY3’.<br />

Gør den det, er det ensbetydende med, at betingelsen er opfyldt og XAL koden i IF sætningen udføres.<br />

Først udføres Process 8, der er kald af båndoptageren. Derefter udføres ’RETURN 0’, der afslutter<br />

afvikling af koden i triggeren og vender tilbage til skærmbilledet.<br />

Hvis triggeren kaldes fra en af de andre triggere, udføres kontrollen i IF sætningen også.<br />

Da der ikke er trykket på ALT+3, indeholder &CMD ikke ’USRKEY3’. Betingelsen er altså ikke opfyldt. IF<br />

sætningen springes over og der fortsættes med den øvrige XAL kode i triggeren.<br />

I eksemplet sættes variablen &SaldoIalt = 0. Derefter gennemløbes CustTable og variablen optælles<br />

med feltet BalanceMST.<br />

HUSK! Variablen &SaldoIalt kan lige så godt være et virtuelt felt i en form, idet virtuelle felter også<br />

foranstilles med & tegnet, når de anvendes i XAL kode.<br />

Tidspunkter for aktivering af øvrige triggere<br />

Udføres ved tryk<br />

på ALT+3<br />

Udføres ved kald<br />

fra andre triggere<br />

Når USRKEY triggerne kaldes fra andre triggere for at udføres som subrutiner, er det vigtigt at kende<br />

til, hvornår de andre triggere aktiveres i løbet af en forms åbningstid.<br />

Nedenstående skema viser eksempler på nogle få triggere og deres aktiveringstidspunkter.<br />

197<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Aktiveringstidspunkt for triggere i forms<br />

Trigger Placering Aktiveringstidspunkt<br />

Init Opsætning Når formen åbnes<br />

Pre-Record Blok Når der skiftes til ny post<br />

Post-Insert Blok Når der oprettes en ny post<br />

Post-Delete Blok Når der slettes en post<br />

Post-Update Blok Når der ændres i en post<br />

Post-Change Felt Når der ændres i feltet, og før posten godkendes<br />

Form macroer<br />

COMMIT<br />

COMMIT kommandoen bruges til at opdatere kartoteket med værdierne i de felter der er vist i alle<br />

blokke.<br />

Normalt bliver kartoteket først opdateret, dvs. der køres en bagvedliggende COMMIT kørsel, når man<br />

fra en:<br />

Enkelt Record blok skifter blok eller fra en<br />

Multi-Recod Blok forlader et felt.<br />

Til tider kan det være hensigtsmæssigt, at kartoteket opdateres straks efter, at der er indtastet i et felt<br />

på blokken i formen. Dette gøres med COMMIT indsat i en eller flere af feltets triggere og/eller i en<br />

eller flere af blokkens triggere, alt afhængigt af det ønskede resultat.<br />

Skal man f.eks. foretage et gennemløb af et kartotek, via en SEARCH kommando, er det<br />

hensigtsmæssigt, at kartoteket er fuldt opdateret med alt data, også nyt indtastet data.<br />

Syntaks<br />

#Frm_Commit(,CHANGE)<br />

’CHANGE’ parameteren er valgfrit. Hvis den sættes i forlængelse af bloknavnet, bliver kartoteket kun<br />

opdateret, hvis der er foretaget en ændring i selve feltets værdi.<br />

REPAINT<br />

Repaint anvendes til at genindlæse hele formen. Den aktiverer alle ændringer som f.eks. felt længde<br />

ændringer osv og genindlæser formen.<br />

Kommandoen kan bl.a. bruges til notater i Forms, hvor den indsættes efter macroen<br />

#Frm_NoteMark(Bloknavn,Notatfeltnavn), hvis denne ligger EFTER #Frm_Index(BlokNavn, Index) og<br />

#Frm_Search(BlokNavn) macroerne.<br />

Dette skyldes, at formen skal genindlæses efter at notatmacoerne er brugt i Pre-Form triggeren. Denne<br />

genindlæsning foretages af #Frm_Index(BlokNavn, Index) og #Frm_Search(BlokNavn) macroerne. Bliver<br />

notatmacroerne lagt EFTER disse macroer, skal der derfor en REPAINT kommando til.<br />

198<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Syntaks<br />

#Frm_Repaint<br />

Bemærk, at der ikke skal specificeres bloknavn idet en REPAINT genindlæser hele Formen.<br />

199<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgaver: USRKEY triggere<br />

Opgave 1: USRKEY triggere med beregninger<br />

Mål med opgaven<br />

At benytte USRKEY triggere til fælles beregninger<br />

At aktivere USRKEY triggere fra andre triggere vha. kontrol macroer.<br />

Beskrivelse<br />

I formen UDLUdlånsKart har du indsat to virtuelle felter i form af ForsikringsSum og LejeSum.<br />

I opgaven skal du sørge for, at begge felter til enhver tid indeholder den samlede værdi for alle linjerne<br />

i den nederste blok.<br />

Beregningen skal udføres i en af USRKEY triggerne, der også skal anvendes til opdatering af hvert af de<br />

to felter.<br />

USRKEY triggeren skal herefter kaldes fra nogle af de andre triggere, der er nødvendige, for at<br />

opdateringerne finder sted på de rigtige tidspunkter som følger:<br />

Tidspunkt Trigger / blok / felt<br />

Efter formen åbnes og første post vises på<br />

skærmen<br />

Efter linjerne vises på skærmen<br />

Efter der indsættes en ny linje<br />

Efter det slettes en linje<br />

Efter der ændres varenummer på en linje<br />

Efter ændring af varenummer uden at linjen<br />

forlades<br />

Efter der ændres status på en linje<br />

Husk også at anvende macroen #Frm_Commit til opdatering af kartoteket.<br />

200<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


1 Åben formen UDLUdlånsKart.<br />

Forløb √<br />

2 Vælg triggeren USRKEY5 og indsæt kode i form af en søgeløkke på UDLUdlånsPost.<br />

Udfør en sammentælling af felterne ForsikringsVærdi og UdlejningsVærdi fra<br />

UDLUdlånsPost.<br />

Sammentællingen foregår i de virtuelle felter &ForsikringsSum og &LejeSum.<br />

Medtag kun varelinjer med status = Udlånt.<br />

3 Vælg nu hver af triggerne fra skemaet herover og indsæt et kald af USRKEY5 i hver<br />

af dem.<br />

Husk at indsætte #Frm_Commit, hvor det er nødvendigt, for at kartoteket<br />

opdateres inden opsummeringen.<br />

4 Godkend og afprøv formen.<br />

5 Opret nogle ordrer med flere linjer på hver ordre og afprøv om opsummeringen<br />

udføres korrekt.<br />

201<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgave 2: Taster til én blok<br />

Formål med opgaven<br />

At anvende tasten der er knyttet til USRKEY1, så der kaldes en form.<br />

Beskrivelse<br />

I USRKEY triggeren der tilhører tastekombinationen ALT+1, skal der indlægges kode til at hente<br />

skærmbilledet med lagerbeholdninger, så brugeren kan gå direkte ind i billedet og se hvor mange der<br />

er på lager af en given vare.<br />

Billedet skal kun kunne kaldes fra blokken med varelinjerne.<br />

1 Åben formen UDLUdlånsKart i blokken UDLUdlånsPost.<br />

Forløb √<br />

2 Vælg triggeren USRKEY1, og indsæt kode til kald af formen LagerBeholdning.<br />

Vælg den rigtige blok idet formen kun skal kaldes fra linjerne.<br />

Koden er som flg.:<br />

Proces 17 ”Form=InventorySum PARM=”+ItemNumber<br />

3 Godkend og afprøv formen ved at stå på forskellige udlånslinjer og taste ALT+1.<br />

202<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


23. Notater i forms<br />

Formål<br />

Formålet med denne lektion er at give deltagerne kendskab til opsætning af notatmuligheder i forms<br />

og vise hvordan dette udføres vha. macroer.<br />

Efter lektionen skal kursisterne kunne:<br />

Opsætte notater på forms med én og flere blokke<br />

Oprette en lokal procestaste til kald af notater<br />

Anvende de macroer der benyttes til behandlingen af notater på skærmbilleder<br />

Anvende virtuelle felter til markering af om notater eksisterer.<br />

Generelt<br />

Der kan oprettes notater i næsten alle skærmbilleder i C5.<br />

Notater oprettes på poster i skærmbilleder ved at taste ALT+N, der åbner et notatvindue til indtastning<br />

af teksten i notatet.<br />

Når notatet er indtastet og godkendt lukkes vinduet igen.<br />

For at vise om den aktuelle post har et notat eller ikke, er der på skærmbilledet et notatfelt, der kan<br />

vise dette med et lille n eller et stort N.<br />

Notatvinduet kan også åbnes ved at klikke i notatfeltet med musen, hvis denne benyttes.<br />

Selve notatfunktionaliteten bygges op vha. et sæt macroer, der findes i macrobiblioteket FORMS.<br />

I procedureoversigten, på næste side, vises de trin, der skal udføres for at få notatfunktionaliteten til at<br />

fungere.<br />

Procedure for opbygning af notater i forms<br />

Oprette procestaste<br />

Oprette virtuelt notatfelt<br />

Indsætte macro til notatvindue<br />

Indsætte macro til ændring af mærke i notatfelt<br />

Indsætte macro til ajourføring af notatfelt ved ændringer<br />

Indsætte macro til ajourføring af notatfelt ved bladring<br />

Indsætte macro til åbning af notatvindue med mus<br />

203<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


På de efterfølgende sider beskrives de enkelte procedurer.<br />

Procestasten ALT+N<br />

Procestasten ALT+N anvendes som standard til kald af notater i C5. Generelt kan der benyttes en<br />

hvilken som helst taste.<br />

Vær opmærksom på at der findes både globale og lokale procestater.<br />

Til notater i forms anvendes der lokale procestaster, der oprettes i formen med ALT+P. Disse overstyrer<br />

de globale procestaster, der er oprettet i Generelt/Tilpasning/Taster/ Processer.<br />

Oprettelse af en lokal procestaste ligner oprettelsen af et menupunkt på en lokal menu, idet det<br />

angives, hvilken proces og parametre der anvendes.<br />

I nedenstående skema vises indholdet i felterne under opbygning af en procestaste til notater.<br />

Opbygning af lokal procestaste til notater<br />

Opbygning af lokalprocesser ALT+P<br />

Proces Form-afvikling<br />

Parametre til proces Form=Notes (eller kun Notes)<br />

Hjælpetekst Notat<br />

Tast ALT+N<br />

Proces<br />

Vinduet der vises på skærmen, når der tastes ALT+N, er i virkeligheden en form, der hedder Notes.<br />

Processen der skal kaldes og afvikles, er derfor ’Form-afvikling’.<br />

Parametre til proces<br />

Formen der åbnes, hedder Notes.<br />

I parametre til processen angives derfor navnet på formen, dvs. ’Form=Notes’.<br />

Hele behandlingen af notater i skærmbilleder foregår vha. macroer. I disse er det indkodet, at de i<br />

proceskaldet skal se efter ordet ’Notes’ i feltet ’parametrene til proces’.<br />

Derfor er det nok blot at skrive ordet ’Notes’ i parametrene i stedet for ’Form=Notes’.<br />

Virtuelt notatfelt<br />

For at se om der er notater til en postering, skal der oprettes et ’Notatfelt’, der med et lille n eller et<br />

stort N kan markere, om der er et notat.<br />

Notatfeltet<br />

Notatfeltet skal oprettes som et virtuelt heltalsfelt på formen og kan i sig selv kun vise tallene 0 eller<br />

1.<br />

204<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Indhold i notatfeltet<br />

Værdi Betydning<br />

0 Notat eksisterer ikke<br />

1 Notat eksisterer<br />

Da det ikke er meningen at Notatfeltet skal vise værdien som 0 eller 1, men som n og N, skal der<br />

foretages en forandring af selve Notatfeltet.<br />

Dette udføres med macroen #Frm_NoteMark.<br />

Macroer til notater<br />

#NotesPreKey<br />

Macroen #NotesPreKey styrer selve notatvinduet.<br />

Som nævnt tidligere er notatvinduet i virkeligheden en form, der hedder ’Notes’ og den findes i<br />

udviklingsmenuen sammen med de øvrige forms.<br />

Det er samme form, der benyttes til notater overalt i C5, men macroen #NotesPreKey kan håndtere<br />

den på forskellig vis, afhængig af hvor den benyttes.<br />

#NotesPreKey giver mulighed for at bestemme hvilken blok og dermed også hvilket kartotek, notater<br />

skal tilknyttes. Desuden gives der mulighed for at bestemme størrelse, placering og tekst i<br />

notatvinduets ramme.<br />

Macroen afvikles kun hvis proceskaldet, i feltet ’Parametre til proces’, indeholder ’Form=Notes’ eller<br />

bare ordet ’Notes’.<br />

Syntaks<br />

#NotesPreKey(Bloknavn,Bredde,Højde,Kolonne,Linje,”Tekst”)<br />

Forklaring til syntaks for #NotesPreKey<br />

Parametre Forklaring<br />

Bloknavn Navnet på blokken hvori notatet anvendes<br />

Bredde Notatvinduets bredde i kolonner<br />

Højde Notatvinduets højde i linjer<br />

Kolonne Den kolonne i formen som notatvinduets øverste venstre hjørne skal<br />

starte i<br />

Linje Den linje i formen som notatvinduets øverste venstre hjørne skal starte<br />

i<br />

Tekst Den tekst der skal stå i notatvinduets ramme<br />

Eksempel<br />

#NotesPreKey(CustTable,78,10,1,13,”Notat på debitor”)<br />

205<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


I ovenstående eksempel knyttes notatet til blokken ’CustTable’.<br />

Notatvinduet er 78 kolonner bredt og 10 linjer højt.<br />

Notatvinduets øverste venstre hjørne placeres i formen i kolonne 1 linje 13.<br />

Teksten i notatvinduets ramme er ”Notat på debitor”.<br />

Nedenstående illustrationen viser opsætningen af notatvinduet med placering, størrelse osv.<br />

Opsætning af notatvindue<br />

Placering:<br />

Notatvinduets øverste<br />

venstre hjørne angives<br />

med kolonne og linje<br />

nummer<br />

Triggeren PreKey<br />

Navnet #NotesPreKey viser, at macroen skal indsættes i triggeren PreKey i formen i ’Opsætning af<br />

vinduet’.<br />

Pre-key triggeren afvikles hver gang, der trykkes på en tilfældig procestaste.<br />

Indsættes macroen #NotesPreKey i triggeren Pre-key, udføres den derfor hver gang, der tastes ALT+N,<br />

hvor ved notatvinduet åbnes.<br />

Trigger Macro<br />

Pre-key<br />

#NotesPreKey<br />

Klar til indtastning af notater<br />

Form<br />

Blok 1<br />

Blok 2<br />

Tekst i ramme<br />

Notatvindue<br />

Blok:<br />

Det angives<br />

hvilken blok<br />

notatvinduet<br />

tilhører<br />

Størrelse:<br />

Højde og<br />

bredde på<br />

notatvinduet<br />

angives<br />

Efter oprettelse af en lokalprocestaste og indsættelse af #NotesPreKey i triggeren Pre-key, kan der<br />

indtastes notater i et skærmbillede.<br />

Det kan dog ikke ses på skærmbilledet, om der eksisterer et notat eller ej. Dette beskrives i de følgende<br />

afsnit.<br />

206<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


#Frm_NoteMark<br />

#Frm_NoteMark indsættes for at ændre mærket i det virtuelle notatfelt.<br />

For at få notatfeltet til at vise bogstaverne lille n og store N i stedet for tallene 0 og 1, indsættes<br />

macroen #Frm_NoteMark.<br />

Indhold i notatfeltet efter #Frm_NoteMark<br />

Mærke Betydning<br />

n Notat eksisterer ikke<br />

N Notat eksisterer<br />

Macroens navn siger ikke så meget om, hvilken trigger den anvendes i, men måske mere lidt om hvad<br />

den anvendes til.<br />

Syntaks<br />

#Frm_NoteMark(BlokNavn,FeltNavn)<br />

I parametrene til macroen angives hvilket felt, der skal ændres markering i og hvilken blok feltet<br />

befinder sig i.<br />

Det fremgår af syntaksen herover, at blokkens navn angives først og derefter feltets navn. De to<br />

værdier adskilles med komma.<br />

Eksempel<br />

#Frm_NoteMark(CustTable,Notes)<br />

I ovenstående eksempel hedder det virtuelle heltalsfelt ’Notes’ og det er tilknyttet blokken CustTable.<br />

Feltet behøver ikke nødvendigvis at hedde ’Notes’.<br />

Macroen indsættes i triggeren Pre-form.<br />

Triggeren Pre-form<br />

#Frm_NoteMark indsættes i Pre-form triggeren, der er den anden trigger, der udføres efter Init, når<br />

formen startes.<br />

Dette medfører at notatfelterne vises rigtigt med bogstaverne i stedet for tallene.<br />

Da det er Pre-form triggeren vises det korrekt allerede, når den første post dukker op på skærmen.<br />

Trigger Macro<br />

Pre-form<br />

#Frm_NoteMark<br />

#NotesPostKeyMark<br />

#NotesPostKeyMark anvendes til at ajourføre notatfelter ved ændringer.<br />

Hver gang notatvinduet har været åbnet med ALT+N, skal det virtuelle notatfelt ajourføres med enten<br />

et lille n eller et stort N, afhængig af om vinduet er tomt eller udfyldt når det lukkes. Dette sker ikke<br />

automatisk, men udføres med macroen #NotesPostKeyMark.<br />

207<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Med #NotesPostKeyMark undersøges om notatvinduet er tomt eller udfyldt og notatvisningsfeltet<br />

sættes til at vise enten n eller N.<br />

Det engelske ord ’Mark’ i macroens navn viser, at den anvendes til at markere, om der er et notat eller<br />

ikke.<br />

Syntaks<br />

#NotesPostKeyMark(BlokNavn,FeltNavn)<br />

I parametrene til macroen angives navn på notatfelt, der skal ajourføres og hvilken blok feltet befinder<br />

sig i.<br />

Det fremgår af syntaksen at blokkens navn angives først og derefter feltets navn. De to værdier<br />

adskilles med komma.<br />

Eksempel<br />

#NotesPostKeyMark(CustTable,Notes)<br />

I eksemplet er det blokken CustTable og feltet Notes, der opdateres, når notatvinduet afsluttes og<br />

godkendes.<br />

Triggeren Post-key<br />

Ordet PostKey i macroens navn angiver, at macroen skal indsættes i triggeren Post-Key.<br />

Triggeren Post-key aktiveres netop efter at proceskaldet er afsluttet, dvs. efter at vinduet er blevet<br />

lukket.<br />

Trigger Macro<br />

Post-key<br />

#NotesMark<br />

#NotesPostKeyMark<br />

#NotesMark anvendes til at ajourføre notatfelter ved bladring mellem poster.<br />

Notatfeltet er virtuelt og findes kun på selve formen. Det skal derfor ajourføres, når der ændres i<br />

notaterne og når der bladres mellem posterne.<br />

Det er faktisk hele tiden nødvendigt, at undersøge om den aktuelle post har et notat eller ikke, for at<br />

vide hvordan notatfeltet skal ajourføres.<br />

Undersøgelsen og opdateringen af feltet skal udføres hver gang, en post vises i skærmbilledet, både<br />

når skærmbilledet åbnes og når der bladres mellem posterne. Dette udføres med macroen<br />

#NotesMark.<br />

Med #NotesMark udføres denne undersøgelse og den rigtige markering sættes i notatfeltet i form af<br />

et lille n eller et stort N.<br />

Syntaks<br />

#NotesMark(BlokNavn,Feltavn)<br />

208<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


I parametrene til macroen angives igen navnet på feltet, der skal ajourføres og hvilken blok feltet<br />

befinder sig i.<br />

Det fremgår i syntaksen at blokkens navn angives først og derefter feltets navn. De to værdier adskilles<br />

med komma.<br />

Eksempel<br />

#NotesMark(CustTable,Notes)<br />

I eksemplet er det blokken CustTable og feltet Notes, der opdateres.<br />

Opdateringen skal udføres hver gang en post loades ind i formen, enten fordi formen startes eller fordi<br />

der bladres mellem posterne. Macroen indsættes i triggeren Post-Load.<br />

Triggeren Post-load<br />

Da opdateringen af notatfeltet skal udføres straks efter at en postering er kommet frem på skærmen<br />

(er loadet ind i formen), skal macroen indsættes i en trigger, der aktiveret på netop dette tidspunkt.<br />

Triggeren Post-load i opsætningen af blokken er passende, da den netop aktiveres hver gang en post<br />

er ’loadet’ ind i formen.<br />

Triggeren Post-load på selve Notatfeltet har samme virkning.<br />

Trigger<br />

på blok eller felt<br />

Post-Load<br />

#NotesKey<br />

Macro<br />

#NotesMark<br />

Macroen #NotesKey anvendes til åbning af notatvinduet med musen.<br />

Når der anvendes mus i C5, kan notatvinduet også åbnes ved at klikke med musen i selve Notatfeltet.<br />

Denne funktion foregår ikke automatisk, men skal opsættes med macroen #NotesKey.<br />

Når der klikkes med musen i et felt, f.eks. notatfeltet, bevirker det at triggeren Mouse aktiveres.<br />

Macroen #NotesKey i Mouse triggeren sørger for at notatvinduet åbnes, så der kan skrives i det.<br />

Macroen indsættes i triggeren Mouse på selve feltet.<br />

Trigger Macro<br />

Mouse #NotesKey<br />

Notater på forms med flere blokke<br />

Der er forskel på hvordan notater behandles i forms med én blok og med flere blokke.<br />

Husk at notatvinduet tilknyttes en bestemt blok og at blokken tilknyttes et bestemt kartotek.<br />

Det betyder at macroen #NotesPreKey, der åbner notatvinduet, skal indsættes én gang for hver blok<br />

(med kartotek), hvorpå der skal kunne oprettes notater.<br />

209<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Den lokale procestaste, ALT+N, der oprettes i formen for at åbne notatvinduet, oprettes kun én gang i<br />

formen og gælder således alle blokke i formen.<br />

Vigtigt at åbne rigtigt notatvindue<br />

Er der flere blokke med notater og der tastes ALT+N i skærmbilledet, er det altså vigtigt at åbne det<br />

rigtige notatvindue. Det der tilhører den aktuelle blok.<br />

Til forskel fra lokalmenuer der tilhører de blokke hvorpå de oprettes, er lokale processer uafhængige af<br />

hvilken blok, de kaldes fra.<br />

Procestaster kontra lokalmenuer<br />

Da en lokalproces således ikke tilhører en bestemt blok, men er fælles for alle blokke i en form, skal<br />

der indlægges en logik, der kan åbne det rigtige notatvindue til den rigtige blok, når der trykkes<br />

ALT+N.<br />

Det er altså nødvendigt at vide hvilken blok, cursoren befinder sig i, når notatvinduet åbnes.<br />

Den interne systemvariabel &CurBlk (Current blok=nuværende blok) holder hele tiden styr på, hvilken<br />

blok der er aktuel.<br />

Åbningen af notatvinduet sker som tidligere nævnt i Pre-key triggeren med macroen #NotesPreKey.<br />

Denne macro binder notatvinduet sammen med blokken og kartoteket, idet blokkens navn angives<br />

som parameter i macroen.<br />

Hvis der er mere end én blok med notater, skal macroen derfor angives en gang for hver blok.<br />

Trigger Macro<br />

Pre-key<br />

Blok 1 (kartotek 1)<br />

Blok 2 (kartotek 2)<br />

Lokalm<br />

enu<br />

Lokalm<br />

enu<br />

#NotesPreKey (til 1. Blok)<br />

#NotesPreKey (til 2. Blok)<br />

Procestaster gælder<br />

for hele formen<br />

Er fælles for alle<br />

blokke<br />

Lokalmenuer tilhører<br />

hver sin blok<br />

Når der trykkes på procestasten, udføres alle de macroer, der findes i Pre-key. Ved i triggeren at<br />

undersøge indholdet af systemvariablen &CurBlk, kan der med en IF-THEN sætning, opstilles en logik,<br />

der kan åbne det rigtige notatvindue.<br />

210<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Nedenstående er et eksempel på logikken i Pre-Key i en tænkt form med blokkene CustTable og<br />

CustTrans:<br />

IF &CurBlk==”CustTable” THEN<br />

#NotesPreKey(CustTable,78,4,1,19,”Notat på debitor”)<br />

ELSE<br />

#NotesPreKey(CustTrans,60,6,1,18,”Notat på poster”)<br />

ENDIF<br />

Bemærk at parametrene i de to tilfælde hvor #NotesPreKey er benyttet, ikke er ens.<br />

De to notatvinduer der åbnes, behøver således ikke at være samme størrelse eller med samme<br />

rammetekst.<br />

Skift af blok pga. mus<br />

Når brugeren arbejder i et skærmbillede med flere blokke, kan der skiftes mellem blokkene med<br />

SHIFT+F7 og SHIFT+F8.<br />

Når musen anvendes til at åbne for notatvinduet i en af blokkene, klikkes der i notatfeltet i den<br />

pågældende blok.<br />

Hvis der med musen klikkes i den modsatte blok, end den brugeren har skiftet til, skal der foretages et<br />

skift mellem blokkene rent programmeringsmæssigt.<br />

Det kan udføres med macroen #Frm_GoBlk().<br />

Syntaks<br />

#Frm_GoBlk(Bloknavn)<br />

Macroen anvendes til flytte cursoren til den blok, hvis navn er angivet i parametrene.<br />

Ved at placere macroen i triggeren Mouse i notatfeltet før macroen #NotesKey i den aktuelle, skiftes<br />

der automatisk blok, når musen klikker i det aktuelle notatfelt.<br />

Gennem triggeren Pre-key åbnes det rigtige notatvindue.<br />

Trigger Macro<br />

Mouse<br />

Kartoteket Notes<br />

#Frm_GoBlk(Bloknavn)<br />

#NotesKey<br />

Alle notater ligger i ét fælles kartotek med navnet Notes.<br />

211<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Noteskartotekets sammenhæng med andre kartoteker<br />

CustTable Notes<br />

RowNumber RowNumber<br />

LastChanged LastChanged<br />

Account NotesRecId<br />

Name NotesFileId<br />

Osv. LineNumber<br />

Txt<br />

RecId RecId<br />

FileId FileId<br />

I ovenstående eksempel ses det, hvordan Notes-recorden ’arver’ RecId og FileId, fra den post i<br />

CustTable der dannede notatet og værdierne gemmes i felterne NotesRecId og NotesFileId i Notes<br />

kartoteket.<br />

I Notes kartoteket ligger der således informationer, om hvor notater hører til.<br />

På Notes kartoteket er der et index med følgende indexformel:<br />

Indexnavn Indexformel<br />

NotesIdx<br />

NotesFileId, NotesRecId, LineNumber<br />

Ved oprettelse af et nyt notat i et skærmbillede, vedligeholdes indexet automatisk, så notaterne altid<br />

kan findes frem igen:<br />

Bemærk<br />

Hvis der oprettes en XAL kørsel eller en form, hvori der kan slettes, f.eks. debitorer, uden at notaterne<br />

også slettes, kan notaterne ikke genfindes, idet nøglerne til notatet ikke længere findes i<br />

debitorkartoteket. Der findes så notater uden ejer.<br />

212<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Oversigter<br />

Macroer og tilhørende triggere<br />

Form formler<br />

Init<br />

Exit<br />

Abort<br />

Refresh<br />

* Pre-key<br />

* Post-key<br />

Mouse<br />

Error<br />

Event<br />

* Pre-form<br />

Post-form<br />

#NotesPreKey<br />

#NotesPostKeyMark<br />

#NotesMark<br />

#NotesKey<br />

#Frm_NotesMark<br />

Felt formler<br />

Pre-field<br />

Post-field<br />

Post-Change<br />

* Post-Load<br />

Post-Edit<br />

* Mouse<br />

213<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Notater på forms med en blok<br />

Procestast Oprette procestaste ALT+P<br />

Proces .............: Form-afvikling<br />

Parametre til proces: Form=Notes (eller kun Notes)<br />

Hjælpetekst ........: Notater<br />

Tast ...............: Alt N<br />

Notatfelt Oprette virtuelt notatfelt F2<br />

Opret et virtuelt heltalsfelt til notatvisning<br />

Pre-key Macro til notatvindue<br />

#NotesPreKey(Blok,Bredde,Højde,Kollonne,Linje,”Tekst”)<br />

Pre-form Macro til ændring af mærke i notatfelt (0 / 1 til n / N)<br />

#Frm_NoteMark(Blok,felt)- (Før #Frm_Search og #Frm_Index)<br />

Post-key Macro til ajourføring af notatfelt ved ændringer<br />

#NotesPostKeyMark(Blok,felt)<br />

Post-load Macro til ajourføring af notatfelt ved bladring<br />

#NotesMark(Blok,felt)<br />

Mouse Macro til åbning af notatvindue med mus<br />

#NotesKey<br />

214<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Notater på forms med flere blokke<br />

Procestast Oprette procestaste ALT+P<br />

Proces .............: Form-afvikling<br />

Parametre til proces: Form=Notes (eller kun Notes)<br />

Hjælpetekst ........: Notater<br />

Tast ...............: Alt N<br />

Notatfelt 1 Oprette virtuelt notatfelt F2 (i blok 1)<br />

Opret et virtuelt heltalsfelt til notatvisning<br />

Notatfelt 2 Oprette virtuelt notatfelt F2 (i blok 2)<br />

Opret et virtuelt heltalsfelt til notatvisning<br />

Pre-key Macro til notatvinduer<br />

IF &CurBlk == ”Blok1” THEN<br />

#NotesPreKey(Blok1,Bredde,Højde,Kollonne,Linje,”Tekst”)<br />

ELSE<br />

#NotesPreKey(Blok2,Bredde,Højde,Kollonne,Linje,”Tekst”)<br />

ENDIF<br />

Pre-form Macroer til ændring af mærke i notatfelter (0 / 1 til n / N)<br />

#Frm_NoteMark(Blok1,felt1) - (Før #Frm_Search og #Frm_Index)<br />

#Frm_NoteMark(Blok2,felt2) - (Før #Frm_Search og #Frm_Index)<br />

Post-key Macroer til ajourføring af notatfelter ved ændringer<br />

#NotesPostKeyMark(Blok1,felt1)<br />

#NotesPostKeyMark(Blok2,felt2)<br />

Post-load 1 Macro til ajourføring af notatfelt ved bladring (i blok 1)<br />

#NotesMark(Blok1,felt1)<br />

Post-load 2 Macro til ajourføring af notatfelt ved bladring (i blok 2)<br />

#NotesMark(Blok2,felt2)<br />

Mouse 1 Macroer til åbning af notatvindue med mus (i blok 1)<br />

#Frm_GoBlk(Blok1)<br />

#NotesKey<br />

Mouse 2 Macroer til åbning af notatvindue med mus (i blok 2)<br />

#Frm_GoBlk(Blok2)<br />

#NotesKey<br />

215<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgaver: Notater i forms<br />

Opgave 1: Oprette procestaste til notater i form<br />

Formål med opgaven<br />

At oprette en procestaste til kald af notater i en form.<br />

Beskrivelse<br />

I hoved- og underblokkene findes der to virtuelle felter til visning af, om der er notater.<br />

Notatfunktionaliteten fungere ikke endnu og en af de første ting der skal udføres, er oprettelse af en<br />

procestaste, der kan anvendes til kald af notater.<br />

I denne opgave skal du oprette procestasten, der aktiveres med ALT+N.<br />

Opbygning af lokalprocesser<br />

Proces<br />

Parametre til proces<br />

Hjælpetekst<br />

Tast<br />

1 Åben formen UDLUdlånsKart.<br />

2 Opret en ny procestaste der aktiveres med ALT+N.<br />

Tasten skal kalde formen ’Notes’.<br />

Forløb √<br />

3 Du kan ikke afprøve tasten, før notatfunktionaliteten er klar i næste opgave.<br />

216<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgave 2: Notater på forms med én blok<br />

Formål med opgaven<br />

At afprøve funktionaliteten vedrørende notater på én blok.<br />

Beskrivelse<br />

I hovedblokken findes der et virtuelt felt til visning af, om der er notater eller ej.<br />

Feltet er kun oprettet og fungerer ikke.<br />

I denne opgave skal du opbygge funktionaliteten, så der kan oprettes notater til posterne i<br />

hovedblokken og så notatfeltet kan vise, om der er notater eller ikke er.<br />

I forløbet herunder vises de trin, der skal udføres for at få notaterne til at fungere i hovedblokken.<br />

Du kan vælge at følge dette forløb eller du kan anvende skemaet ’Notater på forms med én blok’, som<br />

findes sidst i lektionen.<br />

1 Anvend formen fra UDLUdlånsKart fra opgave i forrige opgave.<br />

2 Indsæt macro til notatvindue.<br />

3 Indsæt macro til ændring af mærke i notatfelt.<br />

4 Indsæt macro til ajourføring af notatfelt ved ændringer.<br />

5 Indsæt macro til ajourføring af notatfelt ved bladring.<br />

6 Indsæt macro til åbning af notatvindue med mus.<br />

7 Godkend og afprøv formen.<br />

Forløb √<br />

217<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgave 3: Notater på forms med flere blokke<br />

Formål med opgaven<br />

Afprøve funktionaliteten vedrørende notater på flere blokke i samme form.<br />

Beskrivelse<br />

I underblokken findes der et virtuelt felt til visning af, om der er notater på linjen eller der ikke er.<br />

Feltet er kun oprettet, men fungerer ikke.<br />

I denne opgave skal der bygges videre på den foregående, så der kan oprettes notater til<br />

udlånslinjerne i underblokken og ligeledes så notatfeltet kan vise, om der er notater eller ikke er.<br />

Forløb<br />

Du kan vælge at følge dette forløb eller du kan anvende skemaet ’Notater på forms med flere blokke’,<br />

som findes sidst i lektionen.<br />

Forløb √<br />

1 Anvend formen fra UDLUdlånsKart fra opgaven i forrige opgave.<br />

2 Indsæt macro til notatvindue.<br />

3 Indsæt macro til ændring af mærke i notatfelt.<br />

4 Indsæt macro til ajourføring af notatfelt ved ændringer.<br />

5 Indsæt macro til ajourføring af notatfelt ved bladring.<br />

6 Indsæt macro til åbning af notatvindue med mus.<br />

7 Godkend og afprøv formen.<br />

218<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


24. SystemVariabler i forms<br />

Mål med lektionen<br />

Formålet med denne lektion er at give deltagerne kendskab til nogle af de systemvariabler, der kun<br />

kan anvendes i forms og nogle af de globale variabler, der kan anvendes overalt.<br />

Lektionen skal betragtes som et tillæg med en liste over systemvariabler og globale variabler.<br />

Efter lektionen skal kursisterne have kendskab til:<br />

Systemvariabler i forms<br />

Globale variabler.<br />

Systemvariabler<br />

Systemvariabler i forms kan anvendes i alle triggerne. Variablerne udtrykker en øjeblikkelig status over<br />

formens tilstand. De indeholder information om følgende:<br />

Hvor cursoren befinder sig<br />

Hvor cursoren formentlig vil bevæge sig hen<br />

Hvilken kommando der sidst er givet til formen<br />

Navnet på det datasæt, der er blevet overført fra en anden form<br />

Returværdier fra kontrol kommandoerne (fejlkoder)<br />

Fejltekster til brugeren.<br />

Variablerne anvendes mest til at sørge for at kommandoer udføres, når visse betingelser er til stede,<br />

iflg. den status der udgøres i variablerne.<br />

Skema med systemvariablerne findes på næste side.<br />

219<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Systemvariabler i forms<br />

Navn Type Indhold<br />

&Cmd STR 10 Sidste kommando der er blevet afgivet i form af tryk på<br />

en taste<br />

&CurFld STR 32 Navn på det felt curseren står i<br />

&CurBlk STR 16 Navn på den blok curseren står i<br />

&CurPge INT Nummer på aktuelle side<br />

&CurLine INT Nummer på posteringslinje, ikke form linje<br />

&NewFld STR Navn på næste felt cursoren vil bevæge sig til iflg.<br />

sekvensnummerrækkefølgen.<br />

&ExtBuf STR 16 Navnet på evt. ekstern buffer<br />

&RecNo INT Record nummer<br />

&Form STR 24 Navnet på formen<br />

&Event INT Hvilken ’event’ handling der lige er sket<br />

&FrmStat INT Værdi der returneres hver gang en control kommando<br />

er udført.<br />

&TransBlk STR Navn på blok hvis indhold skal overføres til en anden<br />

proces f.eks. form<br />

&MenuLine INT Valgt linjenummer fra lokalmenu<br />

&Mouse INT Et heltal for hvordan der blev trykket på musen<br />

&MouseX INT X koordinaten for sidste museaktivitet<br />

&MouseY INT Y koordinaten for sidste museaktivitet<br />

&Help STR Kan tildeles hjælpetekst der vises i bunden af skærmen<br />

&Error STR Tekst der udskrives i bunden af skærmen<br />

&Parm STR 249 Anvendes både internt i forms og globalt mellem<br />

forskellige processer.<br />

Internt i forms<br />

INIT og PRE-FORM værdien fra proceskaldet<br />

PRE-KEY parameterstrengen fra taste der udløste Pre-<br />

Key triggeren<br />

ERROR den kommando der udløste fejl i afvikling af en<br />

control sætning.<br />

Der henvises til manualen ’Teknisk Reference’ og til hjælpeteksten for yderligere forklaring til de<br />

enkelte systemvariabler.<br />

220<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Globale variabler<br />

Globale variabler der kan anvendes overalt<br />

Navn Type Indhold<br />

&MacroInt INT Alle macro variablerne bruges som globale variabler i<br />

hele XAL’en. Derfor skal de altid afleveres med samme<br />

værdi, som de indeholdt, da de blev modtaget.<br />

&MacroReal REAL Se ovenfor<br />

&MacroDate DATE Se ovenfor<br />

&MacroText STR 254 Se ovenfor<br />

&SystemDato DATE System datoen<br />

&FirmaValuta STR 3 Den aktuelle valuta regnskabet anvender<br />

&FirmaNavn STR 40 Navnet på regnskab<br />

&Parm STR 249 Global anvendelse<br />

Bruges til at gemme alle mulige værdier, og anvendes til<br />

at sende disse frem og tilbage mellem forskellige<br />

processer også forms.<br />

Der henvises til manualen ’Teknisk Reference’ og til hjælpeteksten for yderligere forklaring til de<br />

enkelte variabler.<br />

221<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


25. 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 />

Godkend 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 />

222<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 godkende (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 godkende (til du er helt ude af programmet).<br />

F3<br />

223<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 godkende (til du er helt ude af programmet).<br />

F3<br />

224<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 />

Navn på<br />

kartotek<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 />

Skriv et sigende navn på kartoteket.<br />

Benyt evt. forkortelse som f.eks. CustTable.<br />

Print Navn Skriv det navn kartoteket skal kaldes i det daglige f.eks.<br />

Debitorkartotek.<br />

Navn på<br />

kartotek<br />

Godkend 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 />

Indtast evt. nyt navn på kartoteket.<br />

Print Navn Indtast evt. et andet kaldenavn på kartoteket.<br />

Godkend ændringerne med<br />

Afslut menuen med<br />

Slette kartotek Kartoteker kan ikke slettes.<br />

225<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 Godkend med F3<br />

ALT+H<br />

226<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 Godkend 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 Godkend 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. Godkend med<br />

ENTER<br />

Vælg kartotek fra kartotekslisten ENTER<br />

227<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 />

Godkend editorboxen med F3<br />

Godkend opsætningen af indexet F3<br />

Afslutte Godkend resten med F3<br />

ENTER<br />

ENTER<br />

ENTER<br />

SHIFT+F8<br />

ENTER<br />

228<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Kartotek – Index (ret)<br />

Funktion Fremgangsmåde Tast<br />

Finde index<br />

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 />

Godkend editorboxen med F3<br />

Godkend opsætningen af indexet F3<br />

Afslutte Godkend resten med F3<br />

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 Godkend resten med F3<br />

ENTER<br />

ENTER<br />

229<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Listbillede – Opret<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 />

Godkend med<br />

Billedet ’Design af listbillede’ vises.<br />

(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 />

Godkend<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 godkend. F3<br />

230<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<br />

eller<br />

at ændre i opsætningen af vinduet.<br />

Åbn indtastningsbilledet Opsætning af vinduet<br />

Udfør nødvendige ændringer.<br />

Godkend 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 />

231<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 />

Godkend<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<br />

Eller<br />

Afslut og godkend F3<br />

Slette felt Et felt kan slettes ved at markere feltet med cursoren og<br />

taste<br />

F3<br />

PIL NED<br />

DELETE


Listbillede – Slet<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 />

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 />

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 />

232<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

JA<br />

ENTER


Menuer – Lokalmenuer<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 />

233<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=CustTable, hvis det er processen Formafvikling.<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 />

Du kan åbne feltet med<br />

og<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 />

DEL<br />

(CTRL+F12)<br />

ENTER<br />

INS<br />

DEL<br />

234<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 />

Godkend med<br />

Vinduet vises på skærmen og er klar til oprettelse af<br />

blokke.<br />

Afslutte form Billedet kan lukkes med<br />

eller<br />

der kan oprettes blokke (se huskelister hertil).<br />

235<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 />

Godkend 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 />

236<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 />

Godkend 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 />

237<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 />

Godkend med<br />

Formen vises igen på skærmen.<br />

Afslutte form Billedet kan lukkes med<br />

eller blokke og felter kan behandles (se huskelister hertil)<br />

238<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 (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 et andet værktøj til editering af<br />

filer.)<br />

Slet alle linjer vedr. den blok der fjernes.<br />

Linjerne begynder med ’BLOCK bloknavn’ og slutter med<br />

’ENDBLOCK’.<br />

Afslut og godkend æ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 />

239<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


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 />

kartotek.<br />

Autogenerér<br />

blok<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 />

Godkend billedet Blok auto-options F3<br />

Godkend billedet Opsætning for blok F3<br />

Afslutte form Godkend og luk selve formen med<br />

eller<br />

arbejd videre med blokke og felter (se huskelister hertil).<br />

F3<br />

ALT+H<br />

240<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 />

Godkend 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 />

241<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 />

Godkend feltet F3<br />

Afslutte form Godkend og afslut hele formen<br />

Form – Felter (ret)<br />

242<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 />

Godkend feltet F3<br />

Afslutte form Godkend 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 Godkend 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 />

Godkend og afslut koden F3<br />

Vælg anden trigger<br />

eller<br />

luk listen over triggere ESC<br />

Godkend og afslut Opsætning af vinduet F3<br />

243<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 />

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<br />

Åbne trigger Vælg trigger og åbn tilhørende editorboks PILE<br />

Gentages ved<br />

flere triggere<br />

Afslutte<br />

bloktrigger<br />

Indtast ønsket kode.<br />

Godkend og afslut koden F3<br />

Vælg anden trigger<br />

eller<br />

ENTER<br />

ENTER<br />

luk listen over triggere ESC<br />

Godkend og afslut Opsætning for blok F3<br />

Afslut selve formen F3<br />

244<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Form – Triggere i felter<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.<br />

Vælg felt PILE<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 />

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 />

Godkend og afslut koden F3<br />

Vælg anden trigger<br />

eller<br />

luk listen over triggere ESC<br />

Godkend og afslut ’Opsætning af … felt’ F3<br />

Afslut selve formen F3<br />

245<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Del <strong>II</strong>I – Rapporter<br />

246<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


26. Systemvariabler i rapporter<br />

Mål med lektionen<br />

Formålet med denne lektion er, at give deltagerne kendskab til nogle af de systemvariabler der kun<br />

kan anvendes i rapporter og nogle af de globale variabler der kan anvendes overalt.<br />

Lektionen skal betragtes som et tillæg med en liste over systemvariabler og globale variabler.<br />

Efter lektionen skal kursisterne have kendskab til:<br />

Systemvariabler i rapporter<br />

Globale variabler.<br />

Generelt<br />

Generelt kan det siges, at alle de variabler, beskrevet på næste side, kan bruges, som om de var<br />

erklæret af en selv. Der bør dog udvises forsigtighed, hvis de ændres.<br />

Variablen &Parm anvendes f.eks. i alle menukald, idet den indeholder det, der skrives i feltet ’Parametre<br />

til proces’, medmindre &Parm tildeles en anden værdi.<br />

Nogle systemvariabler kan kun anvendes i rapporter, medens andre er globale og kan anvendes i<br />

forskellige elementer som rapporter, forms, XAL kørsler osv.<br />

Systemvariabler i rapporter<br />

Systemvariablerne i rapporter anvendes til forespørgsel på forskellige parametre i forbindelse med<br />

rapportafviklingen.<br />

247<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Navn Type Indhold<br />

&Page INT Indeholder aktuelleside nummer på rapport<br />

&Line INT Indeholder aktuellelinje nummer på den pågældende<br />

side i rapport<br />

&LinesLeft INT Indeholder antal linjer, der er tilbage på den aktuelle<br />

side.<br />

&CharsLeft INT Indeholder antal tegn på linjen<br />

Opdateres efter Control ”Pitch”<br />

Efter Control ”Goto” opdateres med rest antal tegn på<br />

linjen<br />

&BreakLevel INT Aktuelle niveau ved udskrivning af totaler ifølge<br />

anvendte index<br />

0=grandtotal, 1=første indexkomponent osv.<br />

&BreakField STR 32 Feltnavn på felt der brydes på i aktuelle index, eller<br />

ordet ”Grandtotal” ved &Breaklevel=0<br />

&Language ENUM SPROG Aktuelle sproglag i rapporten<br />

&StartTime INT Starttidspunkt for rapporten<br />

&Report STR 25 Navn på rapporten<br />

&Parm STR 256 Teksten der blev angivet i kaldet af rapporten i<br />

parameteren PARM<br />

&AsciiReport STR 80 Navn på fil som rapportens linjer er læst fra eller skrevet<br />

til<br />

&AsciiXAL STR 80 Navn på fil som indholdet i rapportens XAL editorboks<br />

er læst fra eller skrevet til<br />

&AsciiQt STR 80 Navn på fil som rapportens QT søgning er læst fra eller<br />

skrevet til<br />

&FileName STR 80 Spoolfilnavn, filnavn eller printernavn afhængigt af<br />

hvortil der skrives.<br />

Der henvises til manualen ’Teknisk Reference’ og til hjælpeteksten for yderligere forklaring til de<br />

enkelte systemvariabler.<br />

248<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Globale variabler<br />

Globale variabler der kan anvendes overalt<br />

Navn Type Indhold<br />

&MacroInt INT Alle macro variablerne bruges som globale variabler i<br />

hele XAL’en. Derfor skal de altid afleveres med samme<br />

værdi, som de indeholdt, da de blev modtaget.<br />

&MacroReal REAL Se ovenfor<br />

&MacroDate DATE Se ovenfor<br />

&MacroText STR 254 Se ovenfor<br />

&SystemDato DATE Se ovenfor<br />

&FirmaValuta STR 3 Den aktuelle valuta regnskabet anvender<br />

&FirmaNavn<br />

(Kun XAL)<br />

STR 40 Navnet på det aktuelle regnskab<br />

&Parm STR 256 Parameter variablen bruges til at gemme alle mulige<br />

værdier, og anvendes til at sende disse frem og tilbage<br />

mellem forskellige processor.<br />

Der henvises til manualen ’Teknisk Reference’ og til hjælpeteksten for yderligere forklaring til de<br />

enkelte systemvariabler.<br />

249<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgaver: Systemvariabler i rapporter<br />

Opgave 1: Udlånsliste<br />

Formål med opgaven<br />

At oprette en rapport med datasøgning via Rapport QT, samt anvendelse af systemvariabler i felter.<br />

Beskrivelse<br />

Du skal oprette en rapport over udlånslinjer.<br />

Rapportens poster skal sorteres efter DebitorNummer, UdlånsNummer og VareNummer.<br />

Datasøgning foregår i Rapport-QT i kartoteket UDLUdlånsPost.<br />

Der skal dannes automatiske subtotaler for felterne UdlejningsVærdi og ForsikringsVærdi.<br />

Rapporten i eksemplet viser kun totaler for første niveau, men andre muligheder skal afprøves i<br />

forløbet.<br />

Indholdet i rapporten gennemgås nøjere i forløbet.<br />

Eksempel<br />

Lises Bolsjefabrik A/S Side: 1<br />

OPG53_R04_1 Dato: 09/09-08<br />

Udlejning Forsikring<br />

KontoNr UdlånsNr VareNr Værdi Værdi Status<br />

20000 1050 10-HD-4 720,00 7.920,00 Udlånt<br />

20000 1050 10-HD-4 720,00 7.920,00 Udlånt<br />

20000 1050 10-HD-4 720,00 7.920,00 Udlånt<br />

20000 1300 10-MB-2 512,30 5.635,30 Udlånt<br />

20000 1400 10-HD-4 720,00 7.920,00 Udlånt<br />

Konto: 20000 3.392,30 37.315,30<br />

250<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


1 Opret en ny rapport.<br />

2 Rapport-QT<br />

Forløb √<br />

Datasøgningen skal udføres i Rapport-QT med udgangspunkt i kartoteket<br />

UDLUdlånsPost.<br />

Der skal sorteres på felterne DebitorKonto, UdlånsNummer og VareNummer.<br />

Tilføj afgrænsningsfelterne DebitorKonto og UdlånsNummer.<br />

Overskriften i QT’en skal være ’Udlånsliste’, kartoteker og filter skal vises.<br />

3 Rapport-definition og layout<br />

De fire øverste linjer er Page Header linjer med felter i form af systemvariablerne<br />

&FirmaNavn, &Report, &Page og &SystemDato, derefter er der PageHeader linjer<br />

med overskrifter og streger.<br />

4 De næste linjer fremkommer med én Body linjer på kartoteket UDLUdlånsPost,<br />

med felterne i rækkefølge fra venstre mod højre.<br />

DebitorKonto, UdlånsNummer, VareNummer, UdlejningsVærdi, ForsikringsVærdi<br />

og UdlånsStatus.<br />

5 Automatisk Subtotal<br />

Der skal dannes automatiske subtotaler på felterne UdlejningsVærdi og<br />

ForsikringsVærdi.<br />

6 Afprøvning<br />

Godkend rapporten og afprøv den.<br />

7 Prøv at udskrive rapporten i hvert niveau 0=Grandtotal, 1=DebitorKonto,<br />

2=UdlånsNummer og 3=VareNummer.<br />

Prøv med de to muligheder for automatiske ledetekster og bemærk forskellen.<br />

Prøv at ændre sorteringskriterier til DebitorKonto og UdlånsStatus, og prøv<br />

rapporten i forskellige niveauer.<br />

8 Prøv at anvende et af filtrene så du kun får alle udlånsposter med status ’Udlånt’. (I<br />

eksemplet vises kun poster med status ’Udlånt’)<br />

9 Godkend rapporten.<br />

251<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


27. Rapport Control macroer<br />

Mål med lektionen<br />

Formålet med denne lektion er, at give deltagerne kendskab til de specielle rapport control macroer<br />

der findes.<br />

Lektionen er kun tænkt som et tillæg med en liste over control macroer. Der er ingen ekstra<br />

forklaringer eller eksempler. Ønskes dette, henvises der til manualen ’Teknisk Reference’ eller<br />

hjælpeteksten i hjælpefilerne.<br />

Efter lektionen skal kursisterne kende til:<br />

Rapport control macroer.<br />

Rapport Control macroer<br />

Rapport control macroer er en erstatning for de rapport control kommandoer, der findes til rapporter.<br />

Macroerne er opbygget ved hjælp af kommandoerne og udfører således de samme funktioner.<br />

Både control macroer og control kommandoer kan anvendes i rapporter, men oftest anvendes kun<br />

macroerne.<br />

Fordele ved control macroer<br />

En af fordelene ved at anvende macroerne er, at disse syntaks checkes. Dette udføres ikke ved<br />

kommandoerne.<br />

Der er også parameter kontrol.<br />

Rapport control macroerne findes i macro biblioteket REPORTS, der altid skal loades, inden macroerne<br />

kan anvendes.<br />

Dokumentation<br />

Når der skal findes dokumentationen på macroerne, skal der ses på macronavnet, hvorefter den<br />

tilsvarende control kommando findes i manualen eller i hjælpe filen.<br />

Macroen #Rep_Execute tilsvarer f.eks. kommandoen Control ‘Execute’. Alle macroerne starter med<br />

#Rep_ efterfulgt af navnet på kommandoen.<br />

Parametrene til macroerne er de samme som til kommandoerne. Der er dog forskel ved angivelsen,<br />

idet de i kommandoer adskilles med mellemrum og i macroer adskilles med komma.<br />

Skema med macroer findes på efterfølgende sider.<br />

252<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Skema over rapport control macroer<br />

Navn Funktion Parametre<br />

#Rep_Newline #Rep_NewLine() Gå til ny linje<br />

#Rep_NewLine(n) Gå linjer ned, højst til næste<br />

side skift<br />

#Rep_NewLine(Force,n) Gå linjer ned, uden at stoppe<br />

ved sideskift<br />

#Rep_Newpage #Rep_NewPage(-F) Gå til næste side, uden footerlinjer<br />

på nuværende side<br />

#Rep_NewPage(+F) Gå til næste side, skriv først<br />

footerlinjer på nuværende side<br />

Disable<br />

(findes kun som control<br />

kommando)<br />

Enable<br />

(findes kun som control<br />

kommando)<br />

Control “Disable<br />

linjetype”<br />

Control “Enable<br />

linjetype”<br />

Der udskrives ikke linjetyper Prolog,<br />

Epilog, Header og Footer indtil de<br />

genaktiveres med Control ”Enable”<br />

Genaktiverer linjetyperne Prolog,<br />

Epilog, Header og Footer<br />

#Rep_Execute #Rep_Execute(linjetyp) Udfør linjetyperne Prolog, Epilog,<br />

Header og Footer<br />

#Rep_Execute(nr) Udfør linjetyperne med control<br />

nummer <br />

#Rep_JobType #Rep_Jobtype(jobtype) Sæt jobtype for spoolet printjob<br />

#Rep_JobDesc #Rep_JobDesc(beskriv) Sæt jobbeskrivelse for spoolet<br />

printjob<br />

#Rep_Columns #Rep_Columns(antal<br />

kol)<br />

#Rep_SetCol #Rep_SetCol(kolonne,<br />

fra pos,<br />

bredde)<br />

Hvor mange kolonner der skal være<br />

i rapporter.<br />

Efterfølges af #Rep_SetCol<br />

I rapporter med denne macro svarer<br />

sideskift til ”Gå til næste kolonne”<br />

Kolonnens nummer, startposition og<br />

bredde. Kolonne=1,2,3,...<br />

#Rep_Ignore #Rep_Ignore(kartotek) Når det beregnes hvornår Groupheader<br />

og Group-footer skal<br />

udskrives, så se bort fra angivne<br />

kartotek<br />

#Rep_LockCol #Rep_LockCol(kolonne) Hvilken kolonne der skal ses ved<br />

udskrift til skærm<br />

#Rep_FF #Rep_FF(ON)<br />

Send eller send ikke Form Feed<br />

koder til printeren f.eks. ved udskrift<br />

#Rep_FF(OFF)<br />

ved labels, hvor sidehøjde er højde<br />

på label.<br />

#Rep_Header #Rep_Header(TOP,n)<br />

#Rep_Header(BOTTOM,n)<br />

Hvor er 8 og HEADER fylder 3<br />

linjer, afsættes 8 linjer til Headeren<br />

og Headeren skrives i de 3 øverste<br />

linjer hvis TOP og de 3 nederste hvis<br />

BOTTOM.<br />

253<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Navn Funktion Parametre<br />

#Rep_Footer #Rep_Footer(TOP,n)<br />

#Rep_Footer(BOTTOM,n)<br />

Hvor er 8 og FOOTER fylder 3<br />

linjer, afsættes 8 linjer til Footeren,<br />

og Footeren skrives i de 3 øverste<br />

linjer hvis TOP er specificeret og i de<br />

tre nederste hvis BOTTOM er<br />

specificeret.<br />

#Rep_BuildParm #Rep_BuildParm(tekst) Sætter systemvariablen &Parm til<br />

den argumentstreng, der skal<br />

bruges til at køre samme rapport på<br />

samme måde i nyt kald af<br />

rapportafviklig.<br />

#Rep_InitLine #Rep_InitLine() Kør printerkoderne i position 1 i<br />

linje 1 uden at skrive noget.<br />

Relevant hvis f.eks. papirkode er<br />

angivet i linje 1. Efter #Rep_InitLine<br />

vil systemvariablerne der afhænger<br />

af papirkoderne være initialiseret.<br />

#Rep_Warning #Rep_Warning(ON) Infoboksen “Rapporten består af 0<br />

linjer” vises ved tom rapport.<br />

#Rep_Warning(OFF) Infoboksen “Rapporten består af 0<br />

linjer” vises ikke ved tom rapport.<br />

#Rep_Language #Rep_Language(Sprog) Systemvariablen &Language sættes<br />

til og tekstlaget <br />

benyttes i rapporten.<br />

Argumentstrengen til<br />

rapportafvikleren skal indeholde<br />

LANGUAGE=*<br />

#Rep_ExLan #Rep_ExLan(sprog) Undersøger om tekstlaget <br />

er oprettet i rapporten. Hvis det er<br />

sættes &Language=værdien ellers til<br />

nul.<br />

#Rep_Lpi #Rep_Lpi(linjeafstand) =navn på linjeafstand<br />

i aktuelle printerdriver<br />

#Rep_Pitch #Rep_Pitch(skrifttype) =navn på skrifttype i<br />

aktuelle printerdriver<br />

#Rep_Paper #Rep_Paper(papir) =navn på papirformat i<br />

aktuelle printerdriver<br />

254<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Navn Funktion Parametre<br />

#GrpStrat #Rep_GrpStrat(alter)<br />

#Rep_GrpStrat(stack)<br />

#Rep_PutReal #Rep_PutReal(værdi,<br />

kolonne,<br />

længde,<br />

format,<br />

flag)<br />

#Rep_PutInt #Rep_PutInt(værdi,<br />

kolonne,<br />

længde,<br />

format,<br />

flag)<br />

#Rep_PutStr #Rep_PutStr(værdi,<br />

kolonne,<br />

længde,<br />

format,<br />

flag)<br />

#Rep_PutDate #Rep_PutDate(værdi,<br />

kolonne,<br />

længde,<br />

format,<br />

flag)<br />

#Rep_PutEnum #Rep_PutEnum(værdi,<br />

kolonne,<br />

længde,<br />

Hver gang der skiftes kartotek,<br />

udskrives Group-Footer for det<br />

’gamle’ kartotek og Group-Header<br />

for det ’nye’ kartotek.<br />

(Dette er default hvis kommandoer<br />

ikke angives)<br />

Udskrivning af Group-Headere og<br />

Group-Footere sker efter en<br />

stakorienteret strategi.<br />

Først kommer alle Group-Headerne,<br />

og derefter kommer alle Group-<br />

Footerne<br />

Et felt af typen REAL indsættes<br />

under afviklingen af rapporten uden<br />

at være oprettet på en af linjerne.<br />

Format: udfyldes ikke.<br />

Flag: 0=venstre, 1=højre,<br />

2=centreret<br />

Et felt af typen INT indsættes under<br />

afviklingen af rapporten uden at<br />

være oprettet på en af linjerne.<br />

Format: udfyldes ikke.<br />

Flag: 0=venstre, 1=højre,<br />

2=centreret<br />

Et felt af typen STR indsættes under<br />

afviklingen af rapporten uden at<br />

være oprettet på en af linjerne.<br />

Format: udfyldes ikke.<br />

Flag: 0=venstre, 1=højre,<br />

2=centreret, 3=ledetekst<br />

venstrestillet og efterfulgt med ...:<br />

8=som 0 med versaler<br />

9=som 1 med versaler<br />

10=som 2 med versaler<br />

11=som 3 med versaler<br />

Et felt af typen DATE indsættes<br />

under afviklingen af rapporten uden<br />

at være oprettet på en af linjerne.<br />

Format: udfyldes ikke.<br />

Flag: 0=venstre, 1=højre,<br />

2=centreret<br />

Et felt af typen ENUM indsættes<br />

under afviklingen af rapporten uden<br />

at være oprettet på en af linjerne.<br />

255<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Navn Funktion Parametre<br />

format,<br />

flag)<br />

256<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


28. Linje-XAL og feltbetingelser<br />

Formål<br />

Formålet med denne lektion er at give deltagerne kendskab til kolonnen Linje XAL, så deltagerne kan<br />

lære at udnytte nogle af de muligheder der findes heri. Desuden undervises der i feltbetingelser.<br />

Efter lektionen skal kursisterne kunne:<br />

Anvende linje-XAL til tildeling af værdier til variabler inde i layoutområdet.<br />

Styre om en linje skal udskrives eller ej<br />

Anvende feltbetingelser.<br />

Generelt<br />

Linje XAL og feltbetingelser har ingen umiddelbar sammenhæng, men behandles begge i denne<br />

lektion, da de begge benytter sig af ’betingelser’. Linje XAL kan både indeholder almindelig XAL kode<br />

og betingelser, medens feltbetingelser kun kan indeholde betingelser.<br />

Linje XAL<br />

Kolonnen<br />

Linje-XAL er den smalle kolonne der befinder sig mellem kartotekskolonnen og layoutområdet.<br />

Kolonnen har en helt speciel betydning, idet den indeholde en XAL editorboks for hver linje, der<br />

oprettes. Editorboksen åbnes når cursoren placeres i boksen og der tastes ENTER.<br />

Rapport-definition med de fire kolonner<br />

Linje-XAL<br />

Linjetyper Kartoteker Layout område<br />

Enter<br />

(XAL editorboks)<br />

Formel<br />

257<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Den XAL kode der indtastes i editorboksen udføres før linjen udskrives i rapporten, og før evt.<br />

beregninger på felterne i den aktuelle linje. I Felterne anvendes således dataværdierne, hvis de ændres<br />

i Linje XAL.<br />

Anvendelse<br />

De to vigtigst funktioner i Linje XAL er:<br />

Tildeling af værdier til felter og variabler under afvikling af udskrift.<br />

Styring af om en linje skal udskrives eller ikke.<br />

Tildeling af værdier til felter og variabler<br />

Felter og variabler kan tildeles værdier i Linje XAL lige inden de behandles inde i layoutområdet.<br />

Skal der for eksempel dannes en udskrift over kreditorer med feltet BalanceMST (SaldoDkr), vises dette<br />

felt normalt med to decimaler med kroner og ører.<br />

I Linje XAL kan feltet tildeles en ny værdi således, inden linjen udskrives. Feltet kan f.eks. afrundes til<br />

hele tusinder.<br />

Eksempel<br />

SEARCH VendTable<br />

OUTPUT VendTable<br />

END<br />

Body VendTable Account<br />

Resultat<br />

VareNavn1<br />

mmer<br />

Name BalanceMST<br />

SET BalanceMST=ROUND(BalanceMST,1000)<br />

230896 Kreds Tester A/S -2.000,00<br />

45934545 IBM Danmark A/S -5.000,00<br />

71124987 Intel Corporation -46.000,00<br />

I eksemplet anvendes funktionen ROUND. Første parameter er navn på felt der skal afrundes, og anden<br />

parameter er værdien der afrundes med. Der afrundes op eller ned til nærmeste multiplum af<br />

parameter to.<br />

Som det fremgår af eksemplet udføres afrundingen i Linje-XAL, inden feltet udskrives.<br />

258<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Styring af om linjer skal udskrives eller ikke.<br />

Linje XAL anvendes også til at bestemme om en linje skal udskrives eller ikke skal udskrives.<br />

Dette udføres ved hjælp af kommandoen RETURN.<br />

Syntaks<br />

RETURN X<br />

Kommandoen RETURN efterfølges af en sand eller falsk værdi, der i syntaksen udtrykkes med ’X’.<br />

Sand<br />

Sande værdier er alle tal forskellige fra nul, men kan f.eks. også være et felt eller en variabel med et<br />

indhold. Dette svarer til tallet 1.<br />

Afsluttes Linje XAL med RETURN X, og X er en sand værdi, udskrives linjen.<br />

Afsluttes Linje XAL med en kommando, der ikke er en RETURN, udskrives linjen også.<br />

Falsk<br />

Falske værdier er tallet nul, men kan f.eks. være et felt eller en variabel uden indhold. Dette svarer til<br />

tallet nul.<br />

Afsluttes Linje XAL med RETURN X, og X er en falsk værdi, udskrives linjen ikke.<br />

NB! Sande og falske værdier kan også udtrykkes i form af udtryk der evaluerer til sand eller falsk.<br />

Eksempel<br />

RETURN Telefon””<br />

I eksemplet består udtrykket af Telefon””. Er der et telefonnummer svarer udtrykket til 1. Er der IKKE<br />

noget telefonnummer svarer udtrykket til 0.<br />

Direkte anvendelse af RETURN 0 og RETURN 1<br />

I nogen situationer kan det være nødvendigt at afprøve en rapport uden at alle linjer udskrives under<br />

testen. I stedet for at slette sådanne linjer, kan de forhindres i udskrivning med RETURN 0.<br />

Eksempel<br />

I næste eksempel findes der to bodylinjer med felterne Adresse1 og Adresse2.<br />

Feltet Adresse1 har i Linje XAL ’RETURN 1’ og udskrives. Feltet Adresse2 har i Linje XAL ’RETURN 0’ og<br />

udskrives ikke.<br />

259<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Eksempel<br />

SEARCH VendTable<br />

OUTPUT VendTable<br />

END<br />

Body<br />

Body<br />

Body<br />

Resultat<br />

VendTable<br />

VendTable<br />

VendTable<br />

230896 Kreds Tester A/S -2.000,00<br />

Kredsvej 12B<br />

45934545 IBM Danmark A/S -5.000,00<br />

Nymøllevej 91<br />

71124987 Intel Corporation -46.000,00<br />

Building C03-05<br />

I eksemplet er det kun Adress1 der udskrives.<br />

Eksemplet er i øvrigt det samme som tidlige med hensyn til funktionen ROUND på feltet BalanceMST.<br />

Anvendelse med felter<br />

Som beskrevet tidligere kan sande og falske værdier være tallene 1 og 0, men også variabler eller felter<br />

med eller uden indhold.<br />

I eksemplet herunder testes der i Linje XAL på om felterne Telefon og Fax har et indhold.<br />

Er der indhold i felterne er værdierne sande. Det svarer til RETURN 1, og linjen udskrives.<br />

Er der IKKE indhold i felterne er værdierne falske. Det svarer til RETURN 0, og linjen udskrives ikke.<br />

Eksempel<br />

SEARCH VendTable<br />

OUTPUT VendTable<br />

END<br />

Body<br />

Body<br />

Body<br />

VendTable<br />

VendTable<br />

VendTable<br />


Resultat<br />

230896 Kreds Tester A/S -2.000,00<br />

Telefon...: 35 31 55 66<br />

48143030 Dtpartner A/S 0,00<br />

Telefon...: 48 14 30 30<br />

Fax.......: 48 14 34 34<br />

45934545 IBM Danmark A/S -5.000,00<br />

Telefon...: 45 93 45 45<br />

71124987 Intel Corporation -46.000,00<br />

Telefon...: 97 124 9987<br />

Bemærk at det kun er et sted, at der udskrives en linje med Fax. Resten af linjerne har kun telefon.<br />

Eksemplet er i øvrigt det samme som tidlige med hensyn til funktionen ROUND på feltet BalanceMST.<br />

Feltbetingelser<br />

Når der oprettes nye felter i rapporter fremkommer en menu med teksten ’Opret felt’, og når der<br />

ændres i eksisterende felter fremkommer menuen ’Ret felt’. Menupunkterne er de samme.<br />

Et af menupunkterne er ’Feltbetingelse’.<br />

Når menupunktet anvendes åbnes der for en XAL editorboks til indtastning af XAL kode.<br />

Vigtigt! I editorboksen til feltbetingelser, kan der ikke indtastes almindelig XAL kode i form af SEARCH,<br />

PRINT, IF-THEN-ELSE osv.<br />

Der kan kun indsættes udtryk i form af betingelser. Betingelserne skal kunne evaluere til sand eller<br />

falsk.<br />

I eksemplet herunder er der sat feltbetingelser på de to ledetekstfelter der er oprettet på felterne<br />

Telefon og Fax.<br />

I feltet Telefon er betingelsen sat op som et udtryk og i feltet Fax som et feltnavn.<br />

Eksempel<br />

SEARCH VendTable<br />

OUTPUT VendTable<br />

END<br />

Body<br />

Body<br />

Body<br />

VendTable<br />

VendTable<br />

VendTable<br />


Resultat<br />

230896 Kreds Tester A/S -2.000,00<br />

Telefon...: 35 31 55 66<br />

48143030 Dtpartner A/S 0,00<br />

Telefon...: 48 14 30 30<br />

Fax.......: 48 14 34 34<br />

45934545 IBM Danmark A/S -5.000,00<br />

Telefon...: 45 93 45 45<br />

71124987 Intel Corporation -46.000,00<br />

Telefon...: 97 124 9987<br />

Bemærk at det kun er et sted der udskrives en linje med Fax. Resten af linjerne har kun Telefon.<br />

262<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgaver: Linje-XAL og feltbetingelser<br />

Opgave 1: Linje-XAL og feltbetingelser<br />

Formål med opgaven<br />

At prøve at anvende Linje-XAL og feltbetingelser i rapporter.<br />

Beskrivelse<br />

Der skal arbejdes videre med rapporten fra den forrige opgave, idet der tilføjes lidt kode i søjlen Linje-<br />

XAL og der skal oprettes fem nye felter med feltbetingelser.<br />

Koden i Linje-XAL skal sørge for at feltet ForsikringsVærdi afrundes til hele 1000 kroner, da der ikke<br />

forsikres i mindre beløb.<br />

Feltet UdlånsStatus skal erstattes af fem andre felter der hver især kun viser første bogstav i hver af de<br />

fem mulige former for udlånsstatus der findes. Til hvert af felterne skal der knyttes en feltbetingelse der<br />

sikrer at feltet kun udskrives når denne betingelse er opfyldt.<br />

Linje-XAL, nye felter og betingelser gennemgås nøjere i forløbet.<br />

Eksempel<br />

Lises Bolsjefabrik A/S Side: 1<br />

OPG53_R04_1 Dato: 09/09-08<br />

Udlånt<br />

Returne<br />

Solgt<br />

Udlejning Forsikring Bortko<br />

KontoNr UdlånsNr VareNr Værdi Værdi Skrot<br />

20000 1050 10-HD-4 720,00 8.000,00 U<br />

20000 1050 10-HD-4 720,00 8.000,00 R<br />

20000 1050 10-HD-4 720,00 8.000,00 S<br />

20000 1300 10-MB-2 512,30 6.000,00 S<br />

20000 1400 10-HD-4 720,00 8.000,00 B<br />

Konto: 20000 3.392,30 38.000,00<br />

Se forløbet næste side:<br />

263<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Forløb √<br />

1 Åben rapporten fra forrige opgave og fortsæt i denne eller gem den under et nyt<br />

navn der passer til denne opgave, og fortsæt så i kopien.<br />

2 Linje-XAL<br />

I Linje-XAL på Body linjen skal der indsættes et stykke kode der tildeler en afrundet<br />

værdi til feltet ForsikringsVærdi. Se eksempel på anvendelse af funktionen ROUND i<br />

lektionen.<br />

3 Nye tekstfelter med feltbetingelser<br />

Feltet UdlånsStatus skal fjernes og erstattes af fem andre felter der kun fylder ét<br />

tegn hver.<br />

Felterne skal i feltudtryk kun indeholde det første bogstav i hver af de fem mulige<br />

former for UdlånsStatus.<br />

Til hver felt skal der knyttes en feltbetingelse som gør at feltet kun udskrives hvis<br />

det indeholder en værdi der tilsvarer fastteksten med begyndelsesbogstav som<br />

indtastet i feltudtrykket.<br />

4 Afprøvning<br />

Gem rapporten og afprøv den for at se om alle koden i Linje-XAL fungerer, og om<br />

de fem tekstfelter viser de rette bogstaver på de rigtige tidspunkter.<br />

264<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


29. Linjetypen Subtotal<br />

Formål<br />

Formålet med denne lektion er at give deltagerne udvidet kendskab til linjetypen Subtotal. Kursisterne<br />

lærer at anvende linjetypen sammen med systemvariablen &Breaklevel til dannelse af specielle tekster<br />

for hvert sorteringsniveau i rapporten.<br />

Efter lektionen skal kursisterne kunne:<br />

Anvende linjetypen Subtotal til udskrivning af egne ledetekster foran automatiske subtotaler i<br />

rapporter.<br />

Anvende systemvariablen &BreakLevel til styring af korrekt tekst til sorteringsniveau.<br />

Generelt<br />

Linjetypen Subtotal behandles grundlæggende i lektionen ’Linjetyper med kartoteker’. I denne lektion<br />

behandles selve opsætningen af det felt der skal dannes totaler for.<br />

Linjetypen Subtotal anvendes udelukkende til opsætning af egne ledetekster til automatiske totaler.<br />

Der kan dog udmærket anvendes automatiske ledetekster til subtotaler. Dette behandles i lektionen<br />

’Subtotaler, automatiske’.<br />

Denne lektion behandler indgående egne ledetekster i linjetypen subtotal, både i kartoteker med<br />

sortering i ét niveau og sortering i flere niveauer.<br />

Linjetypen Subtotal med egne ledetekster<br />

Linjetypen anvendes udelukkende til udskrivning af egne ledetekster til subtotaler i stedet for de<br />

automatiske ledetekster.<br />

Når linjetypen anvendes lukkes der automatisk af for anvendelse af de automatiske ledetekster i form<br />

af ’Kopi af linje’ og ’Feltnavn værdi’.<br />

Det er frit hvilken tekst der skal stå i layoutet på subtotal linjen, som vist i nedenstående eksempel.<br />

Rapport-definition med Subtotal linje<br />

PgHd<br />

PgHd<br />

Body<br />

Subt<br />

VendTrans<br />

VendTrans<br />

Konto Dato Bilag SaldoDkr<br />

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

Account Date Voucher<br />

AmountMST<br />

Kreditorer i alt ............:<br />

Det skal bemærkes, at Subtotal linjen kun indeholder den ledetekst, der skal udskrives, og at der ikke<br />

angives noget subtotalfelt eller nogen variabel på selve linjen for at udskrive subtotaler.<br />

Ovenstående rapport-definition kunne f.eks. resultere i følgende rapport.<br />

265<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Egen indtastet ledetekst i linjetypen Subtotal<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 />

Kreditorer i alt ...........: -93.531,38<br />

===========<br />

Subtotal linje med for lang ledetekst<br />

Hvis ledeteksten på subtotal linjen bliver for lang, så den går ind under feltet med den automatiske<br />

subtotal, eller hvis selve subtotalen bliver så stor at den går ind over teksten, da vil subtotalen ikke blive<br />

udskrevet. Dette vises i næste eksempel.<br />

Eksempel på subtotal linje med for lang ledetekst<br />

PgHd<br />

PgHd<br />

Body<br />

Subt<br />

VendTrans<br />

VendTrans<br />

I eksemplet går teksten ’.:’ ind over feltet AmountMST.<br />

Konto Dato Bilag SaldoDkr<br />

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

Account Date Voucher<br />

AmountMST<br />

Kreditorer i alt ...............:<br />

Ovenstående rapport-definition kunne f.eks. resultere i følgende rapport.<br />

Eksempel på rapport med for lang ledetekst<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 />

Kreditorer i alt ..............:<br />

===========<br />

Da ledeteksten er for lang udskrives totalen ikke.<br />

266<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Udskrift i flere niveauer med samme ledetekst<br />

Under Rapport-definition i billedet ’Opsætning’ kan der i feltet ’Subtotaler’ åbnes for et nyt billede til<br />

definition af udskrivnings måde.<br />

Billedet er navngivet med udskrivningskartoteks navn. I billedet kan der i feltet ’Niveau’ indsættes et tal<br />

til angivelse for hvilket niveau der skal udskrives subtotaler for.<br />

Hvis billedet åbnes i Rapport-definition herunder, og niveauet sættes til 1, og der sorteres på feltet<br />

kontonummer, vil eksemplet udløse en rapport der ser ud som nedenstående eksempel.<br />

Rapport-definition med én Subtotal linje (niveau 1 sorteret på Kontonummer)<br />

PgHd<br />

PgHd<br />

Body<br />

Subt<br />

VendTrans<br />

VendTrans<br />

Resultat af rapport<br />

Konto Dato Bilag SaldoDkr<br />

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

Account Date Voucher<br />

AmountMST<br />

Kreditorer i alt ............:<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 />

Kreditorer i alt ............: -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 />

Kreditorer i alt ............: 0,00<br />

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

Kreditorer i alt ............: -93.531,38<br />

===========<br />

Bemærk at der står samme tekst ud for hver subtotal og grandtotalen.<br />

Udskrift i flere niveauer med forskellige ledetekster<br />

I forrige afsnit var der et eksempel på en rapport udskrevet i ét niveau, og det kunne ses at samme<br />

ledetekst blev udskrevet for hver eneste subtotal og grandtotalen.<br />

På samme måde som der kan indsættes flere Page Header linjer, Body linjer osv. kan der kan også<br />

indsættes flere linjer af typen subtotal. Hvis der f.eks. indsættes to subtotallinjer i det forrige eksempel,<br />

vil dette blot medføre at begge linjer udskrives hver gang, der skal udskrives en subtotal.<br />

Hvis hver linje skal anvendes til sin egen type total f.eks. subtotal og grandtotal, kræver det en speciel<br />

styring at få teksten udskrevet på det rigtige niveau.<br />

267<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Styringen foretages ved hjælp systemvariablen &BreakLevel, og udføres i Rapport-definitions søjle<br />

Linje-XAL.<br />

&Breaklevel<br />

Variablen &BreakLevel er en systemvariabel der til enhver tid indeholder nummeret på det niveau der<br />

udskrives.<br />

I det tidligere nævnte eksempel blev rapporten udskrevet i ét niveau. Faktisk udskrives rapporten i to<br />

niveauer som følger:<br />

Niveau Totaltype<br />

0 Grandtotal<br />

1 Subtotal<br />

Ved at kontrollere værdien i &BreakLevel inde i søjlen Linje-XAL i rapport-definition, kan det<br />

udskrivningen af linjetypen subtotal styres.<br />

Linje XAL<br />

Søjlen Linje-XAL i rapport-definition anvendes bl.a. til styring af om linjer skal udskrives eller ikke skal<br />

udskrives.<br />

For at en Subtotal linje kan udskrives kræver det at kolonnen med Linje XAL enten er tom eller at<br />

indholdet resulterer i et udtryk der er sandt.<br />

Et sandt udtryk er f.eks. tallet 1 eller to værdier der sammenlignes med hinanden.<br />

I forbindelse med udskrivning af subtotallinjer kan der i Linje Xal opstilles et udtryk der sammenligner<br />

værdien af systemvariablen &Breaklevel.<br />

Eksempel 1<br />

RETURN &BreakLevel==1<br />

Hvis &BreakLevel er 1 svarer det til at resultatet er sandt, og linjen udskrives. Eksemplet kan også<br />

skrives som vist herunder.<br />

Eksempel 2<br />

IF &BreakLevel==1 THEN<br />

RETURN 1<br />

ELSE<br />

RETURN 0<br />

ENDIF<br />

Det er muligt at referere til felter i subtotallinjen.<br />

I subtotallinjer kan der udskrives værdier fra felter i det kartotek der er angivet i kartotekskolonnen.<br />

I nedenstående eksempel er feltet Account indsat i starten af den ene subtotal linje, og udskrives hver<br />

gang der er en total for en konto. Dette kræver at posterne i det givne kartotek sorteres efter<br />

kontonummer som første felt, og det angives at der skal udskrives totaler for niveau 1.<br />

268<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Rapport-definition med to subtotal linjer med egen ledetekst<br />

PgHd<br />

PgHd<br />

Body<br />

Subt<br />

Subt<br />

VendTrans<br />

VendTrans<br />

VendTrans<br />

<<br />

<<br />

Konto Dato Bilag SaldoDkr<br />

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

Account Date Voucher AmountMST<br />

Account<br />

i alt ............:<br />

Kreditorer i alt ............:<br />

RETURN &BreakLevel == 1<br />

RETURN &BreakLevel == 0<br />

Bemærk at ledeteksten for kontonummeret (subtotalen) er niveau 1 og at ledeteksten for kreditorer i<br />

alt (grandtotalen) er niveau 0.<br />

Sorteres der på kontonummer og niveau er et, udskrives der totaler hver gang der afsluttes et<br />

kontonummer, og til sidst udskrives en samlet total for hele rapporten.<br />

Grandtotalen svarer til niveau 0, og kontototalerne svarer til niveau 1. Som det fremgår af eksemplerne<br />

udskrives der forskellige tekster til hvert niveau.<br />

Resultat af rapport med to subtotal linjer med egne ledetekster<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 i alt ............: -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 i alt ............: 0,00<br />

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

Kreditorer i alt ............: -93.531,38<br />

===========<br />

269<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Forskellige ledetekster til flere kartoteker<br />

Da der kan være flere kartoteker med bodylinjer i samme rapport, er der også mulighed for forskellige<br />

ledetekster til subtotalerne for de enkelte kartoteker. Derfor skal der for subtotallinjerne også angives<br />

kartotek i kartotekskolonnen. Se nedenstående eksempel.<br />

Rapport-definition med to subtotallinjer med egen ledetekst<br />

PgHd<br />

PgHd<br />

PgHd<br />

Body<br />

Body<br />

Subt<br />

Subt<br />

VendTable<br />

VendTrans<br />

VendTable<br />

VendTrans<br />

Konto Navn SaldoDkr<br />

Konto Dato Bilag<br />

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

Account Name BalanceMST<br />

Account Date Voucher AmountMST<br />

Total for kreditorer ........:<br />

Total for poster ............:<br />

Resultat af rapport med to subtotallinjer med egne ledetekster<br />

Konto Navn SaldoDkr<br />

Konto Dato Bilag BeløbDkr<br />

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

971249987 Intel Corporation -93.531,38<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 i alt ............: -93.531,38<br />

===========<br />

7147274141 AST Research, Inc 0,00<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 i alt ............: 0,00<br />

===========<br />

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

Kreditorer i alt .........................: -93.531,38<br />

===========<br />

270<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgaver: Linjetypen Subtotal<br />

Opgave 1: Linjetypen Subtotal og &BreakLevel<br />

Formål med opgaven<br />

At prøve at anvende Linjetypen Subtotal til at indsætte egne ledetekster foran automatiske subtotaler.<br />

Linjeteksterne udskrives afhængigt af indholdet i systemvariabler &BreakLevel.<br />

Beskrivelse<br />

Der skal arbejdes videre med rapporten fra den forrige opgave idet der tilføjes nogle linjer af typen<br />

Subtotal.<br />

Der skal indsættes en linje for hvert niveau i sorteringskriterierne og en for grandtotalen.<br />

Systemvariablen &BreakLevel anvendes i Linje-XAL til at bestemme hvornår de forskellige subtotal<br />

linjer skal udskrives.<br />

Subtotal linjerne og systemvariablen gennemgås nøjere i forløbet.<br />

Eksempel<br />

Lises Bolsjefabrik A/S Side: 1<br />

OPG53_R04_1 Dato: 09/09-08<br />

Udlånt<br />

Returne<br />

Solgt<br />

Udlejning Forsikring Bortko<br />

KontoNr UdlånsNr VareNr Værdi Værdi Skrot<br />

20000 1050 10-HD-4 720,00 8.000,00 U<br />

20000 1050 10-HD-4 720,00 8.000,00 R<br />

20000 1050 10-HD-4 720,00 8.000,00 S<br />

I alt udlånsnummer 1050 2.160,00 24.000,00<br />

20000 1300 10-MB-2 512,30 6.000,00 S<br />

I alt udlånsnummer 1300 512,30 6.000,00<br />

20000 1400 10-HD-4 720,00 8.000,00 B<br />

I alt udlånsnummer 1400 720,00 8.000,00<br />

I alt debitornummer 20000 3.392,30 38.000,00<br />

Se forløbet næste side:<br />

271<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Forløb √<br />

1 Åben rapporten fra forrige opgave og fortsæt i denne eller gem den under et nyt<br />

navn der passer til denne opgave, og fortsæt så i kopien.<br />

2 Subtotal linjer<br />

Opret fire nye subtotal linjer til hver af de fire niveauer der kan dannes totaler for.<br />

Teksterne skal være:<br />

0. Grandtotal<br />

1. I alt debitornummer<br />

2. I alt udlånsnummer<br />

3. I alt varenummer<br />

Hver af de tre nederste tekster skal efterfølges af et felt med det tilsvarende felt fra<br />

kartoteket.<br />

3 Linje-XAL<br />

I Linje-XAL på hver subtotal linje, skal der indsætte et udtryk bestående af<br />

kommandoen RETURN efterfulgt af udtrykket &BreakLevel == x, hvor x erstattes af<br />

det pågældende niveau i sorteringskriterierne.<br />

Ovenstående tekster svarer til sorteringen DebitorKonto, UdlånsNummer,<br />

VareNummer.<br />

Ændres der på sorteringen skal teksten ændres tilsvarende.<br />

4 Afprøvning<br />

Gem rapporten og afprøv den en gang med hver af de fire niveauer og læg mærke<br />

til forskellen.<br />

Eksemplet viser kun sortering på de to første niveauer.<br />

272<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


30. Notater i rapporter<br />

Formål<br />

Formålet med denne lektion er at lære deltagerne at udskrive notater i rapporter.<br />

Efter lektionen skal kursisterne kunne:<br />

Anvende de macroer der knytter sig til udskrivning af notater i rapporter<br />

Opsætte rapport-definition med layout og felter til udskrivning af notater.<br />

Generelt<br />

Der kan oprettes notater i næsten alle skærmbilleder i C5.<br />

De samme notater kan også udskrives i rapporter.<br />

Udtræk af notaterne kan udføres på tre forskellige måder:<br />

I Rapport-XAL<br />

I Rapport-QT<br />

Med macroer i Rapport-XAL eller Rapport-QT<br />

Udtræk ved hjælp af macroer er den nemmeste, og det anbefales at anvende denne metode i<br />

dagligdagen.<br />

De to andre metoder gennemgås kort med et eksempel af hensyn til helheden.<br />

Rapport linje<br />

Inden gennemgangen af søgning efter notater behandles ’Opsætning af linje i Rapport-definition’.<br />

Opsætning af linje i Rapport-definition<br />

Udskrivning af notater kræver under alle omstændigheder opsætning af en Body linje i Rapportdefinition.<br />

Body linjen består af linjetypen ’Body’, kartoteket ’Notes’ og feltet ’Tekst’.<br />

Eksempel<br />

Body<br />

Notes<br />

Tekst<br />

273<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Bemærk! Når tekstfeltet indsættes, vises der en infoboks som<br />

følger:<br />

Feltlængde reduceret<br />

Det betyder i virkeligheden, at feltet indsættes med en længde på 250 tegn.<br />

Da der ikke kan være 250 tegn på rapporten, er det nødvendigt manuelt at gå ind i feltet og rette<br />

formatet til en længde, der passer til den aktuelle rapport f.eks. 60 tegn.<br />

Blød linje<br />

Når der oprettes notater i et skærmbilleder, er det muligt at indskrive tekster, der fylder mere end der<br />

umiddelbart er plads til på de enkelte linjer. Sådanne tekster fortsætter blot ud over kanten i højre side<br />

at notatvinduet.<br />

Udskrives denne type notatlinjer i en bodylinje med et ’Tekst’ felt, der er reduceret til f.eks. 60 tegn,<br />

afkortes notatlinjen, så der kun udskrives de 60 tegn. Resten af teksten udskrives ikke.<br />

Skal hele teksten vises, må bodylinjen ændres til en ’Blød linje’. Bløde linjer opsættes ved at placeres<br />

cursoren på linjen og taste ALT+B.<br />

Bløde linjer kendetegnes ved, at de starter med en lodret streg lige i starten af layoutområdet. I<br />

eksemplet herunder er linjen ændret til en ’Blød linje’.<br />

Bemærk! Under indtastning af notater i skærmbilleder er det også muligt at anvende ALT+B til<br />

indtastning af ’Bløde linjer’, så undgås problemet med, at der tastes ud over kanten på notatvinduet.<br />

Eksempel (Blød linje)<br />

Body<br />

OK<br />

Notes<br />

| Tekst<br />

Efter opsætning af rapportlinjen skal notaterne hentes i Notes kartoteket.<br />

Dette kan f.eks. udføres i Rapport XAL.<br />

Tegn for at ’Blød linje’ er aktiv.<br />

Bemærk! Når der anvendes ’blød’ og ’ikke blød’ linje i både indtastning og rapport kan det give<br />

mærkelige resultater. Specielt hvis notattekster skal stå i en ramme eller de efterfølges af andre felter<br />

på rapportlinjen.<br />

Nedenstående matrix forklarer nogle af de mærkværdigheder der opstår.<br />

274<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Anvendelse af ’Blød’ og ’Ikke blød’ linje<br />

Indtastning<br />

i<br />

form<br />

Felt i<br />

rapport<br />

Resultat<br />

Blød Blød Hver linje udskrives på tværs af siden, ud over feltlængden i rapporten.<br />

* Blød Ikke<br />

blød<br />

Ikke<br />

blød<br />

Ikke<br />

blød<br />

Er der en tegnet en ramme, brydes denne, og eventuelle felter bag<br />

tekstfeltet skrives med ud.<br />

Den fulde tekst skrives i en ubrudt kasse, hvis feltet er oprettet i en<br />

sådan.<br />

Eventuelle felter oprettet bag kassen, gentages uden for denne på hver<br />

linje med tekst.<br />

Blød Hver linje skrives som blød linje i rapporten over hele linjen og ned på<br />

næste linje.<br />

Er der en kasse rundt om tekstfeltet, afbrydes denne og evt.<br />

efterfølgende felter skrives midt i teksten.<br />

Blød Hver linje der er indtastet afkortes i rapporten til feltets længde.<br />

En eventuel kasse forbliver intakt og evt. efterfølgende felter kommer<br />

ud for hver tekstlinje.<br />

* Dette er bedste resultat. Der bør dog ikke udskrives andre felter på samme linje.<br />

Søgning efter notater i Rapport-XAL<br />

Kartoteket Notes<br />

Alle notater i C5 ligger i ét fælles kartotek med navnet Notes.<br />

Noteskartotekets sammenhæng med andre kartoteker<br />

CustTable Notes<br />

RowNumber RowNumber<br />

LastChanged LastChanged<br />

Account NotesRecId<br />

Name NotesFileId<br />

Osv. LineNumber<br />

RecId<br />

FileId<br />

Oprettes der et notat på skærmbilledet CustTable, gemmes notatet i kartoteket Notes i feltet ’Tekst’.<br />

Txt<br />

275<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Sammen med teksten gemmes også felterne RecId og FileId. Felterne gemmes i de tilsvarende felter<br />

med navnene NotesRecId og NotesFileId.<br />

Ved hjælp af disse felter holdes styr på hvilke kartoteker, de forskellige notater tilhører.<br />

Denne viden anvendes, når notaterne udsøges med SEARCH løkken.<br />

Eksempel (søgeløkke)<br />

SEARCH CustTable<br />

OUTPUT CustTable<br />

SEARCH Notes<br />

WHERE Notes.NotesRecId == CustTable.RecId AND<br />

Notes.NotesFileId == CustTable.FileId<br />

OUTPUT Notes<br />

END<br />

END<br />

Body<br />

Body<br />

CustTable<br />

Notes<br />

I eksemplet hentes kun de notater, der tilhører de aktuelle debitorer, der gennemløbes i søgeløkken.<br />

Sætningen WHERE synkroniserer notaterne med debitorerne ved hjælp af felterne NotesRecId og<br />

NotesFileId.<br />

OUTPUT kommandoen sørger for, at fundne notater sendes til Rapport-definition og udskrives i feltet<br />

’Txt’.<br />

Da Body linjen er opsat som ’Blød linje’, udskrives alt tekst, der findes. Der er ingen linjer, der afkortes.<br />

Notaterne kan også findes i Rapport-QT.<br />

Søgning efter notater i Rapport-QT<br />

Notaterne kan også hentes i Rapport-QT.<br />

Account Name<br />

| Txt<br />

Eksemplet fra forrige afsnit om Rapport-XAL vises herunder udført i Rapport-QT.<br />

276<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Eksempel på Rapport QT med notater<br />

Kartotek Afgrænsning Fra Til Status<br />

CustTable Sortering..: Åben<br />

Filter.....: Åben<br />

Kørsler....: Kørsler<br />

Skjul<br />

Notes 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å, at relationen er udført korrekt.<br />

Korrekt opstilling af relation<br />

I Rapport QT opstilles relationerne i ’Relationsvinduet’ på underkartoteket, som i dette tilfælde er<br />

Notes.<br />

Relationsvindue til underkartoteket Notes<br />

Relater<br />

Output<br />

Tilføj<br />

CustTable Notes<br />

Felt Felt<br />

RecId 123456789012345<br />

FileId<br />

NotesRecId<br />

NotesFileId<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 Notes, idet dette kartotek relateres til debitorerne i CustTable<br />

efterhånden, 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 godt indsættes flere relaterede felter, som vist i eksemplet med felterne RecId og FileId. Begge<br />

felterne er nødvendige for at finde de rigtige notater.<br />

277<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Stregen der trækkes mellem to kartoteker opstår så snart to kartoteker er indsat i ralationstabellen,<br />

også uden at der er indsat relationsfelter.<br />

HUSK! Stregen er ikke et bevis på, at relationen er sat korrekt op, kun at der er en relation.<br />

Hvis feltrelationerne ikke indsættes, bliver resultatet, at der for hver post i hovedkartoteket udskrives<br />

samtlige notater i Notes kartoteket.<br />

Søgning med macroer<br />

I stedet for at for at indsætte Notes kartoteket med relationer i Rapport-XAL eller Rapport-QT, kan der<br />

anvendes en macro, der kan hente de rigtige notater.<br />

#OutputNotes()<br />

Macroen #OutputNotes() anvendes til at hente notater til et givent kartotek, uden at kartoteket<br />

indsættes som søgeløkke i Rapport XAL eller som søge kartotek i Rapport QT.<br />

Syntaks<br />

#OutputNotes()<br />

Det fremgår af syntaksen, at macroen i de efterfølgende paranteser skal have angivelse af navnet på<br />

det kartotek, notaterne tilhører.<br />

Macroen befinder sig i macrobiblioteket ’REPORTS’, hvorfor dette bibliotek skal loades inden macroen<br />

kan tages i anvendelse i en rapport.<br />

Rapport XAL<br />

I Rapport XAL skal biblioteket loades som det første i XAL koden, som vist i følgende eksempel.<br />

Eksempel (macro)<br />

#MacroLoad(REPORTS)<br />

SEARCH CustTable<br />

OUTPUT CustTable<br />

#OutputNotes(CustTable)<br />

END<br />

Body<br />

Body<br />

CustTable<br />

Notes<br />

Bemærk at der ud over SEARCH løkken på CustTable, kun er indsat de to macroer.<br />

Det er således nemmere at udskrive notater ved hjælp af macroen, hvorfor dette anbefales i det<br />

daglige.<br />

Rapport QT<br />

Account Name<br />

| Txt<br />

Macroerne kan også anvendes i Rapport QT ved, at indsætte dem i de rigtige triggere i QT’en.<br />

Desuden er Notes kartoteket overflødigt i afgrænsningsvinduet.<br />

278<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Trigger til #MacroLoad(REPORTS)<br />

Macroen #MacroLoad(REPORTS) skal ALTID indsættes i triggeren Init i ’Opsætningsvinduet’. Det er<br />

denne trigger, der aktiveres ført, når rapporten startes.<br />

Triggere til #OutputNotes()<br />

Macroen #OutputNotes() kan indsættes i forskellige triggere afhængigt af hvornår, notaterne skal<br />

udskrives i forhold til hovedkartoteket.<br />

Typisk anvendes en af triggerne i feltet ’Kørsler’ i kartoteket i ’Afgrænsningsvinduet’.<br />

Triggere i Afgrænsningsvinduet<br />

Trigger Tidspunkt for aktivering<br />

Pre-search Inden søgeløkken startes<br />

Pre-body Når der er taget fat i posten<br />

Pre-output Inden posten udskrives<br />

Post-output Efter posten er udskrevet<br />

Pre-join Inden adgang til underkartotek<br />

Post-join Efter tilbagevenden fra underkartotek<br />

Index-break Når der brydes på index iflg. sortering<br />

Post-body Lige inden posten afsluttes<br />

Post-search Efter at søgeløkken er afsluttet<br />

Ved valg af trigger til #OutputNotes() skal der tages hensyn til, om notaterne skal udskrives før eller<br />

efter posten fra hovedkartoteket er udskrevet, og om det skal være før eller efter adgang til et evt.<br />

underkartotek.<br />

Hvis notaterne skal udskrives efter, posten i hovedkartoteket er udskrevet, anvendes typisk triggeren<br />

Post-output eller Post-body.<br />

279<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgaver: Notater i rapporter<br />

Opgave 1: Udlånsordre med notater<br />

Formål med opgaven<br />

At opbygge en udlånsordre med forskellige typer af felter, samt anvendelse af notater i rapporten.<br />

Beskrivelse<br />

Der skal oprettes en ny rapport i form af en udlånsordre, som vist i eksemplet herunder.<br />

Eksempel<br />

Lises Bolsjefabrik A/S<br />

Sukkervej 45<br />

6300 Gråsten<br />

Tlf: 4564536<br />

UDLÅNSORDRE<br />

Central Kopiering Nummer....: 1000<br />

Postboks 35 UdlånsDato: 09/09-09<br />

Ny Østergade 172 ReturDato.: 30/09-09<br />

1101 København K Side......: 1<br />

Bemærkninger<br />

Alle varer skal afleveres i rengjort<br />

stand<br />

Varenummer Navn Serienummer Lejebeløb<br />

10-GC-1 Grafikkort ET-4000 W32P VL 123-ab 56,32<br />

10-GC-1 Grafikkort ET-4000 W32P VL 123-ab1 56,32<br />

10-HD-1 Harddisk AT Conner 420 MB 12-34-56 89,00<br />

10-HD-4 Harddisk SCSI IBM-OEM 2GB 12-34-100 720,00<br />

Se forløbet næste side:<br />

280<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


1 Opret en ny rapport.<br />

2 Datasøgning i Rapport-QT<br />

Forløb √<br />

Datasøgning skal udføres på to kartoteker og i viste rækkefølge:<br />

UDLUdlånsKart<br />

UDLUdlånsPost<br />

Kartotekerne skal synkroniseres vha. feltet UdlånsNummer der findes begge steder.<br />

På kartoteket UDLUdlånsKart skal der afgrænses på feltet UdlånsNummer.<br />

Overskriften til QT’en skal være ’Følgesedler til udlånsordrer’ og der skal vises<br />

kartoteker.<br />

INIT (trigger)<br />

Biblioteket REPORTS skal loades<br />

Der skal oprettes en variabel af typen enum ’NoYes’ til at holde styr på om der skal<br />

udskrives notater. (Anvendes i en promptboks i prompt triggeren)<br />

PROMPT (trigger)<br />

Opret en promptboks med teksten ’Skal der udskrives notater’ og anvend den<br />

oprettede variabel til at modtage værdien.<br />

Pre-Body (trigger)<br />

Alle informationer om eget firmanavn, adresse og så videre, skal hentes fra<br />

firmakartoteket. Introducér og videresend med OUTPUT kartoteket CompanyInfo.<br />

Debitors adresseinformationer skal hentes fra debitorkartoteket. Introducer og<br />

videresend med OUTPUT kartoteket CustTable.<br />

Post-Output (trigger)<br />

Notaterne skal udskrives efter bodylinjer på UDLUdlånsKart.<br />

Hent notaterne med macroen #OutputNotes(UDLUdlånsKart). Stregerne over og<br />

under notatet udskrives med control macroer (med tilhørende Control linjer).<br />

Post-Body (trigger)<br />

Der skal skiftes side hver gang en ordre er færdig udskrevet.<br />

Macroen #Rep_NewPage skifter side.<br />

281<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


3 Rapport-definition<br />

Forløb (fortsat) √<br />

Rapport-definition består af forskellige linjetyper med forskellige felter.<br />

Page Header<br />

I page header linjerne oprettes hovedet af rapporten bestående af eget navn og<br />

adresse, debitors navn og adresse samt ordre informationer.<br />

Egne informationer hentes fra kartoteket CompanyInfo og består af felterne:<br />

Name, Adress1, Adress2, ZipCity og Phone.<br />

Debitors informationer hentes fra kartoteket CustTable og består af felterne:<br />

Name, Adress1, Adress2 og ZipCity.<br />

Ordrens informationer hentes fra UDLUdlånsKart og består af felterne:<br />

UdlånsNummer, UdlånsDato og ReturDato.<br />

Desuden udskrives systemvariablen &Page med sidenummer.<br />

De forskellige ledetekster indsættes som fritekst.<br />

Body linjer<br />

Der oprettes én bodylinje til kartoteket Notes med feltet:<br />

Txt<br />

Der oprettes én bodylinje til kartoteket UDLUdlånsPost med felterne:<br />

VareNummer, direkte opslag efter varenavn i InvenTable, SerialNumber og<br />

UdlejningsVærdi.<br />

Group Header linjer<br />

Overskrifterne til varelinjerne og deres understregninger er fritekst indsat i Group<br />

Headerne til kartoteket UDLUdlånsPost.<br />

Control linjer<br />

Der anvendes Control linjer til rammen over og under Notesfeltet.<br />

4 Linje-XAL<br />

Linje-XAL anvendes til Body linjen med Notatet og de to control linjer der<br />

anvendes til kassen rundt om notatet.<br />

Der skal indsættes kode så notat med ramme kun udskrives når der er svaret JA i<br />

promptboksen med teksten ’Skal der udskrives notater’.<br />

5 Godkend rapporten<br />

Afprøv rapporten<br />

282<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


31. Tekstlag i rapporter<br />

Formål<br />

Formålet med denne lektion er at lære deltagerne at anvende tekstlag i rapporter, og at forstå<br />

sammenhængen mellem tekstlagene og felter med sprogkoder i kartoteker.<br />

Efter lektionen skal kursisterne kunne:<br />

Opsætte tekstlag i layoutområdet<br />

Tilknytte tekstlag i rapportområdet til felter med sprog i kartoteker.<br />

Generelt<br />

Tekstlag i rapporter er fritekster, der kan skrives på forskellige sprog.<br />

Tekstlagene kan indsættes direkte i layoutområdet i rapporter, og udskrives på printeren.<br />

Tekstlagene kan vælges ved udskrivningen eller knyttes til sprogkoden i kartoteker.<br />

Tekstlag i layoutområdet<br />

Tekstlag i layoutområdet anvendes til tekster i forskellige sprog i samme rapport.<br />

Teksterne skrives faktisk i hvert sit lag i rapporten. Lagene svarer til de sprog, der findes i fastteksttypen<br />

’Language_’.<br />

I den danske version af C5 er de tre første sprog:<br />

Dansk<br />

Engelsk<br />

Tysk<br />

Tekstlagene kan faktisk vælges selv om rapportdefinitionen er helt tom, men selvfølgelig også når der<br />

er felter og tekster i den.<br />

Eksempel<br />

ALT+Z<br />

Vælg tekstlag<br />

*Dansk<br />

Engelsk<br />

Tysk<br />

Når der vælges tekstlag fremkommer ovenstående boks med de tekster, der er oprettet i brugerens C5<br />

installation. Der er en * ud for hvert tekstlag hvori, der er indtastet tekster.<br />

283<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Kun fritekster<br />

Der kan oprettes forskellige former for tekster i layoutområdet, ’Fritekster’ der bare skrives og evt.<br />

formatteres, ledetekst/overskrift felter der oprettes med ALT+F2 og felter oprettet med F2 hvori<br />

feltudtryk er udfyldt med tekst i citationstegn.<br />

Tekstlagene gælder kun for friteksterne.<br />

I mange tilfælde anvendes fritekster til søjleoverskrifter og ledetekster som i næste eksempel.<br />

Eksempel (dansk tekstlag)<br />

PgHd<br />

Body<br />

CustTable<br />

Eksempel (engelsk tekstlag)<br />

PgHd<br />

Body<br />

Kontonummer Navn<br />

Account Name<br />

Kontonummer Navn<br />

CustTable Account Name<br />

I ovenstående eksempler er der først det danske tekstlag og derefter det engelske.<br />

I det nederste eksempel fylder det engelske ord for kontonummer mere end det danske. Overskrifterne<br />

forrykkes derfor i forhold til felterne.<br />

Flytning / kopiering / indsætning af felter<br />

Det er kun i det danske tekstlag, at det kan lade sig gøre, at skubbe til felter med SPACE og<br />

BACKSPACE, samt når der evt. skrives tekst mellem to felter. Forsøges dette i et af de andre tekstlag<br />

fremkommer infoboksen:<br />

Ikke plads til tekst<br />

OK<br />

Derimod kan der i alle tekstlag flyttes CTRL+F5, kopieres SH+F5 og indsættes F2 felter.<br />

Bemærk! Flyttes, kopieres og indsættes der felter i ét tekstlag, berører det også alle de andre lag.<br />

284<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Tekstlagene anvendes således kun til de fritekster, der indtaster i hvert enkelt lag. Friteksterne er de<br />

eneste, der kan være forskellige fra lag til lag, medens felter og ledetekstfelter er ens.<br />

Felter og ledetekstfelter bør faktisk kun flyttes, kopieres og indsættes i det danske tekstlag.<br />

Afvikling af rapporter med tekstlag<br />

Når der skal udskrives en rapport med tekstlag, fremkommer der først en boks, hvori det vælges hvilket<br />

tekstlag, der skal udskrives på rapporten.<br />

Automatisk valg af tekstlag<br />

Automatisk valg af tekstlag anvendes f.eks. når, der udskrives rapporter, hvor tekstlaget er afhængigt af<br />

en sprogkode i et andet kartotek.<br />

Startes der f.eks. en rapport med tekstlag fra menuen i debitorskærmbilledet, kan det ønskes, at<br />

teksterne udskrives i debitorens sprog. Det kunne f.eks. være et eksternt papir, der sendes til debitoren<br />

i dennes sprog.<br />

Macroen #Rep_Language()<br />

Macroen #Rep_Language bestemmer tekstlaget, der udskrives i rapporten.<br />

Syntaks<br />

#Rep_Language()<br />

Som det fremgår af syntaksen udfyldes paranteserne med en parameter i form af en sprogkode.<br />

Sprogkoden er et heltal, der svarer til nummeret i fastteksttypen Sprog.<br />

Macroen er en kopi af control kommandoen Control ’LANGUAGE’.<br />

Macroen indsættes et passende sted i Rapport XAL eller i en trigger i Rapport QT, hvad der er anvendt i<br />

den aktuelle rapport.<br />

Bemærk! Anvendes macroen #Rep_Language i en rapport, kræver det at rapporten fremover kaldes<br />

fra en menu eller et andet sted, hvor processen ’Rapport-afvikling’ kan startes. Desuden skal en af<br />

argumenterne til menupunktet eller processen være ’LANGUAGE=*’.<br />

Rapporten kan altså ikke længere afvikles direkte uden, at det kan give problemer med udskrivningen<br />

af friteksterne i tekstlagene. De kan ikke styres korrekt.<br />

Macroen #MacroLoad()<br />

Macroen #Rep_Language() befinder sig i macrobiblioteket REPORTS, hvorfor dette bibliotek først skal<br />

loades ind i toppen af Rapport XAL eller i Init triggeren i Rapport QT, afhængigt af hvad der anvendes i<br />

den aktuelle rapport.<br />

Syntaks<br />

#MacroLoad(REPORTS)<br />

285<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Eksempel (Rapporten ’Sælger’ (SalesRep))<br />

#MacroLoad(REPORTS)<br />

SEARCH CustTable<br />

#Rep_Language(SprogKode)<br />

OUTPUT CustTable<br />

#Rep_NewPage<br />

END<br />

PgHd<br />

PgHd<br />

Body<br />

Body<br />

Body<br />

Body<br />

CustTable<br />

CustTable<br />

CustTable<br />

CustTable<br />

Sælger til kunde<br />

Kontonummer...: Account<br />

Navn..........: Name<br />

Telefon.......: Phone<br />

Sælger........: SalesRep<br />

I Rapport XAL anvendes macroen #Rep_Language, så tekstlaget kan hentes automatisk. Sprogkoden i<br />

paranteserne er feltet sprogkode fra CustTable. Feltet indeholder debitorens sprog, der så anvendes<br />

ved udskrivningen.<br />

Macroen #Rep_NewPage udfører et tvunget sideskift. I dette eksempel er det nødvendigt med et<br />

tvunget sideskift, da PageHeaderne ellers udskrives i den første kundes sprog på hver side.<br />

Engelsk tekstlag<br />

PgHd<br />

PgHd<br />

Body<br />

Body<br />

Body<br />

Body<br />

Tysk tekstlag<br />

PgHd<br />

PgHd<br />

Body<br />

Body<br />

Body<br />

Body<br />

CustTable<br />

CustTable<br />

CustTable<br />

CustTable<br />

CustTable<br />

CustTable<br />

CustTable<br />

CustTable<br />

Salesman for customer<br />

Account number: Account<br />

Name..........: Name<br />

Phone.........: Phone<br />

Salesman......: SalesRep<br />

Verkäufer für kunde<br />

Kontonummer...: Account<br />

Name..........: Name<br />

Telefon.......: Phone<br />

Verkäufer.....: SalesRep<br />

Eksempel på menupunkt i f.eks. formen CustTable<br />

Proces................: Rapport-afvikling<br />

Parametre til proces..: Report=SalesRep Language=*<br />

Menupunktets navn.....: Sælger<br />

Bogstav til hurtigvalg: S<br />

Hjælpetekst...........: Liste med sælger til debitor i sprog<br />

Rapporten kan også udføres fra Rapport QT. Da skal #Macroload(REPORTS) indsættes i Init triggeren,<br />

og #Rep_Language() kan f.eks. indsættes i Pre-output.<br />

286<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgaver: Tekstlag i rapporter<br />

Opgave 1: Udlånsordre med tekstlag<br />

Formål med opgaven<br />

At indsætte engelsk og tysk tekstlag på en rapport.<br />

Beskrivelse<br />

Der skal indsættes tekstlag på udlånsordren på engelsk og tysk, som vist i eksemplerne herunder.<br />

Eksempel dansk tekstlag<br />

Lises Bolsjefabrik A/S<br />

Sukkervej 45<br />

6300 Gråsten<br />

Tlf: 4564536<br />

UDLÅNSORDRE<br />

Central Kopiering Nummer....: 1000<br />

Postboks 35 UdlånsDato: 09/09-09<br />

Ny Østergade 172 ReturDato.: 30/09-09<br />

1101 København K Side......: 1<br />

Bemærkninger<br />

Alle varer skal afleveres i rengjort<br />

stand<br />

Varenummer Navn Serienummer Lejebeløb<br />

10-GC-1 Grafikkort ET-4000 W32P VL 123-ab 56,32<br />

10-GC-1 Grafikkort ET-4000 W32P VL 123-ab1 56,32<br />

10-HD-1 Harddisk AT Conner 420 MB 12-34-56 89,00<br />

10-HD-4 Harddisk SCSI IBM-OEM 2GB 12-34-100 720,00<br />

287<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Eksempel engelsk tekstlag<br />

Lises Bolsjefabrik A/S<br />

Sukkervej 45<br />

6300 Gråsten<br />

Tlf: 4564536<br />

LOAN ORDER<br />

Central Kopiering Loan number: 1000<br />

Postboks 35 Loan Date..: 09/09-09<br />

Ny Østergade 172 Return Date: 30/09-09<br />

1101 København K Page.......: 1<br />

Remarks<br />

Alle varer skal afleveres i rengjort<br />

stand<br />

Serial Loan<br />

Item Name Number Amount<br />

10-GC-1 Grafikkort ET-4000 W32P VL 123-ab 56,32<br />

10-GC-1 Grafikkort ET-4000 W32P VL 123-ab1 56,32<br />

10-HD-1 Harddisk AT Conner 420 MB 12-34-56 89,00<br />

10-HD-4 Harddisk SCSI IBM-OEM 2GB 12-34-100 720,00<br />

288<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Eksempel tysk tekstlag<br />

Lises Bolsjefabrik A/S<br />

Sukkervej 45<br />

6300 Gråsten<br />

Tlf: 4564536<br />

LEIHAUFTRAG<br />

Central Kopiering Leihnummer: 1000<br />

Postboks 35 Leihdatum.: 09/09-09<br />

Ny Østergade 172 Rückdatum.: 30/09-09<br />

1101 København K Seite.....: 1<br />

Bemerkung<br />

Alle varer skal afleveres i rengjort<br />

stand<br />

Waren Serien<br />

nummer Name nummer Leihbetrag<br />

10-GC-1 Grafikkort ET-4000 W32P VL 123-ab 56,32<br />

10-GC-1 Grafikkort ET-4000 W32P VL 123-ab1 56,32<br />

10-HD-1 Harddisk AT Conner 420 MB 12-34-56 89,00<br />

10-HD-4 Harddisk SCSI IBM-OEM 2GB 12-34-100 720,00<br />

1 Der skal fortsættes i rapporten fra forrige opgave<br />

2 Tekstlag<br />

Forløb √<br />

Der skal indsættes tekster i både det engelske og tyske sproglag<br />

Teksterne fremgår af eksemplerne herover.<br />

3 Godkend rapporten<br />

Afslut, godkend og afprøv rapporten i de forskellige tekstlag, idet du vælger sprog<br />

ved start af rapporten, når du præsenteres for boksen med tekstlagene.<br />

289<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgave 2: Forberede automatisk tekstlag<br />

Formål med opgaven<br />

At forberede rapporten til automatisk valg af tekstlag ved kald fra f.eks. lokalmenuer.<br />

Beskrivelse<br />

Macroen #Rep_Language() skal indsættes i en af triggerne i rapporten, så der automatisk vælges<br />

tekstlag under udskrivningen.<br />

1 Der skal fortsættes i rapporten fra forrige opgave<br />

2 Macroen #Rep_Language()<br />

Forløb √<br />

Macroen indsættes i triggeren Pre-Output, så den aktiveres inden, der skrives på<br />

papiret.<br />

Debitorens sproglag indsættes i paranteserne med et direkte opslag i<br />

debitorkartoteket (CustTable). Feltet DebitorKonto i kartoteket UDLUdlånsKart<br />

anvendes i opslaget.<br />

3 Godkend rapporten<br />

Afslut, godkend og afprøv rapporten.<br />

Læg mærke til, at det kun er de ordrer med et tekstlag, der svarer til det du vælger,<br />

der vises med tekstlag. De andre vises ikke med tekstlag.<br />

Tekstlaget er ikke loadet ind rapporten. Dette kan kun udføres i kaldet af rapporten<br />

fra f.eks. en lokalmenu, idet menukaldet tilføjes ’LANGUAGE=*’ i parametre til<br />

proces.<br />

4 Opret lokalmenu<br />

Opret en lokalmenu på formen UDLUdlånsKart med ’LANGUAGE=*’<br />

I Parametre til proces skal der kun stå Report=rapportens navn og LANGUAGE=*<br />

5 Godkend og afprøv<br />

Godkend rapporten og afprøv igen. Denne gang kaldt fra det nyoprettede<br />

menupunkt.<br />

Vælger du samtlige ordrer udskrives de med det korrekte tekstlag.<br />

6 Afprøv igen<br />

Afprøv igen rapporten med kald direkte fra REP/Kør i udviklingsmenuen. Nu er det<br />

kun rapporter der svarer til det tekstlag der vælges, som udskrives med tekstlag.<br />

290<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


32. QT control macroer<br />

Mål med lektionen<br />

Formålet med denne lektion er, at give deltagerne kendskab til de specielle QT control macroer, der<br />

findes.<br />

Lektionen er kun tænkt som et tillæg med en liste over control macroer. Der er ingen ekstra<br />

forklaringer eller eksempler. Ønskes dette, henvises der til manualen ’Teknisk Reference’ eller<br />

hjælpeteksten i hjælpefilerne.<br />

Efter lektionen skal kursisterne kende til:<br />

QT control macroer<br />

Generelt<br />

QT control macroer er en erstatning for de QT control kommandoer, der findes til søge værktøjet QT.<br />

Macroerne er opbygget ved hjælp af kommandoerne og udfører således de samme funktioner.<br />

Både control macroer og control kommandoer kan anvendes i QT’er, men oftest anvendes kun<br />

macroerne.<br />

QT control macroer<br />

Fordele ved control macroer<br />

En af fordelene ved at anvende macroerne er, at disse syntaks checkes. Dette udføres ikke ved<br />

kommandoerne.<br />

Der er også parameter kontrol.<br />

QT control macroerne findes i macro biblioteket QUERY, der altid skal loades, inden macroerne kan<br />

anvendes.<br />

Dokumentation<br />

Når der skal findes dokumentation på macroerne, skal der ses på navnet, hvorefter den tilsvarende<br />

control kommando findes i manualen eller i hjælpe filen.<br />

Control macroen #QT_Fill tilsvarer kommandoen Control ‘QFill’. Alle macroerne starter med #QT_<br />

efterfulgt af navnet på kommandoen.<br />

Parametrene til macroerne er de samme som til kommandoerne. Der er dog forskel ved angivelsen,<br />

idet de i kommandoer adskilles med mellemrum og i macroer adskilles med komma.<br />

291<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Skema med macroer<br />

QT control macroer<br />

Navn Funktion Parametre<br />

#QT_Fill<br />

#QT_Clear<br />

#QT_Fill(,<br />

,<br />

)<br />

#QT_Clear(,<br />

,<br />

)<br />

Udfylder i QT’en med<br />

og <br />

Clearer eller tømmer i<br />

QT’en, i felterne og<br />

<br />

#QT_Title #QT_Title() Indsætter ny titel på QT boksen<br />

“QT_Skip #QT_Skip() Ingen parametre<br />

Skjuler QT boksen for brugeren<br />

#QT_Break #QT_Break() Ingen parametre<br />

Afbryder kørslen med det samme<br />

#QT_Execute #QT_Execute(kartotek) Igangsætter QT’en fra angivne<br />

kartotek.<br />

Fungerer som en slags subrutine.<br />

Kan f.eks. igangsættes inden den<br />

virkelige QT startes.<br />

#QueryError #QueryError() Ingen parametre<br />

Anvendt til defaultværdier i QT<br />

QT control macroerne anvendes bl.a. til indsættelse af defaultværdier i QT’er.<br />

Anvendes i triggeren Error. Viser<br />

fejl i control kommandoerne.<br />

Ved i Init triggeren at tildele værdier til nogle af kartoteksfelterne med SET kommandoen, kan disse<br />

felters værdier gøres til defaultværdier i QT’en. Dette udføres vha. macroen #QT_Fill. Efterfølgende<br />

vises forskellige eksempler på indsættelse af defaultværdier i QT’er.<br />

Eksemplerne kan f.eks. indsættes i rapporten ’DebitorStamData’.<br />

Bemærk! #QT_Fill kun kan anvendes på felter, der er synlige i QT’en. (Felter indsættes med F2).<br />

Eksempel 1<br />

#MacroLoad(QUERY)<br />

SET CustTable.Group = ”UDL”<br />

SET CustTable.Country = ”England”<br />

#QT_Fill(CustTable)<br />

I eksempel 1 anvendes kun parameteren CustTable til #QT_Fill. Dette medfører at felterne Group og<br />

Country udfyldes i QT’en, hvis felterne er synlige.<br />

292<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Eksempel 2<br />

#MacroLoad(QUERY)<br />

SET CustTable.Group = ”UDL”<br />

SET CustTable.Country = ”England”<br />

SET CustTable.SalesRep = ”AH”<br />

SET CustTable.BalanceMax = 100000<br />

#QT_Fill(CustTable,Group)<br />

#QT_Fill(CustTable,SalesRep)<br />

I eksempel 2 anvendes felterne Group og SalesRep også som parametre i #QT_Fill. Dette medfører at<br />

kun disse to felter udfyldes i QT’en, selv om der er andre felter, der også har fået tildelt værdier med<br />

SET kommandoen.<br />

Eksempel 3<br />

#MacroLoad(QUERY)<br />

SET CustTable.BalanceMax = 100000<br />

#QT_Fill(CustTable,BalanceMax,”From”)<br />

SET CustTable.BalanceMax = 250000<br />

#QT_Fill(CustTable,BalanceMax,”TO”)<br />

I eksempel 3 tildeles feltet BalanceMax værdien 100000, hvorefter #QT_Fill anvender feltet for at<br />

indsætte værdien i den tilhørende QT. Da der yderligere er tilføjet parameteren ’From’, er det kun ’Fra’<br />

feltet, der udfyldes med værdien.<br />

Efterfølgende tildeles en ny værdi til feltet BalanceMax, nemlig værdien 250000, og #QT_Fill gentages<br />

for at indsætte denne værdi i QT’en. Denne gang i ’Til’ siden. Dette udføres med parameteren ’To’.<br />

Eksempel 4<br />

#MacroLoad(QUERY)<br />

SET CustTable.Group = ”UDL”<br />

SET CustTable.Country = ”England”<br />

SET CustTable.SalesRep = ”AH”<br />

SET CustTable.BalanceMax = 100000<br />

#QT_Clear(CustTable)<br />

#QT_Fill(CustTable,Group)<br />

#QT_Fill(CustTable,SalesRep)<br />

#QT_Fill(CustTable,BalanceMax,”From”)<br />

SET CustTable.BalanceMax = 250000<br />

#QT_Fill(CustTable,BalanceMax,”TO”)<br />

I eksempel 4 er de forskellige muligheder kombineret, og #QT_Clear er indsat for at tømme QT’en for<br />

værdier inden defaultværdierne indsættes.<br />

293<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


#QT_Clear anvendes til at sørge for at alle felter i QT’en tømmes inden brugen. Brugerindtastede<br />

værdier fra tidligere anvendelse af QT’en fjernes også.<br />

294<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgaver: QT Control macroer<br />

Opgave 1: Defaultværdier i QT<br />

Formål med opgaven<br />

At indsætte defaultværdier i en QT.<br />

Beskrivelse<br />

QT’en i rapporten fra forrige opgave skal opsættes, så der automatisk indsættes defaultværdier i feltet<br />

UdlånsDato.<br />

Desuden skal der automatisk indsættes en anden overskrift når rapporten afvikles.<br />

1 Der skal fortsættes i rapporten fra forrige opgave.<br />

Forløb √<br />

2 I init triggeren skal biblioteket QUERY macroloades idet der i dette bibliotek findes<br />

QT macroer der anvendes til automatisk udfyldning af QT’en.<br />

3 Feltet UdlånsDato skal tildeles dags dato med funktionen der kan hente denne.<br />

4 Feltet Udlånsdato skal automatisk udfyldes i QT’en<br />

Find selv den rette QT control macro i lektionen.<br />

5 Titlen på QT boksen skal ændres til: Udlånsordrer pr. dags dato.<br />

NB: Titlen skal kun ændres under afviklingen. Du skal altså ikke røre ved den<br />

oprindelige titel.<br />

Find selv den rette QT control macro, så teksten kun ændres under afviklingen.<br />

6 Godkend rapporten<br />

Afslut, godkend og afprøv rapporten.<br />

295<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgave 2: Menupunkt til rapport<br />

Formål med opgaven<br />

At kalde rapporten i forrige opgave fra en menu så sprogene vises korrekt.<br />

Beskrivelse<br />

Der skal oprettes et menupunkt i gittermenuen under Debitor/Udskrifter i undermenuen med<br />

overskriften Debitor.<br />

Forløb √<br />

1 Der skal oprettes et menupunkt i Debitor/Udskrifter/Debitor nederst i menuen.<br />

2 Kald menupunktet for ’Dagens udlån’.<br />

3 Find selv den rigtige proces.<br />

4 Find selv den rigtige parameter så alle sproglagene bliver loadet korrekt inden<br />

rapporten udskrives.<br />

5 Godkend menupunktet<br />

Afslut, godkend og afprøv rapporten via menupunktet.<br />

296<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


33. Rapport synkronisering<br />

Mål med lektionen<br />

Formålet med denne lektion er at lære deltagerne at synkronisere rapporter med forms, således at<br />

indeholdet i en rapport er afhængigt af indholdet i en form.<br />

Det vises desuden, hvordan billedet med udskriftmuligheder kan overspringes ved udskrivning af<br />

rapporter<br />

Efter lektionen skal kursisterne kunne:<br />

Synkronisere rapporter med forms<br />

Overspringe billedet udskriftsmuligheder.<br />

Generelt<br />

Rapport synkronisering anvendes, når en rapport udskrives direkte fra en form. Et eksempel på en<br />

sådan synkronisering kunne være en følgeseddel, der udskrives direkte fra et ordreskærmbilled, idet<br />

der kun udskrives en følgeseddel til den ordre der ses på skræmbilledet.<br />

Synkroniseringen består i, at den kaldte rapport sættes op, så indholdet stemmer overens med<br />

indholdet i den form der kaldes fra.<br />

Synkronisering<br />

Betydning<br />

Synkronisering mellem forms og rapporter udføres som hovedregel ved hjælp af kald fra lokalmenuen i<br />

en form og opsætning af selve synkroniseringen i den rapport der kaldes.<br />

I illustrationen herunder er ’Ordrekartotek’ hovedform til rapporten Følgeseddel.<br />

Kald af rapport fra lokalmenu i form<br />

Ordrekartotek<br />

Lokal<br />

menu<br />

Følgeseddel<br />

297<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Det er i selve rapporten, at synkroniseringen finder sted. Derfor er der i rapporten brug for<br />

informationer fra formen.<br />

Det er vigtigt at forstå, at et kald af en rapport via en lokal menu i en form ikke alene er nok til, at<br />

overføre de rigtige informationer til den kaldte rapport. Informationerne skal hentes i en buffer, som<br />

vist i næste afsnit.<br />

Buffer<br />

Når der foretages et kald af en rapport via en lokalmenu, gemmes skærmens aktuelle post og data i en<br />

buffer.<br />

Det betyder, at der til enhver tid kan hentes information i bufferen om den post eller record, der blev<br />

kaldt fra.<br />

Bufferen indeholder den aktuelle record<br />

Ordrekartotek<br />

Lokal<br />

menu<br />

I rapporten er det vigtigt at vide, hvilken post der kaldes fra, så den rigtige postering kan findes frem.<br />

Dette kan gøres ved at åbne bufferen med kommandoen EXTERN.<br />

EXTERN med RENAME<br />

Buffer<br />

Aktuel<br />

record<br />

Hovedform Rapport<br />

Følgeseddel<br />

Information om<br />

aktuel record<br />

(ordre) hentes i<br />

bufferen<br />

Kommandoen EXTERN åbner for en buffer med informationer om den record, der kaldes fra.<br />

298<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Åbning af buffer med EXTERN<br />

Hvis bufferen i rapporten har samme navn, som bufferen i formen der kaldes fra, kan kommandoen<br />

RENAME anvendes til at give formens buffer et andet midlertidigt navn, så der kan kendes forskel på<br />

hvilken buffer, der refereres til.<br />

Syntaksen for EXTERN med RENAME er som følger, idet kommandoen efterfølges af bufferens dvs.<br />

kartotekets navn.<br />

Syntaks<br />

EXTERN RENAME <br />

Hvis der f.eks. fra formen SalesTable skal foretages et kald af rapporten Følgeseddel, og følgeseddelen<br />

har udgangspunkt i samme kartotek som formen, vil bufferen til formen have samme navn som<br />

kartoteket i rapporten. Derfor er det nødvendigt at anvende RENAME.<br />

I følgesedlen kan der f.eks. åbnes for bufferen til SalesTable for, at se hvilket ordrenummer der blev<br />

kaldt fra.<br />

Åbningen af bufferen skal da se ud som følger.<br />

Eksempel<br />

Ordrekartotek<br />

Lokal<br />

menu<br />

EXTERN SalesTable RENAME OK {Forkortelse for SalesTable}<br />

Når bufferen er åbnet, skal blokkens nøglefelter tildeles værdier fra den. Det udføres med<br />

kommandoen SET.<br />

Synkronisering i rapport QT<br />

Buffer<br />

OrdreKart<br />

Hovedform Rapport<br />

Synkronisering i rapport QT udføres i triggeren INIT, der er den første trigger, der aktiveres i en QT.<br />

I triggeren åbnes formens buffer med EXTERN og værdier fra den åbnede buffer tildeles med SET<br />

kommandoen til de tilsvarende felter i QT’ens buffer.<br />

Efterfølgende udfyldes felterne i QT’en med macroen #QT_Fill.<br />

EXTERN<br />

OrdreKart<br />

Bufferen åbnes med<br />

kommandoen EXTERN<br />

’buffernavn’<br />

Følgeseddel<br />

299<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Triggeren Init i rapport QT<br />

#MacroLoad(REPORTS)<br />

#MacroLoad(QUERY)<br />

EXTERN SalesTable RENAME OK {Forkortelse for SalesTable}<br />

SET SalesTable.Number = OK.Number<br />

#QT_Fill(SalesTable,Number)<br />

Synkronisering i rapport XAL<br />

Synkronisering i rapport XAL udføres ved at åbne bufferen inden SEARCH kommandoen. Inde i selve<br />

søgeløkken anvendes kommandoen WHERE derefter til sammenligning af kartoteksfelter med<br />

bufferfelter, så der kun udsøges poster der stemmer med posten i bufferen.<br />

Rapport XAL med SEARCH<br />

#MacroLoad(REPORTS)<br />

EXTERN SalesTable RENAME OK {Forkortelse for SalesTable}<br />

SEARCH SalesTable<br />

WHERE SalesTable.Number = OK.Number<br />

OUTPUT SalesTable<br />

END<br />

Synkroniseringen i rapport XAL kan også udføres i forbindelse med kommandoen INTRODUCE, som<br />

vist i eksemplet herunder.<br />

Rapport XAL med INTRODUCE<br />

#MacroLoad(REPORTS)<br />

EXTERN SalesTable RENAME OK {Forkortelse for SalesTable}<br />

INTRODUCE SalesTable[NumTransIdx==OK.Number]<br />

OUTPUT SalesTable<br />

I dette eksempel åbnes bufferen også med EXTERN. Værdien i feltet OK.Number anvendes derefter til<br />

opslag i indexet i INTRODUCE kommandoen, således at posten findes direkte.<br />

Uden udskriftsmuligheder i rapport<br />

Når der udskrives rapporter, fremkommer der altid et billede med udskrifts-muligheder. I billedet kan<br />

der angives bestemmelsessted for rapporten, og hvordan udskriften skal foregå.<br />

Felterne i billedet kan automatisk udfyldes med værdier, der overføres fra menukaldet, og billedet kan<br />

springes helt over, så brugeren ikke ser det, og derfor heller ikke kan udfylde felterne i det.<br />

Rapporter afvikles altid med processen Rapport-afvikling, der f.eks. kan startes fra en lokalmenu i en<br />

form.<br />

300<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Processen Rapport-afvikling<br />

Processen skal mindst have angive navnet på rapporten, der skal afvikles, men der kan også angives<br />

forskellige andre parametre, der f.eks. styrer om rapporten skal skrives til skærm eller printer.<br />

De forskellige parametre er beskrevet i Teknisk Reference under processen Rapport-afvikling.<br />

Efterfølgende gives dog eksempler på anvendelse af parameteren OUTPUT.<br />

OUTPUT<br />

Parameteren OUTPUT anvendes bl.a. til at udfylde felter i billedet udskriftsmuiligheder.<br />

Destination Betydning<br />

OUTPUT=SCREEN Udskrift til skærm<br />

OUTPUT=SPOOL Udskrift til spoolfil (navn angives i printeropsætning)<br />

OUTPUT=PRINTER Udskrift til valgt printer<br />

OUTPUT=ASC<strong>II</strong> Udskrift til ASC<strong>II</strong> fil (navn angives i dialogboks)<br />

Ud over disse fire destinationsmuligheder kan der f.eks. tilføjes følgende ekstra faciliteter:<br />

Parameterværdi Betydning<br />

MSGWND<br />

eller<br />

MSGWND-<br />

GETOPTS<br />

eller<br />

GETOPTS-<br />

ALLPAGES<br />

eller<br />

ALLPAGES-<br />

MesSaGe WiNDow<br />

Et statusvindue med side og linje der er ved at blive dannet.<br />

Afsluttes med – vises vinduet ikke.<br />

GET OPTionS<br />

Dialogboksen Udskriftsmuligheder fremkommer før udskrift,<br />

så brugeren selv kan vælge. Afsluttes med – vises<br />

dialogboksen ikke.<br />

Denne værdi kan kun anvendes efter OUTPUT=Screen, og<br />

bevirker at alle sider dannes inden rapporten vises på<br />

skærmen.<br />

Afsluttes med – dannes én side ad gangen.<br />

Som det fremgå af skemaet herover kan de forskellige muligheder slås til og fra ved at angive<br />

henholdsvis et – eller et + efter muligheden. Plusset kan undlades.<br />

Eksempler 1<br />

OUTPUT=Screen<br />

I dialogboksen med udskriftsmuligheder sættes feltet ”Skriv til” automatisk til ’Skærm’.<br />

Eksempler 2<br />

OUTPUT=Screen,msgwnd<br />

301<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


I dialogboksen med udskriftmuligheder sættes feltet ”Skriv til” automatisk til ’Skærm’, og et<br />

statusvindue åbnes.<br />

Eksempler 3<br />

OUTPUT=Printer,msgwnd,getopts-<br />

I dialogboksen med udskriftsmuligheder sættes feltet ”Skriv til” automatisk til ’Printer’, og et<br />

statusvindue åbnes. Desuden springes selve dialogboksen med udskriftsmuligeheder over så brugeren<br />

ikke kan ændre nogen af felterne.<br />

Eksempler 4<br />

OUTPUT=Screen,msgwnd,getopts-,allpages<br />

I dette eksempel skrives til skærmen, der vises et statusvindue, ’Udskriftsmuligheder’ springes over, og<br />

alle sider dannes inden rapporten vises på skærmen.<br />

302<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgaver: Rapport synkronisering<br />

Opgave 1: Synkronisering og udfyldning af QT<br />

Formål med opgaven<br />

At synkronisere en rapport med en form og udfylde felter i en QT automatisk, samt at sørge for at<br />

springe rapportudskrivningsboksen over.<br />

Beskrivelse<br />

Rapporten fra forrige opgave skal synkroniseres, så der altid kun udskrives ordre til den post, der<br />

aktuelt er åben. QT’en skal desuden automatisk udfyldes og overspringes. Boksen med<br />

printeropstillingen skal også springes over.<br />

Vælges der udskrivning af rapporten, skal den altså udskrives direkte uden nogen form for pauser,<br />

inden udskrivningen begynder.<br />

1 Fortsæt i rapporten fra forrige opgave.<br />

Forløb √<br />

2 I init triggeren åbnes bufferen til kartoteket UDLUdlånsKart. Bufferen RENAMES til<br />

’Buffer’.<br />

Kontrollér i en IF sætning om der er et løbenummer. Er der det, sættes rapportens<br />

(UDLUdlånsKart) UdlånsNummer=bufferens udlånsnummer.<br />

Med #QT_Fill udfyldes feltet UdlånsNummer og med #QT_Skip overspringes QT’en.<br />

IF sætningen skal også indeholde en ELSE, hvori linjerne fra forrige opgave<br />

indsættes, så rapporten stadig kan afvikles, fra det menupunkt du oprettede i<br />

forrige lektion.<br />

Det drejer sig om linjerne med udlånsdatoen og linjen med titlen på QT boksen.<br />

3 Lokal menu<br />

I formen til UDLUdlånsKart oprettes endnu et menupunkt med følgende indhold i<br />

parameter til proces:<br />

Report=rapportens navn LANGUAGE=* OUTPUT=Screen,Getopts-<br />

4 Godkend rapporten<br />

Afslut, godkend og afprøv rapporten.<br />

5 Hvad skete der med Notaterne<br />

Spørgsmålet i promptboksen kommer ikke frem mere. Det er fordi, prompt<br />

triggeren også springes over, når #QT_Skip aktiveres.<br />

Flyt indholdet i prompt triggeren over i start triggeren og du får spørgsmålet igen.<br />

303<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


34. Rapporter i Windows<br />

Mål med lektionen<br />

At deltagerne kan foretage nødvendige ændringer i DOS rapporter, så rapporterne også udskrives<br />

korrekt i Windows versionen af C5.<br />

Efter lektionen skal kursisterne kunne:<br />

Opsætte skrifttyper i printerdriverne Standard og Standard Windows<br />

Markere felter og tekst i rapporter og tildele nye skrifttyper<br />

Indsætte nye skrifttyper i Windows<br />

Sætte feltlængder på fritekster til anvendelse i Windows<br />

Anvende fed, kursiv osv.<br />

Generelt<br />

Rapporter oprettes og vedligeholdes altid i DOS udgaverne af C5.<br />

Når rapporterne udskrives i DOS anvendes som regel skrifttyper med fast spatiering.<br />

Udskrives de samme rapporter derimod i Windows, anvendes der automatisk skrifttyper med<br />

proportional spatiering.<br />

Dette bevirker, at overskrifter ikke altid kommer til at stå direkte over de tilhørende kolonner.<br />

Denne lektion behandler nogle af de problemer, der opstår, når rapporter skal kunne udskrives både i<br />

DOS og Windows.<br />

Planlægning af rapport layout<br />

Ved planlægningen af rapport layout er der tre hensyn at tage:<br />

Planlægningen udføres i DOS<br />

Rapporter kan udskrives i DOS<br />

Rapporter kan udskrives i Windows.<br />

Planlægning udføres i DOS<br />

Rapporter opbygges altid i DOS udgaven af C5.<br />

Deres udseende opsættes i layoutområdet i Rapport-definition, der er et DOS vindue, hvor alle tegn<br />

fylder lige meget. Der er plads til 60 tegn i selve layoutområdet, men der kan skrives ud over kanten i<br />

højre side.<br />

Alle felter og tekster opstilles i forhold til de kolonner, der ses i layoutområdet.<br />

Rapporter kan udskrives i DOS<br />

De fleste rapporter, der udskrives i DOS versionen, anvender skrifttyper, hvor alle bogstaverne fylder<br />

lige meget. Det siges, at skrifttypen har fast spatiering.<br />

Da skrifttyperne i layoutområdet også fylder lige meget, er det derfor nemt at planlægge rapporters<br />

udseende, når de skal udskrives i DOS, idet de bliver som planlagt i layout området.<br />

304<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Rapporter kan udskrives i Windows<br />

Det er sværere at planlægge rapporter, der skal udskrives i Windows, idet Windows for det meste<br />

anvender proportional spatiering under udskriften. Bogstaverne fylder således ikke det samme i<br />

rapporten som i definitionsvinduet.<br />

Rapporter, der skal udskrives i Windows, kræver derfor mere aftestning, da det endelige resultat kun<br />

kan ses ved at starte rapporten fra C5 i Windows.<br />

Usynligt gitter<br />

Problemerne kan opstå i alle rapporter, hvor der anvendes forskellige skrifttyper eller størrelser på<br />

skrifttyper.<br />

Under udskrift i Windows anvendes der et usynligt gitter, der bestemmer, hvor felter og tekster<br />

placeres på rapporten.<br />

Maskerne i gitteret afhænger af skrifttypen i rapporten, idet det er skrifttypens Pitch eller CPI, der<br />

bestemmer maskernes bredde.<br />

Skrifttypen ‘Lucinda console’ i 6, 10 og 12 pitch<br />

6 tegn pr. tomme<br />

10 tegn per tomme<br />

12 tegn per tomme<br />

Default skrifttype for rapporten<br />

Der kan vælges en default skrifttype til hver enkelt rapport. Skrifttypen indsættes i Skrifttype-feltet i<br />

opsætningen af rapporten med CTRL+F6. Der kan kun vælges mellem skrifttyper, der i forvejen er<br />

defineret på printeren, der er valgt til rapporten.<br />

Hvis der ændres i skrifttypen, skal der efterfølgende udføres ’Slet rettelser for alle brugere’ med<br />

CTRL+F9.<br />

Den valgte skrifttype gælder for alle linjer, der opsættes i layoutområdet. Hvis der ikke foretages nogen<br />

ændringer, er maskebredden den samme i alle linjer i layoutet.<br />

Samme skrifttype og samme pitch giver ensartet gitter<br />

Forskellige skrifttyper pr. linje<br />

Det usynlige gitter kan på de enkelte linjer ændres til en anden maskestørrelse ved at give linjen en<br />

anden skrifttype eller samme skrifttype med en anden pitch.<br />

Det første tegn i hver linje i layout området bestemmer hvilken skrifttype og pitch, der gælder<br />

for den pågældende linje under udskriften. Dette gælder både ved udskrivning i DOS og Windows,<br />

men det har særlig betydning ved udskrifter i Windows, hvor der anvendes proportional spatiering.<br />

305<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Skrifttypen til første tegn bestemmer gitteret for hele linjen<br />

Der kan således udmærket være forskellige linjer med hver sin usynlige maskestørrelse.<br />

Spatiering i skrifttyper<br />

Skrifttyper eller fonte har enten ‘fast’ eller ’proportional’ spatiering.<br />

Fast spatiering<br />

Fast spatiering betyder, at alle tegn og bogstaver fylder lige meget.<br />

Skrifttyper med fast spatiering anvendes for det meste til regneark og databaser, hvor det er vigtigt at<br />

felter og tekster opstilles pænt i kolonner.<br />

De anvendes også, når der udskrives fra DOS udgaverne af C5.<br />

Proportional spatiering<br />

Proportional spatiering betyder, at tegn og bogstaver ikke fylder mere end nødvendigt. Bogstavet I<br />

fylder således ikke det samme som bogstavet M.<br />

Skrifttyper med proportional spatiering anvendes meget i programmer til tekstbehandling, men<br />

anvendes også i Windows udskrifter fra C5.<br />

Eksempler på skrifttyper<br />

Spatiering Skrifttyper (eksempler på fonte)<br />

Fast Courier, Letter Gothic, Lineprinter, Lucinda Console<br />

Proportional CG Times, Arial, Times New Roman, Helvetica *<br />

* Helvetica er standard i C5, når der udskrives fra Windows.<br />

Forskel på fast spatiering og proportional skrift<br />

Forskellen på tekster udskrevet med fast spatiering og tekster udskrevet med proportional skrift er<br />

ganske tydelig og fremgår af eksemplerne herunder.<br />

Eksemplerne indeholder kolonneoverskrifter til en rapport. Det er samme overskrifter i begge<br />

eksempler, så det er nemmere at se forskellen på skrifttyperne.<br />

Skrifttype med fast spatiering (Lucinda Console)<br />

VareNummer Navn Serienummer Lejebeløb<br />

306<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Skrifttype med proportional spatiering (Helvetica)<br />

VareNummer Navn Serienummer Lejebeløb<br />

Felter i rapporter<br />

Når felter planlægges i en linje i layoutområdet, placeres de med start i en af kolonnerne i linjen, og<br />

feltet fylder et givet antal tegn eller kolonner.<br />

Udskrives linjen i DOS, fylder feltet på tilsvarende måde det samme antal tegn som planlagt, idet hver<br />

kolonne i layoutet svarer til en celle i det usynlige gitter.<br />

Udskrives linjen derimod i Windows, fylder feltet stadig det planlagte antal celler, men selve<br />

feltindholdet udskrives med proportional spatiering. Proportional spatiering er således ligeglad med<br />

den faste celle størrelse.<br />

Felternes indhold kan udskrives venstrestillet, centreret eller højrestillet.<br />

I eksemplet herunder vises et felt med teksten ’Grafikkort’. Øverst vises feltet udskrevet med fast<br />

spatiering og nederst med proportional spatiering. Selve feltet fylder lige meget, som det fremgår af<br />

kassen, men den proportionale skrift fylder mindre i feltet.<br />

Felter med fast og proportional spatiering<br />

Fast spatiering<br />

Grafikkort<br />

Proportional spatiering<br />

Grafikkort Grafikkort Grafikkort<br />

Venstrestillet Centreret Højrestillet<br />

Talfelter bør altid højrestilles så værdierne kommer til at stå pænt under hinanden.<br />

Fritekst i rapporter<br />

Fritekst er tekster, der skrives direkte i layoutområdet. De anvendes som regel til overskrifter,<br />

ledetekster eller almindelig tekst.<br />

I eksempel 1 herunder er overskrifterne indsat som fritekst.<br />

Eksemplet er udskrevet i DOS, og som det ses fylder alle tegn det samme som i et usynligt gitter.<br />

307<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Eksempel 1 udskrift i DOS<br />

VareNummer Navn Serienummer Lejebeløb<br />

10-GC-1 Grafikkort ET-4000 W32P VK 123-ab 56,32<br />

10-GC-1 Grafikkort ET-4000 W32P VK 123-ab1 56,32<br />

10-HD-1 Harddisk AT Conner 420 MB 12-34-56 89,00<br />

10-HD-4 Harddisk SCSI IBM-OEM 2GB 12-34-100 720,00<br />

Eksempel 2 udskrift i Windows<br />

VareNummer Navn Serienummer Lejebeløb<br />

10-GC-1<br />

10-GC-1<br />

10-HD-1<br />

10-HD-4<br />

Grafikkort ET-4000 W32P VL<br />

Grafikkort ET-4000 W32P VL<br />

Harddisk AT Conner 420 MB<br />

Harddisk SCSI IBM-OEM 2GB<br />

Eksempel 2 er udskrevet i Windows, og som det ses passer overskrifterne ikke over kolonnerne.<br />

For at undgå den store sammentrækning mellem teksterne i overskrifterne, skal linjen ændres til<br />

tekstfelter med et felt til hver overskrift.<br />

Opsætning af tekstfelt<br />

Opsætningen udføres ved at placere cursoren på en af teksterne f.eks. ’VareNummer’, og taste F6.<br />

Derved åbnes en boks med overskriften ’Formattering af tekst’.<br />

Felter i ’Formattering af tekst’<br />

Felt Anvendelse<br />

123-ab<br />

123-ab1<br />

12-34-56<br />

12-34-100<br />

Tekst Indeholder al fritekst mellem to felter, både formaterede<br />

tekstfelter og almindelige felter.<br />

Er der ingen felter på linjen, indeholder feltet al tekst på den.<br />

Tekstens max længde Teksten formateres til et tekstfelt af længden i dette felt.<br />

Overskrift/Ledetekst Om feltet skal fungere som overskrift eller ledetekst.<br />

Ved ledetekst sættes automatisk punkter og kolon efter teksten<br />

Tekstens justering Venstrestillet, højrestillet eller centreret.<br />

56,32<br />

56,32<br />

89,00<br />

720,00<br />

Bemærk! Hver overskrift skal formateres for sig. Længden sættes til antal tegn i det usynlige gitter, der<br />

gælder for den aktuelle linje.<br />

Efter omformateringen består linjen af flere enkelte felter, der er placeret på deres bestemte pladser i<br />

layoutet, og under udskrivning i Windows skrives teksterne med proportional spatiering inden for den<br />

givne feltlængde.<br />

Eksemplet herunder viser samme eksempel som tidligere, men med fritekster omdannet til tekstfelter.<br />

308<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Udskrift i Windows med fritekst i form af felter<br />

VareNummer Navn Serienummer Lejebeløb<br />

10-GC-1<br />

10-GC-1<br />

10-HD-1<br />

10-HD-4<br />

Nye skrifttyper i Windows<br />

Printerdrivere<br />

Der kan indsættes nye skrifttyper i printerdriverne efter behov.<br />

Skal en ny skrifttype anvendes i rapporter, der udskrives i Windows, skal skrifttypen tilføjes i to<br />

printerdrivere:<br />

Standard<br />

Standard-Windows (eller evt. en anden Windows printerdriver).<br />

Grunden til at skrifttypen både skal indsættes i Standard og Standard-Windows printerdriverne er, at<br />

rapporter oprettes i DOS og som sådan kun kan anvende printerdrivere beregnet til DOS f.eks.<br />

’Standard’.<br />

Standard driveren anvendes således kun under opbygningen af rapporten, medens Standard-Windows<br />

printerdriveren anvendes under udskriften i Windows.<br />

Opbygning af skrifttyper i driverne<br />

Skrifttyperne oprettes ved at vælge opsætningen af den pågældende printerdriver og vælge<br />

menupunktet Skrifttype.<br />

Promptboksen, der vises, er lidt forskellig i de to typer printerdrivere (DOS og Windows).<br />

Opbygning af skrifttype i DOS printerdriver<br />

Felt Anvendelse<br />

Grafikkort ET-4000 W32P VL<br />

Grafikkort ET-4000 W32P VL<br />

Harddisk AT Conner 420 MB<br />

Harddisk SCSI IBM-OEM 2GB<br />

Navn Navn på skrifttype (samme som i Windows)<br />

Start kode Udfyldes ikke (Indeholder normalt ESC koder til start af skrifttypen)<br />

Stop kode Udfyldes ikke (Indeholder normalt ESC koder til stop af skrifttypen)<br />

Pitch Tegn pr. tomme<br />

123-ab<br />

123-ab1<br />

12-34-56<br />

12-34-100<br />

Tabel Udfyldes ikke (Anvendes f.eks. til oversættelse af specialtegn i DOS)<br />

56,32<br />

56,32<br />

89,00<br />

720,00<br />

309<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opbygning af skrifttype i Windows printerdriver<br />

Felt Anvendelse<br />

Navn Navn på skrifttype (samme som i DOS)<br />

Skrifttype Navn på font i Windows fontbibliotek.<br />

Efterlades feltet tomt, udfyldes det automatisk, når fonten vælges, første<br />

gang rapporten afvikles i Windows.<br />

Tegnbredde Tegn pr. tomme (samme som Pitch i DOS)<br />

Tegnhøjde Skrifttypens højde i punkter.<br />

Udfyldes dette felt tages ikke længere højde for tegnbredden, selv om<br />

denne alligevel skal udfyldes.<br />

Hvis skrifttyperne i Standard-Windows printerdriveren skal anvendes i en rapport, skal du sikre dig, at<br />

de samme skrifttyper også er defineret i Standard DOS printer driveren.<br />

Nogle gange kendes den nøjagtige stavemåde på fontens navn ikke.<br />

I disse tilfælde efterlades feltet til fontnavnet blankt, når fonten defineres i Windows printerdriveren.<br />

Når rapporten eksekveres i GUI versionen, promptes der med et valg mellem de Windows skriftfonte,<br />

der er til rådighed.<br />

Når en af fontene er valgt, gemmes den i Microsoft Dynamics C5 Windows printerdriveren.<br />

Beregning af feltstørrelse<br />

Skal der indsættes felter med større skrifttype end default, kan det være svært at finde ud af hvor<br />

meget feltet kommer til at fylde på rapporten, når den udskrives i Windows.<br />

Størrelsen på feltet i udskriften kan beregnes med følgende formel.<br />

(Antal tegn i felt) * (CPI default font) / (CPI valgt font)<br />

Skrifttype mindre end defaulttypen<br />

Hvis der indsættes skrifttyper, der er mindre en defaulttypen, og det ser ud til at linjerne ikke<br />

behandles korrekt, kan dette ordnes ved, altid at definere defaultfonten til 17 CPI, eller hvad der er den<br />

mindste skrifttype, der er defineret.<br />

Skrifttype til et bestemt felt i en rapport<br />

Der vælges en anden skrifttype til et bestemt felt i en rapport ved at markere feltet med ALT+A, og<br />

derefter vælge lokalmenuen og herefter Blok/Indsæt kode for at tildele skrifttypen til feltet.<br />

Printerkoder<br />

Koderne, der tilknyttes, kan ses i printerlayoutet med ALT+E.<br />

Når der dannes rapporter i udviklingsmenuen, er det muligt at angive forskellige koder for fonte, farver<br />

osv.<br />

Efter indsættelsen kan koderne vises med forkortelser. Herunder vises en liste over de forskellige<br />

forkortelser.<br />

310<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Forkortelser til printkoder<br />

Kode Betydning<br />

Font on<br />

Font off<br />

Default font on<br />

Default font off<br />

Color on<br />

Color off<br />

Default color on<br />

Default color off<br />

Typestyle on<br />

TypeStile off<br />

Printer option<br />

Printer paper<br />

Line spacing<br />

Eksempel på rapport i Windows<br />

Lises Bolsjefabrik A/S<br />

Sukkervej 45<br />

6300 Gråsten<br />

Tlf: 4564536<br />

Central Kopiering<br />

Postboks 35<br />

Ny Østergade 172<br />

1101 København K<br />

Bemærkninger<br />

Alle varer skal afleveres i rengjort stand<br />

UDLÅNSORDRE<br />

Varenummer Navn Serienummer Lejebeløb<br />

10-GC-1<br />

10-GC-1<br />

10-HD-1<br />

10-HD-4<br />

Grafikkort ET-4000 W32P VL<br />

Grafikkort ET-4000 W32P VL<br />

Harddisk AT Conner 420 MB<br />

Harddisk SCSI IBM-OEM 2GB<br />

Nummer :<br />

UdlånsDato :<br />

ReturDato :<br />

Side<br />

123-ab<br />

123-ab1<br />

12-34-56<br />

12-34-100<br />

56,32<br />

56,32<br />

89,00<br />

720,00<br />

311<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

:<br />

1000<br />

09/09-99<br />

30/09-99<br />

1


Opgaver: Rapporter i Windows<br />

Opgave 1: Udlånsordre i Windows<br />

Formål med opgaven<br />

At ændre den oprettede udlånsordre, så den også fungerer korrekt i Windows.<br />

Beskrivelse<br />

Når den oprettede udlånsordre afvikles i GUI versionen af C5, står teksterne ikke rigtigt i forhold til<br />

felterne. Dette skal ændres, ligesom der skal ændres skrifttype på firmanavnet og formularnavnet.<br />

Eksempel<br />

Lises Bolsjefabrik A/S<br />

Sukkervej 45<br />

6300 Gråsten<br />

Tlf: 4564536<br />

Central Kopiering<br />

Postboks 35<br />

Ny Østergade 172<br />

1101 København K<br />

Bemærkninger<br />

Alle varer skal afleveres i rengjort stand<br />

UDLÅNSORDRE<br />

Varenummer Navn Serienummer Lejebeløb<br />

10-GC-1<br />

10-GC-1<br />

10-HD-1<br />

10-HD-4<br />

Se forløbet næste side:<br />

Grafikkort ET-4000 W32P VL<br />

Grafikkort ET-4000 W32P VL<br />

Harddisk AT Conner 420 MB<br />

Harddisk SCSI IBM-OEM 2GB<br />

Nummer :<br />

UdlånsDato :<br />

ReturDato :<br />

Side<br />

123-ab<br />

123-ab1<br />

12-34-56<br />

12-34-100<br />

56,32<br />

56,32<br />

89,00<br />

720,00<br />

312<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012<br />

:<br />

1000<br />

09/09-99<br />

30/09-99<br />

1


1 Tag en kopi af den sidste Udlånsordre du oprettede.<br />

Forløb √<br />

2 Ret alle overskrifterne over varelinjerne og overskriften ’Bemærkninger’ så de bliver<br />

formatterede til tekstfelter.<br />

Bemærkninger skal centreres.<br />

VareNummer, Navn og Serienummer skal venstrestilles.<br />

Lejebeløb skal højrestilles.<br />

Alle felterne skal desuden også sættes til fed skrift.<br />

3 Udfør ændringerne i alle sproglagene. Dette kan være svært, så hav tålmodighed til<br />

du får ideen om hvordan, det skal gøres.<br />

4 Ret ledetekstfelterne til ordreinformationerne.<br />

Husk at ’ledetekster’ selv sætter prikkerne efter teksten.<br />

5 Opret i printerdriveren ’Standard-Windows’ to nye skrifttyper som følger:<br />

Skrifttypen FirmaNavn:<br />

Navn ......: Firmanavn<br />

Skrifttype : Udfyldes ikke<br />

TegnBredde : 1.0<br />

TegnHøjde .: 40.0<br />

Skrifttypen Formular<br />

Navn ......: Formular<br />

Skrifttype : Udfyldes ikke<br />

TegnBredde : 1.0<br />

TegnHøjde .: 20.0<br />

6 Opret i printerdriveren ’Standard’ de samme to skrifttyper som følger:<br />

(udfyld kun de viste felter, resten skal være blanke)<br />

Skrifttype FirmaNavn:<br />

Navn ......: Firmanavn<br />

Pitch .....: 10.0<br />

Skrifttypen Formular<br />

Navn ......: Formular<br />

Pitch .....: 10.0<br />

7 Markér feltet ‘Firmaoplysninger.Navn’ og indsæt skrifttypen FirmaNavn.<br />

Markér feltet med formularnavnet og indsæt skrifttypen Formular.<br />

Bemærk: For at få plads til formularnavnet skal du sørge for at navnet er en<br />

formatteret tekst i form af en overskrift på 30 tegn og højrestillet. Så kommer<br />

teksten til at passe på udskriften.<br />

Teksten skal være højrestillet, og fylder kun lidt af de 30 tegn der er afsat.<br />

Afmærkningen der skal passe med teksten i længde skal derimod ligge<br />

venstrestillet i forholde til teksten. – Markér kun selve teksten dvs. bogstaverne,<br />

mens de er venstrestillet i de 30 tegn, og højrestil bagefter.<br />

8 Gå ind i GUI versionen af XAL og udskriv formularen fra det tidligere oprettede<br />

menupunkt.<br />

Da GUI versionen ikke kender skrifttyperne ’FirmaNavn’ og ’Formular’, bliver du<br />

promptet for disse når du startet formularen. Vælg selv en skrifttype til ’FirmaNavn’<br />

og en anden skrifttype til ’Formular’.<br />

313<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Forløb √<br />

9 Afprøv rapporten ind imellem indtil du er tilfreds med resultatet.<br />

Afprøv rapporten i alle tre sproglag, og kontrollér at teksterne står rigtigt i alle<br />

lagene.<br />

314<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


35. Multi Export<br />

Formål<br />

Formålet med denne lektion er at lære deltagerne at udføre multi export af applikationselementer fra<br />

C5<br />

Efter lektionen skal kursisterne kunne:<br />

Udføre multi export<br />

og kende til:<br />

Import.def<br />

Export.log<br />

Elementfiler<br />

Wildcards i form af matchudtryk.<br />

Multi export generelt<br />

I hver kolonne i udviklingsmenuen kan der foretages export af elementer, der tilhører den aktuelle<br />

kolonne.<br />

I kolonnen ’Multi’ kan der udføres export af elementer fra flere forskellige kolonner på en gang. Det<br />

udføres i menupunktet ’Export’.<br />

En multi export består af følgende:<br />

Elementfiler<br />

Import definitionsfil<br />

Export logfil<br />

Export kørsel.<br />

Elementfiler<br />

Under Multi Export dannes der én elementfil for hvert enkelt element der exporteres.<br />

Elementfilernes navne startes med EXP efterfulgt af et femcifret tal, og afsluttes med punktum og<br />

elementtype.<br />

Eksempel på elementfiler<br />

EXP00001.MAC<br />

EXP00002.MAC<br />

EXP00264.DBD<br />

EXP00265.DBD<br />

EXP00001.LST<br />

EXP00002.LST<br />

EXP00001.XAL<br />

EXP00002.XAL<br />

EXP00001.FRM<br />

EXP00002.FRM<br />

EXP00003.FRM<br />

315<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Indeholdet i elementfilerne fremgår af import definitionsfilen ’Import.def’, der også dannes under<br />

exporten.<br />

Import definitionsfil (Import.def)<br />

Navnet på import definitionsfilen er ’Import.def’, men den kan tildeles et andet navn under<br />

exportopsætningen.<br />

Ud over en liste med exporterede elementer, indeholder filen i de to første linjer informationer om<br />

stinavn, versionsnummer, dato o.a.<br />

Filen anvendes ved Multi Import, idet importkørslen læser de ovennævnte værdier, og navnene på de<br />

elementfiler, der skal importeres.<br />

Eksempel på Import.def<br />

"Microsoft© C5 EXPORT","c:\DebExp\","c:\DebExp\Import.log",<br />

"Use Xal: ImportObjekts","Vers. 4.1.0.180 21/12-07 14:00","",<br />

"Dbd","CustTable","exp00043.dbd",<br />

"LST","CustTable.Account","EXP00001.LST",0<br />

"FRM","CustTable","EXP00001.FRM",4<br />

1. linje i definitionsfilen<br />

Felt Indhold<br />

1 Teksten ”Microsoft C5 EXPORT”<br />

2 Stinavn på det sted elementfilerne ligger (Sættes under exportopsætning)<br />

3 Stinavn og navn på import loggen (Sættes under exportopsætning)<br />

2. linje i definitionsfilen<br />

Felt Indhold<br />

1 Teksten ”Use XAL: ImportObjekts” (Navn på XAL kørsel til import)<br />

2 Versionsnummer, Dato og klokkeslæt<br />

3 Frivillig kommentar der sættes under exportopsætningen<br />

Elementlinjerne<br />

Felt Indhold<br />

1 Elementtype<br />

2 Elementnavn<br />

3 Navn på exportfil<br />

4 Applikationsgruppe<br />

316<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Export log (Export.log)<br />

Der oprettes en logfil med navnet Export.log under Multi Exporten. Navnet kan evt. ændres under<br />

exportopsætningen.<br />

Exportloggen indeholder en rapport over hændelser under selve exporten.<br />

Eksempel på Export.log<br />

Export af applikation:<br />

Vers. 4.1.0.180 21/12-07 14:00<br />

Path.....................: c:\DebExp\<br />

Database: CustTable<br />

CustTable -> exp00043.dbd 14:00 18.106<br />

LST.........................: CustTable<br />

CustTable.Account -> exp00001.LST 14:00 1.060<br />

FRM.........................: CustTable<br />

CustTable -> exp00001.FRM 14:00 25.812<br />

I loggen vises C5 version, dato og Klokkeslæt for udførelsen af exporten, og det ses hvilken sti filerne<br />

blev exporteret til.<br />

De enkelte elementer opstilles efter elementtype, og det ses hvilken elementfil de ligger i. Klokkeslæt<br />

og størrelse på elementfilen ses også.<br />

Export kørsel<br />

Selve exporten udføres fra udviklingsmenuen ved aktivering af menupunktet ’Multi’ og ’Export’.<br />

I menupunktet fremkommer en promptboks i form af en matrix, hvori det med matchudtryk angives<br />

hvilke elementtyper der skal med i exporten.<br />

317<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Multi export<br />

Felter Forklaring<br />

Incl. Udtryk for elementer der skal medtages.<br />

Er feltet tomt medtages elementtypen ikke.<br />

Excl. Udtryk for elementer der ikke skal medtages, selv om disse er indeholdt i<br />

udtrykket under Incl.<br />

Fra Mindste værdi for elementnavne der medtages. Skal være indeholdt i<br />

udtrykket under incl.<br />

Til Største værdi for elementnavne der medtages. Skal være indeholdt i<br />

udtrykket under incl.<br />

Kun nye Skal der kun medtages nye kartoteker i forhold til de originale.<br />

Kartoteksnavn skal desuden være indeholdt i udtrykket i incl.<br />

Enums Skal fastteksttyperne medtages i exporten. Hvis JA placeres de i<br />

elementfilen med det første kartotek.<br />

C_Util C_Util fil der skal exporteres fra. Kun elementer der ikke findes i andre<br />

C_Util filer medtages.<br />

Path Directory hvori de exporterede elementer skal placeres.<br />

Export log Navn på export log. Er feltet tomt dannes der ingen logfil.<br />

Import def Navn på import definitionsfil. Er feltet tomt dannes der ingen<br />

definitionsfil.<br />

Import log Forslag til navn på import log. Kan overskrives under import.<br />

Kommentar Værdierne skrives i starten af log- og definitionsfilerne.<br />

Ved senere import fremgår kommentarerne af dialogen.<br />

Felt 1: Versionsnummer, dato og Klokkeslæt.<br />

Felt 2: Kan frit udfyldes med ekstra information.<br />

Crypt Angives et serienummer krypteres de exporterede elementer.<br />

Matchudtryk<br />

Efterfølgende kan disse elementer kun importeres i en installation med<br />

det angivne serienummer.<br />

I felterne ’Incl.’ og ’Excl.’ kan der anvendes matchudtryk.<br />

De vigtigste match udtryk vises i skemaet herunder, efterfulgt af eksempler. Yderligere forklaring findes<br />

i manualerne under ordet Match.<br />

318<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Matchudtryk<br />

Udtryk Forklaring<br />

aaa Ethvert element, der indeholder de pågældende tegn, medtages.<br />

Ethvert udtryk, der slutter med bogstaverne ’aaa’, medtages.<br />

? eller . Tegnene indsættes i udtrykket som erstatning for enkelte tegn.<br />

* Erstatter ingen eller flere forekomster af tegn.<br />

Tegnet lige før medtages ikke.<br />

+ Erstatter én eller flere forekomster af tegn.<br />

- Erstatter ingen eller én forekomst af tegnene.<br />

Eksempler<br />

Udtryk Forklaring<br />

sal DebitorSaldo, FinansBudgetSaldi, LønSaldiMed<br />

DebFakHist, KreFakHist<br />

k?ist DebFakHist, DebFakList, LagerStykListPrompt<br />

DebFakHist, DebFakList, DebPost, DebPostList<br />

Fak?*st> DebFakHist, DebFakList, KreFakHist, KreFakList<br />

319<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


Opgaver: Multi Export<br />

Opgave 1: Multi export<br />

Formål med opgaven<br />

At udføre multi export af applikationselementer.<br />

Beskrivelse<br />

Der skal udføres multi export af alle de nye applikationselementer, der er blevet dannet under kurset<br />

incl. fastteksttyper og printerdrivere.<br />

Forløb √<br />

1 Dan dig et overblik over hvilke nye applikationselementer du har fremstillet under<br />

kurset. Kryds evt. modulerne af herunder.<br />

Modulerne er opstillet i samme rækkefølge, som i indtastningsbilledet i ’Multi<br />

Export’.<br />

Macro (MAC)<br />

Database (DBD)<br />

Listbilleder (LST)<br />

Triggere (SXL)<br />

XAL kørsler (XAL)<br />

Forespørgsler (QTX)<br />

Forms (FRM)<br />

Printere (PRD)<br />

Rapporter (REP)<br />

Brugerformler (UXL)<br />

Undermenuer (MNU)<br />

2 Udfør en Multi Export af alle de markerede elementtyper, idet du exporterer<br />

elementerne.<br />

320<br />

UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />

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

® C5 VERSION 2012


36. 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 />

Godkende Godkende 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 />

Godkend 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 />

321<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 />

Godkend Godkend editorboksen F3<br />

Godkend<br />

feltmenu<br />

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

Godkend 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 />

Genvejs-taste Du kan også afvikle rapporten under oprettelsen<br />

ENTER<br />

ALT+R<br />

322<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 />

Godkende Godkend relationsvinduet F3<br />

Du er nu tilbage i startskærmbilledet, hvor dit kartotek nu<br />

kan ses i venstre side.<br />

323<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 />

Godkend Godkend F3<br />

Alt H<br />

324<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 />

Godkend Godkend 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. SaldoDkr > 0. Hvis posten er falsk sorteres den<br />

fra.<br />

Godkend Godkend 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 />

325<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 />

Godkend Godkend 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 />

Godkend Godkend koden F3<br />

326<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 />

327<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!