Programmering II - Xpi
Programmering II - Xpi
Programmering II - Xpi
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