Creating Vendor Master through Bapi

Hi All,
Please help me out in creating vendor master using Bapi and also send me the program logic.
Thanks in Advance,
Sridhar Ch

Hi Sridhar,
Refer to the following and award points if useful.BAPI is like using standard function modules.We will populate the parameters and handle errors from that.See the code below which is vendor debit posting.You can get an idea by the following code.
See the start of selection if this is confusing to you and understand the usage
*                    TABLES
TABLES: VBAK,
        ADR6,
        TRDYSE01CM.
*                    INCLUDE
INCLUDE ZZUTI_STD_HEADER_FOOTER. "Standard header and footer
* TYPES DECLARATION
TYPES:
  BEGIN OF T_CRMEMO,
    VBELN TYPE VBAK-VBELN,
    POSNR TYPE VBAP-POSNR,
    ERDAT TYPE VBAK-ERDAT,
    AUART TYPE VBAK-AUART,
    AUGRU TYPE VBAK-AUGRU,
    WAERK TYPE VBAK-WAERK,
    VKORG TYPE VBAK-VKORG,
    VTWEG TYPE VBAK-VTWEG,
    SPART TYPE VBAK-SPART,
    VDATU TYPE VBAK-VDATU,
    BSTNK TYPE VBAK-BSTNK,
    BSARK TYPE VBAK-BSARK,
    BSTDK TYPE VBAK-BSTDK,
    AEDAT TYPE VBAK-AEDAT,
    BUKRS_VF TYPE VBAK-BUKRS_VF,
    MATNR TYPE VBAP-MATNR,
    ZMENG TYPE VBAP-ZMENG,
    ZIEME TYPE VBAP-ZIEME,
  END OF T_CRMEMO,
  BEGIN OF T_CRMEMO_CHANGE,
    VBELN(90) TYPE C,
    POSNR TYPE VBAP-POSNR,
    ERDAT TYPE VBAK-ERDAT,
    AUART TYPE VBAK-AUART,
    AUGRU TYPE VBAK-AUGRU,
    WAERK TYPE VBAK-WAERK,
    VKORG TYPE VBAK-VKORG,
    VTWEG TYPE VBAK-VTWEG,
    SPART TYPE VBAK-SPART,
    VDATU TYPE VBAK-VDATU,
    BSTNK TYPE VBAK-BSTNK,
    BSARK TYPE VBAK-BSARK,
    BSTDK TYPE VBAK-BSTDK,
    AEDAT TYPE VBAK-AEDAT,
    BUKRS_VF TYPE VBAK-BUKRS_VF,
    MATNR TYPE VBAP-MATNR,
    ZMENG TYPE VBAP-ZMENG,
    ZIEME TYPE VBAP-ZIEME,
  END OF T_CRMEMO_CHANGE,
  BEGIN OF T_MVKE,
    MATNR  TYPE MVKE-MATNR,
    VKORG  TYPE MVKE-VKORG,
    VTWEG  TYPE MVKE-VTWEG,
    MTPOS  TYPE MVKE-MTPOS,
  END OF T_MVKE,
  BEGIN OF T_ORDERS,
    VBELV   TYPE VBFA-VBELV,
    POSNV   TYPE VBFA-POSNV,
    VBELN   TYPE VBFA-VBELN,
    POSNN   TYPE VBFA-POSNN,
    VBTYP_N TYPE VBFA-VBTYP_N,
  END OF T_ORDERS,
  BEGIN OF T_EKPO,
    EBELN   TYPE EKKO-EBELN,
    EBELP   TYPE EKPO-EBELP,
    WAERS   TYPE EKKO-WAERS,
    MENGE   TYPE EKPO-MENGE,
    MEINS   TYPE EKPO-MEINS,
    NETPR   TYPE EKPO-NETPR,
    PEINH   TYPE EKPO-PEINH,
    mwskz   TYPE EKPO-mwskz,
    TXJCD   TYPE EKPO-TXJCD,
  END OF T_EKPO,
  BEGIN OF T_EKBE,
    EBELN   TYPE EKBE-EBELN,
    EBELP   TYPE EKBE-EBELP,
    ZEKKN   TYPE EKBE-ZEKKN,
    VGABE   TYPE EKBE-VGABE,
    GJAHR   TYPE EKBE-GJAHR,
    BELNR   TYPE EKBE-BELNR,
    BUZEI   TYPE EKBE-BUZEI,
  END OF T_EKBE,
  BEGIN OF T_RBKP,
    BELNR   TYPE RBKP-BELNR,
    GJAHR   TYPE RBKP-GJAHR,
    BLDAT   TYPE RBKP-BLDAT,
    BUDAT   TYPE RBKP-BUDAT,
    XBLNR   TYPE RBKP-XBLNR,
    LIFNR   TYPE RBKP-LIFNR,
    RMWWR   TYPE RBKP-RMWWR,
    WMWST1  TYPE RBKP-WMWST1,
    XRECH   TYPE RBKP-XRECH,
    STBLG   TYPE RBKP-STBLG,
  END OF T_RBKP,
  BEGIN OF T_CDHDR,
    OBJECTCLAS TYPE CDHDR-OBJECTCLAS,
    OBJECTID   TYPE CDHDR-OBJECTID,
    CHANGENR   TYPE CDHDR-CHANGENR,
    UDATE      TYPE CDHDR-UDATE,
    UTIME      TYPE CDHDR-UTIME,
  END OF T_CDHDR,
  BEGIN OF T_CDPOS,
    OBJECTCLAS TYPE CDHDR-OBJECTCLAS,
    OBJECTID   TYPE CDHDR-OBJECTID,
    CHANGENR   TYPE CDHDR-CHANGENR,
    TABNAME    TYPE CDPOS-TABNAME,
    TABKEY     TYPE CDPOS-TABKEY,
    FNAME      TYPE CDPOS-FNAME,
    CHNGIND    TYPE CDPOS-CHNGIND,
    VALUE_NEW  TYPE CDPOS-VALUE_NEW,
    VALUE_OLD  TYPE CDPOS-VALUE_OLD,
  END OF T_CDPOS,
  BEGIN OF T_CHANGE_DOCS,
    OBJECTCLAS TYPE CDHDR-OBJECTCLAS,
    OBJECTID   TYPE CDHDR-OBJECTID,
    CHANGENR   TYPE CDHDR-CHANGENR,
    UDATE      TYPE CDHDR-UDATE,
    UTIME      TYPE CDHDR-UTIME,
    TABNAME    TYPE CDPOS-TABNAME,
    TABKEY     TYPE CDPOS-TABKEY,
    FNAME      TYPE CDPOS-FNAME,
    CHNGIND    TYPE CDPOS-CHNGIND,
    VALUE_NEW  TYPE CDPOS-VALUE_NEW,
    VALUE_OLD  TYPE CDPOS-VALUE_OLD,
  END OF T_CHANGE_DOCS,
  BEGIN OF T_SUCCESS,
    crmemo    TYPE VBAK-vbeln,
    cmemo     TYPE VBAK-vbeln,
    orders    TYPE VBAK-vbeln,
    po        TYPE VBAK-vbeln,
    miro_no   TYPE VBAK-vbeln,
    text(20)  TYPE C,
  END OF T_SUCCESS,
  BEGIN OF T_ERROR,
    crmemo  TYPE VBAK-vbeln,
    cmemo     TYPE VBAK-vbeln,
    orders    TYPE VBAK-vbeln,
    po        TYPE VBAK-vbeln,
    miro_no   TYPE VBAK-vbeln,
    text(100) TYPE C,
  END OF T_ERROR.
*                       WORKAREA DECLARATION
DATA:
  WA_CRMEMO  TYPE T_CRMEMO,
  WA_CRMEMO_CHANGE TYPE T_CRMEMO_CHANGE,
  WA_MVKE    TYPE T_MVKE,
  WA_ORDERS  TYPE T_ORDERS,
  WA_CMEMO   TYPE  T_ORDERS,
  WA_PO      TYPE T_ORDERS,
  WA_EKPO    TYPE T_EKPO,
  WA_EKBE    TYPE T_EKBE,
  WA_EKBE_TEMP TYPE T_EKBE,
  WA_RBKP    TYPE T_RBKP,
  WA_RBKP_TMP TYPE T_RBKP,
  WA_CDHDR   TYPE T_CDHDR,
  WA_CDPOS   TYPE T_CDPOS,
  WA_CHANGE_DOCS TYPE T_CHANGE_DOCS,
  WA_CRMEMO_MR8M  TYPE T_CRMEMO,
  WA_SUCCESS TYPE T_SUCCESS,
  WA_ERROR   TYPE T_ERROR,
  WA_SUCCESS_MR8M TYPE T_SUCCESS,
  WA_ERROR_MR8M   TYPE T_ERROR.
*--Work area for all the internal tables used for Sending Mail
DATA :
  WA_OBJPACK TYPE SOPCKLSTI1,
  WA_OBJHEAD TYPE SOLISTI1,
  WA_OBJBIN TYPE SOLISTI1,
  WA_OBJTXT TYPE SOLISTI1,
  WA_RECLIST TYPE SOMLRECI1 .
DATA:
*-- Structure to hold Invoice Header Data
  x_docheader LIKE bapi_incinv_create_header,
*-- Structure to hold Reversal Posting Data
  x_rev_post LIKE BAPI_INCINV_FLD.
*                  INTERNAL TAABLE DECLARATION
DATA:
  IT_CRMEMO      TYPE STANDARD TABLE OF T_CRMEMO   WITH HEADER LINE,
  IT_CRMEMO_CHANGE TYPE STANDARD TABLE OF T_CRMEMO_CHANGE WITH HEADER LINE,
  IT_MVKE        TYPE STANDARD TABLE OF T_MVKE     WITH HEADER LINE,
  IT_CRMEMO_MIRO TYPE STANDARD TABLE OF T_CRMEMO   WITH HEADER LINE,
  IT_CRMEMO_MR8M TYPE STANDARD TABLE OF T_CRMEMO   WITH HEADER LINE,
  IT_ORDERS      TYPE STANDARD TABLE OF T_ORDERS   WITH HEADER LINE,
  IT_CMEMO       TYPE STANDARD TABLE OF T_ORDERS   WITH HEADER LINE,
  IT_PO          TYPE STANDARD TABLE OF T_ORDERS   WITH HEADER LINE,
  IT_EKPO        TYPE STANDARD TABLE OF T_EKPO     WITH HEADER LINE,
  IT_EKBE        TYPE STANDARD TABLE OF T_EKBE     WITH HEADER LINE,
  IT_EKBE_TEMP    TYPE STANDARD TABLE OF T_EKBE    WITH HEADER LINE,
  IT_RBKP        TYPE STANDARD TABLE OF T_RBKP     WITH HEADER LINE,
  IT_CDHDR       TYPE STANDARD TABLE OF T_CDHDR    WITH HEADER LINE,
  IT_CDPOS       TYPE STANDARD TABLE OF T_CDPOS    WITH HEADER LINE,
  IT_CHANGE_DOCS TYPE STANDARD TABLE OF T_CHANGE_DOCS WITH HEADER LINE,
  IT_SUCCESS     TYPE STANDARD TABLE OF T_SUCCESS  WITH HEADER LINE,
  IT_ERROR       TYPE STANDARD TABLE OF T_ERROR    WITH HEADER LINE,
  IT_SUCCESS_MR8M TYPE STANDARD TABLE OF T_SUCCESS WITH HEADER LINE,
  IT_ERROR_MR8M  TYPE STANDARD TABLE OF T_ERROR    WITH HEADER LINE.
*-- Internal table to hold Invoice Item Data
DATA:BEGIN OF it_itemdata OCCURS 0.
       INCLUDE STRUCTURE bapi_incinv_create_item.
DATA:END OF it_itemdata.
*-- Internal table to hold Invoice Acct Assignment Data
DATA:BEGIN OF it_ACCOUNTingdata OCCURS 0.
       INCLUDE STRUCTURE BAPI_INCINV_CREATE_ACCOUNT.
DATA:END OF it_accountingdata.
*-- Internal table to hold BAPI return data
DATA: BEGIN OF it_return OCCURS 0.
        INCLUDE STRUCTURE bapiret2.  "Return Parameter.
DATA: END OF it_return.
*-- Internal table to hold BAPI return data
DATA: BEGIN OF it_return_mr8m OCCURS 0.
        INCLUDE STRUCTURE bapiret2.  "Return Parameter.
DATA: END OF it_return_mr8m.
*--MAIL related Internal tables
DATA: X_DOC_CHNG TYPE SODOCCHGI1,                      " document attributes
      IT_OBJPACK TYPE STANDARD TABLE OF SOPCKLSTI1,    " attachment table
      IT_OBJHEAD TYPE STANDARD TABLE OF SOLISTI1,      " object header table
      IT_OBJBIN TYPE STANDARD TABLE OF SOLISTI1,       " binary table
      IT_OBJTXT TYPE STANDARD TABLE OF SOLISTI1,       " object text
      IT_RECLIST TYPE STANDARD TABLE OF SOMLRECI1,     " mail recipients
      it_compressed_list TYPE STANDARD TABLE OF SOLI,
      it_pdf_list TYPE STANDARD TABLE OF TLINE,
      it_pdf  TYPE tline OCCURS 10 WITH HEADER LINE,
      it_html  TYPE solisti1   OCCURS 10  WITH HEADER LINE,
*-- Internal table for MIME data (in CHAR format)
      it_temp   TYPE bapiqcmime OCCURS 10 WITH HEADER LINE,
*-- Internal table for storing data
      it_mime(255) TYPE c OCCURS 10 WITH HEADER LINE.
* GLOBAL VARIABLES                                                     *
DATA: V_PGM_ID      TYPE SY-REPID,                    " Program id
      v_zterm       TYPE lfb1-zterm,                  " Payment Terms
      v_text(75)    TYPE c,                           " To store error or success text
      v_itemno(6)   TYPE n,                           " To Increment Item No. for BAPI
      v_docnr       LIKE bapi_incinv_fld-inv_doc_no,  " For MIRO document number
      v_year1       LIKE bapi_incinv_fld-fisc_year,   " For MIRO Fiscal year
      v_spono       type TSP01-RQIDENT,               " For Spool No.
      v_type        type SOODK-OBJTP,                 " For Spool Type
      V_CRMEMO_QTY  TYPE VBAP-ZMENG,                  " For CR Memo Qty.
      V_LINE_AMOUNT TYPE EKPO-NETPR,                  " For CR Memo Item Qty.
      V_GROSSAMT    TYPE EKPO-NETPR,                  " For CR Memo Grand Qty.
      v_tax_per(3)  type n,                           " For CR Memo Tax amount %
      v_tax_amt     TYPE EKPO-NETPR,                  " For CR Memo Tax amount
      v_flag(1)     type c,                           " Flag to process fruther
      v_tot_s_mr8m  TYPE i,                           " For MR8M Success Records
      v_tot_e_mr8m  TYPE i,                           " For MR8M Error Records
      V_DATE        TYPE SY-DATUM,                    " For Sel. Screen Date
      V_DATE2(10)   TYPE C,                           " For EMail Date
      V_TIME(10)    TYPE C,                           " For EMail Time
      V_TIME2(10)   TYPE C,                           " For EMail Time
      V_INFO(100)   TYPE C,                           " For EMail Body Text
      V_TABLE_LINES TYPE SY-TABIX,                    " To Increment Email Count
      V_TEXT2       TYPE STRING   ,                   " For EMail Id text
      v_lines       TYPE i,                           " To Store PDF Lines
      v_temp(500)   TYPE c,                           " To Convert to 255 char format
      v_offset      TYPE p,                           " To Convert to 255 char format
      v_lineslen    TYPE i,                           " To Convert to 255 char format
      v_mimelen     TYPE i,                           " To Convert to 255 char format
      v_tabix       type sy-tabix.                    " To Convert to 255 char format
