Rechnungsausdruck als PDF an Dienste zum Objekt

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
22 Beiträge • Seite 1 von 2 (current) Nächste
22 Beiträge Seite 1 von 2 (current) Nächste

Rechnungsausdruck als PDF an Dienste zum Objekt

Beitrag von freshsett (ForumUser / 9 / 6 / 0 ) »
Hallo zusammen,

ist es möglich, dass man eine Rechnung zum Zeitpunkt des Drucks eine PDF generiert und dem Anhang (Dienste zum Objekt) anlegt ?

Gruß freshsett

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


Re: Rechnungsausdruck als PDF an Dienste zum Objekt

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Kurz und bündig: JA
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.18
Basis: 7.50

Re: Rechnungsausdruck als PDF an Dienste zum Objekt

Beitrag von freshsett (ForumUser / 9 / 6 / 0 ) »
Danke :) Weißt du auch zufällig wie ?

Re: Rechnungsausdruck als PDF an Dienste zum Objekt

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Wenn es dir um den technischen Background geht, wie man überhaupt an das PDF rankommt, kann ich dir weiterhelfen.
Dazu müsste ich aber wissen welchen Formulartyp du einsetzt (SapScript/Smartforms/AdobeForms)

Wenn es darum geht wo man das Ganze einbaut (Badi, User-Exit) muss dir jemand anderes weiterhelfen, da ich kein FI Entwickler bin.

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
freshsett

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.18
Basis: 7.50

Re: Rechnungsausdruck als PDF an Dienste zum Objekt

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
freshsett hat geschrieben:Hallo zusammen,

ist es möglich, dass man eine Rechnung zum Zeitpunkt des Drucks eine PDF generiert und dem Anhang (Dienste zum Objekt) anlegt ?

Gruß freshsett
Hi,

wir haben das neulich noch gemacht. Was genau musst du wissen?

Gruß

Ralf

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
freshsett

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Rechnungsausdruck als PDF an Dienste zum Objekt

Beitrag von freshsett (ForumUser / 9 / 6 / 0 ) »
Hallo, Entschuldigung das ich mich jetzt erst melde. Hatte leider komischerweise keine Mail Benachrichtigung über neue Antworten bekommen :/.

Wir benutzen ein SAPScript. Und aus dem Formular soll zum Zeitpunkt des Ausdruck eine PDF generiert werden und diese soll dann an der Faktura selbst angehängt werden.

Ich würde gerne wissen wie man Dateien automatisiert ans GOS(Dienste zum Objekt) anhängt. Natürlich soll dies im Hintergrund passieren ohne Userinput.

Gruß und Danke

Re: Rechnungsausdruck als PDF an Dienste zum Objekt

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Hmmm, ich hab das mit Smartforms gemacht. Aus dem Funktionsbaustein den OTF-Stream ziehen, damit einen FuBau der SAP aufrufen, der ein PDF draus macht und dann nochmal den Baustein aufrufen mit gesetztem Archiv-Parameter.

So hab ich das dunkel in Erinnerung.

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
freshsett

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Rechnungsausdruck als PDF an Dienste zum Objekt

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Moin,
mit einer kleineren Anpassung (Verlinken mit GOS) funktioniert dieses Muster:
http://www.apentia-forum.de/viewtopic.php?f=11&t=21587
siehe auch:
http://www.apentia-forum.de/viewtopic.php?f=12&t=16922
Egal Smartforms oder Sapscript.
gruß Jens
Plan A:
Die einfachste Art an den begehrten Link in GOS zu kommen, besteht darin "DRUCKEN und ABLEGEN" für die Faktura einzurichten.
Das Dokument wird dann im Archiv abgelegt und verlinkt !
Plan B:
Einfach:
Das Druckprogramm customizen für Nachrichtenart RD00 (Transaktion NACE)
z.B. aus RVADIN01 wird YFAKTURA_GOS .Der Eintrag ENTRY kann in der Regel bleiben.

Bild

Bild

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Subroutinepool yfaktura_gos by TRON                                 *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

* WARNING : NO POPUPS - NO COMMIT WORK IN HERE !!!!!!!!!!!!!!!!!!!!!!!!!

