Falls SQLServer ReportingServices (SSRS) mal Leerzeichen verschluckt

Heute ist uns im Projekt aufgefallen, dass SSRS-Tabellenfelder und Textboxen gerne mal Leerzeichen verschlucken. Ärgerlich ist das bei fest formatierten Textbausteinen, wie sie bei Labeltexten häufiger auftreten. Das Problem liegt daran, dass Tabelleninhalte im Report als HTML gerendert werden. Darunter leiden Zeilenumbrüche zwar nicht, aber Spaces am Zeilenanfang oder Folgen von mehreren Spaces werden dabei einfach verschluckt.

Die Lösung ist es wie bei HTML üblich Non-Breaking-Spaces in den Report zu streuen. Diese kann man mit Tastencode ALT-0160 in Windows erzeugen.

Natürlich sind diese wieder alles andere als schön in der Datenbank mit den Labeltexten und unpraktisch beim Einpflegen der Texte.

Besser ist es also die Spaces im Report zu wandeln. Dies kann in der Expression der entsprechenden Control passieren mittels

=REPLACE(Feld.Value," ", " ")

Das zweite Space in der Expression wird dabei natürlich als ALT-0160 via Ziffernblock eingegeben.

Von Word-Vorlage nach SSRS-Report

Derzeit erstelle ich für einen Kunden mehrere neue Reports mittels SQLServer Reporting Services (SSRS). Die Vorgaben dafür sind mehrere Beispiel-Word-Dokumente, die möglichst genau umzusetzen sind. Ein Szenario, das vermutlich ziemlich häufig auftritt, das sich was Zeilenabstände angeht aber garnicht mal so leicht gestaltet: Das Demodokument beinhaltet mehrere Textboxen, in jeder sind die Fontgrößen leicht anders eingestellt, und Word kümmerte sich ja selbstständig um die Abstände beim Umbruch. Wie simuliert man so etwas aber in SSRS ohne viel Rechnen und Herumschieben von Textboxen? Ich habe mir dabei wie im folgenden beschrieben geholfen.

Zeichensätze in Word haben Punkt-Angaben. Punkte (pt) sind 1/72 inch groß. Ein Inch widerum hat 2,54 cm. Für eine Textbox, die einen 8pt Font aufnimmt, setze ich eine Höhe von 8 + 1 pt. Das kommt sehr nah an die von Word gewählten Abstände.

Was ist das nun in cm? Einfacher Dreisatz: 2,54cm / 72 x 9 = 0,3175 cm. Prima. Allerdings sind 0,3175 cm nicht so leicht zu positionieren, da hilft auch ein Gitter nicht sonderlich viel. Die folgende Lösung scheint mir am effizientesten für SSRS zu sein:

Als Höhe ist der Wert schnell auf mehreren Boxen eingestellt: Eine der Textboxen wird auf die Höhe angepasst, die weiteren hinzu-selektiert, und den Rest macht der Toolbar-Button „Höhe angleichen“.

Um nun die Boxen mit richtigen Zeilenabständen vertikal zu positionieren hilft ein weiterer Button namens „vertikalen Abstand entfernen“. Ich finde das spart nun wirklich unglaublich viel Zeit und Rechnerei. Man muss ihn nur erstmal entdeckt haben.

Ein weiterer Faktor ist aber noch im Weg: Das Default-Padding einer Textbox ist 2pt;2pt;2pt;2pt. Dieses müssen wir für unsere Boxen auf 0pt;0pt;0pt;0pt ändern, ansonsten würde an allen Seiten zusätzlicher freier Raum um unseren Text gelassen. Das möchten wir in diesem Fall natürlich nicht.

Ein abschließendes Tuning, das verhindert, dass es uns das Layout bei langen Texten mal um die Ohren haut: Wir schalten die CanGrow-Option der Textboxen aus.

Ich denke die obigen Sachen nehmen dem Wandeln von Word nach SSRS-Report erstmal die größten Schrecken.