Thursday, June 4, 2015

Bank Guarantee Reminder Email



PROGRAM FOR BANK GUARANTEE REMINDER EMAIL AND DISPLAY THE LIST
*&---------------------------------------------------------------------*
*& REPORT  ZBG_EMAIL_REMIND
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZBG_EMAIL_REMIND.

TYPE-POOLS SLIS.

PARAMETERSZFBDT TYPE BSEG-ZFBDT.
PARAMETERS DISPLAY AS CHECKBOX.
PARAMETERS EMAIL AS CHECKBOX.

*ALV DATA DECLARATIONS
DATAFIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      GD_TAB_GROUP 
TYPE SLIS_T_SP_GROUP_ALV,
      GD_LAYOUT    
TYPE SLIS_LAYOUT_ALV,
      GD_REPID     
LIKE SY-REPID,
      GT_EVENTS     
TYPE SLIS_T_EVENT,
      GD_PRNTPARAMS 
TYPE SLIS_PRINT_ALV.

DATAITAB TYPE STANDARD TABLE OF ZBG_EMAIL_REMIND WITH HEADER LINE.

DATAIT_BSIK TYPE STANDARD TABLE OF ZBG_EMAIL_REMIND WITH HEADER LINE.
DATAWA_BSIK LIKE LINE OF IT_BSIK.

TYPESBEGIN OF ST,
        LIFNR 
TYPE BSAK-LIFNR,
       
END OF ST.

DATAIT_LIFNR TYPE TABLE OF ST WITH HEADER LINE ,
      WA_LIFNR 
LIKE LINE OF IT_LIFNR.

DATAV_GJAHR TYPE GJAHR.

IF ZFBDT IS INITIAL.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
  
EXPORTING
    
DATE      SY-DATUM
    DAYS      
0
    MONTHS    
1
    SIGNUM    
'+'
    YEARS     
0
  
IMPORTING
    CALC_DATE 
ZFBDT.
ENDIF.

SELECT INTO CORRESPONDING FIELDS OF WA_BSIK
FROM BSIK WHERE
  BUKRS 
'YOUR COMPANY CODE' AND
  ZFBDT 
ZFBDT AND
  BSCHL 
'39' AND
  UMSKZ 
IN ('E').

  
APPEND WA_BSIK TO IT_BSIK.
ENDSELECT.

LOOP AT IT_BSIK INTO WA_BSIK.

  
IF WA_BSIK-UMSKZ EQ 'E'.
    WA_BSIK
-BLART 'BANK GUARANTEE'.
  
ENDIF.

  
CALL FUNCTION 'DATE_TO_PERIOD_CONVERT'
    
EXPORTING
      I_DATE  
WA_BSIK-BUDAT
      I_PERIV 
'V3'    "Your Fiscal Year Variant
    
IMPORTING
      E_GJAHR 
V_GJAHR.

  WA_BSIK
-GJAHR V_GJAHR.

  
SELECT USNAM INTO CORRESPONDING FIELDS OF WA_BSIK FROM BKPF WHERE
    BELNR 
WA_BSIK-BELNR AND
    GJAHR 
V_GJAHR AND
    BUKRS 
'RCFL'.
  
ENDSELECT.

  
"QUERY FOR EMAIL
  
SELECT SINGLE USRID INTO WA_BSIK-USEREMAIL FROM PA0105 WHERE
    PERNR 
WA_BSIK-USNAM AND
    USRTY 
'08' AND
    ENDDA 
'99991231'.

  
"QUERY FOR NAME
  
SELECT VORNA NACHN FROM PA0002 INTO CORRESPONDING FIELDS OF WA_BSIK WHERE
    ENDDA 
EQ '99991231' AND
    PERNR 
WA_BSIK-USNAM.
  
ENDSELECT.

  
SELECT NAME1 INTO CORRESPONDING FIELDS OF WA_BSIK FROM LFA1 WHERE
    LIFNR 
WA_BSIK-LIFNR.
  
ENDSELECT.

  
MODIFY IT_BSIK FROM WA_BSIK.
  
