cancel
Showing results for 
Search instead for 
Did you mean: 

Customer Statement via Email

ravi_gurram2
Explorer
0 Kudos

HI,

I have config the Customer statement by means of correnpondence & it working fine.

But I need to send it through email maintained in customer master when i run f.27 mails should be send automatically.

For doing this do we need to do any config required or do we need to direaclty write it in the program code it self.

Regards

Ravi

Accepted Solutions (1)

Accepted Solutions (1)

Former Member

Implement BTE 00002310: u201CCorrespondence: Get output deviceu201D. (t-code FIBF)

Use sample Function Module SAMPLE_PROCESS_00002310 with logic from Include LXFKOF01.

ravi_gurram2
Explorer
0 Kudos

Hi Hugo

Thanks for the reply. If you can give me the steps to config the statement. Thank you

Regards

Ravi

Former Member
0 Kudos

1) Go to FIBF

2) Settings>Product> of a Customer: Create an entry with Product/Text and Activate

3) Settings>Process Modules> of a Customer: Select Process 00002310, enter your Function Module (here is your logic to pick up email address and change output to email (finaa-nacha = 'I'.), see also my previous post) and enter Product created in 2). You can ignore other fields.

ravi_gurram2
Explorer
0 Kudos

Hi Hugo

Thanks for your reply. It sloved the problem. Thank you

Regards

Ravi

Former Member
0 Kudos

I have the same requirement to email from f.27 customer statement automatically

what logic did you put to solved, can you explain me please

There are two problems which is controlling F.27.  IT have created Z PROGRAM to control the printing and email the customer

  1. ZFIO_ACCOUNT_STATEMENT_EMAIL   -> program
  2. ZWAG_COMMON_ROUTINE                   - > Include
  3. ZWAG_SAPSCRIPT_ROUTINES_EM         -> Include
  4. ZEMAIL_SEND                                             -> Include added for email .

The program is running fine but I have to type email id and spool number which I don't want. The program should search customer automatically based on email address from XD02 ( Customer ) .

*&---------------------------------------------------------------------*

*&  Include           ZEMAIL_SEND                                      *

*&---------------------------------------------------------------------*

*ZEMAIL_SEND.

*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*

*&      Form  setup_output_parameters

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*

*&  Include

*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*

*  Purpose:

*  Provide generic subroutines for any ABAP programs with intention of

*  sending email (SAPOffice or Internet) with attachments

*&---------------------------------------------------------------------*

* This report provides an example for sending an Spool

* request as PDF via BCS

parameters:

mailto  type ad_smtpadr default  'piroz.eslam@wagner.com.au' obligatory,

rqident type tsp01-rqident obligatory.

DATA:v_adrnr LIKE kna1-adrnr.

*--------------------------------------------------------*

"  Mail related declarations

*--------------------------------------------------------*

"Variables

DATA :

    G_SENT_TO_ALL   TYPE SONV-FLAG,

    G_TAB_LINES     TYPE I.

"Types

TYPES:

    T_DOCUMENT_DATA  TYPE  SODOCCHGI1,

    T_PACKING_LIST   TYPE  SOPCKLSTI1,

    T_ATTACHMENT     TYPE  SOLISTI1,

    T_BODY_MSG       TYPE  SOLISTI1,

    T_RECEIVERS      TYPE  SOMLRECI1,

    T_PDF            TYPE  TLINE.

"Workareas

DATA :

    W_DOCUMENT_DATA  TYPE  T_DOCUMENT_DATA,

    W_PACKING_LIST   TYPE  T_PACKING_LIST,

    W_ATTACHMENT     TYPE  T_ATTACHMENT,

    W_BODY_MSG       TYPE  T_BODY_MSG,

    W_RECEIVERS      TYPE  T_RECEIVERS,

    W_PDF            TYPE  T_PDF.

"Internal Tables

DATA :

    I_DOCUMENT_DATA  TYPE STANDARD TABLE OF T_DOCUMENT_DATA,

    I_PACKING_LIST   TYPE STANDARD TABLE OF T_PACKING_LIST,

    I_ATTACHMENT     TYPE STANDARD TABLE OF T_ATTACHMENT,

    I_BODY_MSG       TYPE STANDARD TABLE OF T_BODY_MSG,

    I_RECEIVERS      TYPE STANDARD TABLE OF T_RECEIVERS,

    I_PDF            TYPE STANDARD TABLE OF T_PDF.

data send_request  type ref to cl_bcs.

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.

data pdf_size      type so_obj_len.

data pdf_content   type solix_tab.

data pdf_xstring   type xstring.

DATA: TAB_LINES LIKE SY-TABIX.

