0% found this document useful (0 votes)
196 views29 pages

Classical Report To Email

The document discusses code for generating a breakdown report in SAP. It includes macros, data declarations, and subroutines for selecting data from tables, formatting output, and converting the output to PDF to email. The code performs queries on equipment notification, damage codes, cause codes and frequency data, formats the results, and processes it into an email attachment.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
196 views29 pages

Classical Report To Email

The document discusses code for generating a breakdown report in SAP. It includes macros, data declarations, and subroutines for selecting data from tables, formatting output, and converting the output to PDF to email. The code performs queries on equipment notification, damage codes, cause codes and frequency data, formats the results, and processes it into an email attachment.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 29

form print. sy-spono FORM print_setting . IF p_djprn = 'X'.

CALL FUNCTION 'SET_PRINT_PARAMETERS' EXPORTING layout = 'X_65_132' line_count = 64 line_size = 140. ELSE. CALL FUNCTION 'SET_PRINT_PARAMETERS' EXPORTING layout = 'X_58_170' line_count = 58 line_size = 185. ENDIF. ENDFORM. " PRINT_SETTING Call function 'spool to otf' call function 'otf to pdf' sending pdf file to email function module.

*&---------------------------------------------------------------------* *& Report ZRPM_BDMATRIX *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* report ZRPM_BDREASON line-size 80 *line-count 65 "Commented by Shweta Dwivedi 13-May-2010 GRDK930312 line-count 72 "Commented by Shweta Dwivedi 13-May-2010 GRDK930312 no standard page heading message-id ZPM. *&---------------------------------------------------------------------&* *~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~* *&---------------------------------------------------------------------&* *& Program Name : Breakdown Why-Why Analysis report &* *& Transaction Code : ZRMM_DATA &* *& Module : PM &* *& Package : ZPM &* *& Developed By : MURALIMOHAN REDDY &* *& Development Date : 10.3.2006 &* *& Progarm Type : 1 - Executable &* *& Transport Req : &* *&---------------------------------------------------------------------&* *& Object : &* *& &* *&--------------------------------------------------------------------&* *~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~* * GRDK930312 Shweta Dwivedi 13-May-2010 Text Lines addition under

* under recommandation 1 2 3 *&---------------------------------------------------------------------&* type-pools:SLIS. tables: ZTPM_WHYWHYANS, VIQMFE, VIQMUR, EQUI, KLAH, VIQMEL, S031, VIAUFKST, RIWO00, STXH, V_EQUI, T024I. "Maintenance planner groups data: V_DAY type I, V_HOURS type I. data: W_FM_NAME type RS38L_FNAM. "Name of function module **scelection screen selection-screen begin of block SEL1 with frame title TEXT-001 . parameter : P_WERK like VIQMEL-SWERK obligatory . "Maint Plant select-options: S_BEBER on S_INGRP up S_VAPLZ enter S_EQUNR o S_QMNUM S_DATE Date * od. parameter s_spmon for VIQMEL-BEBER, for VIQMEL-INGRP obligatory, for VIAUFKST-VAPLZ, for VIQMEL-EQUNR, for VIQMEL-QMNUM, for VIQMEL-AUSVN obligatory. for s031-spmon obligatory. "Heade require/Not "Plant secti "Planner Gro "Main Work C "Equipment N "MalFunction "Peri

: P_HEAD as checkbox default 'X'.

selection-screen end of block SEL1. **Internal table declaration **For selecting data from class data: begin of IT_EQP1 occurs 0, CLINT like KSSK-CLINT, OBJEK like KSSK-OBJEK, KLART like KSSK-KLART, HERST like EQUI-HERST, "Manufacturer TYPBZ like EQUI-TYPBZ, "Model no TIDNR like ITOB-TIDNR, "TechnicalIDNo EQKTX like EQKT-EQKTX, "Equipment description end of IT_EQP1. data: IT_NOTFDATA like ZSPM_WHY1 occurs 0 with header line. data: begin of IT_TEMP occurs 1, ARBPL like CRHD-ARBPL, OBJID like CRHD-OBJID. data end of IT_TEMP.

data: begin of IT_DAMAGE_CODE occurs 1, QMNUM like VIQMFE-QMNUM, FENUM like VIQMFE-FENUM, FEGRP like VIQMFE-FEGRP, FECOD like VIQMFE-FECOD, DTEXT like QPCT-KURZTEXT, OTGRP like VIQMFE-OTGRP, OTEIL like VIQMFE-OTEIL, OTEXT like QPCT-KURZTEXT, end of IT_DAMAGE_CODE. data: begin of IT_CUMHRS occurs 1, EQUNR like VIQMEL-EQUNR, OTGRP like VIQMFE-OTGRP, FECOD like VIQMFE-FECOD, QMNUM like VIQMFE-QMNUM, BDHRS type P decimals 2, FRQ type I, end of IT_CUMHRS. data: IT_CUMHRS_SUM like IT_CUMHRS occurs 0 with header line. data: begin of IT_ZDESC occurs 0. include structure ZTPM_WHYWHYANS. data: end of IT_ZDESC. data: begin of IT_CAUSE_CODE occurs 1, QMNUM like VIQMUR-QMNUM, FENUM like VIQMUR-FENUM, URNUM like VIQMUR-URNUM, URGRP like VIQMUR-URGRP, URCOD like VIQMUR-URCOD, URTXT like VIQMUR-URTXT, CTEXT like QPCT-KURZTEXT, CTEXT1 like QPCT-KURZTEXT, FLAG(3), end of IT_CAUSE_CODE. *data: it_cause_code like zspm_why2 occurs 0 with header line. data: begin of IT_OUTPUT occurs 1, QMNUM like VIQMUR-QMNUM, FENUM like VIQMUR-FENUM, INGRP like VIQMEL-INGRP, "Planner Group HERST like EQUI-HERST, "Manufacturer TYPBZ like EQUI-TYPBZ, "Model no EQUNR like VIQMEL-EQUNR, "equipment no EQUNR1(18) type N, "equipment no TIDNR like ITOB-TIDNR, "TechnicalIDNo EQKTX like EQKT-EQKTX, "Equipment description **Damage related OTGRP like FEGRP like FECOD like DTEXT like **Cause related URNUM like URGRP like URCOD like CTEXT like FRQNO type AUSZT type VIQMFE-OTGRP, VIQMFE-FEGRP, VIQMFE-FECOD, QPCT-KURZTEXT, VIQMUR-URNUM, VIQMUR-URGRP, VIQMUR-URCOD, QPCT-KURZTEXT, I, P decimals 2, "Object Part "Code Group - Problem "Damage code "Damage Text "Sequential Number for Cause "Code Group - Causes "Cause Code "Cause Text "Frequency "Duration

