Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Preise in Rechnungen unten ausrichten (2007)

Je nach Geschmack oder Kundenwunsch möchte man den Preis einer Rechnungsposition unten oder oben am Positionstext ausrichten. Während die Ausrichtung am oberen Rand der Position standardmäßig erfolgt, wird das am unteren Rand schon schwieriger. Dieser Beitrag zeigt, wie es funktioniert - leider nur unter Access 2007.

Beispieldatenbank

Eine Datenbank mit dem hier vorgestellten Beispielbericht finden Sie unter folgendem Link:

Problem

Diese Lösung verwendet der Einfachheit halber eine Tabelle, die lediglich drei Felder mit der ID, dem Text (Position) und dem Preis einer Position enthält. Der passende Bericht zeigt die beiden Felder Position und Preis in zwei nebeneinander liegenden Feldern im Detailbereich an. Damit lange Positionstexte umbrochen und über mehrere Zeilen verteilt angezeigt werden können, stellen Sie die Eigenschaft Vergrößerbar des Feldes Position auf Ja ein. Lange Texte werden nun umbrochen, der Preis bleibt jedoch wie erwartet oben stehen. Wie kann man diesen dazu bewegen, am unteren Rand des Detailbereichs zu erscheinen? Die einfachste Idee wäre, die Eigenschaften Oben und Höhe des Preisfelds im Ereignis Beim Formatieren so einzustellen, dass es abhängig von der Höhe des Felds Position bündig mit dessen unteren Rand abschließt und so hoch ist, das der Preis bündig mit der letzten Zeile des Positionstextes erscheint. Dies scheitert jedoch daran, dass das Beim Formatieren-Ereignis zu einem Zeitpunkt ausgelöst wird, wo die Höhe des gefüllten Position-Felds noch nicht bekannt ist. In der weiteren Ereignisprozedur, die je Datensatz einmal ausgelöst wird, ist keine Änderung der Eigenschaften Oben oder Höhe mehr möglich.

Lösung

Die Lösung erfordert den Einsatz eines weiteren, ungebundenen Textfelds. Dieses nennen Sie txtPreis. Es soll genauso groß wie das Feld Position sein, aber sein rechter Rand soll am rechten Rand des normalerweise für die Anzeige des Preises verantwortlichen Felds ausgerichtet sein.

Auch dieses Feld erhält den Wert Ja für die Eigenschaft Vergrößerbar (genauso wie auch der Detailbereich selbst, falls diese Einstellung noch nicht vorliegt).

Nun brauchen Sie nur noch die folgenden drei Ereignisprozeduren:

Dim intHeight As Long

Private Sub Report_Open(Cancel As Integer)

    intHeight = Me!txtPreis.Height

End Sub

Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)

    Me!txtPreis.TopMargin = 0

    Me!txtPreis = Me!Position

End Sub

Private Sub Detailbereich_Print(Cancel As Integer, PrintCount As Integer)

    Me!txtPreis = Me!Preis

    Me!txtPreis.TopMargin = Me!Position.Height - intHeight

End Sub

Die Lösung verwendet zwei kleine Tricks: Der erste besteht darin, den Inhalt des gebundenen Feldes Position in das ungebundene Feld txtPreis zu schreiben, damit dieses die gleiche Höhe wie der Positionstext erhält. Das erledigt die zweite Anweisung der Routine Detailbereich_Format. Nun haben wir ein Feld, dass den Preis aufnehmen kann und so hoch wie das Positionsfeld ist, aber der Preis befindet sich noch nicht am unteren Rand dieses Felds.

Dies erreichen wir mit der selten genutzten Eigenschaft TopMargin, die den Abstand des Texts zum oberen Textfeldrand angibt. Der Clou dabei ist, dass diese Eigenschaft auch noch in der Ereignisprozedur Beim Drucken geändert werden kann, obwohl der Datensatz schon formatiert ist. Diese Eigenschaft stellen Sie auf die Differenz der Höhe des Positionsfeldes und der ursprünglichen Höhe des Felds txtPreis ein. So wird der Preis genau am unteren Rand des Textfelds abgebildet.

In der folgenden Beim Formatieren-Prozedur müssen Sie TopMargin jeweils wieder auf den Wert 0 einstellen, damit das Feld txtPreis wieder seine Ursprungsgröße annimmt.

© 2003-2015 André Minhorst Alle Rechte vorbehalten.