Report per SUBMIT ausführen, Liste als PDF abrufen

Posten Sie hier Tutorials & Cookbooks.
1 Beitrag • Seite 1 von 1
1 Beitrag Seite 1 von 1

Report per SUBMIT ausführen, Liste als PDF abrufen

Beitrag von Lukas Sanders (ForumUser / 80 / 9 / 44 ) »
Dass man per Submit einen Report ausführen und die Listenausgabe mit dem Funktionsbaustein CONVERT_ABAPSPOOLJOB_2_PDF in das PDF-Format konvertieren kann, ist ja allgemein bekannt. Es gibt hierbei allerdings einige Fallstricke, die man beachten sollte. Daher hier einmal ein Versuch einer möglichst vollständigen Anleitung:

Grundidee

Über Submit soll aus einem beliebigen Programm ein Report aufgerufen werden, dessen Ergebnis eine Spool-Liste ist. Diese Spool-Liste soll wiederum als PDF weiterverarbeitet, z.B. per E-Mail versandt werden.

Ja, es gibt SIFbA und Smartforms etc., aber in manchen Fällen kann das dennoch sinnvoll sein. Ich habe dies zum Beispiel eingesetzt, um an Mitarbeiter ohne eigenen SAP-Zugang Kontoauszüge, welche mit SAP-Standardtransaktionen erzeugt werden, zu versenden - in dem Fall deutlich einfacher als ein Formular aufzubauen und die Logik nachzuprogrammieren.

Druckparameter

Bevor der Report aufgerufen wird, müssen zunächst die richtigen Druckparameter gesetzt werden. Der Funktionsbaustein GET_PRINT_PARAMETERS kann hier verwendet werden um entweder tatsächlich das Dialogfenster zur Abfrage der Druckeinstellungen aufzurufen oder die Vorlagewerte - je Benutzer - zu ziehen.

Code: Alles auswählen.

  CALL FUNCTION 'GET_PRINT_PARAMETERS'
    EXPORTING
      archive_mode   = '1'
    IMPORTING
      out_parameters = gs_print_parameters
      valid          = gv_prparam_valid
    EXCEPTIONS
      OTHERS         = 4.

  IF sy-subrc NE 0.
    " ...
  ENDIF.
Der Parameter ARCHIVE_MODE bestimmt, ob gedruckt oder archiviert wird - oder beides. Wir möchten hier nur drucken, daher eine 1. Die Paramter sind hier tatsächlich sehr gut dokumentiert.

Im obigen Aufruf würde das Dialofenster Druckeinstellungen aufgerufen. Möchte man das nicht, ist der Parameter NO_DIALOG auf "X" oder ABAP_TRUE zu setzen. Es gibt dann nur die Default-Druckparameter.

Ferner kann man auch über den Parameter USER die Standard-Druckparameter eines bestimmten Benutzers abrufen, falls nötig.

Insgesamt lohnt es sich, sich bei Problemen mit dem Ergebnis ein wenig mit dem Funktionsbaustein und seinen Parametern oder ganz allgemein den Druckparametern auseinanderzusetzen. Vieles kann man hier im Vorfeld steuern.

Parameter kann man danach natürlich noch fest vorgeben. PRNEW erzwingt das Anlegen eines neuen Spoolauftrages (macht SUBMIT ... TO SAP-SPOOL aber auch automatisch); PRIMM legt fest, dass wir nicht sofort drucken, sondern die Ausgabe im Spool halten wollen. PRCOP gibt die Anzahl der Kopien an, LINSZ legt die Spaltenbreite fest.

Code: Alles auswählen.

  gs_print_parameters-prnew = 'X'.
  gs_print_parameters-primm = ''.
  gs_print_parameters-linsz = '200'.
  gs_print_parameters-prcop = '1'.
Reportaufruf

Nun können wir den Report aufrufen. Wichtig ist, dass wir mit TO SAP-SPOOL die Ausgabe in einen neuen Spool-Auftrag erwirken. Hierbei werden auch die Druckparameter übergeben, die oben gesetzt wurden. Das Pop-Up zur Eingabe der Druckeinstellungen möchten wir dementsprechend nicht (noch einmal) rufen (WITHOUT SPOOL DYNPRO) - und wir möchten nach der Ausführung im aufrufenden Report weitermachen (AND RETURN).

Code: Alles auswählen.

  SUBMIT 'Z_IRGENDEIN_REPORT'
    TO SAP-SPOOL
    SPOOL PARAMETERS gs_print_parameters
    WITHOUT SPOOL DYNPRO
    AND RETURN.
