PageFooter sind nicht immer dort, wo sie sein sollten

Ich kenne kein einziges AX-Projekt, in dem nicht zumindest einer der Berichte Auftragsbestätigung, Ausgangslieferschein oder Ausgangsrechnung angepasst worden sind. Und deshalb stolpere ich auch immer wieder über das selbe Problem: Man erweitert einen Bericht (Report) um einen PageFooter, der aber nicht auf jeder Seite angedruckt werden soll.

Die meisten Entwickler lösen dies einfach über die zur Section gehörige Methode executeSection() wobei sie den Aufruf super() ahänigig von irgendwelchen Kriterien ausführen oder nicht. Man findet z.B. solcherart Code des öfteren:

public void executeSection()
{
    ;
    if (salesFormLetterReport.isFooterPresentForCurrentPrintSetting())
    {
        super();
    }
}

Obiger Code ist z.B. aus dem PageFooter namens FooterText aus dem Report SalesConfirm (=Auftragsbestätigung). Hier ist das Ziel der Methode, den sog. Fusszeilentext in dieser Section immer nur dann anzudrucken, wenn dies in den Druckverwaltungseinstellungen für diesen Bericht (unter Debitoren / Einstellungen / Formulareinstellungen / Allgemeines / Druckverwaltung) entsprechend parametriert ist.

Dynamics AX ist nun aber leider so dumm, daß es sich - obwohl hier vielleicht gar kein Text parametriert ist - dennoch am Bericht den entsprechenden Platz reserviert. D.h. beim Ausdrucken des entsprechenden Dokumentes "rutschen" evtl. andere PageFooter zu weit hinauf und man verliert wertvollen Platz für Auftragspositionen o.ä.

Einfach umgehen kann man dieses Fehlverhalten über das deaktivieren der entsprechenden Section in der fetch()-Methode:

boolean  fetch()
{
    ...

    if ( !salesFormLetterReport.isFooterPresentForCurrentPrintSetting())
    {
        element.disableSection(FooterText); // FooterText ist der Name der Section
    }

    ...
}

Es gibt natürlich auch noch andere Wege. Beispielsweise könnte man die Höhe der ganzen Section über

FooterText.height(0, units::mm);

zurücksetzen. Es kommt immer auf die jeweilige Anforderung und den Aufbau des Reports an, für welche Variante man sich entscheidet.

Wichtig ist nur, immer super() in der exceuteSection() aufrufen!

Dieser Beitrag bezieht sich auf die Versionen:
Axapta 2.5, Axapta 3.0, Dynamics AX 4.0, Dynamics AX 2009

Kommentar hinzufügen
 
 

 

 
 
 
Beiträge des aktuellen Monats
März 2024
MoDiMiDoFrSaSo
 123
45678910
11121314151617
18192021222324
25262728293031
 
© 2006-2024 Heinz Schweda | Impressum | Kontakt | English version | Mobile Version
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.  Mehr dazu