Ergänzen Spoolauftrag zu PDF Formular

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

Ergänzen Spoolauftrag zu PDF Formular

Beitrag von Haubi (Expert / 605 / 12 / 26 ) » 12. Aug 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 / 1088 / 17 / 236 ) » 12. Aug 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 / 605 / 12 / 26 ) » 12. Aug 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 / 1088 / 17 / 236 ) » 12. Aug 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 / 605 / 12 / 26 ) » 12. Aug 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 / 1088 / 17 / 236 ) » 12. Aug 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 / 178 / 29 / 14 ) » 26. Aug 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 / 3311 / 60 / 603 ) » 27. Aug 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 ) » 5. Sep 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

Seite 1 von 1

Aktuelle Forenbeiträge

Typprüfung auf ein Feld in einer Struktur gelöst
vor 20 Stunden von Somani 6 / 82
Report-Entwurf mit Mediator-Entwurfsmuster
vor 20 Stunden von Maximus 3 / 158
SELECT + LOOP: Geschwindigkeit?
vor 22 Stunden von DeathAndPain 33 / 436
Status Kundenauftrag erledigt bei auftragsbezogener Faktura gelöst
Gestern von SAP_ENTWICKLER 1 / 35

Unbeantwortete Forenbeiträge

Verpacken vorhandener HUs an Auslieferungen
vor einer Woche von Trilla_CB 1 / 27
RFC_READ_TABLE mit RANGES selection
vor einer Woche von Tron 1 / 95