*Variables for EMAIL functionality

DATA: MAILDATA LIKE SODOCCHGI1.

DATA: MAILPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.

DATA: MAILHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.

DATA: MAILBIN LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.

DATA: MAILTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.

DATA: MAILREC LIKE SOMLREC90 OCCURS 0 WITH HEADER LINE.

DATA: SOLISTI1 LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.

start-of-selection.

  perform create_pdf.

  perform send.

*  perform  get_otf_code. " piroz

*&---------------------------------------------------------------------*

*&      Form  send

*&---------------------------------------------------------------------*

form send.

  try.

*     -------- create persistent send request ------------------------

      send_request = cl_bcs=>create_persistent( ).

*     -------- create and set document -------------------------------

      pdf_content = cl_bcs_convert=>xstring_to_solix( pdf_xstring ).

      document = cl_document_bcs=>create_document(

            i_type    = 'PDF'

            i_hex     = pdf_content

            i_length  = pdf_size

            i_subject = 'Accounting statement' ).  "#EC NOTEXT

*     add document object to send request

      send_request->set_document( document ).

*     --------- add recipient (e-mail address) -----------------------

*     create recipient object

      recipient = cl_cam_address_bcs=>create_internet_address( mailto ).

*     add recipient object to send request

      send_request->add_recipient( recipient ).

*     ---------- send document ---------------------------------------

      sent_to_all = send_request->send( i_with_error_screen = 'X' ).

      commit work.

      if sent_to_all is initial.

        message i500(sbcoms) with mailto.

      else.

        message s022(so).

      endif.

*   ------------ exception handling ----------------------------------

*   replace this rudimentary exception handling with your own one !!!

    catch cx_bcs into bcs_exception.

      message i865(so) with bcs_exception->error_type.

  endtry.

endform.                    "send

*&---------------------------------------------------------------------*

*&      Form  create_pdf

*&---------------------------------------------------------------------*

* Create PDF Content

* 1) get attributes of spool request

* 2) convert spool request to PDF dependent on document type

*----------------------------------------------------------------------*

form create_pdf.

  data rq       type tsp01.

  data bin_size type i.

  data dummy    type table of rspoattr.

*   ------------ get attributes of spool request ---------------------

  call function 'RSPO_GET_ATTRIBUTES_SPOOLJOB'

    exporting

      rqident     = rqident

    importing

      rq          = rq

    tables

      attributes  = dummy

    exceptions

      no_such_job = 1

      others      = 2.

  if sy-subrc <> 0.

    message e126(po) with rqident.

  endif.

*

*

* TYPE-POOLS szadr.

*  DATA: l_addr1_complete TYPE szadr_addr1_complete,

*        l_adsmtp_line    TYPE szadr_adsmtp_line,

*        ld_intad type knb1-intad.

*

** default: print payment advice

*  c_finaa-nacha = '1'.

*

**  Read mail address of vendor from knb1.customer no is available in kna1 payment data     structure

*

*  clear ld_intad.

*  IF NOT i_knb1-kunnr IS INITIAL and

*     not i_knb1-zbukrs is initial.

*

*    SELECT SINGLE intad

*      INTO ld_intad

*      FROM knb1

*      WHERE kunnr = i_knb1-kunnr

*      AND bukrs = i_knb1-zbukrs.

*

*          IF NOT ld_intad IS INITIAL.

*          c_finaa-nacha = 'I'.

*          c_finaa-intad = ld_intad.

*          ENDIF.

*

*  ENDIF.

*

*

** check that address number is available

*  IF NOT i_kna1-zadnr IS INITIAL.

*

**   read complete address of vendor/customer

*      CALL FUNCTION 'ADDR_GET_COMPLETE'

*         EXPORTING

*              addrnumber     = i_kna1-zadnr

*         IMPORTING

*              addr1_complete = l_addr1_complete

*         EXCEPTIONS

*              OTHERS         = 4.

*

*      IF sy-subrc EQ 0.

*

*

*             READ TABLE l_addr1_complete-id_intad                               "Insert ECDK900445

*             INTO l_adsmtp_line                                                  "Insert ECDK900445

*             WITH KEY adsmtp-flgdefault = 'X'.                                   "Insert ECDK900445

*

*           IF sy-subrc EQ 0

*           AND NOT l_adsmtp_line-id_intad IS INITIAL.

*

**     choose message type 'I'nternet and fill email address

*

*           c_finaa-nacha = 'I'.

*           c_finaa-intad = ld_intad.

*

*          ENDIF.

*    ENDIF.

*  ENDIF.

*

*ENDFUNCTION.

