Dieser Beitrag bezieht sich auf die Versionen:
Axapta 2.5, Axapta 3.0, Dynamics AX 4.0, Dynamics AX 2009
Axapta 2.5, Axapta 3.0, Dynamics AX 4.0, Dynamics AX 2009
|
|
|
|
|
|
Dieser Beitrag bezieht sich auf die Versionen:
Axapta 2.5, Axapta 3.0, Dynamics AX 4.0, Dynamics AX 2009
|
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:
{
;
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:
{
...
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
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!