Ergänzen Spoolauftrag zu PDF Formular

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Ergänzen Spoolauftrag zu PDF Formular

Beitrag von Haubi (Expert / 608 / 13 / 27 ) » 12.08.2019 11:57
Moinsen.

Ich habe mal gerne folgendes Problem: ich habe hier ein PDF-Formular, welches problemlos ausgegeben wird. Ich möchte die Ausgabe jetzt allerdings um ein oder mehrere weitere PDFs (Originale zu Dokumentinfosätzen) ergänzen.
Meine Idee wäre, die PDFs vor dem Aufruf von FP_JOB_CLOSE zusätzlich in den Spoolauftrag zu schreiben.
Hat hier jemand eine Idee, wie das funktionieren könnte? Oder einen anderen Ansatz?

Grüße,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...


Re: Ergänzen Spoolauftrag zu PDF Formular

Beitrag von Tron (Top Expert / 1187 / 22 / 274 ) » 12.08.2019 12:29
Moin.
Versuch mal ob Du den Spoolauftrag offen halten kannst, um einen zweiten, oder mehr, Drucke zu starten.

https://www.berater-wiki.de/Spool-Auftrag
Funktionsbaustein FP_JOB_OPEN
Der Funktionsbaustein FP_JOB_OPEN öffnet einen Spoolauftrag.
Wird beim Aufruf des Funktionsbausteins FP_JOB_OPEN mit dem Parameter REQNEW explit mitgegeben, dass ein neuer Spoolauftrag geöffnet werden soll, wird ein neuer Spoolaufträge angelegt, in dem die Inhalte geschrieben werden.
Wurde ein alter Spoolauftrag abgeschlossen oder hat den Status "Fertig" oder "Error" ist es nicht mehr möglich in diesen Spoolauftrag zu schreiben
Wird ein Spoolauftrag beim Aufruf mit FP_JOB_OPEN nicht als "abgeschlossen" versehen mit dem Paramter REQFINAL und hat einen offenen Status, ist es auch nach Aufruf des Funktionsbausteins FP_JOB_CLOSE von anderen Programmen/oder beim erneuten Starten des Programms möglich weiterhin Inhalte in diesen Spool zu füllen
mit Smartforms habe ich das schon gemacht.
Was soll denn mit dem Spool plus Anhang passieren ?
gruß Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Ergänzen Spoolauftrag zu PDF Formular

Beitrag von Haubi (Expert / 608 / 13 / 27 ) » 12.08.2019 12:44
Moin Jens.

Ja, aber wie bekomme ich die PDFs (die ich programmintern als XSTRING bzw. ITab halte) in den Spool-Auftrag? Ich habe bisher keinen Baustein gefunden, mit dem ich ein neues Part aus binären Inhalten anlegen konnte.

Grüße,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Re: Ergänzen Spoolauftrag zu PDF Formular

Beitrag von Tron (Top Expert / 1187 / 22 / 274 ) » 12.08.2019 13:51
.... na ja , deshalb die Frage was das eigentliche Ziel ist.
Eine Email, oder Archivierung, oder anhängen an GOS ?
Der Spool eines Adobe PDFs unterscheidet sich erheblich von Smartforms, oder Sapscript.
Nichts davon wird jedoch Binär angehängt (OTF bzw. XML)
gruß Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Ergänzen Spoolauftrag zu PDF Formular

Beitrag von Haubi (Expert / 608 / 13 / 27 ) » 12.08.2019 14:59
Ziel ist Ausdruck.
Für Mail- bzw. Fax-Versendung nehme ich das durch das Formular erzeugte PDF als XSTRING. Für den Ausdruck fällt mir aber nichts Anderes ein, als die Zusatz-PDFs in den Spool zu schreiben.
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Re: Ergänzen Spoolauftrag zu PDF Formular

Beitrag von Tron (Top Expert / 1187 / 22 / 274 ) » 12.08.2019 16:25
...
Ok dann ist das vielleicht die Lösung.
https://answers.sap.com/questions/93403 ... tream.html