*  select SINGLE adrnr from kna1 from adr6

*  into table internal table where

*  kna1-kunnr eq = it_kna1-kunnr.

*

** select email ids from adr6

*

*  select addrnumber smtp_addr from adr6 INTO table it_adr6

*   where addrnumber = v_adrnr.

*

*   LOOP AT it_adr6 INTO wa_adr6.

*

*     i_reclist-receiver = wa_adr6-smtp_addr.

*     i_reclist-rec_type = 'U'.

*     i_reclist-com_type = 'INT'.

*     i_reclist-notif_del = 'X'.

*     i_reclist-notif_ndel = 'X'.

*     i_reclist-notif_read = 'X'.

*     i_reclist-express = 'X'.

*     APPEND i_reclist.

*     CLEAR: i_reclist, wa_adr6-smtp_addr.

*     ENDLOOP.

*in function module 'SO_NEW_DOCUMENT_ATT_SEND_API1' field receivers  = i_reclist.

*

*CALL FUNCTION 'ZCUSTOMER_MAIL_00002310' "

*  EXPORTING

*    i_bkorm =                    bkorm

*    i_koart =                    bkorm-koart

*    i_kna1 =                     kna1

*    i_knb1 =                     knb1

**    i_lfa1 =                     lfa1

**    i_lfb1 =                     lfb1

*  TABLES

*    t_fimsg =                    fimsg

*  CHANGING

*    c_finaa =                    finaa

*    c_itcpo =                    itcpo

**   c_archive_index = SPACE     " toa_dara

**   c_archive_params = SPACE    " arc_params .  "  ZCUSTOMER_MAIL_00002310

*Function module to send mail to Recipients

  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

    EXPORTING

      DOCUMENT_DATA              = W_DOCUMENT_DATA

      PUT_IN_OUTBOX              = 'X'

      COMMIT_WORK                = 'X'

    IMPORTING

      SENT_TO_ALL                = G_SENT_TO_ALL

    TABLES

      PACKING_LIST               = I_PACKING_LIST

      CONTENTS_BIN               = I_ATTACHMENT

      CONTENTS_TXT               = I_BODY_MSG

      RECEIVERS                  = I_RECEIVERS

    EXCEPTIONS

      TOO_MANY_RECEIVERS         = 1

      DOCUMENT_NOT_SENT          = 2

      DOCUMENT_TYPE_NOT_EXIST    = 3

      OPERATION_NO_AUTHORIZATION = 4

      PARAMETER_ERROR            = 5

      X_ERROR                    = 6

      ENQUEUE_ERROR              = 7

      OTHERS                     = 8.

  IF SY-SUBRC = 0 .

    MESSAGE I303(ME) WITH 'Mail has been Successfully Sent.'.

  ELSE.

    WAIT UP TO 2 SECONDS.

    "This program starts the SAPconnect send process.

    SUBMIT RSCONN01 WITH MODE = 'INT'

    WITH OUTPUT = 'X'

    AND RETURN.

  ENDIF.

*   --- convert spool request into PDF, dependent on document type ---

  if rq-rqdoctype = 'OTF' or rq-rqdoctype = 'SMART'.

    call function 'CONVERT_OTFSPOOLJOB_2_PDF'

      exporting

        src_spoolid              = rqident

        no_dialog                = 'X'

        pdf_destination          = 'X'

        no_background            = 'X'

      importing

        pdf_bytecount            = bin_size

        bin_file                 = pdf_xstring

      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

        others                   = 12.

    if sy-subrc <> 0.

      message e712(po) with sy-subrc 'CONVERT_OTFSPOOLJOB_2_PDF'.

    endif.

  elseif rq-rqdoctype = 'LIST'.

    call function 'CONVERT_ABAPSPOOLJOB_2_PDF'

      exporting

        src_spoolid              = rqident

        no_dialog                = 'X'

        pdf_destination          = 'X'

        no_background            = 'X'

      importing

        pdf_bytecount            = bin_size

        bin_file                 = pdf_xstring

      exceptions

        err_no_abap_spooljob     = 1

        err_no_spooljob          = 2

        err_no_permission        = 3

        err_conv_not_possible    = 4

        err_bad_destdevice       = 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

        others                   = 12.

    if sy-subrc <> 0.

      message e712(po) with sy-subrc 'CONVERT_ABAPSPOOLJOB_2_PDF'.

    endif.

  else.

    message e789(po) with rq-rqdoctype.

  endif.

  pdf_size = bin_size.

endform.                    "create_pdf

*---------------------------------------------------------------------*

*       FORM OUTPUT_OPENFI                                            *

*---------------------------------------------------------------------*