end of IT_OUTPUT. data: begin of IT_COSS occurs 0. include structure COSS. data: COST1 like COSS-WTG016, end of IT_COSS. data: begin of IT_COSP occurs 0. include structure COSP. data: COST2 like COSS-WTG016, end of IT_COSP. data: begin of IT_FRQYEAR occurs 0, QMNUM like VIQMEL-QMNUM, EQUNR like VIQMEL-EQUNR, AUSZT type P decimals 2, "Duration end of IT_FRQYEAR. data: begin of IT_DMYEAR occurs 0, EQUNR like VIQMEL-EQUNR, FECOD like VIQMFE-FECOD, QMNUM like VIQMFE-QMNUM, BDHRS type P decimals 2, FRQ type I, end of IT_DMYEAR. data: begin of IT_YCF occurs 0, EQUNR like VIQMEL-EQUNR, QMNUM like VIQMFE-QMNUM, FECOD like VIQMFE-FECOD, BDHRS type P decimals 2, FRQ type I, end of IT_YCF. data: IT_OB like TLINE occurs data: IT_WHY like TLINE occurs data: IT_RC like TLINE occurs data: IT_RM like TLINE occurs **data declaration data: V_TIME type SY-UZEIT, V_NAME1 like T001W-NAME1, V_OBJID like CRHD-OBJID, G_MFDATE like SY-DATUM, G_MLDATE like SY-DATUM. 0 0 0 0 with with with with header header header header line. line. line. line.

constants: C_KLART like KLAH-KLART value '002', "type 002--Equipment class ty pe C_PLNTY like MPOS-PLNTY value 'A', "type A--Genral Task List C_QMART like VIQMEL-QMART value 'M2'. "Notification type 'M2' data: V_DT_LOW type I, V_DT_HIGH type I, V_MON_LOW type I, V_MON_HIGH type I, V_YR_LOW type I, V_YR_HIGH type I. **Macros for Selection oprions printing data: V_CENTER01 V_CENTER02 V_RIGHT V_CONAME(34) type type type type P, P, P, C value 'GRASIM INDUSTRIES Ltd. CEMENT Mfg.'.

* data: IT_TEXTPOOL like TEXTPOOL occurs 0 with header line. *& Data declaration by GVS DATA: gd_recsize TYPE i. * Spool IDs

TYPES: BEGIN OF t_tbtcp. INCLUDE STRUCTURE tbtcp. TYPES: END OF t_tbtcp. DATA: it_tbtcp TYPE STANDARD TABLE OF t_tbtcp INITIAL SIZE 0, wa_tbtcp TYPE t_tbtcp. * Job Runtime Parameters DATA: gd_eventid LIKE tbtcm-eventid, gd_eventparm LIKE tbtcm-eventparm, gd_external_program_active LIKE tbtcm-xpgactive, gd_jobcount LIKE tbtcm-jobcount, gd_jobname LIKE tbtcm-jobname, gd_stepcount LIKE tbtcm-stepcount, gd_error TYPE sy-subrc, gd_reciever TYPE sy-subrc. DATA: w_recsize TYPE i. DATA: gd_subject LIKE sodocchgi1-obj_descr, it_mess_bod LIKE solisti1 OCCURS 0 WITH HEADER LINE, it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE, gd_sender_type LIKE soextreci1-adr_typ, gd_attachment_desc TYPE so_obj_nam, gd_attachment_name TYPE so_obj_des. * Spool to PDF conversions

DATA: gd_spool_nr LIKE tsp01-rqident, W_SPOOL_NR LIKE TSP01-RQIDENT, gd_destination LIKE rlgrap-filename, gd_bytecount LIKE tst01-dsize, gd_buffer TYPE string. * Binary store for PDF

DATA: BEGIN OF it_pdf_output OCCURS 0. INCLUDE STRUCTURE tline. DATA: END OF it_pdf_output. CONSTANTS: c_dev LIKE sy-sysid VALUE 'DEV', c_no(1) TYPE c VALUE 'X', c_device(4) TYPE c VALUE 'LOCL'. DATA : p_email LIKE somlreci1-receiver VALUE 'CBMKT_DEV02', p_sender LIKE somlreci1-receiver. DATA : SPNO LIKE TSP01-RQIDENT. DATA: X(1) TYPE i VALUE 1. *& End of data declaration

*& initialization INITIALIZATION. IF X < 1. X = X + 1. ENDIF. *----------------------------------------------------------------------* * Macro WRITE_SELECT_OPTION * *----------------------------------------------------------------------* define WRITE_SELECT_OPTION. CLEAR IT_TEXTPOOL. READ TABLE IT_TEXTPOOL WITH KEY ID ='S' KEY = &2. FORMAT COLOR COL_GROUP. IF IT_TEXTPOOL-ENTRY IS INITIAL. WRITE:/5 &2 . ELSE. SKIP. WRITE:/2 IT_TEXTPOOL-ENTRY+4 . ENDIF. * FORMAT COLOR COL_NEGATIVE. LOOP AT &1. WRITE: 27 &1-LOW . IF &1-HIGH <> ''. WRITE: 46 'To', 50 &1-HIGH . ENDIF. *---If Option is not 'EQ' or 'BT', write it---* IF &1-OPTION <> 'EQ' AND &1-OPTION <> 'BT'. WRITE: 71(2) &1-OPTION. ENDIF. *---If Sign is not Include, write it. IF &1-SIGN <> 'I'. WRITE: 74 'Excluded'. ENDIF. NEW-LINE. ENDLOOP. FORMAT COLOR OFF. end-of-definition. *----------------------------------------------------------------------* * Macro WRITE_PAREMETER * *----------------------------------------------------------------------* define WRITE_PARAMETER. CLEAR IT_TEXTPOOL. READ TABLE IT_TEXTPOOL WITH KEY ID ='S' KEY = &2. FORMAT COLOR COL_GROUP. IF IT_TEXTPOOL-ENTRY IS INITIAL. WRITE:/5 &2. ELSE. WRITE:/5 IT_TEXTPOOL-ENTRY+4. ENDIF. WRITE: 27 &1. FORMAT COLOR OFF. end-of-definition. **at selction-screen. at selection-screen on P_WERK. select single NAME1 into V_NAME1 from T001W where WERKS = P_WERK.

