2006 May 18 6:10 PM
Hi,
I am trying to send one attachment from sap to my e-mail. thats comming as .Txt but i need in .XLS format. if i didn't select any delimeter and if i select any delimeter that delimeter occupying one more cell in XL sheet and corrupting the format. can anyone help me in this.
Thanks,
Yogesh
Hi Renjith,
Here is the code
REPORT ZZEMAILREPORT MESSAGE-ID S1
NO STANDARD PAGE HEADING
LINE-SIZE 100
LINE-COUNT 65(0).
************************************************************************
Source Code Documentation Section *
************************************************************************
Program Name : ZZEMAILREPORT
Source Code Type : Report
Date : 10/31/2001
Programmer : Prashant Tyagi
Description : This report will allow the running of any SAP *
program and then send the output as an Email
attachment.
Tr. Request No : DEVK954522
======================================================================
Modification Log : *
------------------ *
Date : 03/01/2002 *
Requested By : Steven P Willment *
Developer : Prashant Tyagi *
Changes Ref By : CNXT-01 *
Description : If no program name is entered then just the *
subject line and text body will be sent as an *
Email *
Transport No. : DEVK956294 *
----
Date : 03/21/2002 *
Requested By : Steven P Willment *
Developer : Prashant Tyagi *
Changes Ref By : CNXT-02 *
Description : Do not check for the program name in TRDIR if the *
user does not enter a value in the selection *
screen *
Transport No. : DEVK956770 *
----
Date : 06/06/2003 *
Requested By : Steven P Willment *
Developer : Ramandeep Singh *
Changes Ref By : CNXT-03 *
Description : Send as copy if "SEND_COPY" flag is set in *
ZEMAILADDR *
----
Date : 11/14/2005 *
Requested By : Tom Hutton *
Developer : Ramandeep Singh *
Changes Ref By : SKY-01 *
Description : Option to delimit a report. Program would delimit *
the report into different columns so that programs*
like Excel can read it *
----
Date : 04/24/2006 *
Requested By : Olga Cruz / Daniel *
Developer : Himanshu Aggarwal *
Changes Ref By : SKY-02 *
Description : Activate file delimited options for report. *
Transport No. : DEVK985197 *
************************************************************************
************************************************************************
T A B L E S *
************************************************************************
TABLES : RLGRAP, ZEMAILADDR, TRDIR, VARID.
************************************************************************
I N T E R N A L T A B L E S *
************************************************************************
DATA: LISTOBJECT LIKE ABAPLIST OCCURS 0 WITH HEADER LINE.
DATA COMPRESSED_LIST LIKE SOLI OCCURS 0.
DATA: OBJPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
DATA: OBJHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA: OBJBIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.
DATA: OBJTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: RECLIST LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
Data for the status output after sending
DATA: USER_ADDRESS LIKE SOUSRADRI1 OCCURS 1 WITH HEADER LINE.
************************************************************************
W O R K - F I E L D S *
************************************************************************
DATA: RECIPIENT_INT LIKE SADRUD.
DATA: EMAIL_ADDR LIKE ZEMAILADDR-EMAIL_ADDR.
DATA G_DOC_TYPE LIKE SOODK-OBJTP VALUE 'ALI'.
DATA: DOC_CHNG LIKE SODOCCHGI1.
DATA: TAB_LINES LIKE SY-TABIX.
DATA: SENT_TO_ALL LIKE SONV-FLAG.
DATA : W-LINE TYPE I.
DATA: MESSAGE_VAR(200).
DATA: VAR(50).
DATA: SEP VALUE '-'.
************************************************************************
S E L E C T - O P T I O N S / P A R A M E T E R S *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK STATUS WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN SKIP.
PARAMETERS : P_SEND AS CHECKBOX.
SELECTION-SCREEN SKIP.
PARAMETERS : P_SUBJ(50) " like RLGRAP-FILENAME DEFAULT
DEFAULT 'Report sent from SAP'.
PARAMETERS : P_TEXT LIKE RLGRAP-FILENAME,
P_TEXT1 LIKE RLGRAP-FILENAME,
P_TEXT2 LIKE RLGRAP-FILENAME.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK STATUS.
SELECTION-SCREEN BEGIN OF BLOCK SENDTO WITH FRAME TITLE TEXT-013.
SELECT-OPTIONS: S_EMAIL FOR RECIPIENT_INT-ADDRESS NO INTERVALS
LOWER CASE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(45) TEXT-002 FOR FIELD P_TABLE.
PARAMETERS : P_TABLE AS CHECKBOX.
SELECTION-SCREEN END OF LINE.
PARAMETERS : P_KEY LIKE ZEMAILADDR-ADDR_KEY.
SELECTION-SCREEN END OF BLOCK SENDTO.
SELECTION-SCREEN BEGIN OF BLOCK ABC WITH FRAME TITLE TEXT-004.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 10.
PARAMETERS : P_PROG LIKE RS38M-PROGRAMM." OBLIGATORY. "CNXT-01
SELECTION-SCREEN COMMENT 1(7) TEXT-005 FOR FIELD P_PROG.
SELECTION-SCREEN POSITION 70.
PARAMETERS : P_VAR LIKE RS38M-SELSET.
SELECTION-SCREEN COMMENT 63(7) TEXT-006 FOR FIELD P_VAR.
SELECTION-SCREEN END OF LINE.
*BEGIN OF SKY-01
SELECTION-SCREEN SKIP.
SELECTION-SCREEN COMMENT /1(72) TEXT-C04 FOR FIELD P_SEP.
SELECTION-SCREEN COMMENT /1(72) TEXT-C02 FOR FIELD P_SEP.
SELECTION-SCREEN SKIP.
PARAMETERS: P_NO RADIOBUTTON GROUP G1,
P_TAB RADIOBUTTON GROUP G1,
P_COMMA RADIOBUTTON GROUP G1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10) TEXT-C01 FOR FIELD P_OTHER.
SELECTION-SCREEN POSITION POS_LOW.
PARAMETERS: P_OTHER RADIOBUTTON GROUP G1.
SELECTION-SCREEN POSITION 40.
PARAMETERS: P_SEP TYPE X.
SELECTION-SCREEN COMMENT (11) TEXT-C03 FOR FIELD P_SEP.
SELECTION-SCREEN END OF LINE.
PARAMETERS: P_REM AS CHECKBOX.
PARAMETERS: P_NAME LIKE VAR.
*END OF SKY-01
SELECTION-SCREEN END OF BLOCK ABC.
************************************************************************
A T S E L E C T I O N - S C R E E N *
************************************************************************
AT SELECTION-SCREEN.
SELECT COUNT(*) INTO W-LINE FROM ZEMAILADDR
WHERE ADDR_KEY = P_KEY.
IF NOT P_TABLE IS INITIAL AND
NOT S_EMAIL IS INITIAL AND
NOT P_KEY IS INITIAL.
MESSAGE W000(0K) WITH TEXT-010.
ENDIF.
IF NOT P_TABLE IS INITIAL AND W-LINE EQ 0.
MESSAGE E000(0K) WITH TEXT-007.
ENDIF.
IF P_TABLE IS INITIAL AND S_EMAIL IS INITIAL.
MESSAGE E000(0K) WITH TEXT-011.
ENDIF.
IF NOT P_PROG IS INITIAL. "CNXT-02
SELECT SINGLE * FROM TRDIR WHERE NAME = P_PROG.
IF SY-SUBRC <> 0.
MESSAGE E000(0K) WITH TEXT-015.
ENDIF.
ENDIF. "CNXT-02
IF NOT P_VAR IS INITIAL.
SELECT SINGLE * FROM VARID WHERE REPORT = P_PROG AND VARIANT = P_VAR.
IF SY-SUBRC <> 0.
MESSAGE E000(0K) WITH TEXT-014.
ENDIF.
ENDIF.
*BEGIN OF SKY-01
CASE 'X'.
WHEN P_NO.
CLEAR P_SEP.
WHEN P_TAB.
P_SEP = '09'.
WHEN P_COMMA.
P_SEP = '2C'.
ENDCASE.
*END OF SKY-01
----
----
Report Headers *
----
Top of page event to create report headers and column headings
*CNXT-01 {
TOP-OF-PAGE.
PERFORM WRITE_HEADER.
*CNXT-01 }
***********************************************************************
S T A R T - O F - S E L E C T I O N *
************************************************************************
START-OF-SELECTION.
IF P_SEND IS INITIAL.
WRITE : / TEXT-008.
PERFORM PRINT_RECIPIENT_LIST.
WRITE : / TEXT-009.
ENDIF.
SKIP 1.
*BEGIN OF SKY-01
IF NOT P_NAME IS INITIAL AND NOT P_SEP IS INITIAL.
VAR = P_NAME.
ELSE.
*END OF SKY-01
CONCATENATE P_PROG P_VAR INTO VAR SEPARATED BY SEP.
ENDIF. "SKY-01
*CNXT-01 {
IF NOT P_PROG IS INITIAL.
IF NOT P_VAR IS INITIAL.
WRITE: /5 'REPORT : ', 18 P_PROG, 35 'USING', 43 'VARIANT : '
,55 P_VAR.
ELSE.
WRITE: /5 'REPORT : ', 18 P_PROG.
ENDIF.
SKIP 3.
PERFORM SEND_EMAIL.
ENDIF.
IF P_PROG IS INITIAL AND ( NOT S_EMAIL IS INITIAL
OR NOT P_TEXT IS INITIAL
OR NOT P_TEXT1 IS INITIAL
OR NOT P_TEXT2 IS INITIAL ).
PERFORM NOT_SEND_REPORT.
ENDIF.
*CNXT-01 }
&----
*& Form SEND_EMAIL
&----
text
----
FORM SEND_EMAIL.
DATA: ASCITAB(255) OCCURS 0 WITH HEADER LINE. "SKY-01
SUBMIT (P_PROG) USING SELECTION-SET P_VAR EXPORTING LIST
TO MEMORY AND
RETURN.
CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
LISTOBJECT = LISTOBJECT
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
WRITE 'Error in list_from_memory.'.
ENDIF.
DESCRIBE TABLE LISTOBJECT LINES TAB_LINES.
IF P_SEND IS INITIAL OR TAB_LINES EQ 0.
EXIT.
ENDIF.
CALL FUNCTION 'LIST_FREE_MEMORY'
TABLES
LISTOBJECT = LISTOBJECT
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
WRITE 'Error in list_free_memory.'.
ENDIF.
*BEGIN OF SKY-01
IF NOT P_SEP IS INITIAL.
CALL FUNCTION 'LIST_TO_ASCI'
TABLES
LISTASCI = ASCITAB
LISTOBJECT = LISTOBJECT.
PERFORM REFORMAT_DATA TABLES ASCITAB OBJBIN USING P_SEP P_REM .
ELSE.
*END OF SKY-01
CALL FUNCTION 'TABLE_COMPRESS'
TABLES
IN = LISTOBJECT
OUT = COMPRESSED_LIST
EXCEPTIONS
COMPRESS_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
WRITE: 'Error in table_compress.'.
ENDIF.
*****************************************************************
MOVE COMPRESSED_LIST[] TO OBJBIN[].
ENDIF. "SKY-01
DOC_CHNG-OBJ_NAME = 'List'.
DOC_CHNG-OBJ_DESCR = P_SUBJ.
OBJTXT = P_TEXT.
APPEND OBJTXT.
OBJTXT = P_TEXT1.
APPEND OBJTXT.
OBJTXT = P_TEXT2.
APPEND OBJTXT.
DESCRIBE TABLE OBJTXT LINES TAB_LINES.
READ TABLE OBJTXT INDEX TAB_LINES.
DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ).
CLEAR OBJPACK-TRANSF_BIN.
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 0.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
OBJPACK-DOC_TYPE = 'RAW'.
APPEND OBJPACK.
DESCRIBE TABLE OBJBIN LINES TAB_LINES.
OBJPACK-TRANSF_BIN = 'X'.
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 0.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
*BEGIN OF SKY-01
DATA: FILE(50), XTN(3).
IF NOT P_SEP IS INITIAL.
SPLIT P_NAME AT '.' INTO FILE XTN.
IF NOT XTN IS INITIAL.
TRANSLATE XTN TO UPPER CASE.
OBJPACK-DOC_TYPE = XTN.
ELSE.
OBJPACK-DOC_TYPE = 'TXT'.
ENDIF.
ELSE.
*END OF SKY-01
OBJPACK-DOC_TYPE = G_DOC_TYPE.
ENDIF. "SKY-01
OBJPACK-OBJ_NAME = 'Attachment'.
OBJPACK-OBJ_DESCR = VAR.
OBJPACK-DOC_SIZE = TAB_LINES * 255.
APPEND OBJPACK.
IF P_SEND = 'X' AND P_TABLE IS INITIAL AND NOT S_EMAIL IS INITIAL.
LOOP AT S_EMAIL.
RECIPIENT_INT-ADDRESS = S_EMAIL-LOW.
RECLIST-RECEIVER = RECIPIENT_INT.
RECLIST-REC_TYPE = 'U'.
APPEND RECLIST.
CLEAR RECLIST.
ENDLOOP.
ELSEIF P_TABLE = 'X'.
SELECT * FROM ZEMAILADDR WHERE ADDR_KEY = P_KEY.
RECIPIENT_INT-ADDRESS = ZEMAILADDR-EMAIL_ADDR .
RECLIST-RECEIVER = RECIPIENT_INT.
RECLIST-REC_TYPE = 'U'.
RECLIST-COPY = ZEMAILADDR-SEND_COPY. "CNXT-03
APPEND RECLIST.
CLEAR RECLIST.
ENDSELECT.
ENDIF.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = DOC_CHNG
PUT_IN_OUTBOX = 'X'
IMPORTING
SENT_TO_ALL = SENT_TO_ALL
TABLES
PACKING_LIST = OBJPACK
OBJECT_HEADER = OBJHEAD
CONTENTS_BIN = OBJBIN
CONTENTS_TXT = OBJTXT
RECEIVERS = RECLIST
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
OPERATION_NO_AUTHORIZATION = 4
OTHERS = 99.
CASE SY-SUBRC.
WHEN 0.
WRITE: / 'Result of the sendprocess:'.
IF NOT SENT_TO_ALL IS INITIAL.
WRITE: / 'Successfully sent to all recipients.'.
PERFORM PRINT_RECIPIENT_LIST.
ELSE.
LOOP AT RECLIST WHERE RETRN_CODE NE 0.
REFRESH USER_ADDRESS.
CLEAR USER_ADDRESS.
USER_ADDRESS-USERID = RECLIST-REC_ID.
APPEND USER_ADDRESS.
CALL FUNCTION 'SO_USER_ADDRESS_READ_API1'
TABLES
USER_ADDRESS = USER_ADDRESS
EXCEPTIONS
ENQUEUE_ERRROR = 1
PARAMETER_ERROR = 2
X_ERROR = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
USER_ADDRESS-LONG_NAME = RECLIST-REC_ID.
ENDIF.
WRITE: / 'Could not send to: '.
WRITE: USER_ADDRESS-LONG_NAME(48).
ENDLOOP.
LOOP AT RECLIST WHERE RETRN_CODE EQ 0.
ENDLOOP.
IF SY-SUBRC = 0.
WRITE: / 'Successfully sent to all other recipients.'.
PERFORM PRINT_RECIPIENT_LIST.
ENDIF.
ENDIF.
WHEN 1.
WRITE: / 'No permission to sent to the specified ',
'amount of recipients !'.
WHEN 2.
WRITE: / 'Document could not be sent to any recipient !'.
WHEN 4.
WRITE: / 'No permission to send !'.
WHEN OTHERS.
WRITE: / 'Error while sending !'.
ENDCASE.
ENDFORM. " SEND_EMAIL
&----
*& Form PRINT_RECIPIENT_LIST
&----
text
----
FORM PRINT_RECIPIENT_LIST.
IF NOT S_EMAIL IS INITIAL.
LOOP AT S_EMAIL.
WRITE : / S_EMAIL-LOW.
ENDLOOP.
ELSEIF P_TABLE = 'X'.
SELECT * FROM ZEMAILADDR WHERE ADDR_KEY = P_KEY.
WRITE : / ZEMAILADDR-EMAIL_ADDR .
*BEGIN OF CNXT-03
IF ZEMAILADDR-SEND_COPY = 'X'.
WRITE: ', As Copy'.
ENDIF.
*END OF CNXT-03
ENDSELECT.
ENDIF.
ENDFORM. " PRINT_RECIPIENT_LIST
&----
*& Form NOT_SEND_REPORT CNXT-01
&----
*
----
FORM NOT_SEND_REPORT.
IF P_SEND IS INITIAL.
EXIT.
ENDIF.
DOC_CHNG-OBJ_NAME = 'List'.
DOC_CHNG-OBJ_DESCR = P_SUBJ.
OBJTXT = P_TEXT.
APPEND OBJTXT.
OBJTXT = P_TEXT1.
APPEND OBJTXT.
OBJTXT = P_TEXT2.
APPEND OBJTXT.
DESCRIBE TABLE OBJTXT LINES TAB_LINES.
READ TABLE OBJTXT INDEX TAB_LINES.
DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ).
CLEAR OBJPACK-TRANSF_BIN.
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 0.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
OBJPACK-DOC_TYPE = 'RAW'.
APPEND OBJPACK.
IF P_SEND = 'X' AND P_TABLE IS INITIAL AND NOT S_EMAIL IS INITIAL.
LOOP AT S_EMAIL.
RECIPIENT_INT-ADDRESS = S_EMAIL-LOW.
RECLIST-RECEIVER = RECIPIENT_INT.
RECLIST-REC_TYPE = 'U'.
APPEND RECLIST.
CLEAR RECLIST.
ENDLOOP.
ELSEIF P_TABLE = 'X'.
SELECT * FROM ZEMAILADDR WHERE ADDR_KEY = P_KEY.
RECIPIENT_INT-ADDRESS = ZEMAILADDR-EMAIL_ADDR .
RECLIST-RECEIVER = RECIPIENT_INT.
RECLIST-REC_TYPE = 'U'.
RECLIST-COPY = ZEMAILADDR-SEND_COPY. "CNXT-03
APPEND RECLIST.
CLEAR RECLIST.
ENDSELECT.
ENDIF.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = DOC_CHNG
PUT_IN_OUTBOX = 'X'
IMPORTING
SENT_TO_ALL = SENT_TO_ALL
TABLES
PACKING_LIST = OBJPACK
OBJECT_HEADER = OBJHEAD
CONTENTS_BIN = OBJBIN
CONTENTS_TXT = OBJTXT
RECEIVERS = RECLIST
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
OPERATION_NO_AUTHORIZATION = 4
OTHERS = 99.
CASE SY-SUBRC.
WHEN 0.
WRITE: / 'Result of the sendprocess:'.
IF NOT SENT_TO_ALL IS INITIAL.
WRITE: / 'Successfully sent to all recipients.'.
PERFORM PRINT_RECIPIENT_LIST.
ELSE.
LOOP AT RECLIST WHERE RETRN_CODE NE 0.
REFRESH USER_ADDRESS.
CLEAR USER_ADDRESS.
USER_ADDRESS-USERID = RECLIST-REC_ID.
APPEND USER_ADDRESS.
CALL FUNCTION 'SO_USER_ADDRESS_READ_API1'
TABLES
USER_ADDRESS = USER_ADDRESS
EXCEPTIONS
ENQUEUE_ERRROR = 1
PARAMETER_ERROR = 2
X_ERROR = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
USER_ADDRESS-LONG_NAME = RECLIST-REC_ID.
ENDIF.
WRITE: / 'Could not send to: '.
WRITE: USER_ADDRESS-LONG_NAME(48).
ENDLOOP.
LOOP AT RECLIST WHERE RETRN_CODE EQ 0.
ENDLOOP.
IF SY-SUBRC = 0.
WRITE: / 'Successfully sent to all other recipients.'.
PERFORM PRINT_RECIPIENT_LIST.
ENDIF.
ENDIF.
WHEN 1.
WRITE: / 'No permission to sent to the specified ',
'amount of recipients !'.
WHEN 2.
WRITE: / 'Document could not be sent to any recipient !'.
WHEN 4.
WRITE: / 'No permission to send !'.
WHEN OTHERS.
WRITE: / 'Error while sending !'.
ENDCASE.
ENDFORM. "NOT_SEND_REPORT
&----
*& Form WRITE_HEADER
&----
Report heading. Top-of-page.
----
FORM WRITE_HEADER.
DATA : LINE01(100) TYPE C,
LINE02 LIKE LINE01,
LINE03 LIKE LINE01,
LINE04 LIKE LINE01.
function call to create report headers
CALL FUNCTION 'Z_REPORT_HEADERS'
EXPORTING
COLUMNS = 100
PERIOD = ' '
RPT_NAME = 'ZZEMAILREPORT'
RPT_TITLE1 = SY-TITLE
RPT_TITLE3 = ' '
IMPORTING
TEXT01 = LINE01
TEXT02 = LINE02
TEXT03 = LINE03
TEXT04 = LINE04.
output report header lines
WRITE: / LINE01, LINE02, LINE03, LINE04.
SKIP.
ULINE.
SKIP .
ENDFORM. " WRITE_HEADER
----
FORM REFORMAT_DATA *
----
........ *
----
--> ASCITAB *
--> OBJBIN *
--> P_SEP *
--> P_REM *
----
FORM REFORMAT_DATA TABLES ASCITAB
OBJBIN STRUCTURE OBJBIN
USING P_SEP P_REM .
DATA: SEP_INDEX LIKE SY-TABIX.
DATA: ITAB(1000) OCCURS 0 WITH HEADER LINE.
DATA: STR LIKE ITAB.
DATA X TYPE I.
DATA COUNT TYPE I.
DATA CNT TYPE I. "SKY-02
DATA LINES_PER_RECORD TYPE I.
DATA FLAG.
DATA: BEGIN OF STRUC,
HEX TYPE X,
END OF STRUC.
STRUC-HEX = P_SEP.
BEGIN OF SKY-02 {
*Count how many lines does the report have for each record
LOOP AT ASCITAB.
X = STRLEN( ASCITAB ).
IF ASCITAB(X) CO '-'.
LINES_PER_RECORD = SY-TABIX - 1.
DELETE ASCITAB. "delete separator line
EXIT.
ENDIF.
ENDLOOP.
Modify ASCITAB so it can have complete group of 3 Records.
DESCRIBE TABLE ASCITAB LINES SY-TABIX.
CNT = SY-TABIX MOD 3.
IF CNT <> 0.
CNT = 3 - CNT.
DO CNT TIMES.
ASCITAB = ' '.
APPEND ASCITAB.
ENDDO.
ENDIF.
} END OF SKY-02.
*all lines for one record to be brought in one line
LOOP AT ASCITAB.
X = ( COUNT * 255 ).
IF NOT X IS INITIAL. X = X + 1. ENDIF.
MOVE ASCITAB TO ITAB+X(255).
COUNT = COUNT + 1.
{ BEGIN OF SKY-02.
IF COUNT = LINES_PER_RECORD.
IF COUNT = 3.
} END OF SKY-02.
CLEAR COUNT.
APPEND ITAB.
CLEAR ITAB.
ENDIF.
ENDLOOP.
*insert separtor characters in header
READ TABLE ITAB INDEX 1.
X = STRLEN( ITAB ).
DO.
X = X - 1.
IF X < 0. EXIT. ENDIF.
IF ITAB+X(1) IS INITIAL.
IF FLAG IS INITIAL.
STRX(1) = ITABX(1) = STRUC.
ENDIF.
FLAG = 'X'.
ELSE.
CLEAR FLAG.
ENDIF.
ENDDO.
*remove the extra separator character in the beginning(if any)
CLEAR X.
DO.
IF ITABX(1) <> STRUC AND NOT ITABX(1) IS INITIAL.
EXIT.
ENDIF.
IF ITAB+X(1) = STRUC.
CLEAR ITAB+X(1).
CLEAR STR+X(1).
ENDIF.
X = X + 1.
ENDDO.
MODIFY ITAB INDEX 1.
LOOP AT ITAB.
AT FIRST.
IF P_REM = 'X'.
CONTINUE.
ENDIF.
ENDAT.
OVERLAY ITAB WITH STR.
PERFORM CONVERT_TO_BIN IN PROGRAM ZZEMAILFILE TABLES OBJBIN
USING ITAB.
ENDLOOP.
ENDFORM.
thanks,
yogesh
2006 May 18 6:28 PM
hi Yogesh,
see this link
http://www.sapdevelopment.co.uk/reporting/email/attach_xls.htm
Regards,
Naveen
2006 May 18 6:35 PM
Hi Naveen,
Actually i have 3 programs, two is for downloading and one is for sending e-mail. My problem is i can download as an .xls, but while sending if i didn't select any delimeter that attachment comming as .Txt file but i need as XLS. and if i select any delimeter, delimeter occupying onemore cell in xl sheet. can u plz guide m ein this.
Thanks,
yogesh
2006 May 18 6:44 PM
Hi Yogesh...
Is this a Z-Program or a standard sap program ?
Thanks,
Renjith
2006 May 18 6:51 PM
Hi Ranjit,
Its a z-program. But here we r using 3 programs. we r calling remaing 2-programs for downloading file into local disk .
Thanks,
yogesh
2006 May 18 7:03 PM
are you using the FM - SO_NEW_DOCUMENT_ATT_SEND_API1 to send mail with attachment ?
if yes, could you pls post the code where you are filling the attachment contents...
Thanks,
Renjith
2006 May 18 7:10 PM
Hi Renjith,
Here is the code
REPORT ZZEMAILREPORT MESSAGE-ID S1
NO STANDARD PAGE HEADING
LINE-SIZE 100
LINE-COUNT 65(0).
************************************************************************
Source Code Documentation Section *
************************************************************************
Program Name : ZZEMAILREPORT
Source Code Type : Report
Date : 10/31/2001
Programmer : Prashant Tyagi
Description : This report will allow the running of any SAP *
program and then send the output as an Email
attachment.
Tr. Request No : DEVK954522
======================================================================
Modification Log : *
------------------ *
Date : 03/01/2002 *
Requested By : Steven P Willment *
Developer : Prashant Tyagi *
Changes Ref By : CNXT-01 *
Description : If no program name is entered then just the *
subject line and text body will be sent as an *
Email *
Transport No. : DEVK956294 *
----
Date : 03/21/2002 *
Requested By : Steven P Willment *
Developer : Prashant Tyagi *
Changes Ref By : CNXT-02 *
Description : Do not check for the program name in TRDIR if the *
user does not enter a value in the selection *
screen *
Transport No. : DEVK956770 *
----
Date : 06/06/2003 *
Requested By : Steven P Willment *
Developer : Ramandeep Singh *
Changes Ref By : CNXT-03 *
Description : Send as copy if "SEND_COPY" flag is set in *
ZEMAILADDR *
----
Date : 11/14/2005 *
Requested By : Tom Hutton *
Developer : Ramandeep Singh *
Changes Ref By : SKY-01 *
Description : Option to delimit a report. Program would delimit *
the report into different columns so that programs*
like Excel can read it *
----
Date : 04/24/2006 *
Requested By : Olga Cruz / Daniel *
Developer : Himanshu Aggarwal *
Changes Ref By : SKY-02 *
Description : Activate file delimited options for report. *
Transport No. : DEVK985197 *
************************************************************************
************************************************************************
T A B L E S *
************************************************************************
TABLES : RLGRAP, ZEMAILADDR, TRDIR, VARID.
************************************************************************
I N T E R N A L T A B L E S *
************************************************************************
DATA: LISTOBJECT LIKE ABAPLIST OCCURS 0 WITH HEADER LINE.
DATA COMPRESSED_LIST LIKE SOLI OCCURS 0.
DATA: OBJPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
DATA: OBJHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA: OBJBIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.
DATA: OBJTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: RECLIST LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
Data for the status output after sending
DATA: USER_ADDRESS LIKE SOUSRADRI1 OCCURS 1 WITH HEADER LINE.
************************************************************************
W O R K - F I E L D S *
************************************************************************
DATA: RECIPIENT_INT LIKE SADRUD.
DATA: EMAIL_ADDR LIKE ZEMAILADDR-EMAIL_ADDR.
DATA G_DOC_TYPE LIKE SOODK-OBJTP VALUE 'ALI'.
DATA: DOC_CHNG LIKE SODOCCHGI1.
DATA: TAB_LINES LIKE SY-TABIX.
DATA: SENT_TO_ALL LIKE SONV-FLAG.
DATA : W-LINE TYPE I.
DATA: MESSAGE_VAR(200).
DATA: VAR(50).
DATA: SEP VALUE '-'.
************************************************************************
S E L E C T - O P T I O N S / P A R A M E T E R S *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK STATUS WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN SKIP.
PARAMETERS : P_SEND AS CHECKBOX.
SELECTION-SCREEN SKIP.
PARAMETERS : P_SUBJ(50) " like RLGRAP-FILENAME DEFAULT
DEFAULT 'Report sent from SAP'.
PARAMETERS : P_TEXT LIKE RLGRAP-FILENAME,
P_TEXT1 LIKE RLGRAP-FILENAME,
P_TEXT2 LIKE RLGRAP-FILENAME.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK STATUS.
SELECTION-SCREEN BEGIN OF BLOCK SENDTO WITH FRAME TITLE TEXT-013.
SELECT-OPTIONS: S_EMAIL FOR RECIPIENT_INT-ADDRESS NO INTERVALS
LOWER CASE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(45) TEXT-002 FOR FIELD P_TABLE.
PARAMETERS : P_TABLE AS CHECKBOX.
SELECTION-SCREEN END OF LINE.
PARAMETERS : P_KEY LIKE ZEMAILADDR-ADDR_KEY.
SELECTION-SCREEN END OF BLOCK SENDTO.
SELECTION-SCREEN BEGIN OF BLOCK ABC WITH FRAME TITLE TEXT-004.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 10.
PARAMETERS : P_PROG LIKE RS38M-PROGRAMM." OBLIGATORY. "CNXT-01
SELECTION-SCREEN COMMENT 1(7) TEXT-005 FOR FIELD P_PROG.
SELECTION-SCREEN POSITION 70.
PARAMETERS : P_VAR LIKE RS38M-SELSET.
SELECTION-SCREEN COMMENT 63(7) TEXT-006 FOR FIELD P_VAR.
SELECTION-SCREEN END OF LINE.
*BEGIN OF SKY-01
SELECTION-SCREEN SKIP.
SELECTION-SCREEN COMMENT /1(72) TEXT-C04 FOR FIELD P_SEP.
SELECTION-SCREEN COMMENT /1(72) TEXT-C02 FOR FIELD P_SEP.
SELECTION-SCREEN SKIP.
PARAMETERS: P_NO RADIOBUTTON GROUP G1,
P_TAB RADIOBUTTON GROUP G1,
P_COMMA RADIOBUTTON GROUP G1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10) TEXT-C01 FOR FIELD P_OTHER.
SELECTION-SCREEN POSITION POS_LOW.
PARAMETERS: P_OTHER RADIOBUTTON GROUP G1.
SELECTION-SCREEN POSITION 40.
PARAMETERS: P_SEP TYPE X.
SELECTION-SCREEN COMMENT (11) TEXT-C03 FOR FIELD P_SEP.
SELECTION-SCREEN END OF LINE.
PARAMETERS: P_REM AS CHECKBOX.
PARAMETERS: P_NAME LIKE VAR.
*END OF SKY-01
SELECTION-SCREEN END OF BLOCK ABC.
************************************************************************
A T S E L E C T I O N - S C R E E N *
************************************************************************
AT SELECTION-SCREEN.
SELECT COUNT(*) INTO W-LINE FROM ZEMAILADDR
WHERE ADDR_KEY = P_KEY.
IF NOT P_TABLE IS INITIAL AND
NOT S_EMAIL IS INITIAL AND
NOT P_KEY IS INITIAL.
MESSAGE W000(0K) WITH TEXT-010.
ENDIF.
IF NOT P_TABLE IS INITIAL AND W-LINE EQ 0.
MESSAGE E000(0K) WITH TEXT-007.
ENDIF.
IF P_TABLE IS INITIAL AND S_EMAIL IS INITIAL.
MESSAGE E000(0K) WITH TEXT-011.
ENDIF.
IF NOT P_PROG IS INITIAL. "CNXT-02
SELECT SINGLE * FROM TRDIR WHERE NAME = P_PROG.
IF SY-SUBRC <> 0.
MESSAGE E000(0K) WITH TEXT-015.
ENDIF.
ENDIF. "CNXT-02
IF NOT P_VAR IS INITIAL.
SELECT SINGLE * FROM VARID WHERE REPORT = P_PROG AND VARIANT = P_VAR.
IF SY-SUBRC <> 0.
MESSAGE E000(0K) WITH TEXT-014.
ENDIF.
ENDIF.
*BEGIN OF SKY-01
CASE 'X'.
WHEN P_NO.
CLEAR P_SEP.
WHEN P_TAB.
P_SEP = '09'.
WHEN P_COMMA.
P_SEP = '2C'.
ENDCASE.
*END OF SKY-01
----
----
Report Headers *
----
Top of page event to create report headers and column headings
*CNXT-01 {
TOP-OF-PAGE.
PERFORM WRITE_HEADER.
*CNXT-01 }
***********************************************************************
S T A R T - O F - S E L E C T I O N *
************************************************************************
START-OF-SELECTION.
IF P_SEND IS INITIAL.
WRITE : / TEXT-008.
PERFORM PRINT_RECIPIENT_LIST.
WRITE : / TEXT-009.
ENDIF.
SKIP 1.
*BEGIN OF SKY-01
IF NOT P_NAME IS INITIAL AND NOT P_SEP IS INITIAL.
VAR = P_NAME.
ELSE.
*END OF SKY-01
CONCATENATE P_PROG P_VAR INTO VAR SEPARATED BY SEP.
ENDIF. "SKY-01
*CNXT-01 {
IF NOT P_PROG IS INITIAL.
IF NOT P_VAR IS INITIAL.
WRITE: /5 'REPORT : ', 18 P_PROG, 35 'USING', 43 'VARIANT : '
,55 P_VAR.
ELSE.
WRITE: /5 'REPORT : ', 18 P_PROG.
ENDIF.
SKIP 3.
PERFORM SEND_EMAIL.
ENDIF.
IF P_PROG IS INITIAL AND ( NOT S_EMAIL IS INITIAL
OR NOT P_TEXT IS INITIAL
OR NOT P_TEXT1 IS INITIAL
OR NOT P_TEXT2 IS INITIAL ).
PERFORM NOT_SEND_REPORT.
ENDIF.
*CNXT-01 }
&----
*& Form SEND_EMAIL
&----
text
----
FORM SEND_EMAIL.
DATA: ASCITAB(255) OCCURS 0 WITH HEADER LINE. "SKY-01
SUBMIT (P_PROG) USING SELECTION-SET P_VAR EXPORTING LIST
TO MEMORY AND
RETURN.
CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
LISTOBJECT = LISTOBJECT
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
WRITE 'Error in list_from_memory.'.
ENDIF.
DESCRIBE TABLE LISTOBJECT LINES TAB_LINES.
IF P_SEND IS INITIAL OR TAB_LINES EQ 0.
EXIT.
ENDIF.
CALL FUNCTION 'LIST_FREE_MEMORY'
TABLES
LISTOBJECT = LISTOBJECT
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
WRITE 'Error in list_free_memory.'.
ENDIF.
*BEGIN OF SKY-01
IF NOT P_SEP IS INITIAL.
CALL FUNCTION 'LIST_TO_ASCI'
TABLES
LISTASCI = ASCITAB
LISTOBJECT = LISTOBJECT.
PERFORM REFORMAT_DATA TABLES ASCITAB OBJBIN USING P_SEP P_REM .
ELSE.
*END OF SKY-01
CALL FUNCTION 'TABLE_COMPRESS'
TABLES
IN = LISTOBJECT
OUT = COMPRESSED_LIST
EXCEPTIONS
COMPRESS_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
WRITE: 'Error in table_compress.'.
ENDIF.
*****************************************************************
MOVE COMPRESSED_LIST[] TO OBJBIN[].
ENDIF. "SKY-01
DOC_CHNG-OBJ_NAME = 'List'.
DOC_CHNG-OBJ_DESCR = P_SUBJ.
OBJTXT = P_TEXT.
APPEND OBJTXT.
OBJTXT = P_TEXT1.
APPEND OBJTXT.
OBJTXT = P_TEXT2.
APPEND OBJTXT.
DESCRIBE TABLE OBJTXT LINES TAB_LINES.
READ TABLE OBJTXT INDEX TAB_LINES.
DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ).
CLEAR OBJPACK-TRANSF_BIN.
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 0.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
OBJPACK-DOC_TYPE = 'RAW'.
APPEND OBJPACK.
DESCRIBE TABLE OBJBIN LINES TAB_LINES.
OBJPACK-TRANSF_BIN = 'X'.
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 0.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
*BEGIN OF SKY-01
DATA: FILE(50), XTN(3).
IF NOT P_SEP IS INITIAL.
SPLIT P_NAME AT '.' INTO FILE XTN.
IF NOT XTN IS INITIAL.
TRANSLATE XTN TO UPPER CASE.
OBJPACK-DOC_TYPE = XTN.
ELSE.
OBJPACK-DOC_TYPE = 'TXT'.
ENDIF.
ELSE.
*END OF SKY-01
OBJPACK-DOC_TYPE = G_DOC_TYPE.
ENDIF. "SKY-01
OBJPACK-OBJ_NAME = 'Attachment'.
OBJPACK-OBJ_DESCR = VAR.
OBJPACK-DOC_SIZE = TAB_LINES * 255.
APPEND OBJPACK.
IF P_SEND = 'X' AND P_TABLE IS INITIAL AND NOT S_EMAIL IS INITIAL.
LOOP AT S_EMAIL.
RECIPIENT_INT-ADDRESS = S_EMAIL-LOW.
RECLIST-RECEIVER = RECIPIENT_INT.
RECLIST-REC_TYPE = 'U'.
APPEND RECLIST.
CLEAR RECLIST.
ENDLOOP.
ELSEIF P_TABLE = 'X'.
SELECT * FROM ZEMAILADDR WHERE ADDR_KEY = P_KEY.
RECIPIENT_INT-ADDRESS = ZEMAILADDR-EMAIL_ADDR .
RECLIST-RECEIVER = RECIPIENT_INT.
RECLIST-REC_TYPE = 'U'.
RECLIST-COPY = ZEMAILADDR-SEND_COPY. "CNXT-03
APPEND RECLIST.
CLEAR RECLIST.
ENDSELECT.
ENDIF.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = DOC_CHNG
PUT_IN_OUTBOX = 'X'
IMPORTING
SENT_TO_ALL = SENT_TO_ALL
TABLES
PACKING_LIST = OBJPACK
OBJECT_HEADER = OBJHEAD
CONTENTS_BIN = OBJBIN
CONTENTS_TXT = OBJTXT
RECEIVERS = RECLIST
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
OPERATION_NO_AUTHORIZATION = 4
OTHERS = 99.
CASE SY-SUBRC.
WHEN 0.
WRITE: / 'Result of the sendprocess:'.
IF NOT SENT_TO_ALL IS INITIAL.
WRITE: / 'Successfully sent to all recipients.'.
PERFORM PRINT_RECIPIENT_LIST.
ELSE.
LOOP AT RECLIST WHERE RETRN_CODE NE 0.
REFRESH USER_ADDRESS.
CLEAR USER_ADDRESS.
USER_ADDRESS-USERID = RECLIST-REC_ID.
APPEND USER_ADDRESS.
CALL FUNCTION 'SO_USER_ADDRESS_READ_API1'
TABLES
USER_ADDRESS = USER_ADDRESS
EXCEPTIONS
ENQUEUE_ERRROR = 1
PARAMETER_ERROR = 2
X_ERROR = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
USER_ADDRESS-LONG_NAME = RECLIST-REC_ID.
ENDIF.
WRITE: / 'Could not send to: '.
WRITE: USER_ADDRESS-LONG_NAME(48).
ENDLOOP.
LOOP AT RECLIST WHERE RETRN_CODE EQ 0.
ENDLOOP.
IF SY-SUBRC = 0.
WRITE: / 'Successfully sent to all other recipients.'.
PERFORM PRINT_RECIPIENT_LIST.
ENDIF.
ENDIF.
WHEN 1.
WRITE: / 'No permission to sent to the specified ',
'amount of recipients !'.
WHEN 2.
WRITE: / 'Document could not be sent to any recipient !'.
WHEN 4.
WRITE: / 'No permission to send !'.
WHEN OTHERS.
WRITE: / 'Error while sending !'.
ENDCASE.
ENDFORM. " SEND_EMAIL
&----
*& Form PRINT_RECIPIENT_LIST
&----
text
----
FORM PRINT_RECIPIENT_LIST.
IF NOT S_EMAIL IS INITIAL.
LOOP AT S_EMAIL.
WRITE : / S_EMAIL-LOW.
ENDLOOP.
ELSEIF P_TABLE = 'X'.
SELECT * FROM ZEMAILADDR WHERE ADDR_KEY = P_KEY.
WRITE : / ZEMAILADDR-EMAIL_ADDR .
*BEGIN OF CNXT-03
IF ZEMAILADDR-SEND_COPY = 'X'.
WRITE: ', As Copy'.
ENDIF.
*END OF CNXT-03
ENDSELECT.
ENDIF.
ENDFORM. " PRINT_RECIPIENT_LIST
&----
*& Form NOT_SEND_REPORT CNXT-01
&----
*
----
FORM NOT_SEND_REPORT.
IF P_SEND IS INITIAL.
EXIT.
ENDIF.
DOC_CHNG-OBJ_NAME = 'List'.
DOC_CHNG-OBJ_DESCR = P_SUBJ.
OBJTXT = P_TEXT.
APPEND OBJTXT.
OBJTXT = P_TEXT1.
APPEND OBJTXT.
OBJTXT = P_TEXT2.
APPEND OBJTXT.
DESCRIBE TABLE OBJTXT LINES TAB_LINES.
READ TABLE OBJTXT INDEX TAB_LINES.
DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ).
CLEAR OBJPACK-TRANSF_BIN.
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 0.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
OBJPACK-DOC_TYPE = 'RAW'.
APPEND OBJPACK.
IF P_SEND = 'X' AND P_TABLE IS INITIAL AND NOT S_EMAIL IS INITIAL.
LOOP AT S_EMAIL.
RECIPIENT_INT-ADDRESS = S_EMAIL-LOW.
RECLIST-RECEIVER = RECIPIENT_INT.
RECLIST-REC_TYPE = 'U'.
APPEND RECLIST.
CLEAR RECLIST.
ENDLOOP.
ELSEIF P_TABLE = 'X'.
SELECT * FROM ZEMAILADDR WHERE ADDR_KEY = P_KEY.
RECIPIENT_INT-ADDRESS = ZEMAILADDR-EMAIL_ADDR .
RECLIST-RECEIVER = RECIPIENT_INT.
RECLIST-REC_TYPE = 'U'.
RECLIST-COPY = ZEMAILADDR-SEND_COPY. "CNXT-03
APPEND RECLIST.
CLEAR RECLIST.
ENDSELECT.
ENDIF.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = DOC_CHNG
PUT_IN_OUTBOX = 'X'
IMPORTING
SENT_TO_ALL = SENT_TO_ALL
TABLES
PACKING_LIST = OBJPACK
OBJECT_HEADER = OBJHEAD
CONTENTS_BIN = OBJBIN
CONTENTS_TXT = OBJTXT
RECEIVERS = RECLIST
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
OPERATION_NO_AUTHORIZATION = 4
OTHERS = 99.
CASE SY-SUBRC.
WHEN 0.
WRITE: / 'Result of the sendprocess:'.
IF NOT SENT_TO_ALL IS INITIAL.
WRITE: / 'Successfully sent to all recipients.'.
PERFORM PRINT_RECIPIENT_LIST.
ELSE.
LOOP AT RECLIST WHERE RETRN_CODE NE 0.
REFRESH USER_ADDRESS.
CLEAR USER_ADDRESS.
USER_ADDRESS-USERID = RECLIST-REC_ID.
APPEND USER_ADDRESS.
CALL FUNCTION 'SO_USER_ADDRESS_READ_API1'
TABLES
USER_ADDRESS = USER_ADDRESS
EXCEPTIONS
ENQUEUE_ERRROR = 1
PARAMETER_ERROR = 2
X_ERROR = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
USER_ADDRESS-LONG_NAME = RECLIST-REC_ID.
ENDIF.
WRITE: / 'Could not send to: '.
WRITE: USER_ADDRESS-LONG_NAME(48).
ENDLOOP.
LOOP AT RECLIST WHERE RETRN_CODE EQ 0.
ENDLOOP.
IF SY-SUBRC = 0.
WRITE: / 'Successfully sent to all other recipients.'.
PERFORM PRINT_RECIPIENT_LIST.
ENDIF.
ENDIF.
WHEN 1.
WRITE: / 'No permission to sent to the specified ',
'amount of recipients !'.
WHEN 2.
WRITE: / 'Document could not be sent to any recipient !'.
WHEN 4.
WRITE: / 'No permission to send !'.
WHEN OTHERS.
WRITE: / 'Error while sending !'.
ENDCASE.
ENDFORM. "NOT_SEND_REPORT
&----
*& Form WRITE_HEADER
&----
Report heading. Top-of-page.
----
FORM WRITE_HEADER.
DATA : LINE01(100) TYPE C,
LINE02 LIKE LINE01,
LINE03 LIKE LINE01,
LINE04 LIKE LINE01.
function call to create report headers
CALL FUNCTION 'Z_REPORT_HEADERS'
EXPORTING
COLUMNS = 100
PERIOD = ' '
RPT_NAME = 'ZZEMAILREPORT'
RPT_TITLE1 = SY-TITLE
RPT_TITLE3 = ' '
IMPORTING
TEXT01 = LINE01
TEXT02 = LINE02
TEXT03 = LINE03
TEXT04 = LINE04.
output report header lines
WRITE: / LINE01, LINE02, LINE03, LINE04.
SKIP.
ULINE.
SKIP .
ENDFORM. " WRITE_HEADER
----
FORM REFORMAT_DATA *
----
........ *
----
--> ASCITAB *
--> OBJBIN *
--> P_SEP *
--> P_REM *
----
FORM REFORMAT_DATA TABLES ASCITAB
OBJBIN STRUCTURE OBJBIN
USING P_SEP P_REM .
DATA: SEP_INDEX LIKE SY-TABIX.
DATA: ITAB(1000) OCCURS 0 WITH HEADER LINE.
DATA: STR LIKE ITAB.
DATA X TYPE I.
DATA COUNT TYPE I.
DATA CNT TYPE I. "SKY-02
DATA LINES_PER_RECORD TYPE I.
DATA FLAG.
DATA: BEGIN OF STRUC,
HEX TYPE X,
END OF STRUC.
STRUC-HEX = P_SEP.
BEGIN OF SKY-02 {
*Count how many lines does the report have for each record
LOOP AT ASCITAB.
X = STRLEN( ASCITAB ).
IF ASCITAB(X) CO '-'.
LINES_PER_RECORD = SY-TABIX - 1.
DELETE ASCITAB. "delete separator line
EXIT.
ENDIF.
ENDLOOP.
Modify ASCITAB so it can have complete group of 3 Records.
DESCRIBE TABLE ASCITAB LINES SY-TABIX.
CNT = SY-TABIX MOD 3.
IF CNT <> 0.
CNT = 3 - CNT.
DO CNT TIMES.
ASCITAB = ' '.
APPEND ASCITAB.
ENDDO.
ENDIF.
} END OF SKY-02.
*all lines for one record to be brought in one line
LOOP AT ASCITAB.
X = ( COUNT * 255 ).
IF NOT X IS INITIAL. X = X + 1. ENDIF.
MOVE ASCITAB TO ITAB+X(255).
COUNT = COUNT + 1.
{ BEGIN OF SKY-02.
IF COUNT = LINES_PER_RECORD.
IF COUNT = 3.
} END OF SKY-02.
CLEAR COUNT.
APPEND ITAB.
CLEAR ITAB.
ENDIF.
ENDLOOP.
*insert separtor characters in header
READ TABLE ITAB INDEX 1.
X = STRLEN( ITAB ).
DO.
X = X - 1.
IF X < 0. EXIT. ENDIF.
IF ITAB+X(1) IS INITIAL.
IF FLAG IS INITIAL.
STRX(1) = ITABX(1) = STRUC.
ENDIF.
FLAG = 'X'.
ELSE.
CLEAR FLAG.
ENDIF.
ENDDO.
*remove the extra separator character in the beginning(if any)
CLEAR X.
DO.
IF ITABX(1) <> STRUC AND NOT ITABX(1) IS INITIAL.
EXIT.
ENDIF.
IF ITAB+X(1) = STRUC.
CLEAR ITAB+X(1).
CLEAR STR+X(1).
ENDIF.
X = X + 1.
ENDDO.
MODIFY ITAB INDEX 1.
LOOP AT ITAB.
AT FIRST.
IF P_REM = 'X'.
CONTINUE.
ENDIF.
ENDAT.
OVERLAY ITAB WITH STR.
PERFORM CONVERT_TO_BIN IN PROGRAM ZZEMAILFILE TABLES OBJBIN
USING ITAB.
ENDLOOP.
ENDFORM.
thanks,
yogesh
2006 May 18 7:24 PM
| User | Count |
|---|---|
| 6 | |
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |