Skip to Content
avatar image
Former Member

How to send ALV Grid report to Email?

hai all,

How to send ALV Grid report to Email.

please its very urgent.....

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

4 Answers

  • avatar image
    Former Member
    May 04, 2006 at 10:35 AM

    Hai Nithiyanandam

    Try with the following Code

    &----


    *& Report ZALV_PRAKASH_SAMP *

    *& *

    &----


    *& *

    *& *

    &----


    REPORT ZALV_PRAKASH_SAMP .

    TABLES: MARA.

    TYPE-POOLS : SLIS.

    *----


    • Data declaration

    *----


    DATA: BEGIN OF I_MARA OCCURS 0.

    INCLUDE STRUCTURE MARA.

    DATA: END OF I_MARA.

    DATA: V_REPID LIKE SY-REPID.

    *----


    • selection-screen

    *----


    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.

    SELECT-OPTIONS : S_MATNR FOR MARA-MATNR.

    PARAMETERS: P_MTART LIKE MARA-MTART DEFAULT 'ROH'.

    SELECTION-SCREEN END OF BLOCK B1.

    *----


    • initialisation

    *----


    INITIALIZATION.

    S_MATNR-LOW = '1400'.

    S_MATNR-HIGH = '1500'.

    APPEND S_MATNR.

    V_REPID = SY-REPID.

    *----


    • start-of-selection

    *----


    START-OF-SELECTION.

    SELECT * FROM MARA

    INTO TABLE I_MARA

    WHERE MATNR IN S_MATNR AND

    MTART = P_MTART.

    CHECK SY-SUBRC = 0.

    *----


    • end of selection

    *----


    END-OF-SELECTION.

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

    EXPORTING

    • I_INTERFACE_CHECK = ' '

    • I_BYPASSING_BUFFER =

    • I_BUFFER_ACTIVE = ' '

    • I_CALLBACK_PROGRAM = ' '

    • I_CALLBACK_PF_STATUS_SET = ' '

    • I_CALLBACK_USER_COMMAND = ' '

    I_STRUCTURE_NAME = 'MARA'

    • IS_LAYOUT =

    • IT_FIELDCAT =

    • IT_EXCLUDING =

    • IT_SPECIAL_GROUPS =

    • IT_SORT =

    • IT_FILTER =

    • IS_SEL_HIDE =

    • I_DEFAULT = 'X'

    • I_SAVE = ' '

    • IS_VARIANT =

    • IT_EVENTS =

    • IT_EVENT_EXIT =

    • IS_PRINT =

    • IS_REPREP_ID =

    • I_SCREEN_START_COLUMN = 0

    • I_SCREEN_START_LINE = 0

    • I_SCREEN_END_COLUMN = 0

    • I_SCREEN_END_LINE = 0

    • IMPORTING

    • E_EXIT_CAUSED_BY_CALLER =

    • ES_EXIT_CAUSED_BY_USER =

    TABLES

    T_OUTTAB = I_MARA

    • EXCEPTIONS

    • PROGRAM_ERROR = 1

    • OTHERS = 2

    .

    IF SY-SUBRC <> 0.

    • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ELSE.

    CALL FUNCTION 'RFC_MAIL' DESTINATION 'LOCAL_EXEC'

    EXPORTING USER = 'Mail Id@yahoo.com'

    • TABLES MAIL = IT_MAIL.

    TABLES MAIL = I_MARA.

    ENDIF.

    Thanks & regards

    Sreenivasulu P

    Message was edited by: Sreenivasulu Ponnadi

    Add comment
    10|10000 characters needed characters exceeded

  • May 04, 2006 at 11:04 AM
    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    May 04, 2006 at 11:10 AM

    u can send it thru mail option in application toolbar

    how-to-send-an-alv-grid-report-to-sap-user-mail

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    May 04, 2006 at 11:24 AM

    Hi,

    when u run the Alv, u will button 'Mail Recepiant' in tool bar.When u click it and enter to new screen, go to the Recipient Tab(down) enter ur maild id and click 'Send' button on tool bar.

    or.

    if u want to send the Alv content to mail id thru prg, go thru the following code.

    -


    *

    • TABLES

    ----


    TABLES: BSID. " Accounting: Secondary Index for Customers.

    ----


    • TYPE-POOLS

    ----


    TYPE-POOLS: SLIS.

    ----


    • INTERNAL TABLES

    ----


    • Internal table to hold Customer data.

    DATA: BEGIN OF TB_BSID OCCURS 0,

    BUKRS LIKE BSID-BUKRS, " Company code

    KUNNR LIKE BSID-KUNNR, " Customer number

    AUGDT LIKE BSID-AUGDT, " Clearing Date

    BLDAT LIKE BSID-BLDAT, " Doc date in document

    SHKZG LIKE BSID-SHKZG, " Debit/credit indicator

    DMBTR LIKE BSID-DMBTR, " Amount in local currency

    ZFBDT LIKE BSID-ZFBDT, " Baseline date for due date calc

    ZBD1T LIKE BSID-ZBD1T, " Cash discount days 1

    ZBD2T LIKE BSID-ZBD2T, " Cash discount days 2

    ZBD3T LIKE BSID-ZBD3T, " Net Payment Terms Period

    REBZG LIKE BSID-REBZG, " No Of the Inv the Tran Belongs to

    REBZT LIKE BSID-REBZT, " Follow-On Document Type

    END OF TB_BSID.

    • Internal table to hold Open Items.

    DATA: TB_BSID_OPEN LIKE TABLE OF TB_BSID WITH HEADER LINE.

    • Internal table to hold Cleared Items.

    DATA: TB_BSAD_CLEAR LIKE TABLE OF TB_BSID WITH HEADER LINE.

    • Internal table to hold General Data in Customer Master

    DATA: BEGIN OF TB_KNA1 OCCURS 0,

    KUNNR LIKE KNA1-KUNNR, " Customer Number

    NAME1 LIKE KNA1-NAME1, " Name Line 1

    TELF1 LIKE KNA1-TELF1, " Telephone Number

    ADRNR LIKE KNA1-ADRNR, " Address

    END OF TB_KNA1.

    • Internal table to hold Customer Master (Company Code)

    DATA: BEGIN OF TB_KNB1 OCCURS 0,

    KUNNR LIKE KNB1-KUNNR, " Customer Number

    BUKRS LIKE KNB1-BUKRS, " Company code

    ERDAT LIKE KNB1-ERDAT, " Rec Created Date

    ZAMIB LIKE KNB1-ZAMIB, " DMS Managed Indicator

    END OF TB_KNB1.

    • Internal table to hold Final Output Data

    DATA: BEGIN OF TB_FINAL OCCURS 0,

    KUNNR LIKE KNA1-KUNNR, " Customer Number

    NAME1 LIKE KNA1-NAME1, " Name Line 1

    ADDRESS1(25) TYPE C, " Address line 1

    ADDRESS2(25) TYPE C, " Address line 2

    ADDRESS3(25) TYPE C, " Address line 3

    ADDRESS4(25) TYPE C, " Address line 4

    PHONE LIKE KNA1-TELF1, " Telephone Number

    DAYS_SLOW(3) TYPE C, " Days Slow

    LAST_DATE(8) TYPE C, " Date of Last Invoice

    AVG(4) TYPE C, " Average Days to Pay

    CURRENT(10) TYPE N, " Current

    AVG_1_30(10) TYPE N, " 1-30 past due

    AVG_31_60(10) TYPE N, " 31-60 past due

    AVG_61_90(10) TYPE N, " 61-90 past due

    AVG_90G(10) TYPE N, " 90+ past due

    END OF TB_FINAL.

    • ALV Internal tables

    DATA : TB_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, " Field Catalog

    TB_EVENTS TYPE SLIS_T_EVENT, " ALV Events

    TB_COMMENTS TYPE SLIS_T_LISTHEADER. " Comment

    • Internal tables for the sending mail data

    DATA: TB_OBJPACK TYPE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE,

    TB_OBJHEAD TYPE SOLISTI1 OCCURS 1 WITH HEADER LINE,

    TB_OBJTXT TYPE SOLISTI1 OCCURS 10 WITH HEADER LINE,

    TB_RECLIST TYPE SOMLRECI1 OCCURS 5 WITH HEADER LINE,

    TB_OBJBIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,

    TB_DOC_CHNG TYPE SODOCCHGI1.

    • Internal table to get mail Receivers Address

    DATA: TB_ZRECEIVE LIKE YSMTP_ADDRESS OCCURS 0 WITH HEADER LINE.

    ----


    • STRUCTURES

    ----


    DATA: X_SADR TYPE SADR, " For Address

    X_FIELDCAT TYPE SLIS_FIELDCAT_ALV, " For Field Catalog

    X_LAYOUT TYPE SLIS_LAYOUT_ALV, " For Layout

    X_EVENTS TYPE SLIS_ALV_EVENT, " For Events

    X_COMMENTS TYPE SLIS_LISTHEADER, " For Comments

    X_ADDR1_SEL LIKE ADDR1_SEL, " For Address

    WA_FAEDE TYPE FAEDE. " For FAEDE struct

    ----


    • VARIABLES

    ----


    DATA: G_REPID LIKE SY-REPID, " Prog ID

    G_DAYS_SLOW(3) TYPE N, " Days Slow

    G_OPEN TYPE I, " Counter

    G_AVG(4) TYPE C, " Avg Days

    G_COUNT TYPE I, " Counter

    G_TITLE TYPE SOLISTI1-LINE, " Description

    G_TAB_LINES TYPE SY-TABIX, " Internal data count

    G_REC_COUNT TYPE I, " Total records

    G_CURR_BAL TYPE N, " Account balance

    G_FILE_NAME LIKE EDI_PATH-PTHNAM. " Output File Name

    ----


    • CONSTANTS

    ----


    CONSTANTS: C_D TYPE C VALUE 'D', " Account type

    C_X TYPE C VALUE 'X', " Check Value

    C_0(4) TYPE N VALUE '0.00', " Constant for char

    C_1(2) TYPE C VALUE '01', " Posting key const

    C_H TYPE C VALUE 'H', " For Commenet-Type

    C_TXT(3) TYPE N VALUE 'TXT', " File type

    C_RAW(3) TYPE C VALUE 'RAW', " File type

    C_DELIMITER TYPE X VALUE '09', " ASCII CODE LINE

    C_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE',

    C_INTERFACE TYPE YWFSALOFFICNOTIF-INTERFACE_ID VALUE 'AP',

    C_FILENAME(20) TYPE N VALUE 'TEXT.TXT'," File name

    C_TITLE(30) TYPE N VALUE 'Z21614_DB_CREDIT_AGENCY',

    C_Z001 TYPE RF035-RASID VALUE 'Z001'." Net 30/60/90/120/150

    ----


    • SELECTION SCREEN.

    ----


    • Selection Screen for Selection Criteria.

    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-T01.

    SELECT-OPTIONS: S_BUKRS FOR BSID-BUKRS OBLIGATORY, " Company Code

    S_BLDAT FOR BSID-BLDAT," OBLIGATORY, " Doc Date

    S_KUNNR FOR BSID-KUNNR, " Cust No

    S_ZUONR FOR BSID-ZUONR. " Assignment

    PARAMETERS: P_GRACE(2) TYPE N OBLIGATORY, " Grace Days

    P_ZAMIB LIKE KNB1-ZAMIB AS CHECKBOX. " DMS Indicator

    SELECTION-SCREEN END OF BLOCK B1.

    • Selection Screen for Output Options.

    SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-T02.

    SELECTION-SCREEN BEGIN OF LINE.

    SELECTION-SCREEN POSITION 01.

    PARAMETERS: P_REPORT RADIOBUTTON GROUP R1. " Report Only

    SELECTION-SCREEN COMMENT 5(25) TEXT-016.

    SELECTION-SCREEN END OF LINE.

    SELECTION-SCREEN BEGIN OF LINE.

    SELECTION-SCREEN POSITION 01.

    PARAMETERS: P_DOWN RADIOBUTTON GROUP R1. " Dwnld to Unix

    SELECTION-SCREEN COMMENT 5(25) TEXT-017.

    SELECTION-SCREEN POSITION 30.

    PARAMETERS: P_FILE LIKE FILENAME-FILEINTERN DEFAULT

    'Z21614_DB_CREDIT_AGENCY'. " File Name

    SELECTION-SCREEN END OF LINE.

    SELECTION-SCREEN END OF BLOCK B2.

    • Selection Screen for E-mail.

    SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-T03.

    SELECTION-SCREEN BEGIN OF LINE.

    SELECTION-SCREEN POSITION 01.

    PARAMETERS: P_EMAIL AS CHECKBOX. " E-mail

    SELECTION-SCREEN COMMENT 5(25) TEXT-018.

    SELECTION-SCREEN END OF LINE.

    SELECTION-SCREEN END OF BLOCK B3.

    ----


    • INITIALIZATION

    ----


    INITIALIZATION.

    G_REPID = SY-REPID.

    ----


    • AT SELECTION SCREEN. *

    ----


    AT SELECTION-SCREEN.

    • Validation of selection screen entries

    • perform validate_data.

    ----


    • START-OF-SELECTION

    ----


    START-OF-SELECTION.

    • Select Data from Customer Master (Company Code)

    PERFORM SELECT_KNB1.

    • Select Custmer Open Items.

    PERFORM SELECT_CUSTOMER_OPEN_ITEMS.

    • Select Custmer Cleared Items.

    PERFORM SELECT_CUSTOMER_CLEARED_ITEMS.

    • Select General Data in Customer Master

    PERFORM SELECT_KNA1.

    • Populate Final Output Data.

    PERFORM POPULATE_TB_FINAL.

    ----


    • End of selection *

    ----


    END-OF-SELECTION.

    • If both display report and send email is checked

    IF P_REPORT = C_X AND P_EMAIL = C_X.

    MESSAGE E999 WITH

    'Select One Among Report Only & Send E-mail'(023).

    • When Radiobutton for Email or if the program is run background

    ELSEIF ( P_EMAIL = C_X OR SY-BATCH = C_X ).

    • To send the mail

    PERFORM SEND_EMAIL.

    ELSEIF P_REPORT = C_X .

    • To display the Final Output data using ALV's

    PERFORM DISPLAY_ALV_REPORT.

    ENDIF.

    • Transfering data to file when downloading to Unix

    IF P_DOWN = C_X.

    IF G_REC_COUNT IS INITIAL.

    MESSAGE I999 WITH

    'No Records Found For Selection Criteria'(024).

    EXIT.

    ELSE.

    IF NOT G_FILE_NAME IS INITIAL.

    • Trasefering data to file

    PERFORM TRANSFER_DATA_FILE.

    • Interface Audit report

    PERFORM WRITE_REPORT.

    ENDIF.

    ENDIF.

    ENDIF.

    ----


    • F O R M S

    ----


    &----


    *& Form VALIDATE_DATA

    &----


    • Validating selection-screen entries

    ----


    FORM VALIDATE_DATA.

    • Local variables

    DATA : L_BUKRS LIKE BSEG-BUKRS, " For Company Code

    L_KUNNR LIKE BSEG-KUNNR. " For Customer Number

    • Validate the Company code.

    SELECT SINGLE BUKRS

    INTO L_BUKRS

    FROM T001

    WHERE BUKRS IN S_BUKRS.

    IF SY-SUBRC <> 0.

    MESSAGE E999 WITH 'Enter valid Company Code'(025).

    ENDIF.

    • Validate the Customer number

    IF NOT S_KUNNR[] IS INITIAL.

    SELECT SINGLE KUNNR

    INTO L_KUNNR

    FROM KNA1

    WHERE KUNNR IN S_KUNNR.

    IF SY-SUBRC <> 0.

    MESSAGE E999 WITH 'Enter valid Customer Number'(026).

    ENDIF.

    ENDIF.

    ENDFORM. " VALIDATE_DATA

    &----


    *& Form SELECT_KNB1

    &----


    • Select Data from Customer Master (Company Code)

    ----


    FORM SELECT_KNB1 .

    CLEAR: TB_KNB1,

    TB_KNB1[].

    SELECT KUNNR

    BUKRS

    ERDAT

    ZAMIB

    FROM KNB1

    INTO TABLE TB_KNB1

    WHERE BUKRS IN S_BUKRS

    AND KUNNR IN S_KUNNR.

    IF SY-SUBRC = 0.

    • Sort TB_KNB1 by Customer no & Rec Created Date

    SORT TB_KNB1 BY KUNNR ERDAT DESCENDING.

    ENDIF.

    ENDFORM. " SELECT_KNB1

    &----


    *& Form SELECT_CUSTOMER_OPEN_ITEMS

    &----


    • Select Custmer Open Items.

    ----


    FORM SELECT_CUSTOMER_OPEN_ITEMS .

    CLEAR: TB_BSID,

    TB_BSID[].

    SELECT A~BUKRS

    B~KUNNR

    B~AUGDT

    B~BLDAT

    B~SHKZG

    B~DMBTR

    B~ZFBDT

    B~ZBD1T

    B~ZBD2T

    B~ZBD3T

    B~REBZG

    B~REBZT

    INTO TABLE TB_BSID

    FROM BKPF AS A JOIN BSID AS B

    ON ABUKRS = BBUKRS

    AND ABELNR = BBELNR

    AND AGJAHR = BGJAHR

    WHERE A~BUKRS IN S_BUKRS

    AND A~BLDAT IN S_BLDAT

    AND B~KUNNR IN S_KUNNR

    AND B~ZUONR IN S_ZUONR

    AND B~BSCHL = C_1.

    IF SY-SUBRC = 0.

    • DMS Managed Indicator = ‘X’.

    IF P_ZAMIB = C_X.

    LOOP AT TB_KNB1 WHERE ZAMIB = SPACE.

    DELETE TB_BSID WHERE BUKRS = TB_KNB1-BUKRS

    AND KUNNR = TB_KNB1-KUNNR.

    ENDLOOP.

    ENDIF.

    • Transfering Open Items from TB_BSID to TB_BSID_OPEN

    TB_BSID_OPEN[] = TB_BSID[].

    ENDIF.

    ENDFORM. " SELECT_CUSTOMER_OPEN_ITEMS

    &----


    *& Form SELECT_CUSTOMER_CLEARED_ITEMS

    &----


    • Select Custmer Cleared Items.

    ----


    FORM SELECT_CUSTOMER_CLEARED_ITEMS .

    CLEAR: TB_BSAD_CLEAR,

    TB_BSAD_CLEAR[].

    SELECT A~BUKRS

    B~KUNNR

    B~AUGDT

    B~BLDAT

    B~SHKZG

    B~DMBTR

    B~ZFBDT

    B~ZBD1T

    B~ZBD2T

    B~ZBD3T

    B~REBZG

    B~REBZT

    INTO TABLE TB_BSAD_CLEAR

    FROM BKPF AS A JOIN BSAD AS B

    ON ABUKRS = BBUKRS

    AND ABELNR = BBELNR

    AND AGJAHR = BGJAHR

    WHERE A~BUKRS IN S_BUKRS

    AND A~BLDAT IN S_BLDAT

    AND B~KUNNR IN S_KUNNR

    AND B~ZUONR IN S_ZUONR

    AND B~BSCHL = C_1.

    IF SY-SUBRC = 0.

    • DMS Managed Indicator = ‘X’.

    IF P_ZAMIB = C_X.

    LOOP AT TB_KNB1 WHERE ZAMIB = SPACE.

    DELETE TB_BSID WHERE BUKRS = TB_KNB1-BUKRS

    AND KUNNR = TB_KNB1-KUNNR.

    ENDLOOP.

    ENDIF.

    • Sort TB_BSID_CLEAR by Customer number

    SORT TB_BSAD_CLEAR BY KUNNR.

    ENDIF.

    • Append lines of TB_BSID_CLEAR to table TB_BSID

    APPEND LINES OF TB_BSAD_CLEAR TO TB_BSID.

    • Sort TB_BSID by Cust num AND Doc date in document

    SORT TB_BSID BY KUNNR BLDAT.

    ENDFORM. " SELECT_CUSTOMER_CLEARED_ITEMS

    &----


    *& Form SELECT_KNA1

    &----


    • Select General Data in Customer Master

    ----


    FORM SELECT_KNA1.

    CLEAR: TB_KNA1,

    TB_KNA1[].

    SELECT KUNNR

    NAME1

    TELF1

    ADRNR

    INTO TABLE TB_KNA1

    FROM KNA1

    WHERE KUNNR IN S_KUNNR.

    IF SY-SUBRC <> 0.

    ENDIF.

    ENDFORM. " SELECT_KNA1

    &----


    *& Form POPULATE_TB_FINAL

    &----


    • Populate Final Output Data.

    ----


    FORM POPULATE_TB_FINAL.

    • Local variable

    DATA: L_DAYS_SLOW(3) TYPE N. " Days Slow

    CLEAR: TB_FINAL,

    TB_FINAL[].

    LOOP AT TB_KNA1.

    • Move-corresponding TB_KNA1 to TB_FINAL.

    TB_FINAL-KUNNR = TB_KNA1-KUNNR. " Customer Number

    TB_FINAL-NAME1 = TB_KNA1-NAME1. " Name Line 1

    TB_FINAL-PHONE = TB_KNA1-TELF1. " Telephone Number

    • To get Customer Address.

    PERFORM GET_CUSTOMER_ADDRESS.

    • To get Date of Last Invoice.

    READ TABLE TB_BSID WITH KEY KUNNR = TB_KNA1-KUNNR.

    IF SY-SUBRC = 0.

    TB_FINAL-LAST_DATE = TB_BSID-BLDAT.

    ENDIF.

    • To get past due and current details.

    PERFORM GET_PAST_DUE_CURRENT.

    • To get Days Slow.

    CLEAR WA_FAEDE .

    LOOP AT TB_BSID_OPEN WHERE KUNNR = TB_KNA1-KUNNR.

    WA_FAEDE-SHKZG = TB_BSID-SHKZG.

    WA_FAEDE-ZFBDT = TB_BSID-ZFBDT.

    WA_FAEDE-ZBD1T = TB_BSID-ZBD1T.

    WA_FAEDE-ZBD2T = TB_BSID-ZBD2T.

    WA_FAEDE-ZBD3T = TB_BSID-ZBD3T.

    WA_FAEDE-REBZG = TB_BSID-REBZG.

    WA_FAEDE-REBZT = TB_BSID-REBZT.

    WA_FAEDE-KOART = C_D.

    • To Determine Due Date.

    CALL FUNCTION 'DETERMINE_DUE_DATE'

    EXPORTING

    I_FAEDE = WA_FAEDE

    IMPORTING

    E_FAEDE = WA_FAEDE

    EXCEPTIONS

    ACCOUNT_TYPE_NOT_SUPPORTED = 1

    OTHERS = 2.

    IF SY-SUBRC <> 0.

    CLEAR WA_FAEDE.

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

    CLEAR: L_DAYS_SLOW.

    L_DAYS_SLOW = SY-DATUM - WA_FAEDE-NETDT - P_GRACE.

    G_DAYS_SLOW = G_DAYS_SLOW + ABS( L_DAYS_SLOW ).

    G_OPEN = G_OPEN + 1.

    ENDLOOP.

    IF G_OPEN IS INITIAL.

    TB_FINAL-DAYS_SLOW = G_DAYS_SLOW / G_OPEN. " Days Slow

    ENDIF.

    • To get Average days to Pay.

    PERFORM GET_AVG_DAYS_PAY.

    • Calculating total records .

    G_REC_COUNT = G_REC_COUNT + 1.

    APPEND TB_FINAL.

    CLEAR TB_FINAL.

    ENDLOOP.

    • Current account balance.

    G_CURR_BAL = TB_FINAL-CURRENT + TB_FINAL-AVG_1_30 +

    TB_FINAL-AVG_31_60 +

    TB_FINAL-AVG_61_90 +

    TB_FINAL-AVG_90G .

    ENDFORM. " POPULATE_TB_FINAL

    &----


    *& Form GET_PAST_DUE_CURRENT

    &----


    • To get past due and current details.

    ----


    FORM GET_PAST_DUE_CURRENT.

    • Local Varaibles.

    DATA: L_RF035_SFAE1 TYPE RF035-SFAE1,

    L_RF035_SFAE2 TYPE RF035-SFAE2,

    L_RF035_SFAE3 TYPE RF035-SFAE3,

    L_RF035_SFAE4 TYPE RF035-SFAE4,

    L_RF035_SFAE5 TYPE RF035-SFAE5,

    L_RF035_SFAE6 TYPE RF035-SFAE6,

    L_RF035_SFAEL TYPE RF035-SFAEL,

    L_RF035_SNFA1 TYPE RF035-SNFA1,

    L_RF035_SNFA2 TYPE RF035-SNFA2,

    L_RF035_SNFA3 TYPE RF035-SNFA3,

    L_RF035_SNFA4 TYPE RF035-SNFA4,

    L_RF035_SNFA5 TYPE RF035-SNFA5,

    L_RF035_SNFA6 TYPE RF035-SNFA6,

    L_RF035_SNFAE TYPE RF035-SNFAE.

    LOOP AT TB_KNB1 WHERE KUNNR = TB_KNA1-KUNNR.

    CALL FUNCTION 'CUSTOMER_DUE_DATE_ANALYSIS'

    EXPORTING

    BUKRS = TB_KNB1-BUKRS

    • KKBER = ' '

    KUNNR = TB_KNB1-KUNNR

    RASID = C_Z001

    IMPORTING

    SFAE1 = L_RF035_SFAE1

    SFAE2 = L_RF035_SFAE2

    SFAE3 = L_RF035_SFAE3

    SFAE4 = L_RF035_SFAE4

    SFAE5 = L_RF035_SFAE5

    SFAE6 = L_RF035_SFAE6

    SFAEL = L_RF035_SFAEL

    SNFA1 = L_RF035_SNFA1

    SNFA2 = L_RF035_SNFA2

    SNFA3 = L_RF035_SNFA3

    SNFA4 = L_RF035_SNFA4

    SNFA5 = L_RF035_SNFA5

    SNFA6 = L_RF035_SNFA6

    SNFAE = L_RF035_SNFAE

    EXCEPTIONS

    INVALID_RASTER = 1

    NO_OPEN_ITEMS = 2

    OTHERS = 3

    .

    IF SY-SUBRC = 0.

    TB_FINAL-AVG_1_30 = TB_FINAL-AVG_1_30 + L_RF035_SFAE1.

    TB_FINAL-AVG_31_60 = TB_FINAL-AVG_31_60 + L_RF035_SFAE2.

    TB_FINAL-AVG_61_90 = TB_FINAL-AVG_61_90 + L_RF035_SFAE3.

    TB_FINAL-AVG_90G = TB_FINAL-AVG_90G + L_RF035_SFAE4

    + L_RF035_SFAE5

    + L_RF035_SFAE6.

    TB_FINAL-CURRENT = TB_FINAL-CURRENT + L_RF035_SNFAE.

    ELSE.

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

    ENDLOOP.

    ENDFORM. " GET_PAST_DUE_CURRENT

    &----


    *& Form GET_CUSTOMER_ADDRESS

    &----


    • To get Customer Address.

    ----


    FORM GET_CUSTOMER_ADDRESS.

    X_ADDR1_SEL-ADDRNUMBER = TB_KNA1-ADRNR.

    CALL FUNCTION 'ADDR_GET'

    EXPORTING

    ADDRESS_SELECTION = X_ADDR1_SEL

    IMPORTING

    SADR = X_SADR

    EXCEPTIONS

    PARAMETER_ERROR = 1

    ADDRESS_NOT_EXIST = 2

    VERSION_NOT_EXIST = 3

    INTERNAL_ERROR = 4

    OTHERS = 5.

    IF SY-SUBRC <> 0.

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

    • ADDRESS LINE 1.

    TB_FINAL-ADDRESS1 = X_SADR-STRAS.

    • ADDRESS LINE 2.

    CONCATENATE X_SADR-PFACH 'CODE' X_SADR-PSTL2 INTO TB_FINAL-ADDRESS2

    SEPARATED BY SPACE.

    • ADDRESS LINE 3.

    CONCATENATE X_SADR-ORT01 X_SADR-ORT02 ',' X_SADR-REGIO X_SADR-PSTLZ

    INTO TB_FINAL-ADDRESS3 SEPARATED BY SPACE.

    • ADDRESS LINE 4.

    TB_FINAL-ADDRESS4 = X_SADR-LAND1.

    ENDFORM. " GET_CUSTOMER_ADDRESS

    &----


    *& Form GET_AVG_DAYS_PAY

    &----


    • To get Average days to Pay.

    ----


    FORM GET_AVG_DAYS_PAY.

    *Local variable

    DATA: L_DAYS TYPE N . " Number of Days

    LOOP AT TB_BSAD_CLEAR WHERE KUNNR = TB_KNA1-KUNNR.

    L_DAYS = TB_BSAD_CLEAR-AUGDT - TB_BSAD_CLEAR-BLDAT.

    G_AVG = G_AVG + L_DAYS.

    G_COUNT = G_COUNT + 1.

    ENDLOOP.

    IF NOT G_COUNT IS INITIAL.

    TB_FINAL-AVG = G_AVG / G_COUNT. " Average days to Pay.

    ENDIF.

    ENDFORM. " GET_AVG_DAYS_PAY

    &----


    *& Form DISPLAY_ALV_REPORT

    &----


    • text

    ----


    FORM DISPLAY_ALV_REPORT.

    • For Populating Field Catalog.

    PERFORM RPT_BUILD_FIELDCATLOG.

    • For Modifying Field Catalog.

    PERFORM RPT_MODIFY_FIELDCATLOG.

    • For TOP_OF_PAGE Event.

    PERFORM RPT_GET_EVENTS.

    • For Displaying Output in Grid Format.

    PERFORM RPT_GRID_DISPLAY.

    ENDFORM. " DISPLAY_ALV_REPORT

    &----


    *& Form RPT_BUILD_FIELDCATLOG

    &----


    • text

    ----


    FORM RPT_BUILD_FIELDCATLOG.

    • To build the Field Catlog.

    DATA : L_TABNAME TYPE SLIS_TABNAME. " Table Name

    L_TABNAME = 'TB_FINAL'.

    REFRESH : TB_FIELDCAT.

    CLEAR : TB_FIELDCAT.

    CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

    EXPORTING

    I_PROGRAM_NAME = G_REPID

    I_INTERNAL_TABNAME = L_TABNAME

    I_INCLNAME = G_REPID

    CHANGING

    CT_FIELDCAT = TB_FIELDCAT

    EXCEPTIONS

    INCONSISTENT_INTERFACE = 1

    PROGRAM_ERROR = 2

    OTHERS = 3.

    IF SY-SUBRC <> 0.

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

    ENDFORM. " RPT_BUILD_FIELDCATLOG

    &----


    *& Form RPT_MODIFY_FIELDCATLOG

    &----


    • text

    ----


    FORM RPT_MODIFY_FIELDCATLOG.

    • Getting the Header Text for the Coloumns

    DATA : L_TABIX LIKE SY-TABIX, " Index

    L_DDICTXT TYPE C VALUE 'L'. " Flag

    • Getting the Header Text for the Coloumns

    LOOP AT TB_FIELDCAT INTO X_FIELDCAT.

    CLEAR L_TABIX.

    L_TABIX = SY-TABIX.

    CASE X_FIELDCAT-FIELDNAME.

    WHEN 'KUNNR'. " Customer Number

    X_FIELDCAT-SELTEXT_L = 'Customer Number'(001).

    X_FIELDCAT-DDICTXT = L_DDICTXT.

    WHEN 'NAME1'. " Name Line 1

    X_FIELDCAT-SELTEXT_L = 'Name'(002).

    X_FIELDCAT-DDICTXT = L_DDICTXT.

    WHEN 'ADDRESS1'. " Address line 1

    X_FIELDCAT-SELTEXT_L = 'Address 1'(003).

    X_FIELDCAT-DDICTXT = L_DDICTXT.

    WHEN 'ADDRESS2'. " Address line 2

    X_FIELDCAT-SELTEXT_L = 'Address 2'(004).

    X_FIELDCAT-DDICTXT = L_DDICTXT.

    WHEN 'ADDRESS3'. " Address line 3

    X_FIELDCAT-SELTEXT_L = 'Address 3'(005).

    X_FIELDCAT-DDICTXT = L_DDICTXT.

    WHEN 'ADDRESS4'. " Address line 4

    X_FIELDCAT-SELTEXT_L = 'Address 4'(006).

    X_FIELDCAT-DDICTXT = L_DDICTXT.

    WHEN 'PHONE'. " Telephone Number

    X_FIELDCAT-SELTEXT_L = 'Telephone Number'(007).

    X_FIELDCAT-DDICTXT = L_DDICTXT.

    WHEN 'DAYS_SLOW'. " Days Slow

    X_FIELDCAT-SELTEXT_L = 'Days Slow'(008).

    X_FIELDCAT-DDICTXT = L_DDICTXT.

    WHEN 'LAST_DATE'. " Date of Last Invoice

    X_FIELDCAT-SELTEXT_L = 'Date of Last Invoice'(009).

    X_FIELDCAT-DDICTXT = L_DDICTXT.

    WHEN 'AVG'. " Average Days to Pay

    X_FIELDCAT-SELTEXT_L = 'Average Days to Pay'(010).

    X_FIELDCAT-DDICTXT = L_DDICTXT.

    WHEN 'CURRENT'. " Current

    X_FIELDCAT-SELTEXT_L = 'Aging Category 1'(011).

    X_FIELDCAT-DDICTXT = L_DDICTXT.

    WHEN 'AVG_1_30'. " 1-30 past due

    X_FIELDCAT-SELTEXT_L = 'Aging Category 2'(012).

    X_FIELDCAT-DDICTXT = L_DDICTXT.

    WHEN 'AVG_31_60'. " 31-60 past due

    X_FIELDCAT-SELTEXT_L = 'Aging Category 3'(013).

    X_FIELDCAT-DDICTXT = L_DDICTXT.

    WHEN 'AVG_61_90'. " 61-90 past due

    X_FIELDCAT-SELTEXT_L = 'Aging Category 4'(014).

    X_FIELDCAT-DDICTXT = L_DDICTXT.

    WHEN 'AVG_90G'. " 90+ past due

    X_FIELDCAT-SELTEXT_L = 'Aging Category 5'(015).

    X_FIELDCAT-DDICTXT = L_DDICTXT.

    ENDCASE.

    MODIFY TB_FIELDCAT FROM X_FIELDCAT INDEX L_TABIX.

    ENDLOOP.

    ENDFORM. " RPT_MODIFY_FIELDCATLOG

    &----


    *& Form RPT_GET_EVENTS

    &----


    • text

    ----


    FORM RPT_GET_EVENTS.

    DATA : L_TABIX TYPE SY-TABIX. " Index

    CLEAR : TB_EVENTS,

    TB_EVENTS[].

    • To get the events from this function module

    • for ALV display

    CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

    EXPORTING

    I_LIST_TYPE = 0

    IMPORTING

    ET_EVENTS = TB_EVENTS

    EXCEPTIONS

    LIST_TYPE_WRONG = 1

    OTHERS = 2.

    IF SY-SUBRC <> 0.

    MESSAGE I999 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

    • Modifing Top of Page event

    READ TABLE TB_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE

    INTO X_EVENTS.

    IF SY-SUBRC = 0.

    CLEAR L_TABIX.

    L_TABIX = SY-TABIX.

    X_EVENTS-FORM = C_TOP_OF_PAGE.

    MODIFY TB_EVENTS FROM X_EVENTS INDEX L_TABIX.

    CLEAR X_EVENTS.

    ENDIF.

    ENDFORM. " RPT_GET_EVENTS

    &----


    *& Form TOP_OF_PAGE

    &----


    • Top Of Page for the ALV format

    ----


    FORM TOP_OF_PAGE.

    REFRESH TB_COMMENTS.

    • For heading

    CLEAR X_COMMENTS.

    X_COMMENTS-TYP = C_H.

    X_COMMENTS-INFO = 'D&B Credit Agency Interface'(019).

    APPEND X_COMMENTS TO TB_COMMENTS.

    • This module outputs formatted simple header information at TOP-OF-PAGE

    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

    EXPORTING

    IT_LIST_COMMENTARY = TB_COMMENTS.

    ENDFORM. " TOP_OF_PAGE

    &----


    *& Form RPT_GRID_DISPLAY

    &----


    • text

    ----


    FORM RPT_GRID_DISPLAY.

    • Layout Settings

    CLEAR X_LAYOUT.

    X_LAYOUT-ZEBRA = 'X'.

    X_LAYOUT-COLWIDTH_OPTIMIZE = C_X.

    X_LAYOUT-NO_COLHEAD = SPACE.

    • To Display the Output in ALV Format

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

    EXPORTING

    I_CALLBACK_PROGRAM = G_REPID

    IS_LAYOUT = X_LAYOUT

    IT_FIELDCAT = TB_FIELDCAT

    IT_EVENTS = TB_EVENTS

    TABLES

    T_OUTTAB = TB_FINAL

    EXCEPTIONS

    PROGRAM_ERROR = 1

    OTHERS = 2.

    IF SY-SUBRC <> 0.

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

    ENDFORM. " RPT_GRID_DISPLAY

    &----


    *& Form SEND_EMAIL

    &----


    • text

    ----


    • --> p1 text

    • <-- p2 text

    ----


    FORM SEND_EMAIL.

    • Prepare the mail

    PERFORM SEND_MAIL USING C_INTERFACE.

    • Sending the mail to Receivers

    PERFORM SENDING_MAIL.

    ENDFORM. " SEND_EMAIL

    &----


    *& Form SEND_MAIL

    &----


    • Sending the Mail

    ----


    FORM SEND_MAIL USING P_C_INTERFACE TYPE YWFSALOFFICNOTIF-INTERFACE_ID.

    • Populating Report name

    G_TITLE = C_TITLE.

    PERFORM POPULATE_EMAIL_REF_DATA USING G_TITLE.

    IF NOT G_REC_COUNT IS INITIAL.

    • To populate the data to table tb_objbin

    PERFORM POPULATE_DATA_OBJBIN.

    • To get the attached file for the mail

    CLEAR G_TAB_LINES.

    DESCRIBE TABLE TB_OBJBIN LINES G_TAB_LINES.

    TB_OBJHEAD = C_FILENAME.

    APPEND TB_OBJHEAD.

    CLEAR TB_OBJHEAD.

    • Creation of the entry for the mail

    TB_OBJPACK-TRANSF_BIN = C_X.

    TB_OBJPACK-HEAD_START = C_1.

    TB_OBJPACK-HEAD_NUM = C_1.

    TB_OBJPACK-BODY_START = C_1.

    TB_OBJPACK-BODY_NUM = G_TAB_LINES.

    TB_OBJPACK-DOC_TYPE = C_TXT.

    TB_OBJPACK-OBJ_NAME = G_REPID.

    TB_OBJPACK-OBJ_DESCR = 'Interface Audit Report'(020).

    TB_OBJPACK-DOC_SIZE = G_TAB_LINES * 255.

    APPEND TB_OBJPACK.

    ENDIF.

    ENDFORM. " SEND_MAIL

    &----


    *& Form SENDING_MAIL

    &----


    FORM SENDING_MAIL.

    • Function Module to send mail along with attached file

    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

    EXPORTING

    DOCUMENT_DATA = TB_DOC_CHNG

    TABLES

    PACKING_LIST = TB_OBJPACK

    OBJECT_HEADER = TB_OBJHEAD

    CONTENTS_BIN = TB_OBJBIN

    CONTENTS_TXT = TB_OBJTXT

    RECEIVERS = TB_RECLIST

    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.

    CASE SY-SUBRC.

    WHEN 0.

    MESSAGE S999 WITH 'Mail has been sucessfully sent'(029).

    WHEN 1.

    MESSAGE S999 WITH 'Too Many Parameters'(030).

    WHEN 2.

    MESSAGE S999 WITH 'Doc Could Not Be Sent'(031).

    WHEN 4.

    MESSAGE S999 WITH 'No Authority To Send'(032).

    WHEN 99.

    MESSAGE S999 WITH 'Error While Sending'(033).

    ENDCASE.

    ENDFORM. " SENDING_MAIL

    &----


    *& Form POPULATE_EMAIL_REF_DATA

    &----


    • Poplulating the body of the mail

    ----


    FORM POPULATE_EMAIL_REF_DATA USING TEXT TYPE SOLISTI1-LINE.

    • Setting up Mail Subject

    TB_DOC_CHNG-OBJ_DESCR = 'Interface Audit Report'(020).

    • Populating body of the mail

    TB_OBJTXT-LINE = 'Interface Audit Report'(020).

    APPEND TB_OBJTXT.

    CLEAR: TB_OBJTXT.

    DESCRIBE TABLE TB_OBJTXT LINES G_TAB_LINES.

    READ TABLE TB_OBJTXT INDEX G_TAB_LINES.

    *To determine the document size

    TB_DOC_CHNG-DOC_SIZE = ( G_TAB_LINES - 1 ) * 255 + STRLEN( TB_OBJTXT ).

    • Creation of the entry for the Mail Contents

    CLEAR TB_OBJPACK-TRANSF_BIN.

    TB_OBJPACK-HEAD_START = C_1.

    TB_OBJPACK-HEAD_NUM = C_0.

    TB_OBJPACK-BODY_START = C_1.

    TB_OBJPACK-BODY_NUM = G_TAB_LINES.

    TB_OBJPACK-DOC_TYPE = C_RAW.

    APPEND TB_OBJPACK.

    ENDFORM. " POPULATE_EMAIL_REF_DATA

    &----


    *& Form POPULATE_DATA_OBJBIN

    &----


    • Populating table for file attachment

    ----


    FORM POPULATE_DATA_OBJBIN.

    • Set the space for the file

    PERFORM FILE_SPACE.

    • Set coloumn header for the File

    PERFORM FILE_HEADER.

    • Set the space for the file

    PERFORM FILE_SPACE.

    • Populate data to file

    PERFORM POPULATE_DATA_FILE.

    • Set the space for the file

    PERFORM FILE_SPACE.

    ENDFORM. " POPULATE_DATA_OBJBIN

    &----


    *& Form FILE_SPACE

    &----


    FORM FILE_SPACE.

    • To set the space

    CONCATENATE SPACE C_DELIMITER INTO TB_OBJBIN-LINE.

    APPEND TB_OBJBIN.

    CLEAR TB_OBJBIN.

    ENDFORM. " FILE_SPACE

    &----


    *& Form FILE_HEADER

    &----


    • Populating the header of the file

    ----


    FORM FILE_HEADER.

    TB_OBJBIN-LINE+1(14) = TEXT-021. " Record Count

    TB_OBJBIN-LINE+16(25) = TEXT-022. " Current Account Balance

    APPEND TB_OBJBIN.

    CLEAR TB_OBJBIN.

    ENDFORM. " FILE_HEADER

    &----


    *& Form POPULATE_DATA_FILE

    &----


    • Populating the data into file

    ----


    FORM POPULATE_DATA_FILE.

    TB_OBJBIN-LINE+1(14) = G_REC_COUNT.

    TB_OBJBIN-LINE+16(25) = G_CURR_BAL.

    APPEND TB_OBJBIN.

    CLEAR TB_OBJBIN.

    ENDFORM. " POPULATE_DATA_FILE

    &----


    *& Form TRANSFER_DATA_FILE

    &----


    • Download data to Application server

    ----


    FORM TRANSFER_DATA_FILE.

    • Opening file in application server

    OPEN DATASET G_FILE_NAME FOR OUTPUT IN TEXT MODE.

    IF SY-SUBRC <> 0.

    MESSAGE I999 WITH 'Error When Opening File'(034).

    EXIT.

    ENDIF.

    • Transfer of data to file

    LOOP AT TB_FINAL.

    TRANSFER TB_FINAL TO G_FILE_NAME.

    ENDLOOP.

    • Closing the file in application server

    CLOSE DATASET G_FILE_NAME.

    IF SY-SUBRC <> 0.

    MESSAGE I999 WITH 'No File Found To Close'(035).

    EXIT.

    ENDIF.

    ENDFORM. " TRANSFER_DATA_FILE

    &----


    *& Form WRITE_REPORT

    &----


    • Display data for summary report

    ----


    FORM WRITE_REPORT.

    • Colunm headings for the Report

    WRITE :/01(46) SY-ULINE.

    FORMAT COLOR 1.

    WRITE :/ SY-VLINE,

    02(14) 'Record Count'(021),

    16 SY-VLINE,

    19(25) 'Current Account Balance'(022),

    46 SY-VLINE.

    FORMAT COLOR OFF.

    • Displaying the record count and Curr Acc balance

    FORMAT COLOR 2.

    WRITE :/ SY-VLINE,

    02(14) G_REC_COUNT LEFT-JUSTIFIED,

    16 SY-VLINE ,

    19(25) G_CURR_BAL ,

    46 SY-VLINE.

    FORMAT COLOR OFF.

    WRITE :/01(46) SY-ULINE.

    ENDFORM. " WRITE_REPORT

    regards,

    Kiran.

    Add comment
    10|10000 characters needed characters exceeded