Funktionsbaustein ADS_CREATE_PDF_SPOOLJOB.
Testprogramm FP_TEST_SAVE_PDF_TO_SPOOL.


gruß Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Ergänzen Spoolauftrag zu PDF Formular

Beitrag von Lucyalison (Specialist / 193 / 34 / 15 ) » 26.08.2019 16:32
Hallo Haubi,

ich habe das bei meinem Kunden folgendermassen realisiert - ich setze in einem Enhancement im Programm SD_SDOC_PRINT01 (Ausdruck ist ein SD-Kontrakt) das Kennzeichen für Bundling, damit wird ein erneutes Öffnen eines Spooljobs mit dem Funktionsbaustein FP_JOB_OPEN verhindert. Dann werden in der Methode PRINT_DATA des BADIs SD_SLS_PRINT01 über den Belegfluss die zugehörigen Angebote ermittelt und die Nachrichten dazu ausgegeben. Das mache ich folgendermassen:

Code: Alles auswählen.

* Assign data in RSNAST00
* NAST
            ASSIGN ('(RSNAST00)NAST') TO <ls_nast>.
            CHECK <ls_nast> IS ASSIGNED.
            MOVE-CORRESPONDING s_xnast TO <ls_nast>.
* TNAPR
            ASSIGN ('(RSNAST00)TNAPR') TO <ls_tnapr>.
            MOVE-CORRESPONDING s_tnapr TO <ls_tnapr>.
* RETURNCODE
            ASSIGN ('(RSNAST00)RETURNCODE') TO <lv_rc>.
            CLEAR <lv_rc>.

* Trigger processing in messaging
            PERFORM programm_aufrufen
                    IN PROGRAM rsnast00
                    USING 'W'.
In der gleichen Methode wird, nachdem alle Angebote ausgegeben wurden, das Kennzeichen für Bundling wieder gelöscht. Damit wird der Baustein FP_JOB_CLOSE angestossen und der Spooljob geschlossen. Danach stehen alle Druckausgaben in einem PDF zur Verfügung.

Das ist vielleicht ein bisschen schwierig das so 'trocken' nachzuvollziehen, aber es klappt tadellos.

Viele Grüsse
Nicola

Re: Ergänzen Spoolauftrag zu PDF Formular

Beitrag von black_adept (Top Expert / 3411 / 66 / 656 ) » 27.08.2019 10:27
Moin Haubi,

schau mal in folgenden Link: http://weberpatrick.de/abap-pdf-dokument-drucken/
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Ergänzen Spoolauftrag zu PDF Formular

Beitrag von Mushroomator (ForumUser / 1 / 0 / 0 ) » 05.09.2019 14:50
Hallo Haubi,

hatte eine ähnliche Anforderung. Bekomme eine Spool-ID mit der ich dann den Inhalt dieses Spools auslese und dann eine PDF-Datei zusätzlich lese und diese beiden Dateien dann als XSTRING mithilfe der Klasse cl_rspo_pdf_merge zu einem PDF zusammenfüge und dann ausdrucke. Hier mal 2 Links und ein Code Snippet mit dem solltest du das hinbekommen :)

PDF-Merge:
Hier Infos und Beispiele zum PDF-Merge. Hilfreich ist vor allem auch die .pdf Datei, die zum Download bereit steht. Man sollte sich aber wohl eine temporäre E-Mail erstellen um nicht vollgespamt zu werden ;) (siehe spoofmail.com)

https://mind-forms.de/sap-formulartechn ... g-mit-sap/

Druck
Der anschließende Druck erfolgt so:
http://weberpatrick.de/abap-pdf-dokument-drucken/

Ein Teil meiner Lösung:

Code: Alles auswählen.

*----------------------------------------------------
* File 1: 
*----------------------------------------------------
* Get XSTRING of file 1 by using spool-id
  CALL FUNCTION 'ADS_RETURN_SPOOLJOB'
    EXPORTING
      rqident        = ex_spoolid
    IMPORTING
      pdf            = lv_file1_xstring
    EXCEPTIONS
      no_such_job    = 1
      no_permission  = 2
      internal_error = 3
      not_supported  = 4
      empty_job      = 5
      wrong_doctype  = 6
      OTHERS         = 7.
  IF sy-subrc <> 0.