*       ........                                                      *

*---------------------------------------------------------------------*

FORM OUTPUT_OPENFI.

  DATA: T_FIMSG LIKE FIMSG OCCURS 10 WITH HEADER LINE.

  CALL FUNCTION 'OPEN_FI_PERFORM_00002310_P'

       EXPORTING

            I_BKORM          = BKORM

            I_KOART          = C_KOART

            I_KNA1           = KNA1

            I_KNB1           = KNB1

*            I_LFA1           = LFA1

*            I_LFB1           = LFB1

       TABLES

            T_FIMSG          = T_FIMSG

       CHANGING

            C_FINAA          = ST_FINAA

            C_ITCPO          = ST_ITCPO.

*            C_ARCHIVE_INDEX  = H_ARCHIVE_INDEX

*            C_ARCHIVE_PARAMS = H_ARCHIVE_PARAMS.

*

  LOOP AT T_FIMSG.

    CALL FUNCTION 'FI_MESSAGE_COLLECT'

         EXPORTING

              I_FIMSG       = T_FIMSG

              I_XAPPN       = 'X'

         EXCEPTIONS

              MSGID_MISSING = 1

              MSGNO_MISSING = 2

              MSGTY_MISSING = 3

              OTHERS        = 4.

  ENDLOOP.

ENDFORM.

************************************************************************

Form GET_OTF_CODE.

************************************************************************

    DATA: BEGIN OF OTF OCCURS 0.

          INCLUDE STRUCTURE ITCOO .

    DATA: END OF OTF.

    DATA: ITCPO LIKE ITCPO.

    DATA: ITCPP LIKE ITCPP.

    CLEAR ITCPO.

    ITCPO-TDGETOTF = 'X'.

*  Start writing OTF code

  CALL FUNCTION 'OPEN_FORM'

    EXPORTING

      FORM     = 'Z140_ACC_STAT_01'

      LANGUAGE = SY-LANGU

      OPTIONS  = ITCPO

      DIALOG   = ' '

    EXCEPTIONS

      OTHERS   = 1.

  CALL FUNCTION 'START_FORM'

    EXCEPTIONS

      ERROR_MESSAGE = 01

      OTHERS        = 02.

  CALL FUNCTION 'WRITE_FORM'

    EXPORTING

      WINDOW        = 'MAIN'

    EXCEPTIONS

      ERROR_MESSAGE = 01

      OTHERS        = 02.

*  Close up Form and get OTF code

  CALL FUNCTION 'END_FORM'

    EXCEPTIONS

      ERROR_MESSAGE = 01

      OTHERS        = 02.

  MOVE-CORRESPONDING ITCPO TO ITCPP.

  CALL FUNCTION 'CLOSE_FORM'

    IMPORTING

      RESULT  = ITCPP

    TABLES

      OTFDATA = OTF

    EXCEPTIONS

      OTHERS  = 1.

*  Move OTF code to structure SOLI form email

CLEAR SOLISTI1.

  REFRESH SOLISTI1.

  LOOP AT OTF.

    SOLISTI1-LINE = OTF.

    APPEND SOLISTI1.

  ENDLOOP.

ENDFORM.                    "GET_OTF_CODE

*****************************************************************************************************************************************************

SAP recommends to use BTE 2013  and added the coding for email.

CREATED:      ZCUSTOMER_MAIL_00002310

TABLES: KNA1,                          "Kunden A-Segment

        KNB1,                          "Kunden B-Segment

        LFA1,                          "Lieferanten A-Segment

        LFB1,                          "Lieferanten B-Segment

        BKORM, "Korrespondenzanforderungen

        FINAA.                         "Daten zum Sendemedium

DATA: SAVE_KOART LIKE BKORM-KOART,     "Hilfsfeld Kontoart

      SAVE_LAND1 LIKE KNA1-LAND1,      "Hilfsfeld Faxanschluß

      SAVE_TELFX LIKE KNA1-TELFX,      "Hilfsfeld Faxanschluß

      SAVE_ZSABE LIKE KNB1-ZSABE,      "Hilfsfeld Faxanschluß

SAVE_INTAD LIKE KNB1-INTAD.      "Hilfsfeld Internet

KNA1       = I_KNA1.

LFA1       = I_LFA1.

KNB1       = I_KNB1.

LFB1       = I_LFB1.

BKORM      = I_BKORM.

SAVE_KOART = I_KOART.

CLEAR: SAVE_LAND1,

       SAVE_TELFX,

       SAVE_ZSABE.

IF SAVE_KOART = 'D'.

SAVE_LAND1 = KNA1-LAND1.

SAVE_TELFX = KNB1-TLFXS.