REPORT  yfaktura_gos.
DATA: retcode   LIKE sy-subrc.         "Returncode
DATA: xscreen(1) TYPE c.               "Output on printer or screen
TABLES: nast,                          "Messages
        tnapr.                         "Programs & Forms

*&---------------------------------------------------------------------*
*&      Form  ENTRY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RETURN_CODE  text
*      -->US_SCREEN    text
*----------------------------------------------------------------------*
FORM entry USING return_code TYPE i
                 us_screen TYPE c.

  FIELD-SYMBOLS: <f> TYPE itcpp,
                 <p> TYPE  ssfcrescl.

  DATA pgnam TYPE na_pgnam." Programname
  DATA ronam TYPE na_ronam."Formname
  DATA fm_name TYPE rs38l_fnam. "genr.Druckbaustein
  DATA lv_vec(80).
  DATA spoolid TYPE rspoid.

  CLEAR retcode.
  xscreen = us_screen.

*   Call the "Original" Printroutine

* RVADIN01 = Sapscript
* RLB_INVOICE = Smartforms

*-Orig program------+
*                   |
*-Orig Form-+       |
*           |       |
  PERFORM entry(RVADIN01) USING return_code us_screen.

* Try Sapscript
  ASSIGN ('(SAPLSTXC)ITCPP') TO <f>.
  IF sy-subrc = 0 AND
     NOT <f>-tdspoolid IS INITIAL AND
     us_screen IS INITIAL.

    PERFORM putgos USING <f>-tdspoolid.
    UNASSIGN <f>.

  ELSE.
* Try Smartforms
    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        formname           = tnapr-sform
      IMPORTING
        fm_name            = fm_name
      EXCEPTIONS
        no_form            = 1
        no_function_module = 2
        OTHERS             = 3.

    IF sy-subrc <> 0.
      retcode = 1.
      EXIT.
    ENDIF.

    SELECT SINGLE pname FROM tfdir INTO lv_vec
    WHERE funcname = fm_name.
    IF sy-subrc = 0.

      CONCATENATE '(' lv_vec ')JOB_OUTPUT_INFO' INTO lv_vec.
      ASSIGN (lv_vec) TO <p>.

      IF sy-subrc = 0 AND
      NOT <p>-spoolids[] IS INITIAL AND
      us_screen IS INITIAL.

        LOOP AT <p>-spoolids INTO spoolid.
          PERFORM putgos USING spoolid.
          EXIT.
        ENDLOOP.
        UNASSIGN <p>.

      ENDIF. " have Ids

    ENDIF." tfdir entry

  ENDIF." sapscript/smartforms

  IF retcode NE 0.
    return_code = 1.
  ELSE.
    return_code = 0.
  ENDIF.

ENDFORM.                    "ENTRY

*&---------------------------------------------------------------------*
*&      Form  putgos
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->SPOOLID    text
*----------------------------------------------------------------------*

FORM putgos USING spoolid TYPE itcpp-tdspoolid.


  DATA:
  ls_fol_id TYPE soodk,
  ls_obj_id TYPE soodk,
  ls_obj_data TYPE sood1,
  ls_folmem_k TYPE sofmk,
  ls_note TYPE borident,
  ls_object TYPE borident,
  lv_ep_note TYPE borident-objkey.

* SRGBTBREL
  DATA:
  it_objhead TYPE STANDARD TABLE OF soli,
  it_content LIKE STANDARD TABLE OF soli,
  wa_content LIKE soli.
  ls_object-objkey = nast-objky.
  ls_object-objtype = 'VBRK'.

* convert
  DATA lcharlen TYPE i VALUE %_charsize.
  DATA i TYPE i.
  DATA j TYPE i.
  DATA lbuffer TYPE xstring.
  DATA lword(2) TYPE x.
  DATA cl_bconv TYPE REF TO cl_abap_conv_out_ce.
  DATA cl_xconv TYPE REF TO cl_abap_conv_out_ce.

  DATA: numbytes TYPE i,
        pdfspoolid LIKE tsp01-rqident,
        jobname LIKE tbtcjob-jobname,
        jobcount LIKE tbtcjob-jobcount.

  DATA: BEGIN OF pdf OCCURS 0,
        t(134),
        END OF pdf.


  CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
      EXPORTING
        src_spoolid                    = spoolid
        no_dialog                      = ' '