Hier könnte übrigens mit LINE-SIZE und LINE-COUNT ebenfalls die Spaltenbreite und Spaltenanzahl pro Seite angegeben werden.

Spoolauftragsnummer abrufen

Um später die Spool-Liste zu konvertieren, benötigen wir nun die Nummer des Spool-Auftrags. Hierzu gibt es im Internet verschiedene Anleitungen, die teilweise darauf setzen, aus der Tabelle der Spoolaufträge den Auftrag mit der höchsten Nummer zum aktuellen Benutzer auszugeben oder über die Druckparameter einen Beschreibungstext mitzugeben, anhand dessen dann - ebenfalls über die Spool-Tabelle - der Auftrag identifiziert wird (auf SY-SPONO zuzugreifen klappt leider nicht).

Ich bin in der SAP-Community noch auf die Lösung gestoßen, einfach den Parameter "SPI" auszulesen. Hier steht immer die Nummer des zuletzt erzeugten Spoolauftrags.

Code: Alles auswählen.

GET PARAMETER ID 'SPI' FIELD lv_spool_no.
Diese Lösung hat sich nach meiner Erfahrung bewährt und ist mit einer Zeile Code schön kurz, sodass ich inzwischen diesen Weg bevorzuge.

Konvertierung

Die Konvertierung in das PDF-Format erfolgt dann, wie bereits beschrieben, über den Funktionsbaustein CONVERT_ABAPSPOOLJOB_2_PDF. Dieser hat allerdings auch seine Besonderheiten.

Code: Alles auswählen.

    CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
      EXPORTING
        src_spoolid           = CONV rspoid( lv_spool_no )
        no_background         = abap_true 
        no_dialog             = abap_true 
        pdf_destination       = abap_true 
        get_size_from_format  = abap_true
      IMPORTING
        pdf_bytecount         = lv_pdf_size
        bin_file              = lv_pdf_xstring
      EXCEPTIONS
        err_no_abap_spooljob  = 1
        err_no_spooljob       = 2
        err_no_permission     = 3
        err_conv_not_possible = 4
        OTHERS                = 5.
PDF_DESTINATION sollte hierbei auf "X" gesetzt sein, da dann die Ausgabe als XString erfolgt. Ansonsten wird ein PDF-Dokument als Spool-Auftrag angelegt.

Sollte der Spool-Auftrag mehr als 99 Seiten haben, wird die Konvertierung im Hintergrundjob ausgeführt. Der Funktionsbaustein läuft dann durch und wird mit einem Returncode 0 beendet, es wird allerdings kein PDF-Dokument zurückgegeben. Dieses wird auch wieder in den Spool geschrieben.

Wenn man warten kann und das entsprechend so programmieren möchte, kann man die Fertigstellung abwarten (WHILE-Schleife etc.) und dann über RSPO_RETURN_ABAP_SPOOLJOB_RAW das Ergebnis abrufen (siehe hier). Kann oder möchte man das nicht, kann dieses Verhalten über den Parameter NO_BACKGROUND auch einfach abgeschaltet werden. Es dauert dann nur manchmal ein wenig länger, bis die Konvertierung durch ist...

Man sollte dann auch gleichzeitig den Parameter NO_DIALOG setzen, welcher nämlich steuert, ob in o.g. Fall ein Pop-Up als Hinweis auf die Hintergrundverarbeitung erscheint.

Hiernach erhält man ein (hoffentlich schönes) PDF im XString-Format, das man als E-Mail-Anhang versenden, herunterladen oder sonst wie verarbeiten kann.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Seite 1 von 1

Vergleichbare Themen

9
Antw.
2548
Views
Inaktives Report ausführen?
von generic_user » 21.03.2020 20:38 • Verfasst in ABAP® für Anfänger
5
Antw.
6603
Views
Ausführen-Button im Report.
von rsb » 28.04.2006 15:04 • Verfasst in ABAP® Core
5
Antw.
6713
Views
Im Funktionsbaustein ein Report ausführen
von kaim77 » 29.11.2013 11:30 • Verfasst in ABAP® Core
0
Antw.
1702
Views
SUBMIT report ....
von SAP_ENTWICKLER » 02.05.2016 13:13 • Verfasst in ABAP® Core
12
Antw.
1894
Views
SUBMIT Report
von HH_ABAP » 08.09.2023 09:46 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag

Lukas Sanders

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Benutzerdefinierte Felder PSP
letzen Monat von Rabea1103 1 / 46553
Spool vereinen OTF und PDF
letzen Monat von anna2205 1 / 62886
XSLT und Loipro05 Transformation
December 2025 von Torsten1965 1 / 72094