if SY-SUBRC <> 0. message E015(ZPM). endif. at selection-screen on S_DATE. V_DT_LOW = S_DATE-LOW+6(2). V_MON_LOW = S_DATE-LOW+4(2). V_YR_LOW = S_DATE-LOW+0(4). V_DT_HIGH = S_DATE-HIGH+6(2). V_MON_HIGH = S_DATE-HIGH+4(2). V_YR_HIGH = S_DATE-HIGH+0(4). if ( V_MON_HIGH ge 4 and ( V_MON_LOW = 1 or V_MON_LOW = 2 or V_MON_LOW = 3 ) ) and ( V_YR_LOW = V_YR_HIGH ). message E031(ZPM). endif. **start-of-selection. start-of-selection. ** Select Notfication from select perform F_SELECT_NITIFICATION_FROM_EQP. ** Select damage code perform F_SELECT_DAMAGE. ** Select Cause code perform F_SELECT_CAUSE. perform F_SELECT_YEARLY_FRQ. ** Formating Output perform F_OUTPUT. perform F_GET_WHY_WHY_DATA. perform F_WRITE_DATA. *& Converting output to pdf and sending mail to particular user PERFORM SPOOL_NO. PERFORM CONVERT_SPOOL_TO_PDF. PERFORM process_email. *&---------------------------------------------------------------------* *& Form f_select_nitification_from_eqp *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* form F_SELECT_NITIFICATION_FROM_EQP . data: L_OBJEK like KSSK-OBJEK, L_LINES type I. data: L_TEXT like BSVX-STTXT.

select QMNUM EQUNR AUSVN AUZTV AUSBS INGRP BEBER ARBPL ARBPLWERK IWERK AUSZ T AUFNR OBJNR into (IT_NOTFDATA-QMNUM, IT_NOTFDATA-EQUNR, IT_NOTFDATA-AUSVN, IT_NOTFD ATA-AUZTV, IT_NOTFDATA-AUSBS, IT_NOTFDATA-INGRP, IT_NOTFDATA-BEBER, IT_NOTFDATA-ARBPL, IT_NOTFDATA-ARBPLWERK, IT_NOTFDATA-IWERK, IT_NOTFDATA-AUSZT, IT_NOTFDATA-AUFNR, IT_NOTFDATA-OBJNR) "OBJNR added by Sameep 13/03/07 from VIQMEL where QMNUM QMART BEBER INGRP EQUNR AUSVN IWERK MSAUS AUSZT in S_QMNUM = C_QMART in S_BEBER in S_INGRP in S_EQUNR in S_DATE eq P_WERK = 'X' > 0. and and and and and and and and

append IT_NOTFDATA. endselect. **fOR SELECTING NOTIFICATION WITH STATUS 'NOCO' loop at IT_NOTFDATA. call function 'STATUS_TEXT_EDIT' exporting CLIENT = SY-MANDT FLG_USER_STAT = 'X' OBJNR = IT_NOTFDATA-OBJNR ONLY_ACTIVE = 'X' SPRAS = SY-LANGU importing LINE = L_TEXT exceptions OBJECT_NOT_FOUND = 1 others = 2. * Start of modification by Sameep Jain on 13/03/2007 * Ignore notifications set for Deletion if L_TEXT cs 'DLFL'. delete IT_NOTFDATA where OBJNR = IT_NOTFDATA-OBJNR. endif. * End of modification by Sameep Jain on 13/03/2007 if L_TEXT = 'OSNO'. delete IT_NOTFDATA where OBJNR = IT_NOTFDATA-OBJNR. endif.

endloop. loop at IT_NOTFDATA. *Begin of changes by psao 01/04/09 * SELECT SINGLE erlnam ernam erldat * INTO (it_notfdata-erlnam, it_notfdata-ernam, it_notfdata-erldat) * FROM qmsm * WHERE qmnum = it_notfdata-qmnum * AND manum = '0001'. select single ERLNAM ERNAM AENAM ERLDAT PETER WDVDAT

into (IT_NOTFDATA-ERLNAM, IT_NOTFDATA-ERNAM, IT_NOTFDATA-AENAM, IT_NOTFDATA-ERLDAT, IT_NOTFDATA-PETER, IT_NOTFDATA-WDVDAT) from QMSM where QMNUM = IT_NOTFDATA-QMNUM and MANUM = '0001'. *End of changes by psao 01/04/09 select single OBJNR into IT_NOTFDATA-OBJNR from VIAUFKST where AUFNR = IT_NOTFDATA-AUFNR. modify IT_NOTFDATA. select single EQKTX into IT_NOTFDATA-EQKTX from EQKT where EQUNR eq IT_NOTFDATA-EQUNR and SPRAS eq SY-LANGU. modify IT_NOTFDATA. endloop. loop at IT_NOTFDATA. select single ARBPL into IT_NOTFDATA-GEWRK from CRHD client specified where MANDT in ( select MANDT from T000 ) and OBJTY = 'A' and OBJID = IT_NOTFDATA-ARBPL and WERKS = IT_NOTFDATA-ARBPLWERK and VERWE = '0015' . if SY-SUBRC = 0. modify IT_NOTFDATA index SY-TABIX. endif. endloop. delete IT_NOTFDATA where GEWRK not in S_VAPLZ. loop at IT_NOTFDATA. select single * into corresponding fields of IT_COSS from COSS where OBJNR eq IT_NOTFDATA-OBJNR and WRTTP eq '04' and BEKNZ eq 'S'. append IT_COSS. select single * into corresponding fields of IT_COSP from COSP where OBJNR eq IT_NOTFDATA-OBJNR and WRTTP eq '04' and BEKNZ eq 'S'. append IT_COSP. endloop. loop at IT_COSS. IT_COSS-COST1 = IT_COSS-WTG001 + IT_COSS-WTG002 + IT_COSS-WTG003 + IT_COSS-W TG004 + IT_COSS-WTG005 + IT_COSS-WTG006 + IT_COSS-WTG007 + IT_COSS-WTG008 + IT_COSS-W TG009 + IT_COSS-WTG010 + IT_COSS-WTG011 + IT_COSS-WTG012 + IT_COSS-WTG013 + IT_COSS-W TG014 + IT_COSS-WTG015 + IT_COSS-WTG016. modify IT_COSS.

