20 veelgestelde vragen over SAP Crystal Reports
- Hoe kan ik rapporten verspreiden naar mensen die niet over SAP Crystal Reports beschikken?
- Hoe kan ik de waarden van een range parameter in een rapport afdrukken?
- Hoe kan ik meerdere waarden van een parameter in een rapport afdrukken?
- Hoe geef ik een waarde uit een subrapport door naar een hoofdrapport?
- Tussen 2 tabellen in een rapport bestaat een outer join. Het rapport laat keurig alle gegevens zien.
Ook van die rijen die geen corresponderende rijen in de andere tabel hebben.
Als ik een recordselectie gebruik, dan verdwijnen de rijen die geen corresponderende rijen hebben. Hoe los ik dit op? - Hoe kan ik de paginanummering per groep opnieuw laten beginnen?
- Wat zijn de belangrijkste verschillen tussen de verschillende edities van SAP Crystal Reports 10?
- Wat zijn de belangrijkste verschillen tussen eerdere versies van SAP Crystal Reports en SAP Crystal Reports 10?
- Hoe druk ik informatie tussen 2 gerelateerde velden (voornaam en achternaam, of straatnaam en huisadres) af zonder ongewenste witruimte tussen de waardes van deze velden?
- Hoe kan ik op een gemakkelijke manier informatie over het rapportontwerp vastleggen?
- Kan ik parameters dynamisch maken?
- Hoe kan ik subtotalen binnen een groep bij elkaar optellen en/of aftrekken?
- Hoe kan ik in één taartdiagram meerdere subtotalen afdrukken?
- Hoe kan ik objecten in verschillende secties en objecten in dezelfde sectie gemakkelijk met elkaar uitlijnen?
- Hoe kan ik rapporten verspreiden naar mensen die niet over SAP Crystal Reports beschikken?
- Hoe kan ik de achtergrondkleur van rijen gegevens in een rapport om en om een andere kleur geven?
- Hoe kan ik een andere groepering op een datum-tijd veld maken dan de standaard groeperingsmogelijkheden voor een dergelijk veld (bijvoorbeeld per 3 weken)?
- Hoe kan ik in een keer alle waardes kiezen voor een parameter waar meerdere waardes voor mogen worden opgegeven?
- Hoe kan ik de gegevens in een rapport dynamisch groeperen (bijvoorbeeld per week, per maand of per kwartaal)?
- Als ik voor een numerieke parameter een keuzelijst maak, dan worden de getallen met 2 decimalen getoond en/of met een scheidingsteken voor duizendtallen. Hoe kan ik ervoor zorgen dat deze getallen als gehele getallen worden getoond?
Hoe kan ik rapporten verspreiden naar mensen die niet over Crystal Reports beschikken?Uiteraard kun je een rapport naar een printer sturen en deze hard copy vervolgens naar de mensen sturen die het rapport willen zien. Je kunt de output van een rapport ook exporteren naar bijvoorbeeld PDF, Excel of Word en deze bestanden op een file server zetten of naar personen mailen. Dit zijn arbeidsintensieve methoden.
Een veelgebruikte manier om rapporten te verspreiden naar mensen zonder Crystal Reports licentie, was de Report Distribution Expert. Hiermee kon een rapport als een executable worden opgeslagen. Iemand die het rapport wilde bekijken, installeerde de executable op zijn pc.
Deze Expert kon gebruikt worden tot en met versie 8.5 van Crystal Reports. Rapporten die gemaakt zijn met Crystal Reports 9 of 10 kunnen niet meer gecompileerd worden. Als oplossing om deze rapporten te verspreiden, biedt Crystal Reports het product Crystal Enterprise aan. Dit is een kant en klare oplossing waarmee gebruikers via een web browser de output van rapporten kunnen bekijken. Crystal Reports XI (v11) heeft Crystal Reports Server als mogelijkheid om rapporten dynamische te genereren en te verspreiden via het web.
Hoe kan ik de waarden van een range parameter in een rapport afdrukken?Crystal Reports ziet een range parameter als een array. Daarom zie je geen waarden als je een range parameter in je rapport opneemt. Je moet de waarden van de parameter afzonderlijk laten afdrukken. Dit kan bijvoorbeeld met de volgende formule.
"Tussen " & Minimum() & " en " & Maximum()Tijdens de cursus Crystal Reports Rapportontwerp 3 van het Internet Opleidingscentrum wordt verder ingegaan op dit onderwerp. Je leert dan bijvoorbeeld hoe je de waarden van meerdere ranges kunt laten afdrukken.
Hoe kan ik meerdere waarden van een parameter in een rapport afdrukken?Als het om een tekstparameter gaat, dan kun je hiervoor de functie
Join()gebruiken. Gebruik je deze functie niet, dan drukt Crystal alleen de eerste waarde van de parameter af.Is het geen tekstparameter, dan kun je toch de functie
Join()gebruiken door de waarden met de functieToText()om te zetten naar tekst.
Hoe geef ik een waarde uit een subrapport door naar een hoofdrapport?Je gebruikt hiervoor een shared variabele. Waar je vervolgens op moet letten, is dat je het subrapport in een (sub-)sectie plaatst, die wordt geëvalueerd vóór de sectie waarin je met de waarde van de shared variabele wilt gaan verder rekenen. In deze sectie hoef je alleen maar de shared variabele opnieuw te declareren.
Dit onderwerp komt uitgebreid aan bod in deel 3 van de cursus Crystal Reports Rapportontwerp 3 van het Internet Opleidingscentrum.
Tussen 2 tabellen in een rapport bestaat een outer join. Het rapport laat keurig alle gegevens zien. Ook van die rijen die geen corresponderende rijen in de andere tabel hebben. Als ik een recordselectie gebruik, dan verdwijnen de rijen die geen corresponderende rijen hebben. Hoe los ik dit op?Je kunt dit oplossen met een subrapport. De link tussen een hoofdrapport en een subrapport staat gelijk aan een left outer join. Dat betekent dat een rij in het hoofdrapport die geen corresponderende rijen in het subrapport heeft gewoon getoond wordt. Van een rij die wel corresponderende rijen in het subrapport heeft, worden deze vanuit het subrapport afgedrukt mét de beperking van de recordselectie in het subrapport.
Een andere oplossing is een query of command schrijven waarin de recordselectie onderdeel uitmaakt van de outerjoin. Het rapport dat je wilt maken, baseer je vervolgens op deze query of command. Dit onderwerp komt aan bod in de cursus Crystal Reports Rapportontwerp 3 v an het Internet Opleidingscentrum.
Hoe kan ik de paginanummering per groep opnieuw laten beginnen?Selecteer in de de Group Footer van de groep waarvan je de paginanummer na elke groep opnieuw wilt laten beginnen en vink de optie aan.
Wat zijn de belangrijkste verschillen tussen de verschillende edities van Crystal Reports 10?We kennen 4 edities van Crystal Reports 10:
- Standard
- Professional
- Developer
- Advanced Developer
De Standard editie is voldoende als rapporten alleen gemaakt worden op PC databases of een lokale SQL Server. Deze versie beschikt niet over een repository.
De Professional editie maakt het mogelijk om op elk type gegevensbron te rapporteren. In deze versie kun je ook over de repository beschikken. Verder krijg je bij deze editie een versie van Crystal Enterprise Express waarmee 5 gebruikers via het web toegang krijgen tot de gemaakte rapporten.
De Developer en Advanced Developer worden gebruikt om vanuit een zelfgebouwde applicatie een rapport te kunnen aanroepen. Het belangrijkste verschil tussen de Developer en de Advanced Developer is dat de Developer editie alleen gebruikt kan worden om een applicatie te bouwen en dat de Advanced Developer ook gebruikt kan worden om deze applicatie naar derden te verspreiden.
Wat zijn de belangrijkste verschillen tussen eerdere versies van Crystal Reports en Crystal Reports 10?Een belangrijk verschil tussen versie 10 en versies eerder dan 8.5 is de repository. De repository van Crystal Reports 10 maakt het veel gemakkelijker om objecten uit te wisselen tussen rapporten en rapportbouwers. Een andere belangrijke toevoeging is de functie DrillDownGroupLevel waardoor een drilldown rapport niet zo moeilijk meer is te implementeren. De Template Expert die vanaf versie 9 beschikbaar is, maakt het ook veel gemakkelijker om rapporten snel volgens een vast stramien op te maken.
Het belangrijkste verschil tussen versie 9 en versie 10 is dat de repository in versie 9 een lokaal mdb-bestand is en in versie 10 een onderdeel van Crystal Enterprise.
Vanaf versie 9 kan de Report Distribution Expert niet meer gebruikt worden om rapporten te compileren.
Hoe druk ik informatie tussen 2 gerelateerde velden (voornaam en achternaam, of straatnaam en huisadres) af zonder ongewenste witruimte tussen de waardes van deze velden?Je neemt de gewenste velden gescheiden door een spatie op in een tekstveld. Per record druk je dan altijd de waarde van het eerste veld af, vervolgens een spatie en tot slot de waarde van het tweede veld.
Hoe kan ik op een gemakkelijke manier informatie over het rapportontwerp vastleggen?Dit kan heel gemakkelijk door vanuit het geopende rapport de rapportdefinitie te exporteren. Dit doe je door te kiezen. Daarna kies je in het venster bij de optie .
NB. Bij de installatie van Crystal Reports moet je deze optie wel expliciet installeren. Je moet daarvoor een Custom Installation uitvoeren. Achteraf kun je deze optie uiteraard ook nog altijd installeren.
Kan ik parameters dynamisch maken?Dat hangt af van de editie van Crystal Reports die je gebruikt. Als je de Developer of de Advanced Developer editie gebruikt, dan kun je vanuit een zelfgeschreven applicatie waardes doorgeven aan de keuzelijst van een parameter in een CR rapport. Deze waardes kunnen afkomstig zijn van query op een tabel zodat altijd de meest actuele gegevens gebruikt worden.
Gebruik je de Standard of Professional editie dan kunnen parameters niet dynamisch gemaakt worden.
Hoe kan ik subtotalen binnen een groep bij elkaar optellen en/of aftrekken?Daarvoor heb je variabelen nodig. Voor elk subtotaal waar je mee wilt rekenen, moet je een variabele declareren. Stel dat je bijvoorbeeld een groepering op grootboekrekeningen hebt gemaakt en in het rapport levert dit een groep Omzet en een groep Kosten op. De subtotalen van deze 2 groepen wil je vervolgens van elkaar aftrekken. Stel dat de subtotalen valuta zijn. Je declareert dan de volgende 3 variabelen:
CurrencyVar omzet;
CurrencyVar kosten;
CurrencyVar verschil;In dezelfde formule ken je dan aan elke variabele de juiste waarde toe. Stel dat het veld waarop je groepeert,
grbk_nrheet en de tabel waaruit dit veld komtgrbk. Het veld dat je sommeert heetgrbr_bedrag. Onderstaand zie je de expressies om de variabelen de juiste waarde toe te kennen.IF GroupName() = "Omzet"
THEN
omzet := Sum(,);
IF GroupName() = "Kosten"
THEN
kosten := Sum(,);
verschil := omzet – kostenTijdens Crystal Reports Rapportontwerp 3 van het Internet Opleidingscentrum wordt nader op dit onderwerp ingegaan.
Hoe kan ik in één taartdiagram meerdere subtotalen afdrukken?Stel dat je een rapport hebt gemaakt op de Xtreme Sample Database van Crystal Reports. In dit rapport heb je 3 landen geselecteerd: USA, Canada en France. In de Details sectie heb je 3 formules opgenomen die de omzet voor 2000, 2001 en 2002 berekenen. Per land heb je het totaal van deze formules in de Group Footer opgenomen. Je zou deze subtotalen graag in een taartdiagram afdrukken. Helaas kun je in een taartdiagram maar 1 subtotaal opnemen. Via de volgende workaround kun je de 3 subtotalen toch in een taartdiagram opnemen:
Schrijf een formule (
) waarin je de 3 subtotalen opneemt in een string variabele. Neem tussen elk subtotaal een scheidingsteken op. Deze formule ziet er bijvoorbeeld als volgt uit:WhilePrintingRecords;
StringVar totalen;
CurrencyVar totaal1 := Sum(, );
CurrencyVar totaal2 := Sum(, );
CurrencyVar totaal3 := Sum(, );
StringVar totalen := totalen + ToText(totaal1) + "-" +
totalen + ToText(totaal2) + "-" +
totalen + ToText(totaal3)Plaats deze formule in de Group Footer. Neem in de Group Header nog een formule op waarin je de waarde van de string variabele totalen reset:
WhilePrintingRecords;
stringvar totalen := ""Splits vervolgens de Group Footer in een a en een b sectie. Neem in de b sectie een subrapport op waarin je net zoveel records selecteert als het aantal subtotalen dat je in de grafiek wilt opnemen. Gebruik hiervoor bijvoorbeeld de Customer tabel uit de Xtreme Sample Database. Met een selectie op het Customer ID kun je dan heel gemakkelijk het juiste aantal records selecteren
<= 3Link dit subrapport op de formule waarin je de subtotalen hebt opgeslagen. Vink het veld uit.
Voeg aan het subrapport 2 formules toe. Eén voor de labels in het taartdiagram en één voor de waarden in het taartdiagram. De formule voor de labels (
) ziet er als volgt uit:Select
Case 1 := "2000"
Case 2 := "2001"
Case 3 := "2002"De volgende formule (
) gebruik je om de afzonderlijke subtotalen in het subrapport op te nemen:ToNumber(Split()[RecordNumber])Vervolgens voeg je het taartdiagram toe aan het rapport. Je gebruikt hiervoor de . Aan het veld voeg je het formuleveld
toe en aan het veld het formuleveld).
Hoe kan ik objecten in verschillende secties en objecten in dezelfde sectie gemakkelijk met elkaar uitlijnen?Dit doe je door met de CTRL-toets de objecten te selecteren die je met elkaar wilt uitlijnen. Vervolgens klik je met rechts op het object waar je de andere objecten mee wilt uitlijnen. Dan kies je uit het snelmenu de optie en vervolgens een van de beschikbare uitlijnopties.
Hoe pas ik de gegevensbron aan die in een rapport gebruikt wordt?Stel dat je een rapport ontwerpt op een testomgeving. Als blijkt dat het rapport de juiste gegevens oplevert, moet het met de gegevens uit de produktieomgeving getoond worden. Je hoeft hiervoor het rapport niet opnieuw te maken. Het enige dat je moet doen is de gegevensbron die het rapport gebruikt veranderen. Dit doe je met het menu . Er verschijnt dan een venster waarin je de huidige gegevensbron ziet die wordt gebruikt en een overzicht van alle andere beschikbare gegevensbronnen. Je selecteert nu de huidige gegevensbron en de gegevensbron die je wilt gaan gebruiken en dan druk je op .
Hoe kan ik de achtergrondkleur van rijen gegevens in een rapport om en om een andere kleur geven?Je doet dit door in de op de tab de achtergrondkleur voor de Detailssectie conditioneel op te maken met de volgende formule:
IF Remainder(Recordnumber,2) = 0
THEN
crSilver
ELSE
DefaultAttribute
Hoe kan ik een andere groepering op een datum-tijd veld maken dan de standaard groeperingsmogelijkheden voor een dergelijk veld (bijvoorbeeld per 3 weken)?Dit kan alleen door een formule te maken die de gewenste groepering oplevert. In dit geval moet de formule steeds groepjes van 3 weken maken. Dit kun je op de volgende manier doen.
Select DatePart("ww",)
Case 1,2,3 : "Week 1 t/m 3"
Case 4,5,6 : "Week 4 t/m 6"
Case 7,8,9 : "Week 7 t/m 9"Op dezelfde manier als hierboven beschreven schrijf je elke case uit voor elk groepje van 3 weken
Hoe kan ik in een keer alle waardes kiezen voor een parameter waar meerdere waardes voor mogen worden opgegeven?Het is helaas niet mogelijk om met de CTRL of de SHIFT toets meerdere waardes tegelijkertijd uit de keuzelijst van een parameter te selecteren. Wat wel mogelijk is, is iemand de mogelijkheid geven om alle mogelijke waardes van een parameter in het rapport te zien. Dit werkt als volgt. Als eerste keuzemogelijkheid voor de parameter typ je zelf een waarde in (bijvoorbeeld
"Alle waardes"). Vervolgens voeg je alle andere waarden aan de keuzelijst toe. Vervolgens moet je met een formule controleren welke waarde(n) een gebruiker heeft gekozen. Deze formule ziet er als volgt uit:IF = "Alle waardes"
THEN
True
ELSE
=
Hoe kan ik de gegevens in een rapport dynamisch groeperen (bijvoorbeeld per week, per maand of per kwartaal)?Als je de gegevens in een rapport dynamisch wilt groeperen (of sorteren), dan moet je 3 stappen volgen:
- Maak een tekstparameter met als keuzelijst de groepeermogelijkheden die je wilt aanbieden. In dit voorbeeld maak je bijvoorbeeld een keuzelijst met de waarden
"Week, Maand, Kwartaal". - Maak een
If Then Elseof eenSelect Caseformule die test welke waarde voor de parameter uit stap 1 is opgegeven en laat de formule dan de daarbij horende waarde teruggeven.
Als iemand bijvoorbeeld"Week"heeft gekozen, dan moet de formule een weeknummer teruggeven. Hiervoor gebruik je de volgende functie.DatePart("ww",)Heeft iemand
"Maand"gekozen dan kun je ook weer de functieDatePart()gebruiken of de functieMonth(). - Groepeer op de uitkomsten van de formule die je bij stap 2 hebt gemaakt
Op dit onderwerp wordt dieper ingegaan in de cursus Crystal Reports Rapportontwerp 2 van het Internet Opleidingscentrum.
- Maak een tekstparameter met als keuzelijst de groepeermogelijkheden die je wilt aanbieden. In dit voorbeeld maak je bijvoorbeeld een keuzelijst met de waarden
Als ik voor een numerieke parameter een keuzelijst maak, dan worden de getallen met 2 decimalen getoond en/of met een scheidingsteken voor duizendtallen. Hoe kan ik ervoor zorgen dat deze getallen als gehele getallen worden getoond?De manier waarop getallen in Crystal Reports worden weergegeven, hangt af van de standaardinstelling. Deze geef je op in het menu. Standaard staat hier ingesteld dat getallen met 2 decimalen en een scheidingsteken voor duizendtallen worden afgebeeld. Deze instelling kun je veranderen, maar dat betekent dat getallen in alle gevallen zonder decimalen en zonder scheidingsteken voor duizendtallen worden afgedrukt.
Je kunt van de parameter ook een tekstparameter maken. De getallen die je dan (als tekst) invoert voor de keuzelijst van de parameter, zie je dan automatisch zonder decimalen en zonder scheidingsteken voor duizendtallen. Als je de waarde van de parameter wilt vergelijken met de waarde van een numeriek veld, dan gebruik je de functie ToNumber() om de tekstwaarde van de parameter om te zetten naar een getal.