APPEND WA_BSIK TO ITAB.
ENDLOOP.

SORT ITAB BY LIFNR BELNR.
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING ALL FIELDS.

IF EMAIL 'X'.
  
PERFORM SENDMAIL.
ENDIF.

IF DISPLAY EQ 'X'.
  
PERFORM BUILD_FIELDCATALOG.
  
PERFORM BUILD_LAYOUT.
  
PERFORM DISPLAY_ALV_REPORT.
ENDIF.

FORM BUILD_FIELDCATALOG .
  FIELDCATALOG
-FIELDNAME   'LIFNR'.
  FIELDCATALOG
-SELTEXT_M   'Vendor'.
  FIELDCATALOG
-COL_POS     1.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   'NAME1'.
  FIELDCATALOG
-SELTEXT_M   'Vendor Name'.
  FIELDCATALOG
-COL_POS     2.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   'BELNR'.
  FIELDCATALOG
-SELTEXT_M   'Document Number'.
  FIELDCATALOG
-COL_POS     3.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   'BUDAT'.
  FIELDCATALOG
-SELTEXT_M   'Posting Date'.
  FIELDCATALOG
-COL_POS     4.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   'GJAHR'.
  FIELDCATALOG
-SELTEXT_M   'Fiscal Year'.
  FIELDCATALOG
-COL_POS     5.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   'ZFBDT'.
  FIELDCATALOG
-SELTEXT_M   'Due Date'.
  FIELDCATALOG
-COL_POS     6.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   'WRBTR'.
  FIELDCATALOG
-SELTEXT_M   'Amount in Document Currency'.
  FIELDCATALOG
-COL_POS     7.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   'DMBTR'.
  FIELDCATALOG
-SELTEXT_M   'Amount in Local Currency'.
  FIELDCATALOG
-COL_POS     8.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   'BLART'.
  FIELDCATALOG
-SELTEXT_M   'Document Type'.
  FIELDCATALOG
-COL_POS     9.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   'UMSKZ'.
  FIELDCATALOG
-SELTEXT_M   'Special G/L Indicator'.
  FIELDCATALOG
-COL_POS     10.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   'ZUONR'.
  FIELDCATALOG
-SELTEXT_M   'Assignment Number'.
  FIELDCATALOG
-COL_POS     11.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   'SGTXT'.
  FIELDCATALOG
-SELTEXT_M   'Item Text'.
  FIELDCATALOG
-COL_POS     12.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   'USNAM'.
  FIELDCATALOG
-SELTEXT_M   'User'.
  FIELDCATALOG
-COL_POS     13.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   'USEREMAIL'.
  FIELDCATALOG
-SELTEXT_M   'Email'.
  FIELDCATALOG
-COL_POS     14.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   'VORNA'.
  FIELDCATALOG
-SELTEXT_M   'First Name'.
  FIELDCATALOG
-COL_POS     15.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   'NACHN'.
  FIELDCATALOG
-SELTEXT_M   'Last Name'.
  FIELDCATALOG
-COL_POS     16.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

ENDFORM.                    " BUILD_FIELDCATALOG

FORM BUILD_LAYOUT .
GD_LAYOUT
-NO_INPUT          'X'.
  GD_LAYOUT
-COLWIDTH_OPTIMIZE 'X'.
  GD_LAYOUT
-TOTALS_TEXT       'TOTALS'(201).
ENDFORM.                    " BUILD_LAYOUT

FORM DISPLAY_ALV_REPORT .
GD_REPID 
SY-REPID.
  
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       
EXPORTING
            I_CALLBACK_PROGRAM      
GD_REPID
*            I_CALLBACK_TOP_OF_PAGE   = 'TOP-OF-PAGE'  "SEE FORM
            I_CALLBACK_USER_COMMAND 
'USER_COMMAND'
*            I_GRID_TITLE           = OUTTEXT
            IS_LAYOUT               
GD_LAYOUT
            IT_FIELDCAT             
FIELDCATALOG[]
*            IT_SPECIAL_GROUPS       = GD_TABGROUP
            IT_EVENTS               
