Automatic Vendor Debit Posting
Automatic Vendor Debit Posting
Home • Quiz • Tips • Tutorials • Functional • Cert Q's • Interview Q's • Jobs • Testimonials • Advertise • Contact Us
Enter name and email address below: Automatic Vendor Debit Posting
Name:
Submitted by Vikram
Email:
Please note that there are some custom fields added in the VBAP table, custom message class and
custom include program used in this program. Unfortunately, the contributor couldn't provide us with
Subscribe Unsubscribe the functional/technical specifications for this program.
GO
REPORT ZAUTO_DEBIT_VENDOR NO STANDARD PAGE HEADING
LINE-SIZE 250
LINE-COUNT 65(2)
MESSAGE-ID ZSCM.
What's New:
************************************************************************
* Program name : ZAUTO_DEBIT_VENDOR
Control Recipe/PI sheet deletion
* Type : Report
procedure
* Description : Automatic Vendor Dedit Postings
Shift Note in SAP ************************************************************************
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.
*----------------------------------------------------------------------*
* 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
*----------------------------------------------------------------------*
* 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.
*----------------------------------------------------------------------*
* 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 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.
*----------------------------------------------------------------------*
* 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.
*-- 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 .
*&---------------------------------------------------------------------*
*& Form f_validate
*&---------------------------------------------------------------------*
* Validation of Selection-Screen Inputs
*----------------------------------------------------------------------*
FORM 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.
*&---------------------------------------------------------------------*
*& Form F_GET_MVKE_DOCS
*&---------------------------------------------------------------------*
* Fetch Sales Data for Material
*----------------------------------------------------------------------*
FORM F_GET_MVKE_DOCS .
*-- 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.
*&---------------------------------------------------------------------*
*& 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[].
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form F_GET_EKPO
*&---------------------------------------------------------------------*
* Fetch Purchasing Document Item Details
*----------------------------------------------------------------------*
FORM F_GET_EKPO .
*&---------------------------------------------------------------------*
*& Form F_GET_VENDOR
*&---------------------------------------------------------------------*
* Fetch MIRO Vendor details based on the PO Details
*----------------------------------------------------------------------*
FORM F_GET_VENDOR .
*-- 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.
*&---------------------------------------------------------------------*
*& 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.
*-- Copy all the CR Memo Docs and delete order reason not in S_AUGRU
IT_CRMEMO_MR8M[] = IT_CRMEMO[].
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 .
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.
CLEAR:v_docnr, v_year1.
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'.
ENDIF.
*&---------------------------------------------------------------------*
*& 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.
*&---------------------------------------------------------------------*
*& 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.
lv_waers = p_waers.
lv_sapamount = p_kbetr.
p_amt_doccur = lv_bapi_amount.
ENDLOOP.
ULINE AT /1(129).
SKIP 2.
ENDIF.
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).
ENDIF.
ENDLOOP.
ULINE AT /1(129).
SKIP 2.
ENDIF.
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).
ENDIF.
*&---------------------------------------------------------------------*
*& Form F_PROCESS_MR8M
*&---------------------------------------------------------------------*
* Process Reversal postings
*----------------------------------------------------------------------*
FORM F_PROCESS_MR8M .
clear: wa_CRMEMO_MR8M.
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.
*&---------------------------------------------------------------------*
*& Form F_spool_id
*&---------------------------------------------------------------------*
* Create a new spool ID
*----------------------------------------------------------------------*
FORM F_spool_id .
*&---------------------------------------------------------------------*
*& Form F_MAIL_LOGIC
*&---------------------------------------------------------------------*
* Logic to send a mail for the given Email ID's
*----------------------------------------------------------------------*
FORM F_MAIL_LOGIC .
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.
*&---------------------------------------------------------------------*
*& 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.
*-- 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.
*-- 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.
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.
*&---------------------------------------------------------------------*
*& Form f_send_mail
*&---------------------------------------------------------------------*
* Send EMail Logic
*----------------------------------------------------------------------*
FORM f_send_mail .
if v_type = c_ali.
loop at it_html.
wa_objbin-line = it_html-line.
APPEND WA_OBJBIN TO IT_OBJBIN.
CLEAR WA_OBJBIN.
endloop.
v_type = 'PDF'.
endif.
WA_OBJPACK-OBJ_NAME = 'Auto_Debit'.
WA_OBJPACK-OBJ_DESCR = 'attachment'.
WA_OBJPACK-DOC_SIZE = V_TABLE_LINES * 255.
APPEND WA_OBJPACK TO IT_OBJPACK.
CLEAR WA_OBJPACK.
IF SY-SUBRC <> 0.
MESSAGE E000 WITH 'Error occurred
curr in sending mail'(015).
ELSE.
*-- Wait upto 2 secounds
wait up to 2 seconds.
*-- Call the RSCONN01 (SAPconnect: Start Send Process)
SUBMIT RSCONN01 WITH MODE = 'INT'
* WITH output = 'X'
AND RETURN.
PERFORM F_DISPLAY_SENT_MAIL_STATUS.
ENDIF.
*&---------------------------------------------------------------------*
*& Form F_DISPLAY_SENT_MAIL_STATUS
*&---------------------------------------------------------------------*
* Display Mail Sent status to the user
*----------------------------------------------------------------------*
FORM F_DISPLAY_SENT_MAIL_STATUS .
ULINE AT /1(60).
WRITE :/ SY-VLINE,
'Mail sent Successfully to'(016)
COLOR 5 INTENSIFIED ON,
60 SY-VLINE.
WRITE :/ SY-VLINE,
2 SY-TABIX LEFT-JUSTIFIED,
5 ')',
V_TEXT2,
60 SY-VLINE.
ENDLOOP.
ULINE AT /1(60).
Home • Contribute • About Us • Privacy • Terms Of Use • Disclaimer • Safe • Companies: Advertise on SAPTechnical.COM | Post Job • Contact Us