clear IT_COSS. endloop. loop at IT_COSP. IT_COSP-COST2 = IT_COSP-WTG001 + IT_COSP-WTG002 + IT_COSP-WTG003 + IT_COSP-W TG004 + IT_COSP-WTG005 + IT_COSP-WTG006 + IT_COSP-WTG007 + IT_COSP-WTG008 + IT_COSP-W TG009 + IT_COSP-WTG010 + IT_COSP-WTG011 + IT_COSP-WTG012 + IT_COSP-WTG013 + IT_COSP-W TG014 + IT_COSP-WTG015 + IT_COSP-WTG016. modify IT_COSP. clear IT_COSP. endloop. endform. " f_select_nitification_from_eqp *&---------------------------------------------------------------------* *& Form f_select_damage *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* form F_SELECT_DAMAGE . select QMNUM FENUM FEGRP FECOD OTGRP OTEIL into corresponding fields of table IT_DAMAGE_CODE from VIQMFE for all entries in IT_NOTFDATA where QMNUM = IT_NOTFDATA-QMNUM. **Damage description loop at IT_DAMAGE_CODE. select single KURZTEXT into IT_DAMAGE_CODE-DTEXT from QPCT where KATALOGART = 'C' and CODEGRUPPE = IT_DAMAGE_CODE-FEGRP and CODE = IT_DAMAGE_CODE-FECOD and SPRACHE = 'EN'. modify IT_DAMAGE_CODE index SY-TABIX transporting DTEXT. clear IT_DAMAGE_CODE. endloop. **Object description loop at IT_DAMAGE_CODE. select single KURZTEXT into IT_DAMAGE_CODE-OTEXT from QPCT where KATALOGART = 'B' and CODEGRUPPE = IT_DAMAGE_CODE-OTGRP and CODE = IT_DAMAGE_CODE-OTEIL and SPRACHE = 'EN'. modify IT_DAMAGE_CODE index SY-TABIX transporting OTEXT. clear IT_DAMAGE_CODE. endloop. endform. " f_select_damage *&---------------------------------------------------------------------* *& Form f_select_cause *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text

* <-- p2 text *----------------------------------------------------------------------* form F_SELECT_CAUSE . data: L_TEXT1(40), L_TEXT2(4). select QMNUM FENUM URNUM URGRP URCOD URTXT into corresponding fields of table IT_CAUSE_CODE from VIQMUR for all entries in IT_NOTFDATA where QMNUM = IT_NOTFDATA-QMNUM. loop at IT_CAUSE_CODE. select single KURZTEXT into IT_CAUSE_CODE-CTEXT1 from QPCT where KATALOGART = 5 and CODEGRUPPE = IT_CAUSE_CODE-URGRP and CODE = IT_CAUSE_CODE-URCOD and SPRACHE = 'EN'. if SY-SUBRC = 0. modify IT_CAUSE_CODE index SY-TABIX transporting CTEXT1. endif. IT_CAUSE_CODE-CTEXT = IT_CAUSE_CODE-URTXT. split IT_CAUSE_CODE-CTEXT at '-' into L_TEXT1 L_TEXT2. IT_CAUSE_CODE-CTEXT = L_TEXT1. condense L_TEXT2 . IT_CAUSE_CODE-FLAG = L_TEXT2. modify IT_CAUSE_CODE index SY-TABIX transporting CTEXT FLAG. clear IT_CAUSE_CODE. endloop. endform. " f_select_cause *&---------------------------------------------------------------------* *& Form f_output *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* form F_OUTPUT . data: L_QMNUM like VIQMEL-QMNUM. clear :IT_DAMAGE_CODE. loop at IT_DAMAGE_CODE. move IT_DAMAGE_CODE-QMNUM move IT_DAMAGE_CODE-OTGRP move IT_DAMAGE_CODE-FENUM move IT_DAMAGE_CODE-FEGRP move IT_DAMAGE_CODE-FECOD move IT_DAMAGE_CODE-DTEXT append IT_OUTPUT. endloop.

to to to to to to

IT_OUTPUT-QMNUM. IT_OUTPUT-OTGRP. IT_OUTPUT-FENUM. IT_OUTPUT-FEGRP. IT_OUTPUT-FECOD. IT_OUTPUT-DTEXT.

clear :IT_DAMAGE_CODE, IT_NOTFDATA. loop at IT_DAMAGE_CODE. read table IT_NOTFDATA with key QMNUM = IT_DAMAGE_CODE-QMNUM.

if SY-SUBRC = 0. move IT_NOTFDATA-EQUNR to IT_CUMHRS-EQUNR. IT_CUMHRS-BDHRS = IT_NOTFDATA-AUSZT / 3600. IT_CUMHRS-FRQ = 1. endif. move IT_DAMAGE_CODE-OTGRP to IT_CUMHRS-OTGRP. move IT_DAMAGE_CODE-FECOD to IT_CUMHRS-FECOD. move IT_DAMAGE_CODE-QMNUM to IT_CUMHRS-QMNUM. append IT_CUMHRS. endloop. clear :IT_DAMAGE_CODE, IT_NOTFDATA. sort IT_CUMHRS by EQUNR OTGRP FECOD. loop at IT_CUMHRS. clear L_QMNUM. L_QMNUM = IT_CUMHRS-QMNUM. at new FECOD. sum. move IT_CUMHRS-EQUNR to IT_CUMHRS_SUM-EQUNR. move IT_CUMHRS-BDHRS to IT_CUMHRS_SUM-BDHRS. move IT_CUMHRS-FECOD to IT_CUMHRS_SUM-FECOD. move L_QMNUM to IT_CUMHRS_SUM-QMNUM. move IT_CUMHRS-FRQ to IT_CUMHRS_SUM-FRQ. append IT_CUMHRS_SUM. endat. endloop. loop at IT_OUTPUT. select single EQKTX HERST TYPBZ TIDNR into (IT_OUTPUT-EQKTX, IT_OUTPUT-HERST, IT_OUTPUT-TYPBZ, IT_OUTPUT-TI DNR) from V_EQUI where EQUNR eq IT_OUTPUT-EQUNR. modify IT_OUTPUT. endloop. endform. " f_output **&---------------------------------------------------------------------* **& Form f_get_eqpt_details **&---------------------------------------------------------------------* ** text **----------------------------------------------------------------------* ** --> p1 text ** <-- p2 text **----------------------------------------------------------------------* *form f_get_eqpt_details . * * * loop at it_eqp1. * condense it_eqp1-objek. * select single herst typbz * into (it_eqp1-herst, it_eqp1-typbz ) * from equi * where equnr = it_eqp1-objek. * modify it_eqp1 index sy-tabix. * clear it_eqp1. * endloop. * loop at it_eqp1.

* * select single tidnr * into it_eqp1-tidnr * from equz * where equnr = it_eqp1-objek * and datbi ge sy-datum * and eqlfn = 1. * modify it_eqp1 index sy-tabix. * clear it_eqp1. * endloop. * loop at it_eqp1. * * select single eqktx * into it_eqp1-eqktx * from eqkt * where equnr = it_eqp1-objek * and spras = 'EN'. * modify it_eqp1 index sy-tabix. * clear it_eqp1. * endloop. *endform. " f_get_eqpt_details * ***************************************************************************** *&---------------------------------------------------------------------* *& Form f_get_dates *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form f_get_why_why_data *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* form F_GET_WHY_WHY_DATA . select * into corresponding fields of table IT_ZDESC from ZTPM_WHYWHYANS for all entries in IT_NOTFDATA where ZZ_QMNUM eq IT_NOTFDATA-QMNUM. endform. " f_get_why_why_data *&---------------------------------------------------------------------* *& Form f_write_data *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* form F_WRITE_DATA . data: L_DUR type P decimals 2, L_EQKTX like EQKT-EQKTX,