* TODO Implement suitable error handling here
  ENDIF.


*----------------------------------------------------
* File 2: 
*----------------------------------------------------
* Concatenate filename
  CONCATENATE: ex_path ex_filename INTO lv_full_path.
  CONDENSE: lv_full_path NO-GAPS.

* Check if desired file exists
  CALL METHOD cl_gui_frontend_services=>file_exist
    EXPORTING
      file                 = lv_full_path
    RECEIVING
      result               = lv_file_existing
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      wrong_parameter      = 3
      not_supported_by_gui = 4
      OTHERS               = 5.
  IF sy-subrc <> 0.
*   Implement suitable error handling here
  ELSE.
    IF lv_file_existing = abap_false.
      "TODO file not existing -> Error handling 
    ENDIF.
  ENDIF.

* read 2nd file in binary mode
  CALL METHOD cl_gui_frontend_services=>gui_upload
    EXPORTING
      filename                = lv_drawings_path
      filetype                = 'BIN'
    IMPORTING
      filelength              = lv_size
    CHANGING
      data_tab                = lt_file
    EXCEPTIONS
      file_open_error         = 1
      file_read_error         = 2
      no_batch                = 3
      gui_refuse_filetransfer = 4
      invalid_type            = 5
      no_authority            = 6
      unknown_error           = 7
      bad_data_format         = 8
      header_not_allowed      = 9
      separator_not_allowed   = 10
      header_too_long         = 11
      unknown_dp_error        = 12
      access_denied           = 13
      dp_out_of_memory        = 14
      disk_full               = 15
      dp_timeout              = 16
      not_supported_by_gui    = 17
      error_no_gui            = 18
      OTHERS                  = 19.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

* Convert binary to hex string
  CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
    EXPORTING
      input_length = lv_size
    IMPORTING
      buffer       = lv_file2_xstring
    TABLES
      binary_tab   = lt_file
    EXCEPTIONS
      failed       = 1
      OTHERS       = 2.
  IF sy-subrc <> 0.
* TODO Implement suitable error handling here
  ENDIF.


*----------------------------------------------------
* Merge two files
*----------------------------------------------------
  TRY.
      DATA(lo_pdf_merger) = NEW cl_rspo_pdf_merge( ).
    CATCH cx_rspo_pdf_merge INTO DATA(lo_rspo_pdf_merge).
      MESSAGE lo_rspo_pdf_merge->get_text( ) TYPE 'E'.
  ENDTRY.

* First add file 1 data to document
  lo_pdf_merger->add_document( lv_file1_xstring ).
* Then add file 2 data to document
  lo_pdf_merger->add_document( lv_file2_xstring ).
* Do actual merge
  lo_pdf_merger->merge_documents( IMPORTING merged_document = DATA(lv_merged_data) ).
Hier kann man natürlich beliebig viele Dokumente noch anfügen.

Hoffe das hilft :)

Gruß
Mushroomator

Re: Ergänzen Spoolauftrag zu PDF Formular

Beitrag von malibu (ForumUser / 1 / 0 / 0 ) » 20.05.2020 16:25
Hallo zusammen,

ich glaube die bisherigen Antworten haben alle nicht zu 100% gepasst.

Wenn ich Haubi richtig verstehe, habe ich nämlich gerade dasselbe Problem. Ich bewege mich übrigens genau im von Nicola genannten BAdI.

Zwischen FP_JOP_OPEN und FP_JOB_CLOSE erzeuge ich mehrere PDF-Formulare, die auch alle wie gewünscht in einer Spool landen. So weit so gut.

Allerdings habe ich ein weiteres PDF-Dokument, welches ich nicht erst jetzt gerade erzeuge (dann würde es ja ganz normal mit den anderen zusammen in der Spool landen), sondern welches ich als XSTRING zur Hand habe (in meinem Fall aus dem Archiv geholt).

Wie schaffe ich es nun, dass dieses PDF zusammen mit den anderen (frisch erzeugten) in der aktuell offenen Spool landet?