* CONSTANTS                                                            *
CONSTANTS:
  C_X(1)            TYPE C          VALUE 'X',       " Constant X or Flag
  C_E(1)            TYPE C          VALUE 'E',       " For Error check
  c_v(1)            TYPE C          VALUE 'V',       " For PO Docs
  c_o(1)            TYPE C          VALUE 'O',       " For Order Docs
  c_c(1)            TYPE C          VALUE 'C',       " For Credit Memo Docs
  c_k(1)            TYPE C          VALUE 'K',       " For CR Memo Docs
  c_u(1)            TYPE C          VALUE 'U',       " For Change tables Update
  c_ali(3)          TYPE C          VALUE 'ALI',     " For ALI Format
  c_vbak(4)         TYPE C          VALUE 'VBAK',    " For Change docs table
  C_01(2)           TYPE C          VALUE '01',      " For Serial No. & Reversal Reason
  C_02(2)           TYPE C          VALUE '02',      " For Reversal Reason
  c_blart           TYPE bkpf-blart VALUE 'RE',      " Document type
  C_MTPOS           TYPE MVKE-MTPOS VALUE 'BANS',    " Item Category group
  C_AUGRU(5)        TYPE C          VALUE 'AUGRU',   " Reason Code
  C_0000500205(10)  TYPE C          VALUE '0000500205', " GL Account #
  C_VERKBELEG(9)    TYPE C          VALUE 'VERKBELEG'.  " For Object Class
*-- Horizontal tab & line feed constants
CLASS CL_ABAP_CHAR_UTILITIES DEFINITION LOAD.
CONSTANTS:
  C_TAB  TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,
  C_CR_LF TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF .
* SELECTION SCREEN
*-- Select Optons
SELECTION-SCREEN: BEGIN OF BLOCK B01 WITH FRAME TITLE TEXT-001.
  SELECT-OPTIONS: S_AUART FOR VBAK-AUART OBLIGATORY NO INTERVALS,
                                                     " Sales Document Type
                  S_AUGRU FOR VBAK-AUGRU OBLIGATORY NO INTERVALS,
                                                     " Order reason
                  S_ERDAT FOR VBAK-ERDAT OBLIGATORY.
                                    " Date on which the record was created
SELECTION-SCREEN: END OF BLOCK B01.
*-- Mail Sending Options
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-004.
  PARAMETERS:P_EMAIL AS CHECKBOX DEFAULT SPACE USER-COMMAND V_COM .
  PARAMETERS : P_MODE TYPE SO_ESCAPE   default 'U' MODIF ID US1.
  SELECT-OPTIONS: S_EMAIL FOR ADR6-SMTP_ADDR
                                      NO INTERVALS MODIF ID US2.
*  SELECT-OPTIONS: S_EMAIL FOR TRDYSE01CM-USERNAME
*                                      NO INTERVALS MODIF ID US2.
  SELECTION-SCREEN: BEGIN OF LINE.
    SELECTION-SCREEN: COMMENT 55(40) TEXT-019 MODIF ID US2.
  SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN END OF BLOCK B2.
*            WORK AREA for SELECT-OPTIONS
DATA :  X_EMAIL LIKE S_EMAIL.   "Work area for EMAIL select-options
*  INITIALIZATION
INITIALIZATION.
*-- Default values for Sales Document Type
  CLEAR S_AUART[].
  S_AUART-SIGN = 'I'.
  S_AUART-OPTION = 'EQ'.
  S_AUART-LOW = 'CR'.
  APPEND S_AUART.
  CLEAR S_AUART.
*-- Default values for Date on which the record was created
  V_DATE = ( SY-DATUM - 1 ).
  CLEAR S_ERDAT[].
  S_ERDAT-SIGN = 'I'.
  S_ERDAT-OPTION = 'EQ'.
  S_ERDAT-LOW =  SY-DATUM.
  S_ERDAT-HIGH =  SY-DATUM.
  APPEND S_ERDAT.
  CLEAR S_ERDAT.
*                    TOP OF PAGE                                       *
TOP-OF-PAGE.
*-- Displaying standard header.
  PERFORM std_top_of_page USING sy-title.
* A T  S E L E C T I O N   S C R E E N  O U T P U T
*-- For modifying the selection screen layout
AT SELECTION-SCREEN OUTPUT.
  PERFORM F_MODIFY_SCREEN.
*                    AT SELECTION SCREEN.                              *
AT SELECTION-SCREEN.
*-- Subroutine to Validate selection screen fields
  PERFORM f_validate.
*  START-OF-SELECTION                                                  *
*START-OF-SELECTION.*
**-- Fetch the Credit Memo Requests documents*
  *PERFORM F_GET_CREDIT_MEMO_REQUEST.*
  *IF NOT IT_CRMEMO[] IS INITIAL.*
**-- Fetch Item Category Group*
    *PERFORM F_GET_MVKE_DOCS.*
**-- Fetch Sales Order documents, PO Documents and Credit Memos*
    *PERFORM F_GET_SO_PO_DOCS.*
  *ENDIF.*
**-- If Credit memo request internal table have an change records then*
**    fetch the change documents from CDHDR and CDPOS*
  *IF NOT IT_CRMEMO_CHANGE[] IS INITIAL.*
**-- Fetch Change Documents for CR Memos from CDHDR and CDPOS tables*
    *PERFORM F_GET_CHANGED_DOCS.*
  *ENDIF.*
**-- Fetch Purchasing Document Item Details*
  *IF NOT IT_PO[] IS INITIAL.*
    *PERFORM F_GET_EKPO.*
  *ENDIF.*
**-- Fetch MIRO Vendor based on the PO Details*
  *IF NOT IT_EKPO[] IS INITIAL.*
    *PERFORM F_GET_VENDOR.*
  *ENDIF.*
*  END-OF-SELECTION                                                    *
  if v_flag is initial.
*-- Process Vendor Debit Postings
    PERFORM F_PROCESS_MIRO.
*-- Process Reversal Postings of Vendor Automatic Debits using TCODE MR8M
    PERFORM F_PROCESS_MR8M.
*-- Send mail,if user enters Email id's and Email Mode is not initial
    IF P_EMAIL = C_X AND P_MODE IS NOT INITIAL AND S_EMAIL[] IS NOT INITIAL.
*-- Get spool id
      perform f_spool_id.
*-- EMail Logic
      PERFORM F_MAIL_LOGIC.
    ENDIF.
*-- display the EMail RSCONN01 and Sussess and Error records of MIRO and MR8M
    perform f_display_report.
  else.
*-- Else exit the process
    exit.
  endif.
*&      Form  F_MODIFY_SCREEN
*       A Form routine to modify the screen
FORM F_MODIFY_SCREEN .
*-- To Modify Mail Sending Options
  LOOP AT SCREEN.
    IF P_EMAIL = C_X.
      IF SCREEN-GROUP1 = 'US1' .
        SCREEN-INVISIBLE = 0.
        SCREEN-ACTIVE = 1.
        SCREEN-INPUT = 0.
        MODIFY SCREEN.
      ENDIF.
      IF SCREEN-GROUP2 = 'US2' .
        SCREEN-INVISIBLE = 0.
        SCREEN-ACTIVE = 1.
        MODIFY SCREEN.
      ENDIF.
    ELSEIF P_EMAIL = SPACE.
      IF SCREEN-GROUP1 = 'US1' .
        SCREEN-INVISIBLE = 1.
        SCREEN-ACTIVE = 0.
        MODIFY SCREEN.
      ENDIF.
      IF SCREEN-GROUP1 = 'US2' .
        SCREEN-INVISIBLE = 1.
        SCREEN-ACTIVE = 0.
        MODIFY SCREEN.
      ENDIF.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " F_MODIFY_SCREEN
*&      Form  f_validate
*       Validation of Selection-Screen Inputs
FORM f_validate .
*-- Validate Sales Document Type
  if not s_AUART[] is initial.
    select  AUART
      into s_AUART-low
      from TVAK up to 1 rows
      where AUART in s_AUART.
    endselect.
    if sy-subrc <> 0.
      message E000 with 'Invalid Sales Document Type'(e01) .
    endif.
  ENDIF.
*-- Validate Order reason (reason for the business transaction)
  if not s_AUGRU[] is initial.
    select  AUGRU
      into s_AUGRU-low
      from TVAU up to 1 rows
      where AUGRU in s_AUGRU.
    endselect.
    if sy-subrc <> 0.
      message E000 with 'Invalid Order reason'(e02) .
    endif.
  endif.
ENDFORM.                    " f_validate
*&      Form  F_GET_CREDIT_MEMO_REQUEST
*       Fetch Credit memo requests from VBAK & VBAP
FORM F_GET_CREDIT_MEMO_REQUEST .
  SELECT A~VBELN
         B~POSNR
         A~ERDAT
         A~AUART
         A~AUGRU
         A~WAERK
         A~VKORG
         A~VTWEG
         A~SPART
         A~VDATU
         A~BSTNK
         A~BSARK
         A~BSTDK
         A~AEDAT
         A~BUKRS_VF
         B~MATNR
         B~ZMENG
         B~ZIEME
    INTO TABLE IT_CRMEMO
    FROM ( VBAK AS A
    INNER JOIN VBAP AS B ON A~VBELN = B~VBELN )
    WHERE ( A~ERDAT IN S_ERDAT
      OR  A~AEDAT IN S_ERDAT )
      AND A~AUART IN S_AUART.
  IF SY-SUBRC = 0.
    SORT IT_CRMEMO BY VBELN POSNR.
  ELSE.
    MESSAGE I000 WITH 'No Credit Memo Request selected'(002).
    v_flag = C_X.
    stop.
  ENDIF.
ENDFORM.                    " F_GET_CREDIT_MEMO_REQUEST
*&      Form  F_GET_MVKE_DOCS
*       Fetch Sales Data for Material
FORM F_GET_MVKE_DOCS .
  DATA: LV_TABIX TYPE SY-TABIX.
*-- Fetch Sales Data for Material
  SELECT MATNR      " Material Number
         VKORG      " Sales Organization
         VTWEG      " Distribution Channel
         MTPOS      " Item category group from material master
    FROM MVKE       " Sales Data for Material
    INTO TABLE IT_MVKE
    FOR ALL ENTRIES IN IT_CRMEMO
    WHERE MATNR = IT_CRMEMO-MATNR
      AND VKORG = IT_CRMEMO-VKORG
      AND VTWEG = IT_CRMEMO-VTWEG.
  IF SY-SUBRC = 0.
    SORT IT_MVKE BY MATNR VKORG VTWEG MTPOS.
  ENDIF.
*-- Validate Item category group if MVKE-MTOPS <> 'BANS' then ignore CM Request line item
  LOOP AT IT_CRMEMO INTO WA_CRMEMO.
    LV_TABIX = SY-TABIX.
    READ TABLE IT_MVKE INTO WA_MVKE WITH KEY MATNR = WA_CRMEMO-MATNR
                                             VKORG = WA_CRMEMO-VKORG
                                             VTWEG = WA_CRMEMO-VTWEG
                                             MTPOS = C_MTPOS
                                             BINARY SEARCH.
    IF SY-SUBRC <> 0.
      DELETE IT_CRMEMO INDEX LV_TABIX.    " Delete CR memo records
    ELSE.
*-- Else check for credit memo request change date is not initial, and
*   append those records to IT_CRMEMO_CHANGE internal table to retrive
*   change documents
      IF NOT WA_CRMEMO-AEDAT IS INITIAL.
        WA_CRMEMO_CHANGE-VBELN = WA_CRMEMO-VBELN.
        WA_CRMEMO_CHANGE-POSNR = WA_CRMEMO-POSNR.
        WA_CRMEMO_CHANGE-ERDAT = WA_CRMEMO-ERDAT.
        WA_CRMEMO_CHANGE-AUART = WA_CRMEMO-AUART.
        WA_CRMEMO_CHANGE-AUGRU = WA_CRMEMO-AUGRU.
        WA_CRMEMO_CHANGE-WAERK = WA_CRMEMO-WAERK.
        WA_CRMEMO_CHANGE-VKORG = WA_CRMEMO-VKORG.
        WA_CRMEMO_CHANGE-VTWEG = WA_CRMEMO-VTWEG.
        WA_CRMEMO_CHANGE-SPART = WA_CRMEMO-SPART.
        WA_CRMEMO_CHANGE-VDATU = WA_CRMEMO-VDATU.
        WA_CRMEMO_CHANGE-BSTNK = WA_CRMEMO-BSTNK.
        WA_CRMEMO_CHANGE-BSARK = WA_CRMEMO-BSARK.
        WA_CRMEMO_CHANGE-BSTDK = WA_CRMEMO-BSTDK.
        WA_CRMEMO_CHANGE-AEDAT = WA_CRMEMO-AEDAT.
        WA_CRMEMO_CHANGE-BUKRS_VF = WA_CRMEMO-BUKRS_VF.
        WA_CRMEMO_CHANGE-MATNR = WA_CRMEMO-MATNR.
        WA_CRMEMO_CHANGE-ZMENG = WA_CRMEMO-ZMENG.
        WA_CRMEMO_CHANGE-ZIEME = WA_CRMEMO-ZIEME.
        APPEND WA_CRMEMO_CHANGE TO IT_CRMEMO_CHANGE.
        CLEAR WA_CRMEMO_CHANGE.
      ENDIF.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " F_GET_MVKE_DOCS
*&      Form  F_GET_SO_PO_DOCS
*       Fetch the Sales Order documents, PO documents, & Credit Memo
FORM F_GET_SO_PO_DOCS.
*-- Fetch Preceding sales orders based on the credit memo request
  SELECT VBELV
         POSNV
         VBELN
         POSNN
         VBTYP_N
    FROM VBFA
    INTO TABLE IT_ORDERS
    FOR ALL ENTRIES IN IT_CRMEMO
    WHERE VBELN = IT_CRMEMO-VBELN
      AND POSNN = IT_CRMEMO-POSNR
      AND VBTYP_N = C_K
      AND VBTYP_V = C_C.
  IF SY-SUBRC = 0.
    SORT IT_ORDERS BY VBELV POSNV.
*-- Fetch Subsequent PO documents & Credit Memo based on the sales orders
    SELECT VBELV
           POSNV
           VBELN
           POSNN
           VBTYP_N
      FROM VBFA
      INTO TABLE IT_PO
      FOR ALL ENTRIES IN IT_ORDERS
      WHERE VBELV = IT_ORDERS-VBELV
        AND POSNV = IT_ORDERS-POSNV
        AND VBTYP_N IN (C_V,C_O)
        AND VBTYP_V = C_C.
    IF SY-SUBRC = 0.
      SORT IT_PO BY VBTYP_N.
*-- Copy the IT_PO internal table contents to IT_CMEMO internal table
      IT_CMEMO[] = IT_PO[].
*-- Delete PO documents from IT_CMEMO internal table
      DELETE IT_CMEMO WHERE VBTYP_N = C_V.
      SORT IT_CMEMO BY VBELN POSNN.
      IF IT_CMEMO[] IS INITIAL.
        MESSAGE I000 WITH 'No Credit Memo are available for CM Request'(003).
