Enterprise Resource Planning Portal

 

Advertise | Founder BLOG

ERPGenie.COM

THE ultimate ERP website

 

Forums | Vote for us |

Google    Other Search Options

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


Contact Us | Polls | Add URL | Contribute | About | Privacy | Terms | Feedback | Help!

Message Board | Discussion Forum | BLOG | Consultants: Post your resume | Companies: Advertise on ERPGenie.COM | Post Job
Financials Consultant | Consultant Review | Gallia Consulting | Supply Chain Project | SAP Financials Forum
Genie Press | WorkflowGenie | ESAGenie | ERPTopSites | ABAP Tips and Tricks