Ich suche also einen FuBa (oder Methode) mit der Funktionalität "ich nehme ein PDF als Import-Parameter und stelle dieses in die aktuell offene Spool".

Vielen Dank und viele Grüße
David

Re: Ergänzen Spoolauftrag zu PDF Formular

Beitrag von tsform (ForumUser / 1 / 0 / 0 ) » 27.05.2020 16:09
Hallo Haubi,

nach einiger Recherche zu genau diesem Problem fürchte ich inzwischen, dass es nicht generell lösbar ist.
Der bereits diskutierte FuBa ADS_CREATE_PDF_SPOOLJOB erfüllt die Anforderung im Prinzip - jedoch nur, wenn auf einen Drucker mit Druckertyp 'PDF' (z. B. Gerätetyp SAPWIN) ausgegeben wird. Man kann nun per Modifikation oder in einer FuBa-Kopie diese Prüfung ausbauen, dann wird eine Sammelspool erzeugt, die normalerweise auch wie üblich in TA sp01 angeschaut werden kann. Der Ausdruck hingegen funktioniert wohl nur, wenn die Einzel-PDFs mit dem ADS erzeugt wurden, deshalb ist vermutlich die Prüfung von SAP eingebaut worden. (Ich vermute übrigens, dass der Druck auf anderen Druckertypen als 'PDF' früher auch für ADS-Dokumente nicht funktioniert hat, hierauf deutet hin: https://help.sap.com/saphelp_nwes73/hel ... cache=true .)

Das würde leider bedeuten, man müsste alle verwendeten Drucker auf Druckertyp 'PDF' umstellen und ihnen dafür passende XDC-Dateien zuordnen.
Ich hoffe daher auf einen Geistesblitz von irgendwem und eine machbarere Lösung?

Viele Grüße
Thorsten

Re: Ergänzen Spoolauftrag zu PDF Formular

Beitrag von a-dead-trousers (Top Expert / 3500 / 113 / 907 ) » 28.05.2020 08:00
Der ADS legt neben dem PDF (für die Druckvorschau) auch eine PCL Datei (bzw. ZPL für Zebradrucker) ab die für den tatsächlichen Ausdruck am Drucker verwendet wird .
Soweit ich weiß kann man in SAP aber auch direkt PDFs an den Drucker senden. Wichtig ist dabei, dass der Drucker auch PDF versteht, sonst kommt am Ende nur Zeichensalat raus. Testen kann man das, indem man z.B. in Windows über die Kommandozeile ein PDF direkt an den Drucker schickt, dann erfolgt nämlich auch keine "Nachbehandlung" irgendwelcher Windowstreiber.
Wie man das dann aber in SAP ereicht weiß ich wiederum leider nicht. SAP setzt ja auf die Spool-Umgebung des Betriebsystems auf dem der Appl.Server läuft. Es muss also irgendwie möglich sein. Ich hab schon probiert mit Format "RAW" zu arbeiten, aber auch das hat nicht funktioniert.
Dass es geht bin ich überzeugt, wie auch diverse Artikel im Internet es bezeugen, nur ich hab es nicht geschafft.
Was ich mal scherzhalber ausprobiert hab, war eine PDF in ein PS (GhostScript) bzw. ein PCL (GhostPDL) umzuwandeln und so einen ADS-Druck zu "simulieren". Das hat dann auch geklappt, ist aber ziemlich kompliziert und nicht praktikabel.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Seite 1 von 1

Vergleichbare Themen

ALV-Grid: Spaltenvorrat ändern/ergänzen?
von piemo » 29.08.2007 11:00
Variable Datumsberechnung - Liste ergänzen?
von Jufo » 08.12.2005 17:59
Smartforms Formular nach SAPscript Formular aufrufen
von walda33 » 26.01.2014 10:14
BAnf-Daten bei Neuanlage wie ergänzen (CI_EBANDB)?
von kevinh » 17.07.2013 11:24
Excel-Datei mit Daten in SAP ergänzen + Download
von tklein » 22.11.2013 18:39