GT_EVENTS
            IS_PRINT                
GD_PRNTPARAMS
            I_SAVE                  
'X'
*            IS_VARIANT              = Z_TEMPLATE
       
TABLES
            T_OUTTAB                
ITAB

       
EXCEPTIONS
            PROGRAM_ERROR           
1
            
OTHERS                  2.
  
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  
ENDIF.
ENDFORM.                    " DISPLAY_ALV_REPORT

FORM SENDMAIL.
LOOP AT IT_BSIK INTO WA_BSIK.
  
CALL FUNCTION 'ZBG_EMAIL_REMIND'
    
EXPORTING
      LV_EMP_USERID        
'SYSTEM'
      LIFNR                
WA_BSIK-LIFNR
      LIFNR_NAME           
WA_BSIK-NAME1
      LV_EMP_EMAILID       
WA_BSIK-USEREMAIL
      CREDIT               
WA_BSIK-DMBTR
      USNAM                
WA_BSIK-USNAM
      VORNA                
WA_BSIK-VORNA
      NACHN                
WA_BSIK-NACHN
      BELNR                
WA_BSIK-BELNR
      GJAHR                
WA_BSIK-GJAHR
      ZFBDT                
WA_BSIK-ZFBDT.
ENDLOOP.
ENDFORM.

FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD 
TYPE SLIS_SELFIELD.
  
CASE R_UCOMM.
    
WHEN '&IC1'.
      
IF RS_SELFIELD-FIELDNAME 'BELNR'.
        
READ TABLE ITAB INTO WA_BSIK INDEX RS_SELFIELD-TABINDEX.
        
IF SY-SUBRC 0.
          
SET PARAMETER ID 'BLN' FIELD WA_BSIK-BELNR.
          
SET PARAMETER ID 'BUK' FIELD 'YOUR COMPANY CODE'."WA_BSIK-BUKRS'.
          
SET PARAMETER ID 'GJR' FIELD WA_BSIK-GJAHR.
          
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
        
ENDIF.
      
ENDIF.
  
ENDCASE.
ENDFORM.                    "USER_COMMAND
----------------------------------------------------------------------------------------------------------------------------------------------------
FUCNTION MODULE FOR SENDING BANK GUARANTEE REMINDER EMAIL

IMPORT

LV_EMP_USERID             TYPE     FITP_USER-UNAME
LIFNR   TYPE     LIFNR
LIFNR_NAME    TYPE     NAME1
LV_EMP_EMAILID          TYPE     PA0105-USRID_LONG
CREDIT                TYPE     DMBTR
USNAM TYPE     USNAM
VORNA TYPE     VORNA
NACHN TYPE     NACHN
BELNR  TYPE     BELNR_D
ZFBDT  TYPE     BUDAT
GJAHR  TYPE     GJAHR

SOURCE CODE

FUNCTION ZBG_EMAIL_REMIND.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(LV_EMP_USERID) TYPE  FITP_USER-UNAME
*"     VALUE(LIFNR) TYPE  LIFNR
*"     VALUE(LIFNR_NAME) TYPE  NAME1
*"     VALUE(LV_EMP_EMAILID) TYPE  PA0105-USRID_LONG
*"     VALUE(CREDIT) TYPE  DMBTR
*"     VALUE(USNAM) TYPE  USNAM
*"     VALUE(VORNA) TYPE  VORNA
*"     VALUE(NACHN) TYPE  NACHN
*"     VALUE(BELNR) TYPE  BELNR_D
*"     VALUE(ZFBDT) TYPE  BUDAT
*"     VALUE(GJAHR) TYPE  GJAHR
*"----------------------------------------------------------------------

* *&Get The Email Id And User Id Whom You Want To Send  ******
  
DATA:IT_RECEIVERS    TYPE STANDARD TABLE OF  SOMLRECI1,
       WA_IT_RECEIVERS 
LIKE LINE OF IT_RECEIVERS,
       IT_PACKING_LIST 
TYPE STANDARD TABLE OF  SOPCKLSTI1,
       GD_DOC_DATA     