L_COST like COSP-WTG001, L_INDEX type I, L_CCODE(4) type N. data: H_OBJNR like THEAD-TDNAME. "rm63t-objnr. data: LEXIST like VIQMEL-KZMLA. data: LINV like EQKT-KZLTX. data: LLANGU like SY-LANGU. constants: L_OB(2) value 'OB', L_WHY(2) value 'WH', L_RC(2) value 'RC', L_RM(2 ) value 'RM'. if P_HEAD = 'X'. write: 'Selection Options' color col_heading . WRITE_PARAMETER V_NAME1 'Plant :'(004). WRITE_SELECT_OPTION S_BEBER 'Plant section :'(005). WRITE_SELECT_OPTION S_INGRP 'Planner Group :'(007). WRITE_SELECT_OPTION S_DATE 'Period :'(006). write:/(80) SY-ULINE. endif. sort IT_NOTFDATA by BEBER AUSVN AUZTV. loop at IT_NOTFDATA. Changed by Ankur 09.09.11 at END OF QMNUM. NEW-PAGE. ENDAT. * End of Change by Ankur * clear: L_DUR, L_EQKTX. IT_NOTFDATA-DURATION = IT_NOTFDATA-AUSZT / 3600. clear: IT_DAMAGE_CODE, IT_CUMHRS_SUM, IT_YCF. read table IT_DAMAGE_CODE with key QMNUM = IT_NOTFDATA-QMNUM. read table IT_CUMHRS_SUM with key EQUNR = IT_NOTFDATA-EQUNR FECOD = IT_DAMA GE_CODE-FECOD. read table IT_YCF DE-FECOD. with key EQUNR = IT_NOTFDATA-EQUNR FECOD = IT_DAMAGE_CO

write:/(80) SY-ULINE. write:/1 SY-VLINE, 2(76) 'WHY WHY ANALYSIS REPORT' centered color col_heading , 80 SY-VLINE. write:/(80) SY-ULINE. write:/1 SY-VLINE, 2 'Date & Time of Occurence:',28 IT_NOTFDATA-AUSVN color col_normal intensified on, 41 IT_NOTFDATA-AUZTV color col_normal intensified on, * 55 'B/D durtn:',(10) it_notfdata-duration color col_normal Intensifi ed On, 80 SY-VLINE, /1 SY-VLINE, 2 'Notification No:', 20 IT_NOTFDATA-QMNUM color col_normal intensified on, 41 'Plant Section:', 56 IT_NOTFDATA-BEBER color col_normal intensifi

ed on, 80 SY-VLINE. write:/1 SY-VLINE, 2 'PlannerGroup:', 20 IT_NOTFDATA-INGRP color col_normal intensified on, 41 'Main WorkCtr:', 56 IT_NOTFDATA-GEWRK color col_normal intensifie d on, 80 SY-VLINE. write:/1 SY-VLINE, 80 SY-VLINE. write:/1 SY-VLINE, 2 'Equipment No & Desc:', 23(10) IT_NOTFDATA-EQUNR color col_normal intensified on, 35 IT_NOTFDATA-EQKTX color col_normal intensified on, 80 SY-VLINE. write:/1 SY-VLINE, 80 SY-VLINE. write:/1 SY-VLINE, 2 'Object part & Desc:', tensified on, 35 IT_DAMAGE_CODE-OTEXT 80 SY-VLINE, /1 SY-VLINE, 2 'Damage & Desc:', ntensified on, 35 IT_DAMAGE_CODE-DTEXT 80 SY-VLINE. 23 IT_DAMAGE_CODE-OTGRP color col_normal in color col_normal intensified on, 23 IT_DAMAGE_CODE-FEGRP color col_normal i color col_normal intensified on,

write:/1 SY-VLINE, 80 SY-VLINE. write:/1 SY-VLINE, 2 'Hrs Lost:', 13(10) IT_NOTFDATA-DURATION col_normal intensified on, 34 'Cum.Hrs:', 45(10) IT_CUMHRS_SUM-BDHRS col_normal intensified on, 56 'Cum.Frq:', (10) IT_CUMHRS_SUM-FRQ col_normal intensified on, 80 SY-VLINE, /1 SY-VLINE, 2 'YrCum.Hrs:', 13(10) IT_YCF-BDHRS l_normal intensified on, 34 'YrCum.Frq:', 45(10) IT_YCF-FRQ l_normal intensified on, 80 SY-VLINE. write:/(80) SY-ULINE. **&-------------------------Observation---------------------------------------------------&* H_OBJNR = IT_NOTFDATA-QMNUM. select single * from STXH where TDOBJECT = 'ZPMWHY' and TDNAME = H_OBJNR and TDID = 'ZPM1' left-justified color left-justified color left-justified color

left-justified color co left-justified color co

and TDSPRAS = 'E'. if SY-SUBRC = 0. call function 'READ_TEXT' exporting ID = 'ZPM1' LANGUAGE = 'E' NAME = H_OBJNR OBJECT = 'ZPMWHY' tables LINES = IT_OB. else. perform F_APPEND_SHORTTEXT tables IT_OB using IT_NOTFDATA-QMNUM L_OB. endif. write:/1 SY-VLINE, 2(76) 'Observation' centered color col_heading intensified on, 80 SY-VLINE. write:/(80) SY-ULINE. delete adjacent duplicates from IT_OB. loop at IT_OB. write:/1 SY-VLINE, 2 IT_OB-TDLINE, 80 SY-VLINE. endloop. write:/(80) SY-ULINE. **&-------------------------Possible Reasons----------------------------------------------&* write:/1 SY-VLINE, 2 ' Group' color col_heading , 10 SY-VLINE , 11(20) 'Cause codeText' centered color col_heading , 31 SY-VLINE, 32(38) 'Pos.Reason' centered color col_heading , 71 SY-VLINE, 72 'yes/no' color col_heading, 80 SY-VLINE. write:/(80) SY-ULINE. loop at IT_CAUSE_CODE where QMNUM = IT_NOTFDATA-QMNUM. write:/1 SY-VLINE, 2 IT_CAUSE_CODE-URGRP, 10 SY-VLINE , 11 IT_CAUSE_CODE-CTEXT1+0(20), 31 SY-VLINE, 32 IT_CAUSE_CODE-CTEXT, 71 SY-VLINE, 72 IT_CAUSE_CODE-FLAG, 80 SY-VLINE, /1 SY-VLINE, 10 SY-VLINE , 11 IT_CAUSE_CODE-CTEXT1+20(20), 31 SY-VLINE, 32 it_cause_code-ctext+19(20), 71 SY-VLINE, 80 SY-VLINE. endloop. write:/(80) SY-ULINE. **&-------------------------Why Analysis---------------------------------------------------&* select single * from STXH where TDOBJECT = 'ZPMWHY' and TDNAME = H_OBJNR