*        v_flag = c_x.
*        stop.
      ENDIF.
*-- Delete Credit Memo documents from IT_PO internal table
      DELETE IT_PO WHERE VBTYP_N = C_O.
      SORT IT_PO BY VBELN POSNN.
    ENDIF.
  ENDIF.
ENDFORM.                    " F_GET_SO_PO_DOCS
*&      Form  F_GET_CHANGED_DOCS
*       Fetch Change Documents for CR Memos from CDHDR and CDPOS tables
FORM F_GET_CHANGED_DOCS .
*-- Fetch Change Documents for CR Memos from CDHDR
  SELECT OBJECTCLAS
         OBJECTID
         CHANGENR
         UDATE
         UTIME
  FROM CDHDR
  INTO TABLE IT_CDHDR
  FOR ALL ENTRIES IN IT_CRMEMO_CHANGE
  WHERE OBJECTCLAS = C_VERKBELEG
    AND OBJECTID   = IT_CRMEMO_CHANGE-VBELN
*    AND UDATE      = IT_CRMEMO_CHANGE-AEDAT
  IF SY-SUBRC = 0.
    SORT IT_CDHDR BY OBJECTCLAS OBJECTID CHANGENR.
*-- Fetch Change Documents for CR Memos from CDPOS
    SELECT OBJECTCLAS
           OBJECTID
           CHANGENR
           TABNAME
           TABKEY
           FNAME
           CHNGIND
           VALUE_NEW
           VALUE_OLD
      FROM CDPOS
      INTO TABLE IT_CDPOS
      FOR ALL ENTRIES IN IT_CDHDR
      WHERE OBJECTCLAS = C_VERKBELEG
        AND OBJECTID   = IT_CDHDR-OBJECTID
        AND CHANGENR   = IT_CDHDR-CHANGENR
        AND TABNAME    = C_VBAK
        AND FNAME      = C_AUGRU
        AND CHNGIND    = C_U.
    IF SY-SUBRC = 0.
      SORT IT_CDPOS BY OBJECTCLAS OBJECTID CHANGENR.
    ENDIF.
  ENDIF.
ENDFORM.                    " F_GET_CHANGED_DOCS
*&      Form  F_GET_EKPO
*       Fetch Purchasing Document Item Details
FORM F_GET_EKPO .
*-- Fetch Purchasing Document Item Details
  SELECT A~EBELN
         B~EBELP
         A~WAERS
         B~MENGE
         B~MEINS
         B~NETPR
         B~PEINH
         B~mwskz
         B~TXJCD
  INTO TABLE IT_EKPO
  FROM ( EKKO AS A
  INNER JOIN EKPO AS B ON A~EBELN = B~EBELN )
  FOR ALL ENTRIES IN IT_PO
  WHERE A~EBELN = IT_PO-VBELN
    AND B~EBELP = IT_PO-POSNN+1(5).
  IF SY-SUBRC = 0.
    SORT IT_EKPO BY EBELN EBELP.
  ENDIF.
ENDFORM.                    " F_GET_EKPO
*&      Form  F_GET_VENDOR
*       Fetch MIRO Vendor details based on the PO Details
FORM F_GET_VENDOR .
DATA: LV_TABIX TYPE SY-TABIX.
*-- Fetch History per Purchasing Document records for all the PO records
  SELECT EBELN
         EBELP
         ZEKKN
         VGABE
         GJAHR
         BELNR
         BUZEI
  FROM EKBE
  INTO TABLE IT_EKBE
  FOR ALL ENTRIES IN IT_EKPO
  WHERE EBELN = IT_EKPO-EBELN
    AND EBELP = IT_EKPO-EBELP
    AND VGABE = '2'.
*    and STBLG = space.
  IF SY-SUBRC = 0.
    SORT IT_EKBE BY BELNR GJAHR.
*-- Fetch the vendor details based on table IT_EKBE internal table
    SELECT BELNR
           GJAHR
           BLDAT
           BUDAT
           XBLNR
           LIFNR
           RMWWR
           WMWST1
           XRECH
           STBLG
    FROM RBKP
    INTO TABLE IT_RBKP
    FOR ALL ENTRIES IN IT_EKBE
    WHERE BELNR = IT_EKBE-BELNR
      AND GJAHR = IT_EKBE-GJAHR.
    IF SY-SUBRC = 0.
      SORT IT_RBKP BY BELNR GJAHR.
    ENDIF.
  ENDIF.
*-- Sort PO History documents based on PO # and PO Item
  SORT IT_EKBE BY EBELN EBELP.
*-- Copy the PO History documents into IT_EKBE_TEMP internal table
  IT_EKBE_TEMP[] = IT_EKBE[].
*-- Delete PO History documents from IT_EKBE_TEMP internal table
*   comparing with IT_RBKP where (STBLG) Reversal document number
*   is initial
  LOOP AT IT_EKBE_TEMP INTO WA_EKBE_TEMP.
    LV_TABIX = SY-TABIX.
    READ TABLE IT_RBKP INTO WA_RBKP WITH KEY BELNR = WA_EKBE_TEMP-BELNR
                                             GJAHR = WA_EKBE_TEMP-GJAHR
*                                             XRECH = SPACE
                                             STBLG = SPACE.
    IF SY-SUBRC <> 0.
      DELETE IT_EKBE_TEMP INDEX LV_TABIX.
    ENDIF.
    CLEAR: WA_EKBE_TEMP, WA_RBKP.
  ENDLOOP.
ENDFORM.                    " F_GET_VENDOR
*&      Form  F_PROCESS_MIRO
*       Process MIRO
FORM F_PROCESS_MIRO .
  DATA:
    lv_itemno         TYPE i,
    lv_tabix          type sy-index,
    lc_check(1)       TYPE c VALUE 'X',
    V_FILL_ITEM,
    lv_rbkp_bldat type sy-datum.
  clear : it_itemdata, it_accountingdata, IT_CRMEMO_MIRO, IT_CRMEMO_MR8M.
  refresh : it_itemdata, it_accountingdata, IT_CRMEMO_MIRO, IT_CRMEMO_MR8M.
*-- Copy all the CR Memo Docs and delete order reason not in S_AUGRU
  IT_CRMEMO_MR8M[] = IT_CRMEMO[].
*-- Delete Reversal postings which are not in S_AUGRU
  DELETE IT_CRMEMO_MR8M WHERE AUGRU IN S_AUGRU.
*-- Delete Reversal postings where AEDAT is initial
  DELETE IT_CRMEMO_MR8M where aedat is initial.
*-- Delete order reason which are not in S_AUGRU
  DELETE IT_CRMEMO WHERE AUGRU NOT IN S_AUGRU.
*-- Loop through the credit memo request records
  LOOP AT IT_CRMEMO INTO WA_CRMEMO.
    lv_tabix = sy-tabix.
*-- If credit memo request change date is not initial then
*   send change date (AEDAT) to lv_rbkp_bldat
    if not WA_CRMEMO-aedat is initial.
      lv_rbkp_bldat =  WA_CRMEMO-aedat.
    else.
*-- If credit memo request change date is initial then
*   send create date (ERDAT) to lv_rbkp_bldat
      lv_rbkp_bldat =  WA_CRMEMO-erdat.
    endif.
    READ TABLE IT_ORDERS INTO WA_ORDERS WITH KEY VBELN = WA_CRMEMO-VBELN
                                                 POSNN = WA_CRMEMO-POSNR.
    IF SY-SUBRC = 0.
      READ TABLE IT_PO INTO WA_PO WITH KEY VBELV = WA_ORDERS-VBELV
                                           POSNV = WA_ORDERS-POSNV.
      IF SY-SUBRC = 0.
        READ TABLE IT_EKPO INTO WA_EKPO WITH KEY EBELN = WA_PO-VBELN
                                                 EBELP = WA_PO-POSNN.
        IF SY-SUBRC = 0.
*-- Read IT_EKBE_TEMP internal table which contains records which are not reversed
          READ TABLE IT_EKBE_TEMP INTO WA_EKBE_TEMP WITH KEY EBELN = WA_EKPO-EBELN
                                                             EBELP = WA_EKPO-EBELP.
          IF SY-SUBRC = 0.
*-- Read IT_RBKP internal table with XRECH (Indicator: post invoice) = 'X' ,
*   check for invoice records for the correspnding CR Memo records
            READ TABLE IT_RBKP INTO WA_RBKP WITH KEY BELNR = WA_EKBE_TEMP-BELNR
                                                     GJAHR = WA_EKBE_TEMP-GJAHR
                                                     XRECH = C_X.
            IF SY-SUBRC = 0.
*-- Read IT_RBKP internal table with XRECH (Indicator: post invoice) = SPACE,
*   and document date = CR Memo creation date
*   and reference document number = PO number
              READ TABLE IT_RBKP INTO WA_RBKP_TMP WITH KEY BELNR = WA_EKBE_TEMP-BELNR
                                                           GJAHR = WA_EKBE_TEMP-GJAHR
                                                           BLDAT = WA_CRMEMO-ERDAT
                                                           XRECH = ' '
                                                           XBLNR+0(10) = WA_EKBE_TEMP-ebeln.
*                                                           STBLG = SPACE.
              IF SY-SUBRC = 0.
                CONTINUE.
              ELSE.
*-- Quantity Conversion (Get the Credit Memo Quantity by passing CMR unit per one PO unit)
                perform f_quantity_conv.
*-- Filling the Line items data
*-- Incrementing the item no
                lv_itemno = lv_itemno + 1.
                v_itemno  = lv_itemno.
                it_itemdata-invoice_doc_item  = v_itemno.
                it_itemdata-po_number         = WA_ekPO-ebeln.
                it_itemdata-po_item           = WA_EKPO-EBELP.
                it_itemdata-tax_code          = WA_ekpo-mwskz.
                it_itemdata-TAXJURCODE        = WA_ekpo-TXJCD.
*-- Converting SAP amount to BAPI format by passing line item amount and currency
                PERFORM f_currency_amount_sap_to_bapi USING    WA_EKPO-waers
                                                               V_LINE_AMOUNT
                                                      CHANGING it_itemdata-item_amount .
                it_itemdata-quantity          = ( WA_CRMEMO-ZMENG * V_CRMEMO_QTY ).
                it_itemdata-po_unit           = WA_EKPO-MEINS.
                APPEND it_itemdata.
*-- Populate Account Assignment data
                IT_ACCOUNTINGDATA-INVOICE_DOC_ITEM = v_itemno.
                IT_ACCOUNTINGDATA-XUNPL       = space.
                IT_ACCOUNTINGDATA-SERIAL_NO   = C_01.
                IT_ACCOUNTINGDATA-TAX_CODE    = it_itemdata-tax_code.
                IT_ACCOUNTINGDATA-TAXJURCODE  = it_itemdata-TAXJURCODE.
                IT_ACCOUNTINGDATA-ITEM_AMOUNT = it_itemdata-item_amount.
                IT_ACCOUNTINGDATA-QUANTITY    = it_itemdata-quantity.
                IT_ACCOUNTINGDATA-PO_UNIT     = it_itemdata-po_unit.
                IT_ACCOUNTINGDATA-GL_ACCOUNT  = C_0000500205.
                append IT_ACCOUNTINGDATA.
                clear IT_ACCOUNTINGDATA.
                CLEAR it_itemdata.
              endif.
            endif.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDIF.
*-- At end of each credit memo request fill the header details of BAPI FM and
*-- post the BAPI
    AT END OF VBELN.
      read table it_crmemo into wa_crmemo index lv_tabix.
*-- Populate the document Header
*-- Getting the header data for invoice
      x_docheader-invoice_ind  = space.
      x_docheader-doc_type     = c_blart.
      x_docheader-doc_date     = lv_rbkp_bldat.
      x_docheader-pstng_date   = lv_rbkp_bldat.
      x_docheader-ref_doc_no   = WA_RBKP-XBLNR.
      x_docheader-comp_code    = WA_CRMEMO-BUKRS_VF.
      x_docheader-CURRENCY     = WA_CRMEMO-WAERK.
      x_docheader-calc_tax_ind = lc_check.
*-- Logic to find the Tax %
      v_tax_per = ( WA_RBKP-WMWST1 / ( WA_RBKP-RMWWR - WA_RBKP-WMWST1 ) ) * 100.
      v_tax_amt = ( V_GROSSAMT *  v_tax_per ) / 100.
      V_GROSSAMT =  ( V_GROSSAMT + v_tax_amt ).
      x_docheader-gross_amount = V_GROSSAMT.
      CLEAR:v_docnr, v_year1.
*-- Calling BAPI to create PO invoice document
      CHECK NOT IT_ITEMDATA[] IS INITIAL.
      CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE'
        EXPORTING
          headerdata       = x_docheader
        IMPORTING
          invoicedocnumber = v_docnr
          fiscalyear       = v_year1
        TABLES
          itemdata         = it_itemdata[]
          ACCOUNTingDATA    = it_ACCOUNTingDATA[]
*          GLACCOUNTDATA    =
*          taxdata          =
          return           = it_return.
*-- Commit work
      IF NOT v_docnr IS INITIAL.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
*-- Move the data to Success Internal Table
        wa_success-crmemo  = wa_crmemo-vbeln.
        wa_success-cmemo   = wa_cmemo-vbeln.
        wa_success-orders  = wa_orders-vbelv.
        wa_success-po      = wa_po-vbeln.
        wa_success-miro_no = v_docnr.
        wa_success-text    = 'MIRO is Posted'.
        append wa_success TO it_success.
        clear wa_success.
      ENDIF.
*--   Read the values in the table IT_RETURN.
      CLEAR it_return.
      READ TABLE it_return INDEX 1.
*   If message type is error then roll back the work
      IF it_return-type = C_E.
*-- Roll back
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*-- Move the data to Error Internal Table
        wa_error-crmemo = wa_crmemo-vbeln.
        wa_error-cmemo  = wa_cmemo-vbeln.
        wa_error-orders = wa_orders-vbelv.
        wa_error-po     = wa_po-vbeln.
        wa_error-text   = it_return-MESSAGE.
        append wa_error TO it_error.
        clear wa_error.
      ENDIF.
      refresh: it_return, it_itemdata, it_accountingdata.
      clear: V_GROSSAMT, it_return, it_itemdata, wa_crmemo, wa_orders, wa_po,
             wa_ekpo, WA_EKBE_TEMP, wa_rbkp, wa_rbkp_tmp, v_docnr, v_year1, WA_SUCCESS,
             WA_ERROR, it_accountingdata, v_tax_per, v_tax_amt, V_FILL_ITEM, lv_rbkp_bldat.
    ENDAT.
  ENDLOOP.
ENDFORM.                    " F_PROCESS_MIRO
*&      Form  f_quantity_conv
*       Quantity Conversion
FORM f_quantity_conv .
*-- Quantity Conversion (Get the Credit Memo Quantity by passing CMR unit per one PO unit)
  CLEAR: V_LINE_AMOUNT, V_CRMEMO_QTY.
  call function 'MC_UNIT_CONVERSION'
    EXPORTING
      MATNR                = WA_CRMEMO-MATNR
      nach_meins           = WA_EKPO-MEINS
      von_meins            = WA_CRMEMO-ZIEME
    IMPORTING
      UMREF                = V_CRMEMO_QTY
    EXCEPTIONS
      CONVERSION_NOT_FOUND = 1
      MATERIAL_NOT_FOUND   = 2
      NACH_MEINS_MISSING   = 3
      OVERFLOW             = 4
      VON_MEINS_MISSING    = 5
      OTHERS               = 6.
  if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    V_LINE_AMOUNT = ( V_CRMEMO_QTY  * WA_CRMEMO-ZMENG * WA_EKPO-peinh * WA_EKPO-NETPR ).
    V_GROSSAMT    = V_GROSSAMT + V_LINE_AMOUNT.
  ENDIF.
