FI posting through BAPI

Hi experts
Can i have the sample program for invoice posting through bapi ,

hi,
Please refer this link
BAPI_ACC_INVOICE_RECEIPT_POST Error
or
search on this
https://www.sdn.sap.com/irj/scn/advancedsearch?query=invoicepostingthrough+bapi&cat=sdn_all
thanks

Similar Messages

  • Service PO Invoice posting through BAPI

    Hi Gurus,
    Please help me to resolve the issue explained below:
    We are using a third party tool for scanning incoming invoices from vendor.The scanned invoice details pass though SAP Interface and with the help of standard BAPI_INCOMINGINVOICE_CREATE in SAP ECC, invoices are automatically posted.
    Till now , we only had material/Goods PO invoices which use to get posted with quantity blocks before GR done.In future,SAP PM
    module will be implemented and service PO invoices will also be posted using this process.We have following issues for posting
    of invoices for service items:
    1.For service PO Invoice to get posted though BAPI, service entry number is mandatory without which system does not allow to post the invoices that is we can not have quantity blocked invoices if services have not been entered for service items.Even invoices can not be parked without service entry sheet no. for service items using BAPI.Please advise how this scenario can be handled.
    2.Second scenario is that if a particular service line has multiple service entry sheet numbers then which service entry sheet number should system use to post the invoice?
    Kindly advise.
    Thanks & Regards,
    Niti

    Dear Vipin,
    May I assume the following scenario. When you post an invoice manually and there's a small difference between the vendor amount and the total of the suggested amounts on items (plus VAT), you just adjust one of the items or enter unplanned delivery costs and this way avoid the disbalance.
    However, when you post the invoice automatically through BAPI, no such adjustment is made and the system tries to post the difference to the account defined behind the account key DIF. For this posting the system shall assign a tax code. One way to define this code is to assign the default tax codes in IMG for IV -> Incoming Invoice -> Maintain Default Values for Tax Codes.
    Or just make sure you define all the item amounts explicitly in the BAPI and there's no disbalance.
    BR
    Raf

  • Problem while posting FI document through BAPI - Multiple Exchange Rates

    I am able to post FI document with multiple exchange rates for the same currency using FB01. But, when I try to post the same document details using BAPI_ACC_DOCUMENT_POST , it throws an error F5 701 - Inconsistent Rate for Currency XXX .
    How can we avoid this error while posting through BAPI ?
    Thanks & Regards,
    Nidhi

    Hi Nidhi,
    Value range
        The field CURR_TYPE (currency type) describes the role played by a
        currency in the SAP System.
        The currency type can take on the following values, for example:
        o   00      Transaction currency
        o   10      Company code currency
        o   20      Controlling area currency
        o   30      Group currency
        o   40      Hard currency
        o   50      Index-based currency
        o   60      Global company currency
        If an entry is not made in the field CURR_TYPE, the default value "00"
        is retained.
        If only one data record is transferred in transaction currency for each
        line item, the field CURR_TYPE does not need to be filled out. If
        several data records are transferred for each line item, the currency
        type must be entered for each record.
    If the parameter CurrencyAmount is filled with the currency fields,
    a complete document check including characteristics and value
    components of profitability analysis (CO-PA). Otherwise, the account
    assignment objects are checked.
    Check the BAPI documentation SE37.
    Regards,
    Boobalan Suburaj

  • F-28 Post incoming payment through BAPI with Clearing

    Hi Gurus
    I have a requirement to post Customer incoming payment through BAPI, I have seen some post where using
    BAPI_ACC_DOCUMENT_POST , we can post on account and later using f-32 we can clear. but there s some limitation doing that.
    In f-28 residual line items also got generated for short or excess payment. There is a problem for residual item posting also.
    If  residual amount belongs to more than one Profit Center then GL currency view and Local Currency view is also mismatching.
    Is is possible to clear customer line item also at the time of posting through BAPI.
    If any one implemented BAPI or any automatic process to post F-28 please share your experience and challenges.
    Thanks in advance
    Subrata Sarkar

    Hi
    There could be multiple approaches to this depending on what you want to achieve. If you just want to uplaod the documents, than the BAPI you mentioned could be the right approach. If however, you have fixed criterion for cash application for open items, you can probably look at a BDC to do the clearing.Once the BDC is recorded work with your ABAP colleague to write this up in a custom transaction. This is particualrly useful if you have more items to clear against an incoming payment.
    regards
    Sanil Bhandari

  • Need to Post Components in Production Order in MB1A through BAPI as Planned Good Issue

    Hi ,
    I have created a Program to upload data s for MB1A through BDC , it works fine, but for huge data s it takes more time.  alternatively created one more Program which updates through BAPI Function Module  "BAPI_GOODSMVT_CREATE".  It works fine , but one issue noted, after posting through Function Module , components are posted as Unplanned Goods Issue.   I need to post the components as " Planned Goods Issue" instead of "Unplanned Goods Issue " . This can viewed through Tcode : C003
    Below are the  inputs passed for BAPI Function Moduel
    **&------Header Contents of bapi Upload-------------------&*
    header-pstng_date = sy-datum.                                              " Posting date
    header-doc_date    = sy-datum.                                             " Document Date
    header-header_txt  = '000001002280'.                                     " Header text
    header-pr_uname   = sy-uname.                                            " User Name
    header-ref_doc_no  = '000001002280'.                                    " Header Ref. Doc. No.
    CONCATENATE sy-uname sy-uzeit c_method INTO  header-ref_doc_no_long SEPARATED BY '-'.  " Refer  Text
    *Item Data
    wa_item-material   = '000000000010000800'.                             "Material
    wa_item-plant      = '3910'.                                              "Plant
    wa_item-stge_loc   = 'WIP'.                                            "Storage Location
    wa_item-move_type  = '261'.                                            "Movement Type
    wa_item-entry_qnt  = '1'.                                                  "Quantity
    wa_item-entry_uom  = 'PC'.                                              "Unit
    *wa_item-res_item  =  1.                                                  "Reservation Item
    *wa_item-reserv_no =                                                      " Reservation Number
    wa_item-batch      = '0000011027'.                                    "Batch No
    *wa_item-mvt_ind   = 'F'.                                                  "Movement Indicator
    *wa_item-stck_type = 'F'.                                                 "Stock Type
    wa_item-orderid    = '000001002260'.                                 "Order ID
    wa_item-prod_date  = SY-DATUM.
    *wa_item-GL_Account = '610000'.                                     "GL Account
    *TRANSLATE wa_item-batch TO UPPER CASE.
    *APPEND wa_item TO it_item.
    c_code = '03'.
    CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
    goodsmvt_header       = header
    goodsmvt_code         = c_code
    TABLES
    goodsmvt_item         = it_item
    goodsmvt_serialnumber = it_sno
    return                = return.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
          wait = 'X'.
        commit work and wait.
    Even i tried to pass "Movement Indicator , GL Account etc" , Still not able to fix the issue. Can anyone suggest how to post the Production Order components as "Planned Goods Issue".  I am not sure any other values to be password.
    BR,
    Murali

    I have made something like your :
    * Alimtentation de la BAPI de mouvement de stock MM.
    move : sy-datum        to ls_header-pstng_date ,
            sy-datum        to ls_header-doc_date ,
    * Indique le code mouvement
            '03'            to lw_code.      " 03 normalement, mais je veux que ca plante
    loop at lt_ltap
          into ls_ltap.
       move : ls_ltap-matnr   to ls_item-material ,
              ls_ltap-werks   to ls_item-plant ,
              ls_ltap-lgort   to ls_item-stge_loc ,
              '261'           to ls_item-move_type ,
              ls_ltap-vsolm   to ls_item-entry_qnt ,
              ls_ltap-meins   to ls_item-entry_uom ,
              i_ltak_vb-benum to ls_item-orderid ,
              i_ltak_vb-rsnum to ls_item-reserv_no ,
              ls_ltap-rspos   to ls_item-res_item ,
              ls_ltap-rsart   to ls_item-res_type.
       append ls_item to lt_item.
       clear  ls_item.
    endloop.
    I have to put the reservation number to have it works.
    Fred

  • G/L Posting using BAPI

    Hi All,
    I need to make a FI-GL posting through my code. These are the following fields which I need to pass for the posting.
    1. Company Code
    2. Currency
    3. Document Date
    4. Posting Date
    5. Posting Key
    6. G/L Accounts
    7. Amount
    I have navigated through the list of BAPIs available and have found a BAPI BAPI_ACC_GL_POSTING_POST. I could map all the fields except the posting key. Thus I am not being able to work it out.
    Another BAPI which I have found out is BAPI_ACC_DOCUMENT_POST, but I do not know how to use it.
    Kindly tell me which BAPI shall I use for the G/L posting and how shall I use the same for posting with the fields as given above. It would be better if some used code sample be given.
    Thanks in advance,
    Paul.

    Hi,
    We have a Program to Upload the G/L accounts, use the Program <b>RFBISA00</b> , read the documentation of this program
    Look at this link
    http://www.sapfans.com/forums/viewtopic.php?t=137643&start=0&sid=a6635665faf0f6e91055271db867cb52
    Regards
    Sudheer

  • Freight vendor updation in GR document through BAPI

    Dear All
    In my system we are creating Goods Receipt in background through *BAPI BAPI_GOODSMVT_CREATE*. In my PO we have entered freight condition FRB1 for that PO line item and assigned a vendor code different from material vendor. For this freight condition FRB1 in the configuration we have maintained in Control Data 2 field Vendor in GR as 2 ( i.e. Entry always possible). This will help us to change freight vendor different from freight vendor maintained in PO line item.
    Now my query is that how can I achieve this through BAPI  BAPI BAPI_GOODSMVT_CREATE when I am creating GR in background. In which field of BAPI should we pass the freight vendor at the time of GR creation.
    Regards
    Satish Kumar

    Hi Satish,
    With standard SAP this is not Possible
    As indicated in the attached note 356665, the field SUPPL_VEND has no
    function. Please, have a look at this note for further information.
    In dialog (with MB01 or MIGO) you have the possibility to enter another
    freight vendor different than the vendor in your purchase order (or your
    scheduling agreement) as long as you have, in your purchasing condition
    type, "Vendor in GR" (V_T685A-BNKWE) maintained with the appropiate
    value. Then, by posting the Goods Receipt, you will update EKBZ with
    this new freight vendor.
    Unfortunately in the standard system this functionality is not available
    when working with the BAPI BAPI_GOODSMVT_CREATE or with the Idoc
    WMMBID02.
    There is no customizing setting or tool that you could use inside the
    standard system to change it.

  • How to update Assignment field in Accounting Document through BAPI ?

    I need to change Assignment field in already posted accounting document through bapi or some other automatic method. Please tell me exactly which bapi I should use and how can I pass the changed assignment field?

    Hey,
    I couldnt find any BAPIs which update an accounting document. I think the safest way is to record FB02 and use BDC/Call Transaction.
    -Kiran
    *Please reward useful answers

  • 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

  • SPL Entry posting through the transaction GB01

    Hi All,
    I have a requirement where I am uploading SPL entries as a file to the program where the entries has to be posted through GB01transaction.My queries:
    1. Kindly let me know is there any BAPI for GB01 to post
    2. I have to confirm posting successfull only if all entries in teh file got posted successfully. If not i have to roll back the BAPI.
    What if I go for BDC call transaction method for posting, how can I do roll back option in this case.
    Is there any option to check wheather entries will get posted successfully or not before proceeding with posting an entry.
    Kindly help me on this.
    Regards,
    Ashwini

    I tried posting entry through FM 'JV_GB01_DOCUMENT_POST'. Here is the code.
    types:  GUSL_S_RANGE LIKE RSDSSELOPT,
                  GUSL_T_RANGE TYPE GUSL_S_RANGE OCCURS 10.
    TYPES: BEGIN OF GUSL_S_SELECTION,
           FIELDNAME LIKE DFIES-FIELDNAME,
           T_RANGE   TYPE GUSL_T_RANGE,
           END   OF GUSL_S_SELECTION,
           GUSL_T_SELECTION TYPE GUSL_S_SELECTION OCCURS 20.
    *DATA: t_sel_glu1 TYPE gusl_t_glu1.
    data: t_sel_glu1 type standard table of glu1.
      DATA: t_post_glu1 LIKE glu1 OCCURS 0 WITH HEADER LINE.
        DATA: t_selection TYPE gusl_t_selection,
                s_selection TYPE gusl_s_selection.
          DATA LS_T800A    LIKE T800A.
    data: P_DOCCT_SEL  TYPE DOCCT,
          P_DOC_TEXT   TYPE SGTXT.
      DATA: s_range TYPE gusl_s_range,
            t_range TYPE gusl_t_range.
    P_DOCCT_SEL = 'L'.
      Document type (only documents from other applications)
      IF NOT P_DOCCT_SEL IS INITIAL.
        CLEAR: s_range, t_range, s_selection.
        refresh t_range.
        s_range-sign = 'I'.
        s_range-option = 'EQ'.
        s_range-low = P_DOCCT_SEL.
        APPEND s_range TO t_range.
        s_selection-fieldname = 'DOCCT'.
        s_selection-t_range = t_range.
        APPEND s_selection TO t_selection.
      ENDIF.
      Select records from database
    LS_T800A-NTABLE = 'ZCASHA'.
    CALL FUNCTION 'G_TABLE_SELECT_WITH_CURSOR'
       EXPORTING
         i_tabname      = LS_T800A-NTABLE
         i_selection    = t_selection
         i_zero_records = 'X'
       CHANGING
         c_t_glu1       = t_sel_glu1.
         if sy-subrc eq 0.
         endif.
       LOOP AT t_sel_glu1 INTO t_post_glu1.
          t_post_glu1-rclnt = sy-mandt.
         t_post_glu1-RLDNR  = 'ZC'.
          t_post_glu1-RTCUR = 'USD'.
          t_post_glu1-RVERS = '001'.
          t_post_glu1-tsl = 33.
          t_post_glu1-hsl = 33.
          t_post_glu1-ksl = 33.
         t_post_glu1-osl = t_post_glu1-osl * -1.
         t_post_glu1-msl = t_post_glu1-msl * -1.
         t_post_glu1-asl = t_post_glu1-asl * -1.
          t_post_glu1-racct = '0037000001'.
          t_post_glu1-rbukrs = 'US01'.
          t_post_glu1-bukrs = 'US01'.
          t_post_glu1-cputm = sy-uzeit.
          t_post_glu1-cpudt = sy-datum.
          t_post_glu1-usnam = sy-uname.
          t_post_glu1-budat = sy-datum.
          t_post_glu1-wsdat = sy-datum.
          t_post_glu1-LCURR = 'USD'.
          t_post_glu1-GCURR = 'USD'.
         t_post_glu1-glx_budat = sy-datum.
         t_post_glu1-glx_wsdat = sy-datum.
         t_post_glu1-key_flag = 1.
         t_post_glu1-data_flag = 'X'.
          t_post_glu1-DOCTY = 'A0'.
          t_post_glu1-DOCCT = 'G'.
          t_post_glu1-docln = '000001'.
         IF NOT P_DOC_TEXT IS INITIAL.
            t_post_glu1-sgtxt = 'item1'.
            t_post_glu1-activ = 'RGL0'.
         ENDIF.
         IF NOT P_DOCCT_REV IS INITIAL.
           t_post_glu1-docct = P_DOCCT_REV.
         ENDIF.
          APPEND t_post_glu1.
          t_post_glu1-rclnt = sy-mandt.
         t_post_glu1-RLDNR  = 'ZC'.
          t_post_glu1-RTCUR = 'USD'.
          t_post_glu1-RVERS = '001'.
          t_post_glu1-tsl = 33 * -1.
          t_post_glu1-hsl = 33 * -1.
          t_post_glu1-ksl = 33 * -1.
          t_post_glu1-racct = '0037000000'.
          t_post_glu1-rbukrs = 'US01'.
          t_post_glu1-bukrs = 'US01'.
          t_post_glu1-cputm = sy-uzeit.
          t_post_glu1-cpudt = sy-datum.
          t_post_glu1-usnam = sy-uname.
          t_post_glu1-budat = sy-datum.
          t_post_glu1-wsdat = sy-datum.
          t_post_glu1-lcurr = 'USD'.
          t_post_glu1-gcurr = 'USD'.
         t_post_glu1-glx_budat = sy-datum.
         t_post_glu1-glx_wxdat = sy-datum.
         t_post_glu1-key_flag = 1.
         t_post_glu1-data_flag = 'X'.
          t_post_glu1-DOCTY = 'A0'.
          t_post_glu1-DOCCT = 'G'.
          t_post_glu1-docln = '000002'.
          t_post_glu1-sgtxt = 'item2'.
          t_post_glu1-activ = 'RGL0'.
          APPEND t_post_glu1.
       endloop.
    JV_GB01_DOCUMENT_POST handles all JVTO2 fixed ledgers
        CALL FUNCTION 'JV_GB01_DOCUMENT_POST'
         EXPORTING
         W_REVERSE = 'X'
          TABLES
            T_GLU1    = t_post_glu1.
            if sy-subrc eq 0.
               commit work.
            endif.
    But posting is unsuccessful.

  • Need Code For PO-GR through MiGO for multiple documents through BAPI

    Hi All
    Im using BAPI_GOODSMVT_CREATE to post goods for PO-GR.
    When im posting multiple documents its giving error.
    When im posting individually, it's working fine.
    Please send me the code for PO-GR through BAPI.
    Urgently required.
    Regards,
    SImha.

    Is this not working???
    BAPI_GOODSMVT_CREATE to post Goods Movement
    The following is an abap program making used of the BAPI function BAPI_GOODSMVT_CREATE to do Goods Receipts for Purchase Order after importing the data from an external system.
    BAPI TO Upload Inventory Data
    GMCODE Table T158G - 01 - MB01 - Goods Receipts for Purchase Order
                         02 - MB31 - Goods Receipts for Prod Order
                         03 - MB1A - Goods Issue
                         04 - MB1B - Transfer Posting
                         05 - MB1C - Enter Other Goods Receipt
                         06 - MB11
    Domain: KZBEW - Movement Indicator
         Goods movement w/o reference
    B - Goods movement for purchase order
    F - Goods movement for production order
    L - Goods movement for delivery note
    K - Goods movement for kanban requirement (WM - internal only)
    O - Subsequent adjustment of "material-provided" consumption
    W - Subsequent adjustment of proportion/product unit material
    report zbapi_goodsmovement.
    parameters: p-file like rlgrap-filename default
                                     'c:\sapdata\TEST.txt'.
    parameters: e-file like rlgrap-filename default
                                     'c:\sapdata\gdsmvterror.txt'.
    parameters: xpost like sy-datum default sy-datum.
    data: begin of gmhead.
            include structure bapi2017_gm_head_01.
    data: end of gmhead.
    data: begin of gmcode.
            include structure bapi2017_gm_code.
    data: end of gmcode.
    data: begin of mthead.
            include structure bapi2017_gm_head_ret.
    data: end of mthead.
    data: begin of itab occurs 100.
            include structure bapi2017_gm_item_create.
    data: end of itab.
    data: begin of errmsg occurs 10.
            include structure bapiret2.
    data: end of errmsg.
    data: wmenge like iseg-menge,
          errflag.
    data: begin of pcitab occurs 100,
            ext_doc(10),           "External Document Number
            mvt_type(3),           "Movement Type
            doc_date(8),           "Document Date
            post_date(8),          "Posting Date
            plant(4),              "Plant
            material(18),          "Material Number
            qty(13),               "Quantity
            recv_loc(4),           "Receiving Location
            issue_loc(4),          "Issuing Location
            pur_doc(10),           "Purchase Document No
            po_item(3),            "Purchase Document Item No
            del_no(10),            "Delivery Purchase Order Number
            del_item(3),           "Delivery Item
            prod_doc(10),          "Production Document No
            scrap_reason(10),      "Scrap Reason
            upd_sta(1),            "Update Status
          end of pcitab.
    call function 'WS_UPLOAD'
      exporting
        filename                      = p-file
        filetype                      = 'DAT'
    IMPORTING
      FILELENGTH                    =
      tables
        data_tab                      = pcitab
    EXCEPTIONS
      FILE_OPEN_ERROR               = 1
      FILE_READ_ERROR               = 2
      NO_BATCH                      = 3
      GUI_REFUSE_FILETRANSFER       = 4
      INVALID_TYPE                  = 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.
      exit.
    endif.
    gmhead-pstng_date = sy-datum.
    gmhead-doc_date = sy-datum.
    gmhead-pr_uname = sy-uname.
    gmcode-gm_code = '01'.   "01 - MB01 - Goods Receipts for Purchase Order
    loop at pcitab.
      itab-move_type  = pcitab-mvt_type.
      itab-mvt_ind    = 'B'.
      itab-plant      = pcitab-plant.
      itab-material   = pcitab-material.
      itab-entry_qnt  = pcitab-qty.
      itab-move_stloc = pcitab-recv_loc.
      itab-stge_loc   = pcitab-issue_loc.
      itab-po_number  = pcitab-pur_doc.
      itab-po_item    = pcitab-po_item.
      concatenate pcitab-del_no pcitab-del_item into itab-item_text.
      itab-move_reas  = pcitab-scrap_reason.
      append itab.
    endloop.
    loop at itab.
      write:/ itab-material, itab-plant, itab-stge_loc,
              itab-move_type, itab-entry_qnt, itab-entry_uom,
              itab-entry_uom_iso, itab-po_number, itab-po_item,
                                                  pcitab-ext_doc.
    endloop.
    call function 'BAPI_GOODSMVT_CREATE'
      exporting
        goodsmvt_header             = gmhead
        goodsmvt_code               = gmcode
      TESTRUN                     = ' '
    IMPORTING
        goodsmvt_headret            = mthead
      MATERIALDOCUMENT            =
      MATDOCUMENTYEAR             =
      tables
        goodsmvt_item               = itab
      GOODSMVT_SERIALNUMBER       =
        return                      = errmsg
    clear errflag.
    loop at errmsg.
      if errmsg-type eq 'E'.
        write:/'Error in function', errmsg-message.
        errflag = 'X'.
      else.
        write:/ errmsg-message.
      endif.
    endloop.
    if errflag is initial.
      commit work and wait.
      if sy-subrc ne 0.
        write:/ 'Error in updating'.
        exit.
      else.
        write:/ mthead-mat_doc, mthead-doc_year.
        perform upd_sta.
      endif.
    endif.
          FORM UPD_STA                                                  *
    form upd_sta.
      loop at pcitab.
        pcitab-upd_sta = 'X'.
        modify pcitab.
      endloop.
      call function 'WS_DOWNLOAD'
        exporting
          filename                      = p-file
          filetype                      = 'DAT'
    IMPORTING
      FILELENGTH                    =
        tables
          data_tab                      = pcitab
    EXCEPTIONS
      FILE_OPEN_ERROR               = 1
      FILE_READ_ERROR               = 2
      NO_BATCH                      = 3
      GUI_REFUSE_FILETRANSFER       = 4
      INVALID_TYPE                  = 5
      OTHERS                        = 6
    endform.
    *--- End of Program
    REgards,
    Ravi

  • Getting Error while posting through KB11N : No true sender object entered

    HI Expert,
    We have stastical internal order defined and same we are using in Asset. Let me explain the scenarion.
    We created the Purchase requisition with the stastical Internal Order then we did Purchase Order and MIGO -Goods Receipt.
    Now we realised that wrong Internal Order  was used. Now we want to tranasfer cost from that Internal order to New Internal Order. we are trying to post through KB11N but while giving the all details i am getting error as per below;
    No true sender object entered
    Message no. BK175
    Diagnosis
    You have entered a statistical object as a sender. Statistical objects, however, are only intended for use with dual account assignments.
    Procedure
    1. If you require a dual account assignment, enter a true object as a sender also.
    We are using cost element with having cost element category 90.
    I don't no which is the true sender Object.
    Thanks in advance
    ealry help will be highly appreciated.

    Your postings had happened to a statistical internal order.  I hope the real postings might have happened to a cost centre.
    You cannot settle anything from a statistical internal order.  It is just for information purpose only.  If the above posting had captured a cost centre (real posting), you can distribute/assess the cost from the cost centre to a real internal order for your purpose.

  • How to add line items to Accounting Document posted through MIRO ?

    I need to perform Additional posting when Posting through MIRO transaction..i tried with INVOICE_UPDATE BADI but this was not useful...Please let me know if there is any way to add additional posting to Accounting Document created through MIRO.
    If any user exit , BADI ot BTE present?

    Hi,
    Check the BTE's:
    00001020     POST DOCUMENT:       Prior to final checks             SAMPLE_INTERFACE_00001020
    00001025     POST DOCUMENT:       Final checks completed       SAMPLE_INTERFACE_00001025
    00001030     POST DOCUMENT:       Posting of standard data     SAMPLE_INTERFACE_00001030
    00001050     POST DOCUMENT:       Accounting interface           SAMPLE_INTERFACE_00001050
    Thanks & Regards,
    Harish

  • Material Master Update through BAPI - Follow up material not updated

    Hi Experts,
    I am updating the material master through a custom transaction using the BAPI  'BAPI_MATERIAL_SAVEDATA'. Rest of the fields are updating correctly except for discontinuation ind., effective out date & follow-up material.
    When I try to update it through MM02 it is working fine. However, when I pass the same data through BAPI it is throwing an error message that 'the material XXXXXX does not exist or is not activated'.
    Please advice.
    Thanks & Regards,
    Ashu Arora

    Some more fields need to be updated along with the discont. indicator. Now working fine.

  • Field Profit Center is not populated while posting through T-Code F-02

    Dear Sir / Madam,
    While posting through T-code F-02 the field Profit center is in hidden mode
    as a result I am getting the given below error.
    "GLT2201 - Balancing field profit center in line item 001 not filled"
    Please guide me as to how do I change Field status varient so that the field Profit center gets activated in optional mode in F-02.
    I tried searching the same but could not find the solution.
    Regards
    Chirag Shah

    Dear expert
    Check following steps...
    1. Use transaction ACSET and enter cost center as your account assignment for type 01 APC posting..
    2. Make sure Cost Center exists in the Asset Master..
    3. Make sure profit center is entered into Cost Center master.
    4.Check the steps where you assign the GL accounts to the splitting rules.
    suggest you to go through the below mentioned links
    Balancing Field "Profit Center" in line item 001 not filled
    Balancing field "profit center" in line item 001 not filled
    GLT2201 - Balancing field profit center in line item 001 not filled
    Balancing field "Profit Center" in line item 001 not filled
    F-51: Balancing field "Profit Center" in line item 001 not filled
    Balancinf field profit center in line item 001 not filled
    Regards,
    Ajeesh.s

Maybe you are looking for

  • The display screen is negative.

    The display screen is negative. How can I reset the display positive? 

  • How do you print the slides in the question pool in captivate 6?

    how do you print the slides in the question pool in captivate 6?

  • Hassle free "almost"

    After reading some of the topics here about install IOS4 I must be one of the lucky ones and had very little problems installing the OS. I did find that my cellular data settings were wrong but after a quick search on the net reinstalled them, and ev

  • IPod seems to be full even though I emptied everything...

    Hi, I have deleted all the songs in my iPod Shuffle and deleted all the files in it as well. However it only gives 1.2 MB available space and I can not move anything to it anymore. This happened after I stuffed it with loads of files until it was ful

  • Organizer 9 often gets error adding keyword

    I spent more than a week evaluating Organizer 9 for my use by playing with a test catalog with several raw photos from various cameras I have.  I tried everything I could think of and posted here a few times asking questions.  Everything seemed to be