SAVE_ZSABE = KNB1-ZSABE.

SAVE_INTAD = KNB1-INTAD.

  1. ELSE.

SAVE_LAND1 = LFA1-LAND1.

SAVE_TELFX = LFB1-TLFXS.

SAVE_ZSABE = LFB1-ZSABE.

SAVE_INTAD = LFB1-INTAD.

  1. ENDIF.

IF SAVE_INTAD NE SPACE.

FINAA-NACHA      = 'I'.                   "Ausgabe über Internet

FINAA-INTAD      = SAVE_INTAD.

FINAA-TEXTF      = 'PDF'.

ELSEIF SAVE_TELFX NE SPACE.

FINAA-NACHA      = '2'.                   "Ausgabe auf Fax

FINAA-TDSCHEDULE = 'IMM'.

FINAA-TDTELELAND = SAVE_LAND1.

FINAA-TDTELENUM  = SAVE_TELFX.

FINAA-TDFAXUSER  = SPACE.

FINAA-NAMEP      = SAVE_ZSABE.

FINAA-FORMC      = 'FI_FAX_COVER_A4'.

FINAA-FORNR      = SPACE.

  1. ELSE.

FINAA-NACHA = '1'. "Drucken

  1. ENDIF.

* Daten zum Sendemedium merken für Aufrufer

C_FINAA = FINAA.

  1. ENDFUNCTION.

______________________________________ OR _________________________________________

To get the email id from the customer file.

  TYPE-POOLS szadr.

  DATA: l_addr1_complete TYPE szadr_addr1_complete,

        l_adsmtp_line    TYPE szadr_adsmtp_line,

        ld_smtp_addr type adr6-smtp_addr.

       

* default: print payment advice

  c_finaa-nacha = '1'.

*  Read mail address of customer from knb1-kunnr no is available 

  clear ld_smtp_addr

  IF NOT i_kna1-kunnr IS INITIAL and

                not i_adr6-smtp_addr is initial.

    SELECT SINGLE smtp_addr

      INTO ld_smtp_addr

      FROM kna1

      where kna1-adrnr = adr6-addrnumber.

          IF NOT ld_smtp_addr IS INITIAL.

          c_finaa-nacha = 'I'.

          c_finaa-intad = ld_smtp_addr.

          ENDIF.

  ENDIF.

*        IF sy-subrc = 0.

**  choose message type 'I'nternet and fill email address

*      c_finaa-nacha = 'I'.

*    ENDIF.

*  ENDIF.

* check that address number is available

  IF NOT i_kna1-zadnr IS INITIAL.

*   read complete address of vendor/customer

      CALL FUNCTION 'ADDR_GET_COMPLETE'

         EXPORTING

              addrnumber     = i_kna1-zadnrada

         IMPORTING

              addr1_complete = l_addr1_complete

         EXCEPTIONS

              OTHERS         = 4.

      IF sy-subrc EQ 0.

*     check that internet address is available

*     READ TABLE l_addr1_complete-adsmtp_tab INTO l_adsmtp_line INDEX 1.   "Delete ECDK900445

             READ TABLE l_addr1_complete-adsmtp_tab                                "Insert ECDK900445

             INTO l_adsmtp_line "Insert ECDK900445

             WITH KEY adsmtp-flgdefault = 'X'. "Insert ECDK900445

           IF sy-subrc EQ 0

           AND NOT l_adsmtp_line-adsmtp-smtp_addr IS INITIAL.

*     choose message type 'I'nternet and fill email address

           c_finaa-nacha = 'I'.

           c_finaa-intad = ld_smtp_addr.

          ENDIF.

    ENDIF.

  ENDIF.

  1. ENDFUNCTION.

( No output is going to the customer email address for the below steps )

  1. 1. Generate spool requst ..
  2. 2. Close_FORM ...will get the spool request
  3. 3. RSPO_RETURN_SPOOLJOB will convet spool to OTF data
  4. 4. Convet OTF data into PDF and send to mail.

Try all sorts of programming  testing with the coding but  no result in SOST ( to send email it is asking to enter the email id , when the email is enter going the customer which is not correct  as there are bunches of account with different email address )

Regards

Piroz

Message was edited by: Piroz Eslam

Answers (1)

Answers (1)

Former Member
0 Kudos

Hi

Correspondence can be sent directly from the system via fax, e-mail, SWIFT Files or IDocs (in money market and forex trading), or output via a printer.

Pl refer this link for the configurations

http://help.sap.com/saphelp_46c/helpdata/en/d2/6f73c5415e11d182b10000e829fbfe/content.htm

Thanks

kamala