ENDFORM.                    " f_quantity_conv
*&      Form  f_currency_amount_sap_to_bapi
*       SAP Amount to BAPI Amount
FORM f_currency_amount_sap_to_bapi  USING    p_waers
                                             p_kbetr
                                    CHANGING p_amt_doccur.
  DATA : lv_waers LIKE  tcurc-waers,
         lv_sapamount LIKE bapicurr-bapicurr,
         lv_bapi_amount LIKE bapicurr-bapicurr.
  lv_waers = p_waers.
  lv_sapamount = p_kbetr.
  CALL FUNCTION 'CURRENCY_AMOUNT_SAP_TO_BAPI'
    EXPORTING
      currency    = lv_waers
      sap_amount  = lv_sapamount
    IMPORTING
      bapi_amount = lv_bapi_amount.
  p_amt_doccur = lv_bapi_amount.
ENDFORM.                    " f_currency_amount_sap_to_bapi
*&      Form  f_display_report
*       Display Report
FORM f_display_report .
*-- Success Report
  IF NOT IT_SUCCESS[] IS INITIAL.
    ULINE AT /1(129).
    WRITE:/1 sy-vline, 'CR Memo',
           19 sy-vline, 'Credit Memo',
           39 sy-vline, 'Sales Order',
           59 sy-vline, 'Purchase Order',
           79 sy-vline, 'MIRO Number',
           99 sy-vline, 'Text',
           129 sy-vline.
    ULINE AT /1(129).
    LOOP AT it_success into wa_success.
      WRITE:/1 sy-vline, wa_success-crmemo,
             19 sy-vline, wa_success-cmemo,
             39 sy-vline, wa_success-orders,
             59 sy-vline, wa_success-po,
             79 sy-vline, wa_success-miro_no,
             99 sy-vline, wa_success-text,
             129 sy-vline.
    ENDLOOP.
    ULINE AT /1(129).
    SKIP 2.
  ENDIF.
*-- Error Report
  IF NOT IT_ERROR[] IS INITIAL.
    ULINE AT /1(179).
    WRITE:/1 sy-vline,  'CR Memo',
           19 sy-vline, 'Credit Memo',
           39 sy-vline, 'Sales Order',
           59 sy-vline, 'Purchase Order',
           79 sy-vline, 'Error Text',
           179 sy-vline.
    ULINE AT /1(179).
    LOOP AT IT_ERROR into WA_ERROR.
      WRITE:/1 sy-vline, WA_ERROR-crmemo,
             19 sy-vline, WA_ERROR-cmemo,
             39 sy-vline, WA_ERROR-orders,
             59 sy-vline, WA_ERROR-po,
             79 sy-vline, WA_ERROR-text,
             179 sy-vline.
    ENDLOOP.
    ULINE AT /1(179).
  ENDIF.
  IF NOT IT_SUCCESS_MR8M[] IS INITIAL.
    ULINE AT /1(129).
    WRITE:/1 sy-vline, 'CR Memo',
           19 sy-vline, 'Credit Memo',
           39 sy-vline, 'Sales Order',
           59 sy-vline, 'Purchase Order',
           79 sy-vline, 'Reversal Posting No.',
           99 sy-vline, 'Text',
           129 sy-vline.
    ULINE AT /1(129).
    LOOP AT it_success_mr8m into wa_success_mr8m.
      WRITE:/1 sy-vline, wa_success_mr8m-crmemo,
             19 sy-vline, wa_success_mr8m-cmemo,
             39 sy-vline, wa_success_mr8m-orders,
             59 sy-vline, wa_success_mr8m-po,
             79 sy-vline, wa_success_mr8m-miro_no,
             99 sy-vline, wa_success_mr8m-text,
             129 sy-vline.
    ENDLOOP.
    ULINE AT /1(129).
    SKIP 2.
  ENDIF.
*-- Error Report
  IF NOT IT_ERROR_MR8M[] IS INITIAL.
    ULINE AT /1(179).
    WRITE:/1 sy-vline,  'CR Memo',
           19 sy-vline, 'Credit Memo',
           39 sy-vline, 'Sales Order',
           59 sy-vline, 'Purchase Order',
           79 sy-vline, 'Error Text',
           179 sy-vline.
    ULINE AT /1(179).
    LOOP AT IT_ERROR_MR8M into WA_ERROR_MR8M.
      WRITE:/1 sy-vline, WA_ERROR_MR8M-crmemo,
             19 sy-vline, WA_ERROR_MR8M-cmemo,
             39 sy-vline, WA_ERROR_MR8M-orders,
             59 sy-vline, WA_ERROR_MR8M-po,
             79 sy-vline, WA_ERROR_MR8M-text,
             179 sy-vline.
    ENDLOOP.
    ULINE AT /1(179).
  ENDIF.
ENDFORM.                    " f_display_report
*&      Form  F_PROCESS_MR8M
*       Process Reversal postings
FORM F_PROCESS_MR8M .
  clear: wa_CRMEMO_MR8M.
  LOOP AT IT_CRMEMO_MR8M into WA_CRMEMO_MR8M.
   read table it_cdpos into wa_cdpos with key OBJECTID = WA_CRMEMO_MR8M-VBELN.
   if sy-subrc <> 0.
     CONTINUE.
   ELSE.
   if wa_cdpos-value_old in s_augru.
    READ TABLE IT_ORDERS INTO WA_ORDERS WITH KEY VBELN = wa_CRMEMO_MR8M-VBELN
                                                 POSNN = wa_CRMEMO_MR8M-POSNR.
    IF SY-SUBRC = 0.
*      READ TABLE IT_CMEMO INTO WA_CMEMO WITH KEY VBELV = WA_ORDERS-VBELV
*                                                 POSNV = WA_ORDERS-POSNV.
*      IF SY-SUBRC = 0.
        READ TABLE IT_PO INTO WA_PO WITH KEY VBELV = WA_ORDERS-VBELV
                                             POSNV = WA_ORDERS-POSNV.
        IF SY-SUBRC = 0.
          READ TABLE IT_EKPO INTO WA_EKPO WITH KEY EBELN = WA_PO-VBELN
                                                   EBELP = WA_PO-POSNN.
          IF SY-SUBRC = 0.
*          READ TABLE IT_EKBE INTO WA_EKBE WITH KEY EBELN = WA_EKPO-EBELN
*                                                   EBELP = WA_EKPO-EBELP.
*          IF SY-SUBRC = 0.
            LOOP AT IT_EKBE into WA_EKBE WHERE EBELN = WA_EKPO-EBELN
                                         AND   EBELP = WA_EKPO-EBELP.
              READ TABLE IT_RBKP INTO WA_RBKP WITH KEY BELNR = WA_EKBE-BELNR
                                                       GJAHR = WA_EKBE-GJAHR
*                                                     BLDAT = WA_CRMEMO_MR8M-AEDAT
                                                       XBLNR+0(10) = WA_EKBE-EBELN
                                                       XRECH = SPACE
                                                       STBLG = SPACE.
              IF SY-SUBRC = 0.
                move: WA_RBKP-BELNR   TO X_REV_POST-INV_DOC_NO,
                      WA_RBKP-GJAHR   TO X_REV_POST-FISC_YEAR,
                      WA_RBKP-BUDAT   TO X_REV_POST-PSTNG_DATE.
                IF WA_RBKP-BUDAT+4(2) = SY-DATUM+4(2).
                  X_REV_POST-REASON_REV = C_01.
                ELSE.
                  X_REV_POST-REASON_REV = C_02.
                ENDIF.
              ENDIF.
            ENDLOOP.
*-- Call the FM for MIRO reversal
              CALL FUNCTION 'BAPI_INCOMINGINVOICE_CANCEL'
              EXPORTING
                INVOICEDOCNUMBER          = X_REV_POST-INV_DOC_NO
                FISCALYEAR                = X_REV_POST-FISC_YEAR
                REASONREVERSAL            = X_REV_POST-REASON_REV
                POSTINGDATE               = X_REV_POST-PSTNG_DATE
              IMPORTING
                INVOICEDOCNUMBER_REVERSAL = X_REV_POST-INV_DOC_NO
                FISCALYEAR_REVERSAL       = X_REV_POST-FISC_YEAR
              TABLES
                RETURN                    = it_return_mr8m.
*-- Commit work
            IF NOT X_REV_POST-INV_DOC_NO IS INITIAL.
              CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                EXPORTING
                  wait = 'X'.
*-- Move the data to Success Internal Table
              wa_success_mr8m-crmemo  = wa_crmemo-vbeln.
              wa_success_mr8m-cmemo   = wa_cmemo-vbeln.
              wa_success_mr8m-orders  = wa_orders-vbelv.
              wa_success_mr8m-po      = wa_po-vbeln.
              wa_success_mr8m-text    = 'MR8M Done'.
              append wa_success_mr8m TO it_success_mr8m.
              clear wa_success_mr8m.
            ENDIF.
*-- Read the values in the table IT_RETURN.
            CLEAR it_return_mr8m.
            READ TABLE it_return_mr8m INDEX 1.
*-- If message type is error then roll back the work
            IF it_return_mr8m-type = 'E' .
*-- Roll back
              CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*-- Move the data to Error Internal Table
              wa_error_mr8m-crmemo = wa_crmemo-vbeln.
              wa_error_mr8m-cmemo  = wa_cmemo-vbeln.
              wa_error_mr8m-orders = wa_orders-vbelv.
              wa_error_mr8m-po     = wa_po-vbeln.
              wa_error_mr8m-text   = it_return_mr8m-MESSAGE.
              append wa_error_mr8m TO it_error_mr8m.
              clear wa_error_mr8m.
            ENDIF.
*            ENDIF.
*          ENDIF.
          ENDIF.
        ENDIF.
*      ENDIF.
    ENDIF.
    ENDIF.
    ENDIF.
    CLEAR: wa_error_mr8m, wa_SUCCESS_mr8m, X_REV_POST, wa_CRMEMO_MR8M,
           wa_orders, wa_po, wa_ekpo, wa_ekbe, wa_rbkp, wa_cmemo.
    REFRESH: IT_RETURN_MR8M.
  endloop.
ENDFORM.                    " F_PROCESS_MR8M
*&      Form  F_spool_id
*       Create a new spool ID
FORM F_spool_id .
*-- Create a new spool from the data in data_tab
*--  new-page line-size sy-linsz print on
  new-page line-size 255 print on
  destination 'LOCL'(p19) "<<== my printer
*-- receiver 'TJOSVOB'
  cover text 'Spool title'(p20) " <<== Title or Spool req. name
  list name 'List name'(p21)
  list dataset 'List Dataset'(p22)
  immediately ' '                  " X means print now
  keep in spool c_x                " X means keep spool
  new list identification c_x
  no dialog .
*-- Writing Report
*-- In this  perform you will write the code for displaying the list
  perform f_display_report.
*--  new-page print off
  new-page print off.
ENDFORM.                    " F_spool_id
*&      Form  F_MAIL_LOGIC
*       Logic to send a mail for the given Email ID's
FORM F_MAIL_LOGIC .
  data : wa_tsp01sys type tsp01sys.
  clear v_spono.
  v_spono = sy-spono.
*  v_attach_desc = sy-title.
*-- Convert the Spool ID into PDF format
  perform f_pdf_conversion tables it_compressed_list
                                  it_pdf_list
                                  using  v_spono.
*-- Send the Mail in PDF Format
  perform f_send_mail.
ENDFORM.                    " F_MAIL_LOGIC
*&      Form  f_pdf_conversion
*       Read the spool and convert into PDF format
*      -->P_ITAB_COMPRESSED_LIST  text
*      -->P_ITAB_PDF_LIST  text
*      -->P_V_SPONO  text
FORM f_pdf_conversion  TABLES   it_compressed_list structure soli
                                it_pdf_list structure tline
                       using    lv_spooln type tsp01-rqident.
clear: it_compressed_list, it_pdf_list.
refresh: it_compressed_list, it_pdf_list.
*-- Call the FM "RSPO_RETURN_SPOOLJOB" to read the spool by passing the spool number
  call function 'RSPO_RETURN_SPOOLJOB'
       exporting
            rqident              = lv_spooln
            desired_type         = v_type
       importing
            real_type            = v_type
       tables
            buffer               = it_compressed_list
            buffer_pdf           = it_pdf_list
       exceptions
            no_such_job          = 1
            job_contains_no_data = 2
            selection_empty      = 3
            no_permission        = 4
            can_not_access       = 5
            read_error           = 6
            type_no_match        = 7
            others               = 8.
  if sy-subrc <> 0.
    message I000 with 'Error in spool reading'(017).
  endif.
*-- If the List type is ALI call the FM "CONVERT_ABAPSPOOLJOB_2_PDF"
*   to convert list into PDF Format
  if  v_type = c_ali.                          " for List it is ALI
    call function 'CONVERT_ABAPSPOOLJOB_2_PDF'
         exporting
              src_spoolid              = lv_spooln
         tables
              pdf                      = it_pdf
         exceptions
              err_no_abap_spooljob     = 1
              err_no_spooljob          = 2
              err_no_permission        = 3
              err_conv_not_possible    = 4
              err_bad_destdevice       = 5
              user_cancelled           = 6
              err_spoolerror           = 7
              err_temseerror           = 8
              err_btcjob_open_failed   = 9
              err_btcjob_submit_failed = 10
              err_btcjob_close_failed  = 11
              others                   = 12.
    if sy-subrc <> 0.
      message e000
              with'Error in convertion of list into PDF format'(018).
    endif.
*-- Logic to convert the given format into 255 character format in IT_PDF
    describe table it_pdf lines v_lines.
    describe field it_pdf length v_lineslen  IN character MODE.
    describe field it_temp length v_mimelen IN character MODE.
    LOOP AT it_pdf.
      v_tabix = sy-tabix.
      MOVE it_pdf TO v_temp+v_offset.
      IF v_tabix = v_lines.
        v_lineslen = strlen( it_pdf ).
      ENDIF.
      v_offset = v_offset + v_lineslen.
      IF v_offset GE v_mimelen.
        CLEAR it_temp.
        it_temp = v_temp(v_mimelen).
        APPEND it_temp.
        SHIFT v_temp BY v_mimelen PLACES.
        v_offset = v_offset - v_mimelen.
      ENDIF.
      IF v_tabix = v_lines.
        IF v_offset GT 0.
          CLEAR it_temp.
          it_temp = v_temp(v_offset).
          APPEND it_temp.
        ENDIF.
      ENDIF.
    ENDLOOP.
    LOOP AT it_temp.
      it_mime(255) = it_temp-line.
      APPEND it_mime.
    ENDLOOP.
*-- Final Data to send to EMail
    it_html[] = it_mime[].
  endif.
ENDFORM.                    " f_pdf_conversion
*&      Form  f_send_mail
*       Send EMail Logic
FORM f_send_mail .
data : wa_tsp01sys type tsp01sys.
*-- Populate Mail Id's
  WA_RECLIST-REC_TYPE = P_MODE.
  WA_RECLIST-EXPRESS  = C_X.
