User-Exit bei VF01 bzw. VF02

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

SAP R/3 Vertrieb: Auftragsverwaltung, Versand und Transport, Fakturierung, Kreditmanagement, Außenhandel/Zoll...
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

User-Exit bei VF01 bzw. VF02

Beitrag von METi12 (ForumUser / 11 / 4 / 0 ) »
Hallo zusammen,

ich habe eine neue Nachrichtenart angelegt und habe für Sendemedium „Druckausgabe“ dazu ein eigenes Druckprogram erstellt. Der Versandzeitpunkt ist „sofort versenden (beim Sichern der Anwendung). Die Form-Routine ist bei mir ENTRY. Dieses Druckprogram sendet meine Faktura als Mail.

Bevor eine Faktur mit meine Nachricht verarbeitetet wird, soll in der VF01 bzw. VF02 eine Popup als Info „Faktura wird per Mail versendet“ erscheinen.
Ich denke mal dass ich den USER-Exit „USEREXIT_NUMBER_RANGE“ verwenden soll.

Leider habe ich kein Plan wie und wo ich meine Nachricht ändern soll. Ich hoffe jemand kann mir weiter helfen.

Für eure Hilfe bedanke ich mich sehr im Voraus.

Mein Coding als Hilfe:

Code: Alles auswählen.

*    *&---------------------------------------------------------------------*
*    *& Subroutinepool INVOICE EMAIL AS PDF ATTACHMENT                      *
*    *&                                                                     *
*    *&---------------------------------------------------------------------*
*    *&                                                                     *
*    *&                                                                     *
*    *&---------------------------------------------------------------------*
*
*    * WARNING : NO POPUPS - NO COMMIT WORK ALLOWED !!!!!!!!!!!!!!!!!!!!!!!!!

     REPORT  mail.
     DATA: retcode   LIKE sy-subrc.         "Returncode
     DATA: xscreen(1) TYPE c.               "Output on printer or screen
     TABLES: nast,
             knvk,
             vbrk,
             kna1,                      "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(rlb_invoice) 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 processing 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 processing 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  processing
*    *&---------------------------------------------------------------------*
*    *       text
*    *----------------------------------------------------------------------*
*    *      -->SPOOLID    text
*    *----------------------------------------------------------------------*
     FORM processing USING spoolid TYPE itcpp-tdspoolid.

       DATA numbytes TYPE i.
       DATA lbuffer TYPE xstring.


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

       DATA object_txt LIKE solisti1 OCCURS 10 WITH HEADER LINE.


*    * for Invoice Header Text
       DATA:
       lv_hd TYPE thead,
       lv_id TYPE thead-tdid,
       lv_language TYPE thead-tdspras,
       lv_name TYPE thead-tdname,
       lv_object TYPE thead-tdobject,
       lt_lines TYPE TABLE OF tline,
       ls_line TYPE tline.

*    * For partner Email
       CONSTANTS:
       lv_item_number TYPE vbup-posnr VALUE '000000',
       lv_partner_role TYPE vbpa-parvw VALUE 'RE'.

       DATA:
       lv_document_number TYPE vbuk-vbeln,
       vborg TYPE vbrk-vkorg,
       ls_vbpa TYPE vbpa.
*       ls_vbpa TYPE vbpk,

       DATA  ls_part TYPE kna1-name1.



*    * For Email contents
       DATA contents_hex TYPE solix_tab.
       DATA lv_internetadr TYPE adr6-smtp_addr.
       DATA lv_internetadra TYPE knvv-z_sd_mail_adress.
       DATA lv_subject TYPE so_obj_des.
       DATA lv_attname TYPE sood-objdes.

       DATA  send_request       TYPE REF TO cl_bcs.
       DATA  text               TYPE bcsy_text.
       DATA  document           TYPE REF TO cl_document_bcs.
       DATA  recipient          TYPE REF TO if_recipient_bcs.
       DATA  bcs_exception      TYPE REF TO cx_bcs.
       DATA  sent_to_all        TYPE os_boolean.


       CLEAR numbytes.

       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                      = lt_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.

         CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
           EXPORTING
             input_length = numbytes
           IMPORTING
             buffer       = lbuffer
           TABLES
             binary_tab   = lt_pdf
           EXCEPTIONS
             failed       = 1
             OTHERS       = 2.

         IF sy-subrc <> 0.
         ENDIF.


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

       TRY.