and TDID = 'ZPM2' and TDSPRAS = 'E'. if SY-SUBRC = 0. call function 'READ_TEXT' exporting ID = 'ZPM2' LANGUAGE = 'E' NAME = H_OBJNR OBJECT = 'ZPMWHY' tables LINES = IT_WHY. else. perform F_APPEND_SHORTTEXT tables IT_WHY using IT_NOTFDATA-QMNUM L_WHY. endif. write:/1 SY-VLINE, 2(76) 'Why Why Analysis' centered color col_heading intensified on, 80 SY-VLINE. write:/(80) SY-ULINE. delete adjacent duplicates from IT_WHY. loop at IT_WHY. write:/1 SY-VLINE, 2 IT_WHY-TDLINE, 80 SY-VLINE. endloop. write:/(80) SY-ULINE. **&-------------------------Rectifications---------------------------------------------------&* select single * from STXH where TDOBJECT = 'ZPMWHY' and TDNAME = H_OBJNR and TDID = 'ZPM3' and TDSPRAS = 'E'. if SY-SUBRC = 0. call function 'READ_TEXT' exporting ID = 'ZPM3' LANGUAGE = 'E' NAME = H_OBJNR OBJECT = 'ZPMWHY' tables LINES = IT_RC. else. perform F_APPEND_SHORTTEXT tables IT_RC using IT_NOTFDATA-QMNUM L_RC. endif. write:/1 SY-VLINE, 2(76) 'Rectifications' centered color col_heading intensified on, 80 SY-VLINE. write:/(80) SY-ULINE. delete adjacent duplicates from IT_RC. loop at IT_RC. write:/1 SY-VLINE, 2 IT_RC-TDLINE,

80 SY-VLINE. endloop. write:/(80) SY-ULINE. **&-------------------------Recommendations-------------------------------------------------&* *Begin of changes by psao 01/04/09 * SELECT SINGLE * FROM stxh * WHERE * tdobject = 'ZPMWHY' * AND tdname = h_objnr * AND tdid = 'ZPM4' * AND tdspras = 'E'. * IF sy-subrc = 0. * * CALL FUNCTION 'READ_TEXT' * EXPORTING * id = 'ZPM4' * language = 'E' * name = h_objnr * object = 'ZPMWHY' * TABLES * lines = it_rm. * ELSE. * PERFORM f_append_shorttext TABLES it_rm USING it_notfdata-qmnum l_rm. * ENDIF. perform F_APPEND_SHORTTEXT tables IT_RM using IT_NOTFDATA-QMNUM L_RM. *End of changes by psao 01/04/09 write:/1 SY-VLINE, 2(76) 'Recommendations 1' centered color col_heading intensified on, 80 SY-VLINE. write:/(80) SY-ULINE. delete adjacent duplicates from IT_RM. loop at IT_RM where TDFORMAT = 'RM'. write:/1 SY-VLINE, 2 IT_RM-TDLINE, 80 SY-VLINE. endloop. write:/(80) SY-ULINE. *&--START OF CHANGE BY NPANDEY write:/1 SY-VLINE, 2(76) 'Recommendations 2' centered color col_heading intensified on, 80 SY-VLINE. write:/(80) SY-ULINE. loop at IT_RM where TDFORMAT = 'R2'. write:/1 SY-VLINE, 2 IT_RM-TDLINE, 80 SY-VLINE. endloop. write:/(80) SY-ULINE. write:/1 SY-VLINE, 2(76) 'Recommendations 3' centered color col_heading intensified on, 80 SY-VLINE.

write:/(80) SY-ULINE. loop at IT_RM where TDFORMAT = 'R3'. write:/1 SY-VLINE, 2 IT_RM-TDLINE, 80 SY-VLINE. endloop. write:/(80) SY-ULINE. *&--END OF CHANGE BY NPANDEY **&-------------------------Footer-------------------------------------------------&* read table IT_COSS with key OBJNR = IT_NOTFDATA-OBJNR. read table IT_COSP with key OBJNR = IT_NOTFDATA-OBJNR. L_COST = IT_COSS-COST1 + IT_COSP-COST2. *Begin of changes by psao 01/04/09 * WRITE:/1 sy-vline, * 2 'Resper1:', 10 sy-vline, it_notfdata-erlnam, * 40 'Resper2:', 50 sy-vline, it_notfdata-ernam, * 80 sy-vline. write:/1 SY-VLINE, 2 'Res Pers1', 10 SY-VLINE, IT_NOTFDATA-ERLNAM, 24 SY-VLINE, 25 'Res Pers2:', 35 SY-VLINE, IT_NOTFDATA-ERNAM, 49 SY-VLINE, 50 'Res Pers3:', 60 SY-VLINE, IT_NOTFDATA-AENAM, 80 SY-VLINE. *End of changes by psao 01/04/09 write:/(80) SY-ULINE. *Begin of changes by psao 01/04/09 * WRITE:/1 sy-vline, * 2 'TgtDate:', 10 sy-vline, it_notfdata-erldat, 80 sy-vline. write:/1 SY-VLINE, 2 'Targ Dt1', 10 SY-VLINE, IT_NOTFDATA-ERLDAT, 24 SY-VLINE, 25 'Targ Dt2', 35 SY-VLINE, IT_NOTFDATA-PETER, 49 SY-VLINE, 50 'Targ Dt3', 60 SY-VLINE, IT_NOTFDATA-WDVDAT, 80 SY-VLINE. *End of changes by psao 01/04/09 write:/(80) SY-ULINE. clear:IT_OB, IT_WHY, IT_CAUSE_CODE, IT_RC, IT_RM. clear: L_COST, IT_COSS, IT_COSP. refresh: IT_OB, IT_WHY, IT_RC, IT_RM. write:/(80)' .' color 6. endloop. endform. " f_write_data *&---------------------------------------------------------------------* *& Form f_select_yearly_frq *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text

