ERPGenie.COM -> SAP Technical -> ABAP -> Tips and Tricks -> SAP Sample ABAP Code -> Sending an Excel file 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 Contributed by Pavan Rachamalla |