‎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
‎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