ich habe folgendes Problem:
Ich mache ein RMA-Formular für Erweitertes Retourenmanagement gemacht (Kopie von Nachrichtenart NEU)
ITEM-Zeilen haben eine dynamische Anzahl, da Text eingelesen wird.
(Ein zählen der Zeilen ist nahezu unmöglich)
Jetzt soll eine Fußzeile immer unten angedruckt werden.
Als eigenes Fenster kann ich es nicht machen, da mir sonst auf jeder Seite 7 Zeilen fehlen.
Ich steuere das Textelement nach dem Druck der einzelnen Positionen an.
Aufruf im Druckprogramm:
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'FOOT'
type = 'BOTTOM'
window = 'MAIN'
EXCEPTIONS
OTHERS = 01.
Formular:
/: FOOT
PERFORM PRUEFEN_LETZTE_POS IN PROGRAM ZPO_RMA_FORMEXITS
USING &EKPO-EBELN&
USING &EKPO-EBELP&
CHANGING &Z_LETZTE_POS&
ENDPERFORM
PROTECT
IF &Z_LETZTE_POS& = 'X'
IF &SAPSCRIPT-FORMPAGES& = ' 0'
NEW-PAGE NEXT
ENDIF
INCLUDE ZM_PO_RMA_FOOT_TEXT OBJECT TEXT ID ST LANGUAGE DE
ENDIF
ENDPROTECT
/: LAST
NEW-PAGE LAST
Ich ermittle die letzte Bestell-Position in einem Formexit.
Leider klappt der NEW-PAGE - Befehl nicht immer.
(BSp. auf Seite 1 Kopf und 2 Positionen.
Wenn der 'Fußtexttext' nicht mehr auf die Seite passt, dann soll auf der zweiten Seite unten (Bottom)
der 'Fußtext' gedruckt werden, dann Seite 3 (letzte Seite mit Textzeilen - kompett voll wird immer gedruckt)
Ich bin davon ausgegangen, dass wenn SAPSRCIPT-FORMPAGES = ' 0', dass dann die letzte SEite gedruckt wird.
ist evtl. dies eine Möglichkeit:
Du kannst auch eine letzte Seite definieren, z.B. LAST, die die gewünschten
Felder enthält.
Am Ende des Fließtextes im Fenster MAIN wird dann mit
/: NEW-PAGE LAST
eine Ergänzung aus einem älteren Kommentar
Hallo,
also die letzte Seite mit Variablen abfragen geht technisch nicht.
In der Systemvariable &SAPSCRIPT-FORMPAGES& steht zwar die Anzahl der Seiten drin, aber diese ist erst zum Schluss bekannt. D.h. erst wenn der Formularprozessor fertig ist, steht darin die korrekte Zahl, logisch! Wie soll denn das Programm im Vorhinein wissen (es könnte ja alles kommen: variable Schriftgrößen, ganz zu Schweigen von eingebundenen Grafiken und Include-Texten etc.) wieviele Seiten rauskommen? Diese Variable wird auch vom Formularprozessor besonders behandelt: Erst wenn das Formular fertig ist, wird der darin enthaltene Wert an den Ausgabestellen in der Formularausgabe übertragen.
Es gibt eine Methode indem man das komplette Formular einmal vorprozessieren kann, aber davon habe ich nur mal am Rande gehört und weiß nicht ob das überall funktionieren kann...
Hier muss man sich einfach mit einem zusätzlichen Textelement (z.B. das /E LAST falls es nicht schon benutzt wird oder ein eigenes) im Main-Fenster des Formulars helfen.
Dann muss man noch im Druckprogramm dafür sorgen, dass das Textelement irgendwann angedruckt wird. In diesem Fall, wenn alle Textelemente in der Verarbeitung des Main-Fensters angesteuert worde sind, dann dieses Textelement (als Letztes) andrucken.
Und durch das einbinden im Main-Fenster hat man das Problem, dass auch ein längerer Text nicht gedruckt wird wie in einem fix definierten Nebenfenster, damit beseitigt.