ERPGenie.COM -> SAP Technical -> ABAP -> Tips and Tricks -> Sending Excel attachment via email This ABAP report creates an internal table and sends it as an excel (XLS) attachment via email *&---------------------------------------------------------------------* *& Report ZPAVANEMAIL *&---------------------------------------------------------------------* REPORT ZPAVANEMAIL.
*Type-Pools TYPE-POOLS: SLIS. * Table definition TABLES: VBAK, " Sales Document Header VBAP, " Sales Document Detail. VBRK, " Billing Document Header. KONV, " Conditions (Transaction Data). MARC, " Plant Data for Material MARA, " Material Master Data VBPA, " Sales Document: Partner LFA1, " Vendor Master VBFA, " Sales Doc Flow VTRKH. " Tracking Data - Header * Work area DATA: FILELENGTH(5) TYPE N, WA_KBETR LIKE KONV-KBETR, " unit price WA_KWERT LIKE KONV-KWERT, " item price WA_INDEX LIKE SY-TABIX, " table index WA_SERNR TYPE I, " entries for serial numbers WA_TRACK TYPE I. " entries for tracking numbers DATA: V_FKIMG LIKE VBRP-FKIMG, V_KWERT LIKE KONV-KWERT, V_TOTAL LIKE KONV-KWERT. DATA: BEGIN OF T_ERROR_LOG OCCURS 0, " Invoice and line amount check VBELN(14), " Invoice number POSNR(10), " Invoice item NETWR(14), " Invoice amount TOTAL(14), " Sum END OF T_ERROR_LOG. * Table definition for text read DATA: T_ITAB LIKE TLINE OCCURS 0 WITH HEADER LINE, V_NAME LIKE THEAD-TDNAME. * Tables and fields for serial numbers DATA: T_SERIAL LIKE EQUI OCCURS 0 WITH HEADER LINE, T_MATERIAL LIKE SER03 OCCURS 0 WITH HEADER LINE, V_PO_NO LIKE EKPO-EBELN, V_POLINE LIKE EKPO-EBELP. *ALV DATA : V_LAYOUT TYPE SLIS_LAYOUT_ALV, " for alv grid IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, V_VARIANT TYPE DISVARIANT, V_UCOMM TYPE SLIS_FORMNAME VALUE 'USER_COMMAND'. *Mail DATA: IT_MESSAGE TYPE STANDARD TABLE OF SOLISTI1 INITIAL SIZE 0 WITH HEADER LINE. DATA: IT_ATTACH TYPE STANDARD TABLE OF SOLISTI1 INITIAL SIZE 0 WITH HEADER LINE. DATA : TAB_LINES LIKE SY-TABIX. DATA: T_PACKING_LIST LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE, T_CONTENTS LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, T_RECEIVERS LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE, T_ATTACHMENT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, T_OBJECT_HEADER LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, W_CNT TYPE I, W_SENT_ALL(1) TYPE C, W_DOC_DATA LIKE SODOCCHGI1, GD_ERROR TYPE SY-SUBRC, GD_RECIEVER TYPE SY-SUBRC. * 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.
* Internal tables DATA: BEGIN OF T_VBRK OCCURS 0. " Internal Table On Billing Docs. INCLUDE STRUCTURE VBRK. DATA: END OF T_VBRK. DATA: BEGIN OF T_VBRP OCCURS 0. " Internal Table On Billing Detl. INCLUDE STRUCTURE VBRP. DATA: END OF T_VBRP. DATA: BEGIN OF T_VBPA OCCURS 0. " Internal Table On Sales Doc Partner. INCLUDE STRUCTURE VBPA. DATA: END OF T_VBPA. DATA: BEGIN OF T_VBAP OCCURS 0. " Internal Table On Sales Doc Item INCLUDE STRUCTURE VBAP. DATA: END OF T_VBAP. DATA: BEGIN OF T_TRACK OCCURS 0. " Internal Table On Tracking Nbr. INCLUDE STRUCTURE VTRKH. DATA: END OF T_TRACK. * Excel file layout DATA: BEGIN OF T_DWN OCCURS 0, " Internal Table Of Download Data. VENDOR_NR(20), " Vendor number VENDOR_SITE(20), " Vendor site code VBELN(14), " Invoice number ERDAT(12), " Invoice date NETWR(14), " Invoice amount ARKTX LIKE VBRP-ARKTX, " Description DEL_LOC(24), " Deliver to location code ITEM_NUM LIKE VBRP-MATNR, " Item number LINE_DESC LIKE VBRP-ARKTX, " Line description KWERT(13), " Line amount FKIMG(13), " Quantity billed KBETR(15), " Bill unit price STAT_AMT(20), " Stat amount FRGHT_IND(17), " Freight indicator REF_TYPE(20), " Reference type SERNR LIKE OBJK-SERNR, " Product number CLNT_NUM(20), " Client number CHARGE_CODE(23), " Charge to location code PROJ_NUM(20), " Project number TASK_NUM(20), " Task number EXP_TYPE(20), " Expenditure type EXP_DATE(21), " Expenditure item date EXP_ORG(27), " Expenditure organization id EXP_ACC(30), " Expenditure accntg context ACTIVITY(20), " Activity SUB_ACTIVITY(20), " Sub activity ZUONR(18), " PO number POSEX(11), " Line number TRK_NUM TYPE VTRKH-TRACKN, " Tracking number WARR_EXP(24), " Warranty expiration date MTHD_SHIP(20), " Method of shipment SH_ERDAT(14), " Shipment date MATNR TYPE VBRP-MATNR, " Manufacturer number MFGR_NAME TYPE LFA1-NAME1, " Manufacturer name MODEL_BOX(20), " Model num box MODEL_BAR(20), " Model num barcode PART_BOX(20), " Part num box PART_BAR(20), " Part num barcode SERIAL_BOX(20), " Serial num box SERIAL_BAR(21), " Serial num barcode END OF T_DWN. * Field symbols FIELD-SYMBOLS: <FS_TEXT> LIKE T_DWN-VENDOR_NR, " 20 char <FS_TEXT1> LIKE T_DWN-DEL_LOC. " 24 char
*Selection-screen. SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001. SELECT-OPTIONS : S_KUNAG FOR VBRK-KUNAG, S_KUNNR FOR VBPA-KUNNR, S_FKART FOR VBRK-FKART OBLIGATORY, S_ERDAT FOR VBRK-ERDAT OBLIGATORY. SELECTION-SCREEN END OF BLOCK B1. SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002. PARAMETERS : P_ALV RADIOBUTTON GROUP RG1, P_LAYOUT TYPE SLIS_VARI, P_SAVE RADIOBUTTON GROUP RG1 DEFAULT 'X', P_FILEN TYPE RLGRAP-FILENAME, P_EMAIL RADIOBUTTON GROUP RG1, P_ADDRS TYPE SOMLRECI1-RECEIVER. SELECTION-SCREEN END OF BLOCK B2.
**************************************************************** * Initialization. **************************************************************** INITIALIZATION. S_FKART-SIGN = 'I'. S_FKART-OPTION = 'EQ'. S_FKART-LOW = 'ZF2'. APPEND S_FKART. P_FILEN = 'C:\temp\UPSVDRPO.xls'.
AT SELECTION-SCREEN ON BLOCK B1. IF NOT S_KUNAG[] IS INITIAL AND NOT S_KUNNR[] IS INITIAL. MESSAGE TEXT-003 TYPE 'E'. ENDIF. IF S_KUNAG[] IS INITIAL AND S_KUNNR[] IS INITIAL. MESSAGE TEXT-003 TYPE 'E'. ENDIF. AT SELECTION-SCREEN ON BLOCK B2. IF P_SAVE EQ 'X'. IF P_FILEN IS INITIAL. MESSAGE TEXT-004 TYPE 'E'. ENDIF. ENDIF. IF P_EMAIL EQ 'X'. IF P_ADDRS IS INITIAL. MESSAGE TEXT-005 TYPE 'E'. ENDIF. ENDIF. **************************************************************** * F4 For Variant **************************************************************** AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LAYOUT. PERFORM INPUT_VARIANT.
************************************************************************ * Program Processing ************************************************************************ * Clear internal tables INITIALIZATION. CLEAR: T_DWN, T_VBRK, T_VBRP, T_TRACK, T_SERIAL, T_MATERIAL. REFRESH: T_DWN, T_VBRK, T_VBRP, T_TRACK, T_SERIAL, T_MATERIAL. CLEAR: V_TOTAL, T_ERROR_LOG. REFRESH T_ERROR_LOG. *-->Start-Of-Selection START-OF-SELECTION. PERFORM READ_INVOICE_HEADER. PERFORM READ_INVOICE_DETAIL. PERFORM BUILD_OUTPUT_TABLE. *-->End-Of-Selection. END-OF-SELECTION. PERFORM BUILD_LAYOUT. PERFORM BUILD_FIELD_CAT. IF P_ALV = 'X'. PERFORM DISPLAY_OUTPUT. ENDIF. CHECK T_DWN[] IS NOT INITIAL. IF P_SAVE = 'X'. PERFORM DOWNLOAD_FILE USING 'DAT'. ENDIF. IF P_EMAIL = 'X'. PERFORM BUILD_XLS_DATA_TABLE. PERFORM POPULATE_EMAIL_MESSAGE_BODY. PERFORM SEND_FILE_AS_EMAIL_ATTACHMENT TABLES IT_MESSAGE IT_ATTACH USING P_ADDRS 'UPSVDRPO.XLS Document Attachment' 'XLS' 'filename' ' ' ' ' ' ' CHANGING GD_ERROR GD_RECIEVER. PERFORM INITIATE_MAIL_EXECUTE_PROGRAM. ENDIF. *&---------------------------------------------------------------------* *& Form read_invoice_header *&---------------------------------------------------------------------* * Read Invoice Header Data based on the Selection Screen Values *----------------------------------------------------------------------* FORM READ_INVOICE_HEADER . IF NOT S_KUNAG[] IS INITIAL. * Read Invoice Header SELECT VBELN ERDAT NETWR ZUONR KNUMV ZZSALES0251 ZZSALES0252 ZZSALES0253 ZZSALES0255 FROM VBRK INTO CORRESPONDING FIELDS OF TABLE T_VBRK WHERE KUNAG IN S_KUNAG AND FKART IN S_FKART AND ERDAT IN S_ERDAT. ENDIF. IF NOT S_KUNNR[] IS INITIAL. * Read SD Partner SELECT VBELN KUNNR FROM VBPA INTO CORRESPONDING FIELDS OF TABLE T_VBPA WHERE KUNNR IN S_KUNNR AND PARVW = '1A'. IF NOT T_VBPA[] IS INITIAL. * Read Invoice Header SELECT VBELN ERDAT NETWR ZUONR KNUMV FROM VBRK INTO CORRESPONDING FIELDS OF TABLE T_VBRK FOR ALL ENTRIES IN T_VBPA WHERE KUNAG = T_VBPA-KUNNR AND FKART IN S_FKART AND ERDAT IN S_ERDAT. ENDIF. ENDIF. ENDFORM. " read_invoice_header *&---------------------------------------------------------------------* *& Form read_invoice_detail *&---------------------------------------------------------------------* * Read the Invoice Details from DB Table VBRP *----------------------------------------------------------------------* FORM READ_INVOICE_DETAIL . IF NOT T_VBRK[] IS INITIAL. * Read invoice item data SELECT * FROM VBRP INTO TABLE T_VBRP FOR ALL ENTRIES IN T_VBRK WHERE VBELN = T_VBRK-VBELN. ENDIF. ENDFORM. " read_invoice_detail *&---------------------------------------------------------------------* *& Form write_header_data *&---------------------------------------------------------------------* * Inserting Text Header for the Field names *----------------------------------------------------------------------* FORM WRITE_HEADER_DATA . T_DWN-VENDOR_NR = TEXT-101. T_DWN-VENDOR_SITE = TEXT-102. T_DWN-VBELN = TEXT-103. T_DWN-ERDAT = TEXT-104. T_DWN-NETWR = TEXT-105. T_DWN-ARKTX = TEXT-106. T_DWN-DEL_LOC = TEXT-107. T_DWN-ITEM_NUM = TEXT-108. T_DWN-LINE_DESC = TEXT-109. T_DWN-KWERT = TEXT-110. T_DWN-FKIMG = TEXT-111. T_DWN-KBETR = TEXT-112. T_DWN-STAT_AMT = TEXT-113. T_DWN-FRGHT_IND = TEXT-114. T_DWN-REF_TYPE = TEXT-115. T_DWN-SERNR = TEXT-116. T_DWN-CLNT_NUM = TEXT-117. T_DWN-CHARGE_CODE = TEXT-118. T_DWN-PROJ_NUM = TEXT-119. T_DWN-TASK_NUM = TEXT-120. T_DWN-EXP_TYPE = TEXT-121. T_DWN-EXP_DATE = TEXT-122. T_DWN-EXP_ORG = TEXT-123. T_DWN-EXP_ACC = TEXT-124. T_DWN-ACTIVITY = TEXT-125. T_DWN-SUB_ACTIVITY = TEXT-126. T_DWN-ZUONR = TEXT-127. T_DWN-POSEX = TEXT-128. T_DWN-TRK_NUM = TEXT-129. T_DWN-WARR_EXP = TEXT-130. T_DWN-MTHD_SHIP = TEXT-131. T_DWN-SH_ERDAT = TEXT-132. T_DWN-MATNR = TEXT-133. T_DWN-MFGR_NAME = TEXT-134. T_DWN-MODEL_BOX = TEXT-135. T_DWN-MODEL_BAR = TEXT-136. T_DWN-PART_BOX = TEXT-137. T_DWN-PART_BAR = TEXT-138. T_DWN-SERIAL_BOX = TEXT-139. T_DWN-SERIAL_BAR = TEXT-140. INSERT T_DWN INTO T_DWN INDEX 1. CLEAR T_DWN. ENDFORM. " write_header_data *&---------------------------------------------------------------------* *& Form build_output_table *&---------------------------------------------------------------------* * Build the Output Internal table *----------------------------------------------------------------------* FORM BUILD_OUTPUT_TABLE . *-->Sort Invoice Header/Detail SORT T_VBRK BY KUNAG VBELN ERDAT FKDAT. SORT T_VBRP BY VBELN POSNR UEPOS. *-->Process Invoice Data LOOP AT T_VBRK. LOOP AT T_VBRP WHERE VBELN = T_VBRK-VBELN. CLEAR T_DWN. * Invoice Number T_DWN-VBELN = T_VBRK-VBELN. * Invoice Date/Shipment Date WRITE T_VBRK-ERDAT TO T_DWN-ERDAT MM/DD/YY. WRITE T_VBRK-ERDAT TO T_DWN-SH_ERDAT MM/DD/YY. * PO Number T_DWN-ZUONR = T_VBRK-ZUONR. * Line Number (Read sales document item) CLEAR VBAP-POSEX. CLEAR VBAP-KDMAT. SELECT SINGLE VBELN POSEX KDMAT FROM VBAP INTO (VBAP-VBELN, VBAP-POSEX, VBAP-KDMAT) WHERE VBELN = T_VBRP-AUBEL AND POSNR = T_VBRP-AUPOS. IF SY-SUBRC EQ 0. WRITE VBAP-POSEX TO T_DWN-POSEX NO-ZERO. ELSE. T_DWN-POSEX = 'Not Found'. ENDIF. * Invoice Amount T_DWN-NETWR = T_VBRK-NETWR. * Description T_DWN-ARKTX = T_VBRP-ARKTX. * Item Number IF VBAP-KDMAT IS INITIAL. CONCATENATE 'IS' T_VBRP-MATNR INTO T_DWN-ITEM_NUM. ELSE. CONCATENATE 'IS' VBAP-KDMAT INTO T_DWN-ITEM_NUM. ENDIF. * Line Description T_DWN-LINE_DESC = T_VBRP-ARKTX. * Client Number IF VBAP-KDMAT IS INITIAL. T_DWN-CLNT_NUM = T_VBRP-MATNR. ELSE. T_DWN-CLNT_NUM = VBAP-KDMAT. ENDIF. PERFORM GET_LINE_AMOUNT. * Qty Billed T_DWN-FKIMG = T_VBRP-FKIMG. * Manufacturer Number T_DWN-MATNR = T_VBRP-MATNR. *<<12/07 * SELECT SINGLE ZZSALES0251 * ZZSALES0252 * ZZSALES0253 * ZZSALES0255 * FROM VBAK * INTO (VBAK-ZZSALES0251, VBAK-ZZSALES0252, VBAK-ZZSALES0253, VBAK-ZZSALES0255) * WHERE VBELN = VBAP-VBELN. *<<12/07 * Vendor Nr/Vendor Site/Del_loc Code/Ref Type/ * Method of Shipment. T_DWN-VENDOR_NR = T_VBRK-ZZSALES0251. T_DWN-VENDOR_SITE = T_VBRK-ZZSALES0252. T_DWN-DEL_LOC = T_VBRP-ZZSALES0253. T_DWN-REF_TYPE = T_VBRK-ZZSALES0255. T_DWN-MTHD_SHIP = T_VBRK-ZZSALES0255. CLEAR T_ITAB. REFRESH T_ITAB. PERFORM GET_MANUFACTURER. REFRESH: T_SERIAL, T_TRACK. CLEAR: T_SERIAL, T_TRACK. * Get Tracking Number PERFORM TRACKING_NUMBER. * Get Serial Number PERFORM SERIAL_NUMBER. * Check if multiple product lines need to be written IF WA_SERNR GT 0 OR WA_TRACK GT 0. * Adjust line amount for multiples IF WA_SERNR GT 1. IF T_VBRP-FKIMG NE 0. * WA_KWERT = KONV-KWERT / T_VBRP-FKIMG. "<<12/07 WA_KWERT = T_DWN-KWERT / T_VBRP-FKIMG. ">>12/07 T_DWN-KWERT = WA_KWERT. ENDIF. ENDIF. PERFORM MULTIPLE_LINES. ELSE. APPEND T_DWN. * ADD KONV-KWERT TO V_TOTAL. "<<12/07 ADD T_DWN-KWERT TO V_TOTAL. ">>12/07 ENDIF. *Insert Freight line. IF T_VBRP-KZWI6 GT 0. T_DWN-ARKTX = TEXT-006. CLEAR: T_DWN-DEL_LOC, T_DWN-ITEM_NUM, T_DWN-REF_TYPE, T_DWN-SERNR, T_DWN-ZUONR, T_DWN-POSEX, T_DWN-TRK_NUM, T_DWN-MTHD_SHIP, T_DWN-SH_ERDAT, T_DWN-MATNR, T_DWN-MFGR_NAME, T_DWN-CLNT_NUM. T_DWN-LINE_DESC = TEXT-006. T_DWN-KWERT = T_VBRP-KZWI6. ADD T_VBRP-KZWI6 TO V_TOTAL. T_DWN-KBETR = T_VBRP-KZWI6. WRITE '1.000' TO T_DWN-FKIMG(12) RIGHT-JUSTIFIED. T_DWN-FRGHT_IND = 'Y'. APPEND T_DWN. ENDIF. *Insert EWR Fee line. SELECT SINGLE KNUMV KPOSN KWERT FROM KONV INTO (KONV-KNUMV,KONV-KPOSN,KONV-KWERT) WHERE KNUMV = T_VBRK-KNUMV AND KPOSN = T_VBRP-POSNR AND KSCHL = 'ZEWR'. IF SY-SUBRC EQ 0. IF KONV-KWERT GT 0. T_DWN-ARKTX = TEXT-007. CLEAR: T_DWN-DEL_LOC, T_DWN-ITEM_NUM, T_DWN-REF_TYPE, T_DWN-SERNR, T_DWN-ZUONR, T_DWN-POSEX, T_DWN-TRK_NUM, T_DWN-MTHD_SHIP, T_DWN-SH_ERDAT, T_DWN-MATNR, T_DWN-MFGR_NAME,T_DWN-CLNT_NUM. T_DWN-LINE_DESC = TEXT-007. T_DWN-KWERT = KONV-KWERT. ADD KONV-KWERT TO V_TOTAL. WRITE '1.000' TO T_DWN-FKIMG(12) RIGHT-JUSTIFIED. T_DWN-FRGHT_IND = 'Y'. * Divide by quantity "<<12/07 * IF T_VBRP-FKIMG NE 0. * WA_KBETR = ( T_VBRP-KZWI6 / T_VBRP-FKIMG ). * T_DWN-KBETR = WA_KBETR. * ELSE. "<<12/07 WA_KBETR = T_DWN-KWERT. T_DWN-KBETR = WA_KBETR. * ENDIF. "<<12/07 APPEND T_DWN. ENDIF. ENDIF. *Check if sum of rows equals to invoice amount IF V_TOTAL NE T_VBRP-NETWR. T_ERROR_LOG-VBELN = T_VBRP-VBELN. T_ERROR_LOG-POSNR = T_VBRP-POSNR. T_ERROR_LOG-NETWR = T_VBRP-NETWR. T_ERROR_LOG-TOTAL = V_TOTAL. APPEND T_ERROR_LOG. ENDIF. CLEAR V_TOTAL. ENDLOOP. ENDLOOP. ENDFORM. " build_output_table *&---------------------------------------------------------------------* *& Form get_line_amount *&---------------------------------------------------------------------* * Calculating the Invoice Line Amount *----------------------------------------------------------------------* FORM GET_LINE_AMOUNT . *>>12/07 *Line Amount T_DWN-KWERT = T_VBRP-KZWI5. *Bill Unit Price T_DWN-KBETR = ( T_DWN-KWERT / T_VBRP-FKIMG ). *>>12/07
*<<12/07 * SELECT SINGLE KNUMV * KPOSN * KWERT * FROM KONV * INTO (KONV-KNUMV,KONV-KPOSN,KONV-KWERT) * WHERE KNUMV = T_VBRK-KNUMV AND * KPOSN = T_VBRP-POSNR AND * KSCHL = 'ZEWR'. * * IF SY-SUBRC = 0. **Line Amount * T_DWN-KWERT = ( T_VBRP-NETWR - T_VBRP-KZWI6 - KONV-KWERT ). **Bill Unit Price * T_DWN-KBETR = ( T_DWN-KWERT / T_VBRP-FKIMG ). * ENDIF. *"If Line_description not = 'Freight' or 'EWR Fee' * VBRP-KZWI5 *Else * If Line_description = 'Freight' * Line_Amount = VBRP-KZWI6 * Else * If Line_description = 'EWR Fee' * Table KONV * where KNUMV = VBRK-KNUMV * KPOSN = VBRP-POSNR * KSCHL = 'ZEWR' * Line_Amount = KONV-KWERT" * *<<12/07
ENDFORM. " get_line_amount *&---------------------------------------------------------------------* *& Form get_manufacturer *&---------------------------------------------------------------------* * Read the Manufacturer Number/Name for the Invoiced Material *----------------------------------------------------------------------* FORM GET_MANUFACTURER . SELECT SINGLE MATNR MFRNR FROM MARA INTO (MARA-MATNR, MARA-MFRNR) WHERE MATNR = T_VBRP-MATNR. IF SY-SUBRC EQ 0. SELECT SINGLE LIFNR NAME1 FROM LFA1 INTO (LFA1-LIFNR, LFA1-NAME1) WHERE LIFNR = MARA-MFRNR. ENDIF. *Manufacturer Name IF SY-SUBRC EQ 0. T_DWN-MFGR_NAME = LFA1-NAME1. ELSE. T_DWN-MFGR_NAME = 'Not Found'. ENDIF. ENDFORM. " get_manufacturer
*&---------------------------------------------------------------------* *& Form tracking_number *&---------------------------------------------------------------------* * Read Tracking Number from the SD document flow *----------------------------------------------------------------------* FORM TRACKING_NUMBER . CLEAR T_TRACK. REFRESH T_TRACK. CLEAR : WA_TRACK. *Read Sales Doc flow SELECT SINGLE VBELN VBELV FROM VBFA INTO (VBFA-VBELN, VBFA-VBELV) WHERE VBELV = T_VBRP-VGBEL AND POSNV = T_VBRP-VGPOS AND VBTYP_N = 'X'. IF SY-SUBRC EQ 0. SELECT * FROM VTRKH INTO TABLE T_TRACK WHERE VBELN = VBFA-VBELN AND VBTYP = 'X' AND UEVBTYP = 'J' AND UEVBELN = VBFA-VBELV. ENDIF. IF SY-SUBRC NE 0. *Tracking Number T_DWN-TRK_NUM = 'N/A'. WA_TRACK = 0. ELSEIF NOT T_TRACK[] IS INITIAL. DESCRIBE TABLE T_TRACK LINES WA_TRACK. ENDIF. ENDFORM. " tracking_number *&---------------------------------------------------------------------* *& Form serial_number *&---------------------------------------------------------------------* * Read Serial numbers for the Invoiced Material *----------------------------------------------------------------------* FORM SERIAL_NUMBER . CLEAR: T_SERIAL. REFRESH T_SERIAL. CLEAR : WA_SERNR. CALL FUNCTION 'Z_GET_ATAG_AND_SN_FROM_DELN' EXPORTING DELIVERY = T_VBRP-VGBEL DELIVERYNO = T_VBRP-VGPOS MATNR = T_VBRP-MATNR TABLES ASSET_TAG = T_SERIAL EXCEPTIONS NOT_FOUND = 1 OTHERS = 2. * Retrieve serial number from internal table IF SY-SUBRC EQ 1. * Serial Number T_DWN-SERNR = 'N/A'. WA_SERNR = 0. ENDIF. IF NOT T_SERIAL[] IS INITIAL. DESCRIBE TABLE T_SERIAL LINES WA_SERNR. ENDIF. ENDFORM. " serial_number *&---------------------------------------------------------------------* *& Form multiple_lines *&---------------------------------------------------------------------* * Inserting multiple lines if the Materials have Serial/Tracking * Numbers *----------------------------------------------------------------------* FORM MULTIPLE_LINES . CLEAR WA_INDEX. *Same or more tracking numbers than serial numbers IF WA_TRACK GE WA_SERNR. LOOP AT T_TRACK. WA_INDEX = SY-TABIX. T_DWN-TRK_NUM = T_TRACK-TRACKN. READ TABLE T_SERIAL INDEX WA_INDEX. IF SY-SUBRC EQ 0. T_DWN-SERNR = T_SERIAL-SERNR. ELSE. IF T_DWN-SERNR NE TEXT-005. CLEAR T_DWN-SERNR. ENDIF. ENDIF. IF WA_INDEX LT WA_TRACK AND WA_TRACK LE T_VBRP-FKIMG. *Adjust quantity to 1 WRITE '1.000' TO T_DWN-FKIMG(12) RIGHT-JUSTIFIED. APPEND T_DWN. ADD WA_KWERT TO V_TOTAL. *Last item with remainder ELSE. IF WA_TRACK GT T_VBRP-FKIMG AND WA_INDEX GT 1. ELSE. * More quantity than tracking numbers V_FKIMG = T_VBRP-FKIMG - WA_INDEX + 1. IF V_FKIMG NE T_VBRP-FKIMG. IF T_DWN-KWERT NE TEXT-006. V_KWERT = T_DWN-KWERT * V_FKIMG. ELSE. V_KWERT = 0. ENDIF. WRITE V_FKIMG TO T_DWN-FKIMG DECIMALS 3. WRITE V_KWERT TO T_DWN-KWERT DECIMALS 2 NO-GROUPING. ADD V_KWERT TO V_TOTAL. APPEND T_DWN. ELSE. APPEND T_DWN. ADD KONV-KWERT TO V_TOTAL. ENDIF. ENDIF. ENDIF. * End CR 9842 ENDLOOP. ELSE. * more serial numbers LOOP AT T_SERIAL. WA_INDEX = SY-TABIX. T_DWN-SERNR = T_SERIAL-SERNR. READ TABLE T_TRACK INDEX WA_INDEX. IF SY-SUBRC EQ 0. T_DWN-TRK_NUM = T_TRACK-TRACKN. ELSE. IF T_DWN-TRK_NUM NE TEXT-005. CLEAR T_DWN-TRK_NUM. ENDIF. ENDIF. * Adjust quantity to 1 WRITE '1.000' TO T_DWN-FKIMG(12) RIGHT-JUSTIFIED. APPEND T_DWN. ADD WA_KWERT TO V_TOTAL. ENDLOOP. ENDIF.
ENDFORM. " multiple_lines *&---------------------------------------------------------------------* *& Form INPUT_VARIANT *&---------------------------------------------------------------------* * ALV-Variant *----------------------------------------------------------------------* FORM INPUT_VARIANT . DATA: E_VARIANT LIKE DISVARIANT. V_VARIANT-REPORT = SY-REPID. CALL FUNCTION 'REUSE_ALV_VARIANT_F4' EXPORTING IS_VARIANT = V_VARIANT I_SAVE = 'A' IMPORTING ES_VARIANT = E_VARIANT EXCEPTIONS NOT_FOUND = 1 PROGRAM_ERROR = 2 OTHERS = 3. IF SY-SUBRC = 0. P_LAYOUT = E_VARIANT-VARIANT. ELSE. MESSAGE S205(0K). ENDIF. ENDFORM. " INPUT_VARIANT *&---------------------------------------------------------------------* *& Form build_layout *&---------------------------------------------------------------------* * ALV-Layout *----------------------------------------------------------------------* FORM BUILD_LAYOUT . V_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. " shrink columns V_LAYOUT-ZEBRA = 'X'. " odd rows colored ENDFORM. " build_layout *&---------------------------------------------------------------------* *& Form build_field_cat *&---------------------------------------------------------------------* * ALV-Field Catalog *----------------------------------------------------------------------* FORM BUILD_FIELD_CAT . DATA : WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 1. WA_FIELDCAT-FIELDNAME = 'VENDOR_NR'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Vendor Number'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 2. WA_FIELDCAT-FIELDNAME = 'VENDOR_SITE'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Vendor Site Code'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 3. WA_FIELDCAT-FIELDNAME = 'VBELN'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Invoice Number'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 4. WA_FIELDCAT-FIELDNAME = 'ERDAT'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Invoice Date'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 5. WA_FIELDCAT-FIELDNAME = 'NETWR'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Invoice Amount'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 6. WA_FIELDCAT-FIELDNAME = 'ARKTX'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Description'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 7. WA_FIELDCAT-FIELDNAME = 'DEL_LOC'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Deliver to Loc Code'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 8. WA_FIELDCAT-FIELDNAME = 'ITEM_NUM'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Item Number'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 9 . WA_FIELDCAT-FIELDNAME = 'LINE_DESC'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Line Description'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 10 . WA_FIELDCAT-FIELDNAME = 'KWERT'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Line Amount'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 11. WA_FIELDCAT-FIELDNAME = 'FKIMG'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Qty Billed'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 12 . WA_FIELDCAT-FIELDNAME = 'KBETR'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Bill Unit Price'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 13 . WA_FIELDCAT-FIELDNAME = 'STAT_AMT'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Stat Amount'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 14 . WA_FIELDCAT-FIELDNAME = 'FRGHT_IND'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Freight Ind'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 15 . WA_FIELDCAT-FIELDNAME = 'REF_TYPE'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Ref Type'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 16 . WA_FIELDCAT-FIELDNAME = 'SERNR'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Product Number'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 17 . WA_FIELDCAT-FIELDNAME = 'CLNT_NUM'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Client Number'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 18 . WA_FIELDCAT-FIELDNAME = 'CHARGE_CODE'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Charge to Loc Code'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 19 . WA_FIELDCAT-FIELDNAME = 'PROJ_NUM'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Proj No'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 20 . WA_FIELDCAT-FIELDNAME = 'TASK_NUM'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Task No'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 21 . WA_FIELDCAT-FIELDNAME = 'EXP_TYPE'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Expend Type'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 22 . WA_FIELDCAT-FIELDNAME = 'EXP_DATE'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Expend Item Dt'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 23 . WA_FIELDCAT-FIELDNAME = 'EXP_ORG'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Expend Org Id'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 24 . WA_FIELDCAT-FIELDNAME = 'EXP_ACC'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Expend_acc_contx'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 25 . WA_FIELDCAT-FIELDNAME = 'ACTIVITY'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Activity'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 26 . WA_FIELDCAT-FIELDNAME = 'SUB_ACTIVITY'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Sub Activity'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 27 . WA_FIELDCAT-FIELDNAME = 'ZUONR'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'PO Number'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 28 . WA_FIELDCAT-FIELDNAME = 'POSEX'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Line Number'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 29 . WA_FIELDCAT-FIELDNAME = 'TRK_NUM'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Tracking Number'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 30 . WA_FIELDCAT-FIELDNAME = 'WARR_EXP'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Warr Exp Date'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 31 . WA_FIELDCAT-FIELDNAME = 'MTHD_SHIP'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Method of Shipment'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 32 . WA_FIELDCAT-FIELDNAME = 'SH_ERDAT'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Shipment Date'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 33 . WA_FIELDCAT-FIELDNAME = 'MATNR'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Manufacturer Number'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 34 . WA_FIELDCAT-FIELDNAME = 'MFGR_NAME'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Manufacturer Name'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 35 . WA_FIELDCAT-FIELDNAME = 'MODEL_BOX'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Model Num Box'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 36 . WA_FIELDCAT-FIELDNAME = 'MODEL_BAR'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Model Num Barcode'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 37 . WA_FIELDCAT-FIELDNAME = 'PART_BOX'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Part Num Box'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 38 . WA_FIELDCAT-FIELDNAME = 'PART_BAR'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'Part num barcode'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 39 . WA_FIELDCAT-FIELDNAME = 'SERIAL_BOX'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'SNo_Box'. APPEND WA_FIELDCAT TO IT_FIELDCAT. CLEAR WA_FIELDCAT. WA_FIELDCAT-COL_POS = 40 . WA_FIELDCAT-FIELDNAME = 'SERIAL_BAR'. WA_FIELDCAT-TABNAME = T_DWN. WA_FIELDCAT-SELTEXT_L = 'SNo Barcode'. APPEND WA_FIELDCAT TO IT_FIELDCAT. ENDFORM. " build_field_cat *&---------------------------------------------------------------------* *& Form display_output *&---------------------------------------------------------------------* * ALV-Display *----------------------------------------------------------------------* FORM DISPLAY_OUTPUT . *To remove the header line V_VARIANT-VARIANT = P_LAYOUT. V_VARIANT-REPORT = SY-REPID. IF P_LAYOUT = SPACE. CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET' EXPORTING I_SAVE = 'A' CHANGING CS_VARIANT = V_VARIANT EXCEPTIONS WRONG_INPUT = 1 NOT_FOUND = 2 PROGRAM_ERROR = 3 OTHERS = 4. ENDIF. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = SY-REPID I_GRID_TITLE = 'UPS Invoice Report' I_CALLBACK_USER_COMMAND = V_UCOMM IS_LAYOUT = V_LAYOUT IT_FIELDCAT = IT_FIELDCAT I_DEFAULT = 'X' I_SAVE = 'A' IS_VARIANT = V_VARIANT TABLES T_OUTTAB = T_DWN 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. " display_output *&---------------------------------------------------------------------* *& Form DOWNLOAD_FILE *&---------------------------------------------------------------------* * File Download *----------------------------------------------------------------------* FORM DOWNLOAD_FILE USING P_FORMAT TYPE RLGRAP-FILETYPE. DATA : L_FILE TYPE STRING, L_FTYPE TYPE CHAR10. L_FILE = P_FILEN. L_FTYPE = P_FORMAT. *Insert the Text header for the field Names PERFORM WRITE_HEADER_DATA. *GUI Download CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING FILETYPE = 'WK1' FILENAME = L_FILE APPEND = 'X' WRITE_FIELD_SEPARATOR = 'X' TABLES DATA_TAB = T_DWN EXCEPTIONS FILE_WRITE_ERROR = 1 NO_BATCH = 2 GUI_REFUSE_FILETRANSFER = 3 INVALID_TYPE = 4 NO_AUTHORITY = 5 UNKNOWN_ERROR = 6 HEADER_NOT_ALLOWED = 7 SEPARATOR_NOT_ALLOWED = 8 FILESIZE_NOT_ALLOWED = 9 HEADER_TOO_LONG = 10 DP_ERROR_CREATE = 11 DP_ERROR_SEND = 12 DP_ERROR_WRITE = 13 UNKNOWN_DP_ERROR = 14 ACCESS_DENIED = 15 DP_OUT_OF_MEMORY = 16 DISK_FULL = 17 DP_TIMEOUT = 18 FILE_NOT_FOUND = 19 DATAPROVIDER_EXCEPTION = 20 CONTROL_FLUSH_ERROR = 21 OTHERS = 22. 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. " DOWNLOAD_FILE *&---------------------------------------------------------------------* *& Form build_xls_data_table *&---------------------------------------------------------------------* * Building XLS Table for the Mail Attachment *----------------------------------------------------------------------* FORM BUILD_XLS_DATA_TABLE . DATA: LD_STORE(50) TYPE C. "Leading zeros DATA : L_STRING(700) TYPE C. CONSTANTS: CON_TAB TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB, CON_CRET TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF. CONCATENATE 'Vendor number' 'Vendor site code' 'Invoice number' 'Invoice date' 'Invoice amount' 'Description' 'Deliver to location code' 'Item number' 'Line description' 'Line amount' 'Quantity billed' 'Bill unit price' 'Stat amount' 'Freight indicator' 'Reference type' 'Product number' 'Client number' 'Charge to location code' 'Project number' 'Task number' 'Expenditure type' 'Expenditure item date' 'Expenditure organization id' 'Expenditure accntg context' 'Activity' 'Sub activity' 'PO number' 'Line number' 'Tracking number' 'Warranty expiration date' 'Method of shipment' 'Shipment date' 'Manufacturer number' 'Manufacturer name' 'Model num box' 'Model num barcode' 'Part num box' 'Part num barcode' 'Serial num box' 'Serial num barcode' INTO L_STRING SEPARATED BY CON_TAB. WHILE L_STRING <> SPACE. CALL FUNCTION 'TEXT_SPLIT' EXPORTING LENGTH = 255 TEXT = L_STRING IMPORTING LINE = IT_ATTACH REST = L_STRING. IF L_STRING = SPACE. CONCATENATE IT_ATTACH CON_CRET INTO IT_ATTACH. APPEND IT_ATTACH. CLEAR IT_ATTACH. ELSE. APPEND IT_ATTACH. CLEAR IT_ATTACH. ENDIF. ENDWHILE.
LOOP AT T_DWN. CONCATENATE T_DWN-VENDOR_NR T_DWN-VENDOR_SITE T_DWN-VBELN T_DWN-ERDAT T_DWN-NETWR T_DWN-ARKTX T_DWN-DEL_LOC T_DWN-ITEM_NUM T_DWN-LINE_DESC T_DWN-KWERT T_DWN-FKIMG T_DWN-KBETR T_DWN-STAT_AMT T_DWN-FRGHT_IND T_DWN-REF_TYPE T_DWN-SERNR T_DWN-CLNT_NUM T_DWN-CHARGE_CODE T_DWN-PROJ_NUM T_DWN-TASK_NUM T_DWN-EXP_TYPE T_DWN-EXP_DATE T_DWN-EXP_ORG T_DWN-EXP_ACC T_DWN-ACTIVITY T_DWN-SUB_ACTIVITY T_DWN-ZUONR T_DWN-POSEX T_DWN-TRK_NUM T_DWN-WARR_EXP T_DWN-MTHD_SHIP T_DWN-SH_ERDAT T_DWN-MATNR T_DWN-MFGR_NAME T_DWN-MODEL_BOX T_DWN-MODEL_BAR T_DWN-PART_BOX T_DWN-PART_BAR T_DWN-SERIAL_BOX T_DWN-SERIAL_BAR INTO L_STRING SEPARATED BY CON_TAB. WHILE L_STRING <> SPACE. CALL FUNCTION 'TEXT_SPLIT' EXPORTING LENGTH = 255 TEXT = L_STRING IMPORTING LINE = IT_ATTACH REST = L_STRING. IF L_STRING = SPACE. CONCATENATE IT_ATTACH CON_CRET INTO IT_ATTACH. APPEND IT_ATTACH. CLEAR IT_ATTACH. ELSE. APPEND IT_ATTACH. CLEAR IT_ATTACH. ENDIF. ENDWHILE. ENDLOOP. ENDFORM. " build_xls_data_table *&---------------------------------------------------------------------* *& Form populate_email_message_body *&---------------------------------------------------------------------* * Email Message Body *----------------------------------------------------------------------* FORM POPULATE_EMAIL_MESSAGE_BODY . REFRESH IT_MESSAGE. IT_MESSAGE = 'UPS Invoice Report'. APPEND IT_MESSAGE. ENDFORM. " populate_email_message_body *&---------------------------------------------------------------------* *& Form SEND_FILE_AS_EMAIL_ATTACHMENT *&---------------------------------------------------------------------* * Send Email *----------------------------------------------------------------------* FORM SEND_FILE_AS_EMAIL_ATTACHMENT TABLES PIT_MESSAGE PIT_ATTACH USING P_ADDRS P_MTITLE P_FORMAT P_FILENAME P_ATTDESCRIPTION P_SENDER_ADDRESS P_SENDER_ADDRES_TYPE CHANGING P_ERROR P_RECIEVER. DATA: LD_ERROR TYPE SY-SUBRC, LD_RECIEVER TYPE SY-SUBRC, LD_MTITLE LIKE SODOCCHGI1-OBJ_DESCR, LD_EMAIL LIKE SOMLRECI1-RECEIVER, LD_FORMAT TYPE SO_OBJ_TP , LD_ATTDESCRIPTION TYPE SO_OBJ_NAM , LD_ATTFILENAME TYPE SO_OBJ_DES , LD_SENDER_ADDRESS LIKE SOEXTRECI1-RECEIVER, LD_SENDER_ADDRESS_TYPE LIKE SOEXTRECI1-ADR_TYP, LD_RECEIVER LIKE SY-SUBRC. LD_EMAIL = P_ADDRS. LD_MTITLE = P_MTITLE. LD_FORMAT = P_FORMAT. * LD_ATTDESCRIPTION = P_ATTDESCRIPTION. LD_ATTDESCRIPTION = 'UPSVDRPO'. * LD_ATTFILENAME = P_FILENAME. LD_ATTFILENAME = 'UPSVDRPO.XLS'. LD_SENDER_ADDRESS = P_SENDER_ADDRESS. LD_SENDER_ADDRESS_TYPE = P_SENDER_ADDRES_TYPE. * Fill the document data. W_DOC_DATA-DOC_SIZE = 1. * Populate the subject/generic message attributes W_DOC_DATA-OBJ_LANGU = SY-LANGU. W_DOC_DATA-OBJ_NAME = 'SAPRPT'. W_DOC_DATA-OBJ_DESCR = LD_MTITLE . W_DOC_DATA-SENSITIVTY = 'F'. * Fill the document data and get size of attachment CLEAR W_DOC_DATA. READ TABLE IT_ATTACH INDEX W_CNT. W_DOC_DATA-DOC_SIZE = ( W_CNT - 1 ) * 255 + STRLEN( IT_ATTACH ). W_DOC_DATA-OBJ_LANGU = SY-LANGU. W_DOC_DATA-OBJ_NAME = 'SAPRPT'. W_DOC_DATA-OBJ_DESCR = LD_MTITLE. W_DOC_DATA-SENSITIVTY = 'F'. CLEAR T_ATTACHMENT. REFRESH T_ATTACHMENT. T_ATTACHMENT[] = PIT_ATTACH[]. * Describe the body of the message CLEAR T_PACKING_LIST. REFRESH T_PACKING_LIST. T_PACKING_LIST-TRANSF_BIN = SPACE. T_PACKING_LIST-HEAD_START = 1. T_PACKING_LIST-HEAD_NUM = 0. T_PACKING_LIST-BODY_START = 1. DESCRIBE TABLE IT_MESSAGE LINES T_PACKING_LIST-BODY_NUM. T_PACKING_LIST-DOC_TYPE = 'RAW'. APPEND T_PACKING_LIST. * Create attachment notification T_PACKING_LIST-TRANSF_BIN = 'X'. T_PACKING_LIST-HEAD_START = 1. T_PACKING_LIST-HEAD_NUM = 1. T_PACKING_LIST-BODY_START = 1. DESCRIBE TABLE T_ATTACHMENT LINES T_PACKING_LIST-BODY_NUM. T_PACKING_LIST-DOC_TYPE = LD_FORMAT. T_PACKING_LIST-OBJ_DESCR = LD_ATTDESCRIPTION. T_PACKING_LIST-OBJ_NAME = LD_ATTFILENAME. T_PACKING_LIST-DOC_SIZE = T_PACKING_LIST-BODY_NUM * 255. APPEND T_PACKING_LIST. * Add the recipients email address CLEAR T_RECEIVERS. REFRESH T_RECEIVERS. T_RECEIVERS-RECEIVER = LD_EMAIL. T_RECEIVERS-REC_TYPE = 'U'. T_RECEIVERS-COM_TYPE = 'INT'. T_RECEIVERS-NOTIF_DEL = 'X'. T_RECEIVERS-NOTIF_NDEL = 'X'. APPEND T_RECEIVERS. CALL FUNCTION 'SO_DOCUMENT_SEND_API1' EXPORTING DOCUMENT_DATA = W_DOC_DATA PUT_IN_OUTBOX = 'X' SENDER_ADDRESS = LD_SENDER_ADDRESS SENDER_ADDRESS_TYPE = LD_SENDER_ADDRESS_TYPE COMMIT_WORK = 'X' IMPORTING SENT_TO_ALL = W_SENT_ALL TABLES PACKING_LIST = T_PACKING_LIST CONTENTS_BIN = T_ATTACHMENT CONTENTS_TXT = IT_MESSAGE RECEIVERS = T_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. * Populate zerror return code LD_ERROR = SY-SUBRC. * Populate zreceiver return code LOOP AT T_RECEIVERS. LD_RECEIVER = T_RECEIVERS-RETRN_CODE. ENDLOOP. ENDFORM. "send_file_as_email_attachment *&---------------------------------------------------------------------* *& Form initiate_mail_execute_program *&---------------------------------------------------------------------* * To Execute the Mail program *----------------------------------------------------------------------* FORM INITIATE_MAIL_EXECUTE_PROGRAM . WAIT UP TO 4 SECONDS. SUBMIT RSCONN01 WITH MODE = 'INT' WITH OUTPUT = 'X' AND RETURN. ENDFORM. " initiate_mail_execute_program |