*    *     create the send request
           send_request = cl_bcs=>create_persistent( ).

           lv_language = nast-spras.
           lv_name = nast-objky.

           CALL FUNCTION 'READ_TEXT'
             EXPORTING
               id                      = 'YMEL'
               language                = 'lv_language'
               name                    = 'EMAIL'
               object                  = 'TEXT'
             IMPORTING
               header                  = lv_hd
             TABLES
               lines                   = lt_lines
             EXCEPTIONS
               id                      = 1
               language                = 2
               name                    = 3
               not_found               = 4
               object                  = 5
               reference_check         = 6
               wrong_access_to_archive = 7
               OTHERS                  = 8.


           CALL FUNCTION 'TEXT_SYMBOL_SETVALUE'
             EXPORTING
               name  = '&INNUM&'
               value = nast-objky.

           CALL FUNCTION 'TEXT_SYMBOL_SETVALUE'
             EXPORTING
               name  = '&USER&'
               value = nast-usnam.


           CALL FUNCTION 'TEXT_SYMBOL_REPLACE'
             EXPORTING
               header           = lv_hd
               replace_program  = 'X'
               replace_standard = 'X'
               replace_system   = 'X'
               replace_text     = 'X'
             TABLES
               lines            = lt_lines.


           IF sy-subrc <> 0.
           ENDIF.

           LOOP AT lt_lines INTO ls_line.
             APPEND ls_line-tdline TO text.
           ENDLOOP.

           lv_document_number = nast-objky.


*    * Get Partner RE Email
           CALL FUNCTION 'SD_VBPA_SELECT'
             EXPORTING
               i_document_number = lv_document_number
               i_item_number     = lv_item_number
               i_partner_role    = lv_partner_role
             IMPORTING
               e_vbpa            = ls_vbpa
             EXCEPTIONS
               partner_not_found = 1
               OTHERS            = 2.

           IF sy-subrc <> 0.
           ENDIF.

*           CLEAR lv_internetadr.
*           SELECT SINGLE smtp_addr FROM adr6 INTO lv_internetadr WHERE
*           addrnumber = ls_vbpa-kunnr AND flgdefault = 'X'.


           DATA: ls_vkorg TYPE vbrk-vkorg,
                 ls_vtweg TYPE vbrk-vtweg,
                 ls_spart TYPE vbrk-spart.

           SELECT SINGLE vkorg FROM vbrk INTO ls_vkorg WHERE
              vbeln = nast-objky.

           SELECT SINGLE vtweg  FROM vbrk INTO ls_vtweg WHERE
              vbeln = nast-objky.

           SELECT SINGLE spart FROM vbrk INTO ls_spart WHERE
               vbeln = nast-objky.

           CLEAR lv_internetadr.
           SELECT SINGLE mail FROM knvv INTO lv_internetadr
             WHERE kunnr = ls_vbpa-kunnr
             AND vkorg = ls_vkorg
             AND vtweg = ls_vtweg
             AND spart = ls_spart
             AND z_sd_mail_flag = 'X'.



*    * Email subject

           IF nast-spras = 'D'.

             CONCATENATE 'Rechnung: ' nast-objky INTO lv_subject.

           ELSE.

             CONCATENATE 'Invoice: ' nast-objky INTO lv_subject.


           ENDIF.


           document = cl_document_bcs=>create_document(
                                     i_type    = 'RAW'
                                     i_text    = text
                                     i_subject = lv_subject ).

*    *     add list attachment to document

           IF nast-spras = 'D'.

             CONCATENATE 'Rechnung:' nast-objky '.pdf' INTO lv_attname.

           ELSE.

             CONCATENATE 'Invoice' nast-objky '.pdf' INTO lv_attname.

           ENDIF.

           document->add_attachment( i_attachment_type    = 'PDF'
                                     i_attachment_subject = lv_attname
                                     i_att_content_hex    = contents_hex ).



*    *     add document to send request
           send_request->set_document( document ).

*    *     create recipient and add to send request

*           recipient = cl_sapuser_bcs=>create( sy-uname ).

           IF lv_internetadr IS INITIAL.
             recipient = cl_sapuser_bcs=>create( sy-uname ).
           ELSE.
             recipient = cl_cam_address_bcs=>create_internet_address( lv_internetadr ).
           ENDIF.

           send_request->add_recipient( i_recipient = recipient ).


*    *     send
           send_request->set_send_immediately( i_send_immediately = 'X' ).
           sent_to_all = send_request->send( i_with_error_screen = 'X' ).
           IF sent_to_all = 'X'.
             MESSAGE s022(so).
           ENDIF.

         CATCH cx_bcs INTO bcs_exception.
           MESSAGE e865(so) WITH bcs_exception->error_type.
       ENDTRY.

       CLEAR:
         document,
         recipient,
        send_request.


     ENDFORM.                    "processing

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


