Escalation & sending external Mail (outlook)

Dart, Jocelyn jocelyn.dart at sap.com
Fri May 27 00:57:08 EDT 2005


Wow Jim!  
 
What a lot of work you went to... an impressive bit of calculating. 
 
However you could have saved some time by using the standard factory
calendar config and function module END_TIME_DETERMINE.
 
If you want to know whether a day is a working day or not the function
module DAY_ATTRIBUTES_GET is another good one to know. 
 
Might save you some work next time...
 
Regards,
Jocelyn 


________________________________

	From: sap-wug-bounces at mit.edu [mailto:sap-wug-bounces at mit.edu]
On Behalf Of Hall, Jim
	Sent: Wednesday,25 May 2005 11:03 PM
	To: sap-wug at mit.edu
	Subject: RE: Escalation & sending external Mail (outlook)
	
	
	Gopi:
	 
	 I have a method, with a function module that I use to calculate
a wait of 5 working days.
	 
	Here is the method info and the function module.
	 
	Hope it helps
	 
	Jim Hall 
	Systems Analyst
	Fortis Alberta Inc.
	Information Technology 
	 

	 
	 BEGIN_METHOD ZCALC5WORKDAYS CHANGING CONTAINER.    
	DATA:                                              
	      TIME LIKE SYST-UZEIT,                        
	      DATE LIKE SYST-DATUM.                        
	                                                   
	Data: w_date type syst-datum,                      
	      W_WORKDAYS TYPE PA2001-ABWTG.                
	                                                   
	  GEt time.                                        
	  TIME = SY-UZEIT.                                 
	  W_DATE = SY-DATUM + 7.                           
	                                                   
	 DO.                                               
	   CALL FUNCTION 'Z_CALENDAR_CALCULATE_DAYS'       
	     EXPORTING                                     
	      IDENT                          = 'CA'        
	       START_DATE                     = SY-DATUM   
	       END_DATE                       = W_DATE     
	   IMPORTING                                       
	     WORKDAYS                       = W_WORKDAYS.  
	                                                   
	                                                   
	   IF W_WORKDAYS => 6.                             
	      EXIT.                                        
	   ENDIF.                                          
	   W_DATE = W_DATE + 1.                           
	 ENDDO.                                           
	                                                  
	 DATE = W_DATE.                                   
	                                                  
	  SWC_SET_ELEMENT CONTAINER 'Time' TIME.          
	  SWC_SET_ELEMENT CONTAINER 'Date' DATE.          
	END_METHOD.                                       
	
	 
	Function module is as follows
	FUNCTION Z_CALENDAR_CALCULATE_DAYS.

	
*"----------------------------------------------------------------------

	*"*"Local interface:

	*"       IMPORTING

	*"             VALUE(IDENT) LIKE  TFACD-IDENT

	*"             VALUE(START_DATE) LIKE  SY-DATUM

	*"             VALUE(END_DATE) LIKE  SY-DATUM

	*"       EXPORTING

	*"             VALUE(WORKDAYS) LIKE  PA2001-ABWTG

	*"             VALUE(HOLIDAYS) LIKE  PA2001-ABWTG

	*"       EXCEPTIONS

	*"              INVALID_RANGE

	*"              CALENDAR_RANGE_NOT_FOUND

	
*"----------------------------------------------------------------------

	 

	
*$*$-------------------------------------------------------------------*

	*$*$ Function Module calculates the number of Workdays and the
number  *

	*$*$ of holidays for the specified calendar within the period
provided *

	
*$*$-------------------------------------------------------------------*

	 

	RANGES: LR_JAHR FOR TFACS-JAHR.

	 

	FIELD-SYMBOLS: <MONTH>.

	 

	DATA: LT_TFACS LIKE TFACS OCCURS 0 WITH HEADER LINE,

	      L_START_MONTH(2) TYPE N,

	      L_START_YEAR(4) TYPE N,

	      L_START_DAY(2) TYPE N,

	      L_END_MONTH(2) TYPE N,

	      L_END_YEAR(4) TYPE N,

	      L_END_DAY(2) TYPE N,

	      L_START_FLD TYPE I,

	      L_END_FLD TYPE I,

	      L_TIMES TYPE I,

	      L_MONTH(2) TYPE N,

	      L_NUM_DAYS TYPE I,

	      L_DAY TYPE I.

	 

	IF START_DATE > END_DATE.

	  RAISE INVALID_RANGE.

	ENDIF.

	 

	* Determine the years for the specified period

	MOVE: 'I'             TO LR_JAHR-SIGN,

	      'BTW'           TO LR_JAHR-OPTION.

	WRITE START_DATE+0(4) TO LR_JAHR-LOW.

	IF START_DATE+0(4) NE END_DATE+0(4).

	  WRITE END_DATE+0(4) TO LR_JAHR-HIGH.

	ELSE.

	  WRITE START_DATE+0(4) TO LR_JAHR-HIGH.

	ENDIF.

	APPEND LR_JAHR.

	 

	* Get the entries for the specified Calendar/Years

	SELECT * INTO TABLE LT_TFACS

	       FROM TFACS

	            WHERE IDENT EQ IDENT

	              AND JAHR  IN LR_JAHR.

	IF SY-SUBRC NE 0.

	  RAISE CALENDAR_RANGE_NOT_FOUND.

	ENDIF.

	 

	* Separate Dates into Component Parts

	WRITE: START_DATE+0(4) TO L_START_YEAR,

	       START_DATE+4(2) TO L_START_MONTH,

	       START_DATE+6(2) TO L_START_DAY,

	       END_DATE+0(4)   TO L_END_YEAR,

	       END_DATE+4(2)   TO L_END_MONTH,

	       END_DATE+6(2)   TO L_END_DAY.

	 

	* For each year retrieved within TFACS, calculate the number of