TYPE SODOCCHGI1,
       WA_IT_PACKING_LIST 
LIKE LINE OF  IT_PACKING_LIST,
       PSUBJECT
(90)       TYPE C,
       IT_MESSAGE         
TYPE STANDARD TABLE OF SOLISTI1,
       WA_IT_MESSAGE      
LIKE LINE OF IT_MESSAGE,
       C1
(99)    TYPE C,
       C2
(30)    TYPE C,
       C3
(45)    TYPE C,
       C4
(100)    TYPE C,
       C5
(13)    TYPE C,
       C6
(13)    TYPE C,
       C7
(13)    TYPE C,
       C8
(13)    TYPE C,
       C9
(100TYPE C,
       C10
(100TYPE C,
       C11
(100TYPE C,
       NUM_LINES 
TYPE I.

"&-- ASSIGN THE EMAIL ID AND USER ID TO  WHOM YOU WANT TO SEND  -------------&
  
FREE WA_IT_RECEIVERS.
  WA_IT_RECEIVERS
-RECEIVER   LV_EMP_EMAILID"&---- ASSIGN EMAIL ID
  WA_IT_RECEIVERS
-REC_TYPE   'U'.                    "&---- SEND TO EXTERNAL EMAIL ID
  WA_IT_RECEIVERS
-COM_TYPE   'INT'.
  WA_IT_RECEIVERS
-NOTIF_DEL  'X'.
  WA_IT_RECEIVERS
-NOTIF_NDEL 'X'.
  
APPEND WA_IT_RECEIVERS TO IT_RECEIVERS .

*  FREE WA_IT_RECEIVERS.
*  WA_IT_RECEIVERS-RECEIVER   = LV_EMP_USERID.  "&----- ASSIGN SAP USER ID
*  WA_IT_RECEIVERS-REC_TYPE   = 'B'.                    "&-- SEND TO SAP INBOX
*  WA_IT_RECEIVERS-COM_TYPE   = 'INT'.
*  WA_IT_RECEIVERS-NOTIF_DEL  = 'X'.
*  WA_IT_RECEIVERS-NOTIF_NDEL = 'X'.
*  APPEND WA_IT_RECEIVERS TO IT_RECEIVERS .
*& - END OF  ASSIGN THE EMAIL ID AND USER ID TO  WHOM YOU WANT TO SEND  --&

"&--- READ THE NUMBER OF LINES IN THE INTERNAL TABLE
DESCRIBE TABLE IT_RECEIVERS LINES NUM_LINES.
"&--- CHECK THE SENDER EMAIL ID OR SAP USER ID IS GOT OR NOT.
IF NUM_LINES IS NOT INITIAL.
*&----------------------------------------------------------------------
* ADD THETEXT TO MAIL TEXT TABLE
*&----------------------------------------------------------------------
*&-- SUBJECT OF THE MAIL -------------&*
PSUBJECT 
'SUB: Bank Guarantee'(001).

"&--  BODY  OF THE MAIL ----------------&*
CLEAR WA_IT_MESSAGE.
C1 
'Dear'(005).
C2 
VORNA.
C3 
NACHN.

CONCATENATE C1 C2 C3 ',' INTO WA_IT_MESSAGE-LINE SEPARATED BY SPACE.
APPEND WA_IT_MESSAGE TO IT_MESSAGE.

*** INSERT BLANK LINE *********************************************
CLEAR WA_IT_MESSAGE.
WA_IT_MESSAGE
-LINE '                                               '.
APPEND WA_IT_MESSAGE TO IT_MESSAGE.

******* ASSIGN YOUR TEXT  BELOW *************************************
CLEAR WA_IT_MESSAGE.
C4 
'The Bank Guarantee received from '.
C5 
LIFNR_NAME.
C6 
LIFNR.
C7 
'of Rs. '.
C8 
CREDIT.
C9 
'entered in SAP vide Document Number - '.
C10 
'and Fiscal Year - '.
C11 
'is due to expire on '.
C3 
'.'.
CONCATENATE C4 C5 C6 C7 C8 C9 BELNR C10 GJAHR C11 ZFBDT C3 INTO WA_IT_MESSAGE-LINE SEPARATED BY SPACE.
APPEND WA_IT_MESSAGE TO IT_MESSAGE.

*** INSERT BLANK LINE{} *********************************************
CLEAR WA_IT_MESSAGE.
WA_IT_MESSAGE
-LINE '                                        '.
APPEND WA_IT_MESSAGE TO IT_MESSAGE.

******* ASSIGN YOUR TEXT  BELOW *************************************
CLEAR WA_IT_MESSAGE.
C4 
'Kindly take neccessary action on same immediately.'.
C5 
''.
CONCATENATE C4 C5 INTO WA_IT_MESSAGE-LINE SEPARATED BY SPACE.
APPEND WA_IT_MESSAGE TO IT_MESSAGE.

*** INSERT BLANK LINE{} *********************************************
CLEAR WA_IT_MESSAGE.
WA_IT_MESSAGE
-LINE '                                        '.
APPEND WA_IT_MESSAGE TO IT_MESSAGE.

******* ASSIGN YOUR TEXT  BELOW *************************************
CLEAR WA_IT_MESSAGE.
C4 
'You can see the Report by executing T-Code ZBG_EMAIL_REMIND'.
C5 
''.
CONCATENATE C4 C5 INTO WA_IT_MESSAGE-LINE SEPARATED BY SPACE.
APPEND WA_IT_MESSAGE TO IT_MESSAGE.

**********ASSIGN YOUR TEXT  BELOW ********************************
CLEAR WA_IT_MESSAGE.
WA_IT_MESSAGE
-LINE 'This Mail Generate Automatically. Please Do Not Reply.'(003).
APPEND WA_IT_MESSAGE TO IT_MESSAGE.
*********************************************************************

**********& SEND EMAIL MESSAGE  &*********************************
GD_DOC_DATA
-DOC_SIZE 1.

*POPULATE THE SUBJECT/GENERIC MESSAGE ATTRIBUTES
GD_DOC_DATA
-OBJ_LANGU SY-LANGU.
GD_DOC_DATA
-OBJ_NAME 'SAPRPT'.
GD_DOC_DATA
-OBJ_DESCR PSUBJECT.
GD_DOC_DATA
-SENSITIVTY 'F'.

*DESCRIBE THE BODY OF THE MESSAGE
CLEAR WA_IT_PACKING_LIST.
REFRESH IT_PACKING_LIST.
WA_IT_PACKING_LIST
-TRANSF_BIN SPACE.
WA_IT_PACKING_LIST
-HEAD_START 1.
WA_IT_PACKING_LIST
-HEAD_NUM 0.
WA_IT_PACKING_LIST
-BODY_START 1.
DESCRIBE TABLE IT_MESSAGE LINES WA_IT_PACKING_LIST-BODY_NUM.
WA_IT_PACKING_LIST
-DOC_TYPE 'RAW'.
APPEND WA_IT_PACKING_LIST TO IT_PACKING_LIST.

*&------ CALL THE FUNCTION MODULE TO SEND THE MESSAGE TO EXTERNAL AND SAP INBOX
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
  
EXPORTING
    DOCUMENT_DATA                   
GD_DOC_DATA
   PUT_IN_OUTBOX                    
'X'
   COMMIT_WORK                      
'X'
  
TABLES
    PACKING_LIST                    
IT_PACKING_LIST
   CONTENTS_TXT                     
IT_MESSAGE
   RECEIVERS                        
IT_RECEIVERS
 
EXCEPTIONS
   TOO_MANY_RECEIVERS               
1
   DOCUMENT_NOT_SENT                
2
   DOCUMENT_TYPE_NOT_EXIST          
3
   OPERATION_NO_AUTHORIZATION       
4
   PARAMETER_ERROR                  
5
   X_ERROR                          
6
   ENQUEUE_ERROR                    
7
   
OTHERS                           .
IF SY-SUBRC <> 0.
 
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF"&---- END OF CHECK THE SENDER EMAIL ID OR SAP USER ID IS GOT OR NOT.

ENDFUNCTION.