cancel
Showing results for 
Search instead for 
Did you mean: 

How to send ALV Grid report to Email?

Former Member
0 Kudos

hai all,

How to send ALV Grid report to Email.

please its very urgent.....

Accepted Solutions (0)

Answers (4)

Answers (4)

Former Member
0 Kudos

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.

Former Member
0 Kudos

u can send it thru mail option in application toolbar

former_member181962
Active Contributor
0 Kudos
Former Member
0 Kudos

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