*----------------------------------------------------------------------* form F_SELECT_YEARLY_FRQ . data: L_DATE1 like SY-DATUM, L_DATE2 like SY-DATUM, L_YEAR(4), "Date from selection option L_YEAR1(4), " year start L_YEAR2(4), " year End L_YEAR3 type I, " year start L_YEAR4 type I, " year End L_MONTH type I. clear: L_YEAR, L_YEAR1, L_YEAR2, L_YEAR3, L_YEAR4, L_DATE1, L_DATE2. L_YEAR = S_DATE-LOW+0(4). clear: L_MONTH. L_MONTH = S_DATE-LOW+4(2). if L_MONTH = 1 or L_MONTH = 2 or L_MONTH = 3 . L_YEAR3 = L_YEAR - 1. L_YEAR1 = L_YEAR3. L_YEAR2 = L_YEAR. concatenate L_YEAR1 '04' '01' into L_DATE1. concatenate L_YEAR2 '03' '31' into L_DATE2. else. L_YEAR3 = L_YEAR + 1. L_YEAR1 = L_YEAR. L_YEAR2 = L_YEAR3. concatenate L_YEAR1 '04' '01' into L_DATE1. concatenate L_YEAR2 '03' '31' into L_DATE2. endif.

select QMNUM EQUNR AUSZT into corresponding fields of table IT_FRQYEAR from VIQMEL where QMART = C_QMART and AUSVN between L_DATE1 and L_DATE2 and IWERK eq P_WERK and MSAUS = 'X' and AUSZT > 0. loop at IT_FRQYEAR. select QMNUM FECOD into corresponding fields of IT_DMYEAR from VIQMFE where QMNUM eq IT_FRQYEAR-QMNUM. if SY-SUBRC = 0. IT_DMYEAR-BDHRS = IT_FRQYEAR-AUSZT / 3600. IT_DMYEAR-EQUNR = IT_FRQYEAR-EQUNR. IT_DMYEAR-FRQ = 1. append IT_DMYEAR. endif. endselect. endloop. sort IT_DMYEAR by EQUNR FECOD. loop at IT_DMYEAR. at new FECOD. sum.

IT_YCF-EQUNR = IT_YCF-BDHRS = IT_YCF-FRQ = IT_YCF-FECOD = append IT_YCF. endat. endloop.

IT_DMYEAR-EQUNR. IT_DMYEAR-BDHRS. IT_DMYEAR-FRQ. IT_DMYEAR-FECOD.

endform. " f_select_yearly_frq *&---------------------------------------------------------------------* *& Form f_append_shorttext *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_IT_OB text * -->P_IT_NOTFDATA_QMNUM text * -->P_1969 text *----------------------------------------------------------------------* form F_APPEND_SHORTTEXT tables P_IT structure IT_OB using P_QMNUM like VIQMEL-QMNUM P_TEXT like ZTPM_WHYWHYANS-ZZ_LINE. clear P_IT. refresh P_IT. clear IT_ZDESC. read table IT_ZDESC with key ZZ_QMNUM = P_QMNUM ZZ_LINE = P_TEXT. if P_TEXT = 'RM'. P_IT-TDFORMAT = 'RM'. endif. P_IT-TDLINE = IT_ZDESC-ZZ_LINE1. append P_IT. P_IT-TDLINE = IT_ZDESC-ZZ_LINE2. append P_IT. */ Start of change by Shweta Dwivedi 13-May-2010 GRDK930312 P_IT-TDLINE = IT_ZDESC-ZZ_LINE3. append P_IT. */ End of change by Shweta Dwivedi 13-May-2010 GRDK930312 *Begin of changes by psao dated 01/04/09 * p_it-tdline = it_zdesc-zz_line3. * APPEND p_it. * * p_it-tdline = it_zdesc-zz_line4. * APPEND p_it. if not P_TEXT = 'RM'. P_IT-TDLINE = IT_ZDESC-ZZ_LINE3. append P_IT. P_IT-TDLINE = IT_ZDESC-ZZ_LINE4. append P_IT. else. clear IT_ZDESC. read table IT_ZDESC with key ZZ_QMNUM = P_QMNUM ZZ_LINE = 'R2'. P_IT-TDFORMAT = 'R2'. P_IT-TDLINE = IT_ZDESC-ZZ_LINE1. append P_IT. */ Start of change by Shweta Dwivedi 13-May-2010 GRDK930312 P_IT-TDLINE = IT_ZDESC-ZZ_LINE2. append P_IT.

P_IT-TDLINE = IT_ZDESC-ZZ_LINE3. append P_IT. */ End of change by Shweta Dwivedi 13-May-2010 GRDK930312 clear IT_ZDESC. read table IT_ZDESC with key ZZ_QMNUM = P_QMNUM ZZ_LINE = 'R3'. P_IT-TDFORMAT = 'R3'. P_IT-TDLINE = IT_ZDESC-ZZ_LINE1. append P_IT. */ Start of change by Shweta Dwivedi 13-May-2010 GRDK930312 P_IT-TDLINE = IT_ZDESC-ZZ_LINE2. append P_IT. P_IT-TDLINE = IT_ZDESC-ZZ_LINE3. append P_IT. */ End of change by Shweta Dwivedi 13-May-2010 GRDK930312 endif. *End of changes by psao dated 01/04/09 endform. " f_append_shorttext *&---------------------------------------------------------------------* *& Form GET_JOB_DETAILS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM GET_JOB_DETAILS . CALL FUNCTION 'GET_JOB_RUNTIME_INFO' IMPORTING eventid eventparm = gd_eventid = gd_eventparm

external_program_active = gd_external_program_active jobcount jobname stepcount EXCEPTIONS no_runtime_info OTHERS = 1 = 2. = gd_jobcount = gd_jobname = gd_stepcount

ENDFORM. " GET_JOB_DETAILS *&---------------------------------------------------------------------* *& Form OBTAIN_SPOOL_ID *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------*

FORM OBTAIN_SPOOL_ID . CHECK NOT ( gd_jobname IS INITIAL ). CHECK NOT ( gd_jobcount IS INITIAL ).

SELECT * FROM tbtcp INTO TABLE it_tbtcp WHERE AND AND AND ORDER BY jobname jobcount stepcount listident jobname jobcount stepcount. = gd_jobname = gd_jobcount = gd_stepcount <> '0000000000'

READ TABLE it_tbtcp INTO wa_tbtcp INDEX 1. IF sy-subrc = 0. message s004(zdd) with gd_spool_nr. gd_spool_nr = wa_tbtcp-listident. MESSAGE s004(zdd) WITH gd_spool_nr. ELSE. MESSAGE s005(zdd). ENDIF. ENDFORM. " OBTAIN_SPOOL_ID *&---------------------------------------------------------------------* *& Form CONVERT_SPOOL_TO_PDF *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM CONVERT_SPOOL_TO_PDF . CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF' EXPORTING src_spoolid = SPNO no_dialog = c_no dst_device = c_device IMPORTING

pdf_bytecount TABLES pdf EXCEPTIONS err_no_abap_spooljob err_no_spooljob err_no_permission err_conv_not_possible err_bad_destdevice user_cancelled err_spoolerror err_temseerror err_btcjob_open_failed err_btcjob_submit_failed err_btcjob_close_failed OTHERS *