*-- Loop through the Emial select options
  LOOP AT S_EMAIL INTO X_EMAIL.
    WA_RECLIST-RECEIVER = X_EMAIL-LOW.
*-- append receiver table
    APPEND WA_RECLIST TO IT_RECLIST.
  ENDLOOP.
*-- If receiver table is not initial
  CHECK IT_RECLIST[] IS NOT INITIAL.
*--To check Mail ID's internal table should not be Empty.
*--populate document attributes
*-- Mail subject line
  CLEAR: X_DOC_CHNG.
  X_DOC_CHNG-OBJ_NAME = 'HEADING'.
  CONCATENATE 'Automatic Vendor Dedit Postings'(005)
              SY-DATUM
              INTO X_DOC_CHNG-OBJ_DESCR SEPARATED BY SPACE.
*-- Mail body
  CONCATENATE 'Automatic Vendor Dedit Postings'(005)
             ' is attached.'(006)
             INTO WA_OBJTXT SEPARATED BY SPACE.
  APPEND WA_OBJTXT TO IT_OBJTXT.
*-- Append Date and Time into Body of em

Similar Messages

  • What Function Module can be used to create vendor master data in SAP R/3?

    Hello -
    I've been trying to find a standard SAP delivered BAPI that can be used to create vendor master records in ECC 6.0. Up to this point I have not been able to do so. With SAP MDM solutions and SRM solutions it seems logical that SAP would deliver a standard BAPI that can be used to create vendor master records in the ERP/R3 environment (similar to the BAPI_MATERIAL_SAVEREPLICA for creating material master data records).
    I have been able to find BAPI_VENDOR_CREATE but this only calls the online transaction and does not offer much additional functionality beyond what transaction code XK02 already offers.
    The next best alternative appears to be IDOC_INPUT_CREDITOR but our preference would be to not use IDOCs for the project we are working on.
    Can anyone offer any insight or personal experience on how vendor master records have been successfully interfaced with SAP R/3? Did you have to use IDOCs or create a custom RFC call? Thanks for the help!
    Rich Wortmann
    << Personal information removed >>
    Edited by: Rob Burbank on May 14, 2009 10:43 AM

    Quite a gap in the BAPI arsenal. I think the options are IDoc, which you don't want, good old program RFBIKR00 (requires flat file for input, can be used via LSMW) or DIY (very complex).
    Thomas

  • Update email in Vendor master through PRAA

    Hi,
    Is it possible to create email id in communication tab of Vendor master through PRAA.
    I have read so many threads, but not got any solution.
    I know it is not possible without do any development, could you please highlight some inputs to do this?
    Regards
    SM

    Hello SM,
    As per the documentation in SE38 on program RPRAPA00, the system creates
    vendor records by reading the infotypes:
    Actions (Infotype 0000)
    Organizational Assignment (Infotype 0001)
    Personal Data (Infotype 0002)
    Permanent Residence (Infotype 0006 Subtype 1)
    Bank Details (Infotype 0009 Subtype 0 or 2)
    The Communication (Infotype 0105) where the email address is stored is
    not read. Even if the 0105 was read and was able to populate field
    SMTP_ADDR with an email address in the vendor master record it is
    actually not possible to email remittance/payment advices to vendors
    after running the payment run (F110) or creating the DME file. It is
    only possible to fax or print payment advices. An Alternative suggestion
    to other customer is to used the User Exit in note 570023 and 407827.
    407827 - RFFO: mail payment advice notes
    570023 - User exits for the generation of vendors with RPRAPA00
    You can use the Interface SAMPLE_PROCESS_00002040 in note 407827.
    Regards,
    Raynard

  • Run time error while create Vendor master via MK01

    Dear Experts,
    when i try to create vendor master by MK01.....system throws run time error as below:
    "The exception 'CX_BADI_MULTIPLY_IMPLEMENTED' was raised, but it was not caught
    anywhere along
    the call hierarchy.
    Since exceptions represent error situations and this error was not
    adequately responded to, the running ABAP program
    'CVI_MAP_TITLE=================CP' has to be
    terminated."
    My current system is ECC 6 along with DBM. Business partner configuration is activated in the current system. I am getting this error after BP configuration. Could you please help me to fix this issue?.......Is it due to configuration or a dump from abap program?
    Regards
    Vetrivelan

    Hii,
       please search sdn before posting the threads.
    check these  links, it may help u............
    Short Dump - CX_BADI_MULTIPLY_IMPLEMENTED - BADI Q1SR1
    Short Dump - CX_BADI_MULTIPLY_IMPLEMENTED - BADI Q1SR1
    CX_BADI_NOT_IMPLEMENTED
    thanks.

  • Creating Vendor Master Records from HR Master Records

    Dear Experts,
    I have been using t-code PRAA to create vendor master records from HR master records.  The client would like to have one vendor number for a group of employees (in this case external contractors all working for the same company).  The system won't allow me to link several PERNR to one LIFNR (i.e. error message).
    Is it, however, possible to do this?
    Thank you.
    Edited by: Philip on Jan 14, 2011 9:58 PM

    Hi ,
    PRAA has one to one relation ship , means it created 1 vendor for 1 employee .
    If you are using PERNR then you cant use one vendor to may PERNR .
    Either create them as individual vendor or else have a manual control system in place where in you will have to create a dummy PERNR and then allocate all the cost to this invidual vendor , if you are paying the check to only 1 contractor for say 100 contract employees you can use this .
    else it is a better mechanism and control to have 1 is to 1 in case of employee to vedor .
    Regards ,
    Dewaang T.

  • Default values for creating vendor master data

    Hi.
    Is it possible to set default value for payment term and planning group when creating vendor master data of a specific account group?
    Thanks in advance.

    HI,
    1, Create a vendor in your Account group as the reference vendor account
    2, By t-code:XK01, create new vendor with reference vendor of step 1,
       then the system will transfer the value from your reference vendor.
    Regards
    Ravinagh Boni

  • Why I cannot input Recon. acount when I create vendor master in XK01

    The field of Recon. acount is greyed out when I create vendor master in XK01. Can any expert help?
    BR, Eda

    Hi Eda,
               in the vendor account group, the field selection is guided by three different config.
    The path is IMG>Financial Accounting(New)>Accounts Receivable and Accounts Payable>Vendor Accounts>Master Data-->Preparations for Creating Vendor Master Data........
    1  Define Account Groups with Screen Layout (Vendors)
    2  Define Screen Layout per Company Code (Vendors)
    3  Define Screen Layout per Activity (Vendors).
    Please check at the given following 3 places, in any one of them it must be defined in the display mode.
    Hope it helps.
    Regards,
    Yawar Khan
    Edited by: 1234_abcd on Jun 10, 2011 7:33 AM

  • While creating vendor master , it should not accept duplicate VAT number

    while creating vendor master , it should not accept duplicate VAT number
    implement this with function exit.

    there is no link in vendor master creation that could check that company code and purchasing org are belonging together.
    the vendor master is in general just 3 more or less independend levels: general data, company code data, purchasing org data.
    Why should it not be possible to maintain a company code data view for any company code available in customizing?
    Why should it not be possible to maintainpurchasing org data view for any purchasing org available in customizing?
    Assume you have a system with 3 companies and 3 purchasing orgs maintained for one vendor, then you have 9 potential combinations. then 3 combinations would make sense, while 6 possible other combination would not give any sense.
    1 - 1 makes sense
    2 - 2 makes sense
    3 - 3 makes sense
    1 - 2 no sense
    1 - 3 no sense
    2 - 1 no sense
    2 - 3 no sense
    3 - 1 no sense
    3 - 2 no sense
    As there is no restriction (except auhtority) the user can create any meaningful and nonsense combination in vendor master creation in one go.
    But fact is that you  have to have 3 companies and 3 purchasing orgs maintained for one vendor. While creating purchase orders SAP checks if the combination entered in the PO does make sense.
    the users who are able to create vendors should have skills to do so.

  • Creating sales order through Bapi

    Hi all,
    I am trying to create sales order through bapi.
    Now my problem is mapping sales order fields with bapi structure fields.
    1.'Overall Order status' field in the 'Status' tab of the header in VA02.
    2.'Tax'feild in the 'conditions' tab of the header in VA02.
    Please help me to map these fields into Bapi structure.
    Thanks in advance.
    Regards,
    Shalem.

    HI
    GOOD
    GO THROUGH THIS LINK,I HOPE THIS WILL GIVE YOU THE COMPLETE IDETA OF CREATING A SALES ORDER THROUGH BAPI,
    http://help.sap.com/saphelp_nw04/helpdata/en/4c/fd7ebb515911d395f900a0c94260a5/content.htm
    http://www.sappoint.com/abap/bapiintro.pdf
    THANKS
    MRUTYUN

  • Error while creating vendor master data via ALE

    Dear All
    I am trying to create vendor master data via ALE.
    I am using message type CREMAS.
    I get following error message in inbound system
    No batch input data for screen SAPMF02K 0610
    Message no. 00344
    If i try to manually create vendor , there is no error.  This particular screen belong to withholding tax, however all customizing settings for withholding tax are okay.
    please help.
    Thanks
    Sanjeev

    Try SAP Note # 96312 if that helps.

  • BAPI or FM to create Vendor Master

    I need a BAPI or FM/API to create a vendor master.  Yes I know, there is BAPI_VENDOR_CREATE but it does not allow you to import any data.  Is there a BAPI/FM/API that creates a vendor master while allowing you to import data (like BAPI_MATERIAL_SAVEDATA for materials).
    Thanks,
    Davis

    Refer to the following and award points if useful.BAPI is like using standard function modules.We will populate the parameters and handle errors from that.See the code below which is vendor debit posting.You can get an idea by the following code.
    See the start of selection if this is confusing to you and understand the usage
                       TABLES
    TABLES: VBAK,
            ADR6,
            TRDYSE01CM.
                       INCLUDE
    INCLUDE ZZUTI_STD_HEADER_FOOTER. "Standard header and footer
    TYPES DECLARATION
    TYPES:
      BEGIN OF T_CRMEMO,
        VBELN TYPE VBAK-VBELN,
        POSNR TYPE VBAP-POSNR,
        ERDAT TYPE VBAK-ERDAT,
        AUART TYPE VBAK-AUART,
        AUGRU TYPE VBAK-AUGRU,
        WAERK TYPE VBAK-WAERK,
        VKORG TYPE VBAK-VKORG,
        VTWEG TYPE VBAK-VTWEG,
        SPART TYPE VBAK-SPART,
        VDATU TYPE VBAK-VDATU,
        BSTNK TYPE VBAK-BSTNK,
        BSARK TYPE VBAK-BSARK,
        BSTDK TYPE VBAK-BSTDK,
        AEDAT TYPE VBAK-AEDAT,
        BUKRS_VF TYPE VBAK-BUKRS_VF,
        MATNR TYPE VBAP-MATNR,
        ZMENG TYPE VBAP-ZMENG,
        ZIEME TYPE VBAP-ZIEME,
      END OF T_CRMEMO,
      BEGIN OF T_CRMEMO_CHANGE,
        VBELN(90) TYPE C,
        POSNR TYPE VBAP-POSNR,
        ERDAT TYPE VBAK-ERDAT,
        AUART TYPE VBAK-AUART,
        AUGRU TYPE VBAK-AUGRU,
        WAERK TYPE VBAK-WAERK,
        VKORG TYPE VBAK-VKORG,
        VTWEG TYPE VBAK-VTWEG,
        SPART TYPE VBAK-SPART,
        VDATU TYPE VBAK-VDATU,
        BSTNK TYPE VBAK-BSTNK,
        BSARK TYPE VBAK-BSARK,
        BSTDK TYPE VBAK-BSTDK,
        AEDAT TYPE VBAK-AEDAT,
        BUKRS_VF TYPE VBAK-BUKRS_VF,
        MATNR TYPE VBAP-MATNR,
        ZMENG TYPE VBAP-ZMENG,
        ZIEME TYPE VBAP-ZIEME,
      END OF T_CRMEMO_CHANGE,
      BEGIN OF T_MVKE,
        MATNR  TYPE MVKE-MATNR,
        VKORG  TYPE MVKE-VKORG,
        VTWEG  TYPE MVKE-VTWEG,
        MTPOS  TYPE MVKE-MTPOS,
      END OF T_MVKE,
      BEGIN OF T_ORDERS,
        VBELV   TYPE VBFA-VBELV,
        POSNV   TYPE VBFA-POSNV,
        VBELN   TYPE VBFA-VBELN,
        POSNN   TYPE VBFA-POSNN,
        VBTYP_N TYPE VBFA-VBTYP_N,
      END OF T_ORDERS,
      BEGIN OF T_EKPO,
        EBELN   TYPE EKKO-EBELN,
        EBELP   TYPE EKPO-EBELP,
        WAERS   TYPE EKKO-WAERS,
        MENGE   TYPE EKPO-MENGE,
        MEINS   TYPE EKPO-MEINS,
        NETPR   TYPE EKPO-NETPR,
        PEINH   TYPE EKPO-PEINH,
        mwskz   TYPE EKPO-mwskz,
        TXJCD   TYPE EKPO-TXJCD,
      END OF T_EKPO,
      BEGIN OF T_EKBE,
        EBELN   TYPE EKBE-EBELN,
        EBELP   TYPE EKBE-EBELP,
        ZEKKN   TYPE EKBE-ZEKKN,
        VGABE   TYPE EKBE-VGABE,
        GJAHR   TYPE EKBE-GJAHR,
        BELNR   TYPE EKBE-BELNR,
        BUZEI   TYPE EKBE-BUZEI,
      END OF T_EKBE,
      BEGIN OF T_RBKP,
        BELNR   TYPE RBKP-BELNR,
        GJAHR   TYPE RBKP-GJAHR,
        BLDAT   TYPE RBKP-BLDAT,
        BUDAT   TYPE RBKP-BUDAT,
        XBLNR   TYPE RBKP-XBLNR,
        LIFNR   TYPE RBKP-LIFNR,
        RMWWR   TYPE RBKP-RMWWR,
        WMWST1  TYPE RBKP-WMWST1,
        XRECH   TYPE RBKP-XRECH,
        STBLG   TYPE RBKP-STBLG,
      END OF T_RBKP,
      BEGIN OF T_CDHDR,
        OBJECTCLAS TYPE CDHDR-OBJECTCLAS,
        OBJECTID   TYPE CDHDR-OBJECTID,
        CHANGENR   TYPE CDHDR-CHANGENR,
        UDATE      TYPE CDHDR-UDATE,
        UTIME      TYPE CDHDR-UTIME,
      END OF T_CDHDR,
      BEGIN OF T_CDPOS,
        OBJECTCLAS TYPE CDHDR-OBJECTCLAS,
        OBJECTID   TYPE CDHDR-OBJECTID,
        CHANGENR   TYPE CDHDR-CHANGENR,
        TABNAME    TYPE CDPOS-TABNAME,
        TABKEY     TYPE CDPOS-TABKEY,
        FNAME      TYPE CDPOS-FNAME,
        CHNGIND    TYPE CDPOS-CHNGIND,
        VALUE_NEW  TYPE CDPOS-VALUE_NEW,
        VALUE_OLD  TYPE CDPOS-VALUE_OLD,
      END OF T_CDPOS,
      BEGIN OF T_CHANGE_DOCS,
        OBJECTCLAS TYPE CDHDR-OBJECTCLAS,
        OBJECTID   TYPE CDHDR-OBJECTID,
        CHANGENR   TYPE CDHDR-CHANGENR,
        UDATE      TYPE CDHDR-UDATE,
        UTIME      TYPE CDHDR-UTIME,
        TABNAME    TYPE CDPOS-TABNAME,
        TABKEY     TYPE CDPOS-TABKEY,
        FNAME      TYPE CDPOS-FNAME,
        CHNGIND    TYPE CDPOS-CHNGIND,
        VALUE_NEW  TYPE CDPOS-VALUE_NEW,
        VALUE_OLD  TYPE CDPOS-VALUE_OLD,
      END OF T_CHANGE_DOCS,
      BEGIN OF T_SUCCESS,
        crmemo    TYPE VBAK-vbeln,
        cmemo     TYPE VBAK-vbeln,
        orders    TYPE VBAK-vbeln,
        po        TYPE VBAK-vbeln,
        miro_no   TYPE VBAK-vbeln,
        text(20)  TYPE C,
      END OF T_SUCCESS,
      BEGIN OF T_ERROR,
        crmemo  TYPE VBAK-vbeln,
        cmemo     TYPE VBAK-vbeln,
        orders    TYPE VBAK-vbeln,
        po        TYPE VBAK-vbeln,
        miro_no   TYPE VBAK-vbeln,
        text(100) TYPE C,
      END OF T_ERROR.
                          WORKAREA DECLARATION
    DATA:
      WA_CRMEMO  TYPE T_CRMEMO,
      WA_CRMEMO_CHANGE TYPE T_CRMEMO_CHANGE,
      WA_MVKE    TYPE T_MVKE,
      WA_ORDERS  TYPE T_ORDERS,
      WA_CMEMO   TYPE  T_ORDERS,
      WA_PO      TYPE T_ORDERS,
      WA_EKPO    TYPE T_EKPO,
      WA_EKBE    TYPE T_EKBE,
      WA_EKBE_TEMP TYPE T_EKBE,
      WA_RBKP    TYPE T_RBKP,
      WA_RBKP_TMP TYPE T_RBKP,
      WA_CDHDR   TYPE T_CDHDR,
      WA_CDPOS   TYPE T_CDPOS,
      WA_CHANGE_DOCS TYPE T_CHANGE_DOCS,
      WA_CRMEMO_MR8M  TYPE T_CRMEMO,
      WA_SUCCESS TYPE T_SUCCESS,
      WA_ERROR   TYPE T_ERROR,
      WA_SUCCESS_MR8M TYPE T_SUCCESS,
      WA_ERROR_MR8M   TYPE T_ERROR.
    *--Work area for all the internal tables used for Sending Mail
    DATA :
      WA_OBJPACK TYPE SOPCKLSTI1,
      WA_OBJHEAD TYPE SOLISTI1,
      WA_OBJBIN TYPE SOLISTI1,
      WA_OBJTXT TYPE SOLISTI1,
      WA_RECLIST TYPE SOMLRECI1 .
    DATA:
    *-- Structure to hold Invoice Header Data
      x_docheader LIKE bapi_incinv_create_header,
    *-- Structure to hold Reversal Posting Data
      x_rev_post LIKE BAPI_INCINV_FLD.
                     INTERNAL TAABLE DECLARATION
    DATA:
      IT_CRMEMO      TYPE STANDARD TABLE OF T_CRMEMO   WITH HEADER LINE,
      IT_CRMEMO_CHANGE TYPE STANDARD TABLE OF T_CRMEMO_CHANGE WITH HEADER LINE,
      IT_MVKE        TYPE STANDARD TABLE OF T_MVKE     WITH HEADER LINE,
      IT_CRMEMO_MIRO TYPE STANDARD TABLE OF T_CRMEMO   WITH HEADER LINE,
      IT_CRMEMO_MR8M TYPE STANDARD TABLE OF T_CRMEMO   WITH HEADER LINE,
      IT_ORDERS      TYPE STANDARD TABLE OF T_ORDERS   WITH HEADER LINE,
      IT_CMEMO       TYPE STANDARD TABLE OF T_ORDERS   WITH HEADER LINE,
      IT_PO          TYPE STANDARD TABLE OF T_ORDERS   WITH HEADER LINE,
      IT_EKPO        TYPE STANDARD TABLE OF T_EKPO     WITH HEADER LINE,
      IT_EKBE        TYPE STANDARD TABLE OF T_EKBE     WITH HEADER LINE,
      IT_EKBE_TEMP    TYPE STANDARD TABLE OF T_EKBE    WITH HEADER LINE,
      IT_RBKP        TYPE STANDARD TABLE OF T_RBKP     WITH HEADER LINE,
      IT_CDHDR       TYPE STANDARD TABLE OF T_CDHDR    WITH HEADER LINE,
      IT_CDPOS       TYPE STANDARD TABLE OF T_CDPOS    WITH HEADER LINE,
      IT_CHANGE_DOCS TYPE STANDARD TABLE OF T_CHANGE_DOCS WITH HEADER LINE,
      IT_SUCCESS     TYPE STANDARD TABLE OF T_SUCCESS  WITH HEADER LINE,
      IT_ERROR       TYPE STANDARD TABLE OF T_ERROR    WITH HEADER LINE,
      IT_SUCCESS_MR8M TYPE STANDARD TABLE OF T_SUCCESS WITH HEADER LINE,
      IT_ERROR_MR8M  TYPE STANDARD TABLE OF T_ERROR    WITH HEADER LINE.
    *-- Internal table to hold Invoice Item Data
    DATA:BEGIN OF it_itemdata OCCURS 0.
           INCLUDE STRUCTURE bapi_incinv_create_item.
    DATA:END OF it_itemdata.
    *-- Internal table to hold Invoice Acct Assignment Data
    DATA:BEGIN OF it_ACCOUNTingdata OCCURS 0.
           INCLUDE STRUCTURE BAPI_INCINV_CREATE_ACCOUNT.
    DATA:END OF it_accountingdata.
    *-- Internal table to hold BAPI return data
    DATA: BEGIN OF it_return OCCURS 0.
            INCLUDE STRUCTURE bapiret2.  "Return Parameter.
    DATA: END OF it_return.
    *-- Internal table to hold BAPI return data
    DATA: BEGIN OF it_return_mr8m OCCURS 0.
            INCLUDE STRUCTURE bapiret2.  "Return Parameter.
    DATA: END OF it_return_mr8m.
    *--MAIL related Internal tables
    DATA: X_DOC_CHNG TYPE SODOCCHGI1,                      " document attributes
          IT_OBJPACK TYPE STANDARD TABLE OF SOPCKLSTI1,    " attachment table
          IT_OBJHEAD TYPE STANDARD TABLE OF SOLISTI1,      " object header table
          IT_OBJBIN TYPE STANDARD TABLE OF SOLISTI1,       " binary table
          IT_OBJTXT TYPE STANDARD TABLE OF SOLISTI1,       " object text
          IT_RECLIST TYPE STANDARD TABLE OF SOMLRECI1,     " mail recipients
          it_compressed_list TYPE STANDARD TABLE OF SOLI,
          it_pdf_list TYPE STANDARD TABLE OF TLINE,
          it_pdf  TYPE tline OCCURS 10 WITH HEADER LINE,
          it_html  TYPE solisti1   OCCURS 10  WITH HEADER LINE,
    *-- Internal table for MIME data (in CHAR format)
          it_temp   TYPE bapiqcmime OCCURS 10 WITH HEADER LINE,
    *-- Internal table for storing data
          it_mime(255) TYPE c OCCURS 10 WITH HEADER LINE.
    GLOBAL VARIABLES                                                     *
    DATA: V_PGM_ID      TYPE SY-REPID,                    " Program id
          v_zterm       TYPE lfb1-zterm,                  " Payment Terms
          v_text(75)    TYPE c,                           " To store error or success text
          v_itemno(6)   TYPE n,                           " To Increment Item No. for BAPI
          v_docnr       LIKE bapi_incinv_fld-inv_doc_no,  " For MIRO document number
          v_year1       LIKE bapi_incinv_fld-fisc_year,   " For MIRO Fiscal year
          v_spono       type TSP01-RQIDENT,               " For Spool No.
          v_type        type SOODK-OBJTP,                 " For Spool Type
          V_CRMEMO_QTY  TYPE VBAP-ZMENG,                  " For CR Memo Qty.
          V_LINE_AMOUNT TYPE EKPO-NETPR,                  " For CR Memo Item Qty.
          V_GROSSAMT    TYPE EKPO-NETPR,                  " For CR Memo Grand Qty.
          v_tax_per(3)  type n,                           " For CR Memo Tax amount %
          v_tax_amt     TYPE EKPO-NETPR,                  " For CR Memo Tax amount
          v_flag(1)     type c,                           " Flag to process fruther
          v_tot_s_mr8m  TYPE i,                           " For MR8M Success Records
          v_tot_e_mr8m  TYPE i,                           " For MR8M Error Records
          V_DATE        TYPE SY-DATUM,                    " For Sel. Screen Date
          V_DATE2(10)   TYPE C,                           " For EMail Date
          V_TIME(10)    TYPE C,                           " For EMail Time
          V_TIME2(10)   TYPE C,                           " For EMail Time
          V_INFO(100)   TYPE C,                           " For EMail Body Text
          V_TABLE_LINES TYPE SY-TABIX,                    " To Increment Email Count
          V_TEXT2       TYPE STRING   ,                   " For EMail Id text
          v_lines       TYPE i,                           " To Store PDF Lines
          v_temp(500)   TYPE c,                           " To Convert to 255 char format
          v_offset      TYPE p,                           " To Convert to 255 char format
          v_lineslen    TYPE i,                           " To Convert to 255 char format
          v_mimelen     TYPE i,                           " To Convert to 255 char format
          v_tabix       type sy-tabix.                    " To Convert to 255 char format
    CONSTANTS                                                            *
    CONSTANTS:
      C_X(1)            TYPE C          VALUE 'X',       " Constant X or Flag
      C_E(1)            TYPE C          VALUE 'E',       " For Error check
      c_v(1)            TYPE C          VALUE 'V',       " For PO Docs
      c_o(1)            TYPE C          VALUE 'O',       " For Order Docs
      c_c(1)            TYPE C          VALUE 'C',       " For Credit Memo Docs
      c_k(1)            TYPE C          VALUE 'K',       " For CR Memo Docs
      c_u(1)            TYPE C          VALUE 'U',       " For Change tables Update
      c_ali(3)          TYPE C          VALUE 'ALI',     " For ALI Format
      c_vbak(4)         TYPE C          VALUE 'VBAK',    " For Change docs table
      C_01(2)           TYPE C          VALUE '01',      " For Serial No. & Reversal Reason
      C_02(2)           TYPE C          VALUE '02',      " For Reversal Reason
      c_blart           TYPE bkpf-blart VALUE 'RE',      " Document type
      C_MTPOS           TYPE MVKE-MTPOS VALUE 'BANS',    " Item Category group
      C_AUGRU(5)        TYPE C          VALUE 'AUGRU',   " Reason Code
      C_0000500205(10)  TYPE C          VALUE '0000500205', " GL Account #
      C_VERKBELEG(9)    TYPE C          VALUE 'VERKBELEG'.  " For Object Class
    *-- Horizontal tab & line feed constants
    CLASS CL_ABAP_CHAR_UTILITIES DEFINITION LOAD.
    CONSTANTS:
      C_TAB  TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,
      C_CR_LF TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF .
    SELECTION SCREEN
    *-- Select Optons
    SELECTION-SCREEN: BEGIN OF BLOCK B01 WITH FRAME TITLE TEXT-001.
      SELECT-OPTIONS: S_AUART FOR VBAK-AUART OBLIGATORY NO INTERVALS,
                                                         " Sales Document Type
                      S_AUGRU FOR VBAK-AUGRU OBLIGATORY NO INTERVALS,
                                                         " Order reason
                      S_ERDAT FOR VBAK-ERDAT OBLIGATORY.
                                        " Date on which the record was created
    SELECTION-SCREEN: END OF BLOCK B01.
    *-- Mail Sending Options
    SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-004.
      PARAMETERS:P_EMAIL AS CHECKBOX DEFAULT SPACE USER-COMMAND V_COM .
      PARAMETERS : P_MODE TYPE SO_ESCAPE   default 'U' MODIF ID US1.
      SELECT-OPTIONS: S_EMAIL FOR ADR6-SMTP_ADDR
                                          NO INTERVALS MODIF ID US2.
    SELECT-OPTIONS: S_EMAIL FOR TRDYSE01CM-USERNAME
                                         NO INTERVALS MODIF ID US2.
      SELECTION-SCREEN: BEGIN OF LINE.
        SELECTION-SCREEN: COMMENT 55(40) TEXT-019 MODIF ID US2.
      SELECTION-SCREEN: END OF LINE.
    SELECTION-SCREEN END OF BLOCK B2.
               WORK AREA for SELECT-OPTIONS
    DATA :  X_EMAIL LIKE S_EMAIL.   "Work area for EMAIL select-options
    INITIALIZATION
    INITIALIZATION.
    *-- Default values for Sales Document Type
      CLEAR S_AUART[].
      S_AUART-SIGN = 'I'.
      S_AUART-OPTION = 'EQ'.
      S_AUART-LOW = 'CR'.
      APPEND S_AUART.
      CLEAR S_AUART.
    *-- Default values for Date on which the record was created
      V_DATE = ( SY-DATUM - 1 ).
      CLEAR S_ERDAT[].
      S_ERDAT-SIGN = 'I'.
      S_ERDAT-OPTION = 'EQ'.
      S_ERDAT-LOW =  SY-DATUM.
      S_ERDAT-HIGH =  SY-DATUM.
      APPEND S_ERDAT.
      CLEAR S_ERDAT.
                       TOP OF PAGE                                       *
    TOP-OF-PAGE.
    *-- Displaying standard header.
      PERFORM std_top_of_page USING sy-title.
    A T  S E L E C T I O N   S C R E E N  O U T P U T
    *-- For modifying the selection screen layout
    AT SELECTION-SCREEN OUTPUT.
      PERFORM F_MODIFY_SCREEN.
                       AT SELECTION SCREEN.                              *
    AT SELECTION-SCREEN.
    *-- Subroutine to Validate selection screen fields
      PERFORM f_validate.
    START-OF-SELECTION                                                  *
    *START-OF-SELECTION.*
    **-- Fetch the Credit Memo Requests documents*
      *PERFORM F_GET_CREDIT_MEMO_REQUEST.*
      *IF NOT IT_CRMEMO[] IS INITIAL.*
    **-- Fetch Item Category Group*
        *PERFORM F_GET_MVKE_DOCS.*
    **-- Fetch Sales Order documents, PO Documents and Credit Memos*
        *PERFORM F_GET_SO_PO_DOCS.*
      *ENDIF.*
    **-- If Credit memo request internal table have an change records then*
       fetch the change documents from CDHDR and CDPOS*
      *IF NOT IT_CRMEMO_CHANGE[] IS INITIAL.*
    **-- Fetch Change Documents for CR Memos from CDHDR and CDPOS tables*
        *PERFORM F_GET_CHANGED_DOCS.*
      *ENDIF.*
    **-- Fetch Purchasing Document Item Details*
      *IF NOT IT_PO[] IS INITIAL.*
        *PERFORM F_GET_EKPO.*
      *ENDIF.*
    **-- Fetch MIRO Vendor based on the PO Details*
      IF NOT IT_EKPO[] IS INITIAL.
        PERFORM F_GET_VENDOR.
      ENDIF.
    END-OF-SELECTION                                                    *
      if v_flag is initial.
    *-- Process Vendor Debit Postings
        PERFORM F_PROCESS_MIRO.
    *-- Process Reversal Postings of Vendor Automatic Debits using TCODE MR8M
        PERFORM F_PROCESS_MR8M.
    *-- Send mail,if user enters Email id's and Email Mode is not initial
        IF P_EMAIL = C_X AND P_MODE IS NOT INITIAL AND S_EMAIL[] IS NOT INITIAL.
    *-- Get spool id
          perform f_spool_id.
    *-- EMail Logic
          PERFORM F_MAIL_LOGIC.
        ENDIF.
    *-- display the EMail RSCONN01 and Sussess and Error records of MIRO and MR8M
        perform f_display_report.
      else.
    *-- Else exit the process
        exit.
      endif.
    *&      Form  F_MODIFY_SCREEN
          A Form routine to modify the screen
    FORM F_MODIFY_SCREEN .
    *-- To Modify Mail Sending Options
      LOOP AT SCREEN.
        IF P_EMAIL = C_X.
          IF SCREEN-GROUP1 = 'US1' .
            SCREEN-INVISIBLE = 0.
            SCREEN-ACTIVE = 1.
            SCREEN-INPUT = 0.
            MODIFY SCREEN.
          ENDIF.
          IF SCREEN-GROUP2 = 'US2' .
            SCREEN-INVISIBLE = 0.
            SCREEN-ACTIVE = 1.
            MODIFY SCREEN.
          ENDIF.
        ELSEIF P_EMAIL = SPACE.
          IF SCREEN-GROUP1 = 'US1' .
            SCREEN-INVISIBLE = 1.
            SCREEN-ACTIVE = 0.
            MODIFY SCREEN.
          ENDIF.
          IF SCREEN-GROUP1 = 'US2' .
            SCREEN-INVISIBLE = 1.
            SCREEN-ACTIVE = 0.
            MODIFY SCREEN.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    " F_MODIFY_SCREEN
    *&      Form  f_validate
          Validation of Selection-Screen Inputs
    FORM f_validate .
    *-- Validate Sales Document Type
      if not s_AUART[] is initial.
        select  AUART
          into s_AUART-low
          from TVAK up to 1 rows
          where AUART in s_AUART.
        endselect.
        if sy-subrc  0.
          message E000 with 'Invalid Sales Document Type'(e01) .
        endif.
      ENDIF.
    *-- Validate Order reason (reason for the business transaction)
      if not s_AUGRU[] is initial.
        select  AUGRU
          into s_AUGRU-low
          from TVAU up to 1 rows
          where AUGRU in s_AUGRU.
        endselect.
        if sy-subrc  0.
          message E000 with 'Invalid Order reason'(e02) .
        endif.
      endif.
    ENDFORM.                    " f_validate
    *&      Form  F_GET_CREDIT_MEMO_REQUEST
          Fetch Credit memo requests from VBAK & VBAP
    FORM F_GET_CREDIT_MEMO_REQUEST .
      SELECT A~VBELN
             B~POSNR
             A~ERDAT
             A~AUART
             A~AUGRU
             A~WAERK
             A~VKORG
             A~VTWEG
             A~SPART
             A~VDATU
             A~BSTNK
             A~BSARK
             A~BSTDK
             A~AEDAT
             A~BUKRS_VF
             B~MATNR
             B~ZMENG
             B~ZIEME
        INTO TABLE IT_CRMEMO
        FROM ( VBAK AS A
        INNER JOIN VBAP AS B ON AVBELN = BVBELN )
        WHERE ( A~ERDAT IN S_ERDAT
          OR  A~AEDAT IN S_ERDAT )
          AND A~AUART IN S_AUART.
      IF SY-SUBRC = 0.
        SORT IT_CRMEMO BY VBELN POSNR.
      ELSE.
        MESSAGE I000 WITH 'No Credit Memo Request selected'(002).
        v_flag = C_X.
        stop.
      ENDIF.
    ENDFORM.                    " F_GET_CREDIT_MEMO_REQUEST
    *&      Form  F_GET_MVKE_DOCS
          Fetch Sales Data for Material
    FORM F_GET_MVKE_DOCS .
      DATA: LV_TABIX TYPE SY-TABIX.
    *-- Fetch Sales Data for Material
      SELECT MATNR      " Material Number
             VKORG      " Sales Organization
             VTWEG      " Distribution Channel
             MTPOS      " Item category group from material master
        FROM MVKE       " Sales Data for Material
        INTO TABLE IT_MVKE
        FOR ALL ENTRIES IN IT_CRMEMO
        WHERE MATNR = IT_CRMEMO-MATNR
          AND VKORG = IT_CRMEMO-VKORG
          AND VTWEG = IT_CRMEMO-VTWEG.
      IF SY-SUBRC = 0.
        SORT IT_MVKE BY MATNR VKORG VTWEG MTPOS.
      ENDIF.
    *-- Validate Item category group if MVKE-MTOPS  'BANS' then ignore CM Request line item
      LOOP AT IT_CRMEMO INTO WA_CRMEMO.
        LV_TABIX = SY-TABIX.
        READ TABLE IT_MVKE INTO WA_MVKE WITH KEY MATNR = WA_CRMEMO-MATNR
                                                 VKORG = WA_CRMEMO-VKORG
                                                 VTWEG = WA_CRMEMO-VTWEG
                                                 MTPOS = C_MTPOS
                                                 BINARY SEARCH.
        IF SY-SUBRC  0.
          DELETE IT_CRMEMO INDEX LV_TABIX.    " Delete CR memo records
        ELSE.
    *-- Else check for credit memo request change date is not initial, and
      append those records to IT_CRMEMO_CHANGE internal table to retrive
      change documents
          IF NOT WA_CRMEMO-AEDAT IS INITIAL.
            WA_CRMEMO_CHANGE-VBELN = WA_CRMEMO-VBELN.
            WA_CRMEMO_CHANGE-POSNR = WA_CRMEMO-POSNR.
            WA_CRMEMO_CHANGE-ERDAT = WA_CRMEMO-ERDAT.
            WA_CRMEMO_CHANGE-AUART = WA_CRMEMO-AUART.
            WA_CRMEMO_CHANGE-AUGRU = WA_CRMEMO-AUGRU.
            WA_CRMEMO_CHANGE-WAERK = WA_CRMEMO-WAERK.
            WA_CRMEMO_CHANGE-VKORG = WA_CRMEMO-VKORG.
            WA_CRMEMO_CHANGE-VTWEG = WA_CRMEMO-VTWEG.
            WA_CRMEMO_CHANGE-SPART = WA_CRMEMO-SPART.
            WA_CRMEMO_CHANGE-VDATU = WA_CRMEMO-VDATU.
            WA_CRMEMO_CHANGE-BSTNK = WA_CRMEMO-BSTNK.
            WA_CRMEMO_CHANGE-BSARK = WA_CRMEMO-BSARK.
            WA_CRMEMO_CHANGE-BSTDK = WA_CRMEMO-BSTDK.
            WA_CRMEMO_CHANGE-AEDAT = WA_CRMEMO-AEDAT.
            WA_CRMEMO_CHANGE-BUKRS_VF = WA_CRMEMO-BUKRS_VF.
            WA_CRMEMO_CHANGE-MATNR = WA_CRMEMO-MATNR.
            WA_CRMEMO_CHANGE-ZMENG = WA_CRMEMO-ZMENG.
            WA_CRMEMO_CHANGE-ZIEME = WA_CRMEMO-ZIEME.
            APPEND WA_CRMEMO_CHANGE TO IT_CRMEMO_CHANGE.
            CLEAR WA_CRMEMO_CHANGE.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    " F_GET_MVKE_DOCS
    *&      Form  F_GET_SO_PO_DOCS
          Fetch the Sales Order documents, PO documents, & Credit Memo
    FORM F_GET_SO_PO_DOCS.
    *-- Fetch Preceding sales orders based on the credit memo request
      SELECT VBELV
             POSNV
             VBELN
             POSNN
             VBTYP_N
        FROM VBFA
        INTO TABLE IT_ORDERS
        FOR ALL ENTRIES IN IT_CRMEMO
        WHERE VBELN = IT_CRMEMO-VBELN
          AND POSNN = IT_CRMEMO-POSNR
          AND VBTYP_N = C_K
          AND VBTYP_V = C_C.
      IF SY-SUBRC = 0.
        SORT IT_ORDERS BY VBELV POSNV.
    *-- Fetch Subsequent PO documents & Credit Memo based on the sales orders
        SELECT VBELV
               POSNV
               VBELN
               POSNN
               VBTYP_N
          FROM VBFA
          INTO TABLE IT_PO
          FOR ALL ENTRIES IN IT_ORDERS
          WHERE VBELV = IT_ORDERS-VBELV
            AND POSNV = IT_ORDERS-POSNV
            AND VBTYP_N IN (C_V,C_O)
            AND VBTYP_V = C_C.
        IF SY-SUBRC = 0.
          SORT IT_PO BY VBTYP_N.
    *-- Copy the IT_PO internal table contents to IT_CMEMO internal table
          IT_CMEMO[] = IT_PO[].
    *-- Delete PO documents from IT_CMEMO internal table
          DELETE IT_CMEMO WHERE VBTYP_N = C_V.
          SORT IT_CMEMO BY VBELN POSNN.
          IF IT_CMEMO[] IS INITIAL.
            MESSAGE I000 WITH 'No Credit Memo are available for CM Request'(003).
           v_flag = c_x.
           stop.
          ENDIF.
    *-- Delete Credit Memo documents from IT_PO internal table
          DELETE IT_PO WHERE VBTYP_N = C_O.
          SORT IT_PO BY VBELN POSNN.
        ENDIF.
      ENDIF.
    ENDFORM.                    " F_GET_SO_PO_DOCS
    *&      Form  F_GET_CHANGED_DOCS
          Fetch Change Documents for CR Memos from CDHDR and CDPOS tables
    FORM F_GET_CHANGED_DOCS .
    *-- Fetch Change Documents for CR Memos from CDHDR
      SELECT OBJECTCLAS
             OBJECTID
             CHANGENR
             UDATE
             UTIME
      FROM CDHDR
      INTO TABLE IT_CDHDR
      FOR ALL ENTRIES IN IT_CRMEMO_CHANGE
      WHERE OBJECTCLAS = C_VERKBELEG
        AND OBJECTID   = IT_CRMEMO_CHANGE-VBELN
       AND UDATE      = IT_CRMEMO_CHANGE-AEDAT
      IF SY-SUBRC = 0.
        SORT IT_CDHDR BY OBJECTCLAS OBJECTID CHANGENR.
    *-- Fetch Change Documents for CR Memos from CDPOS
        SELECT OBJECTCLAS
               OBJECTID
               CHANGENR
               TABNAME
               TABKEY
               FNAME
               CHNGIND
               VALUE_NEW
               VALUE_OLD
          FROM CDPOS
          INTO TABLE IT_CDPOS
          FOR ALL ENTRIES IN IT_CDHDR
          WHERE OBJECTCLAS = C_VERKBELEG
            AND OBJECTID   = IT_CDHDR-OBJECTID
            AND CHANGENR   = IT_CDHDR-CHANGENR
            AND TABNAME    = C_VBAK
            AND FNAME      = C_AUGRU
            AND CHNGIND    = C_U.
        IF SY-SUBRC = 0.
          SORT IT_CDPOS BY OBJECTCLAS OBJECTID CHANGENR.
        ENDIF.
      ENDIF.
    ENDFORM.                    " F_GET_CHANGED_DOCS
    *&      Form  F_GET_EKPO
          Fetch Purchasing Document Item Details
    FORM F_GET_EKPO .
    *-- Fetch Purchasing Document Item Details
      SELECT A~EBELN
             B~EBELP
             A~WAERS
             B~MENGE
             B~MEINS
             B~NETPR
             B~PEINH
             B~mwskz
             B~TXJCD
      INTO TABLE IT_EKPO
      FROM ( EKKO AS A
      INNER JOIN EKPO AS B ON AEBELN = BEBELN )
      FOR ALL ENTRIES IN IT_PO
      WHERE A~EBELN = IT_PO-VBELN
        AND B~EBELP = IT_PO-POSNN+1(5).
      IF SY-SUBRC = 0.
        SORT IT_EKPO BY EBELN EBELP.
      ENDIF.
    ENDFORM.                    " F_GET_EKPO
    *&      Form  F_GET_VENDOR
          Fetch MIRO Vendor details based on the PO Details
    FORM F_GET_VENDOR .
    DATA: LV_TABIX TYPE SY-TABIX.
    *-- Fetch History per Purchasing Document records for all the PO records
      SELECT EBELN
             EBELP
             ZEKKN
             VGABE
             GJAHR
             BELNR
             BUZEI
      FROM EKBE
      INTO TABLE IT_EKBE
      FOR ALL ENTRIES IN IT_EKPO
      WHERE EBELN = IT_EKPO-EBELN
        AND EBELP = IT_EKPO-EBELP
        AND VGABE = '2'.
       and STBLG = space.
      IF SY-SUBRC = 0.
        SORT IT_EKBE BY BELNR GJAHR.
    *-- Fetch the vendor details based on table IT_EKBE internal table
        SELECT BELNR
               GJAHR
               BLDAT
               BUDAT
               XBLNR
               LIFNR
               RMWWR
               WMWST1
               XRECH
               STBLG
        FROM RBKP
        INTO TABLE IT_RBKP
        FOR ALL ENTRIES IN IT_EKBE
        WHERE BELNR = IT_EKBE-BELNR
          AND GJAHR = IT_EKBE-GJAHR.
        IF SY-SUBRC = 0.
          SORT IT_RBKP BY BELNR GJAHR.
        ENDIF.
      ENDIF.
    *-- Sort PO History documents based on PO # and PO Item
      SORT IT_EKBE BY EBELN EBELP.
    *-- Copy the PO History documents into IT_EKBE_TEMP internal table
      IT_EKBE_TEMP[] = IT_EKBE[].
    *-- Delete PO History documents from IT_EKBE_TEMP internal table
      comparing with IT_RBKP where (STBLG) Reversal document number
      is initial
      LOOP AT IT_EKBE_TEMP INTO WA_EKBE_TEMP.
        LV_TABIX = SY-TABIX.
        READ TABLE IT_RBKP INTO WA_RBKP WITH KEY BELNR = WA_EKBE_TEMP-BELNR
                                                 GJAHR = WA_EKBE_TEMP-GJAHR
                                                XRECH = SPACE
                                                 STBLG = SPACE.
        IF SY-SUBRC  0.
          DELETE IT_EKBE_TEMP INDEX LV_TABIX.
        ENDIF.
        CLEAR: WA_EKBE_TEMP, WA_RBKP.
      ENDLOOP.
    ENDFORM.                    " F_GET_VENDOR
    *&      Form  F_PROCESS_MIRO
          Process MIRO
    FORM F_PROCESS_MIRO .
      DATA:
        lv_itemno         TYPE i,
        lv_tabix          type sy-index,
        lc_check(1)       TYPE c VALUE 'X',
        V_FILL_ITEM,
        lv_rbkp_bldat type sy-datum.
      clear : it_itemdata, it_accountingdata, IT_CRMEMO_MIRO, IT_CRMEMO_MR8M.
      refresh : it_itemdata, it_accountingdata, IT_CRMEMO_MIRO, IT_CRMEMO_MR8M.
    *-- Copy all the CR Memo Docs and delete order reason not in S_AUGRU
      IT_CRMEMO_MR8M[] = IT_CRMEMO[].
    *-- Delete Reversal postings which are not in S_AUGRU
      DELETE IT_CRMEMO_MR8M WHERE AUGRU IN S_AUGRU.
    *-- Delete Reversal postings where AEDAT is initial
      DELETE IT_CRMEMO_MR8M where aedat is initial.
    *-- Delete order reason which are not in S_AUGRU
      DELETE IT_CRMEMO WHERE AUGRU NOT IN S_AUGRU.
    *-- Loop through the credit memo request records
      LOOP AT IT_CRMEMO INTO WA_CRMEMO.
        lv_tabix = sy-tabix.
    *-- If credit memo request change date is not initial then
      send change date (AEDAT) to lv_rbkp_bldat
        if not WA_CRMEMO-aedat is initial.
          lv_rbkp_bldat =  WA_CRMEMO-aedat.
        else.
    *-- If credit memo request change date is initial then
      send create date (ERDAT) to lv_rbkp_bldat
          lv_rbkp_bldat =  WA_CRMEMO-erdat.
        endif.
        READ TABLE IT_ORDERS INTO WA_ORDERS WITH KEY VBELN = WA_CRMEMO-VBELN
                                                     POSNN = WA_CRMEMO-POSNR.
        IF SY-SUBRC = 0.
          READ TABLE IT_PO INTO WA_PO WITH KEY VBELV = WA_ORDERS-VBELV
                                               POSNV = WA_ORDERS-POSNV.
          IF SY-SUBRC = 0.
            READ TABLE IT_EKPO INTO WA_EKPO WITH KEY EBELN = WA_PO-VBELN
                                                     EBELP = WA_PO-POSNN.
            IF SY-SUBRC = 0.
    *-- Read IT_EKBE_TEMP internal table which contains records which are not reversed
              READ TABLE IT_EKBE_TEMP INTO WA_EKBE_TEMP WITH KEY EBELN = WA_EKPO-EBELN
                                                                 EBELP = WA_EKPO-EBELP.
              IF SY-SUBRC = 0.
    *-- Read IT_RBKP internal table with XRECH (Indicator: post invoice) = 'X' ,
      check for invoice records for the correspnding CR Memo records
                READ TABLE IT_RBKP INTO WA_RBKP WITH KEY BELNR = WA_EKBE_TEMP-BELNR
                                                         GJAHR = WA_EKBE_TEMP-GJAHR
                                                         XRECH = C_X.
                IF SY-SUBRC = 0.
    *-- Read IT_RBKP internal table with XRECH (Indicator: post invoice) = SPACE,
      and document date = CR Memo creation date
      and reference document number = PO number
                  READ TABLE IT_RBKP INTO WA_RBKP_TMP WITH KEY BELNR = WA_EKBE_TEMP-BELNR
                                                               GJAHR = WA_EKBE_TEMP-GJAHR
                                                               BLDAT = WA_CRMEMO-ERDAT
                                                               XRECH = ' '
                                                               XBLNR+0(10) = WA_EKBE_TEMP-ebeln.
                                                              STBLG = SPACE.
                  IF SY-SUBRC = 0.
                    CONTINUE.
                  ELSE.
    *-- Quantity Conversion (Get the Credit Memo Quantity by passing CMR unit per one PO unit)
                    perform f_quantity_conv.
    *-- Filling the Line items data
    *-- Incrementing the item no
                    lv_itemno = lv_itemno + 1.
                    v_itemno  = lv_itemno.
                    it_itemdata-invoice_doc_item  = v_itemno.
                    it_itemdata-po_number         = WA_ekPO-ebeln.
                    it_itemdata-po_item           = WA_EKPO-EBELP.
                    it_itemdata-tax_code          = WA_ekpo-mwskz.
                    it_itemdata-TAXJURCODE        = WA_ekpo-TXJCD.
    *-- Converting SAP amount to BAPI format by passing line item amount and currency
                    PERFORM f_currency_amount_sap_to_bapi USING    WA_EKPO-waers
                                                                   V_LINE_AMOUNT
                                                          CHANGING it_itemdata-item_amount .
                    it_itemdata-quantity          = ( WA_CRMEMO-ZMENG * V_CRMEMO_QTY ).
                    it_itemdata-po_unit           = WA_EKPO-MEINS.
                    APPEND it_itemdata.
    *-- Populate Account Assignment data
                    IT_ACCOUNTINGDATA-INVOICE_DOC_ITEM = v_itemno.
                    IT_ACCOUNTINGDATA-XUNPL       = space.
                    IT_ACCOUNTINGDATA-SERIAL_NO   = C_01.
                    IT_ACCOUNTINGDATA-TAX_CODE    = it_itemdata-tax_code.
                    IT_ACCOUNTINGDATA-TAXJURCODE  = it_itemdata-TAXJURCODE.
                    IT_ACCOUNTINGDATA-ITEM_AMOUNT = it_itemdata-item_amount.
                    IT_ACCOUNTINGDATA-QUANTITY    = it_itemdata-quantity.
                    IT_ACCOUNTINGDATA-PO_UNIT     = it_itemdata-po_unit.
                    IT_ACCOUNTINGDATA-GL_ACCOUNT  = C_0000500205.
                    append IT_ACCOUNTINGDATA.
                    clear IT_ACCOUNTINGDATA.
                    CLEAR it_itemdata.
                  endif.
                endif.
              ENDIF.
            ENDIF.
          ENDIF.
        ENDIF.
    *-- At end of each credit memo request fill the header details of BAPI FM and
    *-- post the BAPI
        AT END OF VBELN.
          read table it_crmemo into wa_crmemo index lv_tabix.
    *-- Populate the document Header
    *-- Getting the header data for invoice
          x_docheader-invoice_ind  = space.
          x_docheader-doc_type     = c_blart.
          x_docheader-doc_date     = lv_rbkp_bldat.
          x_docheader-pstng_date   = lv_rbkp_bldat.
          x_docheader-ref_doc_no   = WA_RBKP-XBLNR.
          x_docheader-comp_code    = WA_CRMEMO-BUKRS_VF.
          x_docheader-CURRENCY     = WA_CRMEMO-WAERK.
          x_docheader-calc_tax_ind = lc_check.
    *-- Logic to find the Tax %
          v_tax_per = ( WA_RBKP-WMWST1 / ( WA_RBKP-RMWWR - WA_RBKP-WMWST1 ) ) * 100.
          v_tax_amt = ( V_GROSSAMT *  v_tax_per ) / 100.
          V_GROSSAMT =  ( V_GROSSAMT + v_tax_amt ).
          x_docheader-gross_amount = V_GROSSAMT.
          CLEAR:v_docnr, v_year1.
    *-- Calling BAPI to create PO invoice document
          CHECK NOT IT_ITEMDATA[] IS INITIAL.
          CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE'
            EXPORTING
              headerdata       = x_docheader
            IMPORTING
              invoicedocnumber = v_docnr
              fiscalyear       = v_year1
            TABLES
              itemdata         = it_itemdata[]
              ACCOUNTingDATA    = it_ACCOUNTingDATA[]
             GLACCOUNTDATA    =
             taxdata          =
              return           = it_return.
    *-- Commit work
          IF NOT v_docnr IS INITIAL.
            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
                wait = 'X'.
    *-- Move the data to Success Internal Table
            wa_success-crmemo  = wa_crmemo-vbeln.
            wa_success-cmemo   = wa_cmemo-vbeln.
            wa_success-orders  = wa_orders-vbelv.
            wa_success-po      = wa_po-vbeln.
            wa_success-miro_no = v_docnr.
            wa_success-text    = 'MIRO is Posted'.
            append wa_success TO it_success.
            clear wa_success.
          ENDIF.
    *--   Read the values in the table IT_RETURN.
          CLEAR it_return.
          READ TABLE it_return INDEX 1.
      If message type is error then roll back the work
          IF it_return-type = C_E.
    *-- Roll back
            CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    *-- Move the data to Error Internal Table
            wa_error-crmemo = wa_crmemo-vbeln.
            wa_error-cmemo  = wa_cmemo-vbeln.
            wa_error-orders = wa_orders-vbelv.
            wa_error-po     = wa_po-vbeln.
            wa_error-text   = it_return-MESSAGE.
            append wa_error TO it_error.
            clear wa_error.
          ENDIF.
          refresh: it_return, it_itemdata, it_accountingdata.
          clear: V_GROSSAMT, it_return, it_itemdata, wa_crmemo, wa_orders, wa_po,
                 wa_ekpo, WA_EKBE_TEMP, wa_rbkp, wa_rbkp_tmp, v_docnr, v_year1, WA_SUCCESS,
                 WA_ERROR, it_accountingdata, v_tax_per, v_tax_amt, V_FILL_ITEM, lv_rbkp_bldat.
        ENDAT.
      ENDLOOP.
    ENDFORM.                    " F_PROCESS_MIRO
    *&      Form  f_quantity_conv
          Quantity Conversion
    FORM f_quantity_conv .
    *-- Quantity Conversion (Get the Credit Memo Quantity by passing CMR unit per one PO unit)
      CLEAR: V_LINE_AMOUNT, V_CRMEMO_QTY.
      call function 'MC_UNIT_CONVERSION'
        EXPORTING
          MATNR                = WA_CRMEMO-MATNR
          nach_meins           = WA_EKPO-MEINS
          von_meins            = WA_CRMEMO-ZIEME
        IMPORTING
          UMREF                = V_CRMEMO_QTY
        EXCEPTIONS
          CONVERSION_NOT_FOUND = 1
          MATERIAL_NOT_FOUND   = 2
          NACH_MEINS_MISSING   = 3
          OVERFLOW             = 4
          VON_MEINS_MISSING    = 5
          OTHERS               = 6.
      if sy-subrc  0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ELSE.
        V_LINE_AMOUNT = ( V_CRMEMO_QTY  * WA_CRMEMO-ZMENG * WA_EKPO-peinh * WA_EKPO-NETPR ).
        V_GROSSAMT    = V_GROSSAMT + V_LINE_AMOUNT.
      ENDIF.
    ENDFORM.                    " f_quantity_conv
    *&      Form  f_currency_amount_sap_to_bapi
          SAP Amount to BAPI Amount
    FORM f_currency_amount_sap_to_bapi  USING    p_waers
                                                 p_kbetr
                                        CHANGING p_amt_doccur.
      DATA : lv_waers LIKE  tcurc-waers,
             lv_sapamount LIKE bapicurr-bapicurr,
             lv_bapi_amount LIKE bapicurr-bapicurr.
      lv_waers = p_waers.
      lv_sapamount = p_kbetr.
      CALL FUNCTION 'CURRENCY_AMOUNT_SAP_TO_BAPI'
        EXPORTING
          currency    = lv_waers
          sap_amount  = lv_sapamount
        IMPORTING
          bapi_amount = lv_bapi_amount.
      p_amt_doccur = lv_bapi_amount.

  • LSMW Vendor Master Using BAPI

    Hi,
    Which BAPI is used for uploading Vendor Master including withholding tax details and bank details through LSMW Method
    or please suggest me the direct input program for the above details mentioned
    Method : LSMW
    immdetiate solution  is appreiciable
    Thanks

    Hi,
    You can use message CREMAS for your requirement..
    Regards,
    John.

  • Create Vendor Master Data

    hi
    I know that there is a bapi BAPI_VENDOR_CREATE but as far as I know this always pops up an input screen.
    Is there a bapi to create a vendor master data with input from outside without that screen??
    Thanks
    Go:khan

    GoKhan,
    The BAPI: <b>BAPI_VENDOR_CREATE</b> is for Online purpose ONLY!! Do not use it if you want background processing.
    As Ferry suggested, use <b>VENDOR_INSERT</b>.
    Alternately you can use <b>LSMW</b> with standard program processing using <b>RFBIKR00</b> or IDoc <b>DEBMAS</b>.
    Regards,
    Homiar.

  • Create Vendor master

    Hi gurus,
       How to create the vendor master data using LSMW Direct input.....
    Explain step by step...

    Hi
    Check this
    Check the following link:
    http://www.sapbrainsonline.com/TUTORIALS/TECHNICAL/LSMW_tutorial.html
    http://www.sapbrain.com/TOOLS/LSMW/SAP_LSMW_steps_introduction.html
    http://esnips.com/doc/8e732760-5548-44cc-a0bb-5982c9424f17/lsmw_sp.ppt
    http://esnips.com/doc/f55fef40-fb82-4e89-9000-88316699c323/Data-Transfer-Using-LSMW.zip
    http://esnips.com/doc/1cd73c19-4263-42a4-9d6f-ac5487b0ebcb/LSMW-with-Idocs.ppt
    http://esnips.com/doc/ef04c89f-f3a2-473c-beee-6db5bb3dbb0e/LSMW-with-BAPI.ppt
    http://esnips.com/doc/7582d072-6663-4388-803b-4b2b94d7f85e/LSMW.pdf
    for Long texts Upload
    Please take a look at this..
    http://help.sap.com/saphelp_erp2005/helpdata/en/e1/c6d30210e6cf4eac7b054a73f8fb1d/frameset.htm
    LSMW with TABLE CONTROL
    Refer the links -
    lsmw table control
    Re: Table control in LSMW
    Table control in LSMW
    Table Control in LSMW
    Re: Table Control in LSMW
    just refer to the link below
    http://www.sapmaterial.com/?gclid=CN322K28t4sCFQ-WbgodSGbK2g
    1. Maintain Attributes:
    Here you have to choose the second option and you can do the recording how this should work. Then assign the same to the Batch Input Recording name.
    2. Maintain Source structure:
    Create a structure name
    3. Maintain Source field:
    In this you have to create a structure same as that of the input file
    eg: name
    age
    4. Maintain structure relations:
    This will link the structure to the input file.
    5. Maintain field mapping and conversion rules:
    Here is the place where you can do coding, depending upon the code you have written or assignment you have done the values will get picked up from the file and get processed.
    6. Maintain field mapping and conversion rules:
    If you have any fixed values you can define here.
    7. Specify files:
    Specify the input file path and type.
    8. Assign files:
    This will assign ur file to the Input file
    9. Read Data:
    This will read ur data from teh file.
    10. Dispaly Read Data:
    You can see the uploaded data
    11. Convert Data
    This will convert the data to the corresponding format for processing
    12. Display Converted data:
    13. Create batch input session
    Here this will create a batch input session for processing
    14. Run Batch Input session:
    By clicking on the session and process the same you can do teh needfu.
    Regards
    Anji

  • Error while creating vendor master (xk01)

    i am trying to create a vendor master in t.code
    xk01, using standard objects, ie company code
    R300, purchasing org- R300, account group---LIEF.
    In  address screen, i entered country as US,
    system is giving an error
    *Communication error with the external tax system (VERTEX_MS0018)
    Message no. TAX_TXJCD864*
    pls give me a solution as soon as possible.
    rewards assured.

    Dear Pavan,
                   Check the input tax settings have been done in your  tax procedure with related to the country US.
    I hope it will help you
    Regards,
    Murali.

Maybe you are looking for