days

	* per month (for the specified period).

	LOOP AT LT_TFACS.

	  IF LT_TFACS-JAHR EQ L_START_YEAR.

	    L_START_FLD = L_START_MONTH + 2.

	  ELSE.

	    L_START_FLD = 3.

	  ENDIF.

	  IF LT_TFACS-JAHR EQ L_END_YEAR.

	    L_END_FLD = L_END_MONTH + 2.

	  ELSE.

	    L_END_FLD = 14.

	  ENDIF.

	  L_TIMES = L_END_FLD - L_START_FLD + 1.

	  DO L_TIMES TIMES.

	* Get current Month

	    ASSIGN COMPONENT L_START_FLD OF STRUCTURE LT_TFACS TO
<MONTH>.

	    ADD 1 TO L_START_FLD.

	    L_MONTH = L_START_FLD - 3.

	* <month> now contains the factory calendar for the current
month

	 

	* When start and End date fall in same month

	    IF ( LT_TFACS-JAHR EQ L_START_YEAR ) AND

	       ( LT_TFACS-JAHR EQ L_END_YEAR ) AND

	       ( L_MONTH       EQ L_START_MONTH ) AND

	       ( L_MONTH       EQ L_END_MONTH ).

	      L_NUM_DAYS = ( STRLEN( <MONTH> ) - L_START_DAY ) -

	                   ( STRLEN( <MONTH> ) - L_END_DAY ) + 1.

	      L_DAY = L_START_DAY - 1.

	* When current month is the same as the start month

	    ELSEIF ( LT_TFACS-JAHR EQ L_START_YEAR ) AND

	           ( L_MONTH       EQ L_START_MONTH ).

	      L_NUM_DAYS = STRLEN( <MONTH> ) - L_START_DAY + 1.

	      L_DAY = L_START_DAY - 1.

	* When current month is the same as the end month

	    ELSEIF ( LT_TFACS-JAHR EQ L_END_YEAR ) AND

	           ( L_MONTH       EQ L_END_MONTH ).

	      L_NUM_DAYS = L_END_DAY.

	      L_DAY = 0.

	* For all other Months

	    ELSE.

	      L_NUM_DAYS = STRLEN( <MONTH> ).

	      L_DAY = 0.

	    ENDIF.

	    PERFORM CALCULATE_DAYS USING L_NUM_DAYS

	                                 L_DAY

	                                 <MONTH>

	                           CHANGING WORKDAYS

	                                    HOLIDAYS.

	  ENDDO.

	 

	ENDLOOP.

	 

	ENDFUNCTION.

	 

	
*&---------------------------------------------------------------------*

	*&      Form  CALCULATE_DAYS

	
*&---------------------------------------------------------------------*

	*       text

	
*----------------------------------------------------------------------*

	*      -->P_NUM_DAYS  text
*

	*      -->P_START_DAY text
*

	*      -->P_MONTH     text
*

	*      <--P_WORKDAYS  text
*

	*      <--P_HOLIDAYS  text
*

	
*----------------------------------------------------------------------*

	FORM CALCULATE_DAYS USING    P_NUM_DAYS  TYPE I

	                             P_START_DAY TYPE I

	                             P_MONTH     LIKE TFACS-MON01

	                    CHANGING P_WORKDAYS  LIKE PA2001-ABWTG

	                             P_HOLIDAYS  LIKE PA2001-ABWTG.

	 

	  DATA: L_X(1),

	        L_START_DAY TYPE I.

	 

	  MOVE P_START_DAY TO L_START_DAY.

	 

	  DO P_NUM_DAYS TIMES.

	    MOVE P_MONTH+L_START_DAY(1) TO L_X.

	    IF L_X EQ '1'.

	      ADD 1 TO P_WORKDAYS.

	    ELSEIF L_X EQ '0'.

	      ADD 1 TO P_HOLIDAYS.

	    ENDIF.

	    ADD 1 TO L_START_DAY.

	  ENDDO.

	 

	ENDFORM.                    " CALCULATE_DAYS

	 

	 


________________________________

	From: sap-wug-bounces at mit.edu [mailto:sap-wug-bounces at mit.edu]
On Behalf Of Gopinath Addepalli Prasad
	Sent: May 24, 2005 10:38 PM
	To: sap-wug at mit.edu
	Subject: Escalation & sending external Mail (outlook)
	
	
	Hi,
	 
	   Could any one tell me how to find the day as a working day
for giving reminder to the 
	   approver to approve ?
	 
	    Could any one tell me how to send the external mail
(outlook) from the task approved to request creator..?
	 
	   Thier help is greatly appriciated.
	 
	Regards,
	Gopi.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.mit.edu/pipermail/sap-wug/attachments/20050527/a968752d/attachment.htm


More information about the SAP-WUG mailing list