Programmering I - xpi.dk
Programmering I - xpi.dk
Programmering I - xpi.dk
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Copyright © 2011 Microsoft.<br />
Microsoft Dynamics ® C5 Version 2012<br />
<strong>Programmering</strong> I<br />
C5 er et varemærke, der tilhører Microsoft.<br />
Produkter og firmaer nævnt i dette dokument er varemærker, der tilhører deres respektive ejere.<br />
Indholdet i dette dokument må på ingen måde gengives - helt eller delvist hverken på tryk eller i anden form<br />
uden forudgående tilladelse fra Microsoft. Indholdet i dette dokument kan ændres uden varsel. Der tages<br />
forbehold for tryk- og stavefejl.<br />
Microsoft Development Center Copenhagen, Frydenlunds Allé 6, DK-2950 Vedbæk, Danmark<br />
Tlf.: +45 4567 8000, www.microsoft.com/danmark/dynamics/losninger/c5.mspx
Indholdsfortegnelse<br />
Indledning ............................................................................................................................................................... 12<br />
Del I - XAL sproget ...................................................................................................... 13<br />
1. XAL editoren ................................................................................................. 14<br />
Sproget XAL ............................................................................................................................................................ 14<br />
Anvendelse af XAL editoren ............................................................................................................................. 14<br />
Funktionstaster ...................................................................................................................................................... 15<br />
Kommentarer { } .................................................................................................................................................... 16<br />
Skrivning af kommentarer på disk ................................................................................................................. 17<br />
Opgaver: XAL editoren ....................................................................................................................................... 19<br />
2. Grundlæggende XAL kommandoer ............................................................ 20<br />
PRINT ......................................................................................................................................................................... 20<br />
PRINT AT .................................................................................................................................................................. 21<br />
PAUSE ........................................................................................................................................................................ 22<br />
WINDOW ................................................................................................................................................................. 23<br />
WINDOW AT ........................................................................................................................................................... 24<br />
WINDOW og PRINT AT ...................................................................................................................................... 25<br />
Opgaver: Grundlæggende XAL kommandoer .......................................................................................... 25<br />
3. Variabler i XAL sproget ............................................................................... 27<br />
Variabeltyper .......................................................................................................................................................... 27<br />
Erklæring af variabler .......................................................................................................................................... 28<br />
Tildeling af værdier til variabler ...................................................................................................................... 29<br />
Udskrivning af indhold fra variabler .............................................................................................................. 30<br />
Opgaver: Variabler i XAL sproget ................................................................................................................... 33<br />
4. PROMPT, grundlæggende brugerdialog .................................................... 34<br />
Tildeling af værdier til variabler ...................................................................................................................... 34<br />
PROMPT ................................................................................................................................................................... 35<br />
Linjeskift i promptbokse .................................................................................................................................... 35<br />
Størrelse på promptboxen ................................................................................................................................ 37<br />
INPUT AT .................................................................................................................................................................. 37<br />
Andre muligheder med promptbokse ......................................................................................................... 38<br />
Opgaver: PROMPT, Grundlæggende brugerdialog ................................................................................ 39<br />
5. Betingelsesstrukturer med IF ...................................................................... 41<br />
IF-THEN-ELSE-ENDIF ........................................................................................................................................... 41<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
2
Betingelsens bestanddele ................................................................................................................................. 42<br />
Opgaver: Betingelsesstrukturer med IF........................................................................................................ 44<br />
6. Fasttekster ..................................................................................................... 46<br />
Fastteksttyper og tekster ................................................................................................................................... 46<br />
Fasttekster i variabler .......................................................................................................................................... 47<br />
Tildeling af værdier til fasttekstvariabler ..................................................................................................... 48<br />
Udskrivning af værdier fra fasttekstvariabler ............................................................................................. 48<br />
Fasttekster i promptboxe .................................................................................................................................. 49<br />
Fasttekster i IF strukturer ................................................................................................................................... 50<br />
Vedligeholdelse af fasttekster ......................................................................................................................... 50<br />
Opgaver: Fasttekster ............................................................................................................................................ 51<br />
7. Funktioner, grundlæggende ........................................................................ 53<br />
Opbygning .............................................................................................................................................................. 53<br />
Syntaks ...................................................................................................................................................................... 54<br />
Datatyper i funktioner ......................................................................................................................................... 55<br />
Funktioner (ToDay(), TimeNow() m.fl.) ......................................................................................................... 56<br />
Opgaver: Funktioner ............................................................................................................................................ 63<br />
8. Brugerdialog med BOX, grundlæggende ................................................... 67<br />
Syntaks BOX() ......................................................................................................................................................... 67<br />
BOX() typerne 1 og 2 ........................................................................................................................................... 68<br />
Opgaver: Brugerdialog med BOX, grundlæggende ............................................................................... 70<br />
9. Kartoteksgennemløb, grundlæggende....................................................... 72<br />
SEARCH ..................................................................................................................................................................... 73<br />
Sortering med USING ......................................................................................................................................... 75<br />
Sortering med ORDER ........................................................................................................................................ 77<br />
Afgrænsning med WHERE ................................................................................................................................ 78<br />
Opgaver: Kartoteksgennemløb, grundlæggende .................................................................................... 81<br />
10. Brugerdialog med kartoteksopslag ............................................................ 82<br />
PROMPT grundlæggende repetition ............................................................................................................ 82<br />
PROMPT til afgrænsning i SEARCH ............................................................................................................... 83<br />
Kartoteksgennemløb med brugerstyret afgrænsning ........................................................................... 84<br />
PROMPT med REF ................................................................................................................................................ 85<br />
Opgaver: Brugerdialog med kartoteksopslag ........................................................................................... 88<br />
11. Kartoteksgennemløb, flere kartoteker ....................................................... 90<br />
Flere kartoteker uden synkronisering ........................................................................................................... 90<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
3
Flere kartoteker med synkronisering ............................................................................................................ 91<br />
Udarbejdelse af total ........................................................................................................................................... 94<br />
Opgaver: Kartoteksgennemløb, flere kartoteker ...................................................................................... 96<br />
12. Huskelister Kommandoer og funktioner ................................................... 99<br />
Box .............................................................................................................................................................................. 99<br />
Dokumentation af XAL-kørsler ..................................................................................................................... 100<br />
Funktion – CurUserID() .................................................................................................................................... 100<br />
Funktion – UserID2Name() ............................................................................................................................. 101<br />
Funktion – TimeNow() ..................................................................................................................................... 101<br />
Funktion – Time2Str() ....................................................................................................................................... 102<br />
Funktion – ToDay() ............................................................................................................................................ 102<br />
IF-THEN-ELSE-ENDIF ........................................................................................................................................ 103<br />
Index - se indhold af......................................................................................................................................... 103<br />
Kommentarer ...................................................................................................................................................... 104<br />
PAUSE ..................................................................................................................................................................... 104<br />
PRINT ...................................................................................................................................................................... 104<br />
PRINT AT ............................................................................................................................................................... 105<br />
<strong>Programmering</strong> – opret .................................................................................................................................. 106<br />
<strong>Programmering</strong> – ret ........................................................................................................................................ 106<br />
PROMPT ................................................................................................................................................................ 107<br />
PROMPT med REF ............................................................................................................................................. 108<br />
SEARCH-END ....................................................................................................................................................... 108<br />
SEARCH-END med USING INDEX ............................................................................................................... 109<br />
SEARCH-END med ORDER............................................................................................................................. 109<br />
SEARCH-END med WHERE ............................................................................................................................ 110<br />
SET ........................................................................................................................................................................... 111<br />
Variabler ................................................................................................................................................................ 112<br />
WINDOW .............................................................................................................................................................. 113<br />
XAL editoren - editeringsfunktioner .......................................................................................................... 114<br />
XAL editoren – nøgleord................................................................................................................................. 115<br />
13. Huskelister XAL sproget ............................................................................116<br />
ENUM ..................................................................................................................................................................... 116<br />
<strong>Programmering</strong> – opret .................................................................................................................................. 116<br />
<strong>Programmering</strong> – ret ........................................................................................................................................ 118<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
4
Del II – Kartoteker og skærmbilleder .....................................................................119<br />
14. Kartoteker ...................................................................................................120<br />
Oprettelse af kartoteker .................................................................................................................................. 120<br />
Navngivning af kartoteker ............................................................................................................................. 121<br />
Hvor ligger data ................................................................................................................................................. 121<br />
fPasswordbeskyttelse af kartoteker ............................................................................................................ 122<br />
Systemfelter i kartoteker ................................................................................................................................. 122<br />
Nye felter i kartoteker ...................................................................................................................................... 122<br />
Opgaver: Kartoteker ......................................................................................................................................... 126<br />
15. Indexer .........................................................................................................130<br />
Anvendelse af indexer...................................................................................................................................... 130<br />
Oprettelse af Index ............................................................................................................................................ 131<br />
Navngivning og indexformel ........................................................................................................................ 132<br />
Navngivning af Index i nye moduler .......................................................................................................... 132<br />
Opgaver: Index ................................................................................................................................................... 134<br />
16. Listbilleder...................................................................................................136<br />
Oprettelse af listbilleder .................................................................................................................................. 136<br />
Navngivning af listbilleder ............................................................................................................................. 138<br />
Kald fra udviklingsmenuen ............................................................................................................................ 138<br />
Kald via kartoteks- og feltreferencer ......................................................................................................... 139<br />
Opgaver: Listbilleder......................................................................................................................................... 141<br />
17. Formens vindue ..........................................................................................144<br />
Formens vindue .................................................................................................................................................. 144<br />
Triggere (forms formler) generelt ............................................................................................................... 145<br />
Triggere i ’Opsætning af vinduet’ ............................................................................................................... 146<br />
Forms kontrolkommandoer og macroer .................................................................................................. 147<br />
#MacroLoad() ...................................................................................................................................................... 148<br />
#FormError ........................................................................................................................................................... 149<br />
#Frm_Index() ........................................................................................................................................................ 149<br />
#Frm_Search()...................................................................................................................................................... 150<br />
#Frm_SearchTop() .............................................................................................................................................. 151<br />
#Frm_SearchEnd() .............................................................................................................................................. 151<br />
Eksempel på fejlhåndtering og styring af poster i en form .............................................................. 152<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
5
Specielt vedr. triggerne Init og Pre-form ................................................................................................. 152<br />
Opgaver: Formens vindue .............................................................................................................................. 154<br />
18. Enkelt record blok .......................................................................................155<br />
Opsætning af Enkelt record blok ................................................................................................................ 155<br />
Felter ....................................................................................................................................................................... 156<br />
Opgaver: Enkelt record blok .......................................................................................................................... 157<br />
19. Multi record blok ........................................................................................158<br />
Opsætning Multi record blok ....................................................................................................................... 159<br />
Felter ....................................................................................................................................................................... 160<br />
Opgaver: Multi record blokke ....................................................................................................................... 161<br />
20. Direkte opslag .............................................................................................162<br />
Opbygning af direkte opslag ........................................................................................................................ 162<br />
Sammenhæng i direkte opslag .................................................................................................................... 163<br />
Direkte opslag i XAL kørsel ............................................................................................................................ 164<br />
Opgaver: Direkte opslag ................................................................................................................................. 166<br />
21. Formens felter, opsætning ........................................................................167<br />
Formattering af felter ....................................................................................................................................... 167<br />
Triggere på felter ............................................................................................................................................... 169<br />
Post-Change ........................................................................................................................................................ 170<br />
Tildeling af værdi til et felt ............................................................................................................................. 171<br />
Valg af felt ............................................................................................................................................................ 172<br />
Valg af trigger ..................................................................................................................................................... 172<br />
Opgaver: Formens felter, opsætning ......................................................................................................... 173<br />
22. Listemenuer .................................................................................................174<br />
Listemenuer ......................................................................................................................................................... 174<br />
Hvor vedligeholdes listemenuer? ................................................................................................................ 176<br />
Opsætning af listemenu.................................................................................................................................. 176<br />
Indsættelse af menupunkter i listemenu .................................................................................................. 177<br />
Undermenuer ...................................................................................................................................................... 178<br />
Opgaver: Listemenuer ...................................................................................................................................... 180<br />
23. Synkronisering mellem forms ...................................................................181<br />
Synkronisering mellem forms ....................................................................................................................... 181<br />
Triggere ved synkronisering .......................................................................................................................... 182<br />
Triggeren Pre-Form .......................................................................................................................................... 182<br />
Buffer ...................................................................................................................................................................... 182<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
6
EXTERN .................................................................................................................................................................. 183<br />
SET ........................................................................................................................................................................... 184<br />
#Frm_Index() ........................................................................................................................................................ 185<br />
#Frm_Search() / #Frm_SearchTop() / #Frm_SearchEnd() ................................................................... 186<br />
Bloktriggeren Init-record ................................................................................................................................ 186<br />
Komplet eks. på synkronisering af forms ................................................................................................. 188<br />
Opgaver: Synkronisering mellem forms ................................................................................................... 190<br />
24. Huskelister forms .......................................................................................191<br />
Fasttekst – Opret ny type ............................................................................................................................... 191<br />
Fasttekst – Tilføj tekster til eksisterende type ........................................................................................ 192<br />
Fasttekst – Ret tekster i eksisterende type .............................................................................................. 193<br />
Kartotek – Navn (opret/ret) ........................................................................................................................... 194<br />
Kartotek – Feltbehandling (opret) ............................................................................................................... 195<br />
Kartotek – Feltbehandling (ret) .................................................................................................................... 196<br />
Kartotek – Feltbehandling (referencer) ..................................................................................................... 196<br />
Kartotek – Dokumentation ............................................................................................................................ 196<br />
Kartotek – Index (opret) .................................................................................................................................. 197<br />
Kartotek – Index (ret)........................................................................................................................................ 197<br />
Kartotek – Index (slet) ...................................................................................................................................... 198<br />
Listbillede – Opret ............................................................................................................................................. 198<br />
Listbillede – Ret .................................................................................................................................................. 199<br />
Listbillede – Slet.................................................................................................................................................. 199<br />
Menuer - Lille udviklingsmenu (CTRL F12) ............................................................................................. 200<br />
Menuer – Lokalmenuer ................................................................................................................................... 200<br />
Menuer – Opsætning af menupunkt ......................................................................................................... 201<br />
Form – Vindue (opret)...................................................................................................................................... 202<br />
Form – Vindue (ret) ........................................................................................................................................... 203<br />
Form – Vindue (slet ) (dvs. hele formen) .................................................................................................. 203<br />
Form – Enkelt record blok (opret) ............................................................................................................... 204<br />
Form – Enkelt record blok (ret) .................................................................................................................... 205<br />
Form – Enkelt record blok (slet) ................................................................................................................... 205<br />
Form – Multi record blok (opret) ................................................................................................................. 206<br />
Form – Multi record blok (ret) ...................................................................................................................... 207<br />
Form – Multi record blok (slet) ..................................................................................................................... 207<br />
Form – Felter (opret) ........................................................................................................................................ 208<br />
Form – Felter (ret) .............................................................................................................................................. 208<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
7
Form – Felter (slet) ............................................................................................................................................ 209<br />
Form – Triggere i vinduet ............................................................................................................................... 209<br />
Form – Triggere i blokke ................................................................................................................................. 210<br />
Form – Triggere i felter .................................................................................................................................... 210<br />
Del III – Rapporter .....................................................................................................211<br />
1. Rapport XAL ................................................................................................212<br />
Processer i rapportgeneratoren ................................................................................................................... 212<br />
Navne på rapporter .......................................................................................................................................... 212<br />
Rapportgeneratorens opbygning ............................................................................................................... 214<br />
Rapport-XAL ........................................................................................................................................................ 215<br />
SEARCH (repetition) .......................................................................................................................................... 215<br />
PROMPT (repetition) ........................................................................................................................................ 216<br />
OUTPUT ................................................................................................................................................................. 217<br />
Komplet eksempel på XAL kode .................................................................................................................. 219<br />
Opgaver: Rapport XAL ..................................................................................................................................... 221<br />
2. Rapport definition grundlæggende ..........................................................222<br />
Definitionsområdet ........................................................................................................................................... 222<br />
Skema med funktionstaster i rapportgeneratoren ............................................................................... 224<br />
Linjetypen Body .................................................................................................................................................. 225<br />
Kartotekskolonnen ............................................................................................................................................ 226<br />
Layoutområdet ................................................................................................................................................... 227<br />
Flere bodylinjer i samme rapport ................................................................................................................ 228<br />
Fritekst og ledetekster ..................................................................................................................................... 229<br />
Opgaver: Rapport definition, grundlæggende ...................................................................................... 232<br />
3. Linjetyper uden kartoteker ........................................................................233<br />
Linjetypen Page header ................................................................................................................................... 234<br />
Linjetypen Page footer .................................................................................................................................... 237<br />
Linjetypen Prolog ............................................................................................................................................... 239<br />
Linjetypen Epilog ............................................................................................................................................... 240<br />
Tegning af streger og kasser ........................................................................................................................ 241<br />
Sideskift ................................................................................................................................................................. 242<br />
Opgaver: Linjetyper uden kartotek ............................................................................................................. 244<br />
4. Rapport definition felter i layout .............................................................246<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
8
Oprettelsesmetoder .......................................................................................................................................... 247<br />
Feltudtryk .............................................................................................................................................................. 248<br />
Formattering ........................................................................................................................................................ 248<br />
Mulige værdier i feltudtryk ............................................................................................................................ 249<br />
Kartoteksfelter uden kvalifikation ............................................................................................................... 250<br />
Kartoteksfelter med kvalifikation ................................................................................................................. 251<br />
Hvornår skal der kvalificeres? ....................................................................................................................... 252<br />
Tekst ........................................................................................................................................................................ 253<br />
Variabler ................................................................................................................................................................ 255<br />
Egne variabler...................................................................................................................................................... 255<br />
Systemvariabler .................................................................................................................................................. 256<br />
Macroer ................................................................................................................................................................. 258<br />
#Company ............................................................................................................................................................ 258<br />
#MacroLoad() ...................................................................................................................................................... 259<br />
Funktioner ............................................................................................................................................................. 261<br />
Regneudtryk ........................................................................................................................................................ 262<br />
Opgaver : Rapport definition felter i layout ............................................................................................ 264<br />
5. Linjetypen Control ......................................................................................265<br />
Opbygning af Control linjer ........................................................................................................................... 265<br />
#Rep_Execute ...................................................................................................................................................... 267<br />
Macroen #Add .................................................................................................................................................... 268<br />
Control linjer og #Add i Rapport-QT ......................................................................................................... 270<br />
Opgaver: Linjetypen Control ......................................................................................................................... 272<br />
6. Linjetyper med kartoteker .........................................................................273<br />
Bindeled i Rapport XAL og Rapport Definition ...................................................................................... 273<br />
Enkeltstående kartoteker ................................................................................................................................ 276<br />
Afhængige synkroniserede kartoteker ...................................................................................................... 277<br />
Linjetypen Body .................................................................................................................................................. 279<br />
Linjetypen Group Header ............................................................................................................................... 279<br />
Linjetypen Group Footer ................................................................................................................................. 282<br />
Linjetypen Subtotal ........................................................................................................................................... 286<br />
Opgaver: Linjetyper med kartoteker .......................................................................................................... 291<br />
7. Rapport QT Grundlæggende funktioner ..................................................293<br />
QT-værktøjet ....................................................................................................................................................... 293<br />
QT i forhold til XAL ............................................................................................................................................ 294<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
9
Tre hovedområder i rapportgeneratoren ................................................................................................ 294<br />
Udtræk med XAL eller QT .............................................................................................................................. 294<br />
XAL og QT i samme rapport .......................................................................................................................... 295<br />
Forskelle ved udsendelse af data til rapport........................................................................................... 296<br />
QT værktøjets vinduer ..................................................................................................................................... 297<br />
Afgrænsningsvinduet ....................................................................................................................................... 298<br />
Relationsvinduet (ved søgning i ét kartotek).......................................................................................... 299<br />
Opsætningsvinduet .......................................................................................................................................... 300<br />
Sorteringsvinduet .............................................................................................................................................. 301<br />
Procedure for QT til søgning i ét kartotek. .............................................................................................. 302<br />
Eksempel på Rapport-XAL og Rapport-QT ............................................................................................. 302<br />
Rapport-XAL ........................................................................................................................................................ 302<br />
Rapport-QT .......................................................................................................................................................... 303<br />
Brugernes muligheder i Rapport-QT ......................................................................................................... 305<br />
Opgaver: Rapport QT Grundlæggende funktioner .............................................................................. 308<br />
8. Rapport QT filtrering og sortering ...........................................................311<br />
Filtrering ................................................................................................................................................................ 311<br />
Filtre i Rapport QT ............................................................................................................................................. 312<br />
Build-filter ............................................................................................................................................................. 312<br />
Run-filter ............................................................................................................................................................... 312<br />
Sortering ................................................................................................................................................................ 313<br />
Anvendelse af sorteringsvinduet ................................................................................................................. 314<br />
Opgaver: Rapport QT filtrering og sortering .......................................................................................... 315<br />
9. Subtotaler automatiske .............................................................................317<br />
Procedure for brug af automatiske subtotaler ...................................................................................... 317<br />
Opsætning af felt ............................................................................................................................................... 317<br />
Opsætning af udskrivningsmåde ................................................................................................................ 320<br />
Opsætning af automatisk ledetekst ........................................................................................................... 321<br />
Sortering ................................................................................................................................................................ 321<br />
Tekst ........................................................................................................................................................................ 322<br />
Opsætning af ledetekst og udskrivningsmåde ...................................................................................... 323<br />
Eksempler.............................................................................................................................................................. 323<br />
Opgaver: Subtotaler automatiske ............................................................................................................... 326<br />
10. Rapport QT triggere grundlæggende .......................................................327<br />
Triggere ................................................................................................................................................................. 327<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
10
Globale triggere i opsætning ........................................................................................................................ 328<br />
Kartotekstriggere ............................................................................................................................................... 329<br />
Rækkefølge på triggere................................................................................................................................... 331<br />
Eksempel på anvendelse ................................................................................................................................. 333<br />
Opgaver: Rapport QT Triggere, grundlæggende ................................................................................. 335<br />
11. Rapport QT med flere kartoteker .............................................................336<br />
Flere kartoteker .................................................................................................................................................. 336<br />
Relaterede kartoteker ...................................................................................................................................... 338<br />
Relation i Rapport-QT ...................................................................................................................................... 339<br />
Opgaver: Rapport QT med flere kartoteker ............................................................................................ 344<br />
12. Huskelister Rapporter ................................................................................346<br />
Oprette rapport .................................................................................................................................................. 346<br />
Oprette rapportlinjer (Kolonnerne) ............................................................................................................ 346<br />
Oprette rapportlinjer med fritekst .............................................................................................................. 346<br />
Oprette rapportlinjer med streger og kasser ......................................................................................... 347<br />
Oprette rapportlinjer med forskellige felter............................................................................................ 347<br />
Rapport – afprøve (køre)................................................................................................................................. 347<br />
Rapport QT – Oprette første kartotek ....................................................................................................... 348<br />
Rapport QT – Oprette flere kartoteker ...................................................................................................... 349<br />
Rapport QT – Sortere ....................................................................................................................................... 350<br />
Rapport QT – Filtrere ........................................................................................................................................ 350<br />
Rapport QT – Feltafgrænse (tilføje / slette) ............................................................................................. 350<br />
Rapport QT – Triggere i opsætning ........................................................................................................... 351<br />
Rapport QT – Triggere på kartoteker ........................................................................................................ 351<br />
Subtotaler ............................................................................................................................................................. 352<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
11
Indledning<br />
Velkommen til kurset Microsoft Dynamics C5 <strong>Programmering</strong> I. Kurset er berammet til 3 dage.<br />
Kursusmaterialet er udarbejdet til version 2012.<br />
Målgruppe<br />
Personer der ønsker et grundlæggende kendskab til udviklingsmiljøet i Microsoft Dynamics C5, og<br />
personer der skal opnå autorisation som Microsoft Dynamics C5 Programmør.<br />
Forudsætninger<br />
Gennemført kurset C5 Supervisor og evt. C5 Applikation II.<br />
Formål<br />
Kurset giver deltageren et grundlæggende kendskab til C5’s udviklingsmiljø og hvordan tilretninger og<br />
opbygning af nye elementer i systemet foretages.<br />
På kurset behandles følgende emner:<br />
Udviklingsmiljøet og kartoteksstrukturen<br />
<strong>Programmering</strong>ssproget XAL<br />
Opbygning af rapporter og skærmbilleder<br />
Opbygning af søgerutiner i XAL og QT<br />
Beskrivelse af materialet<br />
Materialet er opbygget i uafhængige lektioner, der hver behandler et emne eller funktion i C5. Det skal<br />
pointeres, at materialet ikke er beregnet til selvstudium, men som supplement til instruktørens<br />
gennemgang og til at genopfriske funktionerne efter endt kursus.<br />
Til hver lektion findes en huskeliste, der giver et hurtigt overblik over fremgangs-måden og de taster,<br />
der bruges til at udføre funktionen.<br />
Lektionens opgaver er baseret på de arbejdsrutiner, der normalt forestås i virksomheden.<br />
Opgaveløsning er en vigtig del af indlæringsprocessen og da nogle af opgaverne er en fortsættelse af<br />
opgaver fra tidligere lektioner, kan det anbefales at løse opgaverne successivt. Alle opgaver knytter sig<br />
til den datafil, der undervises i.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
12
Del I - XAL sproget<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
13
1. XAL editoren<br />
Formål<br />
Formålet med denne lektion er at give deltagerne viden om XAL editoren, og funktioner der benyttes i<br />
denne. Der undervises desuden i brugen af kommentarer i XAL kørsler.<br />
Efter lektionen skal kursisterne kunne:<br />
Navngive, åbne og lukke XAL kørsler<br />
Redigere i tekst ved at kopiere, flytte, indsætte og slette én linje ad gangen<br />
Markere et antal linjer og kopiere, flytte, indsætte og slette disse linjer<br />
Anvende og indsætte kommentarer.<br />
Generelt<br />
XAL editoren er en form for tekstbehandlingsprogram. Den har bare ikke helt samme funktionalitet. Til<br />
gengæld findes der mange andre faciliteter, der er specielt beregnet til programmering af XAL kørsler.<br />
Teksten, der indtastes i XAL editoren, består af kommandoer, der er samlet i et programmeringssprog<br />
med navnet XAL.<br />
<strong>Programmering</strong>ssproget kan blandes med almindelig tekst i form af kommentarer.<br />
Sproget XAL<br />
I XAL editoren anvendes programmeringssproget XAL, der betyder EXtended Application Language.<br />
Det er dette sprog, der anvendes og undervises i på dette og de følgende kurser.<br />
Sproget anvendes ikke alene i XAL editoren, men også i de mange andre editorbokse, der findes rundt<br />
omkring i C5, f.eks. i skærmbilleder og rapporter.<br />
Anvendelse af XAL editoren<br />
Et program bestående af XAL kommandoer, kaldes en XAL kørsel. Når der skal dannes en XAL kørsel,<br />
skal XAL editoren først navngives, hvorefter den åbnes.<br />
Når XAL editoren er åben, indtastes de XAL kommandoer og kommentarer kørslen består af. Efter<br />
indtastningen gemmes og go<strong>dk</strong>endes XAL kørslen.<br />
Når en XAL kørsel go<strong>dk</strong>endes, aktiveres der automatisk en kodekompiler, der oversætter de indtastede<br />
kommandoer til intern programkode. Det er denne, oversatte kode, der anvendes når XAL kørslen<br />
senere afvikles.<br />
Under oversættelsen foretages der en kontrol af syntaksen og det undersøges om de angivne<br />
kommandoer, kartoteker, felter, index osv. eksisterer og er stavet korrekt.<br />
Hvis der under oversættelsen findes fejl i de indtastede kommandoer, vises der en fejlmeddelelse på<br />
nederste linje på skærmen. Fejlen skal rettes inden XAL kørslen kan oversættes færdig og afvikles.<br />
Hvis der ikke findes nogen fejl, oversættes koden, hvorefter kørslen kan afvikles.<br />
Den kan enten afvikles fra udviklingsmenuen under XAL/Kør, eller den kan indsættes i et menupunkt,<br />
og afvikles derfra.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
14
Funktionstaster<br />
Når editorboksen er åben til indtastning af programkode, findes der en mængde funktioner, der kan<br />
aktiveres gennem tastetryk.<br />
Nogle funktioner anvendes til redigering af koden. Andre funktioner er en hjælp til hurtig fremfinding<br />
af navne på kartoteker, felter, indexer o.a.<br />
Samtlige funktioner kan ses i en oversigt ved at taste F1, ligesom de kan anvendes gennem<br />
funktionsmenuerne i XAL editoren med SHIFT+F10.<br />
Skema med vigtige funktionstaster i XAL editoren<br />
<strong>Programmering</strong> Redigering<br />
Zoom vindue<br />
ALT+Z ALT+D<br />
F2<br />
F6<br />
F7<br />
F8<br />
SH+F8<br />
Op eller ned<br />
Kommandoer<br />
Vælg fra liste<br />
Fasttekster<br />
Vælg fra liste<br />
Kartoteker<br />
Vælg fra liste<br />
Indexer<br />
Vælg kartotek så index<br />
Felter<br />
Vælg kartotek så felt<br />
Skriv afmærket<br />
område til disk<br />
SH+F5<br />
CTRL+F5<br />
ALT+I<br />
ALT+L<br />
DELETE<br />
ALT+S ALT+H<br />
Slet én linje<br />
Kopi én linje<br />
eller afmærkede linjer<br />
Flyt én linje<br />
eller afmærkede linjer<br />
Indsæt én linje<br />
eller afmærkede linjer<br />
Afmærk linjer<br />
Anvend piletaster<br />
Slet markerede<br />
linjer<br />
Hent fra disk<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
15
Kommentarer { }<br />
Der anvendes ofte kommentarer i XAL kørsler.<br />
Kommentarer er tekst, der ikke har nogen indflydelse på selve afviklingen af kørslen. Derimod kan den<br />
indeholde værdifuld information for de personer, der senere skal læse eller rette i den.<br />
Det er f.eks. en god idé at starte et program med at skrive navnet på forfatteren, datoen, version o.a.,<br />
som i nedenstående illustration:<br />
Eksempel på indledende kommentarer i XAL kørsel<br />
{Forfatter .....: Jens Olsen }<br />
{Dato ..........: 05.12.2011 }<br />
{C5 version ....: 2012 }<br />
{Funktion ......: Beregning af nye salgspriser ud fra }<br />
{ dækningsgrader. }<br />
Som det fremgår af illustrationen sættes kommentarer i { }. I materialet kaldes de to tuborg-paranteser<br />
fremover for ’kommentartegn’.<br />
I eksemplet startes og sluttes hver linje med kommentartegn. Dette er ikke absolut nødvendigt. I XAL<br />
editoren kan kommentarer godt strækkes over flere linjer, idet første linje startes med { og sidste linje<br />
sluttes med } som i næste eksempel.<br />
Kommentarer over flere linjer med ét starttegn og ét sluttegn<br />
{Forfatter .....: Jens Olsen<br />
Dato ..........: 05.12.2011<br />
C5 version ....: 2012<br />
Funktion ......: Beregning af nye salgspriser ud fra<br />
Dækningsgrader.}<br />
De to illustrationer er kun eksempler på anvendelsen af kommentartegnene.<br />
Kommentarer kan også anvendes til forklaring af enkelte programafsnit.<br />
Dele af selve programkoden kan desuden kommenteres ud, hvis kørslen f.eks. skal testes, uden at den<br />
u<strong>dk</strong>ommenterede del medtages i afviklingen. Når testningen er slut, kan kommentartegnene fjernes<br />
igen.<br />
Kommentartegnene behøver ikke nødvendigvis at stå i starten og slutningen af en linje, men kan også<br />
stå inde i en linje.<br />
Der skal altid være ét starttegn og ét sluttegn.<br />
Al tekst og kode, der findes mellem to kommentartegn, springes over under afviklingen af kørslen.<br />
Efterfølgende eksempel viser et stykke XAL kode med forskellig anvendelse af kommentarer.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
16
Eksempel på XAL kørsel med forskellige kommentarer<br />
{Forfatter .....: Jens Olsen }<br />
{Dato ..........: 05.12.2011 }<br />
{C5 version ....: 2012 }<br />
{Funktion ......: Erklæring, tildeling og udskrivning }<br />
{ af variabler i XAL sproget. }<br />
{ Erklæring af variabler }<br />
INT &Antal {Antal varer}<br />
REAL &Pris {Varens salgspris}<br />
STR 20 &Varenavn {Varens navn}<br />
DATE &Salgsdato {Den dag varen kan sælges til prisen}<br />
ENUM NejJa &Udsalgsvare {NEJ/JA om det er en udsalgsvare}<br />
{ Tildeling af værdier med SET }<br />
SET &Antal = 200<br />
SET &Pris = 150.75<br />
SET &Varenavn = ”Håndmixer”<br />
SET &Salgsdato = 01\05\1999<br />
SET &Udsalgsvare = 1 {0=Nej 1=Ja}<br />
{ Udskrivning af værdier med PRINT }<br />
PRINT &Antal<br />
PRINT &Pris<br />
PRINT &Varenavn<br />
PRINT &Salgsdato<br />
PRINT &Udsalgsvare<br />
PAUSE<br />
Skrivning af kommentarer på disk<br />
Da startkommentarerne ofte opstilles på samme måde i alle XAL kørsler, kan det være en fordel at<br />
gemme dem i en fil på disken, hvorfra de så kan hentes hver gang, der oprettes en ny XAL kørsel.<br />
De hentede startkommentarer kan herefter ændres, så de passer til den aktuelle kørsel mht. f.eks. dato<br />
og funktion.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
17
Eksempel på at gemme og hente på disk<br />
XAL kørsel<br />
{Forfatter .....: Jens Olsen }<br />
{Dato ..........: 25.08.99 }<br />
{C5 version. ...: 2.10 }<br />
{Funktion ......: }<br />
Ny XAL kørsel<br />
{Forfatter .....: Jens Olsen }<br />
{Dato ..........: 05.12.2011 }<br />
{C5 version ...: 2012 }<br />
{Funktion ......: Debitorliste}<br />
I eksemplet herover gemmes startkommentarerne i en fil med navnet ’Start’.<br />
Filen hentes ind i en ny XAL kørsel, og de forskellige værdier tilpasses den nye kørsel.<br />
Bemærk! Når det afmærkede område udlæses, skal der angives navn på den fil, der skal udlæses til. På<br />
samme måde skal filnavnet angives, når den skal hentes igen.<br />
Alt S<br />
Alt H<br />
Disk<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
18
Eksempel<br />
Opgaver: XAL editoren<br />
Opgave 1: Startkommentarer<br />
Formål med opgaven<br />
At anvende kommentartegnene til startkommentarer i XAL editoren<br />
Huskelister<br />
Kommentarer<br />
Beskrivelse<br />
Der skal oprettes startkommentarer som vist i eksemplet herunder. Kommentarerne skal gemmes på<br />
disken under navnet ’Start’, så de kan anvendes igen i andre XAL kørsler.<br />
{Forfatter .....: }<br />
{Dato ..........: }<br />
{C5 version ....: 2012 }<br />
{Funktion ......: }<br />
1 Opret en ny XAL kørsel<br />
2 Indsæt standard kommentarer som vist i eksemplet herover<br />
Forløb √<br />
Skriv alle ledeteksterne og indsæt dit eget navn, dags dato og C5 version.<br />
3 Markér linjerne og gem dem på disken under navnet ’Start’.<br />
4 Afslut og go<strong>dk</strong>end kørslen<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
19
2. Grundlæggende XAL kommandoer<br />
Formål<br />
Formålet med denne lektion er at give deltagerne forståelse for grundlæggende XAL kommandoer, der<br />
anvendes til skrivning på skærmen.<br />
Efter denne lektion skal kursisterne kunne:<br />
Anvende kommandoerne PRINT, PRINT AT og PAUSE til udskrivning på skærmen<br />
Anvende kommandoerne WINDOW og WINDOW AT til selv at bestemme vinduets størrelse og<br />
placering på skærmen<br />
Kunne udskrive et bestemt sted i et vindue åbnet med kommandoen WINDOW<br />
Kommandoer generelt<br />
Kommandoerne er specielle ord, der anvendes i XAL kørsler. De er specielle, idet de har særlig<br />
betydning i kørsler.<br />
Kommandoerne findes samlet i XAL sproget. Der findes kommandoer, der anvendes, når der udskrives<br />
tekst til skærmen, kommunikeres med brugere, udføres beregninger osv.<br />
Alle kommandoer kan skrives på tastaturet, som de staves, eller de kan hentes med en af<br />
funktionstasterne fra plukkelisten over kommandoer. Plukkelisten åbnes med F2.<br />
Det er lige meget om kommandoerne skrives med STORT eller småt, men som regel skrives de med<br />
STORT, så de er nemme at genkende, og det ser pænere ud.<br />
Når kommandoerne hentes fra plukkelisten, overføres de altid med STORE bogstaver.<br />
PRINT<br />
Kommandoen PRINT anvendes til udskrivning på skærmen. Der kan udskrives forskellige typer af<br />
information, f.eks. tal, tekst, feltindhold fra kartoteker, variabler og funktioner.<br />
Syntaksmæssigt angives PRINT som det første på en linje efterfulgt af de informationer, der skal<br />
udskrives.<br />
Syntaks for PRINT<br />
PRINT , , osv.<br />
Det er ikke helt ligegyldigt, hvordan informationerne angives. Tal kan blot skrives som de er, hvorimod<br />
tekster altid skal noteres i anførselstegn.<br />
Ved flere forskellige dele af information i en og samme PRINT sætning skal disse altid adskilles med<br />
kommaer.<br />
Blanke linjer i programkoden har ingen indvirkning på selve afviklingen. Skal der derimod udskrives en<br />
blank linje på skærmen, gøres dette ved at angive to anførselstegn lige efter hinanden som i<br />
nedenstående eksempel:<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
20
PRINT med forskellig information<br />
{Udskrivning af værdi}<br />
PRINT ”Værdien er ”<br />
PRINT 100<br />
PRINT ”kr”<br />
PRINT ”” {Giver blank linje på skærm}<br />
PRINT ”Værdien er ”,100,” kr”<br />
Det skal bemærkes, at XAL kørsler altid afvikles sekventielt fra toppen og ned.<br />
Hvis ovenstående XAL kørsel køres, resulterer det i følgende resultat, hvor den samme tekst udskrives<br />
på to forskellige måder adskilt med en blank linje:<br />
Resultat af ovenstående kørsel<br />
Værdien er<br />
100<br />
kr<br />
Værdien er 100 kr<br />
Kørselsafvikling<br />
Under afvikling af XAL kørsler læses programkoden altid sekventielt, dvs. linje for linje oppe fra og<br />
nedefter.<br />
Undervejs udføres de kommandoer, kørslen består af.<br />
PRINT sætninger udskrives altid i den nederste linje på skærmen, hvis der ikke angives andet. De<br />
ovenstående linjer rykkes automatisk én linje op.<br />
Kommentarene udskrives ikke, da de ikke har betydning for selve afviklingen.<br />
PRINT AT<br />
Programkoden<br />
læses sekventielt<br />
oppe fra og ned<br />
PRINT sætninger<br />
udskrives i bunden<br />
af skærmen, men<br />
først rykkes de<br />
forrige linjer én op.<br />
Selv om PRINT kommandoen altid skriver i den nederste linje på skærmen, kan der alligevel godt<br />
udskrives andre steder på skærmen.<br />
Dette foregår ved, som det sidste på PRINT linjen, at angive kommandoen AT efterfulgt af et kolonne-<br />
og linjenummer, som vist herunder.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
21
Syntaks for PRINT AT<br />
PRINT , , osv. AT ,<br />
Positionen, der angives med AT, er det sted på printlinjen, hvor informationen i printsætningen<br />
udskrives på skærmen.<br />
Eksempel på anvendelse af PRINT AT<br />
{Udskrivning af værdi et bestemt sted}<br />
PRINT ”Værdien er ”<br />
PRINT 100<br />
PRINT ”kr”<br />
PRINT ””<br />
PRINT ”Værdien er ”,100,” kr” AT 20,3<br />
Resultat af PRINT AT i ovenstående eksempel<br />
Værdien er<br />
100<br />
kr<br />
Værdien er 100 kr<br />
I eksemplet startes teksten ”Værdien er 100 kr” i kolonne 20 linje 3.<br />
Bemærk at de linjer der var udskrevet i forvejen inden sætningen med PRINT AT, bliver stående nederst<br />
på skærmen.<br />
PRINT AT påvirker således kun den ene linje, hvori AT kommandoen angives.<br />
Vigtigt ved anvendelse af PRINT AT<br />
Hvis der i programmet efter en linje med AT kommandoen forekommer flere PRINT linjer uden AT,<br />
udskrives disse linjer nederst i vinduet samtidig med, at alle andre linjer rykkes op, også de der tidligere<br />
blev udskrevet med AT kommandoen.<br />
PAUSE<br />
Ved anvendelse af PAUSE stoppes programafviklingen midlertidigt.<br />
Kommandoen kan indsættes hvor som helst i XAL kørslen, der er behov for det.<br />
PAUSE kan f.eks. anvendes i en XAL kørsel, hvori der udskrives til skærmen.<br />
Når kørslen er slut, lukkes vinduet automatisk, og det ikke er sikkert, at brugeren når at se, hvad der<br />
udskrives.<br />
Hvis kørslen derimod afsluttes med PAUSE kommandoen, stoppes afviklingen midlertidigt, og på<br />
nederste linje på skærmen vises teksten Tryk på RETUR for at fortsætte.<br />
Ved at trykke på RETUR sættes kørslen igang igen og der fortsættes med den næste kommando, hvis<br />
der er flere, ellers lukkes vinduet og kørslen afsluttes.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
22
Anvendelse af PAUSE midt i og som afslutning i XAL kørsel<br />
{Udskrivning af værdi}<br />
PRINT ”Værdien er ”<br />
PRINT 100<br />
PRINT ”kr”<br />
PAUSE<br />
PRINT ””<br />
PRINT ”Værdien er ”,100,” kr”<br />
PAUSE<br />
Resultat ved første PAUSE kommando<br />
Værdien er<br />
100<br />
kr<br />
Tryk på RETUR for at fortsætte<br />
Resultat efter anden PAUSE kommando<br />
Værdien er<br />
100<br />
kr<br />
Værdien er 100 kr<br />
Tryk på RETUR for at fortsætte<br />
WINDOW<br />
Når der udskrives til skærmen med PRINT, skrives der i virkeligheden i et vindue, der standard fylder<br />
hele skærmen.<br />
WINDOW kommandoen kan anvendes til at ændre størrelse og placering af dette vindue.<br />
Syntaks til WINDOW<br />
WINDOW ,<br />
Vinduets størrelse ændres ved at angive WINDOW kommandoen efterfulgt af bredden på vinduet i<br />
antal kolonner og højden i antal linjer som vist herunder.<br />
I næste eksempel vises kommandoen anvendt til at danne et vindue på 30 kolonner og 4 linjer.<br />
Eksempel på anvendelse af WINDOW<br />
WINDOW 30,4<br />
PRINT ”Microsoft Dynamics C5”<br />
PAUSE<br />
Resultat af ovenstående eksempel med WINDOW<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
23
Microsoft Dynamics C5<br />
Tryk på RETUR for at fortsætte<br />
WINDOW åbner, som vist, et tomt vindue, der placeres i øverste venstre hjørne af skærmen. Vinduet<br />
lukkes straks, når kørslen er slut. I eksemplet er PAUSE derfor indsat, for at holde vinduet åbent indtil<br />
der tastes RETUR (ENTER).<br />
WINDOW AT<br />
Med WINDOW AT kan det bestemmes hvor på skærmen, vinduet skal åbnes.<br />
Kommandoen AT anvendes på samme måde som i PRINT AT, idet der skal angives hvilken kolonne og<br />
linje vinduets øverste venstre hjørne skal placeres i.<br />
Syntaks for WINDOW AT<br />
WINDOW , AT ,<br />
I næste eksempel skal et vindue placeres i kolonne 10 linje 3 på skærmen.<br />
Eksempel på WINDOW AT<br />
WINDOW 30,4 AT 10,3<br />
PRINT ”Microsoft Dynamics C5”<br />
PAUSE<br />
Resultat af ovenstående eksempel med WINDOW AT<br />
Microsoft Dynamics C5<br />
Tryk på RETUR for at fortsætte<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
24
Bemærk at det er vinduets øverste venstre hjørne, der placeres i forhold til skærmen.<br />
WINDOW og PRINT AT<br />
Når PRINT AT anvendes i vinduer, der åbnes med WINDOW, udføres placeringen i forhold til selve<br />
vinduet og ikke i forhold til skærmen.<br />
I næste eksempel placeres ordet Microsoft i kolonne 5 linje 3, i et vindue der fylder 30 kolonner og er 4<br />
linjer højt.<br />
Eksempel med PRINT AT i et vinduet åbnet med WINDOW<br />
WINDOW 30,4 AT 10,3<br />
PRINT ”Microosft Dynamics C5” AT 5,3<br />
PAUSE<br />
Resultatet af ovenstående eksempel<br />
Microsoft Dynamics C5<br />
Tryk på RETUR for at fortsætte<br />
Opgaver: Grundlæggende XAL kommandoer<br />
Opgave 1: Udskrive i et vindue i en bestemt linje<br />
Formål med opgaven<br />
At anvende kommandoerne PRINT, PRINT AT og WINDOW til at udskrive linjer et bestemt sted i et<br />
vindue på skærmen.<br />
Huskelister<br />
<strong>Programmering</strong> - opret<br />
Kommentarer<br />
PRINT AT<br />
PAUSE<br />
WINDOW<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
25
XAL editoren - editeringsfunktioner<br />
Beskrivelse<br />
I opgaven skal en vits udskrives i et lille vindue på skærmen.<br />
1 Opret en ny XAL kørsel<br />
2 Indsæt og tilret startkommentarer<br />
3 Print teksten ”Hvad er forskellen på en and?”<br />
4 Print teksten ”Den er lige rund på midten.”<br />
5 Afprøv kørslen<br />
Forløb √<br />
6 Indsæt et vindue der er 40 kolonner bredt og 10 linjer højt. Vinduet skal placeres i<br />
kolonne 20 linje 5.<br />
7 Foretag nødvendige ændringer i opgaven så den angivne vits udskrives startende i<br />
kolonne nr. 10 linje nr. 8 i vinduet.<br />
8 Go<strong>dk</strong>end kørslen og afprøv den igen<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
26
3. Variabler i XAL sproget<br />
Formål<br />
Formålet med denne lektion er, at give deltagerne grundlæggende viden om hvad variabler er for<br />
noget. Der undervises i variabeltyperne INT, REAL, STR og DATE, og hvordan de kan anvendes i XAL<br />
sproget.<br />
Efter lektionen skal kursisterne kunne:<br />
Erklære variabler af typerne INT, REAL, STR og DATE.<br />
Indsætte værdier i de fire variabeltyper .<br />
Udskrive indholdet i de fire variabeltyper.<br />
Variabler generelt<br />
I XAL kørsler kan data gemmes på forskellig vis alt afhængigt af, hvad de skal anvendes til.<br />
Opbevaring af data<br />
Nogle data hentes fra kartoteker og behandles i kørsler, hvorefter de gemmes igen i de samme eller<br />
andre kartoteker. Andre data derimod benyttes og gemmes kun midlertidigt, mens kørsler er åbne og<br />
igang. Denne type data gemmes i variabler.<br />
Variabler<br />
Variabler er pladser i computerens hukommelse. De indeholder data, der kun eksisterer medens en XAL<br />
kørsel er igang. Så snart kørslen afsluttes, forsvinder variablernes data.<br />
Variabler kan f.eks. anvendes til sammentælling af værdier under gennemløbet af et kartotek, idet der<br />
ikke længere er brug for den sammentalte værdi, når gennemløbet er slut, og resultatet er skrevet ud.<br />
Selve variablen med dens indhold gemmes kun midlertidigt i hukommelsen på maskinen, og indholdet<br />
kan læses når som helst, der er behov for det.<br />
En variabel kan sammenlignes med et skab med skuffer i. Hver skuffe må dog kun indeholde én<br />
bestemt type værdi.<br />
Variabeltyper<br />
Der findes 5 forskellige typer variabler, der hver for sig kun kan indeholde én bestemt type data.<br />
De forskellige variabeltyper vises i skemaet herunder. Den sidste variabeltype med navnet ENUM,<br />
forklares ikke yderligere i denne lektion, men i en selvstændig lektion (ikke på kurset <strong>Programmering</strong><br />
begynder).<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
27
De fem variabeltyper<br />
Type Indhold Eksempel på indhold<br />
INT Heltal 350<br />
REAL Decimaltal 235.45<br />
STR Tekster ”Strygejern”<br />
DATE Datoer 01\05\1998<br />
ENUM Fasttekster 1<br />
Erklæring af variabler<br />
Inden variabler kan tages i anvendelse i en XAL kørsel, skal de først oprettes ved en erklæring. Dette<br />
skal altid ske som det første i en kørsel før alle andre programlinjer.<br />
Variabler erklæres ved at angive variablens type efterfulgt af et navn. For tekstvariabler skal der<br />
desuden angives hvor mange tegn, variablen skal kunne indeholde.<br />
Variabler i XAL sproget kendetegnes ved, at navnet foranstilles med et &-tegn. Selve navnet startes<br />
desuden altid med et bogstav og må ikke indeholde mellemrum.<br />
I nedenstående illustration ses eksempler på erklæringer af variabler. Det er frivilligt hvilke navne,<br />
variablerne skal have, men det er en god idé, at benytte navne der siger noget om deres indhold.<br />
Erklæring af variabler<br />
{ Erklæring af variabler }<br />
INT &Antal<br />
REAL &Pris<br />
STR 20 &Varenavn<br />
DATE &Salgsdato<br />
Bemærk at tekstvariablen &Varenavn erklæres til at kunne indeholde 20 tegn.<br />
Bag ved erklæringen af variablerne kan der f.eks. også skrives en lille kommentar om deres anvendelse,<br />
som i nedenstående eksempel.<br />
Erklæring af variabler med kommentarer<br />
{ Erklæring af variabler }<br />
INT &Antal { Antal stk af en vare }<br />
REAL &Pris { Salgspris i kroner og øre }<br />
STR 20 &Varenavn { Navn på varer (højst 20 tegn) }<br />
DATE &Salgsdato { Dato for varesalget }<br />
Der kan erklæres flere variabler af hver type, når der er behov for det, de skal blot have hver sit navn.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
28
Tildeling af værdier til variabler<br />
Oprettede variabler kan tildeles værdier på to forskellige måder:<br />
Ved erklæringen<br />
Med kommandoen SET<br />
Ved erklæringen<br />
Når variabler erklæres, initialiseres de altid automatisk med nulværdier. De kan dog også tildeles andre<br />
værdier, som i nedenstående eksempel.<br />
Erklæring af variabler med samtidig tildeling af værdier<br />
{ Erklæring af variabler med tildeling af værdier }<br />
INT &Antal = 350<br />
REAL &Pris = 235.45<br />
STR 20 &Varenavn = ”Strygejern”<br />
DATE &Salgsdato = 01\05\2011<br />
Tildelte værdier gemmes, indtil der gives en ny værdi med SET eller kørslen afsluttes.<br />
Med kommandoen SET<br />
Med kommandoen SET kan variablerne til hver en tid tildeles nye værdier, medens en kørsel er igang,<br />
og den samme variabel kan tildeles nye værdier flere gange.<br />
Tildelingen foregår med kommandoen SET som i følgende eksempel:<br />
Erklæring af variabler og tildeling med SET<br />
{ Erklæring af variabler }<br />
INT &Antal<br />
REAL &Pris<br />
STR 20 &Varenavn<br />
DATE &Salgsdato<br />
{ Tildeling af ny værdi til variabler med SET kommandoen }<br />
SET &Antal = 200<br />
SET &Pris = 150.75<br />
SET &Varenavn = ”Håndmixer”<br />
SET &Salgsdato = 01\05\2011<br />
Vigtigt ved tildeling af værdier<br />
Type Indhold Eksempel på værdi<br />
INT Heltal skrives som de er 350<br />
REAL Decimaltal skrives altid med punktum 235.45<br />
STR Tekster skrives i anførselstegn (enkelt eller dobbelt) ”Strygejern”<br />
DATE Datoer skrives altid med backslash (bagvendt skråstreg) 01\05\2011<br />
Tildeling af beregninger til variabler<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
29
{ Erklæring af variabler med tildeling af værdi}<br />
INT &Antal = 200<br />
REAL &Pris = 150.75<br />
STR 20 &Varenavn = ”Håndmixer”<br />
DATE &Salgsdato = 01\05\2011<br />
REAL &Sum<br />
{ Tildeling af ny værdi i form af beregning }<br />
SET &Sum = &Antal * &Pris<br />
I ovenstående eksempel multipliceres værdierne i variablerne &Antal og &Pris med hinanden.<br />
Resultatet tildeles variablen &Sum.<br />
Udskrivning af indhold fra variabler<br />
Variablers indhold kan til enhver tid hentes frem og udskrives.<br />
Udskrivning foregår med kommandoen PRINT.<br />
PRINT kan udskrive indholdet direkte ved angivelse af variablens navn.<br />
I nedenstående eksempel erklæres der en variabel af hver type, hvorefter de tildeles værdier og til sidst<br />
udskrives med PRINT kommandoen.<br />
Erklæring, tildeling og udskrivning af variabler<br />
{ Erklæring af variabler }<br />
INT &Antal<br />
REAL &Pris<br />
STR 20 &Varenavn<br />
DATE &Salgsdato<br />
{ Tildeling af værdier med SET }<br />
SET &Antal = 200<br />
SET &Pris = 150.75<br />
SET &Varenavn = ”Håndmixer”<br />
SET &Salgsdato = 01\05\2011<br />
{ Udskrivning af værdier med PRINT }<br />
PRINT &Antal<br />
PRINT &Pris<br />
PRINT &Varenavn<br />
PRINT &Salgsdato<br />
PAUSE<br />
Ovenstående eksempel medfører følgende udskrift på skærmen.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
30
Resultat af ovenstående XAL kørsel<br />
200<br />
150,75<br />
Håndmixer<br />
01/05-09<br />
Variabler udskrives således med PRINT kommandoen blot ved at angive deres navn efter den.<br />
Da variabler således kan udskrives som enhver anden komponent efter PRINT kommandoen, kan de<br />
også udskrives sammen med andre komponenter f.eks. i forbindelse med ledetekster.<br />
I nedenstående eksempel udskrives de samme variabler igen med ledetekster:<br />
Udskrivning af variabler med ledetekster<br />
{ Udskrivning af værdier med PRINT }<br />
PRINT ”Antal .......: ”, &Antal<br />
PRINT ”Pris ........: ”, &Pris<br />
PRINT ”Varenavn ....: ”, &Varenavn<br />
PRINT ”Salgsdato ...: ”, &Salgsdato<br />
PAUSE<br />
Husk at de forskellige komponenter på printlinjerne adskilles af komma.<br />
Resultat af ovenstående XAL kørsel<br />
Antal .......: 200<br />
Pris ........: 150,75<br />
Varenavn ....: Håndmixer<br />
Salgsdato ...: 01/05-98<br />
Herunder vises et andet eksempel på en PRINT sætning med blandede komponenter.<br />
Blandede komponenter i én printsætning<br />
{ Udskrivning af værdier med PRINT }<br />
REAL &Pris<br />
STR 20 &Varenavn<br />
SET &Pris = 150.75<br />
SET &Varenavn = ”Håndmixer”<br />
PRINT 1, ” ”, &Varenavn, ” koster ”, &Pris, ”Kr.”<br />
PAUSE<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
31
Resultat af ovenstående XAL kørsel<br />
1 Håndmixer koster 150,75 Kr<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
32
Eksempel<br />
Opgaver: Variabler i XAL sproget<br />
Opgave 1: Anvendelse af variabler<br />
Formål med opgaven<br />
At opbygge en XAL kørsel med erklæring, tildeling og udskrivning af variabler.<br />
Huskelister<br />
<strong>Programmering</strong> - opret<br />
Kommentarer<br />
Variabler<br />
XAL editoren - editeringsfunktioner<br />
Beskrivelse<br />
Der skal opbygges en XAL kørsel der anvender variabler, som du tildeler dit navn og fødselsdato,<br />
hvorefter variablernes indhold udskrives på skærmen. Navn og fødselsdato skal foranstilles med<br />
ledetekster som vist herunder:<br />
Navn.........: Ole Olsen<br />
Fødselsdato..: 30/06-75<br />
1 Opret en ny XAL kørsel<br />
2 Indsæt og tilret startkommentarer<br />
3 Opret variabler<br />
(start med kommentarlinjen ”Erklæring af variabler”)<br />
4 Tildel navn og fødselsdato til variablerne<br />
(start med kommentarlinjen ”Tildeling af værdier”)<br />
Forløb √<br />
5 Udskriv oplysningerne på skærmen med ledetekster som i ovenstående eksempel<br />
(start med kommentarlinjen ”Udskrift”)<br />
6 Go<strong>dk</strong>end kørslen og afprøv den igen<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
33
4. PROMPT, grundlæggende brugerdialog<br />
Formål<br />
Formålet med denne lektion er at give deltagerne grundlæggende viden om brugerdialoger med<br />
kommandoen PROMPT.<br />
Efter lektionen skal kursisterne kunne:<br />
Anvende kommandoen PROMPT til at foretage en dialog med brugeren<br />
Opbygge promptbokse med flere linjer, med og uden indtastningsfelter.<br />
Brugerdialog generelt<br />
Brugerdialoger anvendes ofte til at spørge brugere om, hvilke værdier der skal indsættes i variabler.<br />
Grundlæggende kan variabler tildeles værdier i XAL kørsler direkte under erklæringen, eller med<br />
kommandoen SET som vist herunder.<br />
Tildeling af værdier til variabler<br />
Variabeltildeling med SET<br />
INT &Antal<br />
STR 20 &VareNavn<br />
SET &Antal = 5<br />
SET &VareNavn = ”Tulipaner”<br />
PRINT &Antal,” ”,&VareNavn<br />
Når variabler tildeles værdier, som vist her, kan brugerne ikke påvirke deres værdier. Det kan de<br />
derimod, når der anvendes brugerdialoger.<br />
Tildeling af værdier til variabler gennem brugerdialog<br />
En brugerdialog kan udføres vha. en dialogboks, der er et lille vindue på skærmen.<br />
I dette vindue vises nogle ledetekster, der udfærdiges af programmøren i forvejen. Ved siden af<br />
ledeteksterne er der plads til, at der kan indtastes svar i et eller flere indtastningsfelter som vist i<br />
eksemplet på næste side.<br />
Dialogboks med ledetekster og indtastningsfelter<br />
I ovenstående dialogboks kan der indtastes antal og varenavn, som så kan anvendes videre i den<br />
bagvedliggende XAL kørsel.<br />
Dialogboksens funktion<br />
Indtast vareinformationer<br />
Antal ..........:<br />
Varenavn .......:<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
34
Dialogbokse fungerer på samme måde som kommandoen PAUSE, idet PAUSE stopper XAL kørslen,<br />
indtil der tastes Enter eller Return.<br />
Med en dialogboks stoppes XAL kørslen også midlertidigt. Kørslen fortsættes først, når<br />
indtastningsfelterne udfyldes, og boksen afsluttes med Enter eller Return.<br />
Ovenstående type dialogboks kaldes også en promptboks, idet boksen inde i kørslen dannes med<br />
kommandoen PROMPT.<br />
PROMPT<br />
Kommandoen PROMPT anvendes til at danne en dialogboks med følgende grundlæggende indhold:<br />
Overskrift, ledetekster og felter til indtastning af værdier.<br />
PROMPT boks med overskrift, ledetekster og indtastningsfelter<br />
Ledetekster<br />
Overskrift og ledetekster er almindelig fritekst, hvorimod indtastningsfelterne fremkommer vha. en<br />
særlig kommando.<br />
<strong>Programmering</strong>smæssigt dannes promptboksen i eksemplet med følgende kommandoer:<br />
XAL kørsel til ovenstående promptboks<br />
INT &Antal<br />
STR 20 &VareNavn<br />
PROMPT ”Indtast vareinformationer”,,,<br />
”Antal ..........: ” GET (&Antal),<br />
”Varenavn .......: ” GET (&VareNavn)<br />
INPUT AT 15,4<br />
Bemærk at variabler, der anvendes i XAL kørsler, altid skal angives i toppen af kørslerne. I eksemplet<br />
erklæres der variabler til brug i promptboksen.<br />
I promptbokse er overskrifter og ledetekster almindelig tekst, der angives i anførselstegn. Tekst skal<br />
altid skrives i anførselstegn.<br />
Indtastningsfelter fremkommer ved indsættelse af kommandoen GET, der skal efterfølges af navnet på<br />
en variabel i en parantes. Variablen bliver tildelt den værdi, der indtastes i promptboksen af brugeren.<br />
På denne måde kan variabler tildeles værdier gennem promptbokse i stedet for ved anvendelse af SET<br />
kommandoen.<br />
Bemærk! Der skal altid være mindst én variabel i en promptbox, ellers meldes der syntaksfejl.<br />
Linjeskift i promptbokse<br />
Indtast vareinformationer<br />
Antal ..........:<br />
Varenavn .......:<br />
Overskrift<br />
Indtastningsfelter<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
35
I promptbokse anvendes kommaer, både som normale kommaer i tekster og til linjeskift.<br />
Kommaer i tekster<br />
Kommaer der indsættes i tekster i promptbokse, anvendes som normale pause-kommaer. Når disse<br />
kommaer indsættes i tekster, der står i anførselstegn, vises kommaerne blot som en del af teksten, når<br />
promptboksen ses på skærmen.<br />
Anvendelse af komma i tekst<br />
STR 15 &Varenr<br />
PROMPT ”Indtast vareinformationer”,,,<br />
”Varenummer .......: ” GET (&Varenr),,<br />
”Hvis det ønskes, må varenummeret”,<br />
”gerne være alfanumerisk.”<br />
INPUT AT 15,4<br />
I eksemplet anvendes der et almindeligt pausekomma i teksten Hvis det ønskes, må varenummeret<br />
gerne være alfanumerisk.<br />
Pause komma i tekst i promptboks<br />
Kommaer til linjeskift<br />
Promptbokse udføres ofte med flere linjer, ud over selve overskriften.<br />
Der kan være flere linjer med GET kommandoer, og der kan være flere tekstlinjer uden GET og<br />
variabler.<br />
Hver gang, der skal skiftes linje i en promptboks, udføres dette vha. et komma.<br />
Hvert komma, der indsættes i en promptboks uden for anførselstegnene, vil medføre, at der skiftes<br />
linje. Skal der f.eks. være en blank linje, skal der sættes et ekstra komma.<br />
Promptboks med flere tekstlinjer<br />
STR 15 &Varenr<br />
Indtast vareinformationer<br />
Varenummer .....:<br />
Hvis det ønskes, må varenummeret<br />
gerne være alfanumerisk.<br />
PROMPT ”Indtast vareinformationer”,,,<br />
”Varenummer .......: ” GET (&Varenr),,<br />
”Hvis det ønskes, må varenummeret”,<br />
”gerne være alfanumerisk.”<br />
INPUT AT 15,4<br />
I dette eksempel erklæres der kun én variabel til brug i promptboxen.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
36
Det væsentlige i eksemplet er placeringen af kommaerne. Hvert komma, der ikke er en del af teksten i<br />
anførselstegnene, medfører ét linjeskift, når promptboxen vises på skærmen.<br />
Ovenstående kørsel resulterer i følgende promptboks på skærmen.<br />
Promptboks med linjeskift udført vha. kommaer<br />
Størrelse på promptboxen<br />
Der findes ikke nogen parametre til angivelse af boksens størrelse. Den eneste måde, hvorpå boksens<br />
størrelse kan påvirkes, er ved at indsætte flere kommaer, hvilket giver flere linjeskift og således påvirker<br />
højden på boksen. Bredden på boksen kan kun påvirkes ved at angive mere tekst i anførselstegn.<br />
INPUT AT<br />
Promptbokse kan opstilles med eller uden placering.<br />
Promptboks uden placering<br />
Når promptbokse vises på skærmen, vises de altid i øverste venstre hjørne, hvis der ikke angives nogen<br />
placering, som i nedenstående XAL kørsel, med efterfølgende eksempel.<br />
XAL kørsel med promptboks uden placering<br />
STR 15 &Varenr<br />
Indtast vareinformationer<br />
Varenummer .....:<br />
Hvis det ønskes, må varenummeret<br />
gerne være alfanumerisk.<br />
Indtast vareinformationer<br />
Varenummer .....:<br />
Hvis det ønskes, må varenummeret<br />
gerne være alfanumerisk.<br />
Teksternes længde og variablernes størrelse påvirker<br />
boksens bredde<br />
PROMPT ”Indtast vareinformationer”,,,<br />
”Varenummer .......: ” GET (&Varenr),,<br />
”Hvis det ønskes, må varenummeret”,<br />
”gerne være alfanumerisk.”<br />
INPUT<br />
Kommaer<br />
uden for<br />
teksten<br />
påvirker<br />
boksens<br />
højde<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
37
Promptboks placeret i øverste venstre hjørne af skærm<br />
Promptboks med placering<br />
Placering af promptbokse kan angives med kommandoen AT, der anvendes på samme måde som i<br />
WINDOW AT. Kommandoen benyttes til at angive en position med kolonne- og linjenummer.<br />
Positionen angiver boksens øverste venstre hjørne, på samme måde som i WINDOW.<br />
AT kommandoen indsættes efter INPUT som vist i efterfølgende eksempel.<br />
Promptboks med placering vha. AT<br />
STR 15 &Varenr<br />
PROMPT ”Indtast vareinformationer”,,,<br />
”Varenummer .......: ” GET (&Varenr),,<br />
”Hvis det ønskes, må varenummeret”,<br />
”gerne være alfanumerisk.”<br />
INPUT AT 15,4<br />
Ovenstående kommando medfører at promptboxen udskrives med sit øverste venstre hjørne i kolonne<br />
15 linje 4, som vist herunder.<br />
Promptboks med placering<br />
Indtast vareinformationer<br />
Varenummer .....:<br />
Hvis det ønskes, må varenummeret<br />
gerne være alfanumerisk.<br />
Andre muligheder med promptbokse<br />
Indtast vareinformationer<br />
Varenummer .....:<br />
Hvis det ønskes, må varenummeret<br />
gerne være alfanumerisk.<br />
Promptbokse har mange flere muligheder end de ovennævnte. Nogle af dem gennemgås på andre<br />
programmeringskurser.<br />
Desuden henvises til den interne hjælp (<strong>Programmering</strong>smanualen) under PROMPT, hvor der gives en<br />
uddybende forklaring på PROMPT kommandoen.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
38
Opgaver: PROMPT, Grundlæggende brugerdialog<br />
Opgave 1: Brugerdialog for sommerhusudlejning<br />
Formål med opgave<br />
At anvende en PROMPT til at modtage værdier til variabler.<br />
Huskelister<br />
PROMPT<br />
Beskrivelse<br />
Der skal opbygges en mindre XAL kørsel til et bureau, der udlejer sommerhuse.<br />
Kørslen skal beregne udlejningsprisen på sommerhuse, idet den i en promptbox skal spørge brugeren<br />
om antal udlejningsdage, dagspris og beregningsmetode.<br />
Variabler<br />
Værdi Variabeltype Erklæring i XAL-kørsel<br />
Dage Heltal<br />
Dagspris Kommatal<br />
Metode Tekst<br />
Udlejningspris Kommatal<br />
I denne opgave oprettes udelukkende promptboksen som vist herunder. Beregningerne tilføres<br />
opgaven efter næste lektion.<br />
Promptboks<br />
Udskrift på skærm<br />
Beregning af udlejningsværdi<br />
Dage ....................:<br />
Dagspris ................:<br />
Metode ..................:<br />
(Weekend, Uge, Dobbeltuge)<br />
Beregning af udlejningsværdi for sommerhuse<br />
-------------------------------------------<br />
Dage ...........: 14<br />
DagsPris .......: 500,00<br />
Metode .........: DobbeltUge<br />
Forløb √<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
39
1 Opret en ny XAL kørsel<br />
2 Indsæt og tilret startkommentarer<br />
3 Opret variabler som vist i skemaet<br />
(start med kommentarlinjen ”Erklæring af variabler”)<br />
4 Opstil promptboksen som vist herover<br />
(start med kommentarlinjen ”Brugerdialog”)<br />
5 Indsæt print sætninger der kan udskrive de informationer, der indtastes i<br />
promptboksen. Se udskriften herover.<br />
(start med kommentarlinjen ”Udskrift”)<br />
6 Go<strong>dk</strong>end kørslen og afprøv den igen<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
40
5. Betingelsesstrukturer med IF<br />
Mål med lektionen<br />
Formålet med denne lektion er at give deltagerne forståelse for anvendelse af betingelsesstrukturer<br />
med kommandoen IF.<br />
Efter lektionen skal kursisterne kunne:<br />
Anvende kommandoen IF til styring af programforløb<br />
Styre et programforløb vha. betingelser, og oplysninger der indtastes i dialogbokse.<br />
Betingelsesstrukturer generelt<br />
Betingelsesstrukturer anvendes til at udføre én ud af to opstillede muligheder afhængig af<br />
sandhedsværdien i en opstillet betingelse.<br />
Betingelse anvendt i dagligdagen<br />
En grønthandler, der sælger æbler, har to forskellige priser på sine æbler. Henholdsvis 2,50 kr. og 3,00<br />
kr. stykket.<br />
Kunderne vil naturligvis gerne købe æblerne til 2,50 kr., men for at få lov til det, skal kunderne opfylde<br />
en bestemt betingelse.<br />
Betingelsen er, at der skal købes mere end 10 æbler. Hvis der købes 10 æbler eller mindre, koster de<br />
3,00 kr stykket.<br />
Hver gang grønthandleren sælger æbler, anvender han således en betingelsesstruktur, for at finde ud<br />
af hvilken pris æblerne skal sælges for.<br />
Gartnerens anvendelse af betingelsesstrukturen<br />
HVIS Antal > 10 SÅ<br />
SÆT pris i alt til Antal * 2.50<br />
ELLERS<br />
SÆT pris i alt til Antal * 3.00<br />
SLUT<br />
Det kan godt være at gartneren ikke tænker over det i dagligdagen, men hver gang der sælges æbler,<br />
er han nødt at udregne prisen som vist oven over.<br />
IF-THEN-ELSE-ENDIF<br />
I XAL kørsler opbygges betingelsesstrukturer med kommandoen IF, der kan opstilles efter følgende<br />
syntaks.<br />
Kommandoen består af ordene IF-THEN-ELSE-ENDIF<br />
Syntaks<br />
IF betingelse THEN<br />
Kommandolinjer at udføre<br />
ELSE<br />
Alternative kommandolinjer at udføre<br />
ENDIF<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
41
Bemærk at kommandoen ALTID skal afsluttes med ENDIF<br />
Kommandoen ELSE kan derimod udelades, hvis der er behov for det. I så fald udføres IF strukturen kun,<br />
hvis betingelsen er opfyldt. Hvis den ikke er opfyldt, overspringes IF strukturen helt, og XAL kørslen<br />
fortsætter, som om intet var hændt.<br />
Det er opfyldelsen af betingelsen, der afgør, om det er første hold kommandolinjer eller de alternative<br />
linjer, der skal udføres. Se afsnittet ’Betingelsens bestanddele’.<br />
Grønthandlerens eksempel kan opstilles i en XAL-kørsel med nedenstående kode.<br />
IF struktur ved salg af æbler<br />
INT &Antal { Antal solgt }<br />
REAL &PrisIalt { Pris pr. stk * Antal)<br />
PROMPT ”Beregning af pris”,,,<br />
”Indtast antal” GET (&Antal)<br />
INPUT<br />
IF &Antal > 10 THEN<br />
SET &PrisIalt = &Antal * 2.50<br />
ELSE<br />
SET &PrisIalt = &Antal * 3.00<br />
ENDIF<br />
PRINT ”Prisen ialt: ”, &PrisIalt<br />
PAUSE<br />
I eksemplet erklæres der to variabler til antal og pris i alt, og der er opstillet en promptboks til<br />
indtastning af antallet.<br />
Det indtastede antal undersøges i betingelsesstrukturen med IF og bestemmer således den endelige<br />
pris, der udregnes og tildeles variablen &PrisIalt. Til sidst udskrives prisen i alt på skærmen.<br />
Hvis betingelsen er opfyldt, antallet er større end 10, bliver den første sætning udført. Hvis betingelsen<br />
ikke er opfyldt, antallet er mindre end eller lig med 10, bliver den alternative sætning efter ELSE udført.<br />
Betingelsens bestanddele<br />
En betingelse består af to dataelementer og en mellemliggende relationel operator.<br />
Betingelse med to dataelementer og relationel operator<br />
&Antal > 10<br />
I eksemplet er dataelementet på venstre side af operatoren en variabel med navnet &Antal og<br />
dataelementet, på højre side af operatoren er tallet 10. Den relationelle operator er tegnet > (større<br />
end).<br />
Det er vigtigt at de to dataelementer, på hver side af den relationelle operator, er af samme type. Det<br />
nytter f.eks. ikke at sammenligne talværdier med tekster.<br />
De eneste dataelementer, der må være forskellige fra hinanden i betingelsesudtryk, er heltal og<br />
kommatal.<br />
I eksemplet er variablen af typen heltal (INT) og den kan derfor sammenlignes med et heltal (REAL).<br />
Relationelle operatorer i betingelser<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
42
Operator Betydning<br />
>= Større end eller lig med<br />
Større end<br />
== Lig med<br />
Forskellig fra<br />
Ovenstående relationelle operatorer kan anvendes i betingelser.<br />
I næste eksempel består betingelsen af direkte sammenligning med to dataelementer af typen tekst.<br />
Betingelse med sammenligning<br />
STR 10 &Måned { Månedens navn }<br />
PROMPT ”Indtast månedens navn” GET (&Måned)<br />
INPUT<br />
IF &Måned == ”April” THEN<br />
PRINT ”Du valgte April måned.”<br />
ELSE<br />
PRINT ”Du valgte noget andet.”<br />
ENDIF<br />
PAUSE<br />
Bemærk at operatoren består af to lighedstegn efter hinanden. I betingelser anvendes der altid to<br />
lighedstegn, når det skal undersøges om to værdier er ens.<br />
Bemærk ligeledes at teksten på højre side af operatoren er sat i citationstegn. Dette fordi variablen på<br />
venstre side er en tekstvariabel. På denne måde er de to dataelementer af samme type.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
43
Opgaver: Betingelsesstrukturer med IF<br />
Opgave 1: Beregning af lejeværdi for sommerhuse<br />
Formål med opgave<br />
At anvende IF-THEN-ELSE-ENDIF i forbindelse med erklærede variabler<br />
Huskelister<br />
PROMPT<br />
IF-THEN-ELSE<br />
Beskrivelse<br />
I lektionen ’PROMPT grundlæggende brugerdialog’ var der en opgave med en promptboks til<br />
indtastning af værdier i forbindelse med udlejning af sommerhuse.<br />
Der skal bygges videre på denne opgave.<br />
Efter indtastning af relevante data, skal kørslen,ved hjælp af betingelsesstrukturer, beregne<br />
udlejningsprisen afhængigt af beregningsmetoden. Hvorefter prisen udskrives på skærmen.<br />
Variabler (udført i forrige opgave)<br />
Værdi Variabeltype Erklæring i XAL-kørsel<br />
Dage Heltal<br />
DagsPris Kommatal<br />
Metode Tekst<br />
Udlejningspris Kommatal<br />
Brugerdialog (udført i forrige opgave)<br />
Beregningsmetoder<br />
Beregning af udlejningsværdi<br />
Dage ....................:<br />
Dagspris ................:<br />
Metode ..................:<br />
(Weekend, Uge, Dobbeltuge)<br />
Metode Beregning<br />
Weekend Dage * DagsPris + 10%<br />
Uge Dage * DagsPris<br />
DobbeltUge Dage * DagsPris – 30 %<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
44
Udskrift på skærm<br />
Beregning af udlejningsværdi for sommerhuse<br />
-------------------------------------------<br />
Dage ...........: 14<br />
DagsPris .......: 500,00<br />
Metode .........: DobbeltUge<br />
-------------------------------------------<br />
Udlejningspris .: 4.900,00<br />
===========================================<br />
1 Opret en ny XAL kørsel.<br />
Forløb √<br />
2 Kopier alle linjer fra opgaven i den forrige lektion ind i denne XAL kørsel.<br />
3 Foretag ændringer i startkommentarerne i teksten til ’Funktion’, så den svarer til<br />
denne opgave.<br />
4 Opret en ny variabel til den beregnede udlejningspris, hvis den ikke findes i<br />
forvejen.<br />
5 Indsæt betingelsesstrukturer med IF-THEN-ELSE for hver metode som vist i<br />
skemaet ’Beregningsmetoder’ herover.<br />
I hver struktur tildeles den beregnede værdi til variablen for udlejningsprisen.<br />
6 Indsæt en print sætning der kan udskrive den beregnede udlejningspris. Se<br />
udskriften herover.<br />
7 Afprøv kørslen og undersøg om beregningerne udføres korrekt ved anvendelse af<br />
de forskellige metoder.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
45
6. Fasttekster<br />
Mål med lektionen<br />
Formålet med denne lektion er at give deltagerne viden om emnet fasttekster.<br />
Efter lektionen skal kursisterne kunne:<br />
Oprette nye fasttekster<br />
Anvende fasttekster i forbindelse med variabler<br />
Anvende fasttekster i forbindelse med promptbokse<br />
Anvende fasttekster i forbindelse med betingelse i IF strukturer.<br />
Fasttekster generelt<br />
Datatyper<br />
Der findes i XAL-sproget fem datatyper.<br />
Fem datatyper i XAL-sproget<br />
Heltal<br />
Kommatal<br />
Tekst<br />
Dato<br />
Fasttekst<br />
De fire første er tidligere behandlet under lektionen om variabler. I denne lektion behandles den sidste<br />
datatype ’Fasttekst’.<br />
Datatypen Fasttekst<br />
Fastteksttyper er samlinger af faste tekster, der anvendes i XAL-sproget.<br />
Teksterne er faste, idet de så godt som aldrig ændres. De kan benyttes igen og igen i XAL-kørsler,<br />
skærmbilleder og udskrifter.<br />
En samling af tekster kaldes herefter en ’fasttekstype’. Hver fastteksttype har sit eget navn, der som<br />
regel siger noget om, hvilken type tekster den indeholder.<br />
I XAL-sproget kan der oprettes yderligere fastteksttyper, og der kan tilføjes flere tekster til de<br />
eksisterende fastteksttyper.<br />
C5 (vers. 4.1 ->)<br />
Et eksempel på en type, der anvendes mange forskellige steder, er fastteksttypen med navnet ’NoYes’.<br />
Denne type indeholder teksterne ’Nej’ og ’Ja’.<br />
C5 (vers. -> 4.0)<br />
Et eksempel på en type, der anvendes mange forskellige steder, er fastteksttypen med navnet ’NejJa’.<br />
Denne type indeholder teksterne ’Nej’ og ’Ja’.<br />
Fastteksttyper og tekster<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
46
Hver tekst i en fastteksttype har en fast position i en indbyrdes rækkefølge. En fastteksttype er således<br />
en kombination af tekster og deres positioner, som vist i eksemplerne herunder.<br />
Fastteksttypen NoYes<br />
Fastteksttypens navn Position Tekst<br />
NoYes 0 Nej<br />
1 Ja<br />
Den første position i en fastteksttype er altid position nul.<br />
Fastteksttypen ItemType<br />
Fastteksttypens navn Position Tekst<br />
ItemType 0 Vare<br />
1 Ydelse<br />
2 Stykliste<br />
3 SamleListe<br />
Begge fastteksttyper anvendes f.eks. i lagerskærmbilledet i C5 under Lager/Kartotek, hvor typen<br />
’NoYes’ f.eks. anvendes i felterne ”Spærret” (Blocked), ”Engangsvare” (OneTimeItem) og ”Negativ”<br />
(NegativeInventory), og hvor typen ’ItemType’ anvendes i feltet ”Varetype” (ItemType).<br />
Fastteksters anvendelse, i forbindelse med kartoteksfelter, behandles i lektionerne om skærmbilleder.<br />
Efterfølgende behandles fasttekster i forbindelse med variabler, promptbokse og IF strukturer.<br />
Fasttekster i variabler<br />
Erklæring af fasttekst variabler<br />
Variabel typer<br />
Type Indhold<br />
INT Heltal<br />
REAL Kommatal<br />
STR Tekst<br />
DATE Datoer<br />
ENUM Fasttekster<br />
Erklæring af variabler af typen fasttekst udføres ved at angive variablens type, den tilknyttede<br />
fastteksttype og variablens navn.<br />
Syntaks for erklæring af fasttekst variabel<br />
ENUM &<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
47
Under erklæringen angives der variabeltype dvs. ENUM, og variabelnavn foranstilles med &-tegnet.<br />
Desuden skal det angives, hvilken fastteksttype der skal tilknyttes variablen.<br />
Eksempel på erklæring af fasttekst variabel<br />
ENUM NoYes &NegativLagerbeholdning<br />
I eksemplet erklæres en variabel af typen ENUM dvs. fasttekst. Variablen knyttes til fastteksttypen<br />
’NoYes’, og navnet på variablen kaldes &NegativLagerBeholdning.<br />
Tildeling af værdier til fasttekstvariabler<br />
Når variabler af typen ENUM skal tildeles værdier, foregår det på en anden måde end ved andre<br />
variabler. Det er stadig SET kommandoen, der anvendes, men i stedet for at skrive selve teksten angives<br />
tekstens position i fastteksttypen.<br />
Tildeling af værdi til fasttekstvariabel<br />
ENUM NoYes &NegativLagerBeholdning<br />
SET &NegativLagerBeholdning = 1 {Ja}<br />
Variablen &NegativLagerBeholdning tildeles tallet 1, der tilsvarer værdien på position 1 i den<br />
tilhørende fastteksttype ’NoYes’.<br />
Tildelingen kunne også være sket under erklæringen, som i næste eksempel.<br />
Tildeling af værdi til fasttekstvariabel under erklæring<br />
ENUM NejJa &NegativLagerBeholdning = 1 {Ja}<br />
Variabler af typen fasttekst indeholder altså positionen på teksten og ikke selve teksten.<br />
Udskrivning af værdier fra fasttekstvariabler<br />
Når værdier fra fasttekstvariabler udskrives, hentes selve teksten automatisk fra den tilhørende<br />
fastteksttype vha. positionen, der er gemt i variablen.<br />
Det er således teksten fra fastteksttypen, der udskrives og ikke selve positionen.<br />
Udskrivning af værdi fra fasttekstvariabel<br />
ENUM NoYes &NegativLagerBeholdning<br />
SET &NegativLagerBeholdning = 1 {Ja}<br />
PRINT ”Negativt lager ...: ”, &NegativLagerBeholdning<br />
PAUSE<br />
Resultat<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
48
Afvikling<br />
Negativt lager ...: Ja<br />
I eksemplet indeholder variablen &NegativLagerBeholdning tallet 1. Det er dog ikke tallet, der<br />
udskrives, men teksten ’Ja’ der hentes automatisk i den tilhørende fastteksttype.<br />
Når fasttekstvariablers indhold præsenteres på skærmen, omformateres de således iflg. fastteksttypen.<br />
Det er f.eks. tilfældet i print sætninger, promptbokse og skærmbilleder.<br />
Fasttekster i promptboxe<br />
Ved at anvende fasttekstvariabler i promptbokse, opnås der to fordele under afviklingen:<br />
I indtastningsfeltet kan der kun indtastes værdier, der findes i forvejen i den tilhørende<br />
fastteksttype.<br />
Der kan tastes ALT+H og en oversigt over teksterne i den tilhørende fastteksttype vises. En af<br />
teksterne kan vælges og overføres til feltet.<br />
Opsætning af promptbokse med fasttekstvariabler er ikke anderledes end andre promptbokse.<br />
De to ovennævnte faciliteter stilles automatisk til rådighed af systemet, når variabler af typen fasttekst<br />
anvendes.<br />
Fasttekstvariabel i promptboks<br />
ENUM NoYes &NegativLager<br />
PROMPT ”Anvendelse af lager”,,,<br />
”Må lageret gå negativt: ” GET (&NegativLager),<br />
INPUT<br />
Må lageret gå negativt:<br />
Anvendelse af lager<br />
Alt H<br />
NejJa<br />
Nej<br />
Ja<br />
I eksemplet anvendes fastteksttypen ’NoYes’. Når promptboksen vises på skærmen, og der tastes<br />
ALT+H i feltet, kan der vælges mellem teksterne ’Nej’ og ’Ja’ i den tilknyttede fastteksttype. Der kan<br />
kun vælges mellem de tekster, der findes i fastteksttypen.<br />
Selv om der vælges en tekst fra listen, og teksten vises i indtastningsfeltet, vil den bagvedliggende<br />
variabel kun komme til at indeholde nummeret på tekstens placering i fastteksttypen.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
49
Fasttekster i IF strukturer<br />
Da fasttekst variabler ikke indeholder selve teksten men positionen, betyder det, at der i betingelser i IF<br />
strukturer ikke kan sammenlignes med tekster men med positioner.<br />
Fasttekst i IF struktur<br />
ENUM NoYes &NegativLager<br />
PROMPT ”Anvendelse af lager”,,,<br />
”Må lageret gå negativt: ” GET (&NegativLager),<br />
INPUT<br />
IF &NegativLager == 1 THEN<br />
PRINT &NegativLager, ”, lageret må gå negativt”<br />
ELSE<br />
PRINT &NegativLager, ”, lageret må ikke gå negativt”<br />
ENDIF<br />
PAUSE<br />
I eksemplet er variablen &NegativLager en fasttekstvariabel af typen ENUM.<br />
Når kørslen udføres, vil variablen, efter indtastning i promptboksen, enten indeholde tallet 0 eller 1,<br />
afhængigt af hvad der skrives i indtastningsfeltet.<br />
I betingelsen i IF sætningen sammenlignes variablen med et heltal.<br />
I printsætningerne omformateres variablens indhold til teksten ’Ja’ eller ’Nej’.<br />
Vedligeholdelse af fasttekster<br />
Fasttekster kan til hver en tid oprettes, ændres og slettes.<br />
Nye tekster kan dog kun oprettes nederst i listen over tekster i fastteksttypen.<br />
Hvis de skal slettes, kan det kun ske ved at begynde med den sidst oprettede. Derimod kan selve<br />
teksternes ordlyd godt ændres.<br />
Vigtigt!<br />
Der skal udvises stor forsigtighed ved ændring eller sletning, da der nemt kan skabes<br />
uoverensstemmelse mellem de positioner, der gemmes i variabler og kartoteksfelter, og de tekster der<br />
findes i den tilhørende fastteksttype.<br />
Hvis der f.eks. ændres i en fastteksttype, påvirker dette IKKE de værdier, der står rundt omkring i felter<br />
og variabler. Der sker ikke nogen automatisk ændring af disse.<br />
Huskeliste<br />
Der henvises til huskelisterne om fasttekster, for at lære at oprette og vedligeholde disse.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
50
Opgaver: Fasttekster<br />
Opgave 1: Opret en fasttekst<br />
Formål med opgave<br />
At oprette en helt ny fastteksttype med tilhørende faste tekster.<br />
Huskelister<br />
ENUM<br />
Beskrivelse<br />
Opret en fastteksttype med flg. indhold:<br />
Fastteksttypens navn Position Tekst<br />
Beregningsmetode 0 Weekend<br />
1 Uge<br />
2 DobbeltUge<br />
Fastteksttypen skal anvendes til faste beregningsmetoder i kørslen til beregning af udlejningsværdi for<br />
sommerhuse.<br />
1 Opret fastteksttypen som vist i skemaet herover.<br />
Forløb √<br />
2 Indsæt de faste tekster fra skemaet i ovenstående rækkefølge.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
51
Opgave 2: Anvend fasttekst i XAL-kørsel<br />
Formål med opgave<br />
At erklære en variabel af typen ENUM (fasttekst), og at anvende denne i en promptboks og i en IF<br />
struktur.<br />
Huskelister<br />
PROMPT<br />
IF-THEN-ELSE-ENDIF<br />
Beskrivelse<br />
I forrige lektion blev der udarbejdet en XAL kørsel til beregning af udlejningsværdi for sommerhuse.<br />
I promptboksen skulle der indtastes teksten for den beregningsmetode, der skulle anvendes, men hvis<br />
der blev tastet forkert, gav det intet resultat.<br />
I denne opgave skal det ændres således, at der ikke skal tastes teksten på metoden, men være<br />
mulighed for at vælge metoden fra en fastteksttype med ALT+H.<br />
1 Opret en ny XAL kørsel.<br />
Forløb √<br />
2 Kopiér alle linjerne fra opgaven i forrige lektion ind i denne XAL kørsel.<br />
3 Foretag nødvendige ændringer i den nye kørsel, så variablen til metoder ændres<br />
fra at være en tekstvariabel til at være en fasttekst variabel (med fastteksten fra<br />
opgave 1).<br />
4 Foretag nødvendige ændringer i IF-THEN-ELSE sætningerne, så betingelserne i de<br />
forskellige sætninger kommer til at fungere korrekt mht. fasttekstvariablen.<br />
5 Afprøv kørslen med ALT+ H i promptboxen i indtastningsfeltet til metode<br />
variablen, og prøv i et andet forsøg at indtaste en værdi, der ikke findes i<br />
fastteksttypen til metode variablen.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
52
7. Funktioner, grundlæggende<br />
Mål med lektionen<br />
Formålet med denne lektion er at give deltagerne en grundlæggende forståelse for anvendelsen af<br />
funktioner i XAL sproget.<br />
Efter lektionen skal kursisterne kunne<br />
Forstå den grundlæggende opbygning og syntaks til funktioner<br />
Udskrive værdier fra funktioner, tildele værdier fra funktioner til variabler og indbygge funktioner i<br />
hinanden<br />
Anvende funktionerne ToDay(), TimeNow(), Time2Str(), CurUserId() og UserId2Name().<br />
Funktioner generelt<br />
Funktioner er en form for kommandoer, der anvendes til udledning af værdier afhængigt af forskellige<br />
parametre. Der findes f.eks. en funktion, der kan udlede dags dato, og en funktion der kan udlede<br />
navnet på den bruger, der er logget ind i Microsoft Dynamics C5 her og nu.<br />
Typer af funktioner<br />
Der findes følgende grupper af funktioner:<br />
Funktioner til konvertering af datatyper<br />
Funktioner til finansielle beregninger<br />
Funktioner til behandling af kommatal<br />
Funktioner til tekstbehandling<br />
Datobehandlingsfunktioner<br />
Brugerrettigheds- og systemfunktioner<br />
SQL-funktioner<br />
Der henvises til den interne hjælp (<strong>Programmering</strong>smanualen) - Funktioner, for beskrivelse af de<br />
enkelte funktioner.<br />
Opbygning<br />
Virkemåde<br />
Funktioner er mindre programmer, der kaldes eller startes i XAL kørsler. Funktioner udleder værdier,<br />
der returneres til den XAL kørsel, hvorfra de blev kaldt .<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
53
Funktionskald i XAL kørsel<br />
Ved hjælp af overførte parametre kan det bestemmes, hvordan returværdien skal se ud.<br />
Hvor funktioner anvendes uden parametre, returneres der altid en forud bestemt værdi i et bestemt<br />
format eller udseende. Se funktionen Today().<br />
Hvor funktioner anvendes med parametre, anvendes den første parameter ofte til at angive en værdi<br />
f.eks. i form af navnet på en variabel. Med de efterfølgende parametre angives herefter, hvorledes den<br />
første parameter skal behandles inde i funktionen.<br />
På denne måde kan der f.eks. udføres en omformatering af værdien i den første parameter. Se<br />
funktionen Time2Str().<br />
Syntaks<br />
Alle funktioner har et navn, ligesom XAL kommandoer.<br />
I XAL sproget genkendes funktioner ved, at navnet efterfølges af et sæt almindelige parenteser med<br />
eller uden parametre.<br />
Syntaks til funktioner med parametre<br />
Funktionsnavn(parametre)<br />
Funktionsnavn erstattes af funktionens navn, og parametre erstattes af en eller flere parametre. De<br />
indsatte parametre overføres til funktionen, hvor de anvendes til udledningen eller beregningen af den<br />
nye værdi.<br />
Hvis der er flere parametre i parenteserne, skal disse adskilles med kommaer.<br />
Det er ikke alle funktioner, der skal udfyldes med et udtryk inde i parenteserne. I de tilfælde ser<br />
syntaksen sådan ud.<br />
Syntaks til funktioner uden parametre<br />
Funktionsnavn()<br />
XAL kørsel<br />
Funktion(Parametre)<br />
Udledt værdi<br />
Funktion<br />
Udledning eller<br />
beregning af værdier<br />
med de overførte<br />
parametre.<br />
Den udledte værdi<br />
leveres tilbage til XAL<br />
kørslen.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
54
Datatyper i funktioner<br />
Datatyper<br />
I XAL sproget findes der følgende fem datatyper:<br />
Datatype Forklaring<br />
INT Heltal<br />
REAL Kommatal<br />
STR Tekst<br />
DATE Dato<br />
ENUM Fasttekst<br />
Det er vigtigt at forholde sig til hvilke datatyper, der anvendes i funktioner i parametre og returværdier.<br />
Ofte anvendes funktioner til omformatering af én datatype til en anden, som vist i figuren herunder.<br />
Omformatering fra heltal til tekst<br />
Heltal Funktion<br />
Tekst<br />
En sådan omformatering udføres, f.eks. i funktionen Time2Str der anvendes til at omformatere<br />
sekunder siden midnat til en tekst i form af timer, minutter og sekunder.<br />
Omformatering af sekunder til tekst med klokkeslet<br />
Funktionsparametre<br />
39510 Time2Str<br />
”10:58:30”<br />
Funktionsparametrene skal altid angives i den rigtige datatype, da funktionen ellers ikke kan fungere.<br />
Det nytter f.eks. ikke at indsætte en dato, hvis funktionen forventer et heltal.<br />
Det er også vigtigt at kende datatypen på den værdi der udledes. Hvis en udledt værdi f.eks. skal<br />
tildeles til en variabel, er det vigtigt at variablen er af samme værdi som funktionsværdien.<br />
Datatyper i funktionsparametre og udledte værdier angives ofte direkte i syntaksbeskrivelserne.<br />
Syntaks med angivelse af datatyper<br />
Funktionsnavn(parameter:DATATYPE):DATATYPE<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
55
I ovenstående eksempel, på syntaks med angivelse af datatyper, vises det hvordan parametrene<br />
angives i to dele i form af parameter og :DATATYPE.<br />
Det betyder ikke, at begge dele skal angives i funktionskaldet. Teksten :DATATYPE angives kun i<br />
syntaksbeskrivelsen, som forklaring til hvilken datatype parameteren skal være.<br />
Teksten :DATATYPE, efter paranteserne, angiver på samme måde hvilken datatype, returværdien er.<br />
Teksten :DATATYPE skal ikke angives under anvendelsen af funktionskaldet.<br />
Eksempel på syntaks med angivelse af datatyper<br />
Time2Str(t:INT, d1:INT, d2:INT):STR<br />
Eksemplet med funktionen Time2Str() er kun medtaget for, at vise hvorledes datatyper angives i<br />
syntaksbeskrivelser. Selve funktionen uddybes senere i sit eget afsnit.<br />
Alle beskrivelser af funktioner i denne lektion og fremover vil følge denne standard for beskrivelse af<br />
syntakser for funktioner. Samme beskrivelse anvendes desuden i den interne hjælp<br />
(<strong>Programmering</strong>smanualen) - Funktioner.<br />
Funktioner (ToDay(), TimeNow() m.fl.)<br />
ToDay()<br />
Beskrivelse<br />
Funktionen ToDay() returnerer dags dato, der hentes fra computerens ur.<br />
Syntaks<br />
Today():DATE<br />
Parametre<br />
Ingen<br />
Returværdi<br />
Dags Dato i form af datatypen DATE<br />
Eksempel 1: ToDay() i PRINT sætning<br />
PRINT ”Datoen i dag: ”, ToDay()<br />
PAUSE<br />
Resultat<br />
Datoen i dag: 08/06-08<br />
Her indgår funktionen ToDay() direkte i PRINT sætningen.<br />
Eksempel 2: ToDay() i variabler<br />
DATE &DD<br />
SET &DD = ToDay()<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
56
PRINT ”Datoen i dag: ”, &DD<br />
PAUSE<br />
Resultat<br />
Datoen i dag: 08/06-08<br />
Her får variablen &DD sin værdi fra funktionen ToDay().<br />
TimeNow()<br />
Beskrivelse<br />
Funktionen TimeNow() returnerer den aktuelle tid, der hentes fra computerens ur. Tiden returneres<br />
som et antal sekunder siden midnat.<br />
Syntaks<br />
TimeNow():INT<br />
Parametre<br />
Ingen<br />
Returværdi<br />
Antal sekunder siden midnat udtrykt som et heltal i form af datatypen INT<br />
Eksempel 1: TimeNow() i PRINT sætning<br />
PRINT ”Tiden i sekunder siden midnat: ”, TimeNow()<br />
PAUSE<br />
Resultat<br />
Tiden i sekunder siden midnat: 39510<br />
Her anvendes funktionen TimeNow() direkte i PRINT sætningen.<br />
Eksempel 2: TimeNow() i variabler<br />
INT &Sekunder<br />
SET &Sekunder = TimeNow()<br />
PRINT ”Tiden i sekunder siden midnat: ”, &Sekunder<br />
PAUSE<br />
Resultat<br />
Tiden i sekunder siden midnat: 39510<br />
Her får variablen &Sekunder sin værdi fra funktionen TimeNow().<br />
Se også Time2Str().<br />
Time2Str()<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
57
Beskrivelse<br />
Funktionen Time2Str() konverterer en tid til tekst.<br />
Tiden angives i sekunder og teksten der returneres, kan formateres til timer, minutter og sekunder ved<br />
angivelse af forskellige parametre.<br />
Syntaks<br />
Time2Str(t:INT, d1:INT, d2:INT):STR<br />
Parametre<br />
Parameteren t er den tid i sekunder, der skal konverteres til en tekst. Tiden kan f.eks. angives i form af<br />
et helt tal, en variabel eller funktionen TimeNow().<br />
Parameter d1 og d2 er formateringsparametre.<br />
Parameter d1 angiver typen af skilletegn mellem timer, minutter og sekunder.<br />
Parameter d2 angiver 24 timers eller 12 timers AM/PM ur.<br />
Parameterværdier for d1<br />
Værdi Skilletegn<br />
0 Intet skilletegn<br />
1 : (kolon)<br />
2 . (punktum)<br />
3 ’ ’ (space eller blankt tegn)<br />
4 , (komma)<br />
5 / (skråstreg)<br />
Parameterværdi for d2<br />
Værdi Skilletegn<br />
1 24 timers ur<br />
2 12 timers AM/PM ur<br />
Returværdi<br />
Timer, minutter og sekunder udtrykt i en tekststreng i form af datatypen STR. De tre værdier adskilles<br />
med skilletegn som angivet i parametrene.<br />
Eksempel 1: Time2Str() i PRINT sætning<br />
PRINT ”Sekunderne 39510 er klokken: ”, Time2Str(39510,1,1)<br />
PAUSE<br />
Resultat<br />
Sekunderne 39510 er klokken: 10:58:30<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
58
Her anvendes funktionen Time2Str() direkte i PRINT sætningen.<br />
Tallet 39510, er antal sekunder siden midnat og det omformateres ved hjælp af parameter 1 og 2.<br />
Parameteren d1 består af tallet 1, der resulterer i skilletegnet kolon. D2 er også 1, der giver 24 timers<br />
ur.<br />
Eksempel 2: Time2Str() i variabler<br />
STR 8 &Klokken<br />
SET &Klokken = Time2Str(39510,5,1)<br />
PRINT ”Sekunderne 39510 er klokken: ”, &klokken<br />
PAUSE<br />
Resultat<br />
Sekunderne 39510 er klokken: 10/58/30<br />
Her får tekstvariablen &Klokken den værdi, der udledes med funktionen Time2Str().<br />
Parameter d1 er sat til 5, der giver / i det returnerede klokkeslet.<br />
Eksempel 3: Time2Str() med TimeNow() indbygget<br />
PRINT ”Klokken er: ”, Time2Str(TimeNow(),3,1)<br />
PAUSE<br />
Resultat<br />
Klokken er: 10 58 30<br />
Her anvendes funktionen TimeNow() som første parameter i funktionen Time2Str(). Parameter d1 er sat<br />
til 3, hvilket medfører blanke tegn som skilletegn.<br />
Funktionen anvendes direkte i PRINT sætningen.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
59
CurUserId()<br />
Beskrivelse<br />
Funktionen CurUserId() returnerer den aktuelle brugers user-Id. Dvs. det nummer brugeren automatisk<br />
får tildelt, når denne oprettes i C5.<br />
Syntaks<br />
CurUserId():INT<br />
Parametre<br />
Ingen<br />
Returværdi<br />
Den aktuelle brugers user-Id udtrykt i et heltal i form af datatypen INT.<br />
Eksempler<br />
Eksempel 1: CurUserId() i PRINT sætning<br />
PRINT ”Den aktuelle brugers nummer: ”, CurUserId()<br />
PAUSE<br />
Resultat<br />
Den aktuelle brugers nummer: 1<br />
Her anvendes funktionen CurUserId() direkte i PRINT sætningen. Funktionen returnerer brugerens<br />
nummer, der i eksemplet er 1.<br />
Eksempel 2: CurUserId() i variabler<br />
INT &BrugerNummer<br />
SET &BrugerNummer = CurUserId()<br />
PRINT ”Den aktuelle brugers nummer: ”, &BrugerNummer<br />
PAUSE<br />
Resultat<br />
Den aktuelle brugers nummer: 1<br />
Her får variablen &BrugerNummer sin værdi fra funktionen CurUserId().<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
60
UserId2Name()<br />
Beskrivelse<br />
Hver bruger i systemet er identificeret med en user-Id i form af et unikt nummer.<br />
Funktionen UserId2Name omdanner dette nummer til det tilhørende brugernavn<br />
Syntaks<br />
UserId2Name(i1:INT):STR<br />
Parametre<br />
Parameteren i1 skal være et heltal. Kan angives som et heltal, en variabel eller funktionen CurUserId()<br />
Returværdi<br />
Den udledte brugers navn udtrykt som en tekst i form af datatypen STR<br />
Eksempel 1: UserId2Name() i PRINT sætning<br />
PRINT ”Navn på bruger nummer 5: ”, UserId2Name(5)<br />
PAUSE<br />
Resultat<br />
Navn på bruger nummer 5: Anna<br />
Her anvendes funktionen UserId2Name() direkte i PRINT sætningen. Navnet på bruger nummer 5<br />
udledes og udskrives.<br />
Eksempel 2: UserId2Name() i variabler<br />
STR 15 &BrugerNavn<br />
SET &BrugerNavn = UserId2Name(5)<br />
PRINT ”Navn på bruger nummer 5: ”, &BrugerNavn<br />
PAUSE<br />
Resultat<br />
Navn på bruger nummer 5: Anna<br />
Her får variablen &BrugerNavn sin værdi fra funktionen UserId2Name(). Funktionen udleder navnet på<br />
bruger nummer 5. Variablens værdi udskrives herefter i PRINT sætningen.<br />
Eksempel 3: UserId2Name() med CurUserId() indbygget<br />
PRINT ”Navn på aktuel bruger: ”, UserId2Name(CurUserId())<br />
PAUSE<br />
Resultat<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
61
Navn på aktuel bruger: Anna<br />
Her anvendes funktionen UserId2Name() til omformatering af funktionen CurUserId(). Funktionerne<br />
anvendes direkte i PRINT sætningen, og udskriver således navnet på den aktuelle bruger i stedet for<br />
brugerens nummer.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
62
Eksempel<br />
Opgaver: Funktioner<br />
Opgave 1: Funktioner i print sætninger<br />
Formål med opgaven<br />
At opbygge en XAL kørsel der benytter funktionen CurUserId( ) i en PRINT sætning.<br />
Huskelister<br />
Funktion - CurUserId( )<br />
Beskrivelse<br />
Kørslen skal udskrive den nuværende brugers nummer eller ID på skærmen.<br />
1 Opret en ny XAL kørsel.<br />
Nuværende Bruger ID: 1<br />
2 Indsæt og tilret startkommentarer.<br />
Forløb √<br />
3 Lav en PRINT sætning der udskriver den nuværende brugers ID nummer på<br />
skærmen. Udskriftsområdet skal reduceres til at være 30 bred og 5 høj, samt<br />
positioneres på 10,4.<br />
4 Afprøv kørslen og foretag evt. ændringer.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
63
Eksempel<br />
Opgave 2: Funktioner i variabler<br />
Formål med opgaven<br />
At opbygge en kørsel der gemmer resultatet af funktionen Today( ) i én variabel og udskriver denne til<br />
skærmen.<br />
Huskelister<br />
Variabler<br />
Funktion - Today ( )<br />
Beskrivelse<br />
Kørslen skal udskrive dato i dag, dato i går og dato om en uge.<br />
Bemærk! Der skal kun erklæres én variabel.<br />
1 Opret en ny kørsel<br />
DATOER<br />
2 Indsæt og tilret startkommentarer<br />
I dag ...: 10/08-09<br />
I går ...: 09/08-09<br />
Om en uge: 17/08-09<br />
3 Opret en variabel der kan indeholde datoer<br />
4 Indsæt med TODAY() dags dato i variablen under erklæringen<br />
Forløb √<br />
5 Udskriv resultatet på skærmen som vist i eksemplet. Udskrifts området skal<br />
reduceres til at være 40 bred og 5 høj, samt positioneres på 10,5<br />
6 Med SET kommandoen tildeles funktionen TODAY()-1 til variablen og udskrives<br />
7 Med SET kommandoen tildeles funktionen TODAY()+7 til variablen og udskrives<br />
8 Afprøv kørslen og foretag evt. ændringer<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
64
Eksempel<br />
Opgave 3: Funktioner indbygget i hinanden<br />
Formål med opgaven<br />
At opbygge en kørsel der udskriver forskellige typer funktioner til skærmen (TimeNow( ), Time2Str( ),<br />
Today( ), CurUserID( ) og UserID2Name( )).<br />
Huskelister<br />
Funktion - TimeNow( )<br />
Funktion - Time2Str( )<br />
Funktion - Today( )<br />
Funktion - CurUserID( )<br />
Funktion - UserID2Name( )).<br />
Beskrivelse<br />
Kørslen skal udskrive den nuværende brugers ID og navn, samt dags dato og klokkeslæt.<br />
1 Opret en ny kørsel<br />
2 Indsæt og tilret startkommentarer<br />
Bruger ID: 1 Bruger navn: Supervisor<br />
Dato....: 10/08-99<br />
Klokken.: 11:25:45<br />
Forløb √<br />
3 Udskriv resultatet på skærmen som vist i eksemplet. Udskriftsområdet skal<br />
reduceres til at være 40 bred og 5 høj, samt positioneres på 10,5<br />
4 Bemærk, at udskriften skal indeholde en funktion inden i en funktion, f.eks. ved<br />
Brugers navn og Tid. Tiden skal desuden udformes med kolon som skilletegn<br />
mellem timer, minutter og sekunder)<br />
5 Afprøv kørslen og foretag evt. ændringer<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
65
Eksempel<br />
Opgave 4: Stopur<br />
Formål med opgaven<br />
At opbygge en kørsel der benytter funktionerne TimeNow() og Time2Str() til at danne et stopur.<br />
Huskelister<br />
Funktion - TimeNow()<br />
Funktion - Time2Str()<br />
Beskrivelse<br />
Der skal dannes en kørsel der viser tiden mellem to pauser, idet pauserne anvendes til start og stop af<br />
uret.<br />
Tast for at starte og stoppe uret!<br />
Tid: 00:01:35<br />
1 Opret en ny kørsel<br />
2 Indsæt og tilret startkommentarer<br />
3 Opret to heltalsvariabler &Start og &Stop<br />
Forløb √<br />
4 Opret en PRINT sætning med teksten ”Tast for at starte og stoppe uret!”<br />
5 Der skal anvendes PAUSE kommandoer i forbindelse med start og stop af uret<br />
6 Efter første PAUSE tildeles startvariablen tiden med TIMENOW() og efter næste<br />
PAUSE tildeles stopvariablen tiden med TIMENOW()<br />
7 I printsætningen med ordet ”Tid: ” trækkes de to variabler fra hinanden for, at vise<br />
hvor mange sekunder der gik. (Afprøv kørslen.)<br />
8 Anvend TIME2STR() for at vise tiden i timer, minutter og sekunder.<br />
Afprøv kørslen igen.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
66
8. Brugerdialog med BOX, grundlæggende<br />
Formål<br />
Formålet med denne lektion er at give deltagerne grundlæggende viden om funktionen BOX(), der<br />
anvendes til brugerdialoger.<br />
Efter lektionen skal kursisterne kunne<br />
Anvende funktionen BOX() med type 1 og 2 til udskrivning af informationer og advarsler.<br />
Generelt<br />
I XAL kørsler er der ofte behov for at standse kørslen og give brugeren en besked i form af generel<br />
information eller en advarsel.<br />
Denne funktionalitet kan opnås ved anvendelse af funktionen BOX().<br />
Funktionen har forskellige anvendelsesmåder, og kan udføres i fire forskellige typer.<br />
I denne lektion gennemgås den grundlæggende anvendelse af type 1 og 2 i funktionen BOX().<br />
Bokstyper i denne lektion<br />
Type Funktion Farve<br />
1 Infoboks Grå<br />
2 Advarselsboks Rød<br />
Syntaks BOX()<br />
Box() er en funktion og skal behandles på samme måde som alle andre funktioner i XAL sproget.<br />
Syntaksen er derfor også den samme, idet funktionsnavnet skal efterfølges af to paranteser med<br />
parametre.<br />
Generel syntaks for funktioner med parametre<br />
Funktionsnavn(parametre)<br />
Se yderligere forklaring i lektionen ’Funktioner, grundlæggende’.<br />
De parametre, der indgår i funktioner, er forskellige for hver enkelt funktion, idet parametrene<br />
bestemmer hvad, der kommer ud af funktionen.<br />
Parametre og funktionen BOX() typerne 1 og 2<br />
BOX() indeholder altid tre parametre, som vist herunder.<br />
Syntaks for funktionen Box()<br />
Box(type:INT,tekst:STR,std:INT):INT<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
67
Når Box funktionen anvendes i XAL sproget, skal den aktiveres med kommandoen SET eller PRINT, som<br />
vist i næste afsnit.<br />
BOX() typerne 1 og 2<br />
Funktionen BOX() typerne 1 og 2 returnerer en grå informationsboks eller en rød advarselsboks.<br />
Boksen indeholder en tekst som brugeren, programmøren, bestemmer på forhånd ved opsætning af<br />
boksen.<br />
Selve boksen virker som en PAUSE, idet boksen vises på skærmen, indtil der tastes Enter eller Return.<br />
Syntaks<br />
Box(type:INT, tekst:STR, std:INT):INT<br />
Parametre<br />
Parameter nr Datatype Betydning<br />
1 INT 1 = Grå infoboks<br />
2 = Rød advarselsboks<br />
2 STR Tekst der skal stå i boksen. Skal altid stå i citationstegn.<br />
Linjeskift udføres med \n. Se eks.<br />
3 INT 1 = Nummer på knap i boks<br />
Returværdi<br />
(Der er kun én med teksten ’OK’)<br />
Den angivne returværdi er et heltal i form af datatypen INT. Returværdien har ingen praktisk betydning<br />
ved BOX() typerne 1 og 2.<br />
Se eksempler nedenfor.<br />
Eksempel på BOX(1) infoboks<br />
{Forfatter……………: Jens Olsen}<br />
{Dato…………………………: 05.12.2011}<br />
{C5 version ………: 2012}<br />
SET Box(1,”Kørslen startes ved at taste ”,1)<br />
Resultat<br />
Kørslen startes ved at taste <br />
OK<br />
I dette eksempel vises en infoboks. Det tænkes, at der er flere linjer efter SET kommandoen.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
68
Eksempel på BOX(2) advarselsboks<br />
{Forfatter……………: Jens Olsen}<br />
{Dato…………………………: 05.12.2011}<br />
{C5 version ………: 2012}<br />
SET Box(1,”Kørslen stoppes nu!”,1)<br />
Resultat<br />
I dette eksempel udskrives der en advarselsboks. Eksemplet er her kun tænkt som en advarsel om, at<br />
kørslen ikke er længere.<br />
Eksempel på BOX(1) infoboks med tekst i flere linjer<br />
{Forfatter……………: Jens Olsen}<br />
{Dato…………………………: 05.12.2011}<br />
{C5 version ………: 2012}<br />
SET Box(1,”Beregning af kostpriser\nTast for<br />
start”,1)<br />
Resultat<br />
Kørslen stoppes nu!<br />
OK<br />
Beregning af kostpriser<br />
Tast for start<br />
OK<br />
I dette eksempel vises en infoboks med flere linjer. Linjeskift indsættes med tekstkommandoen ”\n”.<br />
Når XAL kørslen afvikles og teksten læses vil ”\n” medføre, at der skiftes linje. Linjeskift kan indsættes<br />
hvor som helst og flere gange i teksten, hvis der skal være flere linjer i boksen.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
69
Opgaver: Brugerdialog med BOX, grundlæggende<br />
Opgave 1: Bokse anvendt i eksempel<br />
Formål med opgaven<br />
At anvende info- og advarselsbokse i en kørsel sammen med IF sætninger og variabler.<br />
Huskelister<br />
Box<br />
Beskrivelse<br />
Der skal oprettes en kørsel til beregning af salgspris i alt. Kørslen skal starte med en infoboks, med<br />
informationer om hvad kørslen udfører. Derefter vises en promptboks, hvor brugeren skal kunne<br />
indtaste varenavn, antal og pris pr. stk.<br />
Programmet udregner dernæst en total for pågældende køb.<br />
Hvis der tastes en kombination af antal og pris, der giver en total på nul eller mindre, skal der udskrives<br />
en advarsels boks, der orienterer brugeren om, at totalen ikke kan regnes ud, ellers skal totalen<br />
udskrives på skærmen.<br />
Infoboks med forklaring til kørsel<br />
Kørslen udregner samlet salgspris ved at<br />
multiplicere antal og pris.<br />
Promptboks<br />
Varenavn :<br />
Antal ...:<br />
Pris ....:<br />
Advarselsboks<br />
Totalen kan ikke udregnes!<br />
Antal eller pris er lig med eller mindre<br />
end nul.<br />
Udskrift<br />
Varenavn : Bananer<br />
Antal ...: 10<br />
Pris ....: 2.50<br />
Total ...: 25.00<br />
OK<br />
Prisberegning<br />
OK<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
70
1 Opret en ny kørsel. Indsæt og tilret startkommentarer<br />
2 Opret variabler til Varenavn, Antal, Pris og Total<br />
3 Indsæt en infoboks som vist herover<br />
Forløb √<br />
4 Opret en promptboks til indtastning af Varenavn, Antal og Pris som vist herover<br />
5 Tildel udregning af Antal * Pris til Total variablen<br />
6 Undersøg i en IF struktur om total blev nul eller mindre<br />
7 Hvis totalen er nul eller mindre, skal der udskrives en advarselsboks som vist<br />
herover<br />
8 Hvis totalen er større end nul, udskrives Varenavn, Antal, Pris og Total på skærmen,<br />
som vist i udskriften herover<br />
9 Go<strong>dk</strong>end og afprøv kørslen<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
71
9. Kartoteksgennemløb, grundlæggende<br />
Mål med lektionen<br />
Formålet med denne lektion er at give deltagerne grundlæggende viden om kartoteksgennemløb til<br />
fremfinding af poster i givne kartoteker.<br />
Efter lektionen skal kursisterne kunne:<br />
Udføre kartoteksgennemløb med SEARCH på ét kartotek ad gangen<br />
Udskrive oplysninger på skærmen fra det valgte kartotek<br />
Sortere kartoteksposter med USING og ORDER<br />
Afgrænse kartoteksposter med WHERE.<br />
Generelt om kartoteker<br />
Et kartotek er opbygget af en række poster, hvor hver post indeholder en række felter med<br />
informationer. Et lagerkartotek kan f.eks. indeholde felter som varenummer, varenavn, kostpris osv.<br />
Eksemplet herunder viser et antal tænkte poster i et lagerkartotek.<br />
Eksempel på et lagerkartotek<br />
Post nr. Varenummer Varenavn Kostpris Andre<br />
felter<br />
1 18000 Kabinet 1.250,20 -<br />
2 8000 Harddisk type 1 2.520,75 -<br />
3 16000 Ram 520,40 -<br />
4 12000 Harddisk type 2 1.230,75 -<br />
5 14000 CD romdrev 50,10 -<br />
6 20000 Skærm 1.000,10 -<br />
osv. osv. osv. osv. -<br />
Når der oprettes nye varer i lagerkartoteket, svarer det til at oprette nye poster.<br />
Posterne i kartoteket ligger som standard sorteret i den rækkefølge, hvori de indtastes.<br />
For at danne et udtræk af poster i et kartotek er det nødvendigt at udføre et kartoteksgennemløb.<br />
Under gennemløbet stilles hver enkelt post til rådighed for XAL kørslen, og det kan f.eks. vælges om<br />
posten skal springes over, eller om den skal medtages og udskrives.<br />
Kartoteksgennemløb udføres med kommandoen SEARCH.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
72
SEARCH<br />
Kommandoen SEARCH anvendes til gennemløb af poster i kartoteker efter følgende syntaks.<br />
Syntaks for SEARCH<br />
SEARCH <br />
<br />
END<br />
Kartoteksgennemløb startes altid med kommandoen SEARCH og sluttes altid med END.<br />
SEARCH efterfølges desuden af navnet på det kartotek, der skal gennemløbes.<br />
Når kommandoen bruges isoleret, løbes samtlige poster i kartoteket igennem, uden at der sker andet.<br />
Gennemløbet foregår i indtastningsrækkefølgen.<br />
C5 version 4.1 -> Eksempel på isoleret kartoteksgennemløb af lagerkartoteket<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 05.12.2011}<br />
{C5 Version......: 2012}<br />
SEARCH InvenTable<br />
END<br />
C5 version -> 4.1 Eksempel på isoleret kartoteksgennemløb af lagerkartoteket<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 25.08.2007}<br />
{C5 Version......: 4.00}<br />
SEARCH LagKart<br />
END<br />
Hver gang en post findes frem i kartoteksgennemløbet, stilles samtlige feltværdier i posten til rådighed<br />
for XAL kørslen. Disse værdier kan anvendes på forskellig vis, f.eks. kan de udskrives på skærmen med<br />
PRINT.<br />
Det er dog vigtigt, at PRINT kommandoen placeres det rigtige sted i forhold til SEARCH og END.<br />
I forbindelse med PRINT angives navnene på de kartoteksfelter, hvis indhold skal udskrives.<br />
I en søgeløkke er felterne tilgængelige, så længe kartoteket er aktivt, og det er det inde i søgeløkken<br />
mellem SEARCH og END.<br />
XAL:Søgeløkke med udskrivning af feltværdier<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 25.08.1999}<br />
{XAL Version.....: 3.50}<br />
SEARCH InvenTable<br />
PRINT ItemNumber,” ”,ItemName,” ”,CostPrice<br />
END<br />
PAUSE<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
73
Kartoteket, der gennemløbes i dette eksempel, er lagerkartoteket og felterne der udskrives, er<br />
ItemNumber, ItemName og CostPrice. Selve PRINT sætningen er sat op inde i SEARCH løkken.<br />
Ved en eksekvering af ovenstående vil skærmen f.eks. se ud som følger:<br />
C5: Søgeløkke med udskrivning af feltværdier<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 25.08.1999}<br />
{C5 Version......: 4.00}<br />
SEARCH LagKart<br />
PRINT VareNummer,” ”,VareNavn1,” ”,KostPris<br />
END<br />
PAUSE<br />
Kartoteket, der gennemløbes i dette eksempel, er lagerkartoteket og felterne der udskrives, er<br />
VareNummer, VareNavn1 og KostPris. Selve PRINT sætningen er sat op inde i SEARCH løkken.<br />
Ved en eksekvering af ovenstående vil skærmen f.eks. se ud som følger:<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
74
Resultat<br />
18000 Kabinet 1.250,20<br />
8000 Harddisk type 1 2.520,75<br />
16000 Ram 520,40<br />
12000 Harddisk type 2 1.230,75<br />
14000 CD romdrev 50,10<br />
20000 Skærm 1.000,10<br />
Bemærk at kartoteksposterne, her i form af varer, ikke ser ud til at være udskrevet i en bestemt<br />
rækkefølge. Hvis der ikke angives andet, udskrives posterne i den rækkefølge, som de er indtastet i.<br />
Kommandoen PRINT AT kan evt. anvendes til udskrivning af felterne i kolonner.<br />
Sortering af poster i kartoteksgennemløb udføres med kommandoerne USING og ORDER, der<br />
behandles efterfølgende.<br />
Sortering med USING<br />
Alle kartoteker kan indeholde ét eller flere indexer, der anvendes til sortering af kartotekernes indhold<br />
af poster.<br />
Findes der ikke nogen indexer på et kartotek, kan dets poster kun gennemløbes og vises i den<br />
rækkefølge de er indtastet i.<br />
Hvert indeks repræsenterer en sorteringsrækkefølge for det pågældende kartotek. Lagerkartoteket kan<br />
f.eks. indeholde indekserne, som vist herunder.<br />
Index på InvenTable (Lagerkartotek) i C5 vers. 2012 -><br />
Navn på index Sorteringsnøgler i for af felter<br />
ItemIdx ItemNumber<br />
GroupIdx Group, ItemNumber<br />
NameIdx ItemName1<br />
ItemTypeIdx ItemType<br />
TariffIdx TariffNumber<br />
AltItemIdx AltItemIdx<br />
PayCTypeItemIdx PayCType, CostType, ItemNumber<br />
CTypePayItemIdx CostType, PayCType, ItemNumber<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
75
Index på LagKart (Lagerkartotek) i C5 vers. -> 4.1<br />
Navn på index Sorteringsnøgler i for af felter<br />
VareIdx VareNummer<br />
GrpVarIdx Gruppe, VareNummer<br />
NavnIdx VareNavn1<br />
VareTypeIdx VareType<br />
ToldIdx ToldPosition<br />
AltVareIdx AltVare<br />
Indexer anvendes således til at skabe hurtige gennemløb af kartoteker, og til at vise kartoteksposter i<br />
forskellige rækkefølger på skærmen.<br />
Indekser i søgeløkker<br />
I søgeløkker anvendes kommandoen USING til at angive, hvilket af disse faste indekser der skal sorteres<br />
efter, som vist i nedenstående eksempel på syntaks.<br />
Syntaks for SEARCH med USING<br />
SEARCH USING <br />
<br />
END<br />
Bemærk at kommandoen USING og indexnavn angives lige efter kartoteksnavnet.<br />
Et gennemløb af lagerkartoteket kan f.eks. udføres efter et af de indekser, der er oprettet og beskrevet<br />
i ovenstående skema.<br />
C5 vers. 2012 -> Eksempel på kartoteksgennemløb med sortering efter fast index<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 05.12.2011}<br />
{C5 Version......: 2012}<br />
SEARCH InvenTable USING ItemIdx<br />
PRINT ItemNumber, ” ”, ItemName1, ” ”, CostPrice<br />
END<br />
PAUSE<br />
I ovenstående eksempel anvendes indexet ItemIdx på kartoteket ItemTable til sortering af posterne i<br />
varenummerorden.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
76
C5 vers. -> 4.1 Eksempel på kartoteksgennemløb med sortering efter fast index<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 25.08.2007}<br />
{C5 Version......: 4.00}<br />
SEARCH LagKart USING VareIdx<br />
PRINT VareNummer, ” ”, VareNavn1, ” ”, KostPris<br />
END<br />
PAUSE<br />
I ovenstående eksempel anvendes indexet VareIdx på kartoteket LagKart til sortering af posterne i<br />
varenummerorden.<br />
Resultatet af begge eksempler vises herunder.<br />
Resultat af sortering af varer i nummerorden efter indexene ItemIdx / VareIdx.<br />
8000 Harddisk type 1 2.520,75<br />
12000 Harddisk type 2 1.230,75<br />
14000 CD romdrev 50,10<br />
16000 Ram 520,40<br />
18000 Kabinet 1.250,20<br />
20000 Skærm 1.000,10<br />
Gennemløb af kartoteker kan ikke alene udføres vha. af de faste indekser, men også direkte på<br />
kartoteksfelter med kommandoen ORDER, der behandles efterfølgende.<br />
Sortering med ORDER<br />
ORDER anvendes ligesom USING også til sortering af poster i kartoteksgennemløb.<br />
Hvor USING anvendes til faste indekser, anvendes ORDER, når der skal sorteres direkte efter enkelte<br />
kartoteksfelter.<br />
Ved anvendelse af ORDER dannes der først et midlertidigt index, inden gennemløbet startes. ORDER<br />
kan anvende et hvilket som helst felt i kartoteket.<br />
ORDER anvendes således, hvor der ikke findes et fast index. I nedenstående eksempel, skal posterne<br />
f.eks. sorteres i beløbsorden efter feltet KostPris, som der ikke findes et fast index på:<br />
C5 vers. 2012-> Eksempel på kartoteksgennemløb med sortering efter kartoteksfelt<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 05.12.2011}<br />
{C5 Version......: 2012}<br />
SEARCH InvenTable<br />
ORDER BY CostPrice<br />
PRINT ItemNumber, ” ”, ItemName1, ” ”, CostPrice<br />
END<br />
PAUSE<br />
C5 vers. -> 4.1 Eksempel på kartoteksgennemløb med sortering efter kartoteksfelt<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
77
{Forfatter.......: Jens Olsen}<br />
{Dato............: 25.08.2007}<br />
{C5 Version......: 4.00}<br />
SEARCH LagKart<br />
ORDER BY KostPris<br />
PRINT VareNummer, ” ”, VareNavn1, ” ”, KostPris<br />
END<br />
PAUSE<br />
Resultat af kartoteksgennemløb med sortering efter kartoteksfelt<br />
14000 CD romdrev 50,10<br />
16000 Ram 520,40<br />
20000 Skærm 1.000,10<br />
12000 Harddisk type 2 1.230,75<br />
18000 Kabinet 1.250,20<br />
8000 Harddisk type 1 2.520,75<br />
Kommandoerne USING og ORDER anvendes således til sortering af poster i kartoteksgennemløb. Skal<br />
der derimod afgrænses i posterne, udføres dette med kommandoen WHERE, der behandles<br />
efterfølgende.<br />
Afgrænsning med WHERE<br />
Med kommandoen WHERE kan der afgrænses på de poster, der skal udsøges i en søgeløkke. Der kan<br />
således udvælges et antal poster til behandling i gennemløbet. Syntaksen for anvendelse af WHERE er<br />
som følger:<br />
Syntaks for SEARCH med WHERE<br />
SEARCH <br />
WHERE <br />
<br />
END<br />
Kommandoen WHERE efterfølges af en betingelse, der skal opfyldes for, at de enkelte poster skal<br />
medtages i gennemløbet eller ej.<br />
Betingelsen kan f.eks. bestå af navnet på et kartoteksfelt og en værdi, der kan sammenlignes med<br />
indholdet i det angivne felt. De to værdier kan sammenlignes med hinanden med tegnene i<br />
nedenstående skema.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
78
Relationelle operatorer i betingelser<br />
Operator Betydning<br />
>= Større end eller lig med<br />
Større end<br />
== Lig med<br />
Forskellig fra<br />
I nedenstående eksempel anvendes den relationelle operator >=.<br />
I eksemplet udvælges således kun poster, der er større end eller lig med ”10000”.<br />
C5 vers. 2012 -> Eksempel på afgrænsning af poster >= ”10000”<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 05.12.2011}<br />
{C5 Version......: 2012}<br />
SEARCH InvenTable<br />
WHERE ItemNumber >= ”10000”<br />
PRINT ItemNumber, ” ”, ItemName1, ” ”, CostPrice<br />
END<br />
C5 vers. -> 4.1: Eksempel på afgrænsning af poster >= ”10000”<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 25.08.2007}<br />
{C5 Version......: 4.00}<br />
SEARCH LagKart<br />
WHERE VareNummer >= ”10000”<br />
PRINT VareNummer, ” ”, VareNavn1, ” ”, KostPris<br />
END<br />
I dette eksempel gennemløbes lagerkartoteket med SEARCH, og WHERE anvendes til at udvælge de<br />
poster ud, hvis varenummer er større end eller lig med 10000.<br />
Varenummeret står i citationstegn fordi varenumre i C5 er alfanumeriske, hvilket betyder, at de er<br />
tekster.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
79
C5 vers. 2012 -> Eksempel på afgrænsning af poster >= ”10000” og sortering med USING<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 05.12.2011}<br />
{C5 Version......: 2012}<br />
SEARCH InvenTable USING ItemIdx<br />
WHERE ItemNumber >= ”10000”<br />
PRINT ItemNumber, ” ”, ItemName1, ” ”, CostPrice<br />
END<br />
C5 vers. -> 4.1 Eksempel på afgrænsning af poster >= ”10000” og sortering med USING<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 25.08.2007}<br />
{C5 Version......: 4.00}<br />
SEARCH LagKart USING VareIdx<br />
WHERE VareNummer >= ”10000”<br />
PRINT VareNummer, ” ”, VareNavn1, ” ”, KostPris<br />
END<br />
Når der afgrænses med WHERE, og der samtidig sorteres med USING eller ORDER, er det vigtigt at<br />
disse kommandoer placeres rigtigt i forhold til hinanden.<br />
Som det fremgår af ovenstående eksempel, skal sorteringskommandoerne således altid stå efter<br />
kartoteksnavnet, men før WHERE kommandoen.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
80
Opgaver: Kartoteksgennemløb, grundlæggende<br />
Opgave 1: Søgeløkke med sortering / afgrænsning<br />
Formål med opgaven<br />
Der skal udarbejdes et kartoteksgennemløb, der afprøves med sortering på både index og felt.<br />
Huskelister<br />
SEARCH-END<br />
SEARCH-END med USING INDEX<br />
SEARCH-END med ORDRE<br />
Beskrivelse<br />
Der skal opbygges en kørsel, der gennemløber kartoteket CustTable og på skærmen udskriver værdier<br />
fra felterne Account, Name og BalanceMST.<br />
Gennemløbet skal sorteres ud fra et index og derefter ud fra et felt. Desuden skal der indsættes en<br />
afgrænsning, så der kun medtages poster fra og med et bestemt kontonummer.<br />
Eksempel på udskrift<br />
10 Dan Rasmussen 38.855,00<br />
20000 Central Kopiering 142.412,50<br />
33344 Computer Hjemme Service A/S 5.311.501,50<br />
100000 Autotester A/S 6.229,00<br />
230896 DebTest Gruppen 38.346,00<br />
42983214 Superfos Korn A/S 1.984.821,20<br />
45934545 IBM Danmark A/S 734.640,00<br />
45999300 Microsoft Data A/S 7.000,00<br />
228729910 Foto og Computer A/S 0,00<br />
1 Opret en ny kørsel. Indsæt og tilret startkommentarer<br />
Forløb I C5 √<br />
2 Opret med SEARCH en søgeløkke, der kan gennemløbe kartoteket CustTable<br />
(debitor) og udskriv felterne Account, Name og BalanceMST. Afprøv XAL kørslen<br />
3 Anvend USING til at sortere efter indexet AccountIdx, der sorterer i<br />
kontonummerorden.<br />
NB: Prøv F8 tasten for at hente et fast index fra kartoteket<br />
Afprøv XAL kørslen<br />
4 Fjern USING og anvend ORDER til at sortere efter feltet BalanceMST, så debitorerne<br />
vises i beløbsorden. Afprøv kørslen<br />
5 Tilføj en afgrænsning ved hjælp af WHERE, så der kun medtages poster med Konto<br />
større end eller lig med 36-12, og sortér efter indexet AccountIdx<br />
Afprøv kørslen<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
81
10. Brugerdialog med kartoteksopslag<br />
Mål med lektionen<br />
Formålet med denne lektion er at give deltagerne en yderligere forståelse for anvendelsen af<br />
brugerdialoger med PROMPT, idet deltagerne lærer at foretage hjælpeopslag i indtastningsfelter.<br />
Efter lektionen skal kursisterne kunne:<br />
Opbygge promptbokse med hjælpeopslag således, at der i indtastningsfelter ved hjælp af ALT+H,<br />
kan overføres værdier fra felter i kartoteker til variabler i promptbokse<br />
Opbygge promptbokse med hjælpeopslag og anvende de overførte feltværdier til afgrænsning af<br />
poster i søgeløkker.<br />
PROMPT grundlæggende repetition<br />
I den grundlæggende anvendelse af PROMPT kommandoen, opbygges der en dialogboks, dvs. en<br />
promptboks med overskrift, ledetekster og et eller flere indtastningsfelter.<br />
Promptboks med ét indtastningsfelt<br />
En promptboks skal altid bestå af mindst ét indtastningsfelt. For hvert indtastningsfelt skal der desuden<br />
altid erklæres en variabel.<br />
Når der indsættes værdier i indtastningsfelterne, opfanges disse værdier i de bagvedliggende variabler<br />
med GET kommandoen, som vist i eksemplet nedenfor.<br />
C5 vers. 2012 -> Eksempel på XAL kørsel med promptboks<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 05.12.2011}<br />
{C5 Version......: 2012}<br />
{Erklæring af variabel}<br />
Str 10 &VareNr<br />
Udsøgning af lagervarer<br />
Varenummer.....:<br />
{Brugerdialog}<br />
PROMPT ”Udsøgning af lagervarer”,,,<br />
”Fra varenummer: ”GET(&VareNr)<br />
INPUT AT 15,5<br />
PRINT ”Varenummer: ”, &VareNr<br />
PAUSE<br />
I ovenstående eksempel er det tekstvariablen &VareNr, der med GET modtager input fra<br />
indtastningsfeltet i promptboksen og den indtastede værdi udskrives på skærmen.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
82
Resultat af indtastning i promptboks.<br />
Varenummer: 10000<br />
I dette eksempel forudsættes det, at der indtastes værdien 10000 i indtastningsfeltet i promptboksen,<br />
hvorefter værdien udskrives på skærmen.<br />
Som vist i ovenstående eksempel kan de værdier, der indtastes i promptbokse udskrives på skærmen<br />
med PRINT kommandoen.<br />
Promptboksen kan imidlertid også anvendes i forbindelse med afgrænsning af poster i søgeløkker.<br />
PROMPT til afgrænsning i SEARCH<br />
Kartoteksgennemløb med fast afgrænsning<br />
I kartoteksgennemløb er det ofte kun udvalgte poster, der skal behandles. Ved et gennemløb af<br />
lagerkartoteket skal der f.eks., kun behandles poster med varenummer større end ”10000”.<br />
I XAL kørsler udføres gennemløbet med kommandoen SEARCH, og der kan udføres faste<br />
afgrænsninger med WHERE.<br />
C5 vers. 2012 -> Eksempel på kartoteksgennemløb med fast afgrænsning<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 05.12.2011}<br />
{C5 Version......: 2012}<br />
SEARCH InvenTable<br />
WHERE ItemNumber > ”10000”<br />
PRINT ItemNumber, ” ”, ItemName1<br />
END<br />
I dette eksempel afgrænses posterne med WHERE, idet den opstillede betingelse medfører, at kun<br />
poster med ItemNumber > ”10000” medtages og udskrives.<br />
C5 vers. -> 4.1 Eksempel på kartoteksgennemløb med fast afgrænsning<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 25.08.2007}<br />
{C5 Version......: 4.00}<br />
SEARCH LagKart<br />
WHERE VareNummer > ”10000”<br />
PRINT VareNummer, ” ”, VareNavn1<br />
END<br />
I dette eksempel afgrænses posterne med WHERE, idet den opstillede betingelse medfører, at kun<br />
poster med VareNummer > ”10000” medtages og udskrives.<br />
Problem for brugere<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
83
I dagligdagen kan XAL kørslen, i ovenstående eksempel, være tung at håndtere for brugerne, idet der<br />
altid kun medtages varer, hvor varenummeret er større end ”10000”.<br />
Hvis der skal foretages andre afgrænsninger, og brugerne ikke selv kan eller må rette i XAL kørslen, skal<br />
der først tages fat i supervisoren eller en programmør, der kan udføre de nødvendige ændringer.<br />
Løsning<br />
Problemet kan løses ved at udvide XAL kørslen med en brugerstyret afgrænsning i form af en<br />
promptboks med et indtastningsfelt, hvori der kan indtastes et nyt varenummer, hver gang kørslen<br />
afvikles.<br />
Kartoteksgennemløb med brugerstyret afgrænsning<br />
Kartoteksgennemløb med brugerstyret afgrænsning udføres ved at indsætte en promptboks i XAL<br />
kørslen lige før kartoteksgennemløbet. I promptboksen kan brugeren så indtaste og styre de værdier,<br />
der skal afgrænse kartoteksgennemløbet.<br />
Promptboks til indtastning af værdier for kartoteksgennemløb<br />
Udsøgning af lagervarer<br />
Fra varenummer:<br />
I denne promptboks har brugeren mulighed for at indtaste et varenummer.<br />
Den værdi, der indtastes i feltet, modtages af den bagved liggende variabel. Ved at indsætte variablen i<br />
WHERE sætningen i stedet for det faste varenummer, er det brugerens varenummer, der anvendes til<br />
afgrænsningen i stedet for den faste værdi.<br />
C5 vers. 2012 ->Eksempel på kartoteksgennemløb med brugerstyret afgrænsning<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 05.12.2011}<br />
{C5 Version.....:. 2012}<br />
{Erklæring af variable}<br />
Str 10 &Fravarenr<br />
PROMPT ”Udsøgning af lagervarer”,,,<br />
”Fra varenummer: ”GET(&Fravarenr)<br />
INPUT AT 15,5<br />
SEARCH InvenTable<br />
WHERE ItemNumber > &Fravarenr<br />
PRINT ItemNumber, ” ”, ItemName1<br />
END<br />
Her anvendes variabelen i promptboksen til at modtage værdier med GET og i SEARCH anvendes<br />
variablen i WHERE i afgrænsningsbetingelsen. XAL kørslen medtager således kun poster, hvor<br />
varenummeret er større end, den værdi der indtastes i promptboksen.<br />
C5 vers. -> 4.1 Eksempel på kartoteksgennemløb med brugerstyret afgrænsning<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
84
{Forfatter.......: Jens Olsen}<br />
{Dato............: 25.08.2007}<br />
{C5 Version......: 4.00}<br />
{Erklæring af variable}<br />
Str 10 &Fravarenr<br />
PROMPT ”Udsøgning af lagervarer”,,,<br />
”Fra varenummer: ”GET(&Fravarenr)<br />
INPUT AT 15,5<br />
SEARCH LagKart<br />
WHERE VareNummer > &Fravarenr<br />
PRINT VareNummer, ” ”, VareNavn1<br />
END<br />
Her anvendes variabelen i promptboksen til at modtage værdier med GET og i SEARCH anvendes<br />
variablen i WHERE i afgrænsningsbetingelsen. XAL kørslen medtager således kun poster, hvor<br />
varenummeret er større end, den værdi der indtastes i promptboksen.<br />
PROMPT med REF<br />
Anvendelse af ALT+H i indtastningsfelter<br />
Indtastningsfelter i promptbokse kan udstyres med en hjælpefunktion i form af tastekombinationen<br />
ALT+H.<br />
Tastes der ALT+H i et indtastningsfelt, er det i visse tilfælde muligt at hente en liste over poster i et<br />
kartotek. I listen over kartoteksposter kan der udvælges én post, der så overføres til selve<br />
indtastningsfeltet.<br />
Anvendelse af i indtastningsfelt i promptboks<br />
Udsøgning af lagervarer<br />
Fra varenummer<br />
Ved at taste ALT+H, i indtastningsfeltet i promptboxen, kan brugeren få en liste over varenumre i<br />
kartoteket og vælge et derfra.<br />
Denne funktionalitet opnås ved anvendelsen af PROMPT med REF<br />
Opsætning af PROMPT med REF<br />
ALT+H<br />
Liste over varer i<br />
lagerkartoteket.<br />
Valgt vare overføres<br />
til indtastningsfeltet i<br />
promptboksen<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
85
REF skal altid efterfølges af to parametre i form navnet på det kartotek, der skal refereres til (foretages<br />
opslag i), og navnet på et felt i det pågældende kartotek. De to parametre skal altid adskilles af et<br />
punktum, men uden mellemrum.<br />
C5 vers. 2012 -> Eksempel på PROMPT med indbygget REF<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 05.12.2011}<br />
{C5 Version......: 2012}<br />
{Erklæring af variable}<br />
Str 10 &Fravarenr<br />
PROMPT ”Udsøgning af lagervarer”,,,<br />
”Fra varenummer: ”GET(&Fravarenr REF InvenTable.ItemNumber),<br />
INPUT AT 15,5<br />
SEARCH InvenTable<br />
WHERE ItemNumber >= &Fravarenr<br />
PRINT ItemNumber<br />
END<br />
Det er stadig GET kommandoen, der sørger for, at variablen kan modtage den værdi, der indtastes i<br />
promtpboksen.<br />
REF kommandoen anvendes kun for at give brugeren hjælp, idet den gør det muligt for brugeren i<br />
indtastningsfeltet at taste ALT+H, og få en liste over værdier i det kartotek der angives efter<br />
kommandoen. Når brugeren ser listen, kan der peges på en værdi, der herefter overføres til<br />
indtastningsfeltet.<br />
I eksemplet refereres der til lagerkartoteket (InvenTable)med feltet ItemNumber.<br />
Det betyder, at det er den værdi, der indtastes i promptboxen, der herefter anvendes i søgeløkken i<br />
forbindelse med WHERE, idet WHERE forbindes med variabelnavnet i den opsatte betingelse.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
86
C5 vers. -> 4.1 Eksempel på PROMPT med indbygget REF<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 25.08.2007}<br />
{C5 Version......: 4.00}<br />
{Erklæring af variable}<br />
Str 10 &Fravarenr<br />
PROMPT ”Udsøgning af lagervarer”,,,<br />
”Fra varenummer: ”GET(&Fravarenr REF Lagkart.VareNummer),<br />
INPUT AT 15,5<br />
SEARCH LagKart<br />
WHERE VareNummer >= &Fravarenr<br />
PRINT VareNummer<br />
END<br />
Det er stadig GET kommandoen, der sørger for, at variablen kan modtage den værdi, der indtastes i<br />
promtpboksen.<br />
REF kommandoen anvendes kun for at give brugeren hjælp, idet den gør det muligt for brugeren i<br />
indtastningsfeltet at taste ALT+H, og få en liste over værdier i det kartotek der angives efter<br />
kommandoen. Når brugeren ser listen, kan der peges på en værdi, der herefter overføres til<br />
indtastningsfeltet.<br />
I eksemplet refereres der til lagerkartoteket med feltet VareNummer.<br />
Det betyder, at det er den værdi, der indtastes i promptboxen, der herefter anvendes i søgeløkken i<br />
forbindelse med WHERE, idet WHERE forbindes med variabelnavnet i den opsatte betingelse.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
87
Opgaver: Brugerdialog med kartoteksopslag<br />
Opgave 1: PROMPT med REF til afgrænsning<br />
Formål med opgaven<br />
At udarbejde et kartoteksgennemløb med SEARCH og WHERE, hvor afgrænsningerne til WHERE<br />
betingelserne anvender variabler, der tildeles værdier gennem en prompt-box. I promptboksen skal det<br />
være muligt at foretage hjælpeopslag med ALT+H.<br />
Huskelister<br />
Variabler<br />
PROMPT med REF<br />
SEARCH-END<br />
Beskrivelse<br />
Der skal oprettes en XAL kørsel hvor brugeren indtaster en værdi i en promptboks, der er positioneret<br />
på skærmen. Denne værdi skal fungere som afgrænsning på et efterfølgende gennemløb af<br />
debitorkartoteket.<br />
De fundne poster udskrives til skærmen.<br />
Promptboks<br />
Fra konto ....:<br />
Til konto ....:<br />
Eksempel på resultat udskrevet i vindue<br />
Valg af debitorer<br />
100000 Autotester A/S 6.229,00<br />
230896 DebTest Gruppen 38.346,00<br />
42983214 Superfos Korn A/S 1.984.821,20<br />
45934545 IBM Danmark A/S 734.640,00<br />
45999300 Microsoft Data A/S 7.000,00<br />
228729910 Foto og Computer A/S 0,00<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
88
Forløb i C5 √<br />
1 Opret en ny XAL kørsel. Kopiér alle linjer fra den foregående opgave ind i denne.<br />
Foretag nødvendige ændringer i standard kommentarerne.<br />
2 Der skal nu være to variabler, der kan anvendes til indtastning af Fra kontonummer<br />
og Til kontonummer.<br />
3 Promptboksen skal ændres så den indeholder begge variabler med ledetekster. Se<br />
eksemplet herover.<br />
4 Kartoteksgennemløbet skal afgrænses ved hjælp af en WHERE.<br />
Begge variablerne skal anvendes i WHERE sætningen, idet kun kontonumre der er<br />
større end eller lig med ’FraKonto’ og mindre end eller lig med ’TilKonto’<br />
medtages.<br />
5 Afprøv kørslen.<br />
6 Foretag nødvendige ændringer i promptboksen, så brugeren får mulighed for at<br />
anvende ALT+H i felterne.<br />
Der skal refereres til kartoteket CustTable og feltet Account.<br />
7 Afprøv din XAL kørsel til du er tilfreds.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
89
11. Kartoteksgennemløb, flere kartoteker<br />
Mål med lektionen<br />
Formålet med denne lektion er, at give deltagerne viden om hvordan der kan udføres<br />
kartoteksgennemløb, der synkroniseres med hinanden. Desuden vises det hvordan, der kan foretages<br />
sammentælling af poster under kartoteksgennemløb.<br />
Efter lektionen skal kursisterne kunne:<br />
Udføre kartoteksgennemløb på flere kartoteker<br />
Synkronisere kartoteksgennemløb<br />
Danne totaler på kartoteksgennemløb.<br />
Flere kartoteker uden synkronisering<br />
I XAL kørsler kan der udmærket være flere søgeløkker efter hinanden, uden at disse behøver at være<br />
synkroniseret.<br />
I det følgende eksempel gennemløbes først kartoteket med kreditor grupper. Derefter gennemløbes<br />
selve kreditor kartoteket.:<br />
C5 vers. 2012 -> Eksempel på to kartoteksgennemløb uden synkronisering<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 05.12.2011}<br />
{C5 Version .....: 2012}<br />
SEARCH VendGroup<br />
PRINT VendGroup AT 1,22<br />
PRINT GroupName AT 12,22<br />
PRINT ””<br />
END<br />
PRINT ””<br />
SEARCH VendTable<br />
PRINT Account AT 1,22<br />
PRINT Name AT 12,22<br />
PRINT Phone AT 42,22<br />
PRINT ””<br />
END<br />
PAUSE<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
90
C5 vers. -> 4.1 Eksempel på to kartoteksgennemløb uden synkronisering<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 25.08.2007}<br />
{C5 Version......: 4.00}<br />
SEARCH KreGruppe<br />
PRINT Gruppe AT 1,22<br />
PRINT GruppeNavn AT 12,22<br />
PRINT ””<br />
END<br />
PRINT ””<br />
SEARCH KreKart<br />
PRINT Konto AT 1,22<br />
PRINT Navn AT 12,22<br />
PRINT Telefon AT 42,22<br />
PRINT ””<br />
END<br />
PAUSE<br />
Resultat<br />
DK Danmark<br />
UDL Udland<br />
12000 Kontorforsyningen 45 52 46 11<br />
14000 Emballagefabrikken A/S 77 33 33 12<br />
16000 Smith og Co. 55 81 86 87<br />
18000 Herman Hasse Gmbh 22 35 36 44<br />
20000 Fa. Jensen & Hansen 33 31 32 66<br />
Som det fremgår vises først kreditor grupperne og derefter selve kreditorerne.<br />
Kreditorerne, i den nederste del af eksemplet, har således ingen umiddelbar samhørighed med<br />
kreditorgrupperne i den øverste del.<br />
Flere kartoteker med synkronisering<br />
Ofte er der behov for at koble flere kartoteker sammen, således at poster i et kartotek er afhængige af<br />
poster i et andet kartotek.<br />
I stedet for at udskrive kreditorgrupper og kreditorer hver for sig, som i foregående eksempel, kunne<br />
disse synkroniseres således, at hver kreditorgruppe efterfølges af de tilhørende kreditorer, som vist<br />
herunder.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
91
Kreditorgrupper med tilhørende kreditorer<br />
DK Danmark<br />
12000 Kontorforsyningen 45 52 46 11<br />
14000 Emballagefabrikken A/S 77 33 33 12<br />
20000 Fa. Jensen & Hansen 33 31 32 66<br />
UDL Udland<br />
16000 Smith og Co. 55 81 86 87<br />
18000 Herman Hasse Gmbh 22 35 36 44<br />
I ovenstående eksempel med kreditorgrupper og tilhørende kreditorer er det den enkelte<br />
kreditorgruppe, der afgrænser hvilke kreditorer, der skal udskrives.<br />
Eksemplet opbygges ved at oprette den ene søgeløkke inde i den anden, og ved at synkronisere de to<br />
søgeløkker.<br />
Synkronisering<br />
Synkroniseringen udføres ved, på kartoteket i den yderste søgeløkke, at finde et felt der kan<br />
identificere posterne i den inderste søgeløkke, idet der i den inderste søgeløkke skal findes et felt med<br />
en tilsvarende værdi.<br />
Hvis der fortsættes med eksemplet, der omhandler kreditorgruppe og kreditorer, vil det være<br />
kreditorgruppefeltet, der kan anvendes til at synkronisere de to søgeløkker.<br />
Kreditorgruppefeltet på kreditor kartoteket indeholder den samme værdi som kreditorgruppefeltet på<br />
kreditorgruppe kartoteket. Hvilket betyder, at dette felt kan anvendes til at udlede de poster, der hører<br />
til den enkelte kreditorgruppe.<br />
WHERE<br />
Selve synkroniseringen udføres i gennemløbet med underkartoteket, dvs. i den inderste søgeløkke.<br />
Synkroniseringen opbygges med kommandoen WHERE.<br />
Kommandoen efterfølges af en betingelse, som sammenligner felterne i de to kartoteker som vist i<br />
syntaksen herunder.<br />
Syntaks for WHERE<br />
WHERE == <br />
WHERE kommandoen medfører, at kun poster der opfylder udtrykket medtages i<br />
kartoteksgennemløbet. Således vil det kun være poster i underkartoteket, der har felter af samme<br />
værdi som felter i hove<strong>dk</strong>artoteket, der medtages.<br />
Efterfølgende er et eksempel på kodning af to søgeløkker, hvor den ene søgeløkke afgrænser den<br />
anden. Eksemplet anvender samme kartoteker som i de tidligere anvendte eksempler. Søgeløkkerne er<br />
synkroniseret med WHERE.<br />
C5 vers. 2012 -> Eksempel på kartoteksgennemløb synkroniseret med WHERE<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
92
{Forfatter.......: Jens Olsen}<br />
{Dato............: 05.12.2011}<br />
{C5 Version......: 2012}<br />
SEARCH VendGroup<br />
PRINT VendGroup,” ”,GroupName AT 1,22<br />
PRINT ””<br />
SEARCH VendTable<br />
WHERE VendTable.Group ==<br />
VendGroup.Group<br />
PRINT Account AT 1,22<br />
PRINT Name AT 12,22<br />
PRINT Phone AT 42,22<br />
PRINT ””<br />
END<br />
PRINT ””<br />
END<br />
PAUSE<br />
I ovenstående eksempel startes først en søgeløkke på kartoteket VendGroup. Alt, hvad der står mellem<br />
SEARCH VendGroup og den tilhørende END, udføres ved hvert gennemløb.<br />
En af de ting, der udføres i den yderste søgeløkke med VendGroup, er netop at starte en ny søgeløkke,<br />
nemlig den søgeløkke der gennemsøger VendTable.<br />
Ved i kreditorkartoteket at afgrænse posterne med WHERE, udvælges kun de kreditorer, der har<br />
samme kreditorgruppe, som den gruppe der bearbejdes. Der kan således i den inderste søgeløkke<br />
foretages udvælgelse af kreditorer til den aktuelle gruppe.<br />
C5 vers. -> 4.1 Eksempel på kartoteksgennemløb synkroniseret med WHERE<br />
{Forfatter.......: Jens Olsen}<br />
{Dato............: 25.08.2007}<br />
{C5 Version......: 4.00}<br />
SEARCH KreGruppe<br />
PRINT Gruppe,” ”,GruppeNavn AT 1,22<br />
PRINT ””<br />
SEARCH KreKart<br />
WHERE KreKart.Gruppe ==<br />
KreGruppe.Gruppe<br />
PRINT Konto AT 1,22<br />
PRINT Navn AT 12,22<br />
PRINT Telefon AT 42,22<br />
PRINT ””<br />
END<br />
PRINT ””<br />
END<br />
PAUSE<br />
I ovenstående eksempel startes først en søgeløkke på kartoteket KreGruppe. Alt, hvad der står mellem<br />
SEARCH KreGruppe og den tilhørende END, udføres ved hvert gennemløb.<br />
En af de ting, der udføres i den yderste søgeløkke med KreGruppe, er netop at starte en ny søgeløkke,<br />
nemlig den søgeløkke der gennemsøger KreKart.<br />
Ved i kreditorkartoteket at afgrænse posterne med WHERE, udvælges kun de kreditorer, der har<br />
samme kreditorgruppe, som den gruppe der bearbejdes. Der kan således i den inderste søgeløkken<br />
foretages udvælgelse af kreditorer til den aktuelle gruppe.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
93
Resultat<br />
DK Danmark<br />
12000 Kontorforsyningen 45 52 46 11<br />
14000 Emballagefabrikken A/S 77 33 33 12<br />
20000 Fa. Jensen & Hansen 33 31 32 66<br />
UDL Udland<br />
16000 Smith og Co. 55 81 86 87<br />
18000 Herman Hasse Gmbh 22 35 36 44<br />
Udarbejdelse af total<br />
Totaler er resultater af beregninger. De består f.eks. af de summerede værdier af poster fra et<br />
kartoteksgennemløb.<br />
Totaler skal gemmes i variabler af samme type som feltet, der summeres på.<br />
Sammentælling udføres ved, at tildele variabler deres egen værdi plus værdien af de felter der<br />
sammentælles.<br />
Syntaks for summering i variabel<br />
SET & = & + kartoteksfelt<br />
&variabelnavn1 er navnet på den variabel, der skal indeholde summeringen og kartoteksfelt er navnet<br />
på det felt, der skal summeres.<br />
Tildelingen af værdi til variablen skal udføres på et sted i XAL kørslen, hvor feltværdierne er<br />
tilgængelige, dvs. inde i søgeløkken.<br />
C5 vers. 2012 -> Eksempel på kartoteksgennemløb med summering i variabel<br />
Real &Sum<br />
SEARCH VendTable<br />
SET &Sum = &Sum + BalanceMST<br />
END<br />
PRINT ”Kreditorer i alt: ”, &Sum<br />
PAUSE<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
94
C5 vers. -> 4.1 Eksempel på kartoteksgennemløb med summering i variabel<br />
Real &Sum<br />
SEARCH KreKart<br />
SET &Sum = &Sum + SaldoDkk<br />
END<br />
PRINT ”Kreditorer i alt: ”, &Sum<br />
PAUSE<br />
Resultat<br />
Kreditorer i alt: -523.548,88<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
95
Opgaver: Kartoteksgennemløb, flere kartoteker<br />
Opgave 1: Kartoteker uden synkronisering<br />
Formål med opgaven<br />
At opbygge en XAL kørsel med to kartoteksgennemløb, der ikke er synkroniseret.<br />
Huskelister<br />
<strong>Programmering</strong> - Opret<br />
Variabler<br />
SEARCH-END<br />
PRINT AT<br />
PAUSE<br />
Beskrivelse<br />
Der skal oprettes en XAL kørsel, der udskriver resultaterne af uafhængige gennemløb på kartotekerne<br />
CustGroup og CustTable. Der skal ikke sættes afgrænsninger på kartoteksgennemløbene.<br />
Eksempel på udskrift på skærm<br />
DK Danske debitorer<br />
UDL Export debitorer<br />
------------------------------------------------<br />
DK 10 Dan Rasmussen 38.855,00<br />
UDL 20000 Central Kopiering 142.412,50<br />
DK 33344 Computer Hjemme Service A/S 5.311.501,50<br />
UDL 100000 Autotester A/S 6.229,00<br />
DK 230896 DebTest Gruppen 38.346,00<br />
DK 42983214 Superfos Korn A/S 1.984.821,20<br />
DK 45934545 IBM Danmark A/S 734.640,00<br />
DK 45999300 Microsoft Data A/S 7.000,00<br />
UDL 228729910 Foto og Computer A/S 0,00<br />
1 Opret en ny XAL kørsel. Indsæt og tilret startkommentarer<br />
Forløb I C5 √<br />
2 Opret en søgeløkke til kartoteket CustGroup og udskriv felterne Group og<br />
GroupName<br />
3 Opret derefter en søgeløkke til kartoteket CustTable og udskriv felterne Group,<br />
Account, Name og BalanceMST.<br />
4 Afprøv kørslen<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
96
Opgave 2: Kartoteker med synkronisering<br />
Formål med opgaven<br />
At opbygge en XAL kørsel med to kartoteksgennemløb der er synkroniseret.<br />
Huskelister<br />
<strong>Programmering</strong> - Opret<br />
Variabler<br />
SEARCH-END<br />
PRINT AT<br />
PAUSE<br />
Beskrivelse<br />
Der skal oprettes en XAL kørsel, der udskriver resultaterne af et gennemløb af CustGroup og CustTable,<br />
hvor CustTable er indbygget i CustGroup.<br />
Eksempel på udskrift på skærm<br />
DK Danske debitorer<br />
------------------------------------------------<br />
DK 10 Dan Rasmussen 38.855,00<br />
DK 33344 Computer Hjemme Service A/S 5.311.501,50<br />
DK 230896 DebTest Gruppen 38.346,00<br />
DK 42983214 Superfos Korn A/S 1.984.821,20<br />
DK 45934545 IBM Danmark A/S 734.640,00<br />
DK 45999300 Microsoft Data A/S 7.000,00<br />
UDL Export debitorer<br />
-------------------------------------------------<br />
UDL 20000 Central Kopiering 142.412,50<br />
UDL 100000 Autotester A/S 6.229,00<br />
UDL 228729910 Foto og Computer A/S 0,00<br />
Forløb I C5 √<br />
1 Opret en ny XAL kørsel. Kopiér alle linjerne fra den forrige opgave ind i denne XAL<br />
kørsel. Foretag nødvendige ændringer i standard kommentarerne<br />
2 Flyt søgeløkken på CustTable (med print linjer) ind i søgeløkken på CustGroup<br />
3 Synkronisér CustTable med CustGroup ved hjælp af WHERE<br />
4 Afprøv kørslen<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
97
Opgave 3: Kartoteker med synkronisering og sammentælling.<br />
Formål med opgaven<br />
At bygge videre på den foregående opgave, idet der skal udføres en manuel sammentælling, i en<br />
variabel, i den ene af søgeløkkerne.<br />
Huskelister<br />
<strong>Programmering</strong> - Opret<br />
Variabler<br />
SEARCH-END<br />
Beskrivelse<br />
Der skal bygges videre på den foregående opgave.<br />
Der skal foretages en sammentælling af feltet BalanceMST i CustTable således, at der dannes en total<br />
for hver debitorgruppe. Denne total skal udskrives til skærmen efter gennemløbet af CustTable.<br />
DK Danske debitorer<br />
-----------------------------------------------<br />
DK 10 Dan Rasmussen 38.855,00<br />
DK 33344 Computer Hjemme Service A/S 5.311.501,50<br />
DK 230896 DebTest Gruppen 38.346,00<br />
DK 42983214 Superfos Korn A/S 1.984.821,20<br />
DK 45934545 IBM Danmark A/S 734.640,00<br />
DK 45999300 Microsoft Data A/S 7.000,00<br />
Total 8.115.163,70<br />
UDL Export debitorer<br />
-----------------------------------------------<br />
UDL 20000 Central Kopiering 142.412,50<br />
UDL 100000 Autotester A/S 6.229,00<br />
UDL 228729910 Foto og Computer A/S 0,00<br />
Total 148.641,50<br />
Forløb i C5 √<br />
1 Opret en ny XAL kørsel. Kopiér alle linjerne fra den forrige opgave ind i denne XAL<br />
kørsel. Foretag nødvendige ændringer i standard kommentarerne.<br />
2 Opret en variabel der kan bruges til summering af feltet BalanceMST.<br />
3 Indsæt kode til summering af feltet BalanceMST i den oprettede variabel.<br />
Udskriv værdien i variablen med ledeteksten ’Total’ foran. Værdien udskrives hver<br />
gang en debitorgruppe er færdig. (Husk at nulstille)<br />
4 Afprøv kørslen.<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
98
12. Huskelister Kommandoer og funktioner<br />
Box<br />
Syntaks Box(type,”tekst”,0)<br />
Beskrivelse Funktionen Box danner en kasse med en tekst.<br />
Eksempel<br />
Infoboks<br />
Eksempel<br />
Advarselsboks<br />
med linjeskift<br />
Der kan dannes forskellige former for bokse afhængigt af indholdet i<br />
parameteren type.<br />
På dette kursus benyttes flg. bokstyper:<br />
Type 1: Infoboksen (tekstboks med grå baggrund).<br />
Type 2: Advarselsboksen (tekstboks med rød baggrund).<br />
I parameteren tekst skrives boksens tekst i citationstegn. Der kan indsættes<br />
linjeskift med \n, der skal være indenfor citationstegnene.<br />
Sidste parameter skal for bokstype 1 og 2 være 0.<br />
SET Box(1,”Kørslen er slut”,0)<br />
SET Box(2,”ADVARSEL\nKørslen blev afbrudt”,0)<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
99
Dokumentation af XAL-kørsler<br />
Udskriv<br />
dokumentation<br />
Funktion – CurUserID()<br />
Syntaks CurUserID():INT<br />
Returværdi INT<br />
Generelt/Tilpasning/Udviklingsmenu/XAL/ Udskriv<br />
Du ser en menuen Vælg kørsel, der er en liste over alle<br />
XAL-kørsler.<br />
Vælg den kørsel der skal udskrives, ved at skrive de første<br />
tegn i kørslens navn.<br />
Billedet ’Udskriftsmuligheder’ er blevet åbnet.<br />
ENTER<br />
Skriv til-feltet udfyldes med PRINTER ALT+H<br />
Printer-feltet udfyldes med navnet på den printer, der<br />
skal skrives til (Spørg evt. instruktøren)<br />
ALT+H<br />
Formattering-feltet skal åbnes med ENTER<br />
Du ser billedet ’Formattering’<br />
Tvungen venstre margen-feltet sættes til 2 for, at undgå<br />
at skrive i hullerne på papiret.<br />
De øvrige felter kan forblive som de er eller ændres efter<br />
ønske.<br />
Go<strong>dk</strong>end vinduet med F3<br />
Du er tilbage i billedet ’Udskriftsmuligheder’<br />
Resten af felterne forbliver, som de er.<br />
Udfør udskriften ved at go<strong>dk</strong>ende med F3<br />
Beskrivelse Funktionen CurUserID() returnerer den nuværende brugers ID nummer som et<br />
heltal. ID nummeret er identisk med Bruger nummeret ved oprettelse af ny<br />
bruger i Generelt/Tilpasning/Adgangskontrol/Brugere og Grupper<br />
Eksempler CurUserID()-> 1 (som er Supervisorens nummer)<br />
100<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Funktion – UserID2Name()<br />
Syntaks UserID2Name(INT):STR<br />
Returværdi STR<br />
Beskrivelse Hver bruger er identificeret ved et unikt brugernavn og funktionen<br />
UserID2Name() returnerer det brugernavn som er tilknyttet<br />
heltalsparameteren, der er brugernummeret.<br />
Eksempler UserID2Name(1)-> ”Supervisor”<br />
Funktion – TimeNow()<br />
Syntaks TimeNow():INT<br />
Returværdi INT<br />
Beskrivelse Funktionen TimeNow() returnerer klokkeslettet, baseret på computer uret. Det<br />
returnerede heltal er defineret som antal sekunder siden midnat.<br />
Eksempler TimeNow()-> 18098<br />
101<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Funktion – Time2Str()<br />
Syntaks Time2Str( Sekunder(INT), TMS(INT), Tid(INT) ):STR<br />
Returværdi STR<br />
Sekunder Antal af sekunder siden midnat<br />
TMS Type af Time, minut og sekund adskiller<br />
= 0 (Ingen adskiller)<br />
= 1 ( ”:” som adskiller)<br />
= 2 ( ”.” som adskiller)<br />
= 3 ( ” ” som adskiller)<br />
= 4 ( ”,” som adskiller)<br />
= 5 ( ”/” som adskiller)<br />
Tid Bestemmer hvordan tiden skal vises, enten i AM/PM format<br />
eller i 24-timers tid.<br />
= 1 (24-timers format benyttes)<br />
= 2 (AM/PM format benyttes)<br />
Beskrivelse Funktionen Time2Str() konverterer en tid, defineret som et antal sekunder siden<br />
midnat, til en tekst, der samtidigt antager et valgfrit tidsformat, alt efter hvilke<br />
parametre der vælges.<br />
Eksempler Time2Str(18098,1,1) -> ”05:01:38<br />
Time2Str(18099,0,0) -> ”050139”<br />
Time2Str(50000,2,1) -> ”13.53.20”<br />
Time2Str(50000,2,2) -> ”01.53.20 PM”<br />
Funktion – ToDay()<br />
Syntaks ToDay():DATE<br />
Returværdi DATE<br />
Beskrivelse Funktionen ToDay() returnerer dags dato. Der skal ikke tastes nogen parametre i<br />
parenteserne<br />
Eksempler PRINT ToDay() { medfører dags dato }<br />
102<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
IF-THEN-ELSE-ENDIF<br />
Syntaks IF THEN<br />
{Kommandoer der afvikles, hvis udtrykket er<br />
sandt}<br />
ELSE<br />
{Kommandoer der afvikles, hvis udtrykket er<br />
falsk}<br />
ENDIF<br />
Beskrivelse Kommandoen IF-THEN-ELSE-ENDIF er en spørgestruktur, hvis resultat bliver<br />
SANDT eller FALSK.<br />
Strukturen har tre bestanddele: En betingelse, en SAND konsekvens og en FALSK<br />
konsekvens.<br />
I nogle tilfælde er det ikke nødvendigt at opstille en FALSK konsekvens. I så fald<br />
vil der ikke blive udført kommandoer, hvis betingelsen evaluerer til falsk.<br />
Eksempler SEARCH CustTable<br />
IF BalanceMST > BalanceMax THEN<br />
PRINT ”Overskredet” { betingelse er sand }<br />
ELSE<br />
PRINT ”OK” { betingelse er falsk }<br />
ENDIF<br />
END<br />
PAUSE<br />
Index - se indhold af<br />
Se indhold af index Ctrl F12/Kartoteker<br />
Gentages for hvert<br />
kartotek, der skal<br />
ses index i<br />
Gentages for hvert<br />
index<br />
Du er i billedet ’Kartoteksopbygning’<br />
Stå i kartotekskolonnen og åbn en liste over kartoteker F4<br />
Vælg kartotek fra listen ved at taste de første tegn i<br />
kartoteksnavnet<br />
ENTER<br />
Billedet består af tre blokke. Flyt til blokken ’Index’ SH+F8<br />
Stil cursoren på det ønskede index PIL Op eller<br />
På nederste linje ses teksten:<br />
’Indexformel: ’ efterfulgt af navnene på de felter indexet<br />
består af.<br />
Afslut når du er færdig ESC<br />
PIL NED<br />
eller flyt til kartotekskolonnen igen og vælg et nyt kartotek SH+F8<br />
103<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Kommentarer<br />
Syntaks { kommentar }<br />
Beskrivelse En kommentar er en fritekst, der indsættes et vilkårligt sted i programmet for at<br />
forklare programmets funktion.<br />
Kommentarer skal altid omgives med { }.<br />
Kommentarer har ingen indvirkning på selve programmet, men er blot en<br />
forklarende tekst, der overspringes på afviklingstidspunktet.<br />
Kommentarer anvendes typisk i flg. tilfælde:<br />
Som introduktion til selve programmet<br />
Som forklaring ved erklæring af variabler<br />
Ved forklaring af programmet<br />
Til at ignorere dele af programmet<br />
Eksempel 1 {Jens Olsen 15.01.2011<br />
C5 version 2012<br />
Udskrift af debitorer med saldo}<br />
Eksempel 2 { Forfatter ....: Jens Olsen }<br />
{ Dato .........: 25.08.2007}<br />
{ C5 version ...: 4.0 }<br />
{ Funktion .....: Summering af saldi på debitorer }<br />
PAUSE<br />
Syntaks<br />
{ Erklæring af variabler }<br />
PAUSE<br />
Beskrivelse Kommandoen PAUSE anvendes til at stoppe en kørsel midlertidigt.<br />
Kommandoen giver brugeren mulighed for, at se udskriften inden kørslen<br />
fortsætter (og måske afsluttes), og vinduet lukkes.<br />
Hvis PAUSE ikke angives, når brugeren ikke at se udskriften.<br />
Kørslen genoptages efter en PAUSE, når brugeren taster ENTER<br />
Eksempler PRINT ”Ole Olsen”<br />
PRINT 25<br />
PRINT ”Ole Olsen ”, 25, ” år”<br />
PRINT<br />
PAUSE<br />
104<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
PRINT<br />
Syntaks PRINT <br />
PRINT ,,...<br />
Beskrivelse Kommandoen PRINT benyttes til udskrivning i XAL-kørsler.<br />
Eksempler<br />
PRINT AT<br />
Syntaks<br />
Der kan bl.a. udskrives informationer fra poster i gennemløbne kartoteker og<br />
værdier på anvendte variabler, ligesom der kan skrives almindelig tekst.<br />
Der kan kun skrives på skærmen med PRINT kommandoen.<br />
Udskriften placeres på nederste linje i vinduet.<br />
Udskrifter bredere en vinduet afskæres og fortsætter ikke på næste linje.<br />
Der kan max udskrives 8 udtryk pr. linje. Er der behov for flere, skal der angives<br />
flere PRINT kommandoer.<br />
PRINT ”Ole Olsen”<br />
PRINT 25<br />
PRINT ”Ole Olsen ”, 25, ” år”<br />
PRINT AT ,<br />
PRINT ,... AT ,<br />
Beskrivelse Kommandoen PRINT AT benyttes til udskrivning i XAL-kørsler, idet<br />
programmøren selv bestemmer, hvor på vinduet printværdierne skal stå.<br />
Eksempler<br />
Kommandoen AT skal anføres til sidst på printlinjen, og den skal efterfølges af<br />
kolonne- og linjenummer adskilt med et komma.<br />
Hvis der efter en sætning med PRINT AT kommer en eller flere andre PRINT<br />
sætninger uden AT, vil de værdier, der er placeret på vinduet på bestemte steder<br />
med PRINT AT, blive rykket en linje op for hver PRINT sætning uden AT.<br />
PRINT ”Ole Olsen” AT 20,5<br />
PRINT 25 AT 20,6<br />
PRINT ”Ole Olsen ”, 25, ” år” AT 20,5<br />
105<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
<strong>Programmering</strong> – opret<br />
Opret Generelt/Tilpasning/Udviklingsmenu/XAL/Opret<br />
Du ser en dialogbox med feltet Kørsel.<br />
Indtast navnet på din kørsel her.<br />
(Brug IKKE punktum i navnet, gerne understreg)<br />
Der åbnes nu en editorbox, der fylder den øverste halvdel<br />
af skærmen.<br />
Zoom editorboxen op i fuld skærmstørrelse.<br />
(Kan gøres mindre igen med samme funktionstast)<br />
Editoren er nu klar til indtastning af et program til en XALkørsel.<br />
Flg. huskelister omhandler arbejdet med editoren:<br />
XAL editoren - editeringsfunktioner<br />
XAL editoren – nøgleord<br />
<strong>Programmering</strong> – ret<br />
Efter endt indtastning go<strong>dk</strong>endes kørslen F3<br />
Ret Generelt/Tilpasning/Udviklingsmenu/XAL/Ret<br />
Vælg kørsel fra plukkelisten.<br />
Der åbnes nu en editorbox, der fylder den øverste halvdel<br />
af skærmen.<br />
Zoom editorboxen op i fuld skærmstørrelse.<br />
(Kan gøres mindre igen med samme funktionstast)<br />
Efter at XAL-kørslen er kommet frem i editoren, kan der<br />
foretages diverse ændringer og tilføjelser.<br />
Der henvises til huskelisterne:<br />
XAL editoren - editeringsfunktioner<br />
XAL editoren – nøgleord<br />
Ændringerne afsluttes og go<strong>dk</strong>endes med F3<br />
Efter go<strong>dk</strong>endelsen vises der en dialogboks med<br />
spørgsmålet: Ønskes kørslen igangsat?<br />
Sæt kørslen i gang Ja<br />
ALT+Z<br />
ALT+Z<br />
Afslut Nej<br />
106<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
PROMPT<br />
Syntaks PROMPT ,,,<br />
,<br />
GET (&Var)<br />
INPUT AT ,<br />
Beskrivelse Kommandoen PROMPT benyttes til at stoppe op i programmet og spørge<br />
brugeren om den værdi, der ønskes indsat i de variabler, der anføres i<br />
paranteserne efter GET.<br />
Overskrifter og ledetekster skal altid stå i citationstegn.<br />
Kommaerne efter linjerne bevirker linjeskift. Hvert komma giver ét linjeskift.<br />
AT er valgfrit. Hvis AT ikke angives, vises promptboxen i skærmens øverste<br />
venstre hjørne.<br />
Eksempel 1 PROMPT ”Vælg farve”,,<br />
”Farve ........: ” GET (&Farve),<br />
”(Rød eller blå) ”<br />
INPUT<br />
Eksempel 2<br />
PROMPT ”Indtast værdier”,,<br />
”Antal ...: ” GET (&Antal),<br />
”Nummer ..: ” GET (&Nummer),<br />
”Pris ....: ” GET (&Pris)<br />
INPUT AT 10,5<br />
107<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
PROMPT med REF<br />
Syntaks PROMPT ,,,<br />
,<br />
GET (&Var REF kartotek.felt)<br />
INPUT AT ,<br />
Beskrivelse Kommandoen PROMPT benyttes til at stoppe op i programmet og spørge<br />
brugeren om den værdi, der ønskes indsat i de variabler, der anføres i<br />
paranteserne efter GET.<br />
Overskrifter og ledetekster skal altid stå i citationstegn.<br />
Kommaerne efter linjerne bevirker linjeskift. Hvert komma giver ét linjeskift.<br />
AT er valgfrit. Hvis AT ikke angives vises promptboxen i skærmens øverste<br />
venstre hjørne.<br />
Ved anvendelse af REF i en promptbox kan brugeren med ALT+H få en<br />
plukkeliste med værdier i det angivne kartotek. Ved valg af en værdi overføres<br />
denne til variablen.<br />
Eksempel PROMPT ”Vælg debitor”,,<br />
”Konto ..: ” GET (&Kto REF CustTable.Account)<br />
INPUT<br />
SEARCH-END<br />
Syntaks<br />
SEARCH <br />
[]<br />
END<br />
Beskrivelse Kommandoen SEARCH anvendes til at gennemløbe poster i et kartotek.<br />
Eksempel<br />
Kartotek er navnet på det kartotek, der skal gennemløbes.<br />
De poster der udvælges kan f.eks. udskrives med PRINT kommandoen.<br />
SEARCH CustTable<br />
PRINT Account,” ”,Name<br />
END<br />
PAUSE<br />
108<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
SEARCH-END med USING INDEX<br />
Syntaks SEARCH [USING [INDEX] Indexnavn]<br />
[]<br />
END<br />
Beskrivelse Kommandoen SEARCH anvendes til at gennemløbe poster i et kartotek.<br />
De poster der udvælges, kan f.eks. udskrives med PRINT kommandoen.<br />
Med USING kan det angives hvilket af de faste indexer, der skal sorteres efter.<br />
Ordet INDEX er et valgfrit nøgleord, der gør kørslen lettere at læse.<br />
Eksempel 1 SEARCH CustTable USING INDEX AccountIdx<br />
PRINT Account,” ”,Name<br />
END<br />
PAUSE<br />
Eksempel 2 SEARCH CustTable USING AccountIdx<br />
PRINT Account,” ”,Name<br />
END<br />
PAUSE<br />
SEARCH-END med ORDER<br />
Syntaks SEARCH <br />
[ORDER ]<br />
[]<br />
END<br />
Beskrivelse Kommandoen SEARCH anvendes til at gennemløbe poster i et kartotek.<br />
Med USING kan der angives sortering efter et af de faste indexer.<br />
Hvis der skal sorteres efter et kartoteksfelt, hvorpå der ikke er noget fast index,<br />
gøres dette med ORDER.<br />
Ordet felt er navnet på det kartoteksfelt, der skal sorteres efter. Der dannes et<br />
midlertidigt index på feltet.<br />
De poster der udvælges, kan f.eks. udskrives med PRINT kommandoen.<br />
Nogle programstumper bruger kommandoen ORDER BY. Der er ingen forskel på<br />
ORDER og ORDER BY og det skal blot nævnes her, i det tilfælde at man støder<br />
på den.<br />
Eksempel 1 SEARCH CustTable ORDER Name<br />
PRINT Name,” ”,Account<br />
END<br />
PAUSE<br />
Eksempel 2<br />
SEARCH CustTable ORDER BY Name<br />
PRINT Name,” ”,Account<br />
END<br />
PAUSE<br />
109<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
SEARCH-END med WHERE<br />
Syntaks SEARCH <br />
[WHERE ]<br />
[]<br />
END<br />
Beskrivelse Kommandoen SEARCH anvendes til at gennemløbe poster i et kartotek.<br />
Med WHERE kan der angives et udvælgelsesskriterium, for hvilke poster i<br />
kartoteket der skal udvælges.<br />
Efter WHERE opstilles en betingelse, der skal være opfyldt for, at de enkelte<br />
poster bliver udvalgt.<br />
De poster der udvælges kan f.eks. udskrives med PRINT kommandoen.<br />
Eksempel SEARCH CustTable<br />
WHERE Group == ”DK”<br />
PRINT Group,” ”,Account,” ”,Name<br />
END<br />
PAUSE<br />
110<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
SET<br />
Syntaks SET = <br />
Beskrivelse Et af formålene med kørsler er at manipulere med dataelementer. Det kan ske<br />
ved at tildele værdier til variabler.<br />
Kommandoen SET benyttes til dette.<br />
I kommatalsvariabler er decimaltegnet et ”.” punktum.<br />
I datovariabler skal ”\” backslash, anvendes til datoer ved tildeling af værdier<br />
med SET. Hvis backslash ikke benyttes eller hvis datoen ligger uden for det<br />
lovlige interval, kommer der en fejlmeddelelse om semantisk fejl.<br />
Hvis årstallet kun tastes med 2 cifre, antager systemet, at det er en dato i dette<br />
århundrede.<br />
Eksempler { Heltal }<br />
SET &Antal = 100<br />
{ Kommatal }<br />
SET &Beløb = 45.25<br />
SET &Beløb = &Beløb + 350.50<br />
{ Tekster }<br />
SET &ForNavn = ”Ole”<br />
SET &EfterNavn = ”Olsen”<br />
SET &Navn = &ForNavn + ” ” + &EfterNavn<br />
{ Datoer }<br />
SET &AnsatDato = 25\01\1997<br />
{ Fasttekster }<br />
SET &Svar = 1<br />
111<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Variabler<br />
Syntaks &<br />
[] &<br />
& = Værdi<br />
Beskrivelse En variabel er en plads i hukommelsen, der benyttes til at gemme værdier i<br />
Eksempler på<br />
erklæringer<br />
Eksempler på<br />
erklæringer<br />
med<br />
tildelinger af<br />
værdier<br />
under afviklingen af programmet.<br />
Der er fem typer variabler:<br />
INT (heltal)<br />
REAL (kommatal)<br />
STR (tekst)<br />
DATE (datoer)<br />
ENUM (fasttekster)<br />
Før en variabel kan anvendes, skal den erklæres i toppen af programmet.<br />
På STR variabler skal der angives længde, og på ENUM skal der angives navn på<br />
fastteksttypen.<br />
Variabler initialiseres med nulværdier i det øjeblik, de bliver erklæret.<br />
Der kan altid tildeles nye værdier med SET kommandoen sålænge, den nye<br />
værdi er af samme type som variablen selv.<br />
Variablerne har i og for sig ingen funktion før, de får tildelt værdier.<br />
INT &Antal<br />
REAL &Beløb<br />
STR 25 &Navn<br />
DATE &AnsatDato<br />
ENUM NejJa &Svar<br />
INT &Antal = 45<br />
REAL &Beløb = 275.50<br />
STR 25 &Navn = ”Olsen”<br />
DATE &AnsatDato = 29\07\09<br />
ENUM NejJa &Svar = 1<br />
112<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
WINDOW<br />
Syntaks WINDOW ,<br />
WINDOW , [AT ,]<br />
Beskrivelse Kommandoen WINDOW åbner et vindue på skærmen.<br />
Eksempel 1<br />
Det er helt tomt, når det åbnes.<br />
Det lukkes automatisk, når kørslen afsluttes eller der åbnes et nyt vindue. Der kan<br />
kun være ét vindue åbent ad gangen.<br />
AT viser hvor øverste venstre hjørne af vinduet placeres på skærmen. Hvis AT<br />
udelades, placeres vinduet i øverste venstre hjørne.<br />
Hvis vinduet f.eks. specificeres med højde og bredde lig 0,0, bliver det ikke åbnet,<br />
men det oprindelige lukkes, dvs. skærmen slukkes. Dette modsvarer<br />
kommandoen CLEAR SCREEN i andre programmeringssprog.<br />
WINDOW 40,5<br />
PRINT ”Ole Olsen ”, 25, ” år”<br />
PAUSE<br />
Eksempel 2 WINDOW 40,5 AT 20,5<br />
PRINT ”Ole Olsen ”, 25, ” år”<br />
PAUSE<br />
113<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
XAL editoren - editeringsfunktioner<br />
Vælg slut linje Cursoren hopper til enden af linjen END<br />
Vælg start<br />
linje<br />
Cursoren hopper til starten af linjen HOME<br />
Slet én linje Den linje, cursoren står på, slettes<br />
Kopier én<br />
linje til buffer<br />
Flyt én linje til<br />
buffer<br />
Indsæt fra<br />
buffer<br />
Markér flere<br />
linjer<br />
(Cursoren kan stå hvor som helst på linjen)<br />
Den linje, cursoren står på, kopieres ud i bufferen<br />
(Cursoren kan stå hvor som helt på linjen)<br />
Den linje, cursoren står på, flyttes ud i bufferen (Cursoren<br />
kan stå hvor som helt på linjen)<br />
ALT+D<br />
SH+F5<br />
CTRL+F5<br />
Bufferens indhold indsættes, der hvor cursoren står ALT+I<br />
Der kan markeres flere linjer på en gang ved at stå på<br />
første linje og taste ALT+L og flytte op og ned med<br />
piletasterne. De markerede linjer vises med gråt<br />
ALT+L<br />
Slet flere linje Markér linjerne ALT+L og pile<br />
Kopier flere<br />
linjer til<br />
buffer<br />
Flyt flere<br />
linjer til<br />
buffer<br />
Pile<br />
Slet de markerede linjer DELETE<br />
Markér linjerne ALT+L og pile<br />
Kopiér de markerede linjer ud i bufferen SHIFT+F5<br />
Flyt cursoren og indsæt igen ALT+I<br />
Markér linjerne<br />
ALT+L og pile<br />
Flyt de markerede linjer ud i bufferen CTRL+F5<br />
Flyt cursoren og indsæt et andet sted ALT+I<br />
114<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
XAL editoren – nøgleord<br />
Zoom vindue Når editoren åbnes, vises vinduet kun i halv størrelse.<br />
Zoom vinduet op eller ned ALT+Z<br />
Nøgleord Nøgleordene (kommandoerne) kan hentes fra en<br />
plukkeliste.<br />
Cursoren står automatisk på den sidst anvendte<br />
kommando.<br />
Når listen vises på skærmen, skrives de første tegn i<br />
kommandoen, hvorefter den vises automatisk og kan<br />
overføres til editoren.<br />
Vælg kommando og overfør til editoren ENTER<br />
Kartoteker Kartoteker hentes fra en plukkeliste.<br />
(Samme fremgangsmåde som under nøgleord)<br />
Vælg kartotek og overfør til editoren ENTER<br />
Felter Felter hentes fra en plukkeliste over kartoteker.<br />
(Samme fremgangsmåde som under nøgleord)<br />
115<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
F2<br />
F7<br />
SH+F8<br />
Vælg kartotek, felt og overfør til editoren ENTER<br />
Index Indexer hentes fra en plukkeliste over kartoteker<br />
(Samme fremgangsmåde som under nøgleord)<br />
Vælg kartotek, index og overfør til editoren ENTER<br />
Fasttekster Fasttekster hentes fra en plukkeliste<br />
Tekster i<br />
fasttekster<br />
(Samme fremgangsmåde som under nøgleord)<br />
Vælg fasttekst og overfør til editoren ENTER<br />
Tekster i fasttekster hentes fra en plukkeliste over<br />
fasttekster.<br />
(Samme fremgangsmåde som under nøgleord)<br />
F8<br />
F6<br />
SH+F6<br />
Vælg fastteksttype, tekst og overfør til editoren ENTER
13. Huskelister XAL sproget<br />
ENUM<br />
Funktion Fremgangsmåde Tast<br />
Opret ny<br />
fastteksttype<br />
Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/ Kerne<br />
Vælg kartotek<br />
(Det skal blot være et tilfældigt kartotek, da oprettelse af<br />
fastteksttyper kan foregå på et hvilket som helst kartotek.)<br />
ENTER<br />
Vælg Fast-Tekst-Typer i menuen ENTER<br />
Vælg Opret ny type i menuen ENTER<br />
Du ser billedet ’Fast-Tekst’<br />
Indtast Navn på typen<br />
Indtast overskriftsnavn i feltet Print Navn<br />
Go<strong>dk</strong>end F3<br />
Tilføj tekster Benyt samme menusti som ovenstående.<br />
Vælg Tilføj/Ret tekster i menuen Fast-Tekst-Typer<br />
Vælg Type<br />
Du ser nu en dialogbox med Fast-Tekst-Typens navn som<br />
overskrift.<br />
ENTER<br />
ENTER<br />
Indsæt tekst i feltet –INDSÆT NY TEKST-- INSERT eller<br />
Du ser nu dialogboxen Fast-Tekst Indhold<br />
Indtast navn i feltet<br />
Go<strong>dk</strong>end (til du er helt ude af programmet) F3<br />
Ret tekster Benyt samme menusti som ovenstående<br />
Vælg Tilføj/Ret tekster i menuen Fast-Tekst-Typer<br />
Vælg Type<br />
Du ser nu en dialogbox med Fast-Tekst-Typens navn som<br />
overskrift<br />
Vælg navn der skal ændres<br />
<strong>Programmering</strong> – opret<br />
ENTER<br />
ENTER<br />
ENTER<br />
Åbn Fast-Tekst Indhold og foretag ændring ENTER<br />
Go<strong>dk</strong>end (til du er helt ude af programmet) F3<br />
Funktion Fremgangsmåde Tast<br />
Opret Generelt/Tilpasning/Udviklingsmenu/XAL/Opret<br />
116<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Funktion Fremgangsmåde Tast<br />
Programelementer<br />
Du ser en dialogbox med feltet ’Kørsel’<br />
Indtast navnet på din kørsel her<br />
(Brug IKKE punktum i navnet, gerne understreg)<br />
Der åbnes nu en editorbox, der fylder den øverste halvdel<br />
af skærmen<br />
Zoom editorboxen op i fuld skærmstørrelse<br />
(Kan gøres mindre igen med samme funktionstast)<br />
Kommentarer sættes i { }<br />
Start programmet med en kommentar om programmets<br />
funktion, XAL version, dato, forfatter o.a.<br />
Variabler indsættes først i programmet<br />
Du vælger selv navne til dine variabler<br />
Indsæt kommando (nøgleord) F2<br />
Hent kartotek F7<br />
Hent Indexnavne<br />
Vælg først kartotek derefter indexnavn<br />
Hent feltnavne<br />
Vælg først kartotek, derefter feltnavn<br />
Hent fast-tekst-typer F6<br />
Hent fast-tekst-indhold<br />
Vælg først fast-tekst-type, derefter indhold<br />
ALT+Z<br />
117<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
{ }<br />
F8<br />
SHIFT+F8<br />
SHIFT+F6
<strong>Programmering</strong> – ret<br />
Funktion Fremgangsmåde Tast<br />
Ret Generelt/Tilpasning/Udviklingsmenu/XAL/Ret<br />
Editeringsmuligheder<br />
Vælg kørsel fra plukkelisten.<br />
Der åbnes nu en editorbox der fylder den øverste halvdel<br />
af skærmen.<br />
Zoom editorboxen op i fuld skærmstørrelse.<br />
(Kan gøres mindre igen med samme funktionstast)<br />
Du kan benytte samme programelementer som i<br />
huskesedlen: <strong>Programmering</strong> – Opret<br />
ALT+Z<br />
Slet hel linje Placér cursoren på linjen og slet. ALT+D<br />
Flyt én linje Placér cursoren på linjen og flyt til buffer<br />
Flyt flere linjer<br />
på én gang<br />
Flyt cursoren til det sted hvor linjen skal indsættes.<br />
CTRL+F5<br />
Indsæt linjen fra bufferen. ALT+I<br />
Placér cursoren på første linje<br />
Afmærk linjer.<br />
(linjerne markeres i anden farve)<br />
Flyt linjerne til bufferen.<br />
Flyt cursoren til det sted hvor linjerne skal indsættes.<br />
ALT+L og<br />
pil ned<br />
CTRL+F5<br />
Indsæt linjerne. ALT+I<br />
Kopiér én linje Placér cursoren på linjen og kopier til buffer<br />
Kopiér flere<br />
linjer på én<br />
gang<br />
Flyt cursoren til det sted hvor linjen skal indsættes.<br />
SH+F5<br />
Indsæt linjen fra bufferen. ALT+I<br />
Placér cursoren på første linje<br />
Afmærk linjer.<br />
(linjerne markeres i anden farve)<br />
Kopier linjerne til bufferen.<br />
Flyt cursoren til det sted hvor linjerne skal indsættes.<br />
ALT+L og<br />
pil ned<br />
SH+F5<br />
Indsæt linjerne. ALT+I<br />
118<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Del II – Kartoteker og skærmbilleder<br />
119<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
14. Kartoteker<br />
Mål med lektionen<br />
Formålet med denne lektion er at lære deltagerne at oprette kartoteker med felter. Desuden forklares<br />
begrebet systemfelter<br />
Efter lektionen skal kursisterne kunne:<br />
Oprette nye kartoteker<br />
Oprette nye felter i kartoteker<br />
og kende til:<br />
Password beskyttelse af kartoteker<br />
Begrebet systemfelter.<br />
Kartoteker generelt<br />
C5 består af over 200 forskellige kartoteker, der hver især igen består af en mængde felter.<br />
Nogle af kartotekerne består kun af ganske få felter. Andre består af mange felter. Afdelingskartoteket<br />
består således kun af 7 forskellige felter, medens lagerkartoteket består af over 70 forskellige felter.<br />
Der kan være op til 255 felter i ét kartotek.<br />
Oprettelse af kartoteker<br />
Supervisoren, eller brugere med tilsvarende rettigheder, kan selv oprette nye kartoteker og felter i C5.<br />
Bemærk! Kartoteker kan IKKE slettes igen, når de først er oprettet.<br />
Oprettelse af nyt kartotek<br />
Felt Betydning<br />
Navn på kartotek Sigende navn der anvendes til identifikation af kartoteket f.eks.<br />
’CustTable’.<br />
Printnavn Navn der benyttes om kartoteket i daglig tale f.eks.<br />
’Debitorkartotek’.<br />
Anvendes som ledetekst, når der skrives til skærmen.<br />
Kan f.eks. ses i QT’er i kartotekskolonnen f.eks.<br />
Debitor/Udskrifter/Stamdata/Debitorer.<br />
Ses også i Generelt/Kartotek/Database Status i<br />
kartotekskolonnen.<br />
Ref. Formnavn Navnet på det skærmbillede der hoppes til, når der tastes CTRL+F4.<br />
Angives der ikke et navn i dette felt, hoppes der automatisk til den<br />
form, der har samme navn som kartoteket f.eks. ’CustTable’.<br />
Titel felt Navnet på et felt i kartoteket f.eks. ’Account’.<br />
Feltnavnet, med indhold, vises i rammen på skærmbilleder, der<br />
anvender dette kartotek.<br />
Hvor ligger data Data i kartoteker kan gemmes på tre forskellige måder:<br />
120<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Eksempel<br />
I hvert regnskab<br />
I en midlertidig eller privat fil<br />
Kun i ”DAT” regnskabet<br />
Se forklaring til de tre muligheder herunder.<br />
Applikationsgruppe Evt. angivelse af hvilken applikationsgruppe kartoteket tilhører.<br />
Navngivning af kartoteker<br />
C5 kontrollerer at koden til denne gruppe er OK.<br />
Nye moduler der kodes til C5 af andre end Microsofts egne udviklere, skal overholde følgende syntaks<br />
for navngivning af kartoteker.<br />
Syntaks<br />
<br />
Kartoteks navn startes således med modulnavnets tre første bogstaver skrevet med STORT efterfulgt<br />
kartoteks navn.<br />
BOODestinationer<br />
I eksemplet er der f.eks. oprettet et Booking modul til et rejsebureau, og der oprettes et kartotek med<br />
destinationer. Kartoteknavnet bliver derfor BOODestinationer.<br />
Ovenstående navngivning SKAL overholdes, hvis modulet skal certificeres af Microsoft.<br />
Hvor ligger data<br />
Hvor ligger data Eksempel på kartotek DAT DMO Øvrige<br />
Midlertidigt regnskab LønKørsel (X) (X) (X)<br />
Hvert regnskab DebTable el. DebKart X X X<br />
Kun DAT regnskabet PostNumre X<br />
Markeringerne i felterne til højre viser, hvordan data i et kartotek gemmes i de forskellige regnskaber.<br />
X viser hvor dataene gemmes og vedligeholdes. (X) viser, at dataene kun er midlertidige og slettes, når<br />
C5 lukkes ned.<br />
Midlertidigt regnskab<br />
Ved midlertidigt regnskab kan der tastes data ind i kartoteket i alle regnskaber, men så snart C5 lukkes<br />
ned, slettes de indtastede data. Kartoteket er midlertidigt.<br />
Hvert regnskab<br />
121<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Ved hvert regnskab kan der tastes data ind i kartotekerne i de enkelte regnskaber, og dataene gemmes<br />
i sit eget regnskab, også efter at C5 er lukket ned.<br />
Kun i DAT regnskabet<br />
Når der vælges kun i DAT regnskabet, betyder det, at dataene kun eksisterer i dette regnskab.<br />
Hvis der f.eks. tastes data ind i et kartotek i et andet regnskab end DAT regnskabet, vil dataene blive<br />
gemt i DAT og ikke i det aktuelle regnskab.<br />
Dataene er samtidig til rådighed i alle de øvrige regnskaber.<br />
Postnummer kartoteket er f.eks. fælles for alle regnskaber, idet postnumrene kun ligger i DAT<br />
regnskabet, men alligevel kan ses, vedligeholdes og anvendes i et hvilket som helst andet regnskab.<br />
Passwordbeskyttelse af kartoteker<br />
Det er muligt at indlægge password på de enkelte kartoteker.<br />
Passwords skal huskes<br />
Passwords kan kun ændres ved at indtaste et nyt, men først når der er opnået adgang til<br />
kartoteket ved angivelse af det gamle password<br />
Passwords kan ikke umiddelbart genetableres. Hvis de glemmes, må data betragtes som tabte,<br />
idet kartoteket er låst<br />
Eneste mulighed, for at få slettet et glemt password, består i, at en medarbejder fra Microsoft kommer<br />
ud i virksomheden med et specielt program, der kan låse op for kartoteket igen.<br />
Systemfelter i kartoteker<br />
Alle kartoteker i C5 har fire ensartede systemfelter.<br />
Systemfelter Beskrivelse<br />
RowNumber Postens nummer i kartoteket<br />
LastChanged Dato for sidste manipulation af posten<br />
RecId Record Id, dvs. postens nummer i databasen<br />
FileId File Id, dvs. kartotekets entydige nummer<br />
De fire felter indsættes automatisk, når der oprettes et nyt kartotek.<br />
Da det er systemfelter, skal der heller ikke indtastes data i dem. De vedligeholdes automatisk.<br />
Felterne kan indsættes i skærmbilleder eller rapporter på lige fod med egne oprettede felter. Der kan<br />
f.eks. være behov for at vise sidste ændringsdato for posteringer.<br />
Nye felter i kartoteker<br />
Når der oprettes et nyt felt på et kartotek, vælges først felttype. Felttyperne svarer til de fem datatyper,<br />
der også anvendes til erklæring af variabler.<br />
122<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Felttyper<br />
Felttyper Beskrivelse Datatyper<br />
Alphanumerisk Tekst STR<br />
Heltal Max. 8 cifre INT<br />
Kommatal Beløb/Værdi REAL<br />
Dato Datoer DATE<br />
Fast-Tekst-Type Faste tekster ENUM<br />
Bemærk! Det er ikke muligt at slette et felt eller at ændre type på det.<br />
Hvis et felt f.eks. er blevet oprettet som et kommatalsfelt, og det i virkeligheden skal være et tekstfelt,<br />
kan det ikke lade sig gøre at ændre typen.<br />
Da feltet heller ikke kan slettes, er der kun en udvej, at give det et andet navn og undlade at bruge det,<br />
og derefter oprette et nyt felt i stedet.<br />
Udvej<br />
Der er en måde at ’snyde’ systemet på, så der alligevel kan slettes og ændres type på et felt.<br />
Dette kan ske ved at:<br />
Eksportere kartoteksdefinitionen ud i en tekstfil<br />
Redigere i den eksporterede tekstfil<br />
Importere den redigerede tekstfil, idet den gamle overskrives.<br />
Denne metode må dog kun benyttes på kartoteker, der er fuldstændigt tomme, da der ellers er risiko<br />
for, at smadre sammenhængen mellem data og kartoteksdefinition, hvorefter dataene er ubrugelige.<br />
Regler for feltnavne<br />
Nedenstående regler skal overholdes for navngivning af felter:<br />
Højst 32 tegn<br />
Bogstaverne a-å og A-Å<br />
Tallene 0-9<br />
Eneste tegn derudover er understreg<br />
Første tegn skal være et bogstav<br />
Ingen blanke tegn (mellemrum)<br />
Ikke navnesammenfald med XAL f.eks. ’by’ som i ORDER BY<br />
123<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Fælles ved oprettelse af alle typer nye felter<br />
Felt Betydning<br />
Feltnavn Navn der identificerer feltet i resten af C5 systemet.<br />
Feltnavnet kan ændres, hvis der er behov for det.<br />
Hjælpetekst Kort forklaring til feltet. Forklaringen vises i bunden af skærmen, når<br />
cursoren placeres på feltet i et skærmbillede.<br />
Evt. ledetekst Tekst der anvendes som overskrift eller ledetekst til feltet i f.eks.<br />
skærmbilleder.<br />
Udfylde under<br />
oprettelse<br />
Angives der ingen tekst, anvender systemet automatisk feltnavnet.<br />
Nej eller Ja til om det skal være muligt at indtaste i feltet under<br />
oprettelse af poster.<br />
Normalt Ja, men der kan være situationer, hvor det ikke skal være<br />
muligt. Hvis indholdet i feltet f.eks. er et resultat af indholdet i et<br />
eller flere andre felter.<br />
Udfylde under rettelse Om det skal være muligt at indtaste i feltet under rettelse af en post.<br />
Fungerer som sikring mod uønskede rettelser.<br />
Svaret vil ofte afhænge af svaret i det foregående felt.<br />
Gem feltets indhold Nej eller Ja til at gemme feltets indhold i databasen.<br />
Normalt Ja, men hvis indholdet i feltet f.eks. hentes via opslag i et<br />
andet kartotek, behøver det ikke at blive gemt, og sparer derved<br />
plads i datafilen.<br />
Referencekartotek Navn på et andet kartotek hvori værdien, af det felt der er ved at<br />
blive oprettet, også optræder.<br />
Anvendes sammen med referencefelt til opslag med ALT+H i<br />
skærmbilleder og listbilleder.<br />
Referencefelt Navn på et felt i referencekartoteket, hvori værdi og type er den<br />
samme, som det felt der er ved at blive oprettet.<br />
Specielt ved nye tekstfelter<br />
Felt Betydning<br />
Sammenlignes justeret Der kan vælges mellem Venstrestillet og Højrestillet.<br />
Justeringen har betydning, hvor et tekstfelt indeholder tal, der skal<br />
anvendes i index eller sammenligninger.<br />
Hvis tekstfelter med talværdier skal sorteres i forhold til talværdien,<br />
skal teksten højrestilles.<br />
Længde Længden på den tekst feltet må kunne indeholde.<br />
Max. 255 tegn.<br />
Dan skyggefelt (SQL) Ved at svare Ja, dannes der en kopi i SQL. Kopien indeholder samme<br />
tekst i store bogstaver til søgning i SQL<br />
Specielt ved nye heltals- og kommatalsfelter<br />
124<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Felt Betydning<br />
Opdatering af tallet Der kan vælges mellem Absolut og Relativ.<br />
Specielt ved nye kommatalsfelter<br />
Felt Betydning<br />
Absolut Absolut opdatering bevirker, at enhver forandring af<br />
værdier i en post med det samme bliver gemt på<br />
harddisken og overskriver den oprindelige værdi.<br />
Relativ Relativ opdatering har kun betydning, hvis det er en<br />
flerbrugerversion, hvor flere brugere kan arbejde med<br />
den samme post samtidigt.<br />
Relativ opdatering medfører, at alle bevægelser på en<br />
post opsummeres og gemmes.<br />
Anvendes normalt ikke, da det kan give kludder i<br />
opdateringer.<br />
National valuta Nej = Vis kun beløb i national valuta.<br />
Specielt ved nye fasttekstfelter<br />
Felt Betydning<br />
Hvilken Fast-Tekst-<br />
Type<br />
Ja = Vis beløb i den valuta der vælges med ALT+W inden en form<br />
åbnes eller en rapport startes.<br />
(Ledeteksterne ændres til at vise valuta i brugeropsætning i feltet<br />
’Vis præsentationsvaluta’)<br />
Her angives navnet på den fastteksttype, der skal tilknyttes dette felt.<br />
Angives der ingen fastteksttype, indsættes der automatisk typen<br />
NejJa. (Ses først når feltet åbnes igen under Ret)<br />
125<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Kartoteker<br />
Opgave 1: Fasttekster<br />
Formål med opgaven<br />
At oprette nye fasttekster<br />
Huskelister<br />
Fasttekst – Opret ny type<br />
Beskrivelse<br />
I forbindelse med et system til styring af varer der udlånes, skal der oprettes to nye fastteksttyper. Den<br />
ene type skal indeholde tekster til de forskellige typer af udlån og den anden skal indeholde tekster,<br />
der vedrører udlånslinjernes status.<br />
Navne og indholdet i de to fastteksttyper er beskrevet i skemaet herunder. Der kan evt. sættes<br />
checkmærker ud for de tekster, der er indtastet.<br />
Fastteksttypen UDLUdlånsType<br />
Fastteksttypens navn Position Tekst √<br />
UDLUdlånsType 0 Udlån<br />
Fastteksttypen UDLUdlånsStatus<br />
1 Kommission<br />
2 Andet<br />
Fastteksttypens navn Position Tekst √<br />
UDLUdlånsStatus 0 Udlånt<br />
1 Returneret<br />
2 Solgt<br />
3 Bortkommet<br />
4 Skrottet<br />
Forløb √<br />
1 Opret først fastteksttypen ’UDLUdlånsType’ og indsæt teksterne iflg. ovenstående<br />
skema<br />
2 Opret derefter fastteksttypen ’UDLUdlånsStatus’ og indsæt teksterne iflg.<br />
ovenstående skema<br />
126<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgave 2: Kartoteker<br />
Formål med opgaven<br />
At oprette nye kartoteker med tilhørende felter<br />
Huskelister<br />
Kartotek – Navn<br />
Kartotek – Feltbehandling<br />
Beskrivelse<br />
Der skal oprettes to nye kartoteker til registrering af udlånte varer.<br />
Registreringen skal foregå på samme måde, som når der oprettes salgsordrer i C5, idet der skal være ét<br />
kartotek til ordrehoveder og ét til ordrelinjer.<br />
Kartoteket til ordrehovederne skal hedde UDLUdlånsKart, og kartoteket til ordrelinjerne skal hedde<br />
UDLUdlånsPost.<br />
Navngivningen følger kodestandarden for nye moduler og kartoteker. Modulet er UDLÅN og de tre<br />
første bogstaver indsættes foran hvert kartoteksnavn.<br />
Kartoteket UDLUdlånsKart<br />
Kartoteksnavn Type Specielt Lgd Feltnavn Udfyld<br />
under<br />
rettelse<br />
UDLUdlånsKart Int Absolut UdlånsNr Nej<br />
Str Højrestillet 10 DebitorKto Nej<br />
Date UdlånsDato ?<br />
Enum UDLUdlåns-type UdlånsType * ?<br />
Str Venstrestillet 25 KontaktPerson ?<br />
Date ReturDato ?<br />
Real Absolut Forsikringssum ?<br />
* Fastteksttypen til feltet UdlånsType er den nyoprettede fasttekst med navnet UDLUdlånstype.<br />
127<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
√
Kartoteket UDLUdlånspost<br />
Kartoteks-navn Type Specielt Lgd Feltnavn Udfyld<br />
under<br />
rettelse<br />
UDLUdlånsPost Int Absolut UdlånsNr Nej<br />
Str Venstrestillet 10 VareNr Ja<br />
Str Venstrestillet 30 VareNavn Nej<br />
Str Venstrestillet 10 SerieNr Ja<br />
Enum UDLUdlåns-<br />
Status<br />
Status * Ja<br />
Str Højrestillet 10 DebitorKto Nej<br />
* Fastteksttypen til feltet Status er den nyoprettede fasttekst med navnet UDLUdlånsStatus.<br />
Forløb √<br />
1 Følg huskelisten hvis du ikke ved hvordan, der oprettes kartoteker.<br />
2 Under oprettelsen af felterne i kartotekerne, skal du kun indtaste de informationer,<br />
der er vist i ovenstående skemaer. Resten skal være blanke eller er automatisk<br />
udfyldt med default informationer.<br />
3 Opret først kartoteket ’UDLUdlånsKart’ og indsæt felterne iflg. ovenstående skema.<br />
4 Opret derefter kartoteket ’UDLUdlånsPost’ og indsæt felterne iflg. ovenstående<br />
skema.<br />
5 Du kan evt. indtaste ledetekster og hjælpetekster, hvis du ønsker det, og der er tid til<br />
det.<br />
128<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
√
Opgave 3: Dokumentation<br />
Mål med opgaven<br />
At udskrive dokumentation på kartotekerne<br />
Huskelister<br />
Kartotek – Dokumentation<br />
Beskrivelse<br />
Efter oprettelse af de to kartoteker med felter, skal der udskrives dokumentation på dem og det skal<br />
kontrolleres, at alt er oprettet korrekt.<br />
Forløb √<br />
1 Inden udskrivning af dokumentationen skal du, i begge kartoteker, vælge feltet<br />
LøbeNummer og indtaste dit navn i hjælpeteksten<br />
2 Dette er kun for, at du kan kende din dokumentation fra de andre kursisters, når den<br />
udskrives på printeren<br />
3 Følg huskelisten hvis du ikke kan huske hvordan, der udskrives dokumentation på<br />
kartotekerne<br />
4 Udskriv dokumentation for kartotekerne på printeren<br />
5 Kontrollér at kartotekerne er rigtigt oprettet<br />
129<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
15. Indexer<br />
Mål med lektionen<br />
Formålet med denne lektion er at lære deltagerne at oprette og navngive indexer i kartoteker.<br />
Efter lektionen skal kursisterne kunne:<br />
Oprette og navngive nye Index.<br />
Indexer generelt<br />
Index oprettes og vedligeholdes i de kartoteker de tilhører.<br />
C5 leveres med index til de eksisterende kartoteker, men der kan oprettes flere nye, hvis der opstår<br />
behov for det. Der kan således være flere index til hvert kartotek. De oprindelige index kan ikke slettes,<br />
men de kan ændres.<br />
Det anbefales ikke at foretage ændringer i eksisterende index, da det kan give uforudsigelige følger.<br />
Hvis der er behov for det, er det bedre at oprette nye index.<br />
Anvendelse af indexer<br />
Index anvendes til forskellige formål f.eks.:<br />
Sortering af kartoteker<br />
Kontrol af nøgleværdier<br />
Sortering af skærmbilleder<br />
Sortering af listbilleder<br />
Direkte opslag<br />
Nedenstående er en kort introduktion til de forskellige anvendelsesmuligheder.<br />
Mulighederne behandles nærmere i lektioner om de forskellige emner, når der er naturligt behov for<br />
dette.<br />
Sortering af kartoteker i rapporter og XAL kørsler<br />
Indexer giver mulighed for hurtig sortering og fremfinding af poster, idet de peger hen til de enkelte<br />
poster i databasen i den orden, der er angivet i indexet.<br />
Kontrol af nøgleværdier ved oprettelse i skærm- og listbilleder<br />
Et index kan benyttes til, at kontrollere om der må oprettes flere poster med samme nøgleværdier. Om<br />
der f.eks. må oprettes to personer med samme personnummer, eller to kunder med samme<br />
kundenummer.<br />
Sortering af skærmbilleder<br />
Når der skal bladres i poster i skærmbilleder, eller poster skal listes i skærmbilleder, der kan vise flere<br />
poster ad gangen, benytter forms automatisk det først oprettede index som default, hvis der ikke<br />
angives andet.<br />
Mangler index kan der kun søges fortløbende, dvs. i den rækkefølge posterne blev indtastet.<br />
130<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Sortering af listbilleder<br />
Ved kald af et listbillede vil systemet forsøge at finde et index med det aktuelle felt som første<br />
komponent. Hvis det findes vil dette index blive benyttet til sortering af listbilledet.<br />
Hvis det ikke findes, bliver det først oprettede index brugt.<br />
Hvis der slet ikke er nogen Index, benyttes posternes indtastningsrækkefølge.<br />
Direkte opslag<br />
Hvis der skal hentes værdier fra et andet kartotek, end det der aktuelt benyttes, kan dette gøres med et<br />
direkte opslag og et index.<br />
Oprettelse af Index<br />
Index oprettes i udviklingsmenuen under DBD/Ret/Kerne/’Vælg et kartotek’/<br />
Indexbehandling/Opret.<br />
Index oprettes ved at angive følgende feltværdier.<br />
Felter der udfyldes ved oprettelse af Index<br />
Felt Betydning<br />
Indexnavn For indexnavne gælder de samme regler som for felter. Felter og<br />
Index må dog ikke have sammenfaldene navne.<br />
Index navngives ofte ud fra de felter de består af, og afsluttes som<br />
regel med bogstaverne Idx. Se nedenstående eksempler.<br />
Ens nøgler tilladt Indexet styrer hvorvidt, der må være flere poster med samme<br />
nøgleværdier.<br />
Hvis der ikke må være flere debitorer med samme kontonummer,<br />
skal der være et index med kontonummer som eneste komponent<br />
og med ’NEJ’ i feltet: ”Ens nøgler tilladt”.<br />
Hvis der derimod skal være mulighed for at sortere debitorerne i<br />
navneorden, skal der også være et index i navneorden. Da der gerne<br />
må være flere debitorer med samme navn, skal indexet have ’JA’ i<br />
feltet: ”Ens nøgler tilladt”.<br />
Er indexet aktivt Aktive Index vedligeholdes automatisk af systemet.<br />
Et index kan slås fra, så det ikke længere er aktivt, og ikke skal<br />
vedligeholdes mere.<br />
Så snart indexet slås til igen, bliver det automatisk ajourført.<br />
Det skal bemærkes, at jo flere Index der er aktive, jo mere tid skal C5<br />
bruge til at vedligeholde dem.<br />
Beskrivelse af index Beskrivelsen (indexformlen) består af kartoteksfelter adskilt med<br />
komma.<br />
Indexet kan sorteres stigende (ASCEND) eller faldende (DESCEND).<br />
Tekstfelter kan sorteres ud fra et valgt antal tegn i feltet startende fra<br />
venstre mod højre.<br />
Der kan indsættes kommentarer i indexformler.<br />
Se nedenstående eksempler på indexformler.<br />
131<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Navngivning og indexformel<br />
Index navngives ofte ud fra de felter de består af og afsluttes som regel med bogstaverne Idx.<br />
Åbnes nogle af de index der findes i nuværende C5 kartoteker, ses at der er brugt mange forskellige<br />
måder at navngive på.<br />
C5 vers. 2012 -> Eksempler på indexnavne<br />
IndexNavn Felter i Indexformel<br />
AccountIdx Account<br />
AcDateIdx Account, Budgetcode, Date_, Department, RowNumber<br />
C5 vers. -> 4.1 Eksempler på indexnavne<br />
IndexNavn Felter i Indexformel<br />
KontoIdx Konto<br />
KtoDatoIdx Konto, BudgetKode,Dato,LøbeNummer<br />
C5 vers. 2012 -> Eksempler på indexformler<br />
IndexNavn Felter i Indexformel<br />
AccountIdx Account ASCEND<br />
AccDateIdx Account ASCEND, Date_ DESCEND<br />
NameIdx Name DESCEND 3 {Name faldende 3 tegn}<br />
C5 vers. -> 4.1 Eksempler på indexformler<br />
IndexNavn Felter i Indexformel<br />
KontoIdx Konto ASCEND<br />
KtoDatoIdx Konto ASCEND, Dato DESCEND<br />
NavnIdx Navn DESCEND 3 {Navn faldende 3 tegn}<br />
Index med tekstfelter<br />
Hvis et tekstfelt, der har et talindhold, skal indgå i et index og sorteringen skal ske i forhold til<br />
talindholdet, som f.eks. kontofeltet debitorkartoteket, er det vigtigt at feltet er højrestillet.<br />
En højrestilling af feltet betyder således, at eventuelle blanke tegn altid placeres til venstre og værdien<br />
af feltet placeres til højre.<br />
Hvis feltet er venstrestillet, kan indholdet ikke behandles som en talværdi, men vil blive behandlet som<br />
en tekst, hvilket umuliggør en korrekt sortering i både stigende og faldende nummerorden.<br />
(Medmindre længden og sammensætningen af alle tal og tegn er ens for alle poster.)<br />
Navngivning af Index i nye moduler<br />
Nye moduler der kodes til C5 af andre end Microsofts egne udviklere, skal overholde følgende syntaks<br />
for navngivning af Index.<br />
Syntaks<br />
132<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Eksempel<br />
<br />
Indexnavn startes således med modulnavnets tre første bogstaver skrevet med STORT efterfulgt navn<br />
på index. Navn på index skal desuden altid bestå af de tre første tegn af de indgående felters navne,<br />
hvor første tegn skrives med stort. Afslut navnet med Idx.<br />
BOODesLanHotIdx<br />
I eksemplet er der f.eks. oprettet et Booking modul til et rejsebureau og der er oprettet et kartotek<br />
med felterne: Destination, Land, Hotel osv.<br />
Et index med ovenstående felter kommer derfor til at hedde BOODesLanHotIdx.<br />
Navn på index må højst være 16 tegn. Det kan sagtens være længere, men der kan så opstå<br />
uforudsigelige situationer.<br />
Ovenstående navngivning SKAL overholdes, hvis modulet skal certificeres af Microsoft.<br />
133<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Index<br />
Opgave 1: Index<br />
Mål med opgaven<br />
At oprette Index på kartoteker.<br />
Huskelister<br />
Kartotek – Index<br />
Beskrivelse<br />
Der skal oprettes Index til de nye kartoteker, så posterne kan styres ordentligt.<br />
Indexet til ordrehovedet skal styre, at der ikke må findes to ordrer med samme ordrenummer, og at der<br />
ikke må være to ordrer af samme type på samme dag til samme kunde.<br />
Indexet til udlånsposterne styrer, at der gerne må være flere linjer med samme varenummer på den<br />
samme ordre.<br />
Index til UDLUdlånsKart<br />
Indexnavn Ens nøgler Aktivt Beskrivelse af index (felter) √<br />
UDLDebDatTypIdx NEJ JA DebitorKto<br />
UdlånsDato<br />
UdlånsType<br />
UDLUdlIdx NEJ JA UdlånsNr<br />
UDLDebUdlIdx Nej JA DebitorKto<br />
Index til UDLUdlånsPost<br />
UdlånsNr<br />
Indexnavn Ens Nøgler Aktivt Beskrivelse af index (felter) √<br />
UDLUdlVarIdx JA JA UdlånsNr<br />
VareNr<br />
Forløb √<br />
1 Følg huskelisten hvis du ikke ved hvordan, der oprettes Index på kartoteker.<br />
2 Opret først Index på kartoteket UDLUdlånsKart iflg. skemaet<br />
3 Opret derefter indexet på kartoteket UDLUdlånsPost iflg. skemaet<br />
134<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgave 2: Dokumentation<br />
Mål med opgaven<br />
At udskrive dokumentation på kartotekerne til indexkontrol.<br />
Huskelister<br />
Kartotek – Dokumentation<br />
Beskrivelse<br />
Efter oprettelse af Index, skal der udskrives dokumentation på kartotekerne, og det skal kontrolleres, at<br />
Indexne er oprettet korrekt.<br />
Forløb √<br />
1 Inden udskrivning af dokumentationen skal du i begge kartoteker gå ind i feltet<br />
LøbeNummer og indtaste dit navn i hjælpeteksten.<br />
Dette er kun for, at du kan kende din dokumentation fra de andre kursisters, når<br />
den udskrives på printeren.<br />
2 Følg huskelisten hvis du ikke ved hvordan, der udskrives dokumentation på<br />
kartotekerne.<br />
3 Udskriv dokumentation for kartotekerne på printeren.<br />
4 Kontrollér at Indexne er rigtigt oprettet.<br />
135<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
16. Listbilleder<br />
Formål med lektionen<br />
Formålet med denne lektion er at lære deltagerne at oprette og anvende listbilleder.<br />
Efter lektionen skal kursisterne kunne:<br />
Oprette listbilleder<br />
Anvende listbilleder via udviklingsmenuen<br />
Oprette kartoteks- og feltreferencer<br />
Kalde listbilleder via referencer på kartoteksfelter.<br />
Listbilleder generelt<br />
Et listbillede er et hjælpebillede i form af en liste over poster i ét kartotek.<br />
C5 leveres med færdige listbilleder, der er oprettet i forvejen til forskellige kartoteker, men der kan<br />
oprettes flere listbilleder efter behov.<br />
Anvendelse<br />
Listbilleder kan i skærmbilleder eller i andre listbilleder kaldes med ALT+H via referencefelt i<br />
databasen, og feltværdien kan overføres til det felt, der blev kaldt fra.<br />
Listbilleder kan også anvendes fra udviklingsmenuen til oprettelse, ændring og sletning af poster<br />
direkte i databasen.<br />
Oprettelse af listbilleder<br />
Listbilleder oprettes i udviklingsmenuen, i søjlen LST, hvor der først vælges, hvilket kartotek listbilledet<br />
skal oprettes til. Der kan være flere listbilleder til hvert kartotek.<br />
Billederne oprettes ved at åbne for et indtastnings billede til opsætning af listbilledets vindue. Dette<br />
billedet indeholder en del felter, der udfyldes med informationer om størrelse, farve osv. iflg.<br />
nedenstående skema.<br />
I realiteten er det nok at angive, hvad billedet skal hedde i feltet ’Søgenavn i liste’, og så indsætte de<br />
felter der skal vises på billedet.<br />
De øvrige felter udfyldes efter behov.<br />
Opsætning af listbilledets vindue<br />
Felt Betydning<br />
Søgenavn i liste Navn der kendetegner listbilledet fremover og som der søges på i<br />
processer og menuer.<br />
Når billedet go<strong>dk</strong>endes, gemmes det som en brugertilretning, og navnet<br />
foranstilles med et $ tegn.<br />
Tekst i rammen Tekst der vises i vinduets ramme under afvikling.<br />
Vinduets højde /<br />
bredde<br />
Vinduets højde i antal linjer og bredde i antal kolonner.<br />
Felterne indeholder defaultværdier, der kan ændres efter behov.<br />
Farvesæt Standard anvendes altid farvesæt 2.<br />
136<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Vindue Angivelse af hvorledes vinduet skal vises på skærmen.<br />
Indsætning af felter<br />
Fast<br />
(default)<br />
Den angivne vinduesstørrelse benyttes.<br />
Vinduet kan kun skaleres ned. Felter flyttes ikke.<br />
Skalerbart Den angivne vinduesstørrelse benyttes.<br />
Vinduet kan skaleres både op og ned.<br />
Felter flyttes automatisk ved autogenererede blokke, dvs.<br />
multi record blokke og ikke ved enkelt record blokke.<br />
Dynamisk Fylder hele skærmbilledet som default uanset angivet<br />
vinduesstørrelse. Virker ellers som skalérbart.<br />
Lukket Lukker af for aktivering af form (trigger kode kan dog<br />
fortsat afvikles).<br />
Nedarvet Arbejder skjult i det øjeblikkelige vindue.<br />
Dette benyttes ikke standard i applikationen.<br />
Felterne indsættes på billedet via en tabel. De vises i samme rækkefølge som i denne tabel.<br />
Det er muligt at ændre opsætningen af de enkelte felter i listbilledet. Tekstfelter kan f.eks. ændres i<br />
længden og kommatalsfelter kan formateres på forskellige måder.<br />
Et listbillede til debitorkartoteket kunne f.eks. bestå af felterne i nedenstående tabel, og indtastet i<br />
samme rækkefølge:<br />
C5 vers. 2012 -> Eksempel på felter i listbilledet til CustTable<br />
Feltnavn<br />
Account<br />
Name<br />
Phone<br />
C5 vers. -> 4.1 Eksempel på felter i listbilledet til DebKart<br />
Feltnavn<br />
Konto<br />
Navn<br />
Telefon<br />
137<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Resultatet<br />
Listbilledet viser felterne i samme rækkefølge som i opsætningen.<br />
Hvis felterne indtastes i modsat rækkefølge i opsætningen, vises de også i modsat rækkefølge i<br />
listbilledet dvs. Telefon, Navn og Kontonummer.<br />
Navngivning af listbilleder<br />
Listbilleder navngives i ’Opsætning af vindue’ i feltet ’Søgenavn i liste’.<br />
Billederne kan kaldes hvad som helst, men det kan være en fordel at give billederne samme navne som<br />
et af felterne i kartoteket.<br />
Ofte gives billedet samme navn, som det felt der refereres til når der tastes ALT+H.<br />
Betydningen af at give billedet det rigtige navn fremgår af afsnittet ’Kald via kartoteks- og<br />
feltreferencer’. Her vises desuden hvad der sker, hvis listbillederne har andre navne.<br />
Kald fra udviklingsmenuen<br />
Listbilleder kan kaldes direkte fra udviklingsmenuen og afvikles i forskellige tilstande, alt efter hvilken<br />
funktion der skal udføres.<br />
Listbilleder kan således anvendes til afprøvning af kartoteker, idet der kan manipuleres med data<br />
direkte i det tilhørende kartotek.<br />
Funktioner i udviklingsmenuen<br />
Funktion Muligheder<br />
Vis Vise<br />
Ret Vise, rette<br />
Opret Vise, rette, oprette<br />
Slet Vise, rette, oprette, slette<br />
Debitorer<br />
Kontonummer Navn Telefon<br />
138<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Bemærk!<br />
Kald af listbilleder i udviklingsmenuen med ovenstående funktioner, bør ikke anvendes i driften.<br />
Eventuelle inddatakontroller, der er indbygget i skærmbilleder, fungerer ikke i listbilleder.<br />
Data manipuleres direkte i kartoteket.<br />
Kald via kartoteks- og feltreferencer<br />
Listbilleder kan også kaldes fra skærmbilleder og fra andre listbilleder via feltreferencer på<br />
kartoteksfelter i databasen.<br />
Referencerne indsættes i opsætningen af databasefelter i felterne referencekartotek og referencefelt.<br />
Der kan både refereres til andre kartoteker og felter, og til samme kartotek og felt.<br />
Kartoteks- og feltreferencer<br />
Referencekartotek...:<br />
Referencefelt.......:<br />
Bemærk!<br />
Ved kald af listbilleder via feltreferencer kan der kun vises og overføres feltværdier. Der kan ikke<br />
oprettes, rettes og slettes, som ved kald fra udviklingsmenuen.<br />
Opslag med ALT+H fungerer kun på felter med referencer.<br />
Kald af listbillede via referencefelter<br />
Skærmbillede (form)<br />
Felt ABC<br />
Opsætning af databasefelt<br />
ALT+H<br />
B<br />
Listbilledet med samme navn som<br />
reference felt vises<br />
Opsætning på felt ABC i<br />
kartoteket til formen<br />
Ref. Kartotek: Xyz<br />
Referencefelt: B<br />
Listbillederne A, B, C, D i<br />
reference kartoteket Xyz<br />
139<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
A<br />
B<br />
C<br />
D
Automatisk valg af listbillede<br />
Hvis kartoteket, der refereres, til har et listbillede med samme navn som selve referencefeltet, aktiveres<br />
listbilledet i samme øjeblik, der tastes ALT+H.<br />
Findes der ikke et listbillede med samme navn som referencefeltet, vises der først en pickliste med de<br />
eksisterende listbilleder, også hvis der kun findes ét listbillede.<br />
Fra picklisten vælges det billede der skal åbnes.<br />
Sortering af poster i listbillede<br />
Sorteringsrækkefølgen af posterne i listbilledet afhænger af index som flg.:<br />
Hvis der på referencekartoteket er et index med referencefeltet som første komponent, benyttes<br />
dette index.<br />
Hvis der ikke på referencekartoteket er et index med referencefeltet som første komponent,<br />
benyttes det først oprettede index.<br />
Hvis der slet ikke er noget index på referencekartoteket, benyttes indtastningsrækkefølgen.<br />
Værdien i referencefeltet overføres fra den post cursoren står på i listbilledet, også selv om feltet ikke<br />
vises i listbilledet.<br />
140<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Listbilleder<br />
Opgave 1: Kartoteks- og feltreferencer<br />
Mål med opgaven<br />
At indsætte referencer på kartoteksfelter.<br />
Huskelister<br />
Kartotek – Feltbehandling (referencer)<br />
Beskrivelse<br />
Der skal oprettes kartoteks- og feltreferencer på de nye kartoteker, så der kan vises og overføres<br />
feltværdier til listbilleder og skærmbilleder.<br />
Feltreferencer på UDLUdlånsKart<br />
Kartotek Felt Referencekartotek Referencefelt √<br />
UDLUdlånsKart UdlånsNr UDLUdlånsKart UdlånsNr<br />
Feltreferencer på UDLUdlånsPost<br />
DebitorKto CustTable Account<br />
Kartotek Felt Referencekartotek Referencefelt √<br />
UDLUdlånsPost UdlånsNr UDLUdlånsKart UdlånsNr<br />
VareNr InvenTable ItemNumber<br />
VareNavn InvenTable ItemName1<br />
DebitorKto CustTable Account<br />
Forløb √<br />
1 Åben de to kartoteker og indsæt kartoteks- og feltreferencer på felterne iflg.<br />
ovenstående skemaer.<br />
141<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgave 2: Listbillede til UDLUdlånsKart<br />
Mål med opgaven<br />
At oprette et listbilleder samt afprøve om indexene fungerer.<br />
Huskelister<br />
Listbillede – Opret<br />
Beskrivelse<br />
Der skal oprettes et listbillede til UDLUdlånsKart som vist herunder.<br />
Forløb √<br />
1 Følg huskelisten hvis du ikke kan huske hvordan, der skal oprettes listbilleder.<br />
2 Opret et listbillede til kartoteket UDLUdlånsKart efter ovenstående eksempel.<br />
Opsætning af vinduet<br />
Bredde = 50 tegn, Farvesæt = 1, Vindue = Skalérbart.<br />
Felter<br />
UdlånsKart<br />
UdlånsNr DebitorKto UdlånsDa UdlånsType<br />
Kontaktperson ReturDat Forsikr<br />
Indsæt alle de felter du selv oprettede i kartoteket.<br />
3 Opret forskellige udlånsordrer med hver sin debitorkonto.<br />
4 Afprøv om indexet UDLUdldx fungerer ved at indtaste et udlånsnummer, der findes<br />
i forvejen. Det må du ikke kunne, da indexet er entydigt.<br />
5 Afprøv om indexet UDLDebDatTypIdx fungerer ved at indtaste en ny ordre, der har<br />
samme DebitorKonto, UdlånsDato og UdlånsType. Det må du ikke kunne, da index<br />
er entydigt.<br />
6 Prøv også om fastteksten fungerer i feltet UdlånsType.<br />
7 Prøv at finde datoerne med ALT+H.<br />
142<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgave 3: Listbillede til UDLUdlånsPost<br />
Mål med opgaven<br />
At oprette et listbilleder samt afprøve om index fungerer.<br />
Huskelister<br />
Listbillede – Opret<br />
Beskrivelse<br />
Der skal oprettes et listbillede til UDLUdlånsPost som vist herunder:<br />
Forløb √<br />
1 Opret et listbillede til kartoteket UDLUdlånsPost efter ovenstående eksempel.<br />
Opsætning af vinduet<br />
Bredde = 50 tegn, Farvesæt = 1, Vindue = Skalérbart.<br />
Felter<br />
UdlånsPost<br />
UdlånsNr VareNr VareNavn<br />
SerieNr Status DebitorKto<br />
Indsæt alle de felter du selv oprettede i kartoteket.<br />
2 Opret nogle udlånslinjer på forskellige udlånsnumre.<br />
3 Afprøv om index UDLUdlVarIdx fungerer ved at indtaste et af de udlånsnumre der<br />
findes i forvejen og med samme varenummer. Det skal du kunne, da indexet ikke er<br />
entydigt.<br />
4 Prøv at skifte mellem farvesæt 1 og 2 i opsætning af listbilledet.<br />
143<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
17. Formens vindue<br />
Formål med lektionen<br />
Formålet med denne lektion er at lære kursisterne at oprette formens vindue og forstå opbygningen af<br />
forms (skærmbilleder). Desuden lærer de at anvende macroer til styring af forms.<br />
Efter lektionen skal kursisterne kunne:<br />
Oprette formens vindue<br />
Indsætte macroer i triggerne INIT, ERROR og PRE-FORM<br />
Forstå og anvende macroerne #MacroLoad(), #FormError, #Frm_Index(), #Frm_Search() og<br />
#SearchEnd()<br />
Skærmbilleder generelt<br />
Skærmbilleder i C5 kaldes også ’forms’. De oprettes og vedligeholdes i udviklingsmenuen i søjlen FRM.<br />
En form består af ét vindue, en eller flere blokke og felter.<br />
Blokke kan indsættes i vinduet som vist herunder.<br />
Blokke i forms<br />
Én blok med én post repræsenteret ved et antal felter<br />
Én blok med flere poster repræsenteret ved felter i kolonner<br />
Flere blokke af ovennævnte typer<br />
Formens opbygning<br />
Blok med<br />
én post i<br />
felter<br />
Blok med<br />
flere poster i<br />
kolonner<br />
Formens vindue<br />
Formens vindue er altid det første, der sættes op.<br />
Ved opsætningen vises der et skærmbillede med en del felter, der kan udfyldes. Det er dog ikke alle<br />
felter, der behøver at blive udfyldt, da de indeholder defaultværdier, der kan anvendes, som de er.<br />
De vigtigste felter fremgår af nedenstående skema.<br />
Formens<br />
Vindue<br />
Felter<br />
144<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opsætning af vindue (vigtigste felter)<br />
Felt Betydning<br />
Søgenavn i liste Navn der kendetegner formen fremover, og som der søges på i<br />
processer og menuer.<br />
Når formen go<strong>dk</strong>endes, bliver den gemt som en brugertilretning, og<br />
navnet foranstilles med et $ tegn.<br />
Tekst i rammen Tekst der vises i vinduets ramme under afvikling.<br />
Vinduets højde /<br />
bredde<br />
Vinduets højde i antal linjer og bredde i antal kolonner. Felterne<br />
indeholder defaultværdier, der evt. kan ændres efter behov.<br />
Farvesæt Standard anvendes altid farvesæt 2.<br />
Vindue Angivelse af hvorledes vinduet skal vises på skærmen.<br />
Fast<br />
(default)<br />
Angivne vinduesstørrelse benyttes.<br />
Vinduet kan kun skaleres ned. Felter flyttes ikke.<br />
Skalerbart Angivne vinduesstørrelse benyttes.<br />
Vinduet kan skaleres både op og ned.<br />
Felter flyttes automatisk ved autogenererede multi<br />
record blokke, men ikke ved enkelt record blokke.<br />
Dynamisk Fylder hele skærmbilledet som default uanset angivet<br />
vinduesstørrelse. Virker ellers som skalérbart.<br />
Lukket Lukker af for aktivering af form (trigger kode kan dog<br />
fortsat afvikles)<br />
Nedarvet Arbejder skjult i det øjeblikkelige vindue.<br />
Dette benyttes ikke standard i applikationen<br />
Forms formler Triggere i form af XAL editorbokse. Anvendes til indtastning af XAL<br />
kode til styring af forms og deres poster.<br />
Triggere (forms formler) generelt<br />
Det er muligt selv at styre en forms funktion ved at indtaste XAL-kode og specielle forms kontrol<br />
kommandoer i triggere i formen.<br />
Triggere er almindelige XAL editorbokse, der kan åbnes rundt omkring, i de tre niveauer forms består<br />
af, som vist i nedenstående illustration.<br />
145<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Formens tre niveauer med triggere dvs. formler<br />
Indholdet i triggerne eksekveres på bestemte tidspunkter under afviklingen af forms. De enkelte<br />
triggere behandles i lektionerne, efterhånden som der bliver behov for dem.<br />
I denne lektion behandles nogen af de triggere (form formler), der findes under opsætning af formens<br />
vindue.<br />
Triggere i ’Opsætning af vinduet’<br />
Triggere i forms er som tidligere omtalt XAL editorbokse, hvori der kan indtastes kode, der kan styre<br />
formens forskellige funktioner efter programmørens ønsker.<br />
Under ’Opsætning af vinduet’ findes der nogle triggere, der f.eks. kan anvendes til fejlhåndtering og<br />
styring af poster i forms.<br />
Triggere i vinduet<br />
Felter<br />
Felt<br />
formler<br />
Blokke<br />
Blok<br />
formler<br />
Vindue<br />
Vindue<br />
Form<br />
formler<br />
Init<br />
Form<br />
formler<br />
Pre-form<br />
Error<br />
146<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Triggerne i opsætning af vinduet (i denne lektion)<br />
Trigger Eksempler på anvendelse<br />
Init Første trigger der gennemløbes når formen aktiveres.<br />
Anvendes bl.a. til kald af macro biblioteker<br />
Error Indsættelse af macroen #FormError til fejlhåndtering<br />
Pre-form Gennemløbes lige efter Init triggeren.<br />
Forms kontrolkommandoer og macroer<br />
Angivelse af index til sortering af poster i blokke.<br />
Angivelse af opslag på første eller sidste post i indexet.<br />
Funktionerne i forms kan styres med specielle forms kontrolkommandoer i de forskellige triggere der<br />
findes i vinduet, blokkene og felterne.<br />
Forms kontrolkommandoer<br />
Der findes en mængde forskellige forms kontrolkommandoer. Kommandoerne anvendes som vist i<br />
nedenstående syntaks.<br />
Syntaks for kontrolkommando<br />
Control ” ”<br />
Bemærk at kommandoerne startes med ordet Control efterfulgt af selve kommandoen i citationstegn.<br />
Desuden anvendes der forskellige parametre afhængigt af, hvilken kommando det drejer sig om.<br />
Parametrene skrives blot efter hinanden adskilt med et mellemrum.<br />
Da kommandoernes syntaks først kontrolleres når formen afvikles, er der udarbejdet nogle macroer til<br />
erstatning for dem.<br />
Kommandoerne kan stadig anvendes, men macroerne er bedre at bruge, idet de syntakscheckes<br />
allerede under indtastningen.<br />
Macroer<br />
Macroerne angives med en anden syntaks en kommandoerne.<br />
Syntaks for kontrolmacro<br />
#Frm_(, )<br />
I syntaksen startes macroer med ordet #Frm_. Straks efter understregen angives selve kommandoen.<br />
De forskellige parametre angives herefter i en parentes adskilt med kommaer.<br />
147<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. 2012 -> Sammenligning mellem kontrolkommando og -macro<br />
Control ”Index InvenTable ItemIdx”<br />
#Frm_Index(InvenTable, ItemIdx)<br />
C5 vers. -> 4.1 Sammenligning mellem kontrolkommando og -macro<br />
Control ”Index LagKart VareIdx”<br />
#Frm_Index(LagKart, VareIdx)<br />
Ovenstående eksempel viser opstillingen af kommandoen Index sammenlignet med den tilsvarende<br />
macro.<br />
De to linjer i eksemplet udfører således akkurat det samme. I denne og de efterfølgende lektioner<br />
anvendes macroerne.<br />
Kontrolkommandoer og -macroer i denne lektion<br />
Kontrolkommando Kontrolmacro<br />
Control ”Index”<br />
Control ”Search”<br />
Control ”SearchTop”<br />
Control ”SearchEnd”<br />
#Frm_Index()<br />
#Frm_Search()<br />
#Frm_SearchTop()<br />
#Frm_SearchEnd()<br />
Ovenstående macroer behandles efterfølgende.<br />
#MacroLoad()<br />
Macroen #MacroLoad() anvendes til at åbne for macrobiblioteker, så der opnås adgang til deres<br />
macroer.<br />
Af syntaksen fremgår det, at der i paranteserne til macroen skal angives navn på det kartotek, der skal<br />
åbnes (loades).<br />
Syntaks<br />
#MacroLoad(biblioteksnavn)<br />
Macroen anvendes både i XAL kørsler, rapporter og forms.<br />
148<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Eksempel<br />
Der findes mange forskellige macrobiblioteker i XAL sproget. Nogle er dedikeret til specielle formål,<br />
hvilket ofte fremgår af bibliotekets navn.<br />
Macroer der kun anvendes i forms, er f.eks. samlet i et bibliotek med navnet FORMS.<br />
Trigger<br />
Macroen indsættes altid i starten af XAL kørsler, rapporter og forms.<br />
I forms indsættes macroen således i den trigger, der gennemløbes allerførst, når formen aktiveres.<br />
Dette er triggeren med navnet INIT, der står for initialisering.<br />
Trigger Macroer<br />
Init<br />
Eksempel<br />
#FormError<br />
#MacroLoad(FORMS)<br />
Macroen #FormError anvendes til udskrivning af fejlmeddelelser i en boks på skærmen.<br />
Fejlmeddelelserne i boksen er mere sigende, end de fejlmeddelelser der normalt vises på den nederste<br />
linje i skærmbilledet.<br />
Meddelelserne dukker mest op, når der skrives fejl i kommandoer i triggerne, idet disse kommandoer<br />
først syntakscheckes og fejlkontrolleres, når formen afvikles.<br />
Macroen angives som følger uden nogen form for parametre.<br />
Syntaks<br />
#FormError<br />
Trigger<br />
Macroen indsættes altid i triggeren Error.<br />
Trigger Macroer<br />
Error<br />
#Frm_Index()<br />
#FormError<br />
Når der bladres i posterne i en enkelt record blok i en form, sorteres de efter et bestemt index. Dette<br />
gælder også, når posterne vises i en multi record blok.<br />
I macroen #Frm_Index() angives navnet på det index, der skal benyttes.<br />
149<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Syntaks<br />
#Frm_Index(, )<br />
Bemærk!<br />
Første parameter er altid bloknavne, aldrig kartoteksnavne.<br />
Anden parameter er navn på index, der sorteres efter. Indexet skal tilhøre det kartotek, der er knyttet til<br />
blokken.<br />
Trigger<br />
Macroen indsættes som regel i triggeren Pre-Form.<br />
C5 vers. 2012 -> Eksempel<br />
Trigger Macroer<br />
Pre-Form<br />
#Frm_Index(ItemTable, ItemIdx)<br />
I dette eksempel anvendes blokken ItemTable og index ItemIdx. Husk at indexet tilhører det kartotek,<br />
der er tilknyttet blokken, men at det alligevel er blokkens navn, der skal angives som parameter til<br />
macroen.<br />
C5 vers. -> 4.1 Eksempel<br />
Trigger Macroer<br />
Pre-Form<br />
#Frm_Index(LagKart, VareIdx)<br />
I dette eksempel anvendes blokken LagKart og indexet VareIdx. Husk at indexet tilhører det kartotek,<br />
der er tilknyttet blokken, men at det alligevel er blokkens navn, der skal angives som parameter til<br />
macroen.<br />
Manglende index<br />
Angives der ikke et index i Pre-Form triggeren, benyttes som default det først oprettede index. Findes<br />
der ikke noget index vises posterne i indtastnings-rækkefølgen.<br />
#Frm_Search()<br />
Det kan angives om visningen eller bladringen i forms, skal starte på første eller sidste post, i det index<br />
der angives i macroen #Frm_Index().<br />
Macroen #Frm_Search() angiver at der startes på den første post.<br />
Syntaks<br />
#Frm_Search()<br />
I syntaksen er det igen blokkens navn, der angives som parameter.<br />
Trigger<br />
150<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Macroen indsættes som regel i triggeren Pre-Form under macroen #Frm_Index().<br />
C5 vers. 2012 -> Eksempel<br />
Trigger Macroer<br />
Pre-Form<br />
C5 vers. -> 4.1 Eksempel<br />
Trigger Macroer<br />
Pre-Form<br />
#Frm_Index(ItemTable, ItemIdx)<br />
#Frm_Search(ItemTable)<br />
#Frm_Index(LagKart, VareIdx)<br />
#Frm_Search(LagKart)<br />
Husk at det er blokkens navn, der angives som parameter og ikke kartoteksnavnet.<br />
#Frm_SearchTop()<br />
Macroen #Frm_SearchTop() har nøjagtig samme syntaks og funktion som #Frm_Search().<br />
#Frm_SearchEnd()<br />
Det kan angives om visningen eller bladringen i forms, skal starte på første eller sidste post, i det index<br />
der angives i macroen #Frm_Index().<br />
Macroen #Frm_SearchEnd() angiver at der startes på den sidste post.<br />
Syntaks<br />
#Frm_SearchEnd()<br />
I syntaksen er det igen blokkens navn, der angives som parameter.<br />
Trigger<br />
Macroen indsættes som regel i triggeren Pre-Form under macroen #Frm_Index().<br />
C5 vers. 2012 -> Eksempel<br />
Trigger Macroer<br />
Pre-Form<br />
C5 vers. -> 4.1 Eksempel<br />
Trigger Macroer<br />
Pre-Form<br />
#Frm_Index(ItemTable, ItemIdx)<br />
#Frm_SearchEnd(ItemTable)<br />
#Frm_Index(LagKart, VareIdx)<br />
#Frm_SearchEnd(LagKart)<br />
151<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Husk at det er blokkens navn, der angives som parameter og ikke kartoteksnavnet.<br />
Eksempel på fejlhåndtering og styring af poster i en form<br />
Nedenfor vises et samlet eksempel på macroer, der er nødvendige for at foretage fejlhåndtering og<br />
styring af poster i forms. Det er også vist, hvilke triggere macroerne bør anvendes i.<br />
C5 vers. 2012 -><br />
Triggere Macroer<br />
Init<br />
Pre-form<br />
Error<br />
C5 vers. -> 4.1<br />
#MacroLoad(FORMS)<br />
#Frm_Index(ItemTable, ItemIdx)<br />
#Frm_Search(ItemTable)<br />
#FormError<br />
Triggere Macroer<br />
Init<br />
Pre-form<br />
Error<br />
#MacroLoad(FORMS)<br />
#Frm_Index(LagKart, VareIdx)<br />
#Frm_Search(LagKart)<br />
#FormError<br />
Eksemplet kan kun anvendes til forms, der ikke er synkroniserede, idet synkroniserede forms kræver<br />
udfyldelse og kendskab til flere macroer og en af triggerne i blokke.<br />
Specielt vedr. triggerne Init og Pre-form<br />
Ovenfor vises den foreløbige anvendelse af triggerne Init og Pre-form.<br />
Anvendelsen af de to triggere svarer ikke helt til beskrivelsen i hjælpeteksten i de trykte manualer og<br />
på skærmen, idet teksten ikke indeholder nogen beskrivelse af triggeren Pre-form. Denne trigger er<br />
først kommet til senere, og beskrives i tillægget ’CONCORDE XAL til Windows & OS/2 Warp’ fra 1995<br />
på side 16.<br />
Generelt kan Init triggeren anvendes til styring af forms, og de kontrolkommandoer og -macroer der er<br />
omtalt ovenfor i forbindelse med Pre-form triggeren, kan udmærket anvendes i Init triggeren i stedet<br />
for.<br />
Bemærk: Ofte vil det dog være mere rigtigt at indsætte ovenstående kontrolkommandoer og macroer<br />
i Pre-form end i Init, idet Pre-form anvendes i Windows når en ’detail form’ eller en underform er<br />
’linked’ og kaldes fra en ’master form’ eller en hovedform. Se nærmere forklaring til dette i det nævnte<br />
tillæg.<br />
I denne og efterfølgende lektioner anvendes derfor altid triggeren Pre-form.<br />
152<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Bemærk: Er Init og Pre-form helt tomme kan brugerne uden videre oprette, rette og slette poster i<br />
formen, ligesom der kan bladres i posterne.<br />
Så tastes der det mindste i blot én af triggerne, forsvinder denne automatik, og det skal selv styre,<br />
hvordan posterne behandles i formen. Styringen udføres med de specielle forms kontrolkommandoer<br />
eller macroer, der er gennemgået i denne lektion.<br />
153<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Formens vindue<br />
Opgave 1: Formens vindue<br />
Formål med opgaven<br />
At oprette formens vindue og indsætte macroer til styring og fejlhåndtering.<br />
Huskelister<br />
Form – Vindue<br />
Beskrivelse<br />
Der skal oprettes et vindue til hver af de to kartoteker UDLUdlånsKart og UDLUdlånsPost. Desuden skal<br />
relevante triggere udstyres med macroer til styring og fejlhåndtering.<br />
1 Opret vinduet til formen UDLUdlånsKart.<br />
Forløb for UDLUdlånsKart √<br />
Giv den navnet UDLUdlånsKart, og bestem selv teksten i rammen.<br />
Størrelsen på vinduet skal være 10 høj 80 bred.<br />
2 Indsæt macro der kan åbne biblioteket FORMS.<br />
3 Indsæt macro der kan styre fejlhåndteringen i formen.<br />
4 Indsæt macro der kan styre hvilket index der skal anvendes.<br />
Benyt indexet UDLUdlIdx og bloknavnet UDLUdlånsKart.<br />
5 Indsæt macro der kan styre at der startes på den første post i det angivne index.<br />
Benyt bloknavnet UDLUdlånsKart.<br />
1 Opret vinduet til formen UDLUdlånsPost.<br />
Forløb for UDLUdlånsPost √<br />
Giv den navnet UDLUdlånsPost, og bestem selv teksten i rammen.<br />
Størrelsen på vinduet skal være 15 høj og 50 bred, der er default.<br />
Vinduet skal være skalérbart.<br />
2 Indsæt macro der kan åbne biblioteket FORMS.<br />
3 Indsæt macro der kan styre fejlhåndteringen i formen.<br />
4 Indsæt macro der kan styre hvilket index, der skal anvendes.<br />
Benyt indexet UDLUdlVarIdx og bloknavnet UDLUdlånsPost.<br />
5 Indsæt macro der kan styre, at der startes på den sidste post i det angivne index.<br />
Benyt bloknavnet UDLUdlånsPost.<br />
154<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
18. Enkelt record blok<br />
Mål med lektionen<br />
Formålet med denne lektion er at lære deltagerne, hvilken betydning blokke har i forms og hvordan<br />
disse oprettes. Desuden undervises i indsættelse af databasefelter i blokke.<br />
Efter lektionen skal kursisterne kunne:<br />
Oprette forms med én ’enkelt record blok’<br />
Indsætte almindelige databasefelter i blokken.<br />
Enkelt record blok generelt<br />
Enkelt record blokke anvendes, når der skal dannes skærmbilleder, hvori der kun skal vises én post eller<br />
record ad gangen.<br />
Blokken er det næste, der skal opsættes efter formens vindue.<br />
Blokke kan indeholde én eller flere records ad gangen. Denne lektion behandler blokke med én record.<br />
Opsætning af Enkelt record blok<br />
Blokke oprettes, mens formens vindue ses på skærmen.<br />
Ved oprettelsen åbnes vinduet ’Opsætning for blok’ der et indtastningsbillede med felter der beskriver<br />
blokken. Mange af felterne indeholder default værdier og behøver derfor ikke at udfyldes eller ændres.<br />
De vigtigste felter, der skal udfyldes ved opsætning af en enkelt record blok, fremgår af nedenstående<br />
skema.<br />
Felter i opsætning af blokke<br />
Felt Betydning<br />
Blok navn Navn til identifikation af blokken.<br />
Bemærk! Det er det navn, kartoteket kaldes i forbindelse med de<br />
specielle forms kontrol kommandoer.<br />
Det er en god idé at give blokken samme navn, som det kartotek der<br />
evt. bliver tilknyttet.<br />
Kartotek Navn på kartotek der skal tilknyttes blokken, når den skal anvendes til<br />
visning og indtastning af data i kartoteket.<br />
Det er som nævnt ovenfor en god idé at give blokken samme navn som kartoteket.<br />
Ved at indsætte kartotekets navn først, kan det efterfølgende kopieres op i bloknavnet med SHIFT+F5,<br />
så bliver det også stavet rigtigt første gang.<br />
155<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Bloknavn og kartoteksnavn<br />
Felter<br />
Baggrundsvindue Vindue på skærm på skærm<br />
Opsætning for blok<br />
BlokNavn<br />
Kartotetek<br />
En enkelt record blok kan indeholde både enkelt stående felter fra det tilknyttede kartotek og virtuelle<br />
felter der ikke tilhører kartoteket.<br />
Virtuelle felter behandles i en senere lektion.<br />
I en enkelt record blok skal felterne placeres manuelt på skærmen. Cursoren placeres der, hvor selve<br />
feltet skal være og ikke der hvor ledeteksten starter.<br />
Opsætning af felter foregår ved at vælge dem ud fra en plukkeliste med felter.<br />
Der er mulighed for at ændre formatet på felterne både under og efter opsætningen.<br />
Ledeteksterne skal ikke skrives manuelt, men vises automatisk. Der er dog også mulighed for at skrive<br />
tekster direkte på skærmen, hvis der er behov for det.<br />
Felter og tekst i blokke<br />
Ledetekster<br />
fremkommer<br />
automatisk<br />
Cursor<br />
bestemmer<br />
feltets plads<br />
Debitorer<br />
Kontonummer: Kontonummer skal indtastes<br />
Navn.......:<br />
Telefon....:<br />
SH+F2 Opret blok<br />
Samme navn som<br />
kartoteket<br />
Blokkens navn vises i bunden af skærmen under opbygningen<br />
Fritekst kan<br />
skrives overalt<br />
Felter indsættes fra<br />
kartotek med F2 og Enter<br />
Kartotek<br />
156<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Enkelt record blok<br />
Opgave 1: Form med enkelt record blok<br />
Formål med opgaven<br />
At oprette en form med én ’enkelt record blok’ og indsætte felter på blokken.<br />
Huskelister<br />
Form – Enkelt record blok<br />
Form – Felter<br />
Beskrivelse<br />
Der skal oprettes en enkelt record blok i vinduet til formen UDLUdlånsKart.<br />
UdlånsNr..: DebitorKto....:<br />
UdlånsType: KontaktPerson.:<br />
UdlånsDato:<br />
ReturDato: ForsikringsSum:<br />
1 Anvend vinduet til UDLUdlånsKart fra den forrige lektion.<br />
Forløb √<br />
2 Opret blokken på vinduet og giv den samme navn som kartoteket.<br />
3 Indsæt og placér felterne som vist i ovenstående eksempel.<br />
4 Opret et par udlånsordrer med hver sit udlånsnummer.<br />
5 Opret et nyt udlån der findes i forvejen. Det må du ikke kunne.<br />
6 Opret et nyt udlån der har samme DebitorKonto, UdlånsDato og UdlånsType. Det må<br />
du ikke kunne, da indexet er entydigt.<br />
7 Prøv også om fastteksten fungerer i feltet UdlånsType.<br />
8 Prøv at bladre mellem ordrene.<br />
Udlånskartotek<br />
9 Kontrollér om listbillederne til felterne UdlånsNr og DebitorKto åbnes direkte. Ellers<br />
skal du foretage de nødvendige ændringer, så de kommer til det.<br />
157<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
19. Multi record blok<br />
Mål med lektionen<br />
Formålet med denne lektion er at lære deltagerne at oprette blokke med flere records, og hvordan<br />
felter indsættes i disse blokke.<br />
Efter lektionen skal kursisterne kunne:<br />
Oprette forms med én ’multi record blok’<br />
Indsætte almindelige databasefelter i blokken.<br />
Generelt<br />
En multi record blok kendetegnes ved den måde, felterne er placeret på, idet de opstilles som kolonner<br />
ved siden af hinanden.<br />
Hver enkelt linje indeholder én post på tværs af kolonnerne, og blokken er derfor beregnet til at vise<br />
flere poster på én gang.<br />
Form med multi record blok<br />
Varelinjer<br />
Varenummer Varenavn Serienr Status<br />
Er der ikke plads, til at placere alle felter i kolonner, indsættes de resterende felter i bunden af blokken<br />
som enkeltstående felter, som vist på næste side.<br />
158<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Multi record blok med enkeltstående felter:<br />
Opsætning Multi record blok<br />
Blokke er det næste, der opsættes efter vinduet. De oprettes mens formens vindue er vist på skærmen.<br />
Ved oprettelsen åbnes vinduet ’Opsætning for blok’, der er et indtastningsbillede med felter der<br />
beskriver blokken. Mange af felterne indeholder default værdier og behøver derfor ikke at udfyldes<br />
eller ændres.<br />
De vigtigste felter at udfylde, vises i nedenstående skema.<br />
Felter i opsætning af multi record blokke<br />
Felt Betydning<br />
Blok navn Navn til identifikation af blokken.<br />
Varelinjer<br />
Varenummer Varenavn Serienr Status<br />
Type.: Følgeseddel: Valuta:<br />
Ref..: Faktura....: Beløb.:<br />
Bemærk! Det er det navn kartoteket kaldes i forbindelse med de<br />
specielle forms kontrol kommandoer.<br />
Det er en god idé at give blokken samme navn, som det kartotek det evt.<br />
tilknyttes.<br />
Kartotek Navn på kartotek der skal tilknyttes blokken, når den skal anvendes til<br />
visning og indtastning af data i kartoteket.<br />
Autogenerér blok Forskellen på en multi- og en enkelt record blok ligger i besvarelsen af<br />
dette felt.<br />
NEJ = Blokken autogenereres ikke. Felterne skal placeres manuelt i<br />
blokken.<br />
JA = Blokken autogenereres. Felterne placeres automatisk i blokken,<br />
hvor der er plads til det. Felterne placeres desuden i kolonner, der kan<br />
vise mange records på én gang.<br />
En autogenereret blok er således det samme som en multi record blok.<br />
159<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Bloknavn<br />
Det er som nævnt ovenfor en god idé at give blokken samme navn som kartoteket.<br />
Ved at indsætte kartotekets navn først, kan det efterfølgende kopieres op i bloknavnet med SHIFT+F5,<br />
så bliver det også stavet rigtigt første gang.<br />
I de få tilfælde hvor der skal være to blokke til samme kartotek i en form, skal de dog have hvert sit<br />
navn, da der ikke må være to blokke med samme navn.<br />
Under opbygning af forms vises det aktuelle bloknavn i nederste linje på skærmen.<br />
Felter<br />
En multi record blok kan både indeholde felter fra det tilknyttede kartotek, og virtuelle felter der ikke<br />
tilhører kartoteket.<br />
Virtuelle felter behandles i en senere lektion.<br />
I en multi record blok ses felterne som kolonner, og evt. samtidig som en række felter, hvis der ikke er<br />
plads til dem alle i kolonnerne, som i nedenstående eksempel:<br />
Indsætning af felter<br />
Felterne indsættes ved at vælge dem fra en plukkeliste over felter i det kartotek, der er tilknyttet<br />
blokken.<br />
I en multi record blok foregår placeringen automatisk. Cursoren skal derfor ikke stilles manuelt nogen<br />
steder for at indsætte felterne.<br />
Overskrifter / ledetekster vises automatisk.<br />
Felternes format kan ændres både under og efter opsætningen på formen.<br />
Varelinjer<br />
Varenummer Varenavn Serienr Status<br />
Felter indsættes fra kartotek med F2<br />
og ENTER.<br />
Placeringen udføres automatisk<br />
Type.: Følgeseddel: Valuta:<br />
Ref..: Faktura....: Beløb.:<br />
160<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Multi record blokke<br />
Opgave 1: Form med multi record blok<br />
Formål med opgaven<br />
At oprette en form med én ’multi record blok’<br />
Huskelister<br />
Form – Multi record blok<br />
Form – Felter<br />
Beskrivelse<br />
Der skal oprettes en multi record blok i vinduet til formen UDLUdlånsPost.<br />
Skærmbilledet skal bestå af én ’multi record blok’ og have samme navn som kartoteket UDLUdlånPost.<br />
Udlånsnr Varenr Varenavn<br />
Serienr Status DebitorKto<br />
Forløb √<br />
1 Anvend vinduet til formen UDLUdlånsPost, der blev oprettet i lektionen om<br />
kartoteker<br />
2 Opret blokken på vinduet med Ja i autogenér, og giv den samme navn som<br />
kartoteket<br />
3 Indsæt felterne og lad dem blive placeret automatisk som ovenfor.<br />
4 Prøv at ændre formens størrelse ved at skalere op og ned med CTRL+R<br />
5 Go<strong>dk</strong>end og afprøv formen<br />
6 Opret 3-4 forskellige udlånslinjer.<br />
Udlånslinjer<br />
7 Opret en ordre der findes i forvejen og med samme varenummer. Det skal du kunne,<br />
da indexet ikke er entydigt.<br />
8 Prøv at bladre mellem udlånslinjerne, og gå til hh. første og sidste linje<br />
9 Kontrollér om listbillederne fungerer i felterne UdlånsNr, DebitorKto og VareNr.<br />
161<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
20. Direkte opslag<br />
Mål med lektionen<br />
Formålet med denne lektion er, at lære deltagerne om direkte opslag, hvad de anvendes til og hvordan<br />
de opbygges.<br />
Efter lektionen skal kursisterne:<br />
Vide hvordan direkte opslag opbygges<br />
Kunne anvende direkte opslag til at hente værdier fra et andet kartotek.<br />
Direkte opslag generelt<br />
Direkte opslag er, som navnet hentyder til, et ’opslag direkte’ i et andet kartotek, end det der<br />
behandles lige nu.<br />
I nedenstående eksempel er der et udsnit af et ordrehoved, hvori der kan indtastes ordrenummer og<br />
kontonummer. Kundens navn skrives ikke, men hentes fra debitorkartoteket vha. et direkte opslag.<br />
Anvendelse af direkte opslag<br />
Ordrenummer<br />
Kontonummer Navn<br />
Et direkte opslag består af fire hove<strong>dk</strong>omponenter, som vist på næste side.<br />
Opbygning af direkte opslag<br />
Direkte opslag består af fire hove<strong>dk</strong>omponenter:<br />
Denne værdi er kendt og kan evt.<br />
stamme fra det aktuelle kartotek<br />
Kartoteksnavn [IndexNavn, Udtryk]. Feltnavn<br />
Disse tre værdier tilhører alle det kartotek, der skal slås op i.<br />
Syntaks for direkte opslag med lighedstegn<br />
Ordrer<br />
Navnet hentes med<br />
direkte opslag i<br />
debitorkartoteket når<br />
kontonummeret er<br />
indtastet.<br />
162<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Kartoteksnavn[IndexNavn == Udtryk].Feltnavn<br />
Syntaks for direkte opslag med komma<br />
Kartoteksnavn[IndexNavn, Udtryk].Feltnavn<br />
De enkelte komponenter behandles i nedenstående skema.<br />
Betydning af de enkelte komponenter i direkte opslag<br />
Komponent Betydning<br />
Kartoteksnavn Navn på opslagskartotek hvorfra der skal hentes en værdi.<br />
IndexNavn Navn på et Index i opslagskartoteket.<br />
Udtryk Et udtryk der består af en værdi, der findes i det angivne<br />
index.<br />
Skal der angives mere end én værdi for at slå op i indexet,<br />
adskilles disse med kommaer.<br />
Værdien kan anføres direkte, eller i form af navn på et felt<br />
eller en variabel.<br />
Feltnavn Navn på felt i opslagskartotek, hvorfra der skal hentes en<br />
værdi.<br />
[ ] Direkte opslag skal altid indeholde et sæt skarpe parenteser<br />
omkring indexnavnet og udtrykket.<br />
Komma Når der skal hentes en bestemt værdi i opslags-kartoteket,<br />
skal den hentes vha. af et opslag i indexet.<br />
I opslaget sættes index lig med udtryk.<br />
Dette angives ved at sættet et komma eller dobbelte<br />
lighedstegn mellem Indexnavn og Udtryk.<br />
Punktum Punktum sættes som angivelse af, at der efterfølger et felt.<br />
Sammenhæng i direkte opslag<br />
Nedenstående eksempel illustrerer virkemåden i et direkte opslag. På et skærmbillede Ordrer hentes<br />
debitorens navn med et direkte opslag i debitorkartoteket.<br />
163<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Virkemåden i et direkte opslag<br />
CustTable[AccountIdx==Account].Name<br />
I det direkte opslag henviser CustTable til debitorkartoteket. AccountIdx henviser til indexet med<br />
samme navn i debitorkartoteket. Debitorens navn kopieres fra debitorkartoteket over til Name-feltet i<br />
ordren.<br />
I det direkte opslag anvendes Account-feltet fra ordren til opslaget i indexet. Feltet indeholder<br />
debitorens kontonummer, hvilket er første komponent i indexet.<br />
Direkte opslag kan anvendes mange forskellige steder f.eks. i triggere i forms, i rapportfelter og i XAL<br />
kørsler.<br />
Direkte opslag i XAL kørsel<br />
Debitorkartoteket (CustTable)<br />
AccountIdx Poster<br />
Konto Pos<br />
1400 2<br />
1500 4<br />
1600 1<br />
1700 3<br />
1800 5<br />
Ordre<br />
1234<br />
Konto 1500 Navn<br />
Pos Konto Navn Tlf<br />
1 1600 Olsen<br />
2 1400 Jensen<br />
3 1700 Hansen<br />
4 1500 Petersen<br />
5 1800 Sørensen<br />
Direkte opslag kan anvendes i XAL kørsler, forms, rapporter osv. I nedenstående eksempel på en XAL<br />
kørsel anvendes direkte opslag til at hente bynavne i PostNummer kartoteket.<br />
C5 vers. 2012 -> Eksempel på XAL kørsel med direkte opslag efter bynavn<br />
Ordre<br />
r<br />
Petersen<br />
Search CustTable<br />
PRINT Name<br />
PRINT Address1<br />
PRINT ZipCity, ” ”, ZipCode[ZipCodeIdx, ZipCode].CityName<br />
PRINT ””<br />
END<br />
PAUSE<br />
164<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. -> 4.1 Eksempel på XAL kørsel med direkte opslag efter bynavn<br />
Search DebKart<br />
PRINT Navn<br />
PRINT Adresse1<br />
PRINT PostNr, ” ”, PostNummer[PostNrIdx, PostNr].ByNavn<br />
PRINT ””<br />
END<br />
PAUSE<br />
Resultat<br />
IBM Danmark A/S<br />
Nymøllevej 91<br />
2800 Lyngby<br />
Central Kopiering A/S<br />
Postbox 35<br />
1101 København K<br />
Bynavnet er hentet med et direkte opslag.<br />
Direkte opslag kan også tildeles til variabler, kan indsættes direkte i felter i rapporter, og tildeles som<br />
værdier til felter i forms.<br />
165<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Direkte opslag<br />
Opgave 1: Direkte opslag (Ekstra opgave)<br />
Mål med opgaven<br />
At benytte direkte opslag for at hente værdier fra et andet kartotek.<br />
Beskrivelse<br />
Der skal dannes en XAL kørsel med debitorposter, med søgning i kartoteket CustTrans.<br />
Kartoteket CustTrans indeholder poster til de enkelte debitorer, der findes i CustTable. Der er dog ikke<br />
noget felt i CustTrans, der indeholder debitorernes navne.<br />
I denne opgave skal der laves en liste med følgende felter fra CustTrans:<br />
Account<br />
Date_<br />
AmountMst<br />
Desuden skal der, efter feltet Account, indsættes navnet på debitor. Dette skal hentes med direkte<br />
opslag i CustTable.<br />
1 Start en ny XAL kørsel. Indsæt og tilret startkommentarer.<br />
2 Dan en søgeløkke på kartoteket CustTrans.<br />
Forløb i C5 √<br />
3 Indsæt en linje der udskriver felterne Account, Date_ og AmountMst.<br />
4 Afprøv kørslen.<br />
5 Indsæt efter Account et direkte opslag der i CustTable kan hente feltet Name.<br />
6 Afprøv kørslen.<br />
166<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
21. Formens felter, opsætning<br />
Mål med lektionen<br />
Formålet med denne lektion er at lære deltagerne om mulighederne for formattering af felter i forms.<br />
Desuden gives kendskab til triggerne i felter.<br />
Efter lektionen skal kursisterne kunne:<br />
Anvende triggeren Post-Change<br />
Og have kende til:<br />
Mulighederne for formattering af felter i forms<br />
Triggerne i felter.<br />
Generelt<br />
Felter i forms indsættes altid i blokke.<br />
I enkelt record blokke indsættes felterne manuelt og i multi record blokke indsættes de automatisk.<br />
I begge tilfælde medtager felterne deres opsætning fra databasen. Det vil sige at de beholder deres<br />
oprindelige opsætning.<br />
I begge tilfælde gælder, at der kan ændres i feltets formatering og anvendelse i forms. Desuden findes<br />
der nogle få triggere i felter.<br />
Formattering af felter<br />
Formattering udføres når felter oprettes og ændres med funktionerne Opret felt og Ret felt. I billedet<br />
Opsætning af ... felt er der felter med informationer om opsætningen.<br />
Nogle felter indeholder opsætningen fra databasen og andre indeholder default opsætninger for<br />
feltets anvendelse i selve formen. Begge dele kan ændres efter behov.<br />
Feltopsætning kan udføres når der oprettes nye felter med F2 og når der rettes i felter med F6. Når<br />
funktionerne aktiveres, vises der en dialogboks til justering af det aktuelle felt. Dialogboksen har<br />
forskelligt indhold afhængigt af felttype.<br />
Felttyper i C5<br />
Heltal Kommatal Tekst Dato Fasttekst<br />
Skemaet på næste side indeholder en samlet oversigt over alle justeringsmuligheder. De første fem<br />
kolonner viser hvad der kan justeres på de enkelte linjer.<br />
167<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Mulige justeringer på felter i forms<br />
Felttype Felt i opsætning Muligheder<br />
H K T D F Feltnavn Navn på felt (kan ikke ændres)<br />
H K T D F Feltets bredde Antal tegn<br />
H K T D F Feltets justering Venstrestillet, Højrestillet, Centreret<br />
T F Store bogstaver Nej eller Ja<br />
H K T D F Rette i feltets indhold Nej eller Ja<br />
H K T D F Hvor mange linjer vises Alle linjer eller én linje<br />
H K T D F Skal feltet autoplaceres Nej eller Ja<br />
H K T D F Vis automatisk ledetekst Nej eller Ja<br />
H K T D F Autohop til næste felt Nej eller Ja<br />
H K T D F Kopier felt Nej eller Ja<br />
H K T D F Skal feltet vises Nej eller Ja<br />
H K T D F Ledetekst Evt. ny ledetekst (hvis blank bruges databasens)<br />
H K T D F Må feltet brugeropsættes Nej eller Ja<br />
H K T D F Spring feltet over Nej eller Ja<br />
H K T D F Søgning efter input Nej eller Ja<br />
H K T D F Formler på feltet ENTER og der åbnes for triggere<br />
D Rækkefølge (DMÅ) DMÅ (Dag, Måned, ÅR)<br />
D 2 seperatorer / - , mellemrum #<br />
D År skrives som Skrives ej, 2 cifre, 4 cifre<br />
D Måned skrives som Skrives ej, 1/ 2 cifre, altid 2, fuldt navn, 3 bogstaver<br />
D Dag skrives som Skrives ej, 1 eller 2 cifre, altid 2 cifre<br />
H K Hvordan vises minus Ej fortegn, -NNNN,DD, NNNN,DD-, (NNNN,DD)<br />
H K Vend fortegn Nej eller JA<br />
H K Vis tallet 0 (nul) Nej eller Ja<br />
H K Negativ forskydning Antal tegn<br />
K 1000 seperator Ingen, Komma, Punktum, Mellemrum<br />
K Decimal tegn Komma (,) eller Punktum (.)<br />
K Antal decimaler Antal<br />
K Automatisk dec. tegn Nej eller Ja<br />
168<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Triggere på felter<br />
På samme måde som der er triggere i formens vindue og dens blokke, er der også triggere i felterne.<br />
Det er triggere, der f.eks. aktiveres, når en post loades ind i formen, når cursoren går ind i eller forlader<br />
et felt eller når musen aktiveres i et felt.<br />
Triggere i ’Opsætning af felt’<br />
Der er 6 triggere eller Felt Formler i hvert felt<br />
Triggere i felter Anvendelse<br />
Felter<br />
Felt<br />
formler<br />
Post-Load Udføres umiddelbart før posten skrives på skærmen.<br />
Anvendes f.eks. til at udfylde virtuelle felter.<br />
Pre-Field Udføres før markøren får adgang til feltet.<br />
Post-Edit Udføres efter editering i et felt, men inden værdien gemmes i<br />
feltet.<br />
Den tekst, der står i feltet, kan inspiceres gennem variablen<br />
&INVAL og kan evt. ændres.<br />
Post-Change Udføres når markøren forlader feltet og der samtidig er foretaget<br />
ændringer i feltet.<br />
Post-Field Udføres når markøren forlader feltet, uanset om der er foretaget<br />
ændringer eller ej.<br />
Mouse Udføres når musen aktiveres i feltet.<br />
169<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Rækkefølge for aktivering af felttriggerne<br />
Post-Load<br />
Pre-Field<br />
Felt<br />
Post-Edit<br />
Post-Change<br />
Post-Field<br />
Efterfølgende behandles triggeren Post-Change.<br />
Post-Change<br />
Triggeren Post-Change aktiveres, når cursoren forlader feltet, kun hvis der samtidig er foretaget<br />
ændringer i det.<br />
Post-Change kan f.eks. anvendes til at tildele værdier til andre felter i en form. Disse andre felters<br />
indhold er så afhængigt af det felt, hvorfra de får tildelt deres værdi.<br />
C5 vers. 2012 -> Eksempel<br />
Når en post loades ind i formen<br />
Når cursoren flyttes ind i feltet<br />
Mouse<br />
(Når der klikkes med musen i feltet)<br />
I et tænkt eksempel findes der, på en form til in<strong>dk</strong>øbsordrelinjer, ud over feltet ItemNumber, også<br />
felterne Txt og UnitCode, samt flere andre.<br />
Felterne Txt og UnitCode udfyldes automatisk, når der indtastes varenummer.<br />
Felterne hænger således nøje sammen med feltet ItemNumber, idet disse altid skal passe sammen, når<br />
de vises i formen.<br />
Ændres et varenummer i feltet til et andet varenummer, skal felterne Txt og UnitCode derfor også<br />
automatisk ændres tilsvarende.<br />
Én metode til at hente værdierne til Txt og UnitCode kan være med direkte opslag i lagerkartoteket.<br />
Ved at indsætte det direkte opslag i triggeren Post-Change på feltet ItemNumber, vil de to felter altid<br />
blive opdateret, hver gang der er blevet ændret i indholdet i ItemNumber.<br />
Dette gælder også, når der oprettes varenummer på en ny linje, idet feltet da er tomt. Feltet ændres<br />
således fra at være tomt til at indeholde et varenummer og Post-Change triggeren aktiveres når feltet<br />
forlades.<br />
170<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Anvendelse af Post-Change i feltet ItemNumber<br />
ItemNumber<br />
Post-Load<br />
Pre-Field<br />
Post-Edit<br />
Post-Change<br />
Post-Field<br />
Mouse<br />
Tildeling af værdi til et felt<br />
Tildeling af værdier til felter i en form foretages med kommandoen SET, på samme måde som når der<br />
tildeles værdier til variabler. Her er det bare felter i en form, der tildeles værdier.<br />
C5 vers. 2012 -><br />
Herunder vises eksempler på tildeling af direkte opslag til felterne Txt og UnitCode. Ved at indsætte<br />
koden i Post-Change på feltet ItemNumber, vil de to felter altid indeholde de værdier, der tilhører det<br />
indtastede ItemNumber.<br />
Tildeling af værdier til felter i Post-Change på feltet ItemNumber<br />
SET Txt = InvenTable[ItemIdx, ItemNumber].ItemName1<br />
SET UnitCode = InvenTable[ItemIdx, ItemNumber].UnitCode<br />
C5 vers. -> 4.1<br />
Tildeling af værdi til Txt<br />
og UnitCode med<br />
direkte opslag<br />
Herunder vises eksempler på tildeling af direkte opslag til felterne VareNavn1 og Enhed. Ved at<br />
indsætte koden i Post-Change på feltet VareNummer, vil de to felter altid indeholde de værdier, der<br />
tilhører det indtastede varenummer.<br />
Tildeling af værdier til felter i Post-Change på feltet VareNummer<br />
Txt<br />
UnitCode<br />
SET VareNavn1 = LagKart[VareIdx, VareNummer].VareNavn1<br />
SET Enhed = LagKart[VareIdx, VareNummer].Enhed<br />
171<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Valg af felt<br />
Det er ikke uden betydning, hvilket felt der anvendes til opdatering.<br />
Anvendes feltet ItemNumber, vil opdateringen udføres hver gang, der er indtastet et varenummer og<br />
feltet forlades.<br />
Anvendes et af felterne Txt eller UnitCode, vil opdateringen først findes, når cursoren forlader et af<br />
disse felter. Springes de over, vil de derfor aldrig blive opdateret, da cursoren ikke kommer ind i dem<br />
og således heller ikke kan forlade dem.<br />
Det rigtige felt i denne situation er således feltet ItemNumber.<br />
Valg af trigger<br />
Det er heller ikke uden betydning, hvilken trigger der anvendes. Af de seks triggere der findes på felter,<br />
er det nødvendigt af finde ud af, hvilken funktionalitet der skal opnås.<br />
I det tænkte eksempel herover skulle funktionen være, at ved ændring i feltet ItemNumber skulle<br />
felterne Txt og UnitCode ændres automatisk. Denne funktionalitet kan faktisk opnås både med Post-<br />
Change og Post-Edit triggerne.<br />
172<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Formens felter, opsætning<br />
Opgave 1: Triggere, felter og direkte opslag<br />
Formål<br />
Mål med opgaven<br />
At benytte direkte opslag for at hente værdier fra et andet kartotek<br />
At vælge det rigtige felt og den rigtige trigger til det direkte opslag<br />
At justere felter så de springes over i indtastningen.<br />
Huskelister<br />
Form – Triggere i felter<br />
Beskrivelse<br />
I de foregående opgaver har du selv måttet indtaste varenavnet i skærmbilledet til UDLUdlånsPost.<br />
I denne opgave skal du sørge for, at feltet VareNavn automatisk opdateres med varenavnet fra<br />
lagerkartoteket. Det skal ske, både når der oprettes en ny varelinje og når der ændres i varenummeret<br />
på en eksisterende linje.<br />
Felterne UdlånsNr, VareNavn og DebitorKto skal springes over under indtastning i formen til<br />
UDLUdlånsPost.<br />
Feltet DebitorKto skal springes over under indtastning i formen til UDLUdlånsKart.<br />
Forløb √<br />
1 Vælg formen til UDLUdlånsPost og vælg det felt der skal anvendes til direkte<br />
opslag for at opdatere feltet VareNavn.<br />
2 Indtast det direkte opslag og tildel værdien til feltet VareNavn.<br />
3 Foretag nødvendige ændringer så feltet VareNavn overspringes.<br />
4 Afprøv som følger:<br />
5 Opret en ny varelinje og kontrollér at varenavnet er rigtigt.<br />
6 Udskift et varenummer i en linje med et andet varenummer og kontrollér at<br />
varenavnet også ændres i dette tilfælde.<br />
7 Kontrollér at feltet med varenavnet springes over.<br />
173<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
22. Listemenuer<br />
Mål med lektionen<br />
Efter lektionen skal kursisterne kunne:<br />
Oprette, tilrette og vedligeholde listemenuer i form af undermenuer til gittermenuer, lokalmenuer<br />
og generelle menuer.<br />
Emner<br />
Listemenuer i C5<br />
Opsætning og vedligeholdelse af listemenuer<br />
Menuer generelt<br />
C5 indeholder et menusystem, der hjælper til at finde rundt i de mange forskellige skærmbilleder,<br />
rapporter, kørsler osv.<br />
Menusystemet består af to forskellige typer menuer.<br />
Menutyper<br />
Menu Forklaring<br />
Gittermenu Menu i form af en matrix bestående af kolonner og linjer.<br />
Cellerne i matrixen indeholder menupunkterne. Hvis der er<br />
mere end ét menupunkt, opstilles disse automatisk som en<br />
listemenu.<br />
Listemenu Menu i form af en liste af menupunkter.<br />
Der findes følgende typer listemenuer:<br />
Undermenu til gittermenuer<br />
Undermenu til listemenuer<br />
Lokalmenuer i skærmbilleder<br />
Generelle menuer<br />
Alle menuer kan i vid udstrækning tilrettes den enkelte brugers eller brugergruppes behov.<br />
Denne lektion behandler listemenuer.<br />
Listemenuer<br />
Listemenuer er menuer i form af menupunkter opsat som en liste under hinanden.<br />
174<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Eksempel på listemenu<br />
Finans<br />
Kontoplan ><br />
Posteringer ><br />
Kontoudtog<br />
Balancer ><br />
Budgetter ><br />
Regnskab<br />
Pengeinstitut ><br />
---------------<br />
Dimensioner ><br />
---------------<br />
Forespørgsler ><br />
Menupunkter med tegnet > viser at der åbnes en undermenu. Menupunkter uden tegnet > starter det<br />
tilknyttede program direkte. Det kan f.eks. være et skærmbillede eller en rapport.<br />
Listemenuer findes forskellige steder i menusystemet, men opsættes og vedligeholdes ens.<br />
Listemenuer i C5<br />
Listemenu Forklaring<br />
Undermenu til<br />
gittermenuer<br />
Undermenu til<br />
listemenu<br />
Menupunkter i celler i gittermenuer består altid af en listemenu.<br />
Et menupunkt i en listemenu kan kalde en undermenu i form af en<br />
anden listemenu.<br />
Lokalmenuer i forms Lokalmenuer er menuer, der kan kaldes frem med F10 i et åbent<br />
skærmbillede.<br />
Menuen er netop lokal, idet den kun findes i det ene skærmbillede.<br />
En lokalmenu kan således heller ikke kaldes fra andre skærmbilleder.<br />
Hvert skærmbillede har sin egen lokalmenu.<br />
Generelle menuer Generelle menuer er selvstændige listemenuer der oprettes og<br />
vedligeholdes i udviklingsmenuen i søjlen MNU.<br />
Til forskel fra lokalmenuer kan generelle menuer kaldes overalt i C5,<br />
idet de kan tilknyttes f.eks. en procestaste eller en hvilken som helst<br />
anden menu.<br />
175<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Listemenuer<br />
Skærmbillede<br />
Hvor vedligeholdes listemenuer?<br />
Vedligeholdelse af listemenuer består i opsætning af selve menuen og indsættelse af menupunkter.<br />
Vedligeholdelse foregår der, hvor listemenuen befinder sig.<br />
Vedligeholdelsessted<br />
Gittermenuen<br />
Listemenu Sted for oprettelse og vedligeholdelse<br />
Undermenu til gittermenu I celler i gittermenuer<br />
Generelt/Tilpasning/Udviklingsmenu/MNX/Ret<br />
Undermenu til listemenu I en hvilken som helst anden listemenu<br />
Generelt/Tilpasning/Udviklingsmenu/MNX/Ret<br />
I den valgte gittermenu vælges undermenu der skal vedligeholdes<br />
Lokalmenu I det skærmbillede der indeholder lokalmenuen<br />
Generelt/Tilpasning/Udviklingsmenu/FRM/Ret<br />
Generel menu I udviklingsmenuen i søjlen MNU<br />
Generelt/Tilpasning/Udviklingsmenu/MNU/Ret<br />
Opsætning og indsættelse af menupunkter er ens for alle listemenuer. Se afsnittet ’Opsætning af<br />
listemenu’.<br />
Opsætning af listemenu<br />
Lokal menu<br />
til skærmbillede<br />
Opsætning af listemenuer udføres med funktionen Opsætning, der startes med CTRL+F6. Funktionen<br />
åbner billedet Opsætning af menu.<br />
Billedet indeholder felter til indtastning af menuens titel osv.<br />
Undermenu<br />
til<br />
gittermenu<br />
Undermenu<br />
til listemenu<br />
Generel menu<br />
til procestaste<br />
eller listemenu<br />
176<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Felter i ’Opsætning af menu’<br />
Felt Forklaring<br />
Menutitel Tekst der skrives som overskrift til menuen.<br />
Hvis teksten fylder mere end det længste navn på et af<br />
menupunkterne, afkortes den automatisk.<br />
Skal der være en længere tekst, skal et af menupunkternes navne<br />
forlænges med blanke tegn.<br />
Ryd baggrund Om baggrunden skal ryddes når menupunktet åbnes<br />
Første menu i serie Om det er første menu i en serie.<br />
Det kan ikke bestemmes, hvor menuen skal placeres på skærmen,<br />
men ved at svare ja her, placeres menuen i øverste venstre hjørne af<br />
skærmen for at gøre plads til flere undermenuer.<br />
Forlad menu efter valg Om menuen skal forlades efter valg.<br />
Ved at forlade menuen efter valg vendes der ikke tilbage til den<br />
igen når menupunktet er afsluttet.<br />
Rammetype Hvilken ramme type der skal være rundt om menuen<br />
Bemærk: Det er ikke muligt at bestemme placering og størrelse på menuen.<br />
Indsættelse af menupunkter i listemenu<br />
I alle menupunkter foregår der et programkald af et skærmbillede, en rapport, en kørsel eller andet der<br />
skal afvikles.<br />
Menupunkter indsættes med funktionen Insert, der åbner billedet Opsætning af menupunkt.<br />
Felter i Opsætning af menupunkt<br />
Felter Betydning<br />
Proces Navn på den proces der skal afvikles.<br />
Parametre til proces Hver proces kan have forskellige parametre. Som regel skal der<br />
mindst angives navn på det applikationselement, der skal afvikles.<br />
Angives som Parameter=værdi Parameter=værdi . . .<br />
Menupunktets navn Den tekst der skal stå som menupunkt i menuen.<br />
Bogstav til hurtigvalg Et bogstav i menupunktets navn. Bogstavet bør ikke være anvendt et<br />
andet sted i menuen.<br />
Bogstavet aktiverer menupunktet med det samme.<br />
Hjælpetekst Den tekst der skal vises i bunden af skærmen, når cursoren står på<br />
menupunktet.<br />
Gruppe rettigheder Navn på den eller de grupper der må afvikle dette menupunkt.<br />
C5 vers. 2012 -> Eksempel<br />
Kun de grupper, der angives her, kan se menupunktet.<br />
177<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Felter Eksempel<br />
Proces Form-afvikling<br />
Parametre til proces Form=CustTable<br />
Menupunktets navn Debitorer<br />
Bogstav til hurtigvalg D<br />
Hjælpetekst Debitorkartotek<br />
Gruppe rettigheder Liste<br />
I C5 kaldes skærmbilleder for FORMS.<br />
I ovenstående eksempel skal der udføres en afvikling af et skærmbillede, derfor processen ’Formafvikling’.<br />
Skærmbilledet der skal afvikles hedder CustTable, hvorfor parametrene til processen er<br />
’Form=CustTable’.<br />
C5 vers. -> 4.1 Eksempel<br />
Felter Eksempel<br />
Proces Form-afvikling<br />
Parametre til proces Form=Debkart<br />
Menupunktets navn Debitorer<br />
Bogstav til hurtigvalg D<br />
Hjælpetekst Debitorkartotek<br />
Gruppe rettigheder Liste<br />
I C5 kaldes skærmbilleder for FORMS.<br />
I ovenstående eksempel skal der udføres en afvikling af et skærmbillede, derfor processen ’Formafvikling’.<br />
Skærmbilledet der skal afvikles hedder DebKart, hvorfor parametrene til processen er<br />
’Form=DebKart’.<br />
Undermenuer<br />
Undermenuer oprettes ved at vælge processen ’Undermenu’ og give menupunktet et navn. I menuen<br />
efterfølges navnet automatisk af tegnet ’>’.<br />
178<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Vedligeholdelse af listemenuer<br />
Finans<br />
Kontoplan ><br />
Posteringer ><br />
Kontoudtog<br />
Balancer ><br />
Budgetter ><br />
Regnskab<br />
Pengeinstitut ><br />
---------------<br />
Dimensioner ><br />
---------------<br />
Forespørgsler ><br />
CTRL F6<br />
Insert<br />
Opsætning af menuen<br />
Menunavn..............:<br />
Menutitel.............:<br />
Ryd baggrunden........:<br />
Første menu i serie...:<br />
Forlad menu efter valg:<br />
Rammetype (0-9).......:<br />
Opsætning af menupunkt<br />
Proces..................:<br />
Parametre til proces....:<br />
Menupunktets navn.......:<br />
Bogstav til hurtigvalg..:<br />
Hjælpetekst.............:<br />
Grupperettigheder.......:<br />
179<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Listemenuer<br />
Opgave 1: Kald af skærmbilleder fra lokalmenuer<br />
Formål med opgaven<br />
At benytte lokalmenuer til kald af andre skærmbilleder.<br />
Huskelister<br />
Menuer – Lokalmenuer<br />
Menuer – Opsætning af menupunkt<br />
Beskrivelse<br />
I denne opgave skal du, med lokalmenuer, kalde formen UDLUdlånsKart fra formen CustTable, og<br />
UDLUdlånsPost skal kaldes fra formen UDLUdlånsKart. Se nedenstående skitse.<br />
CustTable<br />
Lokal<br />
menu<br />
UDLUdlånsKart<br />
Forløb i C5 √<br />
1 Vælg formen CustTable og opret et nyt menupunkt i lokalmenuen. Menupunktet<br />
skal kalde formen UDLUdlånsKart.<br />
2 Vælg formen UDLUdlånsKart og opret en ny lokalmenu.<br />
3 Vælg den nye lokalmenu og opret et nyt menupunkt, der kan kalde formen<br />
UDLUdlånsPost.<br />
4 Afprøv de nye menupunkter som følger:<br />
Lokal<br />
menu<br />
5 Vælg formen CustTable og foretag et kald af UDLUdlånsKart.<br />
6 Du skal kunne se og bladre i alle debitorers udlån.<br />
7 Inde i udlånsbilledet skal du kalde kalde udlånslinjerne.<br />
UDLUdlånsPost<br />
8 Du skal kunne se og bladre i samtlige udlånslinjer, også de der tilhører de andre<br />
udlån end det aktuelle.<br />
180<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
23. Synkronisering mellem forms<br />
Mål med lektionen<br />
Formålet med denne lektion er at lære deltagerne at synkronisere forms med hinanden, således at en<br />
indeholdet i en form er afhængigt af indholdet i en anden form.<br />
Efter lektionen skal kursisterne kunne:<br />
Synkronisere to forms med hinanden<br />
Forstå hvilke forms kontrol kommandoer der skal anvendes til synkroniseringen mellem to forms<br />
Forstå hvilke triggere der skal anvendes til synkroniseringen mellem to forms.<br />
Generelt<br />
Synkronisering anvendes f.eks. når der foretages kald fra en form til en anden eller fra en form til en<br />
rapport.<br />
Synkroniseringen består i at den kaldte form eller rapport sættes op, så indholdet her stemmer overens<br />
med indholdet i den form der blev kaldt fra.<br />
I denne lektion behandles synkronisering mellem forms.<br />
Synkronisering mellem forms<br />
Synkronisering mellem forms udføres som hovedregel ved hjælp af kald fra lokalmenuen i<br />
’hovedformen’ og opsætning af selve synkroniseringen i ’underformen’.<br />
I illustrationen herunder er ’Ordrekartotek’ hovedform til ’Ordrelinjer’ og ’Ordrelinjer’ er hovedform til<br />
’Ordretotaler’.<br />
Kald af forms fra lokalmenuer<br />
Ordrekartotek<br />
Lokal<br />
menu<br />
Ordrelinjer<br />
Lokal<br />
menu<br />
Ordretotaler<br />
181<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Når en form kaldes fra en menu, er det muligt at synkronisere den, med den form der kaldes fra. I<br />
illustrationen kan det f.eks. synkroniseres, så formen med ordrelinjerne kun viser de linjer, der tilhører<br />
den ordre, der blev kaldt fra.<br />
Det er vigtigt at forstå, at et kald af en form via en menu ikke alene er nok til, at hente de rigtige<br />
informationer i den underliggende form. Det er i den underliggende form selve synkroniseringen<br />
finder sted, og at de rigtige informationer findes frem.<br />
Triggere ved synkronisering<br />
Ved synkronisering mellem to forms anvendes følgende triggere i vinduet og på blokken i<br />
underformen.<br />
Triggere i underform ved synkronisering<br />
Triggere i vinduet Anvendelse<br />
Pre-form Åbning af buffer<br />
Triggere i blokken Anvendelse<br />
Init-record Åbning af buffer<br />
Triggeren Pre-Form<br />
Tildeling af værdier i blokken (fra buffer)<br />
Angivelse og låsning af index til sortering af poster i blokken.<br />
Angivelse af opslag på første eller sidste af de fundne poster.<br />
Tildeling af startværdier fra buffer til ny record<br />
I triggeren Pre-form ligger koden til selve synkroniseringen.<br />
Der er her de rigtige poster findes frem.<br />
Synkroniseringen foregår ved hjælp af følgende kommandoer og macroer:<br />
En buffer<br />
EXTERN<br />
SET<br />
#Frm_Index() (med låsning af antal indexkomponenter)<br />
#Frm_Search() eller #Frm_SearchEnd()<br />
De enkelte punkter behandles på de følgende sider.<br />
Buffer<br />
Foretages der et kald af en anden form via en lokalmenu, gemmes posten i den oprindelige form i en<br />
buffer med samtlige sine data.<br />
Det betyder, at der til enhver tid kan hentes information i bufferen om den post eller record, der blev<br />
kaldt fra.<br />
182<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Bufferen indeholder den aktuelle record<br />
I underformen er det vigtigt at vide hvilken post, der kaldes fra, så de rigtige posteringer (linjer) kan<br />
findes frem. Dette kan gøres ved at åbne bufferen med kommandoen EXTERN.<br />
EXTERN<br />
Kommandoen EXTERN åbner for en buffer med informationer om den record, der kaldes fra.<br />
Åbning af buffer med EXTERN<br />
Syntaksen for EXTERN er som følger, idet kommandoen efterfølges af bufferens dvs. kartotekets navn.<br />
Syntaks<br />
Ordrekartotek<br />
Ordrekartotek<br />
EXTERN <br />
C5 vers. 2012 -> :<br />
Lokal<br />
menu<br />
Lokal<br />
menu<br />
Buffer<br />
Buffer<br />
Aktuel<br />
record<br />
Hovedform Underform<br />
Ordrekartotek<br />
Ordrelinjer<br />
Hovedform Underform<br />
Bufferen åbnes med<br />
kommandoen EXTERN<br />
’buffernavn’<br />
Ordrelinjer<br />
EXTERN OrdreKart<br />
Information om<br />
aktuel record (ordre)<br />
hentes i bufferen<br />
183<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Hvis der f.eks. fra formen SalesTable skal foretages et kald af formen SalesLine med ordrelinjerne<br />
indsættes der et menupunkt i formen SalesTable til kald af posteringerne i SalesLine.<br />
I SalesLine skal der så åbnes for bufferen til SalesTable for, at se hvilket ordrenummer der blev kaldt fra.<br />
Åbningen af bufferen skal da se ud som følger:<br />
C5 vers. 2012 -> Eksempel<br />
EXTERN SalesTable<br />
C5 vers. -> 4.1 :<br />
Hvis der f.eks. fra formen OrdKart skal foretages et kald af formen OrdLinje med ordrelinjerne<br />
indsættes der et menupunkt i formen OrdKart til kald af posteringerne i OrdLinje.<br />
I OrdLinje skal der så åbnes for bufferen til OrdKart for, at se hvilket ordrenummer der blev kaldt fra.<br />
Åbningen af bufferen skal da se ud som følger.<br />
C5 vers. -> 4.1 Eksempel<br />
EXTERN OrdKart<br />
Når bufferen er åbnet, skal blokkens nøglefelter tildeles værdier fra den. Det udføres med<br />
kommandoen SET.<br />
SET<br />
Når der skal synkroniseres mellem to forms, anvendes SET kommandoen til at tildele værdier (fra<br />
bufferen) til felter i blokken, idet de poster der skal vises i underformen, skal tilhøre den record, der<br />
findes i bufferen.<br />
Tildeling med SET fra Buffer<br />
Syntaksen for SET kommandoen ved tildeling af værdier til blokken fra bufferen, er som følger.<br />
Syntaks<br />
Ordrekartotek<br />
Lokal<br />
menu<br />
Buffer<br />
Ordrekartotek<br />
Hovedform Underform<br />
Ordrelinjer<br />
EXTERN<br />
Ordrekartotek<br />
SET blok.felt =<br />
buffer.felt<br />
SET . = .<br />
Tildeling med SET fra<br />
buffer felter til felter i<br />
blok i form<br />
184<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
I eksemplet fra afnittet om EXTERN med kald af ordrelinjer fra ordrekartoteket, vil SET kommandoen da<br />
se ud, som følger.<br />
C5 vers. 2012 -> Eksempel<br />
SET SalesLine.Number = SalesTable.Number<br />
I formen er der en blok med navnet SalesLine, der har et felt med navnet Number. Dette felt tildeles<br />
den værdi, feltet Number har i bufferen SalesTable.<br />
C5 vers. -> 4.1 Eksempel<br />
SET OrdLinje.Nummer = OrdKart.Nummer<br />
I formen er der en blok med navnet OrdLinje, der har et felt med navnet Nummer. Dette felt tildeles<br />
den værdi, feltet Nummer har i bufferen OrdKart.<br />
Ved hjælp af macroen #Frm_Index() kan de rigtige poster herefter findes frem.<br />
#Frm_Index()<br />
Macroen #Frm_Index() anvendes ikke alene til visning af poster, men også til fremfinding af bestemte<br />
poster, der så vises i samme sortering som indexet.<br />
Ved synkronisering mellem forms, skal der netop i underformen, fremfindes bestemte poster, nemlig<br />
de poster der tilhører den record, der befinder sig i bufferen.<br />
Efter at bufferen er åbnet, og værdier er tildelt blokken, anvendes macroen #Frm_Index() til at finde de<br />
rigtige poster frem.<br />
Poster findes med #Frm_Index()<br />
Ordrekartotek<br />
Lokal<br />
menu<br />
Buffer<br />
Ordrekartotek<br />
Hovedform Underform<br />
Ordrelinjer<br />
Posterne findes med<br />
#Frm_Index(Blok, Index, 1)<br />
EXTERN Ordrekartotek<br />
SET blok.felt =<br />
buffer.felt<br />
#Frm_Index(Blok,Index,1)<br />
Det er vigtigt at anvende indexmacroen rigtigt, idet det er nødvendigt at angive hvilke komponenter i<br />
indexet, der skal benyttes i søgningen efter posterne.<br />
I eksemplet med kaldet af ordrelinjerne fra ordrekartoteket, er der f.eks. kun én kendt værdi, der kan<br />
hentes i bufferen og som samtidig kan anvendes til fremfinding af ordrelinjeposterne. Det er<br />
ordrenummeret, da dette felt findes i begge kartoteker.<br />
Ordrenummeret fra bufferen bliver da også med SET kommandoen tildelt Ordrenummeret i blokken<br />
185<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
For at finde de rigtige poster skal der anvendes et index med ordrenummeret som første komponent.<br />
Hvis dette index består af flere komponenter, skal det angives hvilke af disse, der er kendte. Det siges at<br />
indexkomponenterne låses.<br />
Syntaksen for #Frm_Index() med låsning af komponenter er som følger.<br />
Syntaks<br />
#Frm_Index(, , )<br />
Hensigten med de låste komponenter vises i følgende eksempel, hvor der anvendes et index med flere<br />
komponenter.<br />
C5 vers. 2012 -> Eksempel<br />
#Frm_Index(SalesLine, NumTransLineIdx, 1)<br />
Blokken SalesLine er tilknyttet et kartotek SalesLine, der har et index NumTransLineIdx, der består af 4<br />
komponenter.<br />
Indexnavn Komponenter (felter) i indexet<br />
NumTransLineIdx Number, Transaction, LineNumber, RowNumber<br />
C5 vers. -> 4.1 Eksempel<br />
#Frm_Index(OrdLinje, NumTraLinIdx, 1)<br />
Blokken OrdLinje er tilknyttet et kartotek OrdLinje, der har et index NumTraLinIdx, der består af 4<br />
komponenter.<br />
Indexnavn Komponenter (felter) i indexet<br />
NumTraLinIdx Nummer, Transaktion, LinjeNr, Løbenummer<br />
Da det kun er den første komponent i indexet dvs. ordrenummeret, der er kendt, skal det fastlåses, at<br />
indexet i fremfindingen af poster kun skal anvende denne komponent. Derfor angives tallet 1 i<br />
#Frm_Index().<br />
Der kan låses mere end én komponent, hvis værdierne kendes, men altid fra venstre mod højre. Der<br />
kan ikke låses på en komponent midt i indexet.<br />
De poster, der findes med #Frm_Index(), vises stadig sorteret efter alle komponenter i indexet, idet<br />
låsningen kun gælder udsøgningen af posterne.<br />
#Frm_Search() / #Frm_SearchTop() / #Frm_SearchEnd()<br />
Der er stadig mulighed for, at angive om cursoren skal starte på den første eller den sidste post. Når<br />
der er tale om låste poster, gælder dette så kun, de der er fundet.<br />
Første eller sidste post vælges med en af macroerne #Frm_Search(), #Frm_SearchTop() eller<br />
#Frm_SearchEnd().<br />
Bloktriggeren Init-record<br />
Når der skal oprettes en ny record i en underform, kan det være nødvendigt at tildele nogle<br />
startværdier til den. Det kan f.eks. være værdier, der findes i bufferen.<br />
186<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Selv om disse værdier bliver tildelt blokken med SET kommandoen i Pre-form triggeren, kan disse<br />
værdier ikke automatisk anvendes, når der skal oprettes en ny record.<br />
Init-record<br />
Tildeling af startværdier til records foregår i triggeren med navnet Init-record.<br />
Init-Record aktiveres, når der i en form sker en begivenhed f.eks. i form af at oprette en ny record.<br />
Dette sker f.eks. ved at taste F2 eller ved, at markøren placeres på en ny tom post, der skal oprettes.<br />
Tildeling af værdier fra bufferen foregår på samme måde som i Pre-form ved at åbne bufferen med<br />
EXTERN og tildele værdier med SET.<br />
C5 vers. 2012 -> Pre-form<br />
EXTERN SalesTable<br />
SET SalesLine.Number = SalesTable.Number<br />
C5 vers. -> 4.1 Pre-form<br />
EXTERN OrdKart<br />
SET OrdLinje.Nummer = OrdKart.Nummer<br />
Ofte kan det betale sig at kopiere linjerne fra Pre-form og så tilføje flere linjer med SET kommandoer,<br />
hvis der er behov for det.<br />
C5 vers. 2012 -> Init-record<br />
EXTERN SalesTable<br />
SET SalesLine.Number = SalesTable.Number<br />
SET SalesLine.Account = SalesTable.Account<br />
I dette eksempel tildeles der værdier fra bufferen til felterne Number og Account. Der kan også tildeles<br />
andre former for startværdier f.eks. dags dato.<br />
187<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. -> 4.1 Init-record<br />
EXTERN OrdKart<br />
SET OrdLinje.Nummer = OrdKart.Nummer<br />
SET OrdLinje.Konto = OrdKart.Konto<br />
I dette eksempel tildeles der værdier fra bufferen til felterne Nummer og Konto. Der kan også tildeles<br />
andre former for startværdier f.eks. dags dato.<br />
Komplet eks. på synkronisering af forms<br />
Synkronisering i triggere i vinduet og blokke<br />
Ordrekartotek<br />
Lokal<br />
menu<br />
Buffer<br />
Ordrekartotek<br />
Hovedform Underform<br />
Ordrelinjer<br />
(Vindue)<br />
(Blok)<br />
Triggere i vinduet<br />
Init<br />
Error<br />
Pre-form<br />
Triggere i blok<br />
Init-record<br />
Eksemplet indeholder kun triggere, der anvendes i underformen, idet hovedformen ikke har nogen<br />
ændringer i sine triggere. Eksemplet er vist på næste side.<br />
188<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. 2012 -> Komplet eksempel med triggere og tilhørende kode<br />
Trigger i<br />
vinduet<br />
Init<br />
Pre-form<br />
Error<br />
Triggere i<br />
blokken<br />
Initrecord<br />
Anvendelse<br />
#MacroLoad(FORMS)<br />
EXTERN SalesTable<br />
SET SalesLine.Number = SalesTable.Number<br />
#Frm_Index(SalesLine, NumTransLineIdx, 1)<br />
#Frm_SearchEnd(SalesLine)<br />
#FormError<br />
Anvendelse<br />
EXTERN SalesTable<br />
SET SalesLine.Number = SalesTable.Number<br />
SET SalesLine.Account = SalesTable.Account<br />
C5 vers. -> 4.1 Komplet eksempel med triggere og tilhørende kode<br />
Trigger i<br />
vinduet<br />
Init<br />
Pre-form<br />
Error<br />
Triggere i<br />
blokken<br />
Init-record<br />
Anvendelse<br />
#MacroLoad(FORMS)<br />
EXTERN OrdKart<br />
SET OrdLinje.Nummer = OrdKart.Nummer<br />
#Frm_Index(OrdLinje, NumTraLinIdx, 1)<br />
#Frm_SearchEnd(OrdLinje)<br />
#FormError<br />
Anvendelse<br />
EXTERN OrdKart<br />
SET OrdLinje.Nummer = OrdKart.Nummer<br />
SET OrdLinje.Konto = OrdKart.Konto<br />
189<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Synkronisering mellem forms<br />
Opgave 1: Synkronisering mellem forms<br />
Formål med opgaven<br />
At benytte XAL kommandoer og forms kontrol kommandoer i form af macroer til synkronisering<br />
mellem forms.<br />
Huskelister<br />
Form – Triggere i vinduet<br />
Form – Triggere i blokke<br />
Beskrivelse<br />
Efter opsætning og afprøvning af lokalmenuer skal der synkroniseres mellem forms, så der kun vises<br />
poster, der tilhører den aktuelle post i den form, der kaldes fra.<br />
Når UDLUdlånsKart kaldes fra CustTable, skal det synkroniseres, så der kun vises udlån, der tilhører den<br />
aktuelle debitor.<br />
Når UDLUdlånsPost kaldes fra UDLUdlånsKart, skal det synkroniseres, så der kun vises udlånslinjer, der<br />
tilhører det udlån, der var fremme ved kaldet.<br />
Forløb i C5 √<br />
1 Vælg formen til UDLUdlånsKart og opsæt synkroniseringen til CustTable. Benyt<br />
indexet UDLDebDatTypIdx til opslag og start på første post i indexet.<br />
2 Vælg formen til UDLUdlånsPost og opsæt synkroniseringen med UDLUdlånsKart.<br />
Benyt UDLUdlVarIdx til opslag og start på sidste post i indexet.<br />
3 Afprøv synkroniseringen som følger:<br />
4 Vælg formen CustTable og foretag et kald af UDLUdlånsKart.<br />
Du må kun kunne se og bladre i udlån til den aktuelle debitor.<br />
5 Inde i udlånsbilledet skal du kalde udlånslinjerne.<br />
Du må kun kunne se og bladre i de udlånslinjer, der tilhører det udlån du kaldte<br />
fra.<br />
6 Opret et nyt udlån på en debitor og indsæt 2-3 udlånslinjer.<br />
7 Gentag punkt 6 et par gange med en anden debitor.<br />
8 Afprøv om du stadig kun kan bladre i udlån og udlånslinjer der tilhører den<br />
aktuelle debitor og udlån.<br />
9 Vælg listbilledet til UDLUdlånsPost og kontrollér at felterne DebitorKto og<br />
UdlånsNr er udfyldt. Hvis de ikke er det, skal du foretage nødvendige ændringer i<br />
synkroniseringen.<br />
190<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
24. Huskelister forms<br />
Fasttekst – Opret ny type<br />
Funktion Fremgangsmåde Tast<br />
Oprette ny<br />
fasttekst-type<br />
Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/ Kerne<br />
Vælg kartotek<br />
(Det skal blot være et tilfældigt kartotek, da oprettelse af<br />
fastteksttyper kan foregå på et hvilket som helst kartotek.)<br />
ENTER<br />
Vælg Fast-Tekst-Typer i kartotekets menu ENTER<br />
Vælg Opret en ny type i menuen Fast-Tekst-Typer ENTER<br />
Du ser billedet Fast-Tekst<br />
Indtast Navn på typen.<br />
Indtast overskriftsnavn i feltet Print Navn.<br />
Go<strong>dk</strong>end ENTER eller F3<br />
Du er nu tilbage i menuen Fast-Tekst-Typer og kan<br />
vælge at afslutte med<br />
eller du kan indsætte tekster ved at gå til fasen ’Tilføj’<br />
tekster her i huskelisten.<br />
Tilføje tekster Du er i menuen Fast-Tekst-Typer<br />
Gentages for<br />
hver ny tekst<br />
Vælg Tilføj/ret tekster<br />
Vælg den oprettede fastteksttype i menuen. Vælg Type<br />
Du ser nu en dialogbox med Fast-Tekst-Typens printnavn<br />
som overskrift.<br />
191<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
F3<br />
ENTER<br />
ENTER<br />
Indsæt tekst i feltet Indsæt ny tekst INS eller ENTER<br />
Du ser nu dialogboxen Fast-Tekst Indhold<br />
Indtast teksten i feltet<br />
Når du er færdig med at indsætte tekster, kan du afslutte<br />
ved at go<strong>dk</strong>ende (til du er helt ude af programmet).<br />
F3
Fasttekst – Tilføj tekster til eksisterende type<br />
Funktion Fremgangsmåde Tast<br />
Starte Generelt/Tilpasning/Udviklingsmenu/DBD<br />
Vælge<br />
kartotek<br />
Der er nu to muligheder:<br />
Hvis du vælger Diverse/Fasttekst, kan du gå direkte til<br />
Vælg Type her i huskelisten.<br />
Hvis du vælger Ret/Kerne, skal du starte i Vælge kartotek.<br />
Vælg kartotek<br />
(Det skal blot være et tilfældigt kartotek, da oprettelse af<br />
fastteksttyper kan foregå på et hvilket som helst kartotek.)<br />
ENTER<br />
Vælg Fast-Tekst-Typer i kartotekets menu ENTER<br />
Vælg Tilføj/ret tekster i menuen Fast-Tekst-Typer ENTER<br />
Vælge type Vælg fastteksttype i menuen Vælg Type<br />
Gentages for<br />
hver ny tekst<br />
Du ser nu en liste over tekster i den valgte fastteksttype.<br />
ENTER<br />
Indsæt tekst i feltet Indsæt ny tekst INS eller ENTER<br />
Du ser nu dialogboxen Fast-Tekst Indhold.<br />
Indtast teksten i feltet F3<br />
Når du er færdig med at indsætte tekster, kan du afslutte<br />
ved at go<strong>dk</strong>ende (til du er helt ude af programmet).<br />
F3<br />
192<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Fasttekst – Ret tekster i eksisterende type<br />
Funktion Fremgangsmåde Tast<br />
Starte Generelt/Tilpasning/Udviklingsmenu/DBD<br />
Vælge<br />
kartotek<br />
Der er nu to muligheder:<br />
Hvis du vælger Diverse/Fasttekst, kan du gå direkte til<br />
Vælge Type her i huskelisten.<br />
Hvis du vælger Ret/Kerne, skal du starte i Vælge kartotek.<br />
Vælg kartotek<br />
(Det skal blot være et tilfældigt kartotek, da oprettelse af<br />
fastteksttyper kan foregå på et hvilket som helst kartotek.)<br />
ENTER<br />
Vælg Fast-Tekst-Typer i kartotekets menu ENTER<br />
Vælg Tilføj/ret tekster i menuen Fast-Tekst-Typer ENTER<br />
Vælge type Vælg fastteksttype i menuen Vælg Type<br />
Gentages for<br />
hver tekst der<br />
ændres<br />
Du ser nu en liste over tekster i den valgte fastteksttype.<br />
ENTER<br />
Vælg tekst der skal ændres ENTER<br />
Du ser nu dialogboxen Fast-Tekst indhold.<br />
Foretag ændringerne i teksten ENTER<br />
Når du er færdig med at indsætte tekster, kan du afslutte<br />
ved at go<strong>dk</strong>ende (til du er helt ude af programmet).<br />
F3<br />
193<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Kartotek – Navn (opret/ret)<br />
Funktion Fremgangsmåde Tast<br />
Oprette<br />
kartotek med<br />
navn<br />
Rette<br />
kartoteksnavn<br />
Generelt/Tilpasning/Udviklingsmenu/DBD/<br />
Opret<br />
Du er nu i billedet ’Opret/Se Kartotek’.<br />
Som standard er det nok at udfylde flg. felter:<br />
Navn på kartotek:<br />
Skriv et sigende navn på kartoteket.<br />
Benyt evt. forkortelse som f.eks. DebTable eller Debkart.<br />
Print Navn:<br />
Skriv det navn kartoteket skal kaldes i det daglige f.eks.<br />
Debitorkartotek.<br />
Go<strong>dk</strong>end oprettelsen med<br />
Du ser nu en menu med kartoteksnavnet som overskrift.<br />
Du kan nu vælge at afslutte menuen med<br />
eller<br />
vælge at gå til et af menupunkterne.<br />
(Se andre huskelister)<br />
Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/<br />
Kerne<br />
Du ser nu en liste over kartoteker.<br />
Vælg det kartotek der skal ændres<br />
Du ser nu en menu med kartoteksnavnet som overskrift.<br />
Vælg menupunktet Navn<br />
Du er nu i billedet Opret/Se Kartotek<br />
Som standard er der kun behov for at ændre flg. felter:<br />
Navn på kartotek:<br />
Indtast evt. nyt navn på kartoteket.<br />
Print Navn:<br />
Indtast evt. et andet kaldenavn på kartoteket.<br />
Go<strong>dk</strong>end ændringerne med<br />
Afslut menuen med<br />
Slette kartotek Kartoteker kan ikke slettes.<br />
194<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
F3<br />
F3<br />
ENTER<br />
F3<br />
F3<br />
ENTER
Kartotek – Feltbehandling (opret)<br />
Funktion Fremgangsmåde Tast<br />
Finde kartotek Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/ Kerne<br />
Vælg kartotek fra den viste liste<br />
ENTER<br />
Vælg Feltbehandling/Opret fra den viste menu ENTER<br />
Opret felt Vælg felttype fra menuen Felttyper ENTER<br />
Gentages for<br />
hvert felt at<br />
oprette<br />
Særegne<br />
informationer<br />
Sammenlign.<br />
Justeret<br />
Længde<br />
Opdatering af<br />
tallet<br />
Hvilken Fast-<br />
Tekst-Type<br />
Fælles<br />
informationer<br />
Indtastningsbilledet Opsætning af databasefelt vises.<br />
For hver felttype er der nogle særegne og nogle fælles<br />
Informationer, der skal angives.<br />
I denne huskeliste vises de vigtigste felter at udfylde.<br />
Udfyld de særegne informationer for felttypen og gå<br />
videre til de fælles informationer.<br />
Alfanumerisk-felt<br />
Vælg Højre- eller venstrestillet.<br />
Angiv længde.<br />
Heltals-felt og Kommatals-felt<br />
Vælg default værdien Absolut.<br />
Dato-felt<br />
Intet specielt.<br />
Fast-Tekst-Type<br />
Vælg fastteksttype med<br />
Udfyldes for alle felter.<br />
Feltnavn Giv feltet et sigende navn.<br />
Anvend tegnene a-å, AÅ, 0-9 og understreg.<br />
Evt. Ledetekst Hvis ledeteksten ikke udfyldes anvendes feltnavnet som<br />
ledetekst i listbilleder og skærmbilleder.<br />
Udfylde under<br />
rettelse<br />
Hvis der svarers ja kan feltværdien senere ændres, det må<br />
man ikke ved nøglefelter, hvor der findes underliggende<br />
poster, f.eks. Debitorkontonr. med posteringer.<br />
Afslutte Go<strong>dk</strong>end med F3<br />
ALT+H<br />
195<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Kartotek – Feltbehandling (ret)<br />
Funktion Fremgangsmåde Tast<br />
Finde felt Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/ Kerne<br />
Vælg kartotek fra den viste liste<br />
ENTER<br />
Vælg Feltbehandling/Ret fra den viste menu ENTER<br />
Åbne felt Vælg felt fra feltlisten ENTER<br />
Indtastningsbilledet Opsætning af databasefelt vises.<br />
Udfør nødvendige ændringer.<br />
Afslutte Go<strong>dk</strong>end med F3<br />
Kartotek – Feltbehandling (referencer)<br />
Funktion Fremgangsmåde Tast<br />
Indsætte<br />
referencer<br />
Åbne<br />
opsætning af<br />
databasefelt<br />
Gentages for<br />
hvert felt<br />
Referencekartotek<br />
Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/ Kerne<br />
Vælg kartotek fra den viste liste<br />
ENTER<br />
Vælg Feltbehandling/Ret fra den viste menu ENTER<br />
Vælg felt fra feltlisten ENTER<br />
Indtastningsbilledet Opsætning af databasefelt vises.<br />
Udfyld flg. felter:<br />
Angiv navn på kartotek der skal referes til<br />
Referencefelt Angiv navn på felt i referencekartoteket, hvori værdi og<br />
type er den samme, som det felt du står i her.<br />
Afslutte Go<strong>dk</strong>end med F3<br />
Kartotek – Dokumentation<br />
ALT+H<br />
ALT+H<br />
Funktion Fremgangsmåde Tast<br />
Udskrive<br />
dokumentation<br />
Generelt/Tilpasning/Udviklingsmenu/DBD/ Udskriv<br />
Vælg kartotek fra den viste liste<br />
Udfyld billedet ’Udskriftsmuligheder’ med nødvendige<br />
informationer.<br />
Go<strong>dk</strong>end med<br />
ENTER<br />
Vælg kartotek fra kartotekslisten ENTER<br />
196<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
F3
Kartotek – Index (opret)<br />
Funktion Fremgangsmåde Tast<br />
Finde kartotek<br />
til index<br />
Oprette index<br />
Gentages for<br />
hvert index der<br />
skal oprettes<br />
Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/ Kerne<br />
Vælg kartotek fra den viste liste<br />
Vælg Indexbehandling/Opret fra den viste menu<br />
Du ser nu indtastningsbilledet Opsætning af Index<br />
Udfyld flg. felter (alle):<br />
IndexNavn Giv indexet et sigende navn.<br />
Ens Nøgler<br />
tilladt<br />
Eksempel på indexnavn: KtoDatoIdx.Navnet viser at<br />
indexet består af felterne KontoNr og Dato.<br />
NEJ = Der må kun være én post med samme indexnøgle.<br />
JA = Hvis der gerne må være flere poster med samme<br />
indexnøgle.<br />
Er indexet aktivt Angiv med Ja eller Nej om indexet er aktivt.<br />
Beskrivelse af<br />
index<br />
(Indexformel)<br />
Gentages for<br />
hver felt der<br />
skal indsættes<br />
Åbn editorbox til indtastning af felter<br />
Indsæt felter ved at vælge kartotek<br />
Vælg felt<br />
(Felter adskilles med komma)<br />
Go<strong>dk</strong>end editorboxen med F3<br />
Go<strong>dk</strong>end opsætningen af indexet F3<br />
Afslutte Go<strong>dk</strong>end resten med F3<br />
Kartotek – Index (ret)<br />
ENTER<br />
ENTER<br />
ENTER<br />
SHIFT+F8<br />
ENTER<br />
Funktion Fremgangsmåde Tast<br />
Finde index Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/ Kerne<br />
Vælg kartotek fra den viste liste<br />
ENTER<br />
Vælg Indexbehandling/Ret fra den viste menu ENTER<br />
Rette Index Vælg index fra listen ENTER<br />
Gentages for<br />
hvert index der<br />
skal rettes<br />
Du ser nu indtastningsbilledet ’Opsætning af Index’.<br />
Udfør nødvendige ændringer.<br />
Go<strong>dk</strong>end editorboxen med F3<br />
Go<strong>dk</strong>end opsætningen af indexet F3<br />
Afslutte Go<strong>dk</strong>end resten med F3<br />
197<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Kartotek – Index (slet)<br />
Funktion Fremgangsmåde Tast<br />
Finde index Generelt/Tilpasning/Udviklingsmenu/DBD/Ret/ Kerne<br />
Vælg kartotek fra den viste liste<br />
Slette index Vælg Indexbehandling/Slet fra den viste menu<br />
(Indexet slettes uden advarsel.)<br />
Afslutte Go<strong>dk</strong>end resten med F3<br />
Listbillede – Opret<br />
ENTER<br />
Funktion Fremgangsmåde Tast<br />
Finde kartotek<br />
til listbillede<br />
Opsætte<br />
vindue<br />
Generelt/Tilpasning/Udviklingsmenu/Lst/Opret<br />
Vælg kartotek fra liste ENTER<br />
Indtastningsbilledet Opsætning af vinduet åbnes.<br />
De vigtigste felter at udfylde er:<br />
Søgenavn i liste Billedets navn som det skal søges under.<br />
NB.: Benyt samme navn som det felt der skal slås op på i<br />
kartoteket, så åbnes listbilledet direkte.<br />
Tekst i rammen Indsæt den tekst der skal vises i rammen på selve<br />
listbilledet.<br />
Udfyldes feltet ikke, benytter systemet indholdet i det<br />
ovenstående felt Søgenavn i liste.<br />
Øvrige felter Resten af felterne kan udfyldes efter eget valg, ellers<br />
udfyldes de automatisk med defaultværdier.<br />
Go<strong>dk</strong>end med<br />
Billedet ’Design af listbillede’ vises. (Felter indsættes heri.)<br />
Indsætte felt Felter indsættes i ’Design af listbillede’.<br />
Gentages for<br />
hvert felt der<br />
skal indsættes<br />
Afslutte<br />
listbillede<br />
Vis plukkeliste over felter i kartoteket INSERT<br />
Vælg felt fra plukkelisten ENTER<br />
Billedet ’Opsætning af . . . felt’ vises.<br />
Go<strong>dk</strong>end<br />
Gør klar til næste felt<br />
NB.: Felterne vises i den rækkefølge, de står i her. Hvis du<br />
ikke taster PIL NED bliver de indsat før.<br />
Gentag for næste felt eller<br />
Afslut og go<strong>dk</strong>end. F3<br />
ENTER<br />
198<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
F3<br />
F3<br />
PIL NED
Listbillede – Ret<br />
Funktion Fremgangsmåde Tast<br />
Finde<br />
listbillede<br />
Ændre<br />
opsætning af<br />
vindue<br />
Generelt/Tilpasning/Udviklingsmenu/Lst/Ret<br />
Vælg kartotek fra liste ENTER<br />
Vælg listbillede fra liste ENTER<br />
Indtastningsbilledet Design af listbillede vises.<br />
Du kan nu vælge at indsætte eller ændre felter eller<br />
at ændre i opsætningen af vinduet.<br />
Åbn indtastningsbilledet Opsætning af vinduet<br />
Udfør nødvendige ændringer.<br />
Go<strong>dk</strong>end med<br />
Du er tilbage i Design af listbillede.<br />
Indsætte felter Felter indsættes i Design af listbillede.<br />
Gentages for<br />
hvert felt der<br />
skal indsættes<br />
Afslutte<br />
listbillede<br />
Vis plukkeliste over felter i kartoteket<br />
CTRL+F6<br />
199<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
F3<br />
INSERT<br />
Vælg felt fra plukkelisten ENTER<br />
Billedet ’Opsætning af . . . felt’ vises.<br />
Go<strong>dk</strong>end<br />
Gør klar til næste felt<br />
NB.: Felterne vises i den rækkefølge, de står i her. Hvis du<br />
ikke taster PIL NED bliver de indsat før.<br />
Gentag for næste felt eller<br />
Afslut og go<strong>dk</strong>end F3<br />
Slette felt Et felt kan slettes ved at markere feltet med cursoren og<br />
taste<br />
Listbillede – Slet<br />
F3<br />
PIL NED<br />
DELETE<br />
Funktion Fremgangsmåde Tast<br />
Finde<br />
listbillede<br />
Slette<br />
listbillede<br />
Generelt/Tilpasning/Udviklingsmenu/Lst/Slet<br />
Vælg kartotek fra liste ENTER<br />
Vælg listbillede fra liste ENTER<br />
Boksen Slet listbillede vises.<br />
Slet listbilledet<br />
(Listbilledet slettes.)<br />
JA
Menuer - Lille udviklingsmenu (CTRL F12)<br />
Funktion Fremgangsmåde Tast<br />
Kald af<br />
menuen<br />
Kald den lille udviklingsmenu CTRL+F12<br />
Vælg XAL-Navne.<br />
Menuer – Lokalmenuer<br />
Du ser en liste over applikationselementer tilhørende<br />
den sidste procestype du var inde i.<br />
Skift procestype (hvis nødvendigt) ALT+T<br />
Vælg procestype og vis applikationselementer ENTER<br />
Vælg applikation der skal udføres ENTER<br />
Vælg linje der vises med Procestype=Applikation f.eks.<br />
Form=CustTable og overfør linjen til feltet<br />
ENTER<br />
Funktion Fremgangsmåde Tast<br />
Menusti Generelt/Tilpasning/Udviklingsmenu/FRM/Ret<br />
Indsætte<br />
Ændre<br />
Slette<br />
Vælg skærmbillede (form) fra plukkelisten.<br />
Aktiver Lokalmenuen F10<br />
Du ser nu lokalmenuen til det aktuelle skærmbillede.<br />
Indsætning, ændring eller sletning af menupunkter<br />
foregår nu som i huskelisten:<br />
Menuer – Opsætning af menupunkt.<br />
Opsætte I opsætning af menu kan du angive:<br />
Menutitel<br />
Om baggrunden skal ryddes<br />
Om menuen er den første i en serie<br />
Om menuen skal forlades efter valg<br />
Hvilken rammetype de skal anvendes<br />
CTRL+F6<br />
200<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Menuer – Opsætning af menupunkt<br />
Funktion Fremgangsmåde Tast<br />
Finde plads til<br />
menupunkt<br />
Vælge<br />
indsætte,<br />
ændre eller<br />
slette<br />
Ved indsætte<br />
eller ændre<br />
Du kommer fra en af huskelisterne:<br />
Menuer – Undermenuer til gittermenuer<br />
Menuer – Generelle menuer<br />
Menuer – Lokale menuer<br />
Placér bjælken hvor der skal indsættes et nyt menupunkt,<br />
eller hvor der skal ændres i et eksisterende.<br />
Du kan nu vælge:<br />
at indsætte et nyt menupunkt<br />
at ændre i et eksisterende menupunkt<br />
at slette et menupunkt<br />
I de to første tilfælde åbnes opsætningsbilledet<br />
Opsætning af menupunkt med felterne:<br />
PILE eller hurtigvalg<br />
INS<br />
ENTER<br />
Proces Angiv procestype eller vælg fra plukkeliste. ALT+H<br />
Parametre til<br />
proces<br />
Menu-punktets<br />
navn<br />
Bogstav til<br />
hurtigvalg<br />
Anfør hvilke parametre der skal benyttes til processen<br />
f.eks. Form=DebKart, hvis det er processen Form-afvikling.<br />
Se evt. huskelisten: Menuer - Lille Udviklingsmenu.<br />
Anfør det navn der skal stå i menuen.<br />
Er der kun et menupunkt i menuen, vises navnet ikke.<br />
Derimod udføres punktet umiddelbart.<br />
Bogstav til aktivering af menuen direkte.<br />
Hjælpetekst Teksten vises på nederste linje på skærmen.<br />
Gruppe<br />
rettigheder<br />
DEL<br />
(CTRL+F12)<br />
Du kan åbne feltet med og ENTER<br />
indsætte grupper eller<br />
slette grupper<br />
Hvis ingen grupper angives, kan alle afvikle menupunktet.<br />
Angives en eller flere grupper er det kun de angivne, der<br />
kan se og afvikle menupunktet.<br />
INS<br />
DEL<br />
201<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Form – Vindue (opret)<br />
Funktion Fremgangsmåde Tast<br />
Opsætte<br />
vindue<br />
Åbne<br />
opsætning af<br />
vindue<br />
Generelt/Tilpasning/Udviklingsmenu/Frm/Opret<br />
Indtastningsbilledet Opsætning af vinduet åbnes.<br />
De vigtigste felter at udfylde er:<br />
Søgenavn i liste Formens navn som den skal søges under.<br />
Tekst i rammen Indsæt den tekst der skal vises i rammen på selve<br />
skærmbilledet.<br />
Vinduets højde Angiv vinduets højde i antal linjer.<br />
Bredde Angiv vinduets bredde i antal karakterer (kolonner)<br />
Farvesæt Som standard vælges farvesæt2.<br />
Vindue Fast:<br />
Dette er default værdien.<br />
Er god at anvende ved Enkelt Record Blokke, idet vinduets<br />
højde og bredde benyttes som angivet.<br />
CTRL+R kan kun skalere ned og felterne flyttes ikke.<br />
Skalerbart:<br />
Værdien Skalérbart er god ved Multi Record Blokke.<br />
CTRL+R kan både skalere op og ned, og felterne flyttes<br />
automatisk.<br />
Go<strong>dk</strong>end med<br />
Vinduet vises på skærmen og er klar til oprettelse af<br />
blokke.<br />
Afslutte form Billedet kan lukkes med F3 eller<br />
der kan oprettes blokke (se huskelister hertil).<br />
202<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
F3<br />
F3
Form – Vindue (ret)<br />
Funktion Fremgangsmåde Tast<br />
Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />
Vælg form fra listen over forms ENTER<br />
Formen vises på skærmen.<br />
Åbne vindue Åbn for indtastningsbilledet Opsætning af vindue. CTRL+F6<br />
Foretag ønskede ændringer.<br />
Go<strong>dk</strong>end med<br />
Formen vises igen på skærmen.<br />
Afslutte form Billedet kan lukkes med<br />
eller<br />
blokke og felter kan behandles (se huskelister hertil)<br />
Form – Vindue (slet ) (dvs. hele formen)<br />
Funktion Fremgangsmåde Tast<br />
Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Slet<br />
Vælg form fra listen over forms ENTER<br />
Slette form Der vises en advarselsboks, med spørgsmålet om formen<br />
skal slettes.<br />
Slet formen<br />
(formen slettes herefter.)<br />
Slet ikke formen<br />
(formen slettes ikke.)<br />
203<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
F3<br />
F3<br />
JA<br />
NEJ
Form – Enkelt record blok (opret)<br />
Funktion Fremgangsmåde Tast<br />
Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />
Vælg form fra listen over forms ENTER<br />
Formen vises på skærmen.<br />
Oprette blok Opret en blok. SH+F2<br />
Gentages for<br />
hver blok der<br />
skal oprettes<br />
Indtastningsbilledet Opsætning for blok åbnes.<br />
De vigtigste feltet at udfylde er:<br />
Blok navn Feltet skal udfyldes.<br />
Anvend om muligt samme navn som kartoteket. Det gør<br />
det nemmere at anvende forms control kommandoerne,<br />
idet disse altid refererer til bloknavnet og ikke til<br />
kartoteksnavnet.<br />
Kartotek Udfyldes kun når blokken skal indeholde felter fra et<br />
kartotek.<br />
Hent kartoteksnavnet fra listen over kartoteker<br />
Bemærk:<br />
Felterne Autogenerér blok og Auto options skal ikke<br />
udfyldes ved Enkelt Record Blokke.<br />
Go<strong>dk</strong>end med<br />
Formen vises igen på skærmen.<br />
Afslutte form Billedet kan lukkes med<br />
eller<br />
blokke og felter kan behandles (se huskelister hertil)<br />
ALT+H<br />
204<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
F3<br />
F3
Form – Enkelt record blok (ret)<br />
Funktion Fremgangsmåde Tast<br />
Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />
Vælg form fra listen over forms ENTER<br />
Formen vises på skærmen.<br />
Bloknavn ses i bunden af skærmen.<br />
Åbne blok Vælg blok der skal ændres SHIFT+F8<br />
Gentages for<br />
hver blok der<br />
skal rettes<br />
Åbn for indtastningsbilledet Opsætning for blok SHIFT+F6<br />
Foretag ønskede ændringer.<br />
Go<strong>dk</strong>end med<br />
Formen vises igen på skærmen.<br />
Afslutte form Billedet kan lukkes med F3 eller blokke og felter kan<br />
behandles (se huskelister hertil)<br />
Form – Enkelt record blok (slet)<br />
Funktion Fremgangsmåde Tast<br />
Slette blok Blokke kan ikke slette i en form.<br />
Exportere<br />
form<br />
Hvis en blok skal slettes, skal formen først eksporteres ud i<br />
en fil i styresystemet, bloklinjerne fjernes og formen<br />
importeres igen.<br />
Generelt/Tilpasning/Udviklingsmenu/Frm/<br />
Export/Export<br />
Vælg form fra listen over forms ENTER<br />
Angiv stinavn på den fil hvortil formen skal exporteres.<br />
Slette blok i fil Generelt/Tilpasning/Hop til operativsystem<br />
Importere<br />
form igen<br />
Åbn filen med den exporterede form.<br />
(Anvend dos editoren eller andet værktøj til editering.)<br />
Slet alle linjer vedr. den blok der fjernes.<br />
Linjerne begynder med ’BLOCK bloknavn’ og slutter med<br />
’ENDBLOCK’.<br />
Afslut og go<strong>dk</strong>end ændringerne.<br />
Luk styresystemet EXIT<br />
Generelt/Tilpasning/Udviklingsmenu/Frm/ Import<br />
Angiv stinavn på filen med formen der skal importeres.<br />
Blokken er nu fjernet fra formen.<br />
205<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
F3<br />
F3
Form – Multi record blok (opret)<br />
Funktion Fremgangsmåde Tast<br />
Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />
Vælg form fra listen over forms ENTER<br />
Formen vises på skærmen.<br />
Oprette blok Opret en blok SHIFT+F2<br />
Gentages for<br />
hver blok der<br />
skal oprettes<br />
Indtastningsbilledet Opsætning for blok åbnes.<br />
De vigtigste feltet at udfylde er:<br />
Blok navn Feltet skal udfyldes.<br />
Anvend om muligt samme navn som kartoteket. Det gør<br />
det nemmere at anvende forms control kommandoerne,<br />
idet disse altid refererer til bloknavnet og ikke til<br />
kartoteksnavnet.<br />
Kartotek Udfyldes kun når blokken skal indeholde felter fra et<br />
Autogenerér<br />
blok<br />
kartotek.<br />
Hent kartoteksnavnet fra listen over kartoteker.<br />
Udfyldes med JA<br />
Auto options Åbn indtastningsbilledet Blok auto-options ENTER<br />
Ved anvendelse af defaultværdierne fylder det<br />
autogenererede område automatisk hele vinduet.<br />
Du kan ændre værdierne efter ønske.<br />
Go<strong>dk</strong>end billedet Blok auto-options F3<br />
Go<strong>dk</strong>end billedet Opsætning for blok F3<br />
Afslutte form Go<strong>dk</strong>end og luk selve formen med<br />
eller<br />
arbejd videre med blokke og felter (se huskelister hertil).<br />
F3<br />
ALT+H<br />
206<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Form – Multi record blok (ret)<br />
Funktion Fremgangsmåde Tast<br />
Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />
Vælg form fra listen over forms ENTER<br />
Formen vises på skærmen.<br />
Bloknavn ses i bunden af skærmen.<br />
Åbne blok Vælg blok der skal ændres SHIFT+F8<br />
Gentages for<br />
hver blok der<br />
skal ændres<br />
Åbn for indtastningsbilledet Opsætning for blok SHIFT+F6<br />
Foretag ønskede ændringer i selve indtastningsbilledet<br />
Opsætning for blok eller i billedet Blok auto-options.<br />
Go<strong>dk</strong>end med<br />
Formen vises igen på skærmen.<br />
Afslutte Billedet kan lukkes med<br />
eller<br />
blokke og felter kan behandles (se huskelister hertil).<br />
Form – Multi record blok (slet)<br />
Funktion Fremgangsmåde Tast<br />
Slette blok Der henvises til huskelisten:<br />
Form – Enkelt record blok (slet).<br />
207<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
F3<br />
F3
Form – Felter (opret)<br />
Funktion Fremgangsmåde Tast<br />
Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />
I enkelt record<br />
blok<br />
I multi record<br />
blok<br />
Indsætte felt<br />
Gentages for<br />
hvert felt der<br />
skal indsættes<br />
Vælg form fra listen over forms ENTER<br />
Formen vises på skærmen.<br />
Du skal selv placere cursoren, hvor feltet skal stå.<br />
I en multi record blok, autogenereret, placeres felterne<br />
automatisk. Du skal derfor ikke selv placere cursoren.<br />
Indsæt feltet.<br />
Du ser nu boksen til indtastning af feltnavn.<br />
Vis liste over felter ENTER<br />
Hent feltnavn fra listen<br />
Du ser nu skærmbilledet med feltets opsætning.<br />
.Opsætningen kan ændres efter behov.<br />
Go<strong>dk</strong>end feltet F3<br />
Afslutte form Go<strong>dk</strong>end og afslut hele formen<br />
Form – Felter (ret)<br />
208<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
F2<br />
ENTER<br />
Funktion Fremgangsmåde Tast<br />
Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />
Vælg form fra listen over forms ENTER<br />
Formen vises på skærmen.<br />
Åbne felt Placér cursoren på feltet PILE<br />
Gentages for<br />
hvert felt der<br />
skal ændres<br />
Åbn billedet med feltets opsætning F6<br />
Foretag ønskede ændringer i opsætningen.<br />
Go<strong>dk</strong>end feltet F3<br />
Afslutte form Go<strong>dk</strong>end og afslut hele formen F3<br />
F3
Form – Felter (slet)<br />
Funktion Fremgangsmåde Tast<br />
Finde form Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />
Vælg form fra listen over forms ENTER<br />
Formen vises på skærmen.<br />
Finde felt Placér cursoren på feltet PILE<br />
Gentages for<br />
hvert felt der<br />
skal slettes<br />
Slet feltet ALT+F9<br />
Afslutte form Go<strong>dk</strong>end og afslut hele formen F3<br />
Form – Triggere i vinduet<br />
Funktion Fremgangsmåde Tast<br />
Finde trigger i<br />
vindue<br />
Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />
Vælg form fra listen over forms ENTER<br />
Formen vises på skærmen.<br />
Åbn skærmbilledet Opsætning af vinduet CTRL+F6<br />
Vælg feltet Forms formler og åbn listen over triggere PILE<br />
ENTER<br />
Åbne trigger Vælg trigger og åbn tilhørende editorboks PILE og ENTER<br />
Gentages ved<br />
flere trigger<br />
Afslutte<br />
trigger i<br />
vindue<br />
Indtast ønsket kode.<br />
Go<strong>dk</strong>end og afslut koden F3<br />
Vælg anden trigger eller<br />
luk listen over triggere ESC<br />
Go<strong>dk</strong>end og afslut Opsætning af vinduet F3<br />
209<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Form – Triggere i blokke<br />
Funktion Fremgangsmåde Tast<br />
Finde blok<br />
med triggere<br />
Åbne trigger<br />
Gentages ved<br />
flere triggere<br />
Afslutte<br />
bloktrigger<br />
Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />
Vælg form fra listen over forms ENTER<br />
Formen vises på skærmen.<br />
Vælg blok SHIFT+F8<br />
Åbn skærmbilledet Opsætning for blok SHIFT+F6<br />
Vælg feltet Blok formler og åbn listen over triggere PILE / ENTER<br />
Vælg trigger og åbn tilhørende editorboks PILE / ENTER<br />
Indtast ønsket kode.<br />
Go<strong>dk</strong>end og afslut koden F3<br />
Vælg anden trigger eller<br />
Form – Triggere i felter<br />
luk listen over triggere ESC<br />
Go<strong>dk</strong>end og afslut Opsætning for blok F3<br />
Afslut selve formen F3<br />
Funktion Fremgangsmåde Tast<br />
Finde felt med<br />
triggere<br />
Generelt/Tilpasning/Udviklingsmenu/Frm/Ret<br />
Vælg form fra listen over forms ENTER<br />
Formen vises på skærmen. Vælg felt<br />
Åbn skærmbilledet ’Opsætning af … felt’ F6<br />
Vælg feltet Formler for selve feltet og åbn listen over<br />
triggere<br />
PILE<br />
PILE<br />
ENTER<br />
Åbne trigger Vælg trigger og åbn tilhørende editorboks PILE og ENTER<br />
Gentages ved<br />
flere triggere<br />
Afslutte<br />
felttrigger<br />
Indtast ønsket kode.<br />
Go<strong>dk</strong>end og afslut koden F3<br />
Vælg anden trigger eller<br />
luk listen over triggere ESC<br />
Go<strong>dk</strong>end og afslut ’Opsætning af … felt’ F3<br />
Afslut selve formen F3<br />
210<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Del III – Rapporter<br />
211<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
1. Rapport XAL<br />
Mål med lektionen<br />
Formålet med denne lektion er at give deltagerne grundlæggende viden om opbygningen af<br />
rapportgeneratoren i C5.<br />
I lektionen lægges der særlig vægt på rapportgeneratorens XAL editor.<br />
Kommandoerne SEARCH, USING, ORDER, WHERE og PROMPT repeteres.<br />
Efter lektionen skal kursisterne kunne:<br />
Anvende rapportgeneratorens XAL editor til indtastning af XAL kørsler<br />
Anvende kommandoen OUTPUT, og kende forskel på anvendelsen af OUTPUT og PRINT<br />
Gemme rapporter.<br />
Generelt<br />
Rapportgeneratoren er det værktøj i C5 der anvendes til opbygning og udskrivning af rapporter på<br />
papir.<br />
Generatoren anvendes både til oprettelse og vedligeholdelse af rapporter. Den kan startes i<br />
udviklingsmenuen i kolonnen REP og består af to processer.<br />
Processer i rapportgeneratoren<br />
Rapportgeneratoren i C5 arbejder med to processer.<br />
Rapportgeneratorens to processer<br />
Nr Navn Anvendelse<br />
14 Rapport-opbygning Oprettelse af nye og ændring af eksisterende rapporter i<br />
menulinjerne Opret og Ret<br />
15 Rapport-afvikling Afvikling af rapporter i menulinjen Kør<br />
Rapporter der oprettes og vedligeholdes i de to processer har alle for- og efternavne.<br />
Navne på rapporter<br />
I nye rapporter bestemmer du selv, hvad fornavnet skal være. Efternavnet tildeles automatisk af<br />
rapportgeneratoren afhængigt af hvilket ’lag’, der er åbnet.<br />
I denne lektion tages der udgangspunkt i brugerlaget ’USR’, der er det lag, der altid arbejdes i som<br />
standard. (Der henvises til Supervisor kurset for forklaring til de forskellige lag).<br />
Standardrapporterne der udvikles af Microsoft ligger i SYS laget, og de tilrettede standardrapporter og<br />
bruger-rapporter ligger i USR laget.<br />
Når standardrapporter i SYS laget tilrettes af brugerne, gemmes de automatisk i brugerlaget under<br />
samme fornavn som standardrapporten, men med efternavnet USR.<br />
212<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Vigtigt!<br />
Standardrapporterne kan ikke overskrives, og de kan ikke slettes. Det kan bruger-rapporterne derimod.<br />
Det anbefales derfor at udvise forsigtighed, når der ændres i brugerrapporter.<br />
C5 vers. 2012 -> Eksempel på rapporter i udviklingsmenuen i kolonnen REP<br />
Rapportnavn Efternavn<br />
$InvenList Usr<br />
$CustBalanceList Usr<br />
... Sys<br />
CustBalanceList Sys<br />
... Sys<br />
... Sys<br />
I ovenstående eksempel er rapporten InvenList en ny brugerrapport, hvorfor den har fået efternavnet<br />
USR. Rapporten CustBalanceList findes både i en SYS og en USR version. Dvs. at der er foretaget en<br />
tilretning af den originale CustBalanceList.<br />
Selve rapportgeneratorens opbygning behandles i næste afsnit.<br />
Bemærk! Navne på rapporter og andre elementer skal altid være i ét ord. Eneste tegn, ud over<br />
bogstaverne i alfabetet, er understreg og ved navne der består af flere ord, bør hvert ord starte med<br />
stort bogstav, men uden mellemrum mellem ordene.<br />
C5 vers. -> 4.1 Eksempel på rapporter i udviklingsmenuen i kolonnen REP<br />
Rapportnavn Efternavn<br />
$LagerListe Usr<br />
$DebSaldoListe Usr<br />
... Sys<br />
DebSaldoListe Sys<br />
... Sys<br />
... Sys<br />
I ovenstående eksempel er rapporten LagerListe en ny brugerrapport, hvorfor den har fået efternavnet<br />
USR. Rapporten DebSaldoListe findes både i en SYS og en USR version. Dvs. at der er foretaget en<br />
tilretning af den originale DebSaldoListe.<br />
Selve rapportgeneratorens opbygning behandles i næste afsnit.<br />
Bemærk! Navne på rapporter og andre elementer skal altid være i ét ord. Eneste tegn, ud over<br />
bogstaverne i alfabetet, er understreg og ved navne der består af flere ord, bør hvert ord starte med<br />
stort bogstav, men uden mellemrum mellem ordene.<br />
213<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Rapportgeneratorens opbygning<br />
Rapportgeneratoren består af to hovedområder:<br />
Område Anvendelse<br />
Rapport-XAL Indeholder XAL kørsel med kommandoer til udtræk af data fra<br />
kartoteker i databasen<br />
Rapport-definition Definition af linjer og opsætning af layout<br />
Data udtrækkes i rapport-XAL fra kartoteker og videresendes til rapport-definition til udskrivning i<br />
rapporten, som illustreret herunder.<br />
Dataudtræk med XAL<br />
Kartoteker<br />
Rapport-<br />
XAL<br />
Rapport-definition<br />
Når rapportgeneratoren aktiveres og åbnes, vises begge hovedområder samtidig. Områdernes<br />
placering i rapportgeneratoren ses i figuren på næste side.<br />
Hovedområdernes placering i rapportgeneratoren<br />
Rapport-XAL<br />
Rapport-definition<br />
Ved oprettelse af nye rapporter er det frivilligt hvilket hovedelement, der skal anvendes først.<br />
Denne lektion tager udgangspunkt i rapport-XAL, der behandles i næste afsnit.<br />
214<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Rapport-XAL<br />
Rapport-XAL er en almindelig XAL editorbox, der befinder sig i rapportgeneratorens øverste del.<br />
Rapport-XAL i form af en almindelig XAL editorboks<br />
ALT<br />
+ Z<br />
SH<br />
+<br />
F6<br />
Rapport-XAL i form af en XAL-editorboks<br />
Rapport-definition<br />
Når rapportgeneratoren åbnes stilles cursoren automatisk i området rapport-definition i venstre side.<br />
Med SH+F6 kan der herefter skiftes til rapport-XAL området.<br />
Rapportgeneratorens XAL editorbox fylder som default 3 linjer, men kan med ALT+Z zoomes op til fuld<br />
størrelse, så det er nemmere at overskue den kode, der indtastes.<br />
I editorboxen kan alle de normale XAL kommandoer og funktionstaster anvendes til søgning af data,<br />
der skal udskrives i rapporten.<br />
For at trække data ud af databasen og sende disse videre til rapporten, anvendes bl.a. XAL<br />
kommandoerne SEARCH og PROMPT, der repeteres efterfølgende.<br />
SEARCH (repetition)<br />
SEARCH kommandoerne består af SEARCH, END, USING, ORDER og WHERE.<br />
SEARCH kommandoernes betydning<br />
Kommando Betydning<br />
SEARCH Udfører en løkke ved at gennemløbe poster i et kartotek.<br />
END Afslutter søgeløkker<br />
Efterfølges af navnet på kartotek der skal gennemløbes.<br />
USING Angiver at der skal sorteres efter et fast index.<br />
Indexnavnet skrives efter kommandoen USING.<br />
ORDER Angiver at der skal sorteres efter et kartoteksfelt.<br />
Feltnavnet angives efter kommandoen ORDER.<br />
WHERE Angiver at der skal foretages en afgrænsning under gennemløbet.<br />
Kommandoen efterfølges af en betingelse, der skal være opfyldt for,<br />
at poster udleveres til XAL kørslen.<br />
215<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Herunder nogle få eksempler på anvendelsen af SEARCH kommandoerne.<br />
C5 vers. 2012 -> Eksempel på kartoteksgennemløb med sortering efter fast index<br />
SEARCH InvenTable USING ItemIdx<br />
PRINT ItemNumber, ” ”, ItemName1, ” ”, CostPrice<br />
END<br />
PAUSE<br />
C5 vers. -> 4.1 Eksempel på kartoteksgennemløb med sortering efter fast index<br />
SEARCH LagKart USING VareIdx<br />
PRINT VareNummer, ” ”, VareNavn1, ” ”, KostPris<br />
END<br />
PAUSE<br />
C5 vers. 2012 -> Eksempel på kartoteksgennemløb med sortering efter kartoteksfelt<br />
SEARCH InvenTable ORDER BY CostPrice<br />
PRINT ItemNumber, ” ”, ItemName1, ” ”, CostPrice<br />
END<br />
PAUSE<br />
C5 vers. -> 4.1 Eksempel på kartoteksgennemløb med sortering efter kartoteksfelt<br />
SEARCH LagKart ORDER BY KostPris<br />
PRINT VareNummer, ” ”, VareNavn1, ” ”, KostPris<br />
END<br />
PAUSE<br />
C5 vers. 2012 -> Eksempel på afgrænsning af poster med varenummer >= ”10000”<br />
SEARCH InvenTable<br />
WHERE ItemNumber >= ”10000”<br />
PRINT ItemNumber, ” ”, ItemName1, ” ”, CostPrice<br />
END<br />
C5 vers. -> 4.1 Eksempel på afgrænsning af poster med varenummer >= ”10000”<br />
SEARCH LagKart<br />
WHERE VareNummer >= ”10000”<br />
PRINT VareNummer, ” ”, VareNavn1, ” ”, KostPris<br />
END<br />
HUSK at PRINT kun udskriver på skærmen. Skal der udskrives på en printer anvendes kommandoen<br />
OUTPUT, der behandles i afsnittet om OUTPUT.<br />
PROMPT (repetition)<br />
PROMPT kommandoen anvendes til at give brugeren mulighed for selv at indtaste værdier i<br />
indtastningsfelter i en dialogboks.<br />
PROMPT kommandoerne består af PROMPT, INPUT, AT, GET og REF.<br />
PROMPT kommandoernes betydning<br />
Kommando Betydning<br />
PROMPT Danner en dialogboks bestående af overskrifter, ledetekster og<br />
indtastningsfelter.<br />
216<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Alle tekster SKAL stå i anførselstegn.<br />
GET GET efterfølges af navnet på en variabel i en parantes.<br />
Den angivne variabel modtager værdien, der indtastes i<br />
indtastningsfeltet.<br />
REF Anvendes for at give brugeren hjælp fra et givet kartotek.<br />
REF efterfølges af navn på referencekartotek og felt.<br />
Bruger kan med ALT+H slå op i det angivne kartotek.<br />
INPUT Afslutter boksen. Boksen placeres i øverste venstre hjørne på<br />
skærmen<br />
INPUT AT Afslutter boksen. Boksen placeres et bestemt sted på skærmen. AT<br />
efterfølges af kolonnenummer og linjenummer.<br />
Herunder eksempler på anvendelsen af PROMPT kommandoerne.<br />
Promptboks med to variabler<br />
INT &Antal<br />
STR 20 &VareNavn<br />
PROMPT ”Indtast vareinformationer”,,,<br />
”Antal ..........: ” GET (&Antal),<br />
”Varenavn .......: ” GET (&VareNavn)<br />
INPUT<br />
Promptboks med tekstlinje uden GET, men med INPUT AT<br />
STR 15 &Varenr<br />
PROMPT ”Indtast vareinformationer”,,,<br />
”Varenummer .......: ” GET (&Varenr),,<br />
”Hvis det ønskes, må varenummeret”,<br />
”gerne være alfanumerisk.”<br />
INPUT AT 15,4<br />
OUTPUT<br />
Kommandoen OUTPUT anvendes i Rapport-XAL til at sende udsøgte poster videre til rapportdefinition,<br />
så værdier herfra kan udskrives på printer.<br />
Syntaks for OUTPUT kommandoen<br />
OUTPUT <br />
Bemærk at OUTPUT kun efterfølges af navnet på et kartotek og ikke af navne på felter, som det er<br />
tilfældet med PRINT kommandoen.<br />
Hvor PRINT sender data til et vindue på skærmen, sender OUTPUT i stedet data til en rapport, der kan<br />
udskrives på papir.<br />
Anvendelse af PRINT eller OUTPUT<br />
217<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
XAL kørsel<br />
SEARCH Kartotek<br />
END<br />
PRINT<br />
OUTPUT<br />
Forskel på PRINT og OUTPUT<br />
Når data skal sendes til et vindue på skærmen, skal programmøren selv styre hvilke felter, der skal<br />
udskrives. Det sker ved at angive PRINT kommandoen efterfulgt af navnene på de enkelte felter.<br />
Når data skal sendes til en rapport, anvendes OUTPUT kommandoen, der tager fat i hele posten og<br />
sender samtlige felter videre til rapport-definitionen, hvor de enkelte felter udfyldes med værdier fra<br />
den modtagne post.<br />
Eksempler på anvendelse af PRINT og OUTPUT<br />
Efterfølgende vises eksempler på anvendelse af de to kommandoer PRINT og OUTPUT.<br />
C5 vers. 2012 -> Eksempel på PRINT<br />
SEARCH ItemTable<br />
PRINT ItemNumber, ” ”, ItemName1, ” ”, CostPrice<br />
END<br />
PAUSE<br />
C5 vers. -> 4.1 Eksempel på PRINT<br />
SEARCH LagKart<br />
PRINT VareNummer, ” ”, VareNavn1, ” ”, KostPris<br />
END<br />
PAUSE<br />
PRINT kommandoen efterfølges af de enkelte feltnavne, der skal udskrives på skærmen.<br />
C5 vers. 2012 -> Eksempel på OUTPUT<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
C5 vers. -> 4.1 Eksempel på OUTPUT<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
Skærm<br />
Rapport<br />
218<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
END<br />
OUTPUT kommandoen efterfølges af navnet på kartoteket. Det betyder at denne kommando sender<br />
hele posten videre til rapport-definitionen, hvor felternes værdier fordeles på rapporten.<br />
Bemærk at PAUSE ikke er nødvendig her.<br />
Komplet eksempel på XAL kode<br />
C5 vers. 2012 -> Promptboks med REF anvendt sammen med SEARCH<br />
Str 10 &FraVare<br />
Str 10 &TilVare<br />
PROMPT ”Udsøgning af lagervarer”,,,<br />
”Fra varenummer: ” GET(&FraVare REF InvenTable.ItemNumber),<br />
”Til varenummer: ” GET(&TilVare REF InvenTable.ItemNumber)<br />
INPUT AT 15,5<br />
SEARCH InvenTable<br />
WHERE ItemNumber >= &FraVare AND ItemNumber 4.1 Promptboks med REF anvendt sammen med SEARCH<br />
Str 10 &FraVare<br />
Str 10 &TilVare<br />
PROMPT ”Udsøgning af lagervarer”,,,<br />
”Fra varenummer: ” GET(&FraVare REF Lagkart.VareNummer),<br />
”Til varenummer: ” GET(&TilVare REF LagKart.VareNummer)<br />
INPUT AT 15,5<br />
SEARCH LagKart<br />
WHERE VareNummer >= &FraVare AND VareNummer
18000 Kabinet 1.250,20<br />
16000 Ram 520,40<br />
12000 Harddisk type 2 1.230,75<br />
14000 CD romdrev 50,10<br />
20000 Skærm 1.000,10<br />
Afhængig af hvad brugeren indtaster i PROMPT boxen, vil listen kun indeholde de varer, der har et<br />
varenummer, der er større end eller lig med og mindre end eller lig med de varenumre, der blev<br />
indtastet.<br />
220<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Rapport XAL<br />
Opgave 1: Rapport-XAL til ’Udlånsliste’<br />
Formål med opgaven<br />
At oprette XAL koden til en rapport med navnet ’Udlånsliste’. Rapporten er sorteret efter debitor og<br />
udlånsnummer.<br />
Beskrivelse<br />
Der skal oprettes XAL kode til en rapport med navnet ’Udlånsliste’.<br />
Data til listen hentes fra kartoteket UDLUdlånsKart og posterne afgrænses på debitorkontonummer.<br />
Afgrænsninger skal kunne indtastes i en promptboks med referencer til debitorkartotekets<br />
kontonummer.<br />
1 Opret en ny rapport.<br />
Forløb i C5 √<br />
2 Vælg Rapport XAL, hvor du indsætter og tilretter startkommentarer.<br />
3 Opret variabler til ’Fra konto’ og ’Til konto’<br />
4 Opret en promptboks med overskriften ’Udlånsliste’.<br />
Boksen skal prompte for ’Fra konto’ og ’Til konto’.<br />
Indsæt referencer til kartoteket CustTable feltet Account, så det bliver muligt i<br />
promptboksen at anvende ALT+H.<br />
5 Opret en søgeløkke på kartoteket UDLUdlånsKart.<br />
Anvend indexet UDLDebUdlIdx til sortering.<br />
Anvend afgrænsningerne fra variablerne i promptboksen.<br />
Send data til Rapport definition med OUTPUT kommandoen.<br />
6 Go<strong>dk</strong>end koden i Rapport XAL editoren og luk rapporten.<br />
7 Afprøv om promptboksen ser rigtig ud og virker mht. opslag i debitorkartoteket.<br />
221<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
2. Rapport definition grundlæggende<br />
Mål med lektionen<br />
At give deltagerne grundlæggende indsigt i rapportgeneratorens definitionsområde.<br />
Efter lektionen skal kursisterne kunne:<br />
Oprette rapportlinjer med kartoteksfelter, ledetekster og fritekster<br />
Anvende kommandoen OUTPUT og kartotekskolonnen som bindeled mellem<br />
rapportgeneratorens XAL-editor og definitionsområdet<br />
Afvikle rapporter.<br />
Generelt<br />
Når der skal udfærdiges rapporter i rapportgeneratoren, dannes der først en XAL-kode i rapport-XAL. I<br />
denne kode indsættes kommandoen OUTPUT, der sørger for at sende udtrukne poster videre til<br />
definitionsområdet.<br />
Dataudtræk med XAL<br />
Definitionsområdet<br />
Introduktion til definitionsområdet<br />
Kartoteker<br />
Rapport-XAL<br />
(OUTPUT)<br />
Rapport-definition<br />
Rapportgeneratorens definitionsområde består af fire kolonner som vist i illustrationen herunder.<br />
222<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Rapport-definition med de fire kolonner<br />
Linje-<br />
Typer<br />
Linje-XAL<br />
Kartoteker Layoutområde<br />
De fire kolonners betydning<br />
Kolonner Anvendelse<br />
Rapport-definition<br />
Linje-typer Anvendes til definition af, hvilke typer linjer der skal udskrives.<br />
En rapport kan, ud over selve dataene, f.eks. indeholde linjer med<br />
sideoverskrifter eller bundtekster, samt flere andre former for<br />
linjer. Dette behandles nærmere i lektionen om linjetyper.<br />
Kartoteker Anvendes først og fremmest til at definere, hvilket kartotek den<br />
enkelte linje får sine data fra, f.eks. når der udskrives data i<br />
rapporten.<br />
Linje-XAL Beregnet til XAL kode der kun gælder den aktuelle linje.<br />
Layoutområde Her opsættes selve rapportens layout med felter og fritekster.<br />
De enkelte kolonner og deres anvendelse bliver hver især behandlet nærmere i efterfølgende lektioner<br />
på dette og det efterfølgende kursus. Der vil således ikke blive givet en komplet vejledning alene på<br />
dette kursus, men nok til at kunne fremstille egne rapporter og redigere i eksisterende.<br />
Oprettelse af rapportlinjer foregår ved at udfylde de forskellige kolonner med værdier, der svarer til<br />
udskriftens indhold og udsøgte data.<br />
Linjetypen bestemmer ofte, hvad linjen skal anvendes til i rapporten, og hvordan de øvrige kolonner<br />
skal udfyldes. Den vigtigste linjetype er Body, der behandles efterfølgende.<br />
223<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Skema med funktionstaster i rapportgeneratoren<br />
Feltbehandling Redigering<br />
Opret felt<br />
F2 ALT D<br />
CTRL F2<br />
ALT F2<br />
F6<br />
ALT F9<br />
SH F6<br />
Opret felt<br />
Direkte fra kartotek<br />
Opret felt<br />
Ledetekst eller overskrift<br />
Ret felt<br />
Alle typer<br />
Slet felt<br />
Stå først på feltet<br />
Rapport XAL<br />
Hop til editorboksen<br />
Flere funktioner kan findes med F1.<br />
SH F5<br />
CTRL F5<br />
ALT I<br />
ALT L<br />
DELETE<br />
Slet én linje<br />
Kopiér felt<br />
eller afmærkede linjer<br />
Flyt felt<br />
eller afmærkede linjer<br />
Indsæt felt<br />
eller afmærkede linjer<br />
Afmærk linjer<br />
Anvend piletaster. Fjernes<br />
med ALT+F5<br />
Slet markerede linjer<br />
224<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Linjetypen Body<br />
Kolonnen linjetyper<br />
De vigtigste linjer i en rapport er de, der udgør selve ’kroppen’ i rapporten.<br />
I definitionsområdet kaldes disse linjer for Body linjer. Body linjer oprettes ved at vælge typen Body i<br />
kolonnen med linjetyper.<br />
Body linjer er således de linjer i rapporten, der indeholder data fra databasen. Derfor indeholder Body<br />
linjerne i definitionsområdet også informationer om, hvilket kartotek data kommer fra, og hvilke felter<br />
der skal udskrives på papiret.<br />
Body linjer til en rapport opstilles som vist i nedenstående figur.<br />
C5 vers. 2012 -> Opsætning Body linje i definitionsområdet<br />
Body<br />
InvenTable<br />
Definitionsområde<br />
Layoutområde<br />
Bemærk at kartotekskolonnen og layoutområdet også er udfyldt. Dette er vigtigt ved linjetypen Body.<br />
C5 vers. -> 4.1 Opsætning op Body linje i definitionsområdet<br />
Body<br />
LagKart<br />
Rapportens ’krop’ i form af data fra databasen<br />
Disse linjer angives som linjetypen Body<br />
ItemNumber ItemName1<br />
VareNummer VareNavn1<br />
Definitionsområde<br />
Layoutområde<br />
CostPrice<br />
KostPris<br />
Bemærk at kartotekskolonnen og layoutområdet også er udfyldt. Dette er vigtigt ved linjetypen Body.<br />
225<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Kartotekskolonnen<br />
Kartotekskolonnen er bindeleddet mellem rapportgeneratorens XAL-editor og definitionsområdet.<br />
Kartotekskolonnen skal udfyldes med navnet på det kartotek, der angives med kommandoen OUTPUT<br />
i rapport-XAL.<br />
C5 vers. 2012 -> Kartotekskolonne med samme kartotek som i OUTPUT<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
Body InvenTable ItemNumber ItemName1<br />
CostPrice<br />
Definitionsområde<br />
Layoutområde<br />
C5 vers. -> 4.1 Kartotekskolonne med samme kartotek som i OUTPUT<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
Body LagKart VareNummer VareNavn1<br />
KostPris<br />
Definitionsområde<br />
Layoutområde<br />
Hvis kartotekskolonnen udfyldes med et andet kartoteksnavn end det, der angives i OUTPUT<br />
kommandoen, afvikles rapporten ikke korrekt.<br />
Første gang der indsættes en Body linje, udfyldes kartotekskolonnen automatisk med en *. Denne<br />
stjerne er et wildcard, der kan erstatte et hvilket som helst kartotek. For at dette fungerer, kræver det,<br />
at kartoteksfelterne i layoutområdet bliver kvalificeret med kartoteksnavnet.<br />
Det anbefales, at der altid indsættes kartoteksnavn!<br />
Det anbefales, at der ALTID indsættes kartoteksnavn i kartotekskolonnen, idet det kan blive svært, at<br />
overskue definitionsområder med mange rapportlinjer.<br />
Resultat af ovenstående rapportopstilling<br />
18000 Kabinet 1.250,20<br />
16000 Ram 520,40<br />
12000 Harddisk type 2 1.230,75<br />
14000 CD romdrev 50,10<br />
20000 Skærm 1.000,10<br />
226<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Layoutområdet<br />
Layoutområdet anvendes til beskrivelse af rapportens udseende eller layout.<br />
Beskrivelsen udføres ved at indsætte kartoteksfelter, ledetekster eller fritekster.<br />
Kartoteksfelter<br />
Kartoteksfelter kan indsættes med forskellige metoder.<br />
I denne lektion anvendes metoden CTRL+F2. Med denne metode skal cursoren først placeres i<br />
layoutområdet i den kolonne, hvor feltet skal starte. Når funktionstasten aktiveres, vælges først<br />
kartoteksnavn og derefter feltnavn, der så overføres til layoutområdet.<br />
C5 vers. 2012 -> Oprettelse af felt i layoutområde<br />
Body<br />
Bemærk!<br />
InvenTable<br />
Ved oprettelse af felter med CTRL+F2, føres kartoteksnavnet med over i feltet i layoutområdet. I<br />
ovenstående eksempel står der ’ItemName1’ i feltet, ved rigtig overførsel med CTRL+F2 kommer der<br />
til at stå ’InvenTable.ItemName1’.<br />
Når felter foranstilles med kartoteksnavn, siges det, at feltet er kvalificeret.<br />
C5 vers. -> 4.1 Oprettelse af felt i layoutområde<br />
Body<br />
LagKart<br />
Cursor placeres, hvor feltet skal starte.<br />
ItemNumber ItemName1<br />
Vælg<br />
kartotek<br />
Ctrl F2<br />
Vælg felt<br />
Cursor placeres, hvor feltet skal starte.<br />
VareNummer VareNavn1<br />
Vælg<br />
kartotek<br />
Ctrl F2<br />
Vælg felt<br />
227<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Bemærk!<br />
Ved oprettelse af felter med CTRL+F2, føres kartoteksnavnet med over i feltet i layoutområdet. I<br />
ovenstående eksempel står der ’VareNavn1’ i feltet, ved rigtig overførsel med CTRL+F2 kommer der<br />
til at stå ’LagerKart.VareNavn1’.<br />
Når felter foranstilles med kartoteksnavn, siges det, at feltet er kvalificeret.<br />
Flere bodylinjer i samme rapport<br />
Der kan være flere body linjer til samme kartotek. Ovenstående eksempel kunne f.eks. ændres, så<br />
felterne står under hinanden.<br />
C5 vers. 2012 -> Flere Body linjer i samme rapport<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
Body<br />
Body<br />
Body<br />
Body<br />
InvenTable<br />
InvenTable<br />
InvenTable<br />
InvenTable<br />
C5 vers. -> 4.1 Flere Body linjer i samme rapport<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
Body<br />
Body<br />
Body<br />
Body<br />
LagKart<br />
LagKart<br />
LagKart<br />
LagKart<br />
I layoutet er der yderligere indsat en ekstra bodylinje uden felter. Denne vil medføre, at der udskrives<br />
en blank linje.<br />
Hver gang OUTPUT kommandoen eksekveres i søgeløkken, sendes der data til definitionsområdet,<br />
hvor samtlige bodylinjer med samme kartoteksnavn bliver udskrevet. Det betyder, at varerne kommer<br />
til at stå under hinanden med en blank linje mellem hver vare.<br />
Bodylinjerne udskrives i den rækkefølge, de har i definitionsområdet.<br />
C5 vers. 2012 -> Flere Body linjer pr. post<br />
18000<br />
Kabinet<br />
1.250,20<br />
16000<br />
Ram<br />
520,40<br />
12000<br />
Harddisk type 2<br />
1.230,75<br />
ItemNumber<br />
ItemName1<br />
CostPrice<br />
VareNummer<br />
VareNavn1<br />
KostPris<br />
228<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
I eksemplet udskrives ItemNumber, ItemName1 og CostPrice på hver sin linje. Hver vare adskilles med<br />
en blank linje.<br />
C5 vers. -> 4.1 Flere Body linjer pr. post<br />
18000<br />
Kabinet<br />
1.250,20<br />
16000<br />
Ram<br />
520,40<br />
12000<br />
Harddisk type 2<br />
1.230,75<br />
I eksemplet udskrives VareNummer, VareNavn1 og KostPris på hver sin linje. Hver vare adskilles med en<br />
blank linje.<br />
Fritekst og ledetekster<br />
Der findes forskellige muligheder for indtastning af tekst i layoutområdet.<br />
Fritekst<br />
Fritekst er tekst, der blot indtastes på linjerne, hvor der er plads til det. Det kan være bogstaver, tal og<br />
andre tegn, der findes på tastaturet.<br />
Teksten behøver ikke at stå i anførselstegn, sådan som det er nødvendigt, når PRINT kommandoen<br />
skriver tekst på skærmen.<br />
Teksten kan være forklaringer eller som ledetekster. Ledetekster kan dog også hentes direkte fra<br />
opsætningen i databasen.<br />
Ledetekster<br />
I stedet for selv at finde på ledetekster til felter, kan disse hentes direkte fra kartoteksdefinitionen med<br />
funktionen ALT+F2 Opret ledetekst.<br />
Når funktionen vælges, åbner skærmbilledet med overskriften ’Opret ledetekst’. I skærmbilledet er det<br />
muligt, at justere ledetekstens udseende ved at udfylde nogle felter som vist i nedenstående skema:<br />
229<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Felter i ’Opret ledetekst’<br />
Felter Værdier<br />
Kartotek Navn på kartotek hvorfra ledetekst skal hentes.<br />
Åbnes med ALT+H, hvis det ikke vises ved åbning.<br />
Felt Felt hvorfra der skal hentes ledetekst. Åbnes med ALT+H.<br />
Feltets bredde Antal tegn ledeteksten skal fylde i rapporten.<br />
Overskrift/<br />
ledetekst<br />
Tekstens justering Vælg mellem:<br />
Ret til store<br />
bogstaver<br />
Ved bredder større end teksten udfyldes automatisk med punkter og<br />
kolon.<br />
Der kan vælges, om det er en kolonne overskrift eller en ledetekst.<br />
Forskellen er ”....: ” ved ledetekst.<br />
Venstrestillet, Højrestillet eller Centreret.<br />
Skal ledeteksten vises med store eller små bogstaver.<br />
Vælg mellem: Nej eller Ja.<br />
Feltbetingelse Ved at taste ENTER åbnes en editorboks, hvori der kan indtastes<br />
betingelser for, om ledeteksten skal udskrives eller ej.<br />
Der kan være fordele ved at anvende ledetekster fra kartotekerne, idet teksterne således altid er ens fra<br />
rapport til rapport.<br />
C5 vers. 2012 -> Opsætning af ledetekst og fritekst<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
Body<br />
Body<br />
Body<br />
Body<br />
InvenTable<br />
InvenTable<br />
InvenTable<br />
InvenTable<br />
VARENUMMER........: ItemNumber<br />
VARENAVN..........: ItemName1<br />
KOSTPRIS..........: CostPrice<br />
---------------------------------------<br />
ALT+F2<br />
Opret ledetekst<br />
230<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. -> 4.1 Opsætning af ledetekst og fritekst<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
Body<br />
Body<br />
Body<br />
Body<br />
LagKart<br />
LagKart<br />
LagKart<br />
LagKart<br />
VARENUMMER........: VareNummer<br />
VARENAVN..........: VareNavn1<br />
KOSTPRIS..........: KostPris<br />
---------------------------------------<br />
ALT+F2<br />
Opret ledetekst<br />
I dette eksempel er der oprettet ledetekster foran hver af de tre felter. Ledeteksterne udskrives med<br />
store bogstaver.<br />
Den stiplede linje er et eksempel på fritekst. Linjen er tekst, idet den blot er dannet af bindestreger. Det<br />
kunne være * eller et hvilket som helst andet tegn.<br />
Eksempel på rapport med ledetekster og fritekster<br />
VARENUMMER........: 18000<br />
VARENAVN..........: Kabinet<br />
KOSTPRIS..........: 1.250,20<br />
---------------------------------------<br />
VARENUMMER........: 16000<br />
VARENAVN..........: Ram<br />
KOSTPRIS..........: 520,40<br />
---------------------------------------<br />
VARENUMMER........: 12000<br />
VARENAVN..........: Harddisk type 2<br />
KOSTPRIS..........: 1.230,75<br />
---------------------------------------<br />
231<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Rapport definition, grundlæggende<br />
Opgave 1: Rapport-Layout til ’Udlånsliste’<br />
Formål med opgaven<br />
At oprette en Bodylinje i layoutet til rapporten ’Udlånsliste’.<br />
Beskrivelse<br />
I rapporten ’Udlånsliste’ fra forrige opgave, skal der oprettes en enkelt Bodylinje med felterne<br />
DebitorKto, UdlånsNr, ReturDato og Forsikringssum.<br />
1 Vælg rapporten ’Udlånsliste’ fra forrige opgave.<br />
Forløb √<br />
2 Opret en enkelt Bodylinje til kartoteket UDLUdlånsKart og indsæt felterne<br />
DebitorKto, UdlånsNr, ReturDato og ForsikringsSum.<br />
3 Go<strong>dk</strong>end rapporten.<br />
4 Afprøv rapporten med forskellige afgrænsninger.<br />
232<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
3. Linjetyper uden kartoteker<br />
Mål med lektionen<br />
Formålet med denne lektion er at give deltagerne overblik over linjetyper, der ikke anvender<br />
kartotekskolonnen.<br />
Efter lektionen skal kursisterne kunne:<br />
Anvende linjetyperne Page Header, Page Footer, Prolog og Epilog.<br />
Linjetyper generelt<br />
Ved at betragte en standardrapport på et stykke papir kan det ses, at den har forskellige grupper af<br />
indhold fordelt på papiret.<br />
Grundlæggende indeholder en rapport altid data fra databasen. Derudover kan der f.eks. være side<br />
hovede og side fod samt flere andre områder eller linjer med data.<br />
Grupper med informationer på papiret<br />
I rapportgeneratoren skelnes der mellem de forskellige grupper af indhold, idet disse<br />
gruppeinddelinger dannes i området rapport-definition vha. forskellige typer af linjer.<br />
Den første kolonne i definitions området anvendes til at definere de forskellige linjetyper, der kan være<br />
på rapporten.<br />
Kolonnen linjetyper i rapport-definition<br />
Linje<br />
Typer<br />
Side hovede<br />
Rapportens ’krop’ i form af data<br />
Side fod<br />
Rapport-definition<br />
233<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Linjetyper<br />
Linjetyperne vælges ved at placere cursoren i første kolonne.<br />
Tastes der ENTER, vises der en liste over mulige linjetyper. Den type, der vælges, overføres til kolonnen.<br />
Grupper af linjetyper<br />
Linjetyperne kan inddeles i følgende tre grupper:<br />
Linjetyper UDEN kartoteker<br />
Type Navn Anvendelse<br />
PgHd Page Header Overskriftslinje på hver side i rapporten<br />
PgFt Page Footer Underskriftslinje på hver side i rapporten<br />
Prol Prolog Indledende bemærkninger i starten af rapporten<br />
Epil Epilog Afsluttende bemærkninger i slutningen af rapporten<br />
Linjetyper MED kartoteker<br />
Type Navn Anvendelse<br />
GrHd Group Header Overskriftslinje til hver gruppe af poster i kartotek<br />
Body Body Linje med værdier fra OUTPUT kartoteket<br />
GrFt Page Header Underskriftslinje til hver gruppe af poster<br />
Subt Subtotal Kun til tekst der udskrives foran automatiske totaler<br />
Linjetype med speciel styring<br />
Type Navn Anvendelse<br />
Ctrl Control Linje der styres med specielle Control macroer<br />
Denne lektion behandler kun linjetyper uden kartoteker.<br />
Linjetypen Page header<br />
Linjetypen Page Header anvendes til at definere de linjer, der øverst på hver side udgør sidens hoved.<br />
Placering af Page Header på papiret<br />
Page Header<br />
Body linjer<br />
Rapportens ’krop’ i form af data<br />
234<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Sidens hoved er oftest almindelig tekst, der udskrives i toppen af hver side på rapporten. Det kan f.eks.<br />
være kolonneoverskrifter til Body linjer eller forskellige typer af felter. Teksterne kan indsættes som<br />
almindelig tekst uden citationstegn.<br />
C5 vers. 2012 -> Eksempel på anvendelse af Page Header<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
PgHd<br />
Varenummer Navn KostPris<br />
Body InvenTable ItemNumber ItemName1<br />
CostPrice<br />
C5 vers. -> 4.1 Eksempel på anvendelse af Page Header<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
PgHd<br />
Body LagKart<br />
Resultat<br />
Varenummer Navn Kostpris<br />
VareNummer VareNavn1<br />
KostPris<br />
VareNummer Navn KostPris<br />
18000 Kabinet 1.250,20<br />
16000 Ram 520,40<br />
12000 Harddisk type 2 1.230,75<br />
Flere linjer<br />
Der kan udmærket være flere Page Header linjer på en side, hvis der er behov for det. Blanke linjer<br />
opnås ved at indsætte linjer uden tekst eller felter i layoutområdet.<br />
235<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. 2012 -> Eksempel med flere Page Header linjer<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
PgHd<br />
PgHd<br />
PgHd<br />
PgHd<br />
Body<br />
Body<br />
Body<br />
InvenTable<br />
InvenTable<br />
InvenTable<br />
Vareliste med kostpriser<br />
C5 vers. -> 4.1 Eksempel med flere Page Header linjer<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
PgHd<br />
PgHd<br />
PgHd<br />
PgHd<br />
Body<br />
Body<br />
Body<br />
Resultat<br />
LagKart<br />
LagKart<br />
LagKart<br />
Vareliste med kostpriser<br />
Varenummer Navn Kostpris<br />
----------- ------------------- ---------<br />
ItemNumber ItemName1<br />
CostPrice<br />
VareNavn1 ItemName2<br />
mmer<br />
Vareliste med kostpriser<br />
Varenummer Navn Kostpris<br />
----------- ------------------- ---------<br />
VareNummer VareNavn1<br />
KostPris<br />
VareNavn1 VareNavn2<br />
mmer<br />
VareNummer Navn KostPris<br />
----------- -------------------- --------<br />
18000 Kabinet 1.250,20<br />
Plastic grå<br />
16000 Ram 520,40<br />
8MB<br />
12000 Harddisk type 2 1.230,75<br />
500MB<br />
I ovenstående eksempel er der indsat en blank linje i Page Header og en i Body.<br />
Rækkefølge<br />
Page Header<br />
Hver gang der startes på en ny side i rapporten, udføres alle Page Header linjer automatisk. Linjerne<br />
udføres i den rækkefølge, de har i området rapport-definition.<br />
Body<br />
Bodylinjerne udføres ikke automatisk, men derimod hver gang kommandoen OUTPUT eksekveres i<br />
XAL-koden.<br />
236<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Linjetypen Page footer<br />
Linjetypen Page footer anvendes til at definere de linjer, der nederst på hver side udgør sidens fod.<br />
Placering af Page Footer på papiret<br />
Sidens fod er oftest almindelig tekst, der udskrives i bunden af hver side på rapporten. Det kan f.eks.<br />
være en forklaring til forskellige forekomster i bodylinjerne.<br />
C5 vers. 2012 -> Eksempel på anvendelse af Page Footer<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
PgHd<br />
Body<br />
PgFt<br />
InvenTable<br />
C5 vers. -> 4.1 Eksempel på anvendelse af Page Footer<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
PgHd<br />
Body<br />
PgFt<br />
Resultat<br />
LagKart<br />
Page Header<br />
Body linjer<br />
Rapportens ’krop’ i form af data<br />
Page Footer<br />
Varenummer Navn Kostpris<br />
ItemNumber ItemName1 CostPrice<br />
VareNavn1 Varetyper på listen: Vare, Stykliste, Ydelse<br />
mmer<br />
Varenummer Navn Kostpris<br />
VareNummer VareNavn1 KostPris<br />
VareNavn1 Varetyper på listen: Vare, Stykliste, Ydelse<br />
mmer<br />
Varenummer Navn Kostpris<br />
237<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
18000 Kabinet 1.250,20<br />
16000 Ram 520,40<br />
12000 Harddisk type 2 1.230,75<br />
Varetyper på listen: Vare, Stykliste, Ydelse<br />
Flere linjer<br />
Der kan udmærket være flere Page Footer linjer på en side, hvis der er behov for det. Blanke linjer<br />
opnås ved at indsætte linjer uden tekst eller felter i layoutområdet.<br />
C5 vers. 2012 -> Eksempel med flere Page Footer linjer<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
PgHd<br />
PgHd<br />
PgHd<br />
PgHd<br />
Body<br />
PgFt<br />
PgFt<br />
PgFt<br />
InvenTable<br />
Vareliste med kostpriser<br />
C5 vers. -> 4.1 Eksempel med flere Page Footer linjer<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
PgHd<br />
PgHd<br />
PgHd<br />
PgHd<br />
Body<br />
PgFt<br />
PgFt<br />
PgFt<br />
Resultat<br />
LagKart<br />
Vareliste med kostpriser<br />
Varenummer Navn Kostpris<br />
----------- ------------------- ---------<br />
ItemNumber ItemName1 CostPrice<br />
VareNavn1<br />
Listen mmer indeholder varetyperne: Vare<br />
Stykliste<br />
Ydelse<br />
Vareliste med kostpriser<br />
Varenummer Navn Kostpris<br />
----------- ------------------- ---------<br />
VareNummer VareNavn1 KostPris<br />
VareNavn1<br />
Listen mmer indeholder varetyperne: Vare<br />
Stykliste<br />
Ydelse<br />
Varenummer Navn Kostpris<br />
---------- -------------------- --------<br />
18000 Kabinet 1.250,20<br />
16000 Ram 520,40<br />
12000 Harddisk type 2 1.230,75<br />
Listen indeholder varetyperne: Vare<br />
Stykliste<br />
Ydelse<br />
I ovenstående eksempel er der indsat en blank linje i Page Header.<br />
Rækkefølge<br />
Page Header<br />
238<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Hver gang der startes på en ny side i rapporten, udføres alle Page Header linjer automatisk. Linjerne<br />
udføres i den rækkefølge de har i området rapport-definition.<br />
Body<br />
Bodylinjerne udføres ikke automatisk, men derimod hver gang kommandoen OUTPUT eksekveres i<br />
XAL-koden.<br />
Page Footer<br />
Hver gang en side afsluttes udføres alle Pager Footer linjer automatisk. Linjerne udføres i den<br />
rækkefølge, de har i området rapport-definition.<br />
Bemærk! Linjetyperne kan godt stå blandet i rapport-definition, men den aktuelle linjetype udføres<br />
altid i rækkefølge fra oven og nedefter.<br />
Linjetypen Prolog<br />
Linjetypen Prolog anvendes til at definere linjer, der kun udskrives én gang i toppen af hele rapporten<br />
lige før linjer af typen Page Header.<br />
Placering af Prolog på papiret<br />
Prolog linjer anvendes f.eks. som overskrift eller indledende bemærkning til den samlede rapport.<br />
Bemærkninger i form af tekst indsættes som almindelig tekst uden citationstegn. Der kan desuden<br />
indgå felter af forskellig art i Prolog linjerne. Der henvises til lektionen om felter.<br />
C5 vers. 2012 -> Eksempel på anvendelse af Prolog<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
Prol<br />
Prol<br />
PgHd<br />
Body<br />
InvenTable<br />
C5 vers. -> 4.1 Eksempel på anvendelse af Prolog<br />
Prolog<br />
Page Header<br />
Body linjer<br />
Rapportens ’krop’ i form af data<br />
*** ANVENDES TIL KONTROL AF KOSTPRISER ***<br />
Varenummer Navn Kostpris<br />
ItemNumber ItemName1<br />
CostPrice<br />
239<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
Prol<br />
Prol<br />
PgHd<br />
Body<br />
Resultat<br />
LagKart<br />
*** ANVENDES TIL KONTROL AF KOSTPRISER ***<br />
Varenummer Navn Kostpris<br />
VareNummer VareNavn1<br />
KostPris<br />
*** ANVENDES TIL KONTROL AF KOSTPRISER ***<br />
Varenummer Navn Kostpris<br />
18000 Kabinet 1.250,20<br />
16000 Ram 520,40<br />
12000 Harddisk type 2 1.230,75<br />
Linjetypen Epilog<br />
Linjetypen Epilog anvendes til at definere linjer, der kun udskrives én gang som afslutning på hele<br />
rapporten, lige før en evt. Page Footer på sidste side.<br />
Placering af Epilog på papiret<br />
Epilog linjer anvendes til afsluttende bemærkninger til den samlede rapport. Bemærkninger indsættes<br />
som almindelig tekst uden citationstegn.<br />
C5 vers. 2012 -> Eksempel på anvendelse af Epilog<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
Page Header<br />
Body linjer<br />
Rapportens ’krop’ i form af data<br />
Epilog<br />
Page Footer<br />
240<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
PgHd<br />
Body<br />
PgFt<br />
Pgft<br />
Epil<br />
Epil<br />
InvenTable<br />
C5 vers. -> 4.1 Eksempel på anvendelse af Epilog<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
PgHd<br />
Body<br />
PgFt<br />
Pgft<br />
Epil<br />
Epil<br />
Resultat<br />
LagKart<br />
Varenummer Navn Kostpris<br />
18000 Kabinet 1.250,20<br />
16000 Ram 520,40<br />
Varenummer Navn Kostpris<br />
ItemNumber ItemName1<br />
CostPrice<br />
Varetyper på listen: Vare, Stykliste, Ydelse<br />
*** KONTROLLERET AF:_______DATO:_______***<br />
Varenummer Navn Kostpris<br />
VareNummer VareNavn1<br />
KostPris<br />
Varetyper på listen: Vare, Stykliste, Ydelse<br />
*** KONTROLLERET AF:_______DATO:_______***<br />
*** KONTROLLERET AF:_______DATO:_______ ***<br />
Varetyper på listen: Vare, Stykliste, Ydelse<br />
Tegning af streger og kasser<br />
Streger og kasser tegnes i layoutområdet med funktionen ALT+T.<br />
Funktion har tre virkemåder, afhængigt hvor mange gange den aktiveres.<br />
1. gang Enkelt streg<br />
2. gang Dobbelt streg<br />
3. gang Viskelæder<br />
Flyttes cursoren følger stregen med i alle retninger.<br />
Funktionen afsluttes med RETURN/ENTER , F3 eller ESC.<br />
Der kan tegnes streger og kasser i og på tværs af alle linjetyper. Nemmest er det at tegne lukkede<br />
kasser inden for samme linjetype.<br />
Tegning på tværs af flere linjetyper kan give problemer med sammenhæng, og linjer som ikke hænger<br />
helt sammen. Dette kan dog løses, men kræver kendskab til kontrol macroer og flere andre linjetyper<br />
end de der er gennemgået i denne lektion.<br />
C5 vers. 2012 -> Eksempel på tegning af streger<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
PgHd<br />
PgHd<br />
PgHd<br />
Body<br />
Inventable<br />
Varenummer<br />
Navn<br />
Kostpris<br />
ItemNumber ItemName1<br />
CostPrice<br />
241<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
PgFt<br />
Epil<br />
Epil<br />
Epil<br />
C5 vers. -> 4.1 Eksempel på tegning af streger<br />
¨¨¨¨¨¨¨¨¨¨¨<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
PgHd<br />
PgHd<br />
PgHd<br />
Body<br />
PgFt<br />
Epil<br />
Epil<br />
Epil<br />
Resultat<br />
Varenummer<br />
LagKart<br />
Varetyper på listen: Vare, Stykliste, Ydelse<br />
*** KONTROLLERET AF: DATO: ***<br />
VareNummer VareNavn1<br />
KostPris<br />
Varetyper på listen: Vare, Stykliste, Ydelse<br />
*** KONTROLLERET AF: DATO: ***<br />
18000 Kabinet 1.250,20<br />
16000 Ram 520,40<br />
12000 Harddisk type 2 1.230,75<br />
*** KONTROLLERET AF: DATO: ***<br />
Varetyper på listen: Vare, Stykliste, Ydelse<br />
I dette eksempel er der anvendt enkeltstreg rundt om overskrifterne i Page Header og dobbelt streg i<br />
Epilog til underskrift og dato.<br />
Sideskift<br />
Sideskift udføres i layoutområdet med funktionen ALT+S, men kan også indsættes fra lokalmenuen<br />
under Layout.<br />
Indsatte sideskift ses med tegnet ¨¨¨¨¨¨¨¨¨¨¨ og fylder hele linjen.<br />
C5 vers. 2012 -> Eksempel på anvendelse sideskift i Prolog<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
Prol<br />
Prol<br />
Prol<br />
Prol<br />
PgHd<br />
Body<br />
Navn<br />
InvenTable<br />
Varenummer<br />
Navn<br />
Kostpris<br />
Kostpris<br />
*******************************************<br />
* KONTROL AF KOSTPRISER *<br />
*******************************************<br />
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨<br />
¨ Varenummer Navn Kostpris<br />
ItemNumber ItemName1<br />
CostPrice<br />
242<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. -> 4.1 Eksempel på anvendelse sideskift i Prolog<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
Prol<br />
Prol<br />
Prol<br />
Prol<br />
PgHd<br />
Body LagKart<br />
Resultat første side<br />
*******************************************<br />
* KONTROL AF KOSTPRISER *<br />
*******************************************<br />
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨<br />
¨<br />
Varenummer Navn Kostpris<br />
VareNummer VareNavn1<br />
KostPris<br />
*******************************************<br />
* KONTROL AF KOSTPRISER *<br />
*******************************************<br />
Resultat efterfølgende sider<br />
Varenummer Navn Kostpris<br />
18000 Kabinet 1.250,20<br />
16000 Ram 520,40<br />
12000 Harddisk type 2 1.230,75<br />
Bemærk! I ovenstående eksempel findes der Prolog og Page Header linjer, og resultatet bliver som<br />
vist. Hvis der også tilføjes Page Footer linjer, resulterer det i at både Page Header og Page Footer<br />
udskrives på Prolog siden.<br />
243<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Linjetyper uden kartotek<br />
Opgave 1: Page header og -footer i ’Udlånsliste’<br />
Formål med opgaven<br />
At indsætte Page header og Page footer i rapporten ’Udlånsliste’.<br />
Beskrivelse<br />
Der skal indsættes Page header og Page footer linjer i rapporten ’Udlånsliste’ fra forrige opgave.<br />
Page header linjerne anvendes til rapportens navn og overskrifter over felterne.<br />
Page footer linjerne anvendes til en tekst om hvordan rapporten er sorteret.<br />
1 Vælg rapporten ’Udlånsliste’ fra forrige opgave<br />
2 Indsæt Page header linjer som følger:<br />
Teksten ’Udlånsliste’ der er rapportens navn<br />
Forløb √<br />
Tegnet streg under rapportens navn, lige så lang som felterne til sammen<br />
Overskrifter til hvert felt f.eks. Konto, Udlån, ReturDato og Forsikringssum.<br />
Højre- og venstrestil overskrifterne så de passer til felterne<br />
Tegnet streg under hver overskrift, men i felternes længde<br />
3 Indsæt Page footer linjer som følger:<br />
Blank linje<br />
Teksten: Rapporten er sorteret pr. debitor pr. udlånsnummer!<br />
4 Go<strong>dk</strong>end og afprøv rapporten.<br />
244<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgave 2: Prolog og Epilog i ’Udlånsliste’<br />
Formål med opgaven<br />
At indsætte linjer af typen Prolog og Epilog i rapporten ’Udlånsliste’.<br />
Beskrivelse<br />
Der skal indsættes Prolog og Epilog linjer i rapporten ’Udlånsliste’ fra forrige opgave.<br />
Prolog linjerne skal indeholde informationer om rapportens navn, anvendelse og sortering.<br />
Epilog linjerne skal indeholde en besked om feltet ReturDato.<br />
1 Vælg rapporten ’Udlånsliste’ fra forrige opgave.<br />
2 Fjern Page footer linjerne fra rapporten, hvis der er nogen.<br />
3 Indsæt Prolog linjer som følger:<br />
Blank linje til ramme<br />
Teksten: Rapport .....: Udlånsliste<br />
Teksten: Anvendelse: Kontrol af udlånsordrer pr. debitor<br />
Teksten: Sortering ...: Pr. debitor pr. udlånsordre<br />
Blank linje til ramme<br />
Sideskrift<br />
Forløb √<br />
Tegn en ramme der omkranser de tre linjer og tegn en lodret streg efter<br />
ledeteksterne. Den lodrette streg skal herefter opdele rammen i to felter.<br />
4 Indsæt Epilog linjer som følger:<br />
Blank linje<br />
Teksten: Bemærk! ReturDato er den forventede returdato!<br />
5 Go<strong>dk</strong>end og afprøv rapporten.<br />
245<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
4. Rapport definition felter i layout<br />
Mål med lektionen<br />
Formålet med denne lektion er, at give deltagerne indsigt i de forskellige typer af værdier, der kan<br />
indsættes i felter i layoutområdet. Desuden gives anvisning i de forskellige metoder, der findes til<br />
oprettelse af felter.<br />
Efter lektionen skal kursisterne kunne:<br />
Oprette og formatere felter i rapportlayoutet<br />
Oprette kartoteksfelter, felter med regneudtryk, tekst, macroer, variabler og funktioner.<br />
Felter generelt<br />
Udtrykket ’felter’ henviser ofte til værdier fra kartoteker. I rapportgeneratorens layoutområde anvendes<br />
tastekombinationen CTRL+F2 da også kun til indsættelse af felter direkte fra kartoteker.<br />
C5 vers. 2012 -> Felter i rapport layout kan være mange ting<br />
ItemNumber<br />
VareNavn1<br />
mmer<br />
Felter betragtes oftest som<br />
værende fra kartoteker, men kan<br />
være meget andet<br />
C5 vers. -> 4.1 Felter i rapport layout kan være mange ting<br />
VareNummer<br />
VareNavn1<br />
mmer<br />
ItemName1 CostPrice<br />
VareNavn1 KostPris<br />
Felter betragtes oftest som<br />
værende fra kartoteker, men kan<br />
være meget andet<br />
Skemaet herunder viser forskellige værdier der kan indsættes i rapportfelter.<br />
246<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Indhold i rapportfelter<br />
Feltnavne fra kartoteker<br />
Tekst<br />
Variabler<br />
Macroer<br />
Funktioner<br />
RegneUdtryk<br />
Der findes to metoder til oprettelse af felter, men kun den ene anvendes til oprettelse af ovenstående<br />
feltindhold. Metoderne beskrives i næste afsnit.<br />
Oprettelsesmetoder<br />
Der findes to metoder til oprettelse af felter:<br />
Metoder til oprettelse af felter<br />
Metode Anvendelse<br />
Tastekombinationen<br />
CTRL+F2<br />
Indsættelse af felt direkte fra kartotek. Der kan kun<br />
indsættes kartoteksfelter.<br />
Funktionen Opret felt F2 Indsættelse af felt via menu. Der kan både indsættes<br />
kartoteksfelter og alle andre typer værdier f.eks. macroer<br />
og variabler.<br />
Tastekombinationen CTRL+F2<br />
CTRL+F2 anvendes kun til indsættelse af felter direkte fra kartoteker.<br />
I det øjeblik funktionen aktiveres, åbnes en liste over alle kartoteker. Ud fra et valgt kartotek, kan der<br />
åbnes en ny liste over felter.<br />
I feltlisten vælges et felt, der overføres til rapportlayoutet.<br />
CTRL+F2 kan således kun anvendes til indsættelse af kartoteksfelter.<br />
I alle andre situationer anvendes funktionen Opret Felt.<br />
Funktionen Opret Felt - F2<br />
Funktionen Opret felt giver flere muligheder for at påvirke selve feltet allerede under oprettelsen.<br />
Funktionen kan startes på lokalmenuen eller via funktionstasten F2. Se huskeliste: Opret felt.<br />
247<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Menuen Opret felt<br />
Menupunkt Anvendelse<br />
Feltudtryk Indsættelse af alle typer udtryk f.eks. macroer, tekst,<br />
variabler o.a.<br />
Feltbetingelse Kode med betingelse der afgør om feltværdien skal<br />
udskrives<br />
Format Viser feltets format, der evt. kan ændres<br />
Subtotal Opstilling af automatiske totaler<br />
Når der oprettes nye felter, er det ikke nødvendigt at gå ind i alle menupunkter.<br />
I denne lektion behandles kun ’Feltudtryk’.<br />
Menuen anvendes også med funktionen ’Ret felt’ F6, når der skal ændres i eksisterende felter.<br />
Feltudtryk<br />
I menupunktet Feltudtryk åbnes et vindue i form af en editorboks.<br />
I boksen skrives XAL kode i form af tidligere nævnte mulige typer af feltindhold. Resultatet eller<br />
værdien af dette udtryk udskrives på rapporten.<br />
Oprettelse af nyt felt med F2<br />
I editorboksen kan de samme funktionstaster anvendes som i den normale XAL editor. Der kan dog<br />
ikke anvendes kommandoer som f.eks. IF-THEN-ELSE, SEARCH osv.<br />
De forskellige former for feltudtryk, der kan indtastes, behandles efterfølgende i egne afsnit.<br />
Formattering<br />
F2<br />
Cursor<br />
Feltudtryk<br />
Feltbetingelse<br />
Format<br />
Subtotaler<br />
I menupunktet Formattering gives mulighed for at ændre felters opsætning, så deres værdier skrives på<br />
anden vis end standarden.<br />
I C5 findes der fem felttyper, der opsættes forskelligt afhængigt af type.<br />
Editorboks til indtastning<br />
af feltindhold<br />
248<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Felttyper<br />
Heltal Kommatal Tekst Dato Fasttekst<br />
Feltopsætning kan udføres, når der oprettes nye felter med F2, og når der rettes i felter med F6. Når<br />
menupunktet Formattering vælges, vises der en dialogboks til justering af det aktuelle felt.<br />
Dialogboksen har forskelligt indhold afhængigt af felttype.<br />
Nedenstående skema indeholder en samlet oversigt over alle justeringsmuligheder. De første fem<br />
kolonner viser hvad, der kan justeres på de enkelte felter.<br />
Mulige justeringer på rapportfelter<br />
Felttype Felt i opsætning Muligheder<br />
H K T D F Feltnavn Navn på felt (kan ikke ændres)<br />
H K T D F Feltets bredde Antal tegn<br />
H K T D F Feltets justering Venstrestillet, Højrestillet, Centreret<br />
T F Store bogstaver Nej eller Ja<br />
D Rækkefølge (DMÅ) DMÅ (Dag, Måned, ÅR)<br />
D 2 seperatorer / - , mellemrum #<br />
D År skrives som Skrives ej, 2 cifre, 4 cifre<br />
D Måned skrives som Skrives ej, 1/ 2 cifre, altid 2, fuldt navn, 3 bogstaver<br />
D Dag skrives som Skrives ej, 1 eller 2 cifre, altid 2 cifre<br />
H K Hvordan vises minus Ej fortegn, -NNNN,DD, NNNN,DD-, (NNNN,DD)<br />
H K Vend fortegn Nej eller JA<br />
H K Vis tallet 0 (nul) Nej eller Ja<br />
H K Negativ forskydning Antal tegn<br />
K 1000 seperator Ingen, Komma, Punktum, Mellemrum<br />
K Decimal tegn Komma (,) eller Punktum (.)<br />
K Antal decimaler Antal<br />
Mulige værdier i feltudtryk<br />
Kartoteksfelter<br />
Det mest anvendte feltudtryk består af feltnavne fra kartoteker.<br />
Feltnavne angives med eller uden kvalifikation som vist i de næste afsnit.<br />
Bemærk! Kartoteker, der indsættes i kartotekskolonnen eller anvendes til kvalifikation af felter, skal<br />
altid indgå i XAL kørslen. Hvis dette ikke er tilfældet, skal der anvendes direkte opslag.<br />
249<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Kartoteker<br />
Kartoteksfelter uden kvalifikation<br />
Angives feltnavne uden kvalifikation, står de alene. Felterne SKAL tilhøre kartoteket i<br />
kartotekskolonnen.<br />
Syntaks for feltnavn uden kvalifikation<br />
<br />
C5 vers. 2012 -> Felt uden kvalifikation<br />
Body<br />
InvenTable<br />
I eksemplet tilhører ItemNumber-feltet kartoteket InvenTable. På samme måde kan de øvrige felter i<br />
lagerkartoteket angives.<br />
C5 vers. -> 4.1 Felt uden kvalifikation<br />
Body<br />
LagKart<br />
ItemNumber<br />
VareNavn1<br />
mmer<br />
Feltet tilhører kartoteket<br />
VareNummer<br />
VareNavn1<br />
mmer<br />
Feltet tilhører kartoteket<br />
Kartoteker i kartotekskolonnen, eller i<br />
kvalifikation af felter, skal altid indgå i en<br />
SEARCH løkke (eller en QT)<br />
I eksemplet tilhører VareNummer-feltet kartoteket LagKart. På samme måde kan de øvrige felter i<br />
lagerkartoteket angives.<br />
250<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Kartoteksfelter med kvalifikation<br />
Felter, der ikke tilhører kartoteket i kartotekskolonnen, skal kvalificeres.<br />
Kvalifikation udføres ved, at feltnavnet foranstilles med navnet på det kartotek, feltet tilhører. De to<br />
navne adskilles med et punktum.<br />
Syntaks for kvalifikation af feltnavn<br />
.<br />
Syntaksen består af kartoteksnavn og feltnavn adskilt med punktum.<br />
C5 vers. 2012 -> Felt med kvalifikation<br />
Body<br />
InvenTrans<br />
I dette eksempel findes ItemName1-feltet ikke i det givne kartotek StockTrans.<br />
For at få fat i varenavnet, der befinder sig i lagerkartoteket, bliver det derfor kvalificeret med navnet på<br />
lagerkartoteket som flg. ’InvenTable.ItemName1’.<br />
Det forudsættes at både InvenTrans og InvenTable indgår i Rapport-XAL på en eller anden måde f.eks. i<br />
en søgeløkke.<br />
C5 vers. -> 4.1 Felt med kvalifikation<br />
Body<br />
LagPost<br />
Feltet tilhører ikke<br />
kartoteket, og skal<br />
kvalificeres<br />
Feltet tilhører ikke<br />
kartoteket, og skal<br />
kvalificeres<br />
InvenTable.ItemName1<br />
LagKart.VareNavn1<br />
I dette eksempel findes VareNavn-feltet ikke i det givne kartotek LagPost.<br />
251<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
For at få fat i varenavnet, der befinder sig i lagerkartoteket, bliver det derfor kvalificeret med navnet på<br />
lagerkartoteket som flg. ’LagKart.VareNavn1’.<br />
Det forudsættes at både LagPost og LagKart indgår i Rapport-XAL på en eller anden måde f.eks. i en<br />
søgeløkke.<br />
Hvornår skal der kvalificeres?<br />
Generelt er det en god idé altid at anvende kvalifikation, så der aldrig er tvivl om, hvilke kartoteker de<br />
forskellige felter tilhører.<br />
Linjetyper uden kartoteksnavn<br />
Anvendes kartoteksfelter på linjetyper uden navn i kartotekskolonnen, SKAL disse altid kvalificeres.<br />
Dette gælder linjetyperne Page Header og Page Footer, Prolog og Epilog samt Control.<br />
C5 vers. 2012 -> Kvalifikation af felt i linjetype uden kartoteksnavn<br />
PgHd<br />
PgHd<br />
Body<br />
PgFt<br />
InvenTable<br />
Varegruppe: InvenTable.Group<br />
C5 vers. -> 4.1 Kvalifikation af felt i linjetype uden kartoteksnavn<br />
PgHd<br />
PgHd<br />
Body<br />
PgFt<br />
LagKart<br />
Linjetypen har ikke<br />
kartotek. Feltet skal<br />
kvalificeres<br />
Linjetypen har ikke<br />
kartotek. Feltet skal<br />
kvalificeres<br />
ItemNumber<br />
Linjetyper med andet kartoteksnavn<br />
Varegruppe: LagKart.Gruppe<br />
VareNummer<br />
ItemName1<br />
VareNavn1<br />
Anvendes kartoteksfelter på linjetyper med et andet navn i kartotekskolonnen end det kartotek<br />
felterne tilhører, SKAL disse felter også kvalificeres.<br />
Dette gælder linjetyperne Body, Group Header og Group Footer samt Subtotal.<br />
C5 vers. 2012 -> Kvalifikation af felt i linjetype med andet kartoteksnavn<br />
252<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Body<br />
InvenTrans<br />
ItemName1-feltet tilhører et andet kartotek end det i kartotekskolonnen, hvorfor det skal kvalificeres<br />
som vist.<br />
C5 vers. -> 4.1 Kvalifikation af felt i linjetype med andet kartoteksnavn<br />
Body<br />
LagPost<br />
VareNavn1-feltet tilhører et andet kartotek end det i kartotekskolonnen, hvorfor det skal kvalificeres<br />
som vist.<br />
HUSK! Kartoteker, der anvendes til kvalifikation, skal altid indgå i XAL kørslen. Hvis dette ikke er<br />
tilfældet, skal der anvendes direkte opslag.<br />
Tekst<br />
Feltudtryk kan udmærket være ren tekst. Den skal blot skrives i anførselstegn.<br />
I eksemplet herunder består feltudtrykket af teksten ”Go<strong>dk</strong>endt af:”, hvor teksten er angivet i<br />
anførselstegn.<br />
Dette kunne f.eks. være en rapport over kostpriser, hvor en medarbejder skal gennemse rapporten og<br />
go<strong>dk</strong>ende hver enkelt kostpris. Go<strong>dk</strong>endelsen udføres ved at skrive initialer ud for hver kostpris.<br />
C5 vers. 2012 -> Eksempel på feltudtryk med tekst<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
PgHd<br />
PgHd<br />
Body<br />
InvenTable<br />
Linjetypen har andet<br />
kartotek. Feltet skal<br />
kvalificeres<br />
Linjetypen har andet<br />
kartotek. Feltet skal<br />
kvalificeres<br />
ItemNumber InvenTable.ItemName1<br />
VareNummer LagKart.VareNavn1<br />
Go<strong>dk</strong>endelse af kostpriser<br />
------------------------------------------<br />
- ItemNumber CostPrice ”Go<strong>dk</strong>endt af:”<br />
253<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. -> 4.1 Eksempel på feltudtryk med tekst<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
PgHd<br />
PgHd<br />
Body<br />
Resultat<br />
LagKart<br />
Go<strong>dk</strong>endelse af kostpriser<br />
------------------------------------------<br />
- VareNummer KostPris ”Go<strong>dk</strong>endt af:”<br />
Go<strong>dk</strong>endelse af kostpriser<br />
--------------------------------------------------------------<br />
1545 15,75 Go<strong>dk</strong>endt af:<br />
4711 202,50 Go<strong>dk</strong>endt af:<br />
4718 1,25 Go<strong>dk</strong>endt af:<br />
4850 225,75 Go<strong>dk</strong>endt af:<br />
Glemmes anførselstegnene, medfører det en syntaksfejl, idet systemet tror, at der er tale om to<br />
kartoteksfelter ’Go<strong>dk</strong>endt’ og ’af’, som jo ikke findes.<br />
Hvorfor anvende felter med tekst i stedet for tekster direkte i rapportlayoutet?<br />
Når tekster oprettes som felter, kan der indsættes betingelser, for hvornår teksten skal skrives ud. Se<br />
afsnittet ’Feltbetingelse’.<br />
254<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Variabler<br />
Der findes to former for variabler, der begge kan indsættes i feltudtryk. Egne variabler og<br />
systemvariabler.<br />
Det skal erindres, at variabelnavne altid skal foranstilles med &-tegnet. Det er den måde variabler<br />
genkendes på i forhold til andre nøgleord i XAL sproget.<br />
Dette gælder både egne variabler og systemvariabler.<br />
Egne variabler<br />
Egne variabler erklæres og vedligeholdes af en selv. De skal altid erklæres i toppen af XAL kørsler. Dette<br />
gælder også i rapport XAL.<br />
Egne variabler kan tildeles værdier direkte under erklæringen eller efterfølgende med SET<br />
kommandoen eller gennem en promptbox.<br />
Tildeling af værdier til variabler<br />
Metode Eksempel<br />
Direkte under<br />
erklæring<br />
INT &Fradrag = 100<br />
Med kommandoen SET INT &Fradrag<br />
SET &Fradrag = 100<br />
Gennem en promptbox INT &Fradrag<br />
PROMPT ”Fradrag ”,,,<br />
”Indtast fradrag: ” GET (&Fradrag)<br />
INPUT<br />
En variabels indhold kan til enhver tid udskrives på en rapport, hvis dens navn indsættes i et feltudtryk<br />
på en rapportlinje.<br />
Erklæring af variabel<br />
INT &Fradrag<br />
&Fradrag<br />
Bemærk at variabler altid skal erklæres, inden de kan indsættes i et feltudtryk.<br />
Hvis datasøgningen udføres i rapport XAL, erklæres variablerne der.<br />
255<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. 2012 -> Eksempel på anvendelse af egne variabler<br />
REAL &NyPris<br />
SEARCH InvenTable<br />
SET &NyPris = CostPrice * 1.10<br />
OUTPUT InvenTable<br />
END<br />
PgHd<br />
Body<br />
InvenTable<br />
Varenummer Gammel pris Ny pris<br />
ItemNumber CostPrice &NyPris<br />
Variablen &NyPris erklæres i toppen af XAL kørslen i editorboksen.<br />
Med SET kommandoen tildeles variablen en værdi i form af et regneudtryk, hvor CostPrice-feltet<br />
multipliceres med 1.10. Da tildelingen udføres inde i søgeløkken, udregnes der således en ny pris, for<br />
hver vare der udsøges.<br />
Idet variablen &NyPris er indsat i Body linjen, udskrives dens aktuelle værdi, hver gang Body linjen<br />
aktiveres af kommandoen OUTPUT i søgningen.<br />
C5 vers. -> 4.1 Eksempel på anvendelse af egne variabler<br />
REAL &NyPris<br />
SEARCH LagKart<br />
SET &NyPris = KostPris * 1.10<br />
OUTPUT LagKart<br />
END<br />
PgHd<br />
Body<br />
LagKart<br />
Varenummer Gammel pris Ny pris<br />
VareNummer KostPris &NyPris<br />
Variablen &NyPris erklæres i toppen af XAL kørslen i editorboksen.<br />
Med SET kommandoen tildeles variablen en værdi i form af et regneudtryk, hvor KostPris-feltet<br />
multipliceres med 1.10. Da tildelingen udføres inde i søgeløkken, udregnes der således en ny pris, for<br />
hver vare der udsøges.<br />
Idet variablen &NyPris er indsat i Body linjen, udskrives dens aktuelle værdi, hver gang Body linjen<br />
aktiveres af kommandoen OUTPUT i søgningen.<br />
Resultat<br />
VareNummer Gammel pris Ny pris<br />
1545 15,50 17,05<br />
4711 210,00 231,00<br />
4718 1,20 1,32<br />
4850 230,10 253,11<br />
Systemvariabler<br />
256<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Systemvariabler er variabler der i forvejen er defineret i C5<br />
Systemvariabler<br />
Skal ikke erklæres og vedligeholdes (udføres automatisk).<br />
Indholdet kan til enhver tid udskrives i rapporter.<br />
Foranstilles med & tegnet når de anvendes.<br />
Eksempler på systemvariabler<br />
Systemvariabel Forklaring<br />
&Page Indeholder til stadighed det sidenummer, der udskrives.<br />
&Line Indeholder det linjenummer, der skrives ud.<br />
&Report Indeholder navnet på den aktuelle rapport.<br />
C5 vers. 2012 -> Eksempel på feltudtryk med systemvariabler<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
PgHd<br />
PgHd<br />
PgHd<br />
Body<br />
InvenTable<br />
&Report Side: &Page<br />
Varenummer Kostpris<br />
ItemNumber CostPric<br />
e<br />
C5 vers. -> 4.1 Eksempel på feltudtryk med systemvariabler<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
PgHd<br />
PgHd<br />
PgHd<br />
Body<br />
LagKart<br />
&Report Side: &Page<br />
Varenummer Kostpris<br />
VareNummer KostPris<br />
Variablerne, &Report og &Page, anvendes i den første Page Header linje og udskrives således på hver<br />
side. Variablerne erklæres ikke i XAL kørslen, da de er systemvariabler.<br />
Resultat<br />
Prisoversigt Side: 1<br />
VareNummer Kostpris<br />
1545 15,50<br />
4711 210,00<br />
4718 1,20<br />
Det forudsættes, at rapportens navn er ’Prisoversigt’ og at siden der vises er nr. 1.<br />
257<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Macroer<br />
Der findes et utal af macroer i C5, som anvendes meget forskelligt.<br />
Nogle macroer kan indsættes i feltudtryk i rapportfelter.<br />
Hvad er macroer?<br />
Macroer er mindre XAL kørsler, der kun kan afvikles ved, at de startes fra andre XAL kørsler.<br />
I denne lektion skal det blot kendes, at macroer findes i udviklingsmenuen i søjlen MAC, og at de<br />
findes som Globale macroer og i Biblioteks macroer.<br />
Kendetegn ved macroer<br />
Type på macro Forklaring<br />
Global Staves med stort begyndelsesbogstav og resten med småt<br />
Indsættes uden videre direkte i feltudtryk<br />
Bibliotek Staves med STORE bogstaver<br />
En samling af enkeltstående macroer, der har noget tilfælles<br />
Biblioteket REPORTS består af macroer, der anvendes i rapporter<br />
Biblioteket skal først loades ind i XAL kørslen, før dets macroer kan<br />
indsættes i feltudtryk<br />
Ved anvendelse skal macroer altid foranstilles med et #-tegn, så de f.eks. kan skelnes fra variabler, der<br />
altid begynder med et &-tegn.<br />
Når rapport opbygningen afsluttes og go<strong>dk</strong>endes, oversættes de indsatte macroer sammen med<br />
rapportens XAL kode og bliver en del af denne.<br />
Når en rapport afvikles, udføres macroens kode og resultatet udskrives på feltets plads.<br />
#Company<br />
#Company er en global macro, der anvendes til udskrift af firmanavn på rapporter. Macroen henter<br />
den tekst, der står i Name-feltet i firmakartoteket.<br />
Den anvendes ofte i linjer af typen Page Header som herunder, men kan også anvendes i alle andre<br />
linjetyper.<br />
C5 vers. 2012 -> Eksempel på feltudtryk med macroen #Company<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
PgHd<br />
PgHd<br />
PgHd<br />
Body<br />
InvenTable<br />
#Company<br />
Varenummer Kostpris<br />
ItemNumber CostPric<br />
e<br />
258<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. -> 4.1 Eksempel på feltudtryk med macroen #Firma<br />
I ældre versioner af C5 hedder den globale makro ikke #Company men #Firma.<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
PgHd<br />
PgHd<br />
PgHd<br />
Body<br />
Resultat<br />
LagKart<br />
Lises Bolsjefabrik<br />
VareNummer Kostpris<br />
1545 15,50<br />
4711 210,00<br />
4718 1,20<br />
4850 230,10<br />
Varenummer Kostpris<br />
VareNummer KostPris<br />
I eksemplet forudsættes det, at det aktuelle firmanavn er ’Lises Bolsjefabrik’.<br />
#MacroLoad()<br />
Macroer, der ligger i biblioteker, kan ikke anvendes direkte, som det er tilfældet med de globale<br />
macroer.<br />
Der skal først skaffes adgang til biblioteket ved at ’loade’ det ind i XAL-kørslen. Dette udføres med<br />
macroen #MacroLoad().<br />
#MacroLoad() indsættes ofte i starten af XAL kørsler, og må gerne udføres før erklæringen af variabler.<br />
Syntaks for macroload af biblioteker<br />
#MacroLoad(BIBLIOTEKSNAVN)<br />
#MacroLoad() er i sig selv en global macro, der i parenteserne skal have et navn på et macrobibliotek.<br />
#ReportDatePage<br />
#Firma<br />
#ReportDatePage anvendes til at udskrive dato, klokkeslæt og sidenummer.<br />
Macroen findes i biblioteket REPORTS. For at få adgang til at anvende den skal biblioteket REPORTS<br />
først loades.<br />
259<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Eksempel på udtryk med macroer fra biblioteker<br />
#MacroLoad(REPORTS)<br />
PgHd<br />
Bemærk at biblioteket loades, før der kan indsættes macroer i feltudtryk.<br />
C5 vers. 2012 -> Eksempel på feltudtryk med macroen #ReportDatePage<br />
#MacroLoad(REPORTS)<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
PgHd<br />
PgHd<br />
PgHd<br />
Body<br />
Resultat<br />
InvenTable<br />
Varenummer Kostpris<br />
ItemNumber CostPric<br />
e<br />
Lises Bolsjefabrik Dato 07/01-09 13:47 Side 1<br />
VareNummer Kostpris<br />
1545 15,50<br />
4711 210,00<br />
4718 1,20<br />
4850 230,10<br />
#RapportDatoSide<br />
Biblioteket skal loades<br />
inden macroen kan<br />
indsættes i feltet<br />
#Company<br />
#ReportDatePage<br />
#ReportDatePage<br />
Ovennævnte makro hedder i ældre versioner af C5 #RapportDatoSide, og anvendes til at udskrive dato,<br />
klokkeslæt og sidenummer.<br />
Macroen findes i biblioteket REPORTS. For at få adgang til at anvende den skal biblioteket REPORTS<br />
først loades.<br />
260<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. -> 4.1 Eksempel på udtryk med macroer fra biblioteker<br />
#MacroLoad(REPORTS)<br />
PgHd<br />
Bemærk at biblioteket loades, før der kan indsættes macroer i feltudtryk.<br />
C5 vers. -> 4.1 Eksempel på feltudtryk med macroen #RapportDatoSide<br />
#MacroLoad(REPORTS)<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
PgHd<br />
PgHd<br />
PgHd<br />
Body<br />
Resultat<br />
LagKart<br />
Varenummer Kostpris<br />
VareNummer KostPris<br />
Lises Bolsjefabrik Dato 07/01-09 13:47 Side 1<br />
VareNummer Kostpris<br />
1545 15,50<br />
4711 210,00<br />
4718 1,20<br />
4850 230,10<br />
Funktioner<br />
Feltudtryk kan også indeholde navne på funktioner.<br />
Funktioner er beskrevet i lektionen ’Funktioner, grundlæggende’.<br />
Indsættelse i feltudtryk<br />
Biblioteket skal loades<br />
inden macroen kan<br />
indsættes i feltet<br />
#Firma<br />
#RapportDatoSide<br />
#RapportDatoSide<br />
Funktioner kan indsættes i alle linjetyper, da de ikke er afhængige af nogen kartoteker.<br />
I dette afsnit vises eksempler på anvendelse af funktionerne ToDay(), CurUserId() og UserId2Name().<br />
261<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. 2012 -> Eksempel på feltudtryk med funktioner<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
PgHd<br />
PgHd<br />
PgHd<br />
Body<br />
PgFt<br />
InvenTable<br />
C5 vers. -> 4.1 Eksempel på feltudtryk med funktioner<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
PgHd<br />
PgHd<br />
PgHd<br />
Body<br />
PgFt<br />
Resultat<br />
LagKart<br />
Dato:<br />
Varenummer Kostpris<br />
ItemNumber CostPric<br />
Udskrevet af: UserId2Name(CurUserId())<br />
e<br />
Dato:<br />
Varenummer Kostpris<br />
VareNummer KostPris<br />
Udskrevet af: UserId2Name(CurUserId())<br />
Lises Bolsjefabrik Dato: 07/01-09<br />
VareNummer Kostpris<br />
1545 15,50<br />
4711 210,00<br />
4718 1,20<br />
4850 230,10<br />
Udskrevet af: Karin Petersen<br />
I eksemplet forudsættes det at den aktuelle bruger er ’Karin Petersen’.<br />
Regneudtryk<br />
Feltudtryk anvendes udmærket til udskrivning af beregninger i form af forskellige regneudtryk.<br />
Regneudtrykket kan f.eks. være et kartoteksfelt, der multipliceres med et tal eller en variabel.<br />
C5 vers. 2012 -> Eksempel på rapport med regneudtryk i felt<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
PgHd<br />
Body<br />
IvenTable<br />
#Company<br />
#Firma<br />
C5 vers. -> 4.1 Eksempel på rapport med regneudtryk i felt<br />
Varenummer Gl. pris Ny pris<br />
ItemNumber CostPrice CostPrice*1.2<br />
ToDay()<br />
ToDay()<br />
262<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
PgHd<br />
Body<br />
Resultat<br />
LagKart<br />
VareNummer Gl. pris Ny pris<br />
1545 15,50 18,06<br />
4711 210,00 252,00<br />
4718 1,20 1,44<br />
4850 230,10 276,12<br />
Varenummer Gl. pris Ny pris<br />
VareNummer KostPris KostPris*1.2<br />
263<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver : Rapport definition felter i layout<br />
Opgave 1: Nye feltudtryk i ’Udlånsliste’<br />
Formål med opgaven<br />
At anvende felter med forskellige feltudtryk i rapporten ’Udlånsliste’.<br />
Beskrivelse<br />
Der skal arbejdes videre med rapporten ’Udlånsliste’ fra forrige opgave, idet der skal indsættes felter<br />
med macroer til firmanavnet, rapportens dato og side.<br />
I Bodylinjen skal der indsættes et felt til debitornavn. Feltet skal hente navnet fra debitorkartoteket<br />
med et direkte opslag.<br />
1 Vælg rapporten ’Udlånsliste’ fra forrige opgave.<br />
Forløb i C5 √<br />
2 Tilføj to nye Page header linjer som linje et og to, således at linjerne kommer til at<br />
stå øverst i Page headeren:<br />
I første linje indsættes der i venstre side et felt med macroen #Company og en<br />
længde på 30 tegn. I højre side indsættes der et felt med macroen<br />
#ReportDatePage og en længde på 30 tegn højrestillet.<br />
Anden linje udfyldes med en tegnet streg<br />
NB: Har du huske at macroloade biblioteket REPORTS?<br />
3 I Bodylinjen indsættes et felt til debitors navn. Det indsættes mellem felterne<br />
DebitorKto og UdlånsNr. Feltet udfyldes med et direkte opslag i kartoteket<br />
CustTabel, hvor debitors navn hentes.<br />
Feltets længde skal være 20 tegn venstrestillet.<br />
4 Tilret overskrifterne så de passer over felterne.<br />
5 Go<strong>dk</strong>end og afprøv om felterne fungerer efter hensigten.<br />
264<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
5. Linjetypen Control<br />
Mål med lektionen<br />
Formålet med denne lektion er at lære deltagerne at anvende linjetypen Control.<br />
Efter lektionen skal kursisterne kunne:<br />
Opbygge og anvende control linjer<br />
Anvende macroen #Rep_Execute til styring af control linjer<br />
Danne manuelle totaler med macroen #Add,<br />
Generelt<br />
Control linjer er i virkeligheden de mest magtfulde linjer, idet programmøren med disse linjetyper kan<br />
få fuld kontrol over rapporten.<br />
Det er den eneste linjetype der ikke styres automatisk og ikke har nogen fast placering på den færdige<br />
rapport.<br />
Linjetypers placering på færdig udskrift<br />
Linjetype Placering<br />
Prolog<br />
Epilog<br />
Page Header<br />
Page Footer<br />
Group Header<br />
Group Footer<br />
Body<br />
Subtotal<br />
Control<br />
Én gang i starten af rapporten<br />
Én gang i slutningen af rapporten<br />
I toppen af hver enkelt side i rapporten<br />
I bunden af hver enkelt side i rapporten<br />
Før hvert skift til et kartotek<br />
Hver gang der sluttes af fra et kartotek<br />
Hver gang kommandoen OUTPUT anvendes, eller når der<br />
sendes automatisk fra en QT.<br />
Tekslinjer med tekst til automatiske totaler<br />
Styres ene og alene af programmøren<br />
Control linjer er således linjer, der udelukkende styres af programmøren. De anvendes for eksempel i<br />
tilfælde, hvor programmøren har vanskeligt ved at løse en opgave alene vha. de andre linjetyper.<br />
Opbygning af Control linjer<br />
Control linjer opbygges i Rapport Definition ved at angive linjetypen Control.<br />
Kartotekskolonnen får i den forbindelse en anden betydning, idet der her skal indtastes et linjenummer<br />
i stedet for navn på et kartotek.<br />
Nummeret er valgfrit og indtastes i et vindue, der åbnes, når cursoren flyttes ind i kartotekskolonnen.<br />
Layoutområdet kan, som ved de andre linjetyper anvendes til tekst og felter af forskellig art.<br />
C5 vers. 2012 -> Eksempel på opbygning af Control linje<br />
265<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Ctrl<br />
25<br />
Total for :<br />
C5 vers. -> 4.1 Eksempel på opbygning af Control linje<br />
Ctrl<br />
25<br />
Linjenummer<br />
Total for :<br />
Linjenummeret i kartotekskolonnen har en ganske særlig betydning, idet alle control linjer skal have<br />
et nummer der kan refereres til fra koden i Rapport XAL eller Rapport QT.<br />
Nummeret er valgfrit og vælges af programmøren ved oprettelsen af linjen.<br />
Bemærk at systemet selv foreslår nummer nul, men at dette ikke er gyldigt.<br />
Anvend fra nummer et og opefter. Der kan være lige så mange control linjer, som der er behov for, og<br />
der kan være flere med samme nummer.<br />
C5 vers. 2012 -> Flere Control linjer med samme nummer<br />
Ctrl<br />
Ctrl<br />
Ctrl<br />
Ctrl<br />
Ctrl<br />
3<br />
3<br />
25<br />
25<br />
25<br />
Nummer på den aktuelle<br />
control linje. Nummeret er<br />
valgfrit og vælges af<br />
programmøren<br />
Nummer på den aktuelle<br />
control linje. Nummeret er<br />
valgfrit og vælges af<br />
programmøren<br />
InvenTable.ItemName1 &Total<br />
Total for : InvenTable.ItemName1 &Total<br />
Der kan være forskellige<br />
control linjer i samme<br />
rapport, og der må gerne<br />
være flere med samme<br />
nummer<br />
LagKart.VareNavn1 &Total<br />
266<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. -> 4.1 Flere Control linjer med samme nummer<br />
Ctrl<br />
Ctrl<br />
Ctrl<br />
Ctrl<br />
Ctrl<br />
3<br />
3<br />
25<br />
25<br />
25<br />
#Rep_Execute<br />
Total for :<br />
#Rep_Execute er en macro, der bl.a. anvendes til styring af control linjer.<br />
Macroen befinder sig i biblioteket REPORTS, hvorfor dette bibliotek skal loades før den kan anvendes.<br />
Syntaks<br />
#Rep_Execute()<br />
er nummeret på den control linje, der skal aktiveres.<br />
Ved at indsætte macroen i en Rapport XAL eller Rapport QT udskrives den angivne linje, når macroen<br />
mødes i programforløbet.<br />
Er der mere end en linje med samme nummer, udskrives alle linjer med det nummer i den rækkefølge,<br />
de forekommer i rapportdefinitionen.<br />
Dette gælder også, hvis de ligger spredt med andre linjetyper ind imellem.<br />
Det er således macroen #Rep_Execute() og nummeret, der styrer hvilke control linjer, der udskrives.<br />
C5 vers. 2012 -> Eksempel<br />
#MacroLoad(REPORTS)<br />
REAL &Total<br />
SEARCH VendTable<br />
OUTPUT VendTable<br />
SET &Total = &Total + BalanceMst<br />
END<br />
#Rep_Execute(3)<br />
#Rep_Execute(25)<br />
Body<br />
Ctrl<br />
Ctrl<br />
Ctrl<br />
VendTable<br />
3<br />
25<br />
25<br />
C5 vers. -> 4.1 Eksempel<br />
Der kan være forskellige<br />
control linjer i samme<br />
rapport, og der må gerne<br />
være flere med samme<br />
nummer<br />
Account<br />
Kreditorer i alt:<br />
LagKart.VareNavn1 &Total<br />
Name<br />
Der kan være forskellige control linjer<br />
i samme rapport, og der må gerne<br />
være flere med samme nummer<br />
BalanceMst<br />
&Total<br />
267<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
#MacroLoad(REPORTS)<br />
REAL &Total<br />
SEARCH KreKart<br />
OUTPUT KreKart<br />
SET &Total = &Total + SaldoDkk<br />
END<br />
#Rep_Execute(3)<br />
#Rep_Execute(25)<br />
Body<br />
Ctrl<br />
Ctrl<br />
Ctrl<br />
KreKart<br />
3<br />
25<br />
25<br />
Kreditorer i alt:<br />
Control macroen anbringes i Rapport XAL eller Rapport QT, på det sted hvor linjerne skal udskrives i<br />
rapporten. I eksemplet styrer macroen at control linjerne med nummer 3 og 25 igangsættes når<br />
søgeløkken er slut.<br />
Macroen #Add<br />
Macroen #Add anvendes bl.a. til sammentælling af værdier i søgeløkker.<br />
Macroen er global, idet den er stavet med stort begyndelsesbogstav og derefter med småt.<br />
Syntaks<br />
#Add(parameter1, parameter2)<br />
Parameter1 er f.eks. navnet på en variabel, der anvendes som tæller, og parameter2 er den værdi, der<br />
skal lægges til variablen. De to parametre skal være af samme datatype.<br />
Opbygning<br />
Macroen er opbygget af SET kommandoen og nogle parametre i form af procenttegn og tal. Åbnes<br />
macroen, indeholder den således følgende kode:<br />
Kode i macroen #Add<br />
SET %1 = (%1) + (%2)<br />
Konto<br />
Navn<br />
Der kan være forskellige control linjer<br />
i samme rapport, og der må gerne<br />
være flere med samme nummer<br />
SaldoDkk<br />
&Total<br />
Værdierne %1 og %2 svarer til parametrene, der er vist i syntaksen. De steder, hvor der står %1,<br />
indsættes parameter1, og hvor der står %2, indsættes parameter2.<br />
Datatypen på den værdi der indsættes i parameter1, bestemmer, hvad der kan lægges sammen i<br />
macroen.<br />
268<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Hvis parameter1 er en tekst, skal parameter2 også være det. I så fald sammenlægges de to tekster til én<br />
tekststreng.<br />
Er parameter1 en kommatalsvariabel, skal parameter2 også være det.<br />
Se eksemplet nenenfor.<br />
C5 vers. 2012 Eksempel på macroen #Add<br />
#MacroLoad(REPORTS)<br />
REAL &Total<br />
SEARCH VendTable<br />
OUTPUT VendTable<br />
#Add(&Total, BalanceMst)<br />
END<br />
#Rep_Execute(3)<br />
Body<br />
Ctrl<br />
Ctrl<br />
Ctrl<br />
VendTable<br />
3<br />
3<br />
3<br />
C5 vers. -> 4.1 Eksempel på macroen #Add<br />
#MacroLoad(REPORTS)<br />
REAL &Total<br />
SEARCH KreKart<br />
OUTPUT KreKart<br />
#Add(&Total, SaldoDkk)<br />
END<br />
#Rep_Execute(3)<br />
Body<br />
Ctrl<br />
Ctrl<br />
Ctrl<br />
KreKart<br />
3<br />
3<br />
3<br />
Kreditorer i alt:<br />
Kreditorer i alt:<br />
I dette eksempel anvendes macroen #Add som en tæller til sammentælling af kartotekets saldofelt.<br />
Macroen #Rep_Execute(3) sørger for at aktivere de tre control linjer med nummer 3, så disse kan<br />
udskrives.<br />
Bemærk at control macroen er indsat efter afslutningen af END i søgeløkken.<br />
Dette bevirker, at control linjerne udskrives til sidst på rapporten, når søgeløkken er færdig, som vist<br />
efterfølgende:<br />
Resultat<br />
Account<br />
Konto<br />
Name<br />
Navn<br />
BalanceMst<br />
&Total<br />
SaldoDkk<br />
&Total<br />
269<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
45999000 Microsoft A/S -100.000,00<br />
45934545 IMB Danmark A/S -20.000,00<br />
971249987 Intel Corporation -93.531,00<br />
Kreditorer i alt: -213.531.00<br />
Control linjer og #Add i Rapport-QT<br />
Control linjer kan også styres fra Rapport QT. Det er blot vigtigt at indsætte macroerne i de rigtige<br />
triggere.<br />
Opbygningen af Rapport definition er den samme som vist i de forrige afsnit.<br />
C5 vers. 2012 -> Eksempel på macroer i Rapport QT<br />
Triggere Kommandoer og macroer<br />
Init<br />
Post-Output<br />
Post-Search<br />
#MacroLoad(REPORTS)<br />
REAL &Total<br />
#Add(&Total, BalanceMst)<br />
#Rep_Execute(1)<br />
#Rep_Execute(2)<br />
#Rep_Execute(3)<br />
C5 vers. 2012 -> Eksempel på Rapport Definition<br />
Body<br />
Ctrl<br />
Ctrl<br />
Ctrl<br />
VendTable<br />
1<br />
2<br />
3<br />
Kreditorer i alt:<br />
C5 vers. -> 4.1 Eksempel på macroer i Rapport QT<br />
Triggere Kommandoer og macroer<br />
Init<br />
Post-Output<br />
Post-Search<br />
Account<br />
#MacroLoad(REPORTS)<br />
REAL &Total<br />
#Add(&Total, SaldoDkk)<br />
#Rep_Execute(1)<br />
#Rep_Execute(2)<br />
#Rep_Execute(3)<br />
Name<br />
BalanceMst<br />
&Total<br />
270<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. -> 4.1 Eksempel på Rapport Definition<br />
Body<br />
Ctrl<br />
Ctrl<br />
Ctrl<br />
KreKart<br />
1<br />
2<br />
3<br />
Konto<br />
Navn<br />
Kreditorer i alt:<br />
SaldoDkk<br />
&Total<br />
Bemærk at control linjerne nu har fået numrene 1, 2 og 3, og at der henvises til disse i Post-Search<br />
triggeren.<br />
At linjerne har fået disse numre, er ikke en nødvendighed, men kun for at vise, at linjerne godt kan<br />
have forskellige numre til forskel fra tidligere eksempler, hvor linjerne havde samme nummer.<br />
271<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Linjetypen Control<br />
Opgave 1: Control linjer i ’Udlånsliste’<br />
Formål med opgaven<br />
At anvende control linjer i rapporten ’Udlånsliste’.<br />
Beskrivelse<br />
Der skal arbejdes videre med rapporten ’Udlånsliste’ fra forrige opgave.<br />
Rapporten skal udvides med en optælling af hvor mange udlån, der findes af typerne Udlån,<br />
Kommission og Andet.<br />
Værdierne skal sammentælles i variabler, der oprettes til formålet. Optællingen udføres i søgeløkken<br />
og resultatet udskrives med control linjer, når søgeløkken er slut.<br />
1 Vælg rapporten ’Udlånsliste’ fra forrige opgave.<br />
Forløb √<br />
2 I Rapport XAL skal der erklæres en variabel til hver af typerne Udlån, Kommission<br />
og Andet. Variablerne skal være af typen heltal.<br />
3 I søgeløkken skal der opstilles tre IF sætninger, der hver for sig undersøger, hvilken<br />
af de tre typer udlånene tilhører. I hver sætning adderes værdien 1 til den aktuelle<br />
variabel.<br />
4 Efter søgeløkken er afsluttet, aktiveres den eller de Control linjer du opretter eller<br />
har oprettet til udskrivning af optællingen<br />
Anvend macroen #Rep_Execute<br />
5 I Rapport definition skal nedenstående Control linjer oprettes til udskrivning af<br />
resultatet. Vælg selv et eller flere numre til linjerne.<br />
Teksten: Fordeling<br />
Tegnet: streg<br />
Teksten: Udlån, efterfulgt af den tilsvarende variabel<br />
Teksten: Kommission, efterfulgt af den tilsvarende variabel<br />
Teksten: Andet, efterfulgt af den tilsvarende variabel<br />
Tegnet: streg, under de tre linjer til adskillelse mellem ’i alt’<br />
Teksten: I alt, efterfulgt af et felt med et feltudtryk, der adderer de tre variabler<br />
Tegnet: dobbeltstreg under totalen<br />
6 Go<strong>dk</strong>end og afprøv rapporten.<br />
272<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
6. Linjetyper med kartoteker<br />
Mål med lektionen<br />
Formålet med denne lektion er at lære deltagerne at opbygge linjetyper med kartoteker i<br />
kartotekskolonnen.<br />
Efter lektionen skal kursisterne kunne:<br />
Opbygge linjetyperne Group Header, Body, Group Footer og Subtotal<br />
Opbygge rapporter med udtræk fra flere kartoteker<br />
Udskrive automatiske subtotaler med egen ledetekst.<br />
Generelt<br />
I Rapport Definition opbygges rapportlinjerne med linjetyper af forskellig art.<br />
Nogle linjetyper anvendes uden angivelse af kartotek, medens andre skal have et kartotek i<br />
kartotekskolonnen.<br />
Denne lektion omhandler de fire linjetyper, der skal have kartoteker.<br />
Linjetyper med kartoteker<br />
Linje-type<br />
Group header<br />
Body<br />
Group footer<br />
Subtotal<br />
Først en forklaring til betydningen af kartoteker og derefter gennemgang af de enkelte linjetyper.<br />
Bindeled i Rapport XAL og Rapport Definition<br />
Kartotekerne er bindeleddet mellem koden i Rapport XAL og linjerne i Rapport Definition.<br />
I eksemplet herunder ses Rapport XAL med udtræk af data fra ét kartotek. Data sendes til Rapport<br />
Definition med kommandoen OUTPUT og modtages af linjetypen Body, der har samme kartoteksnavn<br />
som i OUTPUT linjen.<br />
C5 vers. 2012 -> Eksempel med udtræk af data fra ét kartotek<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
Body InvenTable ItemNumber ItemName1 CostPrice<br />
C5 vers. -> 4.1 Eksempel med udtræk af data fra ét kartotek<br />
273<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
Body LagKart<br />
Hvis OUTPUT kommandoen ikke indsættes, virker rapporten ikke, da der ikke sendes data til Rapport<br />
Definition.<br />
Betydningen af kartotekskolonnen ses bedre af næste eksempel, hvor der i koden i Rapport XAL er<br />
indsat to søgeløkker med hvert sit kartotek.<br />
I Rapport Definition er der indsat en linje til hver kartotek. Var der ikke en kolonne til angivelse af<br />
OUTPUT kartotek, ville systemet ikke vide hvilken linje, der skulle modtage outputtet fra søgeløkkerne.<br />
For at anskueliggøre betydningen af kartotekskolonnen, er der i eksemplet indsat to kartoteker, der<br />
ikke har noget med hinanden at gøre.<br />
C5 vers. 2012 -> Eksempel med udtræk af data fra to forskellige kartoteker<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
SEARCH LedTable<br />
OUTPUT LedTable<br />
END<br />
Body<br />
Body<br />
InvenTable<br />
LedTable<br />
C5 vers. -> 4.1 Eksempel med udtræk af data fra to forskellige kartoteker<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
SEARCH FinKart<br />
OUTPUT FinKart<br />
END<br />
Body<br />
Body<br />
Resultat<br />
LagKart<br />
FinKart<br />
VareNummer VareNavn1 KostPris<br />
Itemnumber ItemName1<br />
Account AccountName<br />
VareNummer VareNavn1<br />
Konto<br />
KontoNavn<br />
CostPrice<br />
KostPris<br />
274<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
18000 Kabinet 1.250,20<br />
16000 Ram 520,40<br />
12000 Harddisk type 2 1.230,75<br />
14000 CD romdrev 50,10<br />
20000 Skærm 1.000,10<br />
100000 AKTIVER<br />
200000 PASSIVER<br />
300000 RESULTAT<br />
110000 Anlægsaktiver<br />
120000 Omsætningsaktiver<br />
Da der således kan trækkes data ud af flere forskellige kartoteker i samme rapport, ses det tydeligt,<br />
hvor vigtigt det er, at angive det rigtige kartotek i kartotekskolonnen.<br />
Wildcard i form af *<br />
Angives der ikke OUTPUT kartotek i bodylinjerne, indsættes der automatisk en * i kartotekskolonnen.<br />
Stjernen er et Wildcard, der betyder ’Alle kartoteker’.<br />
Dette betyder at alle bodylinjer forsøges udskrevet, hver gang en OUTPUT kommando afvikles i XAL<br />
koden, uafhængigt af kartotek.<br />
Dette kan resultere i nogle mærkelige udskrifter, men i visse tilfælde kan det være hensigtsmæssigt. I<br />
følgende eksempel skal der udskrives en blank linje mellem hver eneste post i begge kartoteker. Derfor<br />
angives kun én blank linje i form af en bodylinje med en * i kartotekskolonnen.<br />
C5 vers. 2012 -> Eksempel med * i kartotekskolonnen<br />
Body<br />
Body<br />
Body<br />
InvenTable<br />
LedTable<br />
*<br />
C5 vers. -> 4.1 Eksempel med * i kartotekskolonnen<br />
Body<br />
Body<br />
Body<br />
LagKart<br />
FinKart<br />
*<br />
ItemNumber ItemName1<br />
Account AccountName<br />
VareNummer VareNavn1<br />
Konto<br />
KontoNavn<br />
CostPrice<br />
KostPris<br />
Hver gang OUTPUT kommandoen udføres i XAL koden, sendes den blanke linje således afsted til<br />
rapporten. Resultatet bliver som følger, idet der indsættes blanke linjer mellem hver enkelt post i<br />
begge kartoteker.<br />
275<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Resultat<br />
18000 Kabinet 1.250,20<br />
16000 Ram 520,40<br />
12000 Harddisk type 2 1.230,75<br />
14000 CD romdrev 50,10<br />
20000 Skærm 1.000,10<br />
100000 AKTIVER<br />
200000 PASSIVER<br />
300000 RESULTAT<br />
110000 Anlægsaktiver<br />
120000 Omsætningsaktiver<br />
Når der skal anvendes mere end ét kartotek, kan dette udføres på to måder.<br />
Metoder med flere kartoteker<br />
Metode Betydning<br />
Enkeltstående kartoteker Kartotekerne afvikles ét ad gangen efter hinanden.<br />
Afhængige kartoteker Hver gang en post hentes i hove<strong>dk</strong>artoteket, er der mulighed for<br />
at hente tilhørende poster i underkartoteket.<br />
Enkeltstående kartoteker<br />
Ved enkeltstående uafhængige kartoteker, bliver disse afviklet et ad gangen i den rækkefølge, de<br />
forekommer i Rapport XAL eller en evt. Rapport QT. Hver gang ét kartotek er færdigt, startes på det<br />
næste.<br />
Herunder vises der eksempler på anvendelsen af uafhængige kartoteker i Rapport XAL<br />
C5 vers. 2012 -> Eksempel på enkeltstående kartoteker i Rapport XAL<br />
SEARCH InvenItemGroup<br />
OUTPUT InvenItemGroup<br />
END<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
Body<br />
Body<br />
InvenItemG<br />
InvenTable<br />
Group GroupName<br />
ItemNumber ItemName1<br />
Group<br />
C5 vers. -> 4.1 Eksempel på enkeltstående kartoteker i Rapport XAL<br />
276<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
SEARCH LagGruppe<br />
OUTPUT LagGruppe<br />
END<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
Body<br />
Body<br />
LagGruppe<br />
LagKart<br />
Selv om kartotekerne er enkeltstående, har de i dette eksempel alligevel en fællesnævner, idet det<br />
første kartotek udskriver en liste over de varegrupper der findes. Dette kan anvendes til manuel<br />
reference til de poster, der skrives ud fra det andet kartotek, hvor varegruppen vises, men ikke hvad<br />
den hedder.<br />
Resultat<br />
10 Harddiske<br />
20 Skærme<br />
30 Kabinetter<br />
40 Ram<br />
12000 Harddisk type 2 10<br />
14000 Skærm 14” 20<br />
16000 Ram 8 MB 40<br />
16004 Ram 16 MB 40<br />
17006 Harddisk type 5 10<br />
18000 Kabinet 30<br />
20000 Skærm 17” 20<br />
Afhængige synkroniserede kartoteker<br />
Gruppe GruppeNavn<br />
VareNummer VareNavn1<br />
Gruppe<br />
Ved afhængige kartoteker oprettes der i Rapport XAL to søgeløkker, hvor den ene bygges ind i den<br />
anden. Den inderste søgeløkke synkroniseres under opbygningen med den yderste.<br />
Ved afviklingen af Rapport XAL findes posterne i den yderste søgeløkke (hove<strong>dk</strong>artoteket) frem en ad<br />
gangen. Hver gang en post er fundet, udføres der en gennemsøgning af samtlige poster i den inderste<br />
søgeløkke (underkartoteket).<br />
Da samtlige poster gennemsøges i den inderste søgeløkke (underkartoteket), er det vigtigt at<br />
synkronisere de to søgeløkker (kartoteker) med hinanden således, at der under gennemsøgningen af<br />
den inderste søgeløkke kun hentes poster, der kan relateres til den aktuelle post, der er fundet i den<br />
yderste søgeløkke (hove<strong>dk</strong>artoteket).<br />
Synkronisering meller hoved- og underkartotek<br />
Synkroniseringen i Rapport XAL foregår ved anvendelse af kommandoen WHERE. Kommandoen<br />
anvendes ved at opstille en betingelse, der skal være opfyldt, for at en post udvælges fra<br />
underkartoteket.<br />
Det er vigtigt at bemærke, at synkroniseringen finder sted i den inderste søgeløkke (underkartoteket).<br />
Det er altså underkartoteket, der skal synkroniseres med hove<strong>dk</strong>artoteket og ikke omvendt.<br />
277<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Syntaksen for anvendelsen af WHERE er her følgende:<br />
Syntaks til WHERE<br />
WHERE == <br />
Herunder vises der eksempler på anvendelsen af flere afhængige kartoteker i Rapport XAL.<br />
C5 vers. 2012 -> Eksempel på afhængige kartoteker i Rapport XAL<br />
SEARCH InvenItemGroup<br />
OUTPUT InvenItemGroup<br />
SEARCH InvenTable<br />
WHERE InvenTable.Group == InvenItemGroup.Group<br />
OUTPUT InvenTable<br />
END<br />
END<br />
Body<br />
Body<br />
InvenItemG<br />
InvenTable<br />
I figuren med resultatet ses det, hvordan der først trækkes én post ud af hove<strong>dk</strong>artoteket<br />
InvenItemGroup og derefter de tilhørende poster i underkartoteket InvenTable.<br />
Det kan ses at synkroniseringen virker, idet der for hver post i hove<strong>dk</strong>artoteket kun vises de tilhørende<br />
synkroniserede poster fra underkartoteket.<br />
C5 vers. -> 4.1 Eksempel på afhængige kartoteker i Rapport XAL<br />
SEARCH LagGruppe<br />
OUTPUT LagGruppe<br />
SEARCH LagKart<br />
WHERE LagKart.Gruppe == LagGruppe.Gruppe<br />
OUTPUT LagKart<br />
END<br />
END<br />
Body<br />
Body<br />
LagGruppe<br />
LagKart<br />
I figuren med resultatet ses det, hvordan der først trækkes én post ud af hove<strong>dk</strong>artoteket LagGruppe<br />
og derefter de tilhørende poster i underkartoteket LagKart.<br />
Det kan ses at synkroniseringen virker, idet der for hver post i hove<strong>dk</strong>artoteket kun vises de tilhørende<br />
synkroniserede poster fra underkartoteket.<br />
Resultat<br />
Group GroupName<br />
ItemNumber ItemName1<br />
Group<br />
Gruppe GruppeNavn<br />
VareNummer VareNavn1<br />
Gruppe<br />
278<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
10 Harddiske<br />
12000 Harddisk type 2 10<br />
17006 Harddisk type 5 10<br />
20 Skærme<br />
20000 Skærm 17” 20<br />
14000 Skærm 14” 20<br />
30 Kabinetter<br />
18000 Kabinet 30<br />
40 Ram<br />
16000 Ram 8 MB 40<br />
14000 Ram 16 MB 40<br />
Linjetypen Body<br />
Linjetypen Body er den vigtigste linjetype i Rapport Definition. Det er den linjetype, der indeholder de<br />
data, der fra kartotekerne udskrives på rapporten.<br />
Linjetypen indeholder felterne, der tilhører kartotekerne i kartotekskolonnen. Derfor skal der også altid<br />
indsættes et kartotek hertil.<br />
Linjetypen blev nøje behandlet i lektionen ’Rapport Definition grundlæggende’, hvorfor der henvises til<br />
denne lektion om yderligere information.<br />
Linjetypen Group Header<br />
Linjetypen Group Header skal altid udfyldes i kartotekskolonnen med navn på kartotek eller med en *.<br />
I layoutområdet kan der indsættes felter og tekster på samme måde som i andre linjetyper.<br />
Aktivering af linjetypen Group Header<br />
Linjetypen Group Header aktiveres og udskrives automatisk, hver gang der startes på udskrivning af<br />
poster fra et kartotek.<br />
Dette gælder både ved enkeltstående kartoteker og afhængige kartoteker.<br />
Linjetypen aktiveres således hver gang, der kommer output til et nyt kartotek fra en Rapport XAL eller<br />
en evt. Rapport QT.<br />
279<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. 2012 -> Eksempel på Group Header ved enkeltstående kartoteker uden relation<br />
Ved enkeltstående uafhængige kartoteker udskrives Group Headerne hver gang, der startes på et nyt<br />
kartotek.<br />
SEARCH InvenItemGroup<br />
OUTPUT InvenItemGroup<br />
END<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
GrHd<br />
GrHd<br />
Body<br />
GrHd<br />
GrHd<br />
Body<br />
InvenItemG<br />
InvenItemG<br />
InvenItemG<br />
InvenTable<br />
InvenTable<br />
InvenTable<br />
Varegrupper<br />
Group GroupName<br />
Varer<br />
C5 vers. -> 4.1 Eksempel på Group Header ved enkeltstående kartoteker uden relation<br />
Ved enkeltstående uafhængige kartoteker udskrives Group Headerne hver gang, der startes på et nyt<br />
kartotek.<br />
SEARCH LagGruppe<br />
OUTPUT LagGruppe<br />
END<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
GrHd<br />
GrHd<br />
Body<br />
GrHd<br />
GrHd<br />
Body<br />
LagGruppe<br />
LagGruppe<br />
LagGruppe<br />
LagKart<br />
LagKart<br />
LagKart<br />
ItemNumber ItemName1<br />
Group<br />
Varegrupper<br />
Gruppe GruppeNavn<br />
Varer<br />
VareNummer VareNavn1<br />
Gruppe<br />
280<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Resultat<br />
Varegrupper<br />
10 Harddiske<br />
20 Skærme<br />
30 Kabinetter<br />
40 Ram<br />
Varer<br />
12000 Harddisk type 2 10<br />
14000 Skærm 14” 20<br />
16000 Ram 8 MB 40<br />
16004 Ram 16 MB 40<br />
17006 Harddisk type 5 10<br />
18000 Kabinet 30<br />
20000 Skærm 17” 20<br />
Eksemplet kunne f.eks. finde anvendelse, hvor en rapport fylder mange sider og der ikke er plads nok<br />
på linjerne til gruppenavnet. Rapporten kunne da starte med en liste over varegrupper som<br />
opslagsreference for resten af rapporten.<br />
Eksempler på Group Headere ved afhængige kartoteker<br />
Ved flere afhængige kartoteker vil Group Headerne blive udskrevet hver gang, der skiftes mellem<br />
udskrivning fra henholdsvis hove<strong>dk</strong>artotek og underkartotek.<br />
C5 vers. 2012 -> Eksempel på Group Header ved afhængige kartoteker<br />
SEARCH InvenItemGroup<br />
OUTPUT InvenItemGroup<br />
SEARCH InvenTable<br />
WHERE InvenTable.Group == InvenItemGroup.Group<br />
OUTPUT InvenTable<br />
END<br />
END<br />
Body<br />
GrHd<br />
Body<br />
InvenItemG<br />
InvenTable<br />
InvenTable<br />
Group GroupName<br />
ItemNumber ItemName1<br />
Group<br />
281<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. -> 4.1 Eksempel på Group Header ved afhængige kartoteker<br />
SEARCH LagGruppe<br />
OUTPUT LagGruppe<br />
SEARCH LagKart<br />
WHERE LagKart.Gruppe == LagGruppe.Gruppe<br />
OUTPUT LagKart<br />
END<br />
END<br />
Body<br />
GrHd<br />
Body<br />
Resultat<br />
LagGruppe<br />
LagKart<br />
LagKart<br />
10 Harddiske<br />
12000 Harddisk type 2 10<br />
17006 Harddisk type 5 10<br />
20 Skærme<br />
20000 Skærm 17” 20<br />
14000 Skærm 14” 20<br />
30 Kabinetter<br />
18000 Kabinetter 30<br />
40 Ram<br />
16000 Ram 8 MB 40<br />
14000 Ram 16 MB 40<br />
I dette eksempel anvendes Group Headeren kun til at sætte en streg, inden der skrives ud fra<br />
underkartoteket. På denne måde kommer hove<strong>dk</strong>artoteket til at virke som en form for overskrift til<br />
underkartoteket.<br />
Linjetypen Group Footer<br />
Gruppe GruppeNavn<br />
VareNummer VareNavn1<br />
Gruppe<br />
Linjetypen Group Footer skal altid udfyldes i kartotekskolonnen med navn på kartotek eller med en *.<br />
I layoutområdet indsættes der felter og tekster på samme måde som i andre linjetyper.<br />
Linjetypen Group Footer aktiveres hver gang, der afsluttes med output fra et kartotek i Rapport XAL<br />
eller en evt. Rapport QT.<br />
Dette gælder både ved enkeltstående kartoteker og afhængige kartoteker.<br />
Linjetypen aktiveres således hver gang, der ikke længere kommer output fra et kartotek i Rapport XAL<br />
eller Rapport QT.<br />
De to næste sider indeholder eksempler på henholdsvis anvendelse af Group Footer i enkeltstående<br />
kartoteker uden relation og i sammenhængende kartoteker med relation.<br />
282<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Eksempel på Group Footer ved enkeltstående kartoteker uden relation<br />
Ved enkeltstående uafhængige kartoteker udskrives Group Footerne hver gang, der sluttes et kartotek.<br />
C5 vers. 2012 -> Eksempel på Group Footer i enkeltstående kartoteker<br />
SEARCH InvenItemGroup<br />
OUTPUT InvenItemGroup<br />
END<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
GrHd<br />
GrHd<br />
Body<br />
GrFt<br />
GrHd<br />
GrHd<br />
Body<br />
GrFt<br />
InvenItemG<br />
InvenItemG<br />
InvenItemG<br />
InvenItemG<br />
InvenTable<br />
InvenTable<br />
InvenTable<br />
InvenTable<br />
Varegrupper<br />
Varer<br />
C5 vers. -> 4.1 Eksempel på Group Footer i enkeltstående kartoteker<br />
SEARCH LagGruppe<br />
OUTPUT LagGruppe<br />
END<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
GrHd<br />
GrHd<br />
Body<br />
GrFt<br />
GrHd<br />
GrHd<br />
Body<br />
GrFt<br />
Resultat<br />
LagGruppe<br />
LagGruppe<br />
LagGruppe<br />
LagGruppe<br />
LagKart<br />
LagKart<br />
LagKart<br />
LagKart<br />
Group GroupName<br />
ItemNumber ItemName1<br />
Group<br />
Varegrupper<br />
Gruppe GruppeNavn<br />
Varer<br />
VareNummer VareNavn1<br />
Gruppe<br />
283<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Varegrupper<br />
10 Harddiske<br />
20 Skærme<br />
30 Kabinetter<br />
40 Ram<br />
Varer<br />
12000 Harddisk type 2 10<br />
14000 Skærm 14” 20<br />
16000 Ram 8 MB 40<br />
16004 Ram 16 MB 40<br />
17006 Harddisk type 5 10<br />
18000 Kabinet 30<br />
20000 Skærm 17” 20<br />
I eksemplet anvendes Group Footerne kun til at skrive en dobbeltstreg for at vise, at udskrivning af<br />
poster fra kartoteket er slut.<br />
Definitionsområdet til ovenstående eksempel kunne også sættes op som nedenstående figur, idet<br />
Group Footerne med kartoteker erstattes af én enkelt Group Footer med angivelse af * i<br />
kartotekskolonnen, hvilket betyder, at den pågældende linje udskrives hver gang, et hvilket som helst<br />
kartotek afsluttes.<br />
C5 vers. 2012 -> Eksempel på Group Footer med *<br />
GrHd<br />
GrHd<br />
Body<br />
GrHd<br />
GrHd<br />
Body<br />
GrFt<br />
InvenItemG<br />
InvenItemG<br />
InvenItemG<br />
InvenTable<br />
InvenTable<br />
InvenTable<br />
*<br />
Varegrupper<br />
C5 vers. -> 4.1 Eksempel på Group Footer med *<br />
GrHd<br />
GrHd<br />
Body<br />
GrHd<br />
GrHd<br />
Body<br />
GrFt<br />
LagGruppe<br />
LagGruppe<br />
LagGruppe<br />
LagKart<br />
LagKart<br />
LagKart<br />
*<br />
Group GroupName<br />
Varer<br />
ItemNumber ItemName1<br />
Group<br />
Varegrupper<br />
Gruppe GruppeNavn<br />
Varer<br />
VareNummer VareNavn1<br />
Gruppe<br />
284<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Eksempel på Group Footer ved afhængige kartoteker<br />
Ved flere afhængige kartoteker udskrives Group Footerne hver gang, der ikke længere kommer poster<br />
fra et af kartotekerne. Det er tilfældet hver gang, der fra underkartoteket vendes tilbage til<br />
hove<strong>dk</strong>artoteket .<br />
C5 vers. 2012 -> Eksempel Group Footer ved flere kartoteker<br />
SEARCH InvenItemGroup<br />
OUTPUT InvenItemGroup<br />
SEARCH InvenTable<br />
WHERE InvenTable.Group == InvenItemGroup.Group<br />
OUTPUT InvenTable<br />
END<br />
END<br />
Body<br />
Body<br />
GrFt<br />
InvenItemG<br />
InvenTable<br />
*<br />
C5 vers. -> 4.1 Eksempel Group Footer ved flere kartoteker<br />
SEARCH LagGruppe<br />
OUTPUT LagGruppe<br />
SEARCH LagKart<br />
WHERE LagKart.Gruppe == LagGruppe.Gruppe<br />
OUTPUT LagKart<br />
END<br />
END<br />
Body<br />
Body<br />
GrFt<br />
LagGruppe<br />
LagKart<br />
*<br />
Group GroupName<br />
ItemNumber ItemName1<br />
Group<br />
Gruppe GruppeNavn<br />
VareNummer VareNavn1<br />
Gruppe<br />
I denne opsætning af definitionsområdet angives der én Group Footer linje med en * i<br />
kartotekskolonnen. Det betyder, at hver gang der afsluttes med udskrivning fra et kartotek, udskrives<br />
denne linje. Definitionen kan f.eks. give følgende resultat.<br />
285<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Resultat<br />
10 Harddiske<br />
12000 Harddisk type 2 10<br />
17006 Harddisk type 5 10<br />
20 Skærme<br />
20000 Skærm 17” 20<br />
14000 Skærm 14” 20<br />
30 Kabinetter<br />
18000 Kabinetter 30<br />
40 Ram<br />
16000 Ram 8 MB 40<br />
14000 Ram 16 MB 40<br />
I stedet for Group Footeren med * i kartotekskolonnen, kunne der indsættes en Group Footer linje til<br />
hvert kartotek med angivelse af kartotek i kartotekskolonnen.<br />
Linjetypen Subtotal<br />
Opsætning af linjetypen<br />
Linjetypen Subtotal har kun ét formål, at udskrive ledetekster til automatiske subtotaler.<br />
Kartotekskolonnen skal altid udfyldes med navn på kartotek eller *.<br />
I layoutområdet indsættes den ledetekst, der skal stå foran automatiske totaler. Ledeteksten kan<br />
udmærket bestå af tekst og evt. relevante felter.<br />
Linjetypen Subtotal aktiveres hver gang, der udskrives en total fra et kartotek i Rapport XAL eller en<br />
evt. Rapport QT.<br />
Dette gælder både ved enkeltstående kartoteker og afhængige kartoteker.<br />
C5 vers. 2012 -> Eksempel med Subtotal på ét kartotek<br />
SEARCH VendTrans<br />
WHERE Account == ”971249987”<br />
OUTPUT VendTrans<br />
END<br />
PgHd<br />
PgHd<br />
Body<br />
Subt<br />
VendTrans<br />
VendTrans<br />
C5 vers. -> 4.1 Eksempel med Subtotal på ét kartotek<br />
Konto Dato Bilag BeløbDkr<br />
Account Date_ Voucher<br />
Kreditorposter i alt ........:<br />
AmountMst<br />
286<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
SEARCH KrePost<br />
WHERE Konto == ”971249987”<br />
OUTPUT KrePost<br />
END<br />
PgHd<br />
PgHd<br />
Body<br />
Subt<br />
KrePost<br />
KrePost<br />
Resultat med linjetypen Subtotal<br />
Konto Dato Bilag BeløbDkr<br />
Konto Dato Bilag<br />
Kreditorposter i alt ........:<br />
Konto Dato Bilag Beløb Dkr<br />
971249987 23/05-97 500016 -222.693,75<br />
971249987 20/10-97 70025 222.693,75<br />
971249987 04/01-98 500025 -26.723,25<br />
971249987 02/03-98 70056 26.723,25<br />
971249987 31/03-98 500050 -93.531,38<br />
Kreditorposter i alt .......: -93.531,38<br />
Herunder følger et eksempel med to afhængige kartoteker.<br />
Eksempel på Subtotal ved afhængige kartoteker<br />
Ved flere afhængige kartoteker udskrives Subtotal linjerne hver gang, der udskrives en subtotal fra et af<br />
kartotekerne.<br />
C5 vers. 2012 -> Eksempel med subtotaler på flere kartoteker<br />
SEARCH VendTable<br />
OUTPUT VendTable<br />
SEARCH VendTrans<br />
WHERE VendTrans.Account == VendTable.Account<br />
OUTPUT VendTrans<br />
END<br />
END<br />
Body<br />
Body<br />
Subt<br />
Subt<br />
VendTable<br />
VendTrans<br />
VendTrans<br />
VendTable<br />
C5 vers. -> 4.1 Eksempel med subtotaler på flere kartoteker<br />
BeløbDkk<br />
Account Name<br />
BalanceMst<br />
Account Date_ AmountMst<br />
Poster i alt .....:<br />
Kreditorer i alt ............:<br />
287<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
SEARCH KreKart<br />
OUTPUT KreKart<br />
SEARCH KrePost<br />
WHERE KrePost.Konto == KreKart.Konto<br />
OUTPUT KrePost<br />
END<br />
END<br />
Body<br />
Body<br />
Subt<br />
Subt<br />
KreKart<br />
KrePost<br />
KrePost<br />
KreKart<br />
Resultat med linjetypen Subtotal<br />
Konto Navn<br />
SaldoDkk<br />
Konto Dato BeløbDkk<br />
Poster i alt .....:<br />
Kreditorer i alt ............:<br />
971249987 Intel Corporation -93.531,38<br />
971249987 23/05-97 -222.693,75<br />
971249987 20/10-97 222.693,75<br />
971249987 04/01-98 -26.723,25<br />
971249987 02/03-98 26.723,25<br />
971249987 31/03-98 -93.531,38<br />
Poster i alt ....: -93.531,38<br />
Kreditorer i alt .............: -523.548,88<br />
Ovenstående eksempel viser data fra to kartoteker, med hver sin ledetekst til subtotalerne.<br />
I Rapport XAL udsøges faktisk alle kreditorer og poster, men i resultatet i eksemplet vises kun et udsnit<br />
af posterne og den samlede subtotal.<br />
Hvis der skulle være samme ledetekst til begge kartoteker, havde det været nok med en subtotal linje<br />
med * i kartotekskolonnen.<br />
Opsætning af felt<br />
Opsætning af felter med subtotal udføres i layoutområdet i Rapport Definition.<br />
Feltet, der skal summeres åbnes og i menuen Ret felt i menupunktet Subtotaler indsættes en af<br />
summerings metoderne fra nedenstående skema.<br />
De enkelte metoder gennemgås nøjere i lektionen ’Subtotaler automatiske’.<br />
288<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Metoder til summering<br />
Metode Anvendelse<br />
Sum alle Alle poster summeres<br />
Sum positive Kun positive poster summeres<br />
Sum negative Kun negative poster summeres<br />
Opsætningen foregår som vist i nedenstående figur.<br />
C5 vers. 2012 -> Opsætning af subtotal på feltet AmountMst<br />
PgHd<br />
PgHd<br />
Body<br />
VendTrans<br />
Konto Dato Bilag BeløbDkr<br />
C5 vers. -> 4.1 Opsætning af subtotal på feltet BeløbDkk<br />
PgHd<br />
PgHd<br />
Body<br />
KrePost<br />
Account Date_ Voucher<br />
Opsæt subtotal<br />
INSERT<br />
AmountMst<br />
Ret felt<br />
...<br />
...<br />
...<br />
Subtotaler<br />
Sum alle<br />
Sum positive<br />
Sum negative<br />
Konto Dato Bilag BeløbDkr<br />
Konto Dato Bilag<br />
Opsæt subtotal<br />
INSERT<br />
289<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
F6<br />
BeløbDkk<br />
F6<br />
Ret felt<br />
...<br />
...<br />
...<br />
Subtotaler<br />
Sum alle<br />
Sum positive<br />
Sum negative
Opsætning til automatiske subtotaler<br />
I skemaet herover vises opsætningen, som den udføres under Opsætning i Rapport Definition. Det vises<br />
øverst i figuren med CTRL+F6, der åbner for boksen Opsætning. Placeres cursoren i feltet Subtotal, og<br />
der tastes Enter åbnes boksen Opsæt subtotaler, hvor kartotek vælges. (Er der kun et kartotek vises<br />
denne boks ikke. Der hoppes derimod direkte til næste boks.)<br />
Efter valgt kartotek åbnes en ny boks med kartoteksnavnet som overskrift. I denne boks, skal der svares<br />
JA til om subtotalen skal udskrives eller ej, og det kan med JA, udfyldes, om der skal være sideskift efter<br />
at subtotaler er udskrevet.<br />
Der findes flere felter i de forskellige bokse, men dette er de vigtigste i nuværende situation.<br />
Defaultværdier<br />
Rapport-definition<br />
CTRL +F6<br />
Subtotal ......: Vælg<br />
Udskriftsmuligheder<br />
(under afvikling)<br />
Subtotal ......: Vælg<br />
Opsætning<br />
ENTER<br />
ENTER<br />
Udskriv subtotal:<br />
Opsæt subtotaler<br />
* Første kartoteksnavn<br />
* Andet kartoteksnavn<br />
KartoteksNavn<br />
Sideskift efter subtotal:<br />
De værdier, der indsættes under opsætningen, fungerer som default i boksen Udskriftsmuligheder,<br />
når denne vises under afviklingen.<br />
Boksen Udskriftsmuligheder ses nederst i figuren. I feltet Subtotal tastes Enter og samme bokse vises<br />
som under opsætning af Rapport Definition.<br />
290<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
JA
Opgaver: Linjetyper med kartoteker<br />
Opgave 1: Automatisk subtotal i ’Udlånsliste’<br />
Formål med opgaven<br />
At udføre automatisk sammentælling af feltet ForsikringsSum i rapporten Udlånsliste.<br />
Beskrivelse<br />
Der skal arbejdes videre med rapporten ’Udlånsliste’ fra forrige opgave.<br />
I rapporten skal der foretages en automatisk summering af værdierne i feltet ForsikringsSum og der<br />
skal indsættes en speciel tekst til totalen i en linje af typen Subtotal.<br />
1 Vælg rapporten ’Udlånsliste’ fra forrige opgave.<br />
Forløb √<br />
2 Opsæt feltet ForsikringsSum således at alle værdier summeres automatisk.<br />
3 Indsæt en linje af typen subtotal med teksten: Forsikringsværdi i alt:<br />
Husk at angive det rigtige kartoteksnavn i kartotekskolonnen.<br />
4 Vælg opsætning af rapporten og sæt feltet ’Udskriv subtotal’ til JA.<br />
5 Go<strong>dk</strong>end og afprøv rapporten.<br />
291<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgave 2: Group header og –footer i ’Udlånsliste’<br />
Formål med opgaven<br />
At tilføje en søgning af et ekstra kartotek i rapporten Udlånsliste og at anvende linjetyperne Group<br />
header og –footer til dette kartotek.<br />
Beskrivelse<br />
Der skal arbejdes videre med rapporten ’Udlånsliste’ fra forrige opgave.<br />
Rapporten skal udvides med en søgning af kartoteket UDLUdlånsPost, således at der for hver<br />
udlånsordre vises hvilke udlånslinjer, den indeholder.<br />
Linjerne skal synkroniseres med ordrerne og der skal indsættes linjer af typerne Group header og –<br />
footer, for at vise hvor posterne starter og slutter.<br />
1 Vælg rapporten Udlånsliste fra forrige opgave.<br />
Forløb √<br />
2 I Rapport XAL, i søgeløkken på UDLUdlånsKart, skal der indsættes en ny søgeløkke<br />
på UDLUdlånsPost.<br />
UDLUdlånsPost skal synkroniseres med UDLUdlånsKart.<br />
Posterne fra UDLUdlånsPost skal desuden sendes til Rapport definition til en<br />
Bodylinje med samme kartoteksnavn.<br />
3 I Rapport definition skal der oprettes en ny Bodylinje til kartoteket UDLUdlånsPost.<br />
Indsæt felterne VareNr, VareNavn og Status.<br />
4 Opret en Group header linje til kartoteket UDLUdlånsPost. Linjen skal være blank<br />
og anvendes kun til adskillelse med ordrer og linjer.<br />
5 Opret to Group footer linjer til kartoteket UDLUdlånsPost. Den første skal<br />
indeholde en gennemgående tegnet dobbeltstreg og den anden skal være blank.<br />
Dette viser at posterne slutter her.<br />
6 Go<strong>dk</strong>end og afprøv rapporten.<br />
292<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
7. Rapport QT Grundlæggende funktioner<br />
Mål med lektionen<br />
At give deltagerne grundlæggende indsigt i opsætning af rapport-QT, samt viden om opsætning af<br />
brugernes muligheder.<br />
Efter lektionen skal kursisterne kunne:<br />
Opsætte rapport QT med ét kartotek<br />
Opsætte brugermulighederne i rapport-QT.<br />
QT generelt<br />
QT er en forkortelse for Query Tool, hvilket vil sige forespørgselsværktøj. Værktøjet anvendes til<br />
forespørgsler i databasen på lige fod med rapport-XAL.<br />
Selve QT-boksen minder mest om en promptboks med ledetekster og indtastningsfelter. Opbygningen<br />
er derimod helt anderledes.<br />
Eksempel på en QT<br />
Kartotek Afgrænsning Fra Til Status<br />
LagerKartotek Sortering..: Åben<br />
Filter.....: Åben<br />
Kørsler....: Skjul<br />
Varenummer.: Åben<br />
QT-værktøjet<br />
Værktøjet hjælper programmøren til at danne ensartede forespørgsler, og samtidig spares der en del<br />
programmeringsarbejde. Desuden får brugeren visse muligheder der ellers er meget besværlige at<br />
kode i en XAL-kørsel.<br />
Med hensyn til XAL-editoren findes denne i en søjle i udviklingsmenuen og som en del af<br />
rapportgeneratoren. Det samme gælder for QT-værktøjet. Det findes også som søjle i<br />
udviklingsmenuen og er integreret i rapportgeneratoren.<br />
To muligheder for anvendelse af QT-værktøjet<br />
Mulighed Anvendelse<br />
Selvstændig Proces Selvstændigt forespørgselsværktøj. Findes under QT i<br />
udviklingsmenuen.<br />
Integreret i<br />
Rapportgeneratoren<br />
Udtrukne data sendes til skærmen med PRINT.<br />
Integreret som en del af rapportgeneratoren. Findes under<br />
RAP i udviklingsmenuen.<br />
Udtrukne data udskrives i form af rapporter.<br />
De to QT’er har ikke noget med hinanden at gøre, men de er bygget ens op og fungerer ens, bortset<br />
fra at den ene skriver til skærmen, medens den anden sender sine data til rapporten.<br />
Denne lektion omhandler kun QT-værktøjet som en integreret del af rapportgeneratoren.<br />
293<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
QT i forhold til XAL<br />
QT’en kan sammenlignes med en XAL-kørsel, hvor nogle kommandoer som standard er indbygget som<br />
faste komponenter. Det er f.eks. ikke nødvendigt at angive SEARCH for at trække data fra et kartotek.<br />
Kartoteksnavnet indsættes blot i et felt i opsætningen af QT’en.<br />
Fordele og ulemper ved at anvendelse af QT<br />
Fordele<br />
Søgestrukturer skal ikke programmeres.<br />
Større frihed til ændring af afgrænsninger og sortering under selve afviklingen.<br />
Generelt mindre programmering.<br />
Dialogen omkring afgrænsningen af poster skal ikke programmeres.<br />
Dialogen bliver ensartet fra opgave til opgave.<br />
Ulemper<br />
Der er ikke muligt at styre logikken 100% i programmet.<br />
Det er ikke muligt at tilgå de værdier, der indtastes i afgrænsningsboksene.<br />
Tre hovedområder i rapportgeneratoren<br />
Rapportgeneratoren består altså ikke kun af hovedområderne Rapport-XAL og Rapport-definition, men<br />
også af et tredje hovedområde Rapport-QT.<br />
De tre hovedområder i rapportgeneratoren<br />
Område Anvendelse<br />
Rapport-XAL Datasøgning vha. XAL-kommandoer.<br />
Rapport-QT Datasøgning vha. QT-værktøjet.<br />
Rapport-definition Definition af linjetyper og opsætning af layout.<br />
Udtræk med XAL eller QT<br />
Data udtrækkes i databasen med enten Rapport-XAL eller Rapport-QT som illustreret i nedenstående<br />
figur.<br />
294<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Dataudtræk med XAL eller QT<br />
Når rapportgeneratoren vælges, vises Rapport-XAL og Rapport-definition samtidig. Rapport-QT skal<br />
derimod først åbnes med funktionen ’Hop til søgning’, ALT+F6.<br />
Områdernes placering i rapportgeneratoren ses i figuren herunder.<br />
Hovedområdernes placering i rapportgeneratoren<br />
Bemærk!<br />
Rapport-<br />
XAL<br />
Rapport-XAL<br />
Rapport-definition<br />
Ved oprettelse af nye rapporter er det valgfrit, hvilket hovedelement der anvendes først.<br />
XAL og QT i samme rapport<br />
Kartoteker<br />
Rapport-definition<br />
Rapport-QT<br />
(Kaldes med ALT+F6)<br />
Rapport-<br />
QT<br />
Der må ikke forekomme både Rapport-XAL og Rapport-QT i den samme rapport.<br />
Hvis begge dele forekommer samtidig, anvender systemet automatisk Rapport-XAL.<br />
295<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Systemet anvender Rapport-XAL hvis begge forefindes<br />
Rapport-<br />
XAL<br />
Kartoteker<br />
Rapport-definition<br />
Hvis begge værktøjer anvendes i samme rapport, er reglen den, at XAL får første prioritet og derfor<br />
anvendes. Det gælder også, hvis der blot er indsat en blank linje eller en kommentar i XAL’en.<br />
Oprettes der en Rapport-QT, og den ikke kan startes, er det vigtigt først at undersøge, om der evt.<br />
findes blanke linjer, kommentarer eller kodelinjer i Rapport-XAL.<br />
En rapport kan afprøves med ALT+R uden at være gemt, og derfor opdages en sådan fejl først ved<br />
afprøvningen, eller når rapporten gemmes. Når fejlen opstår vises nedenstående meddelelse på<br />
skærmen.<br />
Fejlmeddelelse ved både Rapport-XAL og Rapport-QT i samme rapport<br />
Rapporten ... har både søgning<br />
og ikke-tom rapport-editorbox.<br />
Kun rapport-editorboxen vil<br />
blive anvendt under afvikling.<br />
Rapport-<br />
QT<br />
Med søgning menes Rapport-QT, og med rapport-editorbox menes Rapport-XAL.<br />
Forskelle ved udsendelse af data til rapport<br />
Når der fra Rapport-XAL skal sendes data til en rapport, anvendes kommandoen OUTPUT med et<br />
kartoteksnavn.<br />
Kommandoen anvendes kun i Rapport-XAL. I QT’en anvendes der ingen kommando til dette. QT’en er<br />
implementeret på en sådan måde, at udtrukne data automatisk ledes videre til rapporten.<br />
296<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Dataudtræk med XAL eller QT<br />
QT værktøjets vinduer<br />
I QT-værktøjet anvendes flere vinduer med felter, der skal udfyldes for at opnå den ønskede<br />
funktionalitet i QT’en.<br />
Vinduer i QT-værktøjet<br />
Rapport-<br />
XAL<br />
OUTPUT<br />
OUTPUT<br />
Vinduer Anvendelse<br />
Kartoteker<br />
Rapport-definition<br />
Rapport-<br />
QT<br />
Afgrænsningsvinduet Viser de kartoteker der skal søges i. Felter til afgrænsning kan<br />
indsættes.<br />
(Kartotekerne indsættes i relationsvinduet.)<br />
Opsætningsvinduet Opsætning af selve afgrænsningsvinduet mht. overskrift,<br />
størrelse på afgrænsningsfelter o.a.<br />
Relationsvinduet Indsættelse af kartotek der skal søges i.<br />
Kartotekerne ses i afgrænsningsvinduet.<br />
(Ved flere kartoteker angives også felter, der skal relatere til<br />
hinanden).<br />
Sorteringsvinduet Indsættelse af felter eller indeks til sortering.<br />
297<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Vinduernes indbyrdes forhold<br />
SH+F2<br />
Relationssvindue<br />
SH+F2 = Oprette<br />
SH+F6 = Rette<br />
På de næste sider beskrives de forskellige vinduer.<br />
Afgrænsningsvinduet<br />
Afgrænsningsvindue<br />
Opsætningsvindue<br />
CTRL+F6<br />
Afgrænsningsvinduet er det vindue, brugeren ser, når QT’en afvikles. I vinduet ses f.eks. navnet på<br />
søgekartoteket og de felter, der kan afgrænses på.<br />
Opsætningen af vinduet foregår i rapportgeneratoren, hvor det åbnes med funktionstaster.<br />
Afgrænsningsvinduet når det er åbnet i rapportgeneratoren<br />
(XAL område)<br />
(Rapportområde)<br />
-Kartotek-Afgrænsning-Fra-------Til-------Status<br />
(Afgrænsningsvinduet i Rapport-QT)<br />
ENTER i Sortering- feltet<br />
Sorteringssvindue<br />
298<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Når afgrænsningsvinduet første gang åbnes, er det tomt og består kun af nogle søjleoverskrifter som i<br />
eksemplet herover.<br />
For at QT’en kan fungere skal vinduet først udfyldes med navne på det eller de kartoteker, der skal<br />
søges data ud fra. Desuden skal der også indsættes navne på felter, der skal anvendes til afgrænsning<br />
af posterne i de angivne kartoteker.<br />
Efterfølgende vises et eksempel på en færdig QT.<br />
Eksempel på afgrænsningsvindue<br />
Kartotek Afgrænsning Fra Til Status<br />
LagerKartotek Sortering..: Åben<br />
Filter.....: Åben<br />
Kørsler....: Skjul<br />
Varenummer.: Åben<br />
I eksemplet fremgår det, at det drejer sig om en søgning i kartoteket InvenTable, og at der er mulighed<br />
for at afgrænse på Varenummer-feltet (ItemNumber). Der er ikke angivet nogen sortering i<br />
Sortering-feltet.<br />
Vedr. søjlen Status henvises til afsnittet ’Brugernes muligheder i Rapport-QT’.<br />
Inden kartotekerne kan ses i afgrænsningsvinduet, skal de opsættes i Relationsvinduet. Dette behandles<br />
i næste afsnit.<br />
Relationsvinduet (ved søgning i ét kartotek)<br />
Relationsvinduet består af forskellige felter, der benyttes til styring og angivelse af de kartoteker, der<br />
skal søges i.<br />
Vinduet anvendes forskelligt, afhængigt af om der skal søges i ét eller flere kartoteker. I denne lektion<br />
behandles vinduets anvendelse i forbindelse med søgning i ét kartotek.<br />
Nedenstående figur viser relationsvinduet, hvor de felter, der anvendes ved søgning i ét kartotek, er<br />
fremhævet med grå skygge.<br />
Relationsvinduet ved søgning i ét kartotek<br />
Relater<br />
Output<br />
Tilføj<br />
Felt Felt<br />
Altid Før join<br />
Alle felter<br />
Bemærk at alle felter er synlige, men at kun to af dem skal anvendes.<br />
Kartoteksnavn<br />
Alle felter<br />
Samme felter<br />
Ingen felter<br />
299<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Når vinduet åbnes, er cursoren altid i det øverste felt i højre side. Her indsættes navnet på det kartotek,<br />
der skal søges i.<br />
I det nederste felt med ledeteksten Tilføj, angives om brugeren selv må have lov til at tilføje felter til<br />
afgrænsning, når QT’en afvikles.<br />
Brugerens muligheder for tilføjelse af felter til afgrænsning i QT’en<br />
Mulighed Anvendelse<br />
Alle felter Brugeren har mulighed for at tilføje alle de felter der findes i<br />
kartoteket. Dette er default.<br />
Samme felter Brugeren har kun mulighed for at tilføje de samme felter, som<br />
programmøren i forvejen har sat på som afgrænsningsfelter.<br />
Ingen felter Brugeren må slet ikke tilføje nogen felter, og kan således kun<br />
afgrænse på de felter, programmøren har indsat i QT’en.<br />
Opsætningsvinduet<br />
Opsætningsvinduet anvendes til at bestemme, hvordan afgrænsningsvinduet skal se ud mht. overskrift,<br />
bredde på kolonner, om søgekartotekets navn skal vises for brugeren o.a.<br />
Opsætningsvindue<br />
Overskrift.....:<br />
Bredder Kartoteker 0 Fra<br />
Afgrænsning 0 Til<br />
Vis kartoteker.:<br />
Vis filter.....:<br />
Globale formler:<br />
Lagerliste<br />
Ja<br />
Ja<br />
Formler<br />
Eksempel på opsætning til nedenstående afgrænsningsvindue.<br />
Vinduet åbnes ved kald fra afgrænsningsvinduet.<br />
Afgrænsningsvindue med overskrift<br />
Lagerliste<br />
-Kartotek Afgrænsning Fra Til<br />
LagerKartotek Sortering..:<br />
Filter ....:<br />
Kørsler ...:<br />
Varenummer.:<br />
Der er følgende muligheder i opsætningen.<br />
15<br />
15<br />
300<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Muligheder i opsætningsvinduet<br />
Mulighed Anvendelse<br />
Overskrift QT’ens overskrift. Indtastes som fri tekst.<br />
Bredder Bredden på søjlerne Kartoteker, Afgrænsning, Fra og Til.<br />
Angives i form af antal karakterer.<br />
Vis kartoteker Ja eller Nej (default) til om kartoteksnavnet skal vises for<br />
brugeren, når denne anvender QT’en.<br />
Vis filter Ja eller Nej til om linjen med filteret skal vises for brugeren,<br />
når QT’en anvendes (Behandles ikke i denne lektion).<br />
Globale formler Dette felt vises ikke for brugeren, men er beregnet til at åbne<br />
for en liste over triggere til indtastning af ekstra kode<br />
(Behandles ikke i denne lektion).<br />
Sorteringsvinduet<br />
Sorteringsvinduet består af tre felter, der anvendes til sortering af poster, der fremfindes, når en QT<br />
afvikles.<br />
Der kan sorteres på felter og faste indekser. Felter kan sorteres efter stigende eller faldende værdi.<br />
Sorteringsvindue<br />
Felt Retning<br />
Tvunget Index<br />
Muligheder i sorteringsvinduet<br />
Mulighed Anvendelse<br />
Felt<br />
Angivelse af kartoteksfelter at sortere på.<br />
Svarer til ORDER i XAL.<br />
Retning Sorteringsfølge for indsatte kartoteksfelter.<br />
Svarer til ASCENDING og DESCENDING i XAL.<br />
Tvunget indeks Angivelse af et fast indeks.<br />
Svarer til USING i XAL.<br />
301<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Procedure for QT til søgning i ét kartotek.<br />
Start afgrænsningsvinduet fra en ny eller eksisterende rapport i rapportgeneratoren.<br />
Vælg opsætningsvinduet og indsæt overskrift og evt. vis kartoteker.<br />
Vælg relationsvinduet og indsæt søgekartotek. Giv evt. bruger rettigheder til selv at<br />
tilføje afgrænsningsfelter.<br />
Tilbage i afgrænsningsvinduet tilføjes afgrænsningsfelter og QT’en go<strong>dk</strong>endes.<br />
Eksempel på Rapport-XAL og Rapport-QT<br />
Til sammenligning vises efterfølgende eksempler på henholdsvis en rapport-XAL og en rapport-QT.<br />
Begge opsætninger resulterer i samme rapport. Det vil sige, at Body linjen i layoutområdet er ens i<br />
begge tilfælde. Kun søgningen er forskellig.<br />
Rapport-XAL<br />
Eksempel på Rapport-XAL med promptboks. Indtastede værdier anvendes i søgeløkken.<br />
C5 vers. 2012 -> Eksempel på opsætning i rapport-XAL<br />
STR 10 &FraVare<br />
STR 10 &TilVare<br />
PROMPT ”Lagerliste med kostpriser”,,,<br />
”Fra ...: ” GET (&FraVare REF InvenTable.ItemNumber),<br />
”Til ...: ” GET (&TilVare REF InvenTable.ItemNumber)<br />
INPUT<br />
SEARCH InvenTable<br />
WHERE ItemNumber >= &FraVare AND ItemNumber
C5 vers. -> 4.1 Eksempel på opsætning i rapport-XAL<br />
STR 10 &FraVare<br />
STR 10 &TilVare<br />
PROMPT ”Lagerliste med kostpriser”,,,<br />
”Fra ...: ” GET (&FraVare REF LagKart.VareNummer),<br />
”Til ...: ” GET (&TilVare REF LagKart.VareNummer)<br />
INPUT<br />
SEARCH LagKart<br />
WHERE VareNummer >= &FraVare AND VareNummer
Opsætningsvindue<br />
(Indsættelse af overskrift og evt. vis kartotek CTRL+F6)<br />
Overskrift.....:<br />
Bredder Kartoteker 0 Fra<br />
Afgrænsning 0 Til<br />
Vis kartoteker.:<br />
Vis filter.....:<br />
Globale formler:<br />
C5 vers. 2012 -> Relationsvindue<br />
(Valg af kartotek til søgning SH+F2)<br />
Relater<br />
Output<br />
Tilføj<br />
InvenTable<br />
Felt Felt<br />
123456789012345<br />
C5 vers. -> 4.1 Relationsvindue<br />
(Valg af kartotek til søgning SH+F2)<br />
Relater<br />
Output<br />
Tilføj<br />
Altid Før join<br />
Alle felter<br />
Lagerliste med kostpriser<br />
Nej<br />
Nej<br />
Formler<br />
15<br />
15<br />
LagKart<br />
Felt Felt<br />
123456789012345 Kart<br />
Altid Før join<br />
Alle felter<br />
304<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Afgrænsningsvinduet<br />
(Tilføje afgrænsningsfelter og go<strong>dk</strong>ende QT’en)<br />
Kartotek Afgrænsning Fra Til Status<br />
Lagerkartotek Sortering..: Åben<br />
Filter.....: Åben<br />
Kørsler....: Skjul<br />
Varenummer.: Åben<br />
Varenummer-feltet (ItemNumber) er indsat som afgrænsningsfelt.<br />
På næste side vises det færdige afgrænsningsvindue, der svarer til promptboksen i Rapport-XAL.<br />
Det færdige afgrænsningsvindue (som brugeren anvender det)<br />
Afgrænsning Fra Til<br />
Sortering..:<br />
Varenummer.:<br />
Det er ikke muligt for brugerne at ændre på promptbokse. De kan imidlertid ændre visse ting i QTbokse.<br />
I næste afsnit behandles brugernes muligheder for at ændre i QT boksen under afviklingen.<br />
Brugernes muligheder i Rapport-QT<br />
Når der anvendes Rapport-QT har brugerne nogle fordele, der ikke findes i Rapport-XAL. Brugeren kan<br />
f.eks. selv tilføje og slette afgrænsninger, afhængigt af om programmøren har åbnet for denne<br />
mulighed.<br />
De enkelte muligheder beskrives i nedenstående skema.<br />
Brugerens muligheder ved anvendelse af Rapport-QT<br />
Mulighed Anvendelse<br />
Tilføj afgrænsning Kan selv tilføje afgrænsninger inden for de muligheder<br />
programmøren har opsat i relationsvinduet.<br />
Fjern afgrænsning Kan selv fjerne både egne og programmørens afgrænsninger.<br />
Kopiere feltindhold Kan kopiere feltindhold fra et afgrænsningsfelt til et andet.<br />
Skift mellem 1 og 2<br />
afgrænsninger<br />
Kan bestemme om der skal være afgrænsningsfelt både i Fra og<br />
Til kolonnen eller kun i Fra kolonnen.<br />
Opsætning Der kan ændre bredde på kolonner via opsætning.<br />
Kan vælge at vise kartoteker og filter.<br />
Slet brugerrettelser Kan slette alle sine egne ændringer i forhold til den oprindelige<br />
opsætning udført af programmøren.<br />
305<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Afgrænsningsvindue opsat af programmør<br />
Afgrænsning Fra Til<br />
Sortering..:<br />
Varenummer.:<br />
Afgrænsningsvindue ændret af bruger under afvikling<br />
Lagerliste med kostpriser<br />
Kartotek Afgrænsning Fra Til<br />
Lagerkartotek Sortering..:<br />
Varenummer.: 10000<br />
10000<br />
Varenummer.: 18000<br />
20000<br />
Varegruppe.: 10<br />
-----<br />
Vis kartotek<br />
Bredde på<br />
kolonner<br />
CTRL+F6<br />
Det fremgår, at der findes visse standard opsætningsmuligheder for brugerne.<br />
Brugernes mulighed for at tilføje afgrænsningsfelter kan begrænses i relationsvinduet.<br />
Ud over ovenstående tiltag for at styre brugernes muligheder, kan de enkelte linjer også styres. Det<br />
foregår i afgrænsningsvinduet i søjlen Status.<br />
Afgrænsningsvindue med søjlen Status<br />
Lagerliste med kostpriser<br />
Tilføj afgrænsning F2 Slet<br />
afgrænsning ALT+F9 1 eller 2 felter<br />
Kan begrænses i<br />
relationsvinduet<br />
ALT+L<br />
Kopiere felt<br />
ALT+C<br />
Kartotek Afgrænsning Fra Til Status<br />
Lagerkartotek Sortering..: Åben<br />
Filter.....: Åben<br />
Kørsler....: Skjul<br />
Varenummer.: Åben<br />
306<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Søjlen status har tre valgmuligheder.<br />
Mulighed Anvendelse<br />
Åben<br />
Lås<br />
Skjul<br />
Bruger kan indtaste i felter.<br />
Bruger kan desuden tilføje og slette felter, hvis dette er åbent i<br />
relationsvinduet.<br />
Bruger kan se værdier som programmøren har indlagt i forvejen,<br />
men kan ikke ændre disse værdier.<br />
Bruger kan selv tilføje afgrænsningsfelter.<br />
Bruger kan ikke se værdier indsat i forvejen.<br />
Bruger kan heller ikke tilføje nye afgrænsningsfelter, selv om det<br />
er lovligt i relationsvinduet.<br />
307<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Rapport QT Grundlæggende funktioner<br />
Opgave 1: Rapport QT til ’Vareudlån’<br />
Formål med opgaven<br />
At oprette Rapport QT til en rapport med navnet ’Vareudlån’. Rapporten er en liste over udlånte varer i<br />
kartoteket UDLUdlånsPost.<br />
Huskelister<br />
Rapport QT – Oprette første kartotek<br />
Beskrivelse<br />
Der skal oprettes Rapport QT til en rapport med navnet ’Vareudlån’.<br />
Data til rapporten udtrækkes fra kartoteket UDLUdlånsPost. Der indsættes afgrænsningsfelter til<br />
felterne UdlånsNr og VareNr.<br />
1 Opret en ny rapport.<br />
2 Vælg Rapport QT og giv QT’ overskriften: Vareudlån.<br />
3 Tilføj kartoteket UDLUdlånsPost.<br />
4 Tilføj afgrænsningsfelterne UdlånsNr og VareNr.<br />
5 Go<strong>dk</strong>end opsætningen af QT’en og luk rapporten.<br />
6 Afprøv om QT boksen ser rigtig ud.<br />
Forløb √<br />
308<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgave 2: Rapport-layout til ’Vareudlån’<br />
Formål med opgaven<br />
At oprette en Bodylinje og Page headere til rapporten ’Vareudlån’.<br />
Beskrivelse<br />
I rapporten ’Vareudlån’, fra forrige opgave, skal der oprettes en enkelt Bodylinje med felterne<br />
UdlånsNr, VareNr, VareNavn og Status. Desuden skal der oprettes et felt, der henter CostPrise fra<br />
InvenTable.<br />
Der skal også oprettes Page headere med overskrifter til felterne.<br />
1 Vælg rapporten ’Vareudlån’ fra forrige opgave.<br />
Forløb √<br />
2 Opret en enkelt Bodylinje til kartoteket UDLUdlånsPost og indsæt felterne UdlånsNr,<br />
VareNr, VareNavn og Status.<br />
Indsæt til sidst på linjen et felt, hvor feltudtrykket består af et direkte opslag, der<br />
henter feltet CostPrice på kartoteket InvenTable<br />
3 Indsæt en Page header linje med overskrifter til felterne.<br />
Venstre- og højrestil overskrifterne, så de passer til værdierne i felterne.<br />
4 Indsæt en Page header linje med tegnede streger under overskrifterne.<br />
Tilpas stregerne efter felternes længde.<br />
5 Go<strong>dk</strong>end rapporten og afprøv rapporten.<br />
309<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgave 3: Begrænsninger i QT til ’Vareudlån’<br />
Formål med opgaven<br />
At indsætte begrænsninger i QT’en til rapporten ’Vareudlån’, så brugerne kun kan tilføje de samme<br />
felter, som du har indsat. Desuden skal det skjules, så brugerne ikke kan se sortering og filter.<br />
Beskrivelse<br />
I rapporten ’Vareudlån’ fra forrige opgave, skal der i QT’en opsættes begrænsninger for brugerne, så<br />
de kun kan tilføje de samme felter, som de ser på QT’en, når den afvikles.<br />
Felterne sortering og filter skal desuden skjules for brugerne.<br />
1 Vælg rapporten ’Vareudlån’ fra forrige opgave.<br />
Forløb √<br />
2 Indsæt begrænsninger i Rapport QT, så brugerne kun kan tilføje samme felter, som<br />
de ser på QT’en.<br />
3 Skjul Sortering og Filter i Rapport QT, så brugerne ikke kan se dem.<br />
4 Go<strong>dk</strong>end rapporten og afprøv om afgrænsningerne virker.<br />
310<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
8. Rapport QT filtrering og sortering<br />
Mål med lektionen<br />
Formålet med denne lektion er at give deltagerne kendskab til filtrering og sortering i Rapport QT.<br />
Efter lektionen skal kursisterne kunne:<br />
Filtrere poster i Rapport QT<br />
Sortere poster i Rapport QT<br />
og kende:<br />
Forskel på Build-filter og Run-filter.<br />
Generelt<br />
Ved filtrering i Rapport QT forstås muligheden for at indlægge kode, der er bestemmende for, om de<br />
udvalgte poster skal sendes videre til Rapport Definition.<br />
Sortering i Rapport QT anvendes til at bestemme, den rækkefølge posterne udleveres på.<br />
Filtrering<br />
Filtrering i Rapport QT giver yderligere mulighed for at udvælge, de poster der skal med på en rapport.<br />
Den anden mulighed er afgrænsningsfelterne, som både programmør og bruger kan indsætte.<br />
Filtrering foregår i afgrænsningsvinduet i Rapport QT i feltet ’Filter’.<br />
Afgrænsningsvindue i Rapport QT med feltet ’Filter’<br />
Kartotek Afgrænsning Fra Til Status<br />
Debitorkartotek Sortering..: Åben<br />
Filter.....: Åben<br />
Kørsler....: Skjul<br />
Kontonummer: Åben<br />
I ovenstående eksempel, på et afgrænsningsvindue til debitorkartoteket, ses både feltet Filter og et<br />
afgrænsningsfelt i form af kontonummerfeltet.<br />
Det skal bemærkes at afgrænsningsvinduet vises, som det ser ud under opsætningen. Under<br />
afviklingen ændrer vinduet form, idet kolonnen ’Status’ ikke vises, ligesom der er mulighed for at<br />
begrænse, hvad brugeren ellers må se under afviklingen.<br />
Afgrænsningsfelter<br />
I kontonummer-feltet kan der vælges fra og til kontonummer og hvis der skulle være behov for flere<br />
intervaller af kontonumre, kan der blot tilføjes et eller flere afgrænsningsfelter mere på feltet.<br />
Filter<br />
Filter-feltet giver en anden mulighed for filtrering af posterne, idet der her kun indsættes betingelser,<br />
der skal være opfyldt for at posterne kommer med i rapporten.<br />
Der kan således ikke indtastes XAL kode med kommandoer, men udelukkende betingelser.<br />
311<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Filtre i Rapport QT<br />
Der findes to filtre i Rapport QT, et der anvendes under opsætningen og et der anvendes under<br />
afviklingen.<br />
Filtre i Rapport QT<br />
Filter Anvendelse<br />
Build-filter Kan kun udfyldes under opsætningen. Kan ikke ses under afvikling.<br />
Run-filter Kan kun udfyldes under afviklingen. Ses ikke under opbygningen.<br />
Build-filter<br />
Opsætning af Build-filter<br />
Opsætning af Build-filter udføres i afgrænsningsvinduet, ved at placere cursoren i feltet Filter og taste<br />
ENTER, hvorved der åbnes en editorboks med overskriften ’Build-filter’.<br />
Selv om det er en editorboks, kan der alligevel kun indtastes betingelser, som de der f.eks. anvendes i<br />
IF strukturer.<br />
Eksempel på opsætning af Build-filter i afgrænsningsvinduet<br />
I ovenstående eksempel er der, i filteret, indsat betingelsen ’Saldofelt0’.<br />
Da der ikke er indsat værdier i afgrænsningsfeltet konto, medtages alle kontonumre, dog træder<br />
filteret i kraft og medfører, at kun poster der opfylder betingelsen i Build-filteret, medtages.<br />
Run-filter<br />
Opsætning af Run-filter<br />
Build-filter<br />
saldofelt0<br />
ENTER<br />
Kartotek Afgrænsning Fra Til Status<br />
Debitorkartotek Sortering..: Åben<br />
Filter.....: Åben<br />
Kørsler....: Skjul<br />
Konto......: Åben<br />
Opsætning af run-filter udføres i afgrænsningsvinduet under afviklingen, ved at placere cursoren i<br />
feltet Filter og taste ENTER. Til forskel fra opbygningen af Rapport QT’en, åbnes denne gang en<br />
editorboks med overskriften ’Run-filter’.<br />
Selv om det er en editorboks, kan der alligevel kun indtastes betingelser, som de der f.eks. anvendes i<br />
IF strukturer.<br />
312<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Eksempel på Run-filter under afvikling af afgrænsningsvinduet<br />
I ovenstående eksempel starter feltet Filter med at være tomt. Det viser at Build-filteret ikke kan ses.<br />
Det filter, der ses under afviklingen, er således Run-filteret.<br />
Under opbygningen kan der således opbygges et filter, der ikke kan ændres eller ses under afviklingen.<br />
Til gengæld kan brugeren selv tilføje sine egne betingelser i Run-filteret.<br />
Bemærk! Build-filterets betingelser anvendes før Run-filterets.<br />
Dette kan have betydning i visse tilfælde. Hvis der i Build-filteret f.eks. opstilles betingelsen<br />
’Saldofelt>2000’, og der i Run-filteret opstilles betingelsen ’Saldofelt>1000’, giver dette kun poster, der<br />
tilsvarer betingelsen fra Build-filteret.<br />
Der medtages altså ikke poster, der har mindre saldo end 2000, selv om det anfordres i Run-filteret.<br />
Sortering<br />
Sortering udføres enten underopsætning eller afvikling. I begge tilfælde foregår det på samme måde i<br />
samme vindue.<br />
Opsætningen foregår fra Afgrænsningsvinduet i Rapport QT, ved at placere cursoren i feltet Sortering<br />
og taste ENTER, hvorved Sorteringsvinduet åbnes.<br />
Sorteringsvinduet<br />
Sorteringsvinduet består af tre felter der anvendes til sortering af poster.<br />
Der kan sorteres på felter og faste indekser, og felter kan sorteres stigende eller faldende.<br />
Sorteringsvindue<br />
Run-filter<br />
KreditMax>1000<br />
Felt Retning<br />
ENTER<br />
Kartotek Afgrænsning Fra Til<br />
DebitorKartotek Sortering..:<br />
Filter.....:<br />
Konto......:<br />
313<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Tvunget Index<br />
Muligheder i sorteringsvinduet<br />
Mulighed Anvendelse<br />
Felt Angivelse af kartoteksfelter at sortere på<br />
Svarer til ORDER eller ORDER BY i XAL<br />
Retning Sorteringsfølge for indsatte kartoteksfelter<br />
Svarer til ASCENDING og DESCENDING i XAL<br />
Tvunget indeks Angivelse af et fast indeks<br />
Anvendelse af sorteringsvinduet<br />
Svarer til USING eller USING INDEX i XAL<br />
Åbning af sorteringsvindue under afvikling af Rapport QT<br />
Liste<br />
over<br />
felter<br />
Liste<br />
over<br />
indekser<br />
ALT+ H<br />
ALT+H<br />
Kartotek Afgrænsning Fra Til<br />
Debitorkartotek Sortering..:<br />
Filter.....:<br />
Konto......:<br />
Sortering<br />
Felt Retning<br />
Tvunget Index<br />
ENTER<br />
314<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Rapport QT filtrering og sortering<br />
Opgave 1: Filter og sortering efter index i QT til ’Vareudlån’<br />
Formål med opgaven<br />
At anvende filter og sortering i QT’en til rapporten ’Vareudlån’.<br />
Beskrivelse<br />
Der skal indsættes filter i Rapport QT, så kun varer med status Udlånt vises.<br />
Desuden skal linjerne sorteres efter indexet UDLUdlVarIdx, der sorterer efter udlånsnummer og<br />
varenummer.<br />
1 Vælg rapporten ’Vareudlån’ fra forrige opgave.<br />
Forløb √<br />
2 Indsæt et filter så kun varer med status Udlånt medtages i rapporten.<br />
3 Indsæt sortering så varerne sorteres efter udlånsnummer og varenummer. Anvend<br />
indexet UDLUdlVarIdx.<br />
4 Go<strong>dk</strong>end rapporten og afprøv.<br />
315<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgave 2: Sortering efter felt i QT til ’Vareudlån’<br />
Formål med opgaven<br />
At anvende sortering efter et felt i QT’en til rapporten ’Vareudlån’.<br />
Beskrivelse<br />
Der skal arbejdes videre med rapporten fra forrige opgave, idet der her skal sorteres efter et bestemt<br />
felt i stedet for et index.<br />
1 Vælg rapporten ’Vareudlån’ fra forrige opgave.<br />
Forløb √<br />
2 Indsæt en sortering så varerne sorteres alene efter feltet VareNr.<br />
3 Hvis der er filter i QT’en, skal det fjernes, så alle varer medtages.<br />
4 Go<strong>dk</strong>end rapporten og afprøv.<br />
316<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
9. Subtotaler automatiske<br />
Mål med lektionen<br />
At give deltagerne indsigt i anvendelse af automatiske subtotaler i rapporter.<br />
Efter lektionen skal kursisterne kunne:<br />
Opsætter felter til automatiske subtotaler<br />
Anvende automatiske ledetekster foran subtotaler.<br />
Automatiske subtotaler generelt<br />
Automatiske subtotaler dannes uden erklæring af variabler, og sammentælling udføres uden<br />
tildeling af værdier til variabler.<br />
Automatiske subtotaler anvendes både sammen med Rapport-XAL og Rapport-QT.<br />
Procedure for brug af automatiske subtotaler<br />
Ved automatiske subtotaler skal følgende tre trin gennemføres.<br />
Procedure for anvendelse af automatiske totaler<br />
Trin Anvendelse<br />
1 Opsætning af felt Opsætning af det eller de felter der skal dannes subtotal for.<br />
2 Opsætning af<br />
udskrivningsmåde<br />
Om og hvordan totalen skal udskrives.<br />
3 Opsætning af ledetekst Opsætning af hvilken type ledetekst der skal anvendes til<br />
totalen.<br />
De tre trin behandles efterfølgende.<br />
Opsætning af felt<br />
Felter med subtotal sættes op i layoutområdet i Rapport-definition. Feltet åbnes og i menuen Ret felt i<br />
menupunktet Subtotaler indsættes en af summeringsmetoderne fra nedenstående skema.<br />
Metoder til summering<br />
Metode Anvendelse<br />
Sum alle Alle poster summeres.<br />
Sum positive Kun positive poster summeres.<br />
Sum negative Kun negative poster summeres.<br />
Opsætningen foregår som vist i nedenstående figur.<br />
317<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. 2012 -> Opsætning af subtotal på feltet AmountMst<br />
PgHd<br />
PgHd<br />
Body<br />
VendTrans<br />
Konto Dato Bilag SaldoDkr<br />
---------- -------- ---------- -----------<br />
Account Date_ Voucher AmountMst<br />
Efterfølgende vises eksempler på anvendelse af de tre metoder. Eksemplerne har ovenstående<br />
rapportdefinition som udgangspunkt.<br />
Summering udføres på AmountMst-feltet. De efterfølgende rapporter viser resultatet afhængigt af<br />
den valgte metode i feltet.<br />
C5 vers. -> 4.1 Opsætning af subtotal på feltet BeløbDkk<br />
PgHd<br />
PgHd<br />
Body<br />
KrePost<br />
Opsæt subtotal<br />
Konto Dato Bilag SaldoDkr<br />
---------- -------- ---------- -----------<br />
Konto Dato Bilag BeløbDkk<br />
Opsæt subtotal<br />
INSERT<br />
INSERT<br />
Ret felt<br />
...<br />
...<br />
...<br />
Subtotaler<br />
Sum alle<br />
Sum positive<br />
Sum negative<br />
Efterfølgende vises eksempler på anvendelse af de tre metoder. Eksemplerne har ovenstående<br />
rapportdefinition som udgangspunkt.<br />
Summering udføres på BeløbDkk-feltet. De efterfølgende rapporter viser resultatet afhængigt af den<br />
valgte metode i feltet.<br />
318<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012<br />
F6<br />
F6<br />
Ret felt<br />
...<br />
...<br />
...<br />
Subtotaler<br />
Sum alle<br />
Sum positive<br />
Sum negative
Resultat ’Sum Alle’<br />
Konto Dato Bilag Saldo DKK<br />
--------- -------- ---------- -----------<br />
971249987 23/05-97 500016 -222.693,75<br />
971249987 20/10-97 70025 222.693,75<br />
971249987 04/01-98 500025 -26.723,25<br />
971249987 02/03-98 70056 26.723,25<br />
971249987 31/03-98 500050 -93.531,38<br />
-----------<br />
Grandtotal -93.531,38<br />
===========<br />
I dette eksempel dannes der en samlet sum for alle poster både positive og negative.<br />
Ved at anvende Sum positive eller Sum negative, vil selve rapporten ligne ovenstående, idet der kun<br />
udskrives en total i rapporten. Der kan dog godt anvendes flere metoder samtidig, hvilket fremgår af<br />
de to efterfølgende eksempler.<br />
Når der angives mere end en metode på samme felt, vil der blive udskrevet en total for enkelt hver<br />
metode.<br />
Resultat ’Sum positive’ og ’Sum negative’ samtidig<br />
Konto Dato Bilag Saldo DKK<br />
--------- -------- ---------- -----------<br />
971249987 23/05-97 500016 -222.693,75<br />
971249987 20/10-97 70025 222.693,75<br />
971249987 04/01-98 500025 -26.723,25<br />
971249987 02/03-98 70056 26.723,25<br />
971249987 31/03-98 500050 -93.531,38<br />
-----------<br />
Grandtotal 249.417,00<br />
-342.948,38<br />
===========<br />
I dette eksempel dannes der to subtotaler, en for positive og en for negative tal.<br />
I næste eksempel anvendes alle metoder samtidig.<br />
Sum alle<br />
Sum positive<br />
Sum negative<br />
319<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Resultat alle metoder samtidig<br />
Konto Dato Bilag Saldo DKK<br />
--------- -------- ---------- ------------------------<br />
971249987 23/05-97 500016 -222.693,75<br />
971249987 20/10-97 70025 222.693,75<br />
971249987 04/01-98 500025 -26.723,25<br />
971249987 02/03-98 70056 26.723,25<br />
971249987 31/03-98 500050 -93.531,38<br />
------------------------<br />
Grandtotal Sum positive 249.417,00 -93.531,38<br />
Sum alle<br />
Sum negative<br />
-342.948,38<br />
========================<br />
Bemærk at værdien for Sum alle (-93.531,38) i eksemplet udskrives på linjen over værdien for Sum<br />
negative (-342.948,38).<br />
Desuden udskrives beløbs-feltet med negativ forskydning. Dette er nødvendigt, for at kunne se<br />
værdien for Sum alle. Negativ forskydning udføres i opsætningen på feltet i format i menuen Ret felt .<br />
Hvis der ikke anvendes negativ forskydning, eller den negative forskydning ikke er stor nok, vil værdien<br />
for Sum alle blive helt eller delvist overskrevet af værdien for Sum positive.<br />
I alle de ovenstående eksempler udskrives ledeteksten Grandtotal foran totalerne.<br />
Opsætning af udskrivningsmåde<br />
Inden der kan udskrives automatiske totaler på rapporter, skal der også vælges udskrivningsmåde. Det<br />
vil sige, at der skal vælges, om rapporten skal udskrives med eller uden totaler.<br />
Opsætningen foregår i Rapport-definition i billedet Opsætning eller under afviklingen af rapporten i<br />
billedet Udskriftsmuligheder. I begge billeder findes Subtotaler-feltet, der kan åbne for et nyt billede<br />
med kartoteksnavnet som overskrift.<br />
I dette billedet kan der udføres en nærmere definition af rapportens udseende, når der udskrives med<br />
totaler. Billedet indholder følgende felter.<br />
320<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Felter ved udskrivning af totaler<br />
Felter Anvendelse<br />
Udskriv Subtotal Ja eller Nej om subtotalen skal udskrives<br />
Udskriv kun totaler Ja eller Nej om der KUN skal udskrives totaler<br />
Niveau Med et tal angives, hvilket niveau der skal udskrives totaler<br />
for. Niveauet fremgår af valgt index eller egen sortering i<br />
Rapport-XAL eller rapport-QT.<br />
Linjeskift Hvor mange linjeskift der skal være efter totalen<br />
Sideskift efter subtotal Ja eller Nej om der skal skiftes side efter subtotalen<br />
Nulstil efter udskrift Ja eller Nej om totalen skal nulstilles efter udskrift<br />
Skriv total hvis kun een Ja eller Nej om totalen også skal udskrives, hvis der kun er een<br />
total.<br />
Gentag ens totaler Ja eller Nej om totalen skal gentages, hvis samme total har<br />
været udskrevet lige før.<br />
Linje over subtotal Hvordan linjen over subtotalen skal se ud.<br />
Linje under subtotal Hvordan linjen under subtotalen skal se ud.<br />
Linje under grandtotal Hvordan linjen under grandtotalen skal se ud.<br />
Det vigtigste felt er Udskriv subtotal, der skal besvares med Ja eller Nej. Feltet SKAL besvares med Ja<br />
for at udskrive totaler. De øvrige felter påvirker rapportens udseende i større eller mindre grad.<br />
Opsætning af automatisk ledetekst<br />
Teksten i automatiske ledetekster afhænger af, hvilke niveauer der udskrives subtotaler for.<br />
Niveau<br />
Niveauer opstår når der sorteres i rapporter, idet hvert felt der sorteres på svarer til et niveau.<br />
Niveau Felt<br />
0 Intet felt (giver grandtotal)<br />
1 Første felt i sorteringsrækkefølge<br />
2 Andet felt i sorteringsrækkefølge<br />
Osv. Osv.<br />
Sortering<br />
Sortering kan opsættes i:<br />
Rapport-XAL i søgeløkker med kommandoerne USING eller ORDER<br />
Rapport-QT i Sortering-feltet.<br />
321<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Tekst<br />
Der er to opsætninger til automatiske ledetekster<br />
Kopi af linje<br />
Feltnavn værdi.<br />
I begge opsætninger afhænger teksten af, hvilket niveau der udskrives subtotaler for. De automatiske<br />
ledetekster fremgår af nedenstående skema.<br />
Indhold af automatiske ledetekster<br />
Opsætning Niveau 0 (grandtotal) Niveau 1 og op<br />
Kopi af linje Ingen ledetekst<br />
Ved talfelter der ikke summeres<br />
udskrives tallet 0 på samme linje<br />
som totalen.<br />
Feltnavn værdi Udskriver som ledetekst ordet<br />
Grandtotal.<br />
Udskriver som ledetekst den<br />
aktuelle værdi fra Niveau-feltet.<br />
Ved talfelter, der ikke summeres,<br />
udskrives tallet 0 på samme linje<br />
som totalen.<br />
Udskriver som ledetekst Niveaufeltets<br />
navn efterfulgt af den<br />
aktuelle værdi fra feltet.<br />
Ledetekster udskrives når Niveau-felter skifter værdi og subtotalen udskrives.<br />
Opsætning af ledetekst, niveau og om totaler skal udskrives fremgår af nedenstående skema.<br />
322<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opsætning af ledetekst og udskrivningsmåde<br />
Defaultværdier<br />
De værdier, der indsættes under opsætningen, fungerer som default i billedet Udskriftsmuligheder, når<br />
dette vises under afviklingen.<br />
Eksempler<br />
Rapport-definition<br />
CTRL+F6<br />
Subtotal linje.:<br />
Subtotal ......: Vælg<br />
Udskriftsmuligheder<br />
(under afvikling)<br />
Subtotal ......: Vælg<br />
Eksempel med ’Kopi af linje’ og niveau 0<br />
Opsætning<br />
ENTER<br />
ENTER<br />
ALT+H<br />
Konto Dato Bilag SaldoDkr<br />
--------- -------- ---------- -----------<br />
971249987 23/05-97 500016 -222.693,75<br />
971249987 20/10-97 70025 222.693,75<br />
971249987 04/01-98 500025 -26.723,25<br />
971249987 02/03-98 70056 26.723,25<br />
971249987 31/03-98 500050 -93.531,38<br />
-----------<br />
0 -93.531,38<br />
===========<br />
Kopi af linje<br />
Feltnavn værdi<br />
KartoteksNavn<br />
Udskriv subtotal: JA<br />
Niveau .........:<br />
I dette eksempel udskrives totalen uden ledetekst og under søjlen bilag skrives et 0.<br />
323<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Eksempel med ’Feltnavn værdi’ og niveau 0<br />
Konto Dato Bilag Saldo Dkr<br />
--------- -------- ---------- -----------<br />
971249987 23/05-97 500016 -222.693,75<br />
971249987 20/10-97 70025 222.693,75<br />
971249987 04/01-98 500025 -26.723,25<br />
971249987 02/03-98 70056 26.723,25<br />
971249987 31/03-98 500050 -93.531,38<br />
-----------<br />
Grandtotal -93.531,38<br />
===========<br />
I dette eksempel udskrives totalen med ledeteksten Grandtotal, og der er intet 0 under kolonnen Bilag.<br />
Eksempel med ’Kopi al linje’ og niveau 1<br />
Konto Dato Bilag SaldoDkr<br />
---------- -------- ---------- -----------<br />
971249987 23/05-97 500016 –222.693,75<br />
971249987 20/10-97 70025 222.693,75<br />
971249987 04/01-98 500025 -26.723,25<br />
971249987 02/03-98 70056 26.723,25<br />
971249987 31/03-98 500050 -93.531,38<br />
-----------<br />
971249987 0 -93.531,38<br />
-----------<br />
7147274141 30/05-94 500018 –395.160,00<br />
7147274141 20/10-94 70026 395.160,00<br />
7147274141 03/01-95 500049 -17.246,63<br />
7147274141 02/03-95 70008 17.246,63<br />
-----------<br />
7147274141 0 0,00<br />
-----------<br />
0 -93.531,38<br />
===========<br />
324<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Eksempel med ’Feltnavn værdi’ og niveau 1<br />
Konto Dato Bilag SaldoDkr<br />
---------- -------- ---------- -----------<br />
971249987 23/05-97 500016 –222.693,75<br />
971249987 20/10-97 70025 222.693,75<br />
971249987 04/01-98 500025 -26.723,25<br />
971249987 02/03-98 70056 26.723,25<br />
971249987 31/03-98 500050 -93.531,38<br />
-----------<br />
Konto: 971249987 -93.531,38<br />
-----------<br />
7147274141 30/05-94 500018 –395.160,00<br />
7147274141 20/10-94 70026 395.160,00<br />
7147274141 03/01-95 500049 -17.246,63<br />
7147274141 02/03-95 70008 17.246,63<br />
-----------<br />
Konto: 7147274141 0,00<br />
-----------<br />
Grandtotal -93.531,38<br />
===========<br />
325<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Subtotaler automatiske<br />
Opgave 1: Automatiske subtotaler i ’Vareudlån’<br />
Formål med opgaven<br />
At udføre automatisk sammentælling af feltet med kostprisen i rapporten ’Vareudlån’. Subtotalerne<br />
skal desuden udskrives i forskellige niveauer.<br />
Beskrivelse<br />
Der skal arbejdes videre med rapporten ’Vareudlån’ fra forrige opgave.<br />
I rapporten skal der foretages en automatisk summering af værdierne i feltet med kostprisen.<br />
Da der altid kun er én vare pr. udlånslinje, er subtotalerne et udmærket udtryk for den samlede kostpris<br />
for de udlånte varer.<br />
1 Vælg rapporten ’Vareudlån’ fra forrige opgave.<br />
2 Kontroller at rapporten sorteres alene efter feltet VareNr.<br />
Forløb √<br />
3 Opsæt feltet med kostprisen således at alle værdier summeres automatisk.<br />
4 Vælg opsætning af rapporten og sæt feltet Udskriv total til JA<br />
Sæt feltet Subtotal linje med den automatiske ledetekst til værdien ’Feltnavn<br />
værdi’.<br />
5 Go<strong>dk</strong>end rapporten og afprøv.<br />
6 Vælg opsætning af rapporten og sæt niveau til 1.<br />
7 Go<strong>dk</strong>end rapporten og afprøv en gang til.<br />
326<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
10. Rapport QT triggere grundlæggende<br />
Mål med lektionen<br />
Formålet med denne lektion er at give kursisterne overblik over triggerne i Rapport QT. Med et<br />
eksempel afprøves triggerne Init, Pre-body og Post-search.<br />
Efter lektionen skal kursisterne kunne:<br />
Anvende triggerne Init, Pre-body og Post-search<br />
Og kende til:<br />
Hvor de forskellige triggere befinder sig.<br />
Generelt<br />
Triggere i Rapport QT er editorbokse, hvori der kan indtastes XAL kode til yderligere styring af en<br />
Rapport QT.<br />
Triggerne afvikles på forskellige tidspunkter under afviklingen af Rapport QT’en.<br />
Næste afsnit giver et overblik over, hvor triggerne befinder sig i Rapport QT.<br />
Triggere<br />
Oversigt over triggernes placering<br />
Der findes triggere to forskellige steder i Rapport QT.<br />
Trigger placering<br />
I afgrænsningsvinduet<br />
I opsætning af afgrænsningsvinduet<br />
327<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Triggernes placering i Rapport QT<br />
(Opsætning)<br />
Globale formler: Formler<br />
Kørsler....:<br />
CTRL+F6<br />
(Afgrænsningsvindue)<br />
Kørsler<br />
Globale triggere i opsætning<br />
ENTER<br />
ENTER<br />
Liste<br />
over<br />
triggere<br />
i<br />
kartoteket<br />
ENTER<br />
Liste<br />
over<br />
globale<br />
triggere<br />
ENTER<br />
Trigger<br />
Trigger<br />
Triggerne der findes i Opsætning af Afgrænsningsvinduet, kaldes også globale triggere, idet de gælder<br />
for hele Rapport QT’en med alle kartoteker.<br />
328<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Globale triggere<br />
Trigger Anvendelse<br />
Init Start af QT. Macroload af biblioteker. Eneste trigger til erklæring af<br />
globale variabler.<br />
Prompt Ekstra promptbokse indsættes her. Triggeren overspringes ved en<br />
batchkørsel.<br />
Start Startes umiddelbart efter prompt triggeren inden afviklingen af selve<br />
kørslen.<br />
Break Ved ’Control Break’ kommandoen. Stop og Exit overspringes.<br />
Stop Ved kørsels stop efter fuldendt afvikling.<br />
Error Ved fejl i Control afviklingen.<br />
Abort Ved brug af ALT+Q i Afgrænsningsvinduet inden kørslen startes.<br />
Exit Ved brug af F3 for at go<strong>dk</strong>ende og forlade rapporten efter succesfuld<br />
afvikling.<br />
Bemærk! Init triggeren er den eneste, hvori der kan erklæres variabler til fælles brug for alle andre<br />
triggere.<br />
Der kan udmærket erklæres variabler i de øvrige triggere, men disse variabler bliver lokale, i forhold til<br />
den trigger de erklæres i. De kan kun anvendes i den ene trigger.<br />
Kartotekstriggere<br />
Kartotekstriggere er triggere der findes på hver enkelt kartotek, der indsættes i en Rapport QT.<br />
Disse triggere gælder således kun, for det kartotek de tilhører. Se i oversigten hvordan de findes.<br />
329<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Trigger Anvendelse<br />
Pre-search Igangsættes umiddelbart før et gennemløb af pågældende kartotek.<br />
Pre-body Igangsættes for hver post i gennemløbet af det pågældende kartotek,<br />
umiddelbart efter udvælgelsen af posten.<br />
Pre-output Igangsættes for hver udvalgt post, umiddelbart før posten sendes til<br />
output i Rapport Definition.<br />
Post-output Igangsættes for hver udvalgt post, der sendes til output, umiddelbart efter<br />
at den er blevet sendt.<br />
Pre-join Igangsættes for hver udvalgt post umiddelbart før et eller flere<br />
underkartoteker gennemløbes.<br />
Post-join Igangsættes for hver udvalgt post, der forårsagede et gennemløb af et<br />
underkartotek, efter gennemløbet.<br />
Index-break Anvendes ved sortering efter index eller felter. Igangsættes for den sidste<br />
post, hver gang indexet brydes, lige inden der startes på nye poster i<br />
index.<br />
Post-body Igangsættes for hver udvalgt post i gennemløbet, umiddelbart før<br />
udvælgelsen af den næste post.<br />
Post-search Igangsættes umiddelbart efter gennemløb af pågældende kartotek.<br />
330<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Rækkefølge på triggere<br />
Rækkefølge på triggere ved ét kartotek<br />
Globale Hove<strong>dk</strong>artotek SEARCH løkke<br />
Init<br />
(Afgrænsningsvindue vises)<br />
Prompt<br />
(Udskriftsmuligheder vises)<br />
Start Pre-search<br />
Pre-body<br />
Pre-output<br />
SEARCH<br />
(Danner side x, linje y) OUTPUT<br />
Post-output<br />
Index-break<br />
Post-body<br />
Stop Post-Search<br />
(Udskrift printes / vises)<br />
Exit<br />
Break<br />
Error<br />
Abort<br />
END<br />
331<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Rækkefølge på triggere ved flere kartoteker<br />
Globale Hove<strong>dk</strong>artotek Underkartotek<br />
Init<br />
(Afgrænsningsvindue vises)<br />
Prompt<br />
(Udskriftsmuligheder vises)<br />
Start Pre-search<br />
Pre-body<br />
Pre-output<br />
(Danner side x, linje y)<br />
Post-output<br />
Pre-join Pre-Search<br />
Pre-body<br />
Pre-output<br />
Post-output<br />
Pre-join<br />
Post-join<br />
Index-break<br />
Post-body<br />
Post-join Post-search<br />
Index-break<br />
Post-body<br />
Stop Post-Search<br />
(Udskrift printes / vises)<br />
Exit<br />
Break<br />
Error<br />
Abort<br />
332<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Eksempel på anvendelse<br />
Herunder dannes en rapport med en manuel total. Dette kræver erklæring af en variabel, tildeling af<br />
værdier til variablen og udskrivning af den samlede sum.<br />
Eksemplet vises i en matrix for at sammenligne Rapport QT med Rapport XAL.<br />
C5 vers. 2012 -> Triggere anvendt til manuel total<br />
Triggere Kode i triggere Kode i Rapport XAL<br />
Init<br />
(Afgrænsningsvindue vises)<br />
Prompt<br />
(Udskriftsmuligheder vises)<br />
Start<br />
Pre-search<br />
#MacroLoad(REPORTS)<br />
REAL &Sum<br />
#MacroLoad(REPORTS)<br />
REAL &Sum<br />
SEARCH CustTable<br />
Pre-body #Add(&Sum,BalanceMst) #Add(&Sum,BalanceMst)<br />
Pre-output<br />
(Danner side x, linje y) OUTPUT CustTable<br />
Post-output<br />
Index-break<br />
Post-body<br />
END<br />
Post-Search #Rep_Execute(1) #Rep_Execute(1)<br />
Stop<br />
(Udskrift printes / vises)<br />
Exit<br />
I eksemplet forudsættes det at totalen udskrives i Control linje nummer 1.<br />
Rapport Definition med Control linje til udskrivning af variabel<br />
Body<br />
Ctrl<br />
Ctrl<br />
Ctrl<br />
CustTable<br />
1<br />
1<br />
1<br />
Account<br />
Name<br />
Debitorer i alt:<br />
BalanceMst<br />
&Sum<br />
333<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. -> 4.1 Triggere anvendt til manuel total<br />
Triggere Kode i triggere Kode i Rapport XAL<br />
Init<br />
(Afgrænsningsvindue vises)<br />
Prompt<br />
(Udskriftsmuligheder vises)<br />
Start<br />
Pre-search<br />
#MacroLoad(REPORTS)<br />
REAL &Sum<br />
#MacroLoad(REPORTS)<br />
REAL &Sum<br />
SEARCH DebKart<br />
Pre-body #Add(&Sum,SaldoDkk) #Add(&Sum,SaldoDkk)<br />
Pre-output<br />
(Danner side x, linje y) OUTPUT DebKart<br />
Post-output<br />
Index-break<br />
Post-body<br />
END<br />
Post-Search #Rep_Execute(1) #Rep_Execute(1)<br />
Stop<br />
(Udskrift printes / vises)<br />
Exit<br />
I eksemplet forudsættes det at totalen udskrives i Control linje nummer 1.<br />
Rapport Definition med Control linje til udskrivning af variabel<br />
Body<br />
Ctrl<br />
Ctrl<br />
Ctrl<br />
DebKart<br />
1<br />
1<br />
1<br />
Konto<br />
Navn<br />
Debitorer i alt:<br />
SaldoDkk<br />
&Sum<br />
334<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Rapport QT Triggere, grundlæggende<br />
Opgave 1: Triggere i Rapport QT til ’Vareudlån’<br />
Formål med opgaven<br />
At anvende nogle af triggerne i Rapport QT til rapporten ’Vareudlån’. Triggerne anvendes til erklæring<br />
af variabler, sammentælling i variabler og udskrivning af Control linjer.<br />
Beskrivelse<br />
Der skal arbejdes videre med rapporten ’Vareudlån’ fra forrige opgave.<br />
Rapporten skal ændres til en manuel optælling af kostprisen, så der gives en samlet kostpris for alle<br />
udlån, der præsenteres på rapporten.<br />
Kostpriserne skal sammentælles i en variabel, der oprettes til formålet i triggeren Init.<br />
Sammentællingen udføres i triggeren Pre-body og udskrivning udføres i triggeren Post-search.<br />
1 Vælg rapporten ’Vareudlån’ fra forrige opgave.<br />
Forløb √<br />
2 Hvis der i forvejen er indsat automatisk subtotal i feltet med kostprisen, skal du<br />
fjerne automatikken.<br />
3 I Rapport QT skal der i INIT triggeren, erklæres en variabel med navnet &Sum.<br />
Indsæt også en macroload af biblioteket REPORTS.<br />
4 Indsæt i Pre-body triggeren macroen #Add til opsummering i variablen &Sum.<br />
Kostprisen (CostPrice) hentes med direkte opslag i lagerkartoteket (InvenTable).<br />
5 I triggeren Post-search aktiveres den eller de Control linjer, du opretter eller har<br />
oprettet til udskrivning af resultatet af optællingen.<br />
Anvend macroen #Rep_Execute.<br />
6 I Rapport definition skal du indsætte Control linjer til udskrivning af resultatet.<br />
Vælg selv et eller flere numre til linjerne.<br />
7 Go<strong>dk</strong>end og afprøv rapporten.<br />
335<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
11. Rapport QT med flere kartoteker<br />
Mål med lektionen<br />
At give deltagerne kendskab til opbygning af Rapport QT med flere kartoteker.<br />
Efter lektionen skal kursisterne kunne:<br />
Opbygge Rapport-QT med flere enkeltstående kartoteker<br />
Opbygge Rapport-QT flere relaterede kartoteker.<br />
Generelt<br />
Rapport QT kan opbygges med flere kartoteker, på samme måde som der i XAL-kørsler kan anvendes<br />
flere SEARCH løkker.<br />
Når der anvendes mere end ét kartotek i Rapport-QT, kan dette udføres på to måder. Det er vigtigt at<br />
kende forskel på de to metoder, da det i starten kan være svært at se forskel på dem.<br />
Metoder med flere kartoteker<br />
Metode Betydning<br />
Enkeltstående kartoteker Kartotekerne afvikles ét ad gangen efter hinanden.<br />
Relaterede kartoteker Hver gang en post hentes i hove<strong>dk</strong>artoteket, er der mulighed for<br />
at hente tilhørende poster i underkartoteket.<br />
Flere kartoteker<br />
Enkeltstående kartoteker<br />
Ved enkeltstående kartoteker afvikles disse et ad gangen, i den rækkefølge de forekommer i Rapport-<br />
QT’en. Hver gang ét kartotek er færdigt, startes på det næste.<br />
Herunder vises eksempler på anvendelsen af enkeltstående kartoteker først i en Rapport XAL og<br />
derefter i en Rapport QT.<br />
C5 vers. 2012 -> Eksempel på enkeltstående kartoteker i Rapport-XAL<br />
SEARCH InvenItemGroup<br />
OUTPUT InvenItemGroup<br />
END<br />
SEARCH InvenTable<br />
OUTPUT InvenTable<br />
END<br />
Body<br />
Body<br />
InvenItemG<br />
InvenTable<br />
Group GroupName<br />
ItemNumber ItemName1<br />
Group<br />
C5 vers. -> 4.1 Eksempel på enkeltstående kartoteker i Rapport-XAL<br />
336<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
SEARCH LagGruppe<br />
OUTPUT LagGruppe<br />
END<br />
SEARCH LagKart<br />
OUTPUT LagKart<br />
END<br />
Body<br />
Body<br />
LagGruppe<br />
LagKart<br />
Eksempel på enkeltstående kartoteker i Rapport-QT<br />
Kartotek Afgrænsning Fra Til Status<br />
Varegruppekarto Sortering..: Åben<br />
Filter.....: Åben<br />
Kørsler....: Kørsler<br />
Skjul<br />
Varekartotek Sortering..: Åben<br />
Filter.....: Åben<br />
Kørsler....: Kørsler<br />
Skjul<br />
I begge eksempler er det samme opstilling af kartoteker og felter i definitionsområdet. Derfor er dette<br />
ikke vist i forbindelse med Rapport-QT’en.<br />
Begge eksempler vil derfor også kunne resultere i en udskrift som vist i næste figur.<br />
I figuren vises først posterne fra kartotek nummer et, der i eksemplet er varegrupperne fra<br />
varegruppekartoteket. Efter varegrupperne kommer alle varerne fra kartotek nummer to<br />
varekartoteket.<br />
Resultat der er ens for begge ovenstående eksempler<br />
10 Harddiske<br />
20 Skærme<br />
30 Kabinetter<br />
40 Ram<br />
12000 Harddisk type 2 10<br />
14000 Skærm 14” 20<br />
16000 Ram 8 MB 40<br />
16004 Ram 16 MB 40<br />
17006 Harddisk type 5 10<br />
18000 Kabinet 30<br />
20000 Skærm 17” 20<br />
Gruppe GruppeNavn<br />
VareNummer VareNavn1<br />
Gruppe<br />
Der henvises til huskelisterne, idet der gøres opmærksom på, at der er forskel på om der i Rapport-QT<br />
oprettes enkeltstående kartoteker, eller om der oprettes relaterede kartoteker.<br />
337<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Relaterede kartoteker<br />
Ved relaterede kartoteker oprettes der i Rapport-QT først et hove<strong>dk</strong>artotek og derefter et eller flere<br />
underkartoteker. I en Rapport-XAL svarer dette til en ydre og en indre søgeløkke.<br />
Ved afvikling af Rapport-XAL eller Rapport-QT med relaterede kartoteker, findes posterne, i den<br />
yderste søgeløkke (hove<strong>dk</strong>artoteket), frem en ad gangen.<br />
Hver gang en post findes, udføres der en gennemsøgning af samtlige poster i den inderste søgeløkke<br />
(underkartoteket).<br />
Da samtlige poster gennemsøges i den inderste søgeløkke (underkartoteket), er det vigtigt at relatere<br />
de to søgeløkker (kartoteker) med hinanden, således at der under gennemsøgningen af den inderste<br />
søgeløkke kun hentes poster, der kan relateres til den aktuelle post i den yderste søgeløkke<br />
(hove<strong>dk</strong>artoteket).<br />
Relatering meller hoved- og underkartotek<br />
Relatering i Rapport-XAL foregår ved anvendelse af kommandoen WHERE. Kommandoen anvendes<br />
ved at opstille en betingelse, der skal opfyldes, for at en post medtages fra underkartoteket.<br />
Det er vigtigt at bemærke, at relateringen finder sted i den inderste søgeløkke (underkartoteket). Det<br />
er altså underkartoteket, der skal relateres med hove<strong>dk</strong>artoteket, og ikke omvendt.<br />
Syntaksen for anvendelsen af WHERE er her følgende:<br />
Syntaks til WHERE<br />
WHERE == <br />
Herunder vises der eksempler på anvendelsen af flere afhængige kartoteker først i Rapport-XAL og<br />
derefter i Rapport-QT.<br />
C5 vers. 2012 -> Eksempel på relaterede kartoteker Rapport-XAL<br />
SEARCH InvenItemGroup<br />
OUTPUT InvenItemGroup<br />
SEARCH InvenTable<br />
WHERE InvenTable.Group == InvenItemGroup.Group<br />
OUTPUT InvenTable<br />
END<br />
END<br />
Body<br />
Body<br />
InvenItemG<br />
InvenTable<br />
Group GroupName<br />
ItemNumber ItemName1<br />
Group<br />
338<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. -> 4.1 Eksempel på relaterede kartoteker Rapport-XAL<br />
SEARCH LagGruppe<br />
OUTPUT LagGruppe<br />
SEARCH LagKart<br />
WHERE LagKart.Gruppe == LagGruppe.Gruppe<br />
OUTPUT LagKart<br />
END<br />
END<br />
Body<br />
Body<br />
LagGruppe<br />
LagKart<br />
Eksempler på relaterede kartoteker i Rapport-QT<br />
Kartotek Afgrænsning Fra Til Status<br />
Varegruppekartotek Sortering..: Åben<br />
Filter.....: Åben<br />
Kørsler....: Kørsler<br />
Skjul<br />
Varekartotek Sortering..: Åben<br />
Filter.....: Åben<br />
Kørsler....: Kørsler<br />
Skjul<br />
I begge eksempler er det samme opstilling af kartoteker og felter i definitionsområdet. Derfor er dette<br />
ikke vist i forbindelse med Rapport-QT.<br />
Begge eksempler vil derfor også kunne resultere i en udskrift som vist i næste figur.<br />
I figuren ses det, hvordan der først trækkes én post ud af hove<strong>dk</strong>artoteket varegruppekartoteket og<br />
derefter de tilhørende poster i underkartoteket varekartoteket.<br />
Det kan ses, at relateringen virker, idet der for hver post i hove<strong>dk</strong>artoteket kun vises de tilhørende<br />
relaterede poster fra underkartoteket.<br />
Resultat til begge ovenstående eksempler<br />
10 Harddiske<br />
12000 Harddisk type 2 10<br />
17006 Harddisk type 5 10<br />
20 Skærme<br />
20000 Skærm 17” 20<br />
14000 Skærm 14” 20<br />
30 Kabinetter<br />
18000 Kabinet 30<br />
41 Ram<br />
16000 Ram 8 MB 40<br />
14000 Ram 16 MB 40<br />
Relation i Rapport-QT<br />
Gruppe GruppeNavn<br />
VareNummer VareNavn1<br />
Gruppe<br />
339<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Når to kartoteker relateres i en RAPPORT-QT, ses dette i form af en streg, der trækkes fra<br />
underkartoteket op til hove<strong>dk</strong>artoteket, som det ses i figuren herunder.<br />
Eksempel på Rapport QT med relaterede kartoteker<br />
Kartotek Afgrænsning Fra Til Status<br />
Varegruppekartotek Sortering..: Åben<br />
Filter.....: Åben<br />
Kørsler....: Kørsler<br />
Skjul<br />
Varekartotek Sortering..: Åben<br />
Filter.....: Åben<br />
Kørsler....: Kørsler<br />
Skjul<br />
Stregen viser kun, at de to kartoteker er relaterede. Den er ikke bevis på, om relationen er udført<br />
korrekt.<br />
Korrekt opstilling af relation<br />
Når to XAL-søgeløkker opstilles inden i hinanden, anvendes kommandoen WHERE til at relatere den<br />
inderste søgeløkke med den yderste, som vist herunder.<br />
C5 vers. 2012 -> Eksempel på relaterede søgeløkker<br />
SEARCH InvenItemgroup<br />
OUTPUT InvenItemGroup<br />
SEARCH InvenTable<br />
WHERE InvenTable.Group == InvenItemGroup.Group<br />
OUTPUT InvenTable<br />
END<br />
END<br />
C5 vers. -> 4.1 Eksempel på relaterede søgeløkker<br />
SEARCH LagGruppe<br />
OUTPUT LagGruppe<br />
SEARCH LagKart<br />
WHERE LagKart.Gruppe == LagGruppe.Gruppe<br />
OUTPUT LagKart<br />
END<br />
END<br />
I en Rapport-QT foregår dette ved at angive felterne, der svarer til WHERE i Relationsvinduet, i<br />
underkartoteket i Rapport-QT’en som vist i figuren på næste side:<br />
340<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
C5 vers. 2012 -> Relationsvindue til underkartoteket<br />
Relater<br />
Output<br />
Tilføj<br />
InvenItemGroup InvenTable<br />
Felt Felt<br />
123456789012345<br />
Group Group<br />
C5 vers. -> 4.1 Relationsvindue til underkartoteket<br />
Relater<br />
Output<br />
Tilføj<br />
Altid Før join<br />
Alle felter<br />
LagGruppe LagKart<br />
Felt Felt<br />
123456789012345<br />
Gruppe Gruppe<br />
Altid Før join<br />
Alle felter<br />
Bemærk, at det i Rapport-XAL eksemplet er i den inderste søgeløkke, at WHERE kommandoen befinder<br />
sig. Det er i den inderste søgeløkke, at relationen findes.<br />
Dette gælder også for eksemplet med Rapport-QT’en. Her er det også i underkartoteket, at relationen<br />
opstilles. I eksemplet er det i LagerKart, idet dette kartotek relateres til varegrupperne, efterhånden<br />
som disse søges ud i Rapport-QT’en.<br />
I de to søjler i relationsvinduet ses de to kartoteker med de relaterede felter.<br />
Det vigtigste i relationen er de to felter, der indsættes.<br />
Det er ikke så meget felternes navne, det kommer an på, men derimod deres indhold.<br />
Det drejer sig således om at angive felter, hvis indhold kan relateres til hinanden.<br />
Der kan i øvrigt godt indsættes flere relaterede felter, hvis det ønskes, de skal blot relatere til hinanden<br />
parvist.<br />
Stregen der trækkes mellem to kartoteker i afgrænsningsvinduet, opstår så snart to kartoteker er indsat<br />
i relationstabellen, også uden at der er indsat relationsfelter.<br />
Stregen er ikke bevis på at relationen er sat korrekt op, kun at der er en relation.<br />
341<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Hvis feltrelationerne ikke indsættes, bliver resultatet, at der for hver post i hove<strong>dk</strong>artoteket udskrives<br />
samtlige poster i underkartoteket. Det vil sige også posterne for de andre poster i hove<strong>dk</strong>artoteket.<br />
Efterfølgende eksempel passer til ovenstående Relationsvindue.<br />
C5 vers. 2012 -> Eksempel på relaterede kartoteker<br />
Kartotek Afgrænsning Fra Til Status<br />
InvenItemGroup Sortering..: Åben<br />
Filter.....: Åben<br />
Kørsler....: Kørsler<br />
Skjul<br />
Body<br />
Body<br />
GrFt<br />
InvenTable Sortering..: Åben<br />
Filter.....: Åben<br />
Kørsler....: Kørsler<br />
Skjul<br />
InvenItemG<br />
InvenTable<br />
*<br />
C5 vers. -> 4.1 Eksempel på relaterede kartoteker<br />
Kartotek Afgrænsning Fra Til Status<br />
LagGruppe Sortering..: Åben<br />
Filter.....: Åben<br />
Kørsler....: Kørsler<br />
Skjul<br />
Body<br />
Body<br />
GrFt<br />
LagKart Sortering..: Åben<br />
Filter.....: Åben<br />
Kørsler....: Kørsler<br />
Skjul<br />
LagGruppe<br />
LagKart<br />
*<br />
I denne opsætning af definitionsområdet angives der én Group Footer linje med en * i<br />
kartotekskolonnen. Hver gang der afsluttes med udskrivning fra et af kartotekerne, udskrives denne<br />
Group Footer derfor. Definitionen kan f.eks. give følgende resultat:<br />
Resultat<br />
Group GroupName<br />
ItemNumber ItemName1<br />
Group<br />
Gruppe GruppeNavn<br />
VareNummer VareNavn1<br />
Gruppe<br />
342<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
10 Harddiske<br />
12000 Harddisk type 2 10<br />
17006 Harddisk type 5 10<br />
20 Skærme<br />
20000 Skærm 17” 20<br />
14000 Skærm 14” 20<br />
30 Kabinetter<br />
18000 Kabinetter 30<br />
40 Ram<br />
16000 Ram 8 MB 40<br />
14000 Ram 16 MB 40<br />
I stedet for Group Footeren med * i kartotekskolonnen, kunne der indsættes en Group Footer linje til<br />
hvert kartotek med angivelse af kartotek i kartotekskolonnen.<br />
343<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgaver: Rapport QT med flere kartoteker<br />
Opgave 1: Ordreliste<br />
Formål med opgaven<br />
At oprette en rapport med navnet ’Ordreliste’. Rapporten skal indeholde data fra begge<br />
udlånskartoteker på en gang.<br />
Beskrivelse<br />
Der skal oprettes en rapport, der både henter data i UDLUdlånsKart og UDLUdlånsPost. Rapporten skal<br />
fungere som en ’ordreliste’ med samtlige informationer om hver enkelt udlånsordre.<br />
1 Opret en ny rapport med navnet ’Ordreliste’.<br />
Forløb √<br />
2 Indsæt en Rapport QT med kartotekerne UDLUdlånsKart og UDLUdlånsPost.<br />
Husk at opsætte relationer mellem kartotekerne.<br />
3 Indsæt Page header linjer med macroerne #Company og #ReportDatePage.<br />
Tegn en streg under felterne.<br />
4 Indsæt Bodylinjer på UDLUdlånsKart med nedenstående felter. Felterne skal stå<br />
under hinanden på hver sin linje.<br />
UdlånsNr, DebitorKto, UdlånsDato, ReturDato, UdlånsType og ForsikringsSum.<br />
Foran hvert enkelt felt skal der indsættes ledetekstfelter fra kartoteket. Felterne<br />
skal være 15 tegn, venstrestillede og udskrives med store bogstaver.<br />
Bag ved feltet DebitorKto skal der indsættes et felt, der med et direkte opslag<br />
henter debitorens navn i kartoteket CustTable.<br />
5 Indsæt en Bodylinje fra UDLUdlånsPost med felterne:<br />
VareNr, VareNavn, SerieNr og Status<br />
Indsæt overskrifter til disse felter i de nederste Body linjer til UDLUdlånsKart, og<br />
tegn en streg under overskrifterne.<br />
6 Indsæt en Control linje der kun indeholder et sideskift.<br />
Aktiver denne linje i QT’en i triggeren Post-join i UDLUdlånsKart, så får du<br />
sideskift, hver gang der skiftes til en ny ordre.<br />
7 Go<strong>dk</strong>end rapporten og afprøv.<br />
344<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Opgave 2: Ordreliste med prolog (ekstra opgave)<br />
Formål med opgaven<br />
At indsætte en prolog i rapporten ’Ordreliste’.<br />
Beskrivelse<br />
Der skal indsættes en prolog i rapporten ’Ordreliste’, der blev oprettet i forrige opgave.<br />
Prologen skal indeholde forskellige informationer om rapporten. Informationerne fremgår af forløbet.<br />
1 Fortsæt i rapporten ’Ordreliste’ fra forrige opgave.<br />
2 Opret 13 linjer af typen Prolog.<br />
3 Indsæt følgende tekster og felter i Prolog linjerne:<br />
Blank linje<br />
Teksten ”Firma: ” + felt med firmanavn<br />
Teksten ”Rapport: ” + felt med rapports navn<br />
Teksten ”Udskrevet af: ” + felt med brugernavn<br />
Teksten ”Dato: ” + felt med dags dato<br />
Forløb √<br />
Teksten ”Klokkeslet: ” + felt med aktuel tid for rapporten<br />
Blank linje<br />
Teksten ”Anvendelse: Anvendes til kontrol af status på”<br />
Teksten ” udlånsordrer og udlånslinjer.”<br />
Blank linje<br />
Teksten ”Sortering: Pr. debitor pr. udlånsordre”<br />
Blank linje<br />
Linje med sideskift.<br />
4 Tegn en kasse med dobbeltstreg hele vejen rundt om teksterne og felterne.<br />
Øverste linje i kassen skal være på den første blanke linje og den nederste skal<br />
være i linje tolv.<br />
5 Go<strong>dk</strong>end og afprøv rapporten.<br />
345<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
12. Huskelister Rapporter<br />
Oprette rapport<br />
Funktion Fremgangsmåde Tast<br />
Oprette Generelt/Tilpasning/Udviklingsmenu/REP/Opret<br />
Når rapportgeneratoren starter op, står du automatisk i<br />
definitionsområdet.<br />
Navngive Giv rapporten et navn, gerne sigende F10/RAPPORT/<br />
GEM<br />
Du kan nu vælge mellem faserne:<br />
Oprette rapportlinjer<br />
Oprette søge-XAL<br />
Oprette QT<br />
Når du er færdig med en af faserne, kan du vende tilbage<br />
hertil og vælge en anden fase eller<br />
Go<strong>dk</strong>ende Go<strong>dk</strong>ende hele rapporten F3<br />
Oprette rapportlinjer (Kolonnerne)<br />
Funktion Fremgangsmåde Tast<br />
Definitionsområdet<br />
De tre første kolonner i rapportlinjerne kaldes<br />
definitionsområdet, den sidste er layoutområdet.<br />
Linjetype Vælg linjetype (se bilag ’Linjetyper’) ENTER<br />
Kartotek Vælg kartotek i kartotekskolonnen, hvis den valgte<br />
linjetype kræver det (Se bilag ’Kartoteker’)<br />
ENTER<br />
Linje-XAL Du kan åbne editorboksen og indtaste XAL-kode ENTER<br />
Layoutområde<br />
Go<strong>dk</strong>end indtastningen i linje-XAL F3<br />
Opbygning af rapportens layout (udseende).<br />
Her indsættes fritekst, streger og kasser, ledetekstfelter,<br />
samt felter med forskelligt indhold.<br />
Oprette rapportlinjer med fritekst<br />
Funktion Fremgangsmåde Tast<br />
Indtaste tekst<br />
Du kan uden videre indtaste klar tekst overalt i<br />
layoutområdet.<br />
346<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Oprette rapportlinjer med streger og kasser<br />
Funktion Fremgangsmåde Tast<br />
Tegne streger<br />
og kasser<br />
Du kan frit tegne kasser og linjer i layoutområdet.<br />
Funktionen startes med<br />
Den valgte stregtype i følge pilene<br />
Skift mellem stregtyperne: enkelt streg, dobbelt streg eller<br />
udviske streg<br />
ALT+T<br />
Alle pile<br />
ALT+T<br />
Afslut kasse/linje ENTER<br />
Oprette rapportlinjer med forskellige felter<br />
Funktion Fremgangsmåde Tast<br />
Oprette felt Opret felt F2<br />
Vælg Feltudtryk i menuen Opret felt og editorboksen<br />
’Feltformel’ åbnes.<br />
Det du indtaster i editorboksen, bestemmer hvilken type<br />
felt du opretter:<br />
Kartoteksfelt Hent kartoteksfelt SHIFT+F8<br />
Vælg kartotek ENTER<br />
Vælg felt ENTER<br />
Variabelfelt Indtast variablens navn som &Variabelnavn<br />
Tekstfelt Indtast tekst i “” citationstegn<br />
Macrofelt Indtast macronavn som #Macronavn<br />
Direkte opslag Tast direkte opslag som Kartotek[Index,Nøgler].Felt<br />
Go<strong>dk</strong>end Go<strong>dk</strong>end editorboksen F3<br />
Go<strong>dk</strong>end<br />
feltmenu<br />
Rapport – afprøve (køre)<br />
Go<strong>dk</strong>end menuen for at vende tilbage til layoutområdet. F3<br />
Funktion Fremgangsmåde Tast<br />
Generelt/Tilpasning/Udviklingsmenu/REP/Kør<br />
Vælge rapport Vælg rapport fra plukkeliste og kør<br />
eller<br />
Genvejstast Du kan også afvikle rapporten under oprettelsen<br />
ENTER<br />
ALT+R<br />
347<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Rapport QT – Oprette første kartotek<br />
Funktion Fremgangsmåde Tast<br />
Oprette Du starter med et tomt ’startskærmbillede’, hvori der skal<br />
indsættes et kartotek med forskellige oplysninger.<br />
Åbne relationsvindue<br />
Denne fase gælder kun for det første kartotek i QT’en.<br />
Ved yderligere kartoteker se huskelisten Rapport QT –<br />
Oprette flere kartoteker.<br />
Åbne relationsvindue hvor du i feltet i øverste højre<br />
hjørne skal indsætte kartoteksnavnet.<br />
ALT+F6<br />
SHIFT+F2<br />
Indsæt kartotek Indsæt kartotek fra plukkeliste ALT+H<br />
Spring de øvrige felter over.<br />
Go<strong>dk</strong>ende Go<strong>dk</strong>end relationsvinduet F3<br />
Du er nu tilbage i startskærmbilledet, hvor dit kartotek nu<br />
kan ses i venstre side.<br />
348<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Rapport QT – Oprette flere kartoteker<br />
Funktion Fremgangsmåde Tast<br />
Tilføje flere<br />
kartoteker<br />
Tilføjelse af flere kartoteker foregår i startskærmbilledet.<br />
Flyt cursoren Flyt cursoren over i kartotekskolonnen i venstre side. Pil<br />
Gå til tomt<br />
kartoteksfelt<br />
Vælg et tomt kartoteksfelt Pil ned<br />
Tilføj kartotek Tilføj kartotek SHIFT+F2<br />
Indsæt kartotek<br />
(Navn)<br />
Indsæt kartotek<br />
(Relation)<br />
Du ser nu relationsvinduet til indtastning af de kartoteker<br />
der skal relateres til hinanden.<br />
I øverste venstre hjørne indsættes det bestående kartotek.<br />
Indsæt kartotek<br />
I plukkelisten ser du kun de kartoteker, der er oprettet i<br />
QT’en i forvejen.<br />
I øverste højre hjørne indtastes navnet på det nye<br />
kartotek, der skal relateres til det bestående kartotek.<br />
ALT+H<br />
Indsæt kartotek fra plukkelisten ALT+H<br />
I kolonnerne felt, under de to kartoteker, skal du indtaste<br />
de felter der relaterer til hinanden i kartotekerne f.eks. har<br />
kartotekerne Debitorkartotek og Debitorposter feltet<br />
KontoNummer som fælles relation.<br />
Indsæt felter Indsæt felter fra plukkelisten i begge kolonner.<br />
Gentag hvis der er flere felter der skal relateres.<br />
Spring resten af felterne over.<br />
Go<strong>dk</strong>end Go<strong>dk</strong>end F3<br />
Alt H<br />
349<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Rapport QT – Sortere<br />
Funktion Fremgangsmåde Tast<br />
Sortere Vælg feltet Sortering<br />
Åbne<br />
dialogboksen<br />
Åbne dialogboksen Sortering<br />
Du kan nu:<br />
Vælge felt Vælge felt der skal sorteres efter<br />
eller<br />
ENTER<br />
ALT+H<br />
Vælge index Vælge index der skal sorteres efter ALT+H<br />
Vælge retning Du kan også bestemme retning, som posterne skal<br />
sorteres i.<br />
Vælg mellem stigende (blank) eller faldende ALT+H<br />
Go<strong>dk</strong>end Go<strong>dk</strong>end sorteringsboksen F3<br />
Rapport QT – Filtrere<br />
Funktion Fremgangsmåde Tast<br />
Filtrere Vælg feltet Filter<br />
Åbne<br />
editorboxen<br />
Åbne editorboxen Build-filter ENTER<br />
Indtast udtryk der for hver post kan evalueres til sand eller<br />
falsk f.eks. Saldofelt > 0. Hvis posten er falsk sorteres den<br />
fra.<br />
Go<strong>dk</strong>end Go<strong>dk</strong>end editorboksen F3<br />
Rapport QT – Feltafgrænse (tilføje / slette)<br />
Funktion Fremgangsmåde Tast<br />
Felt-afgrænse Du kan tilføje og slette afgrænsningfelter efter behov.<br />
Tilføje Tilføj afgrænsningfelt fra listen over kartoteksfelter F2<br />
Slette Slet afgrænsningsfelt ALT+F9<br />
350<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Rapport QT – Triggere i opsætning<br />
Funktion Fremgangsmåde Tast<br />
Opsætning Start opsætning af QT<br />
Gentages for hver trigger.<br />
Vise triggere Gå til feltet Globale formler og åbn feltet<br />
Du ser nu en liste over globale triggere.<br />
Init triggeren er den første, der køres i QT, og derfor vil<br />
det f.eks. være naturligt at erklære sine variabler her.<br />
CTRL+F6<br />
ENTER<br />
Åbne trigger Vælg Trigger og åbn editorboxen hertil. Pile og Enter<br />
Indtast kode.<br />
Go<strong>dk</strong>end Go<strong>dk</strong>end koden F3<br />
Rapport QT – Triggere på kartoteker<br />
Funktion Fremgangsmåde Tast<br />
Kartotek Vælg feltet kørsler i det kartotek , hvori der skal indsættes<br />
kode i triggere.<br />
Gentages for hver trigger.<br />
Vise triggere Åbn feltet kørsler<br />
Du ser nu triggerne på det aktuelle kartotek.<br />
ENTER<br />
Åbne trigger Vælg Trigger og åbn editorboxen hertil. ENTER<br />
Indtast kode.<br />
Go<strong>dk</strong>end Go<strong>dk</strong>end koden F3<br />
351<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012
Subtotaler<br />
Funktion Fremgangsmåde Tast<br />
Find rapport Generelt/Tilpasning/Udviklingsmenu/REP/Ret<br />
Vælg rapport.<br />
Opsætte felt Vælg felt, der skal dannes subtotal for.<br />
Gentages for hvert felt der skal have totaler.<br />
Åbne felt Vælg funktionen Ret felt/Subtotaler F6<br />
Indsæt funktion Indsæt funktion for subtotalen f.eks. ’Sum alle’<br />
’Opsætning’ af<br />
rapport<br />
Åbne<br />
opsætning<br />
Subtotaler udskrives ikke automatisk. Kun hvis det<br />
defineres i ’Opsætning’ i rapporten.<br />
Pile<br />
Åbne dialogboksen Opsætning i rapporten CTRL+F6<br />
I dialogboksen vælges, hvordan subtotalerne skal<br />
udskrives, og om de skal udskrives.<br />
De vigtigste felter er:<br />
Ledetekst Subtotal-linje vælg metode til udskrivning af<br />
automatiske ledetekster.<br />
Kopi af linje udskriver værdien af teksten til venstre for<br />
subtotalfeltet.<br />
Feltnavn værdi udskriver ordet ’Grandtotal’ foran totalen.<br />
Udskrivning Udskriv subtotal: Svar JA / NEJ til om subtotalen skal<br />
udskrives eller ej.<br />
Manuel<br />
ledetekst<br />
Linjetypen<br />
Subtotal<br />
Udskriv kun totaler: Svar JA / NEJ til om der kun skal<br />
udskrives subtotaler.<br />
Manuelle ledetekster indsættes i linjetypen Subtotal.<br />
Du kan i stedet for ovenstående ’automatik’ selv<br />
bestemme den tekst, der skal stå på subtotal linjen ved at<br />
oprette en linje af typen subtotal.<br />
INS<br />
ALT+H<br />
ALT+H<br />
ALT+H<br />
Vælg linjetype Vælg linjetype Subtotal Pile og Enter<br />
Vælg kartotek Vælg kartotek til linjetypen ENTER<br />
Indtast tekst Indtast tekst til subtotalen i layoutdelen f.eks.:<br />
’Sum af beløb: ’<br />
Hvis totalen f.eks. er 9.999,00 vil rapporten se sådan ud:<br />
Sum af beløb: 9.999,00<br />
352<br />
UNDERVISNINGSMATERIALE TIL MICROSOFT DYNAMICS<br />
Brugen af dette materiale er underlagt din aktuelle serviceaftale<br />
® C5 VERSION 2012