Re: User-Exit bei VF01 bzw. VF02

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

die Nachrichtensteuerung ist eingerichtet und funktioniert und du willst nur noch ein Popup senden, damit der User weiss, dass die Faktura per Mail gesendet wird / wurde - richtig ?
Oder was ist eher dein Begehr ?!

Gruss
thanks Jens

Re: User-Exit bei VF01 bzw. VF02

Beitrag von METi12 (ForumUser / 11 / 4 / 0 ) »
Hi,
jensschladitz hat geschrieben: die Nachrichtensteuerung ist eingerichtet und funktioniert und du willst nur noch ein Popup senden, damit der User weiss, dass die Faktura per Mail gesendet wird / wurde - richtig ?
ja, so ist es, die Nachrichtensteuerung ist eingerichtet und funktioniert. Ich möchte den Benutzer daraf hinweisen, dass er nicht zum Drucker rennen muss, da die Rechnung peer Mail versendet wird.

Gruß,

Meti12

Re: User-Exit bei VF01 bzw. VF02

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

im FUBA RV_INVOICE_DOCUMENT_ADD hat es ein Perform im Bereich

enhancement-section rv_invoice_document_add_06 spots es_saplv60a.
* Nachrichten auf die Datenbank schreiben
* perform messages_update on commit.
if i_no_nast is initial.
perform messages_update
tables
gt_kappl.
endif.
end-enhancement-section.
... denke da wäre es vielleicht ein Ansatz Modifikationsfrei was zu implementieren, damit das Popup gesendet wird - denn dort wird die Nachrichtensteuerung angestossen.
... oder im Unterprogramm Beleg_sichern der TA VF02 etc.
Vielleicht kommst du damit ja schon weiter

Gruss
thanks Jens

Re: User-Exit bei VF01 bzw. VF02

Beitrag von METi12 (ForumUser / 11 / 4 / 0 ) »
Hallo,

danke für deine hilfe erstmal.

Ich habe aber das Problem, dass ich auch für Standardnachrichten keine User-Exit finden kann. Ich hab kein Plan wo ich den User-Exit implemenieren muss :cry: :cry: :cry: .
Muss ich in der Verarbeitungsroutine meiner Nachricht etwas änder, oder muss ich meine Verarbeitungsprogramm ändern??

Gruß, Meti12

Re: User-Exit bei VF01 bzw. VF02

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

also deine Nachrichtensteuerung klappt - wenn du die TA sicherst und verlässt wird die Nachricht erzeugt - richtig - daher ist da schon mal alles ok. Das Popup willst du nur senden um den User zu Informieren - richtig ?
Daher - wenn du dich mit dem EnhancementFramewwork von SAP auskennst (?) - dann könntest du an der von mir benannten Stelle - diese Info einfach an den User ausgeben.
Kommst du damit etwas weiter ?
Oder wenn du damit niocht weiter kommst - vielleicht ist eine option den User / Ersteller der Rechnung schickst du einfach auch eine Mail, dass Faktura Nr. an Empfänger XY gesendet wurde - dann sparst du dir das Popup etc. Weiss aber nicht ob da sinnvoller besser wäre ?! Aber vielleicht ein Ansatz

Gruss

Folgende Benutzer bedankten sich beim Autor jensschladitz für den Beitrag:
METi12

thanks Jens

Seite 1 von 1

Vergleichbare Themen

3
Antw.
18834
Views
User-Exit für VF01/02
von Frank59 » 05.06.2007 09:12 • Verfasst in ABAP® Core
0
Antw.
649
Views
Mussfelder bei VF01
von Gottschall » 19.10.2017 08:59 • Verfasst in ABAP® für Anfänger
3
Antw.
3398
Views
Rechnung über VF02 geändert --> NAST-Zugriff?
von Mats » 11.09.2012 10:51 • Verfasst in Sales and Distribution
3
Antw.
1203
Views
Text einfügen in VF02 -> Dienste zum Objekt -> Persönliche Notiz
von raisa » 25.01.2021 16:00 • Verfasst in ABAP Objects®
3
Antw.
9178
Views
Debugging VF01 / VF04 - Fakturaerstellung nicht möglich
von MKA » 03.12.2012 09:47 • Verfasst in Sales and Distribution

Ü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

Regex in where
vor 9 Stunden von edwin 7 / 166
Daten an Tabelle binden
vor 23 Stunden von Bright4.5 3 / 1487

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

Regex in where
vor 9 Stunden von edwin 7 / 166
Daten an Tabelle binden
vor 23 Stunden von Bright4.5 3 / 1487

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9822