*        DST_DEVICE                     =
*       PDF_DESTINATION                =
      IMPORTING
        pdf_bytecount                  = numbytes
        pdf_spoolid                    = pdfspoolid
*       OTF_PAGECOUNT                  =
        btc_jobname                    = jobname
        btc_jobcount                   = jobcount
      TABLES
        pdf                            = pdf
      EXCEPTIONS
        err_no_otf_spooljob            = 1
        err_no_spooljob                = 2
        err_no_permission              = 3
        err_conv_not_possible          = 4
        err_bad_dstdevice              = 5
        user_cancelled                 = 6
        err_spoolerror                 = 7
        err_temseerror                 = 8
        err_btcjob_open_failed         = 9
        err_btcjob_submit_failed       = 10
        err_btcjob_close_failed        = 11.

  IF sy-subrc = 0.


    cl_bconv = cl_abap_conv_out_ce=>create(  ).
    cl_xconv = cl_abap_conv_out_ce=>create(  ).


    CLEAR: i, j.

    LOOP AT pdf.
      DO 134 TIMES.
        i = sy-index - 1.
        lword = cl_abap_conv_out_ce=>uccp( pdf+i(1) ).

        IF lcharlen > 1.
          cl_xconv->write( n = 1 data = lword+1(1) ).
          j = j + 1.
          IF j GE numbytes. EXIT. ENDIF.

          cl_xconv->write( n = 1 data = lword(1) ).
          j = j + 1.
          IF j GE numbytes. EXIT. ENDIF.

        ENDIF.

      ENDDO.
    ENDLOOP.

    lbuffer = cl_xconv->get_buffer( ).

    CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
      EXPORTING
        buffer     = lbuffer
      TABLES
        binary_tab = it_content[].


    CALL FUNCTION 'SO_CONVERT_CONTENTS_BIN'
      EXPORTING
        it_contents_bin = it_content[]
      IMPORTING
        et_contents_bin = it_content[].

    CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
      EXPORTING
        region    = 'B'
      IMPORTING
        folder_id = ls_fol_id
      EXCEPTIONS
        OTHERS    = 1.
    IF sy-subrc <> 0.
    ENDIF.

    ls_obj_data-objsns = 'O'.
    ls_obj_data-objla = sy-langu.
    ls_obj_data-objdes = 'Rechnung'.
    ls_obj_data-file_ext = 'PDF'.

    ls_obj_data-objlen = LINES( it_content ) * 255.

    CALL FUNCTION 'SO_OBJECT_INSERT'
      EXPORTING
        folder_id                  = ls_fol_id
        object_hd_change           = ls_obj_data
        object_type                = 'EXT'
      IMPORTING
        object_id                  = ls_obj_id
      TABLES
        objhead                    = it_objhead
        objcont                    = it_content
      EXCEPTIONS
        active_user_not_exist      = 1
        communication_failure      = 2
        component_not_available    = 3
        dl_name_exist              = 4
        folder_not_exist           = 5
        folder_no_authorization    = 6
        object_type_not_exist      = 7
        operation_no_authorization = 8
        owner_not_exist            = 9
        parameter_error            = 10
        substitute_not_active      = 11
        substitute_not_defined     = 12
        system_failure             = 13
        x_error                    = 14
        OTHERS                     = 15.


    IF sy-subrc = 0 AND ls_object-objkey IS NOT INITIAL.
      ls_folmem_k-foltp = ls_fol_id-objtp.
      ls_folmem_k-folyr = ls_fol_id-objyr.
      ls_folmem_k-folno = ls_fol_id-objno.
      ls_folmem_k-doctp = ls_obj_id-objtp.
      ls_folmem_k-docyr = ls_obj_id-objyr.
      ls_folmem_k-docno = ls_obj_id-objno.
      lv_ep_note = ls_folmem_k.
      ls_note-objtype = 'MESSAGE'.
      ls_note-objkey = lv_ep_note.

      CALL FUNCTION 'BINARY_RELATION_CREATE'
        EXPORTING
          obj_rolea      = ls_object
          obj_roleb      = ls_note
          relationtype   = 'ATTA'
        EXCEPTIONS
          no_model       = 1
          internal_error = 2
          unknown        = 3
          OTHERS         = 4.
      IF sy-subrc <> 0.
      ENDIF.


    ENDIF."SO_OBJECT_INSERT

  ENDIF." convert otf