= gd_bytecount = it_pdf_output = = = = = = = = = = = = 1 2 3 4 5 6 7 8 9 10 11 12.

CHECK sy-subrc = 0. Transfer the 132-long strings to 255-long strings LOOP AT it_pdf_output. TRANSLATE it_pdf_output USING ' ~'. CONCATENATE gd_buffer it_pdf_output INTO gd_buffer. ENDLOOP. TRANSLATE gd_buffer USING '~ '. DO. it_mess_att = gd_buffer. APPEND it_mess_att. SHIFT gd_buffer LEFT BY 255 PLACES. IF gd_buffer IS INITIAL. EXIT. ENDIF. ENDDO.

ENDFORM. " CONVERT_SPOOL_TO_PDF *&---------------------------------------------------------------------* *& Form PROCESS_EMAIL *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM PROCESS_EMAIL . DESCRIBE TABLE it_mess_att LINES gd_recsize. CHECK gd_recsize > 0. PERFORM send_email USING p_email. ENDFORM. " PROCESS_EMAIL *&---------------------------------------------------------------------* *& Form SEND_EMAIL *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_P_EMAIL1 text *----------------------------------------------------------------------*

FORM SEND_EMAIL USING

P_P_EMAIL1.

CHECK NOT ( p_email IS INITIAL ). REFRESH it_mess_bod. * Default subject matter gd_subject = 'Subject'. gd_attachment_desc = 'Attachname'. * CONCATENATE 'attach_name' ' ' INTO gd_attachment_name. it_mess_bod = 'Message Body text, line 1'. APPEND it_mess_bod. it_mess_bod = 'Message Body text, line 2...'. APPEND it_mess_bod. * If no sender specified - default blank IF p_sender EQ space. gd_sender_type = space. ELSE. gd_sender_type = 'INT'. ENDIF. * Send file by email as .xls speadsheet

PERFORM send_file_as_email_attachment tables it_mess_bod it_mess_att using p_email 'Example .xls documnet attachment' 'PDF' gd_attachment_name gd_attachment_desc p_sender gd_sender_type changing gd_error gd_reciever. ENDFORM. " SEND_EMAIL *&---------------------------------------------------------------------* *& Form SEND_FILE_AS_EMAIL_ATTACHMENT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_IT_MESS_BOD text * -->P_IT_MESS_ATT text * -->P_P_EMAIL text * -->P_3261 text * -->P_3262 text * -->P_GD_ATTACHMENT_NAME text * -->P_GD_ATTACHMENT_DESC text * -->P_P_SENDER text * -->P_GD_SENDER_TYPE text * <--P_GD_ERROR text * <--P_GD_RECIEVER text *----------------------------------------------------------------------* FORM SEND_FILE_AS_EMAIL_ATTACHMENT TABLES it_message

it_attach using p_email 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. 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.

ld_email = p_email. ld_mtitle = p_mtitle. ld_format ld_attdescription ld_attfilename ld_sender_address ld_sender_address_type *

= = = = =

p_format. p_attdescription. p_filename. p_sender_address. 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[] = it_attach[]. * Describe the body of the message CLEAR t_packing_list. REFRESH t_packing_list. t_packing_list-transf_bin t_packing_list-head_start t_packing_list-head_num = t_packing_list-body_start = space. = 1. 0. = 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 t_packing_list-head_start t_packing_list-head_num t_packing_list-body_start = = = = 'X'. 1. 1. 1.

DESCRIBE TABLE t_attachment LINES t_packing_list-body_num. t_packing_list-doc_type t_packing_list-obj_descr t_packing_list-obj_name t_packing_list-doc_size APPEND t_packing_list. * = = = = ld_format. ld_attdescription. ld_attfilename. t_packing_list-body_num * 255.

Add the recipients email address CLEAR t_receivers. REFRESH t_receivers. t_receivers-receiver = ld_email. t_receivers-rec_type = 'B'. 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 put_in_outbox sender_address sender_address_type commit_work IMPORTING sent_to_all TABLES = = = = = w_doc_data 'X' ld_sender_address ld_sender_address_type 'X'

= w_sent_all

packing_list contents_bin contents_txt receivers EXCEPTIONS too_many_receivers document_not_sent document_type_not_exist operation_no_authorization parameter_error x_error enqueue_error OTHERS * Populate zerror return code ld_error = sy-subrc. * Populate zreceiver return code

= = = = = = = = = = = =

t_packing_list t_attachment it_message t_receivers 1 2 3 4 5 6 7 8.

LOOP AT t_receivers. ld_receiver = t_receivers-retrn_code. ENDLOOP. ENDFORM. " SEND_FILE_AS_EMAIL_ATTACHMENT *&---------------------------------------------------------------------* *& Form SPOOL_NO *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM SPOOL_NO . DATA: L_PARAMS TYPE PRI_PARAMS, L_VALID TYPE STRING, W_SPOOL_NR LIKE TSP01-RQIDENT. * TO GET PRINT PARAMETERS * CALL FUNCTION 'GET_PRINT_PARAMETERS' * IMPORTING * OUT_PARAMETERS = L_PARAMS * VALID = L_VALID. * IF SY-SUBRC <> 0. * ENDIF. CALL FUNCTION 'SET_PRINT_PARAMETERS' EXPORTING layout = 'X_65_80'. * line_count = 64 * line_size = 140. * Internal table for Selection Screen DATA: BEGIN OF I_RSPARAMS OCCURS 0. INCLUDE STRUCTURE RSPARAMS. DATA: END OF I_RSPARAMS. * Store the current selection screen details CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS' EXPORTING CURR_REPORT = SY-REPID *IMPORTING * SP =

TABLES SELECTION_TABLE = I_RSPARAMS *EXCEPTIONS * NOT_FOUND = 1 * NO_REPORT = 2 * OTHERS = 3 . IF SY-SUBRC <> 0. *MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. *SUBMIT TO GET THE SPOOL NUMBER *IF SY-TABIX = '0'. *SUBMIT ZRPM_WHYWHY_A4_NEW WITH SELECTION-TABLE I_RSPARAMS * TO SAP-SPOOL * SPOOL PARAMETERS L_PARAMS * WITHOUT SPOOL DYNPRO * AND RETURN. *ENDIF. * SELECT THE RECENTLY CREATED SPOOL SELECT MAX( RQIDENT ) INTO W_SPOOL_NR FROM TSP01 WHERE RQCLIENT = SY-MANDT AND RQOWNER = SY-UNAME. SPNO = W_SPOOL_NR. ENDFORM. " SPOOL_NO

You might also like