ENDFORM.                    "putgos
&#91;&#93; ist gleichbedeutend mit []

Folgende Benutzer bedankten sich beim Autor Tron für den Beitrag:
freshsett

<:: 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: Rechnungsausdruck als PDF an Dienste zum Objekt

Beitrag von freshsett (ForumUser / 9 / 6 / 0 ) »
Vielen Dank für die tolle und Ausführliche Antwort. Ich werde gleich versuchen es umzusetzen :) Danke !

Re: Rechnungsausdruck als PDF an Dienste zum Objekt

Beitrag von freshsett (ForumUser / 9 / 6 / 0 ) »
Hallo,

nochmals vielen Dank für die Hilfe. Ich habe es mittlerweile geschafft das halbwegs umzusetzen, jedoch tritt ein weiteres Problem nun auf. Nachdem die PDF ans GOS drangehangen wurde (was sehr gut klappt) wollte ich die Datei öffnen was jedoch der Adobe Reader verweigert, da die Datei anscheinend beschädigt ist.

Irgendeine Idee voran das liegen könnte ?

Gruß

Re: Rechnungsausdruck als PDF an Dienste zum Objekt

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Möglich, dass du die Umwandlung mit cl_abap_conv_out_ce=>uccp nicht brauchst oder machen müsstest.
Ich würde es so machen:

Code: Alles auswählen.

concatenate lines of pdf into lbuffer in byte mode. "Nullzeichen am Ende weil Tabelle mit fixer Zeilenbreite
lbuffer = lbuffer(numbytes). "Die Bytelänge aus dem CONVERT_OTFSPOOLJOB_2_PDF um die unnötigen Nullzeichen zu entfernen.
Meine Devise: Immer mit dem Originalformat in Originallänge arbeiten.

lg ADT
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.18
Basis: 7.50

Re: Rechnungsausdruck als PDF an Dienste zum Objekt

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Moin,
ich vergaß zu Fragen. Welches SAP Release verwendet ihr ?
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: Rechnungsausdruck als PDF an Dienste zum Objekt

Beitrag von freshsett (ForumUser / 9 / 6 / 0 ) »
Eingesetzt wird SAP _BASIS Release: 700

Gruß und Danke

Re: Rechnungsausdruck als PDF an Dienste zum Objekt

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
... also UNICODE ?
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: Rechnungsausdruck als PDF an Dienste zum Objekt

Beitrag von freshsett (ForumUser / 9 / 6 / 0 ) »
Tron hat geschrieben:... also UNICODE ?
ne ist nicht unicode

gruße freshsett

Vergleichbare Themen

3
Antw.
15183
Views
Dienste zum Objekt - Notizen zu Objekt holen
von gazzle » 26.01.2011 12:24 • Verfasst in ABAP® Core
0
Antw.
1766
Views
0
Antw.
1597
Views
Alias für Dienste zum Objekt (GOS) URL
von Murdock » 04.12.2017 14:08 • Verfasst in Basis
3
Antw.
26796
Views
Dienste zum Objekt - Speicherort?
von tmaurer » 14.10.2005 08:07 • Verfasst in ABAP® Core
11
Antw.
12148
Views
Dienste zum Objekt - ME41
von Thomas17 » 08.03.2013 08:06 • Verfasst in Material Management & Produktionsplanung

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Aktuelle Forenbeiträge

Eclipse - warum/wann verwendet ihr es [nicht]
vor 10 Stunden von tar 21 / 1718
Dialog-Container mit Toolbar/Status
vor 12 Stunden von DeathAndPain gelöst 22 / 3137
Daten an Tabelle binden
vor 17 Stunden von Lukas Sanders 2 / 1026
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 599

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.

Aktuelle Forenbeiträge

Eclipse - warum/wann verwendet ihr es [nicht]
vor 10 Stunden von tar 21 / 1718
Dialog-Container mit Toolbar/Status
vor 12 Stunden von DeathAndPain gelöst 22 / 3137
Daten an Tabelle binden
vor 17 Stunden von Lukas Sanders 2 / 1026
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 599

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2599
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9185