MR8M Error
Dear All,
Showing error Msg. "Balancing Field "PROFIT CENTER" in line item 005 not filled" while canceling MIRO through the MR8M T Code.
Message No. GLT2201.Please give the solution
Regards
SB.
Hi,
This error is due to activation of New GL accounting wherein it has been made Profit Center is mandatory in all transactions. Hence, while saving the document, the system derives the profit center and it does not find any, it will give error message.
It has not been mentioned, in which transaction you get the error. In the case of SD and MM transactions, mostly the system derives the profit center from the material master. Hence, we need to check whether the material master has profit center.
In the case of asset related transactions, the profit center is derived from the Cost Center which has been entered in the master data of Asset. It is better to see whether the necessary customization is missing in ACSET.
Last but not the least, we need to see that the profit center is made optional field in field status(Tr.codes OBC4 and OB41). You also go thru OSS note 871277. Pl be specific to support you further
Thanks,
Raviteja
Similar Messages
-
Dear all, I need to cancel an Invoice using MR8M, but I get an error message F5 350: "Account type/account for invoice reference does not match item". This invoice has Different Invoicing Party (a Vendor diferent from Purchase Order's vendor) . Can this be a Customizing problem? what am I missing? any help will be appreciated.
King regards,
Efren IparraguirreThanks Charlie, but I´ve done your suggestion and error message persists. I added vendor as Invoice party in master record (Purchasing Org, right?) and also in Purchase Order I changed Invoice Party.
Any other suggestion?
Thanks in advance,
Efren -
MR8M error payment term repetition
Hi Gurus,
We have enabled amount split at company code parameters.
We give Amount Split in MIRO by Payment terms so invoice transaction posts as:
Payment term
GR/IR Dr. AED 3000
Vendor Cr. AED 1000 K000
Vendor Cr. AED 1000 K210
Vendor Cr. AED 1000 K310
but when we cancel invoie with transaction MR8M then the transaction posts as following by copying the payment term in first vendor line item and populating it in remaining vendor line items:
GR/IR Cr. AED 3000
Vendor Dr. AED 1000 K000
Vendor Dr. AED 1000 K000
Vendor Dr. AED 1000 K000
Could we fix this and how do we do that? theres no substitution maintained for this.
Please help!!!!
Regards
Edited by: SafiAkhtar on Jul 21, 2011 1:17 PMThere can be many possibilities for this error, in tcode OBB8,
- the terms of payment is not marked for customer.
- date limits are not mention properly.
- if the installments are not config properly
Or
Try it putting manually in to the sales doc.
If problem persists, take assistance of FI team member to sort out the error.
Also, refer following SAP Notes:
- 66529 F5839 Payment term & not defined
- 598025 Work method terms of payment for condition records
- 1180397 enterprise SOA conversion/Supplement to Note 117317
- 311514 No payment method for installment terms of payment
- 649567 EDI: incorrect baseline date for payment
- 208023 Posting bill doc ->FI:incor cash discount rate used
- 391939 Entries ignored with warning messages in sales document
Thanks & Regards
JP -
Error Message in Invoice Posting
Dear All,
error is in MIR4: Balance not zero: 90,00 debits: 10,00 credits: 100,00.
There is a tolarance limit 150. This is lower limit, so it should be posted but it is not.
Invoice 100
SES 10
Variance 90
Variance threshold allowed 150. Variance is in limit so should be autoposted but it is not.
Maintined values T169G table and T169V table correctly.
Thanks,
Prabhakar
Balance not zero: 90,00 debits: 10,00 credits: 100,00
Message no. M8534
Diagnosis
The system has discovered a difference between the debits and credits. This difference lies outside the tolerance limits set.
System Response
The system cannot post the document.
Procedure
If this message appears when you are processing a document online, you can
change the amounts or enter new items until you can post the document
change the Invoice Verification type, so that the document can be posted later in the background.
If this message appeared when a document was verified
Edited by: Prabhakar Dharmala on Nov 23, 2010 9:35 AM
Invoice 100
SES 10
Variance 90
Variance threshold allowed 150. Variance is in limit so should be autoposted but it is not. There is a tolarance limit 150. so it should be posted, is this possible.hi
check note Note 387909 - MR8M: Error message M8534 "Balance not zero: ..."
Note 377128 - MR8M: Error M8534 "Balance not zero"
Note 766389 - MIRO: M8534 Balance is not zero after changing invoice date
Edited by: Kunal Ingale on Nov 23, 2010 5:18 AM -
Error while reversing Material Invoice document.
when i am trying to Reverse the Material Invoice receipt in MIRO
I am getting the following error
"Balance not zero: 757.86- debits: 21,171.86 credits: 20,414.00"
Message no. M8534
The actual situation is :
The total Invoice amount is Rs 20414
Material cost is Rs 17425, Tax amount (ED & CST) is Rs2230.40
For the Balance Rs 758.60, they have manually adjusted to PL-Vend-Cenvat & Cst Refundable accounts in MIRO
Can can anyone please help me in reversing the Document.Identify resaons for balances,
Required tax code is selected both at header & line item levels ?
Check for any TDS deductios ?
Probably issue will araise because of CST ?
Check sap Note 387909 - MR8M: Error message M8534 "Balance not zero: ..."
or search for note with error message no.
Edited by: Jeyakanthan A on Oct 9, 2010 3:53 PM -
Reversal with aliquots (Brazil) different MR8M
Friends,
I'm trying to reverse a document held by MIRO, but it reports the message balance is not equal to zero: 6.90 - Debt: 37.62 Credit: 30.72 (No messages M8534) today.
I checked and it turns out that the original document is using an aliquot (Brazil) different from that registered in J1BTAX.
My question is: how can I make the MR8M work with the same information as the original document?
Thank you.
Vladimir HaddadDear,
Please check SAP Notes: Note 1297322 - MR8M: Error M8 186 during reduction
Note 432948 - MR8M: M8186 "Balance is not equal to zero: & &"
And check for any other relevant notes available.
Regards,
Syed Hussain. -
Friends,
I'm trying to reverse a document held by MIRO, but it reports the message balance is not equal to zero: 6.90 - Debt: 37.62 Credit: 30.72 (No messages M8534).
I checked and it turns out that the original document is using an aliquot (Brazil) different from that registered in J1BTAX today.
My question is: how can I make the MR8M work with the same information as the original document?
Thank you.
Vladimir HaddadDear,
Please check SAP Notes: Note 1297322 - MR8M: Error M8 186 during reduction
Note 432948 - MR8M: M8186 "Balance is not equal to zero: & &"
And check for any other relevant notes available.
Regards,
Syed Hussain. -
MR11 - GR/IR Clearing account
Hi
There is a Service Purchase order with 2 services in it, amounting to USD 848.00 with a document creation date in 2003.
(Note: In the invoice item tab of PO, the Invoice receipt and GR-based IV are both flagged.)
The user did a service entry sheet (in the same year 2003) for above Service PO adding one more service line (loading cost) to it in the service entry sheet amounting to USD 40.00, which now has become a unplanned cost. So in the Service entry sheet, there are 3 services out of which 2 are from the Service PO and 1 newly added as unplanned cost.(Total amount is now USD 888.00)
On saving the service entry sheet which has automatically generated a Goods Receipt for this same amount of USD 888.00
The invoice for an amount of 848.00 referencing the Purchase order has been posted with final invoice indicator in the line item as flagged.
The accounting document shows posting as follows:
Vendor account USD 848.00
GR/IR account USD 888.00
Freight cost USD 40.00
But the user once again posted another invoice of USD 40.00 referencing the same Service Purchase order and also flagged final invoice indicator in the invoice line item.
So, the purchase order history in PO shows both the invoices as:
2nd Invoice - USD 40.00
1st Invoice - USD 848.00
Now, when looking into the GR/IR balances in transaction MB5S, system displays received quantity as 1 and invoiced quantity as 2. So we can infer that an extra invoice has been done.
While trying to clear the amount in transaction MR11, error message "No data selected. Check selection parameters.", is displayed.
When i tried to cancel the extra invoice of USD 40.00 in transaction MR8M, error message " Accounting document linked to this invoice already contains cleared items - reversal not possible."
Please provide a possible solution to clear this GR/IR Balance.
Regards
Maruthi Ram
Edited by: MARUTHI RAM on Jul 17, 2009 6:47 AMI think the issue here in the first invoice you had included $ 40 as Unplanned delivery cost, while by definition unplanned delivery cost is something that is entered in the invoice directly without being part of the PO. That is why the system allowed you to post the invoice for $848. Given this is followed, the second line added in the PO is not required at all. Since it has been added, SAP allowed you to post another invoice. This is the reason for this difference not appearing in MR11. What you can do now is post a Journal entry directly into GR-IR account to nullify this. This might require chaning the GR-IR account set-up as normally only automatic postings are allowed in this account.
-
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 ChHi 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 -
BAPI or FM to create Vendor Master
I need a BAPI or FM/API to create a vendor master. Yes I know, there is BAPI_VENDOR_CREATE but it does not allow you to import any data. Is there a BAPI/FM/API that creates a vendor master while allowing you to import data (like BAPI_MATERIAL_SAVEDATA for materials).
Thanks,
DavisRefer to the following and award points if useful.BAPI is like using standard function modules.We will populate the parameters and handle errors from that.See the code below which is vendor debit posting.You can get an idea by the following code.
See the start of selection if this is confusing to you and understand the usage
TABLES
TABLES: VBAK,
ADR6,
TRDYSE01CM.
INCLUDE
INCLUDE ZZUTI_STD_HEADER_FOOTER. "Standard header and footer
TYPES DECLARATION
TYPES:
BEGIN OF T_CRMEMO,
VBELN TYPE VBAK-VBELN,
POSNR TYPE VBAP-POSNR,
ERDAT TYPE VBAK-ERDAT,
AUART TYPE VBAK-AUART,
AUGRU TYPE VBAK-AUGRU,
WAERK TYPE VBAK-WAERK,
VKORG TYPE VBAK-VKORG,
VTWEG TYPE VBAK-VTWEG,
SPART TYPE VBAK-SPART,
VDATU TYPE VBAK-VDATU,
BSTNK TYPE VBAK-BSTNK,
BSARK TYPE VBAK-BSARK,
BSTDK TYPE VBAK-BSTDK,
AEDAT TYPE VBAK-AEDAT,
BUKRS_VF TYPE VBAK-BUKRS_VF,
MATNR TYPE VBAP-MATNR,
ZMENG TYPE VBAP-ZMENG,
ZIEME TYPE VBAP-ZIEME,
END OF T_CRMEMO,
BEGIN OF T_CRMEMO_CHANGE,
VBELN(90) TYPE C,
POSNR TYPE VBAP-POSNR,
ERDAT TYPE VBAK-ERDAT,
AUART TYPE VBAK-AUART,
AUGRU TYPE VBAK-AUGRU,
WAERK TYPE VBAK-WAERK,
VKORG TYPE VBAK-VKORG,
VTWEG TYPE VBAK-VTWEG,
SPART TYPE VBAK-SPART,
VDATU TYPE VBAK-VDATU,
BSTNK TYPE VBAK-BSTNK,
BSARK TYPE VBAK-BSARK,
BSTDK TYPE VBAK-BSTDK,
AEDAT TYPE VBAK-AEDAT,
BUKRS_VF TYPE VBAK-BUKRS_VF,
MATNR TYPE VBAP-MATNR,
ZMENG TYPE VBAP-ZMENG,
ZIEME TYPE VBAP-ZIEME,
END OF T_CRMEMO_CHANGE,
BEGIN OF T_MVKE,
MATNR TYPE MVKE-MATNR,
VKORG TYPE MVKE-VKORG,
VTWEG TYPE MVKE-VTWEG,
MTPOS TYPE MVKE-MTPOS,
END OF T_MVKE,
BEGIN OF T_ORDERS,
VBELV TYPE VBFA-VBELV,
POSNV TYPE VBFA-POSNV,
VBELN TYPE VBFA-VBELN,
POSNN TYPE VBFA-POSNN,
VBTYP_N TYPE VBFA-VBTYP_N,
END OF T_ORDERS,
BEGIN OF T_EKPO,
EBELN TYPE EKKO-EBELN,
EBELP TYPE EKPO-EBELP,
WAERS TYPE EKKO-WAERS,
MENGE TYPE EKPO-MENGE,
MEINS TYPE EKPO-MEINS,
NETPR TYPE EKPO-NETPR,
PEINH TYPE EKPO-PEINH,
mwskz TYPE EKPO-mwskz,
TXJCD TYPE EKPO-TXJCD,
END OF T_EKPO,
BEGIN OF T_EKBE,
EBELN TYPE EKBE-EBELN,
EBELP TYPE EKBE-EBELP,
ZEKKN TYPE EKBE-ZEKKN,
VGABE TYPE EKBE-VGABE,
GJAHR TYPE EKBE-GJAHR,
BELNR TYPE EKBE-BELNR,
BUZEI TYPE EKBE-BUZEI,
END OF T_EKBE,
BEGIN OF T_RBKP,
BELNR TYPE RBKP-BELNR,
GJAHR TYPE RBKP-GJAHR,
BLDAT TYPE RBKP-BLDAT,
BUDAT TYPE RBKP-BUDAT,
XBLNR TYPE RBKP-XBLNR,
LIFNR TYPE RBKP-LIFNR,
RMWWR TYPE RBKP-RMWWR,
WMWST1 TYPE RBKP-WMWST1,
XRECH TYPE RBKP-XRECH,
STBLG TYPE RBKP-STBLG,
END OF T_RBKP,
BEGIN OF T_CDHDR,
OBJECTCLAS TYPE CDHDR-OBJECTCLAS,
OBJECTID TYPE CDHDR-OBJECTID,
CHANGENR TYPE CDHDR-CHANGENR,
UDATE TYPE CDHDR-UDATE,
UTIME TYPE CDHDR-UTIME,
END OF T_CDHDR,
BEGIN OF T_CDPOS,
OBJECTCLAS TYPE CDHDR-OBJECTCLAS,
OBJECTID TYPE CDHDR-OBJECTID,
CHANGENR TYPE CDHDR-CHANGENR,
TABNAME TYPE CDPOS-TABNAME,
TABKEY TYPE CDPOS-TABKEY,
FNAME TYPE CDPOS-FNAME,
CHNGIND TYPE CDPOS-CHNGIND,
VALUE_NEW TYPE CDPOS-VALUE_NEW,
VALUE_OLD TYPE CDPOS-VALUE_OLD,
END OF T_CDPOS,
BEGIN OF T_CHANGE_DOCS,
OBJECTCLAS TYPE CDHDR-OBJECTCLAS,
OBJECTID TYPE CDHDR-OBJECTID,
CHANGENR TYPE CDHDR-CHANGENR,
UDATE TYPE CDHDR-UDATE,
UTIME TYPE CDHDR-UTIME,
TABNAME TYPE CDPOS-TABNAME,
TABKEY TYPE CDPOS-TABKEY,
FNAME TYPE CDPOS-FNAME,
CHNGIND TYPE CDPOS-CHNGIND,
VALUE_NEW TYPE CDPOS-VALUE_NEW,
VALUE_OLD TYPE CDPOS-VALUE_OLD,
END OF T_CHANGE_DOCS,
BEGIN OF T_SUCCESS,
crmemo TYPE VBAK-vbeln,
cmemo TYPE VBAK-vbeln,
orders TYPE VBAK-vbeln,
po TYPE VBAK-vbeln,
miro_no TYPE VBAK-vbeln,
text(20) TYPE C,
END OF T_SUCCESS,
BEGIN OF T_ERROR,
crmemo TYPE VBAK-vbeln,
cmemo TYPE VBAK-vbeln,
orders TYPE VBAK-vbeln,
po TYPE VBAK-vbeln,
miro_no TYPE VBAK-vbeln,
text(100) TYPE C,
END OF T_ERROR.
WORKAREA DECLARATION
DATA:
WA_CRMEMO TYPE T_CRMEMO,
WA_CRMEMO_CHANGE TYPE T_CRMEMO_CHANGE,
WA_MVKE TYPE T_MVKE,
WA_ORDERS TYPE T_ORDERS,
WA_CMEMO TYPE T_ORDERS,
WA_PO TYPE T_ORDERS,
WA_EKPO TYPE T_EKPO,
WA_EKBE TYPE T_EKBE,
WA_EKBE_TEMP TYPE T_EKBE,
WA_RBKP TYPE T_RBKP,
WA_RBKP_TMP TYPE T_RBKP,
WA_CDHDR TYPE T_CDHDR,
WA_CDPOS TYPE T_CDPOS,
WA_CHANGE_DOCS TYPE T_CHANGE_DOCS,
WA_CRMEMO_MR8M TYPE T_CRMEMO,
WA_SUCCESS TYPE T_SUCCESS,
WA_ERROR TYPE T_ERROR,
WA_SUCCESS_MR8M TYPE T_SUCCESS,
WA_ERROR_MR8M TYPE T_ERROR.
*--Work area for all the internal tables used for Sending Mail
DATA :
WA_OBJPACK TYPE SOPCKLSTI1,
WA_OBJHEAD TYPE SOLISTI1,
WA_OBJBIN TYPE SOLISTI1,
WA_OBJTXT TYPE SOLISTI1,
WA_RECLIST TYPE SOMLRECI1 .
DATA:
*-- Structure to hold Invoice Header Data
x_docheader LIKE bapi_incinv_create_header,
*-- Structure to hold Reversal Posting Data
x_rev_post LIKE BAPI_INCINV_FLD.
INTERNAL TAABLE DECLARATION
DATA:
IT_CRMEMO TYPE STANDARD TABLE OF T_CRMEMO WITH HEADER LINE,
IT_CRMEMO_CHANGE TYPE STANDARD TABLE OF T_CRMEMO_CHANGE WITH HEADER LINE,
IT_MVKE TYPE STANDARD TABLE OF T_MVKE WITH HEADER LINE,
IT_CRMEMO_MIRO TYPE STANDARD TABLE OF T_CRMEMO WITH HEADER LINE,
IT_CRMEMO_MR8M TYPE STANDARD TABLE OF T_CRMEMO WITH HEADER LINE,
IT_ORDERS TYPE STANDARD TABLE OF T_ORDERS WITH HEADER LINE,
IT_CMEMO TYPE STANDARD TABLE OF T_ORDERS WITH HEADER LINE,
IT_PO TYPE STANDARD TABLE OF T_ORDERS WITH HEADER LINE,
IT_EKPO TYPE STANDARD TABLE OF T_EKPO WITH HEADER LINE,
IT_EKBE TYPE STANDARD TABLE OF T_EKBE WITH HEADER LINE,
IT_EKBE_TEMP TYPE STANDARD TABLE OF T_EKBE WITH HEADER LINE,
IT_RBKP TYPE STANDARD TABLE OF T_RBKP WITH HEADER LINE,
IT_CDHDR TYPE STANDARD TABLE OF T_CDHDR WITH HEADER LINE,
IT_CDPOS TYPE STANDARD TABLE OF T_CDPOS WITH HEADER LINE,
IT_CHANGE_DOCS TYPE STANDARD TABLE OF T_CHANGE_DOCS WITH HEADER LINE,
IT_SUCCESS TYPE STANDARD TABLE OF T_SUCCESS WITH HEADER LINE,
IT_ERROR TYPE STANDARD TABLE OF T_ERROR WITH HEADER LINE,
IT_SUCCESS_MR8M TYPE STANDARD TABLE OF T_SUCCESS WITH HEADER LINE,
IT_ERROR_MR8M TYPE STANDARD TABLE OF T_ERROR WITH HEADER LINE.
*-- Internal table to hold Invoice Item Data
DATA:BEGIN OF it_itemdata OCCURS 0.
INCLUDE STRUCTURE bapi_incinv_create_item.
DATA:END OF it_itemdata.
*-- Internal table to hold Invoice Acct Assignment Data
DATA:BEGIN OF it_ACCOUNTingdata OCCURS 0.
INCLUDE STRUCTURE BAPI_INCINV_CREATE_ACCOUNT.
DATA:END OF it_accountingdata.
*-- Internal table to hold BAPI return data
DATA: BEGIN OF it_return OCCURS 0.
INCLUDE STRUCTURE bapiret2. "Return Parameter.
DATA: END OF it_return.
*-- Internal table to hold BAPI return data
DATA: BEGIN OF it_return_mr8m OCCURS 0.
INCLUDE STRUCTURE bapiret2. "Return Parameter.
DATA: END OF it_return_mr8m.
*--MAIL related Internal tables
DATA: X_DOC_CHNG TYPE SODOCCHGI1, " document attributes
IT_OBJPACK TYPE STANDARD TABLE OF SOPCKLSTI1, " attachment table
IT_OBJHEAD TYPE STANDARD TABLE OF SOLISTI1, " object header table
IT_OBJBIN TYPE STANDARD TABLE OF SOLISTI1, " binary table
IT_OBJTXT TYPE STANDARD TABLE OF SOLISTI1, " object text
IT_RECLIST TYPE STANDARD TABLE OF SOMLRECI1, " mail recipients
it_compressed_list TYPE STANDARD TABLE OF SOLI,
it_pdf_list TYPE STANDARD TABLE OF TLINE,
it_pdf TYPE tline OCCURS 10 WITH HEADER LINE,
it_html TYPE solisti1 OCCURS 10 WITH HEADER LINE,
*-- Internal table for MIME data (in CHAR format)
it_temp TYPE bapiqcmime OCCURS 10 WITH HEADER LINE,
*-- Internal table for storing data
it_mime(255) TYPE c OCCURS 10 WITH HEADER LINE.
GLOBAL VARIABLES *
DATA: V_PGM_ID TYPE SY-REPID, " Program id
v_zterm TYPE lfb1-zterm, " Payment Terms
v_text(75) TYPE c, " To store error or success text
v_itemno(6) TYPE n, " To Increment Item No. for BAPI
v_docnr LIKE bapi_incinv_fld-inv_doc_no, " For MIRO document number
v_year1 LIKE bapi_incinv_fld-fisc_year, " For MIRO Fiscal year
v_spono type TSP01-RQIDENT, " For Spool No.
v_type type SOODK-OBJTP, " For Spool Type
V_CRMEMO_QTY TYPE VBAP-ZMENG, " For CR Memo Qty.
V_LINE_AMOUNT TYPE EKPO-NETPR, " For CR Memo Item Qty.
V_GROSSAMT TYPE EKPO-NETPR, " For CR Memo Grand Qty.
v_tax_per(3) type n, " For CR Memo Tax amount %
v_tax_amt TYPE EKPO-NETPR, " For CR Memo Tax amount
v_flag(1) type c, " Flag to process fruther
v_tot_s_mr8m TYPE i, " For MR8M Success Records
v_tot_e_mr8m TYPE i, " For MR8M Error Records
V_DATE TYPE SY-DATUM, " For Sel. Screen Date
V_DATE2(10) TYPE C, " For EMail Date
V_TIME(10) TYPE C, " For EMail Time
V_TIME2(10) TYPE C, " For EMail Time
V_INFO(100) TYPE C, " For EMail Body Text
V_TABLE_LINES TYPE SY-TABIX, " To Increment Email Count
V_TEXT2 TYPE STRING , " For EMail Id text
v_lines TYPE i, " To Store PDF Lines
v_temp(500) TYPE c, " To Convert to 255 char format
v_offset TYPE p, " To Convert to 255 char format
v_lineslen TYPE i, " To Convert to 255 char format
v_mimelen TYPE i, " To Convert to 255 char format
v_tabix type sy-tabix. " To Convert to 255 char format
CONSTANTS *
CONSTANTS:
C_X(1) TYPE C VALUE 'X', " Constant X or Flag
C_E(1) TYPE C VALUE 'E', " For Error check
c_v(1) TYPE C VALUE 'V', " For PO Docs
c_o(1) TYPE C VALUE 'O', " For Order Docs
c_c(1) TYPE C VALUE 'C', " For Credit Memo Docs
c_k(1) TYPE C VALUE 'K', " For CR Memo Docs
c_u(1) TYPE C VALUE 'U', " For Change tables Update
c_ali(3) TYPE C VALUE 'ALI', " For ALI Format
c_vbak(4) TYPE C VALUE 'VBAK', " For Change docs table
C_01(2) TYPE C VALUE '01', " For Serial No. & Reversal Reason
C_02(2) TYPE C VALUE '02', " For Reversal Reason
c_blart TYPE bkpf-blart VALUE 'RE', " Document type
C_MTPOS TYPE MVKE-MTPOS VALUE 'BANS', " Item Category group
C_AUGRU(5) TYPE C VALUE 'AUGRU', " Reason Code
C_0000500205(10) TYPE C VALUE '0000500205', " GL Account #
C_VERKBELEG(9) TYPE C VALUE 'VERKBELEG'. " For Object Class
*-- Horizontal tab & line feed constants
CLASS CL_ABAP_CHAR_UTILITIES DEFINITION LOAD.
CONSTANTS:
C_TAB TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,
C_CR_LF TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF .
SELECTION SCREEN
*-- Select Optons
SELECTION-SCREEN: BEGIN OF BLOCK B01 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_AUART FOR VBAK-AUART OBLIGATORY NO INTERVALS,
" Sales Document Type
S_AUGRU FOR VBAK-AUGRU OBLIGATORY NO INTERVALS,
" Order reason
S_ERDAT FOR VBAK-ERDAT OBLIGATORY.
" Date on which the record was created
SELECTION-SCREEN: END OF BLOCK B01.
*-- Mail Sending Options
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-004.
PARAMETERS:P_EMAIL AS CHECKBOX DEFAULT SPACE USER-COMMAND V_COM .
PARAMETERS : P_MODE TYPE SO_ESCAPE default 'U' MODIF ID US1.
SELECT-OPTIONS: S_EMAIL FOR ADR6-SMTP_ADDR
NO INTERVALS MODIF ID US2.
SELECT-OPTIONS: S_EMAIL FOR TRDYSE01CM-USERNAME
NO INTERVALS MODIF ID US2.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 55(40) TEXT-019 MODIF ID US2.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN END OF BLOCK B2.
WORK AREA for SELECT-OPTIONS
DATA : X_EMAIL LIKE S_EMAIL. "Work area for EMAIL select-options
INITIALIZATION
INITIALIZATION.
*-- Default values for Sales Document Type
CLEAR S_AUART[].
S_AUART-SIGN = 'I'.
S_AUART-OPTION = 'EQ'.
S_AUART-LOW = 'CR'.
APPEND S_AUART.
CLEAR S_AUART.
*-- Default values for Date on which the record was created
V_DATE = ( SY-DATUM - 1 ).
CLEAR S_ERDAT[].
S_ERDAT-SIGN = 'I'.
S_ERDAT-OPTION = 'EQ'.
S_ERDAT-LOW = SY-DATUM.
S_ERDAT-HIGH = SY-DATUM.
APPEND S_ERDAT.
CLEAR S_ERDAT.
TOP OF PAGE *
TOP-OF-PAGE.
*-- Displaying standard header.
PERFORM std_top_of_page USING sy-title.
A T S E L E C T I O N S C R E E N O U T P U T
*-- For modifying the selection screen layout
AT SELECTION-SCREEN OUTPUT.
PERFORM F_MODIFY_SCREEN.
AT SELECTION SCREEN. *
AT SELECTION-SCREEN.
*-- Subroutine to Validate selection screen fields
PERFORM f_validate.
START-OF-SELECTION *
*START-OF-SELECTION.*
**-- Fetch the Credit Memo Requests documents*
*PERFORM F_GET_CREDIT_MEMO_REQUEST.*
*IF NOT IT_CRMEMO[] IS INITIAL.*
**-- Fetch Item Category Group*
*PERFORM F_GET_MVKE_DOCS.*
**-- Fetch Sales Order documents, PO Documents and Credit Memos*
*PERFORM F_GET_SO_PO_DOCS.*
*ENDIF.*
**-- If Credit memo request internal table have an change records then*
fetch the change documents from CDHDR and CDPOS*
*IF NOT IT_CRMEMO_CHANGE[] IS INITIAL.*
**-- Fetch Change Documents for CR Memos from CDHDR and CDPOS tables*
*PERFORM F_GET_CHANGED_DOCS.*
*ENDIF.*
**-- Fetch Purchasing Document Item Details*
*IF NOT IT_PO[] IS INITIAL.*
*PERFORM F_GET_EKPO.*
*ENDIF.*
**-- Fetch MIRO Vendor based on the PO Details*
IF NOT IT_EKPO[] IS INITIAL.
PERFORM F_GET_VENDOR.
ENDIF.
END-OF-SELECTION *
if v_flag is initial.
*-- Process Vendor Debit Postings
PERFORM F_PROCESS_MIRO.
*-- Process Reversal Postings of Vendor Automatic Debits using TCODE MR8M
PERFORM F_PROCESS_MR8M.
*-- Send mail,if user enters Email id's and Email Mode is not initial
IF P_EMAIL = C_X AND P_MODE IS NOT INITIAL AND S_EMAIL[] IS NOT INITIAL.
*-- Get spool id
perform f_spool_id.
*-- EMail Logic
PERFORM F_MAIL_LOGIC.
ENDIF.
*-- display the EMail RSCONN01 and Sussess and Error records of MIRO and MR8M
perform f_display_report.
else.
*-- Else exit the process
exit.
endif.
*& Form F_MODIFY_SCREEN
A Form routine to modify the screen
FORM F_MODIFY_SCREEN .
*-- To Modify Mail Sending Options
LOOP AT SCREEN.
IF P_EMAIL = C_X.
IF SCREEN-GROUP1 = 'US1' .
SCREEN-INVISIBLE = 0.
SCREEN-ACTIVE = 1.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
IF SCREEN-GROUP2 = 'US2' .
SCREEN-INVISIBLE = 0.
SCREEN-ACTIVE = 1.
MODIFY SCREEN.
ENDIF.
ELSEIF P_EMAIL = SPACE.
IF SCREEN-GROUP1 = 'US1' .
SCREEN-INVISIBLE = 1.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
IF SCREEN-GROUP1 = 'US2' .
SCREEN-INVISIBLE = 1.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " F_MODIFY_SCREEN
*& Form f_validate
Validation of Selection-Screen Inputs
FORM f_validate .
*-- Validate Sales Document Type
if not s_AUART[] is initial.
select AUART
into s_AUART-low
from TVAK up to 1 rows
where AUART in s_AUART.
endselect.
if sy-subrc 0.
message E000 with 'Invalid Sales Document Type'(e01) .
endif.
ENDIF.
*-- Validate Order reason (reason for the business transaction)
if not s_AUGRU[] is initial.
select AUGRU
into s_AUGRU-low
from TVAU up to 1 rows
where AUGRU in s_AUGRU.
endselect.
if sy-subrc 0.
message E000 with 'Invalid Order reason'(e02) .
endif.
endif.
ENDFORM. " f_validate
*& Form F_GET_CREDIT_MEMO_REQUEST
Fetch Credit memo requests from VBAK & VBAP
FORM F_GET_CREDIT_MEMO_REQUEST .
SELECT A~VBELN
B~POSNR
A~ERDAT
A~AUART
A~AUGRU
A~WAERK
A~VKORG
A~VTWEG
A~SPART
A~VDATU
A~BSTNK
A~BSARK
A~BSTDK
A~AEDAT
A~BUKRS_VF
B~MATNR
B~ZMENG
B~ZIEME
INTO TABLE IT_CRMEMO
FROM ( VBAK AS A
INNER JOIN VBAP AS B ON AVBELN = BVBELN )
WHERE ( A~ERDAT IN S_ERDAT
OR A~AEDAT IN S_ERDAT )
AND A~AUART IN S_AUART.
IF SY-SUBRC = 0.
SORT IT_CRMEMO BY VBELN POSNR.
ELSE.
MESSAGE I000 WITH 'No Credit Memo Request selected'(002).
v_flag = C_X.
stop.
ENDIF.
ENDFORM. " F_GET_CREDIT_MEMO_REQUEST
*& Form F_GET_MVKE_DOCS
Fetch Sales Data for Material
FORM F_GET_MVKE_DOCS .
DATA: LV_TABIX TYPE SY-TABIX.
*-- Fetch Sales Data for Material
SELECT MATNR " Material Number
VKORG " Sales Organization
VTWEG " Distribution Channel
MTPOS " Item category group from material master
FROM MVKE " Sales Data for Material
INTO TABLE IT_MVKE
FOR ALL ENTRIES IN IT_CRMEMO
WHERE MATNR = IT_CRMEMO-MATNR
AND VKORG = IT_CRMEMO-VKORG
AND VTWEG = IT_CRMEMO-VTWEG.
IF SY-SUBRC = 0.
SORT IT_MVKE BY MATNR VKORG VTWEG MTPOS.
ENDIF.
*-- Validate Item category group if MVKE-MTOPS 'BANS' then ignore CM Request line item
LOOP AT IT_CRMEMO INTO WA_CRMEMO.
LV_TABIX = SY-TABIX.
READ TABLE IT_MVKE INTO WA_MVKE WITH KEY MATNR = WA_CRMEMO-MATNR
VKORG = WA_CRMEMO-VKORG
VTWEG = WA_CRMEMO-VTWEG
MTPOS = C_MTPOS
BINARY SEARCH.
IF SY-SUBRC 0.
DELETE IT_CRMEMO INDEX LV_TABIX. " Delete CR memo records
ELSE.
*-- Else check for credit memo request change date is not initial, and
append those records to IT_CRMEMO_CHANGE internal table to retrive
change documents
IF NOT WA_CRMEMO-AEDAT IS INITIAL.
WA_CRMEMO_CHANGE-VBELN = WA_CRMEMO-VBELN.
WA_CRMEMO_CHANGE-POSNR = WA_CRMEMO-POSNR.
WA_CRMEMO_CHANGE-ERDAT = WA_CRMEMO-ERDAT.
WA_CRMEMO_CHANGE-AUART = WA_CRMEMO-AUART.
WA_CRMEMO_CHANGE-AUGRU = WA_CRMEMO-AUGRU.
WA_CRMEMO_CHANGE-WAERK = WA_CRMEMO-WAERK.
WA_CRMEMO_CHANGE-VKORG = WA_CRMEMO-VKORG.
WA_CRMEMO_CHANGE-VTWEG = WA_CRMEMO-VTWEG.
WA_CRMEMO_CHANGE-SPART = WA_CRMEMO-SPART.
WA_CRMEMO_CHANGE-VDATU = WA_CRMEMO-VDATU.
WA_CRMEMO_CHANGE-BSTNK = WA_CRMEMO-BSTNK.
WA_CRMEMO_CHANGE-BSARK = WA_CRMEMO-BSARK.
WA_CRMEMO_CHANGE-BSTDK = WA_CRMEMO-BSTDK.
WA_CRMEMO_CHANGE-AEDAT = WA_CRMEMO-AEDAT.
WA_CRMEMO_CHANGE-BUKRS_VF = WA_CRMEMO-BUKRS_VF.
WA_CRMEMO_CHANGE-MATNR = WA_CRMEMO-MATNR.
WA_CRMEMO_CHANGE-ZMENG = WA_CRMEMO-ZMENG.
WA_CRMEMO_CHANGE-ZIEME = WA_CRMEMO-ZIEME.
APPEND WA_CRMEMO_CHANGE TO IT_CRMEMO_CHANGE.
CLEAR WA_CRMEMO_CHANGE.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " F_GET_MVKE_DOCS
*& Form F_GET_SO_PO_DOCS
Fetch the Sales Order documents, PO documents, & Credit Memo
FORM F_GET_SO_PO_DOCS.
*-- Fetch Preceding sales orders based on the credit memo request
SELECT VBELV
POSNV
VBELN
POSNN
VBTYP_N
FROM VBFA
INTO TABLE IT_ORDERS
FOR ALL ENTRIES IN IT_CRMEMO
WHERE VBELN = IT_CRMEMO-VBELN
AND POSNN = IT_CRMEMO-POSNR
AND VBTYP_N = C_K
AND VBTYP_V = C_C.
IF SY-SUBRC = 0.
SORT IT_ORDERS BY VBELV POSNV.
*-- Fetch Subsequent PO documents & Credit Memo based on the sales orders
SELECT VBELV
POSNV
VBELN
POSNN
VBTYP_N
FROM VBFA
INTO TABLE IT_PO
FOR ALL ENTRIES IN IT_ORDERS
WHERE VBELV = IT_ORDERS-VBELV
AND POSNV = IT_ORDERS-POSNV
AND VBTYP_N IN (C_V,C_O)
AND VBTYP_V = C_C.
IF SY-SUBRC = 0.
SORT IT_PO BY VBTYP_N.
*-- Copy the IT_PO internal table contents to IT_CMEMO internal table
IT_CMEMO[] = IT_PO[].
*-- Delete PO documents from IT_CMEMO internal table
DELETE IT_CMEMO WHERE VBTYP_N = C_V.
SORT IT_CMEMO BY VBELN POSNN.
IF IT_CMEMO[] IS INITIAL.
MESSAGE I000 WITH 'No Credit Memo are available for CM Request'(003).
v_flag = c_x.
stop.
ENDIF.
*-- Delete Credit Memo documents from IT_PO internal table
DELETE IT_PO WHERE VBTYP_N = C_O.
SORT IT_PO BY VBELN POSNN.
ENDIF.
ENDIF.
ENDFORM. " F_GET_SO_PO_DOCS
*& Form F_GET_CHANGED_DOCS
Fetch Change Documents for CR Memos from CDHDR and CDPOS tables
FORM F_GET_CHANGED_DOCS .
*-- Fetch Change Documents for CR Memos from CDHDR
SELECT OBJECTCLAS
OBJECTID
CHANGENR
UDATE
UTIME
FROM CDHDR
INTO TABLE IT_CDHDR
FOR ALL ENTRIES IN IT_CRMEMO_CHANGE
WHERE OBJECTCLAS = C_VERKBELEG
AND OBJECTID = IT_CRMEMO_CHANGE-VBELN
AND UDATE = IT_CRMEMO_CHANGE-AEDAT
IF SY-SUBRC = 0.
SORT IT_CDHDR BY OBJECTCLAS OBJECTID CHANGENR.
*-- Fetch Change Documents for CR Memos from CDPOS
SELECT OBJECTCLAS
OBJECTID
CHANGENR
TABNAME
TABKEY
FNAME
CHNGIND
VALUE_NEW
VALUE_OLD
FROM CDPOS
INTO TABLE IT_CDPOS
FOR ALL ENTRIES IN IT_CDHDR
WHERE OBJECTCLAS = C_VERKBELEG
AND OBJECTID = IT_CDHDR-OBJECTID
AND CHANGENR = IT_CDHDR-CHANGENR
AND TABNAME = C_VBAK
AND FNAME = C_AUGRU
AND CHNGIND = C_U.
IF SY-SUBRC = 0.
SORT IT_CDPOS BY OBJECTCLAS OBJECTID CHANGENR.
ENDIF.
ENDIF.
ENDFORM. " F_GET_CHANGED_DOCS
*& Form F_GET_EKPO
Fetch Purchasing Document Item Details
FORM F_GET_EKPO .
*-- Fetch Purchasing Document Item Details
SELECT A~EBELN
B~EBELP
A~WAERS
B~MENGE
B~MEINS
B~NETPR
B~PEINH
B~mwskz
B~TXJCD
INTO TABLE IT_EKPO
FROM ( EKKO AS A
INNER JOIN EKPO AS B ON AEBELN = BEBELN )
FOR ALL ENTRIES IN IT_PO
WHERE A~EBELN = IT_PO-VBELN
AND B~EBELP = IT_PO-POSNN+1(5).
IF SY-SUBRC = 0.
SORT IT_EKPO BY EBELN EBELP.
ENDIF.
ENDFORM. " F_GET_EKPO
*& Form F_GET_VENDOR
Fetch MIRO Vendor details based on the PO Details
FORM F_GET_VENDOR .
DATA: LV_TABIX TYPE SY-TABIX.
*-- Fetch History per Purchasing Document records for all the PO records
SELECT EBELN
EBELP
ZEKKN
VGABE
GJAHR
BELNR
BUZEI
FROM EKBE
INTO TABLE IT_EKBE
FOR ALL ENTRIES IN IT_EKPO
WHERE EBELN = IT_EKPO-EBELN
AND EBELP = IT_EKPO-EBELP
AND VGABE = '2'.
and STBLG = space.
IF SY-SUBRC = 0.
SORT IT_EKBE BY BELNR GJAHR.
*-- Fetch the vendor details based on table IT_EKBE internal table
SELECT BELNR
GJAHR
BLDAT
BUDAT
XBLNR
LIFNR
RMWWR
WMWST1
XRECH
STBLG
FROM RBKP
INTO TABLE IT_RBKP
FOR ALL ENTRIES IN IT_EKBE
WHERE BELNR = IT_EKBE-BELNR
AND GJAHR = IT_EKBE-GJAHR.
IF SY-SUBRC = 0.
SORT IT_RBKP BY BELNR GJAHR.
ENDIF.
ENDIF.
*-- Sort PO History documents based on PO # and PO Item
SORT IT_EKBE BY EBELN EBELP.
*-- Copy the PO History documents into IT_EKBE_TEMP internal table
IT_EKBE_TEMP[] = IT_EKBE[].
*-- Delete PO History documents from IT_EKBE_TEMP internal table
comparing with IT_RBKP where (STBLG) Reversal document number
is initial
LOOP AT IT_EKBE_TEMP INTO WA_EKBE_TEMP.
LV_TABIX = SY-TABIX.
READ TABLE IT_RBKP INTO WA_RBKP WITH KEY BELNR = WA_EKBE_TEMP-BELNR
GJAHR = WA_EKBE_TEMP-GJAHR
XRECH = SPACE
STBLG = SPACE.
IF SY-SUBRC 0.
DELETE IT_EKBE_TEMP INDEX LV_TABIX.
ENDIF.
CLEAR: WA_EKBE_TEMP, WA_RBKP.
ENDLOOP.
ENDFORM. " F_GET_VENDOR
*& Form F_PROCESS_MIRO
Process MIRO
FORM F_PROCESS_MIRO .
DATA:
lv_itemno TYPE i,
lv_tabix type sy-index,
lc_check(1) TYPE c VALUE 'X',
V_FILL_ITEM,
lv_rbkp_bldat type sy-datum.
clear : it_itemdata, it_accountingdata, IT_CRMEMO_MIRO, IT_CRMEMO_MR8M.
refresh : it_itemdata, it_accountingdata, IT_CRMEMO_MIRO, IT_CRMEMO_MR8M.
*-- Copy all the CR Memo Docs and delete order reason not in S_AUGRU
IT_CRMEMO_MR8M[] = IT_CRMEMO[].
*-- Delete Reversal postings which are not in S_AUGRU
DELETE IT_CRMEMO_MR8M WHERE AUGRU IN S_AUGRU.
*-- Delete Reversal postings where AEDAT is initial
DELETE IT_CRMEMO_MR8M where aedat is initial.
*-- Delete order reason which are not in S_AUGRU
DELETE IT_CRMEMO WHERE AUGRU NOT IN S_AUGRU.
*-- Loop through the credit memo request records
LOOP AT IT_CRMEMO INTO WA_CRMEMO.
lv_tabix = sy-tabix.
*-- If credit memo request change date is not initial then
send change date (AEDAT) to lv_rbkp_bldat
if not WA_CRMEMO-aedat is initial.
lv_rbkp_bldat = WA_CRMEMO-aedat.
else.
*-- If credit memo request change date is initial then
send create date (ERDAT) to lv_rbkp_bldat
lv_rbkp_bldat = WA_CRMEMO-erdat.
endif.
READ TABLE IT_ORDERS INTO WA_ORDERS WITH KEY VBELN = WA_CRMEMO-VBELN
POSNN = WA_CRMEMO-POSNR.
IF SY-SUBRC = 0.
READ TABLE IT_PO INTO WA_PO WITH KEY VBELV = WA_ORDERS-VBELV
POSNV = WA_ORDERS-POSNV.
IF SY-SUBRC = 0.
READ TABLE IT_EKPO INTO WA_EKPO WITH KEY EBELN = WA_PO-VBELN
EBELP = WA_PO-POSNN.
IF SY-SUBRC = 0.
*-- Read IT_EKBE_TEMP internal table which contains records which are not reversed
READ TABLE IT_EKBE_TEMP INTO WA_EKBE_TEMP WITH KEY EBELN = WA_EKPO-EBELN
EBELP = WA_EKPO-EBELP.
IF SY-SUBRC = 0.
*-- Read IT_RBKP internal table with XRECH (Indicator: post invoice) = 'X' ,
check for invoice records for the correspnding CR Memo records
READ TABLE IT_RBKP INTO WA_RBKP WITH KEY BELNR = WA_EKBE_TEMP-BELNR
GJAHR = WA_EKBE_TEMP-GJAHR
XRECH = C_X.
IF SY-SUBRC = 0.
*-- Read IT_RBKP internal table with XRECH (Indicator: post invoice) = SPACE,
and document date = CR Memo creation date
and reference document number = PO number
READ TABLE IT_RBKP INTO WA_RBKP_TMP WITH KEY BELNR = WA_EKBE_TEMP-BELNR
GJAHR = WA_EKBE_TEMP-GJAHR
BLDAT = WA_CRMEMO-ERDAT
XRECH = ' '
XBLNR+0(10) = WA_EKBE_TEMP-ebeln.
STBLG = SPACE.
IF SY-SUBRC = 0.
CONTINUE.
ELSE.
*-- Quantity Conversion (Get the Credit Memo Quantity by passing CMR unit per one PO unit)
perform f_quantity_conv.
*-- Filling the Line items data
*-- Incrementing the item no
lv_itemno = lv_itemno + 1.
v_itemno = lv_itemno.
it_itemdata-invoice_doc_item = v_itemno.
it_itemdata-po_number = WA_ekPO-ebeln.
it_itemdata-po_item = WA_EKPO-EBELP.
it_itemdata-tax_code = WA_ekpo-mwskz.
it_itemdata-TAXJURCODE = WA_ekpo-TXJCD.
*-- Converting SAP amount to BAPI format by passing line item amount and currency
PERFORM f_currency_amount_sap_to_bapi USING WA_EKPO-waers
V_LINE_AMOUNT
CHANGING it_itemdata-item_amount .
it_itemdata-quantity = ( WA_CRMEMO-ZMENG * V_CRMEMO_QTY ).
it_itemdata-po_unit = WA_EKPO-MEINS.
APPEND it_itemdata.
*-- Populate Account Assignment data
IT_ACCOUNTINGDATA-INVOICE_DOC_ITEM = v_itemno.
IT_ACCOUNTINGDATA-XUNPL = space.
IT_ACCOUNTINGDATA-SERIAL_NO = C_01.
IT_ACCOUNTINGDATA-TAX_CODE = it_itemdata-tax_code.
IT_ACCOUNTINGDATA-TAXJURCODE = it_itemdata-TAXJURCODE.
IT_ACCOUNTINGDATA-ITEM_AMOUNT = it_itemdata-item_amount.
IT_ACCOUNTINGDATA-QUANTITY = it_itemdata-quantity.
IT_ACCOUNTINGDATA-PO_UNIT = it_itemdata-po_unit.
IT_ACCOUNTINGDATA-GL_ACCOUNT = C_0000500205.
append IT_ACCOUNTINGDATA.
clear IT_ACCOUNTINGDATA.
CLEAR it_itemdata.
endif.
endif.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*-- At end of each credit memo request fill the header details of BAPI FM and
*-- post the BAPI
AT END OF VBELN.
read table it_crmemo into wa_crmemo index lv_tabix.
*-- Populate the document Header
*-- Getting the header data for invoice
x_docheader-invoice_ind = space.
x_docheader-doc_type = c_blart.
x_docheader-doc_date = lv_rbkp_bldat.
x_docheader-pstng_date = lv_rbkp_bldat.
x_docheader-ref_doc_no = WA_RBKP-XBLNR.
x_docheader-comp_code = WA_CRMEMO-BUKRS_VF.
x_docheader-CURRENCY = WA_CRMEMO-WAERK.
x_docheader-calc_tax_ind = lc_check.
*-- Logic to find the Tax %
v_tax_per = ( WA_RBKP-WMWST1 / ( WA_RBKP-RMWWR - WA_RBKP-WMWST1 ) ) * 100.
v_tax_amt = ( V_GROSSAMT * v_tax_per ) / 100.
V_GROSSAMT = ( V_GROSSAMT + v_tax_amt ).
x_docheader-gross_amount = V_GROSSAMT.
CLEAR:v_docnr, v_year1.
*-- Calling BAPI to create PO invoice document
CHECK NOT IT_ITEMDATA[] IS INITIAL.
CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE'
EXPORTING
headerdata = x_docheader
IMPORTING
invoicedocnumber = v_docnr
fiscalyear = v_year1
TABLES
itemdata = it_itemdata[]
ACCOUNTingDATA = it_ACCOUNTingDATA[]
GLACCOUNTDATA =
taxdata =
return = it_return.
*-- Commit work
IF NOT v_docnr IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
*-- Move the data to Success Internal Table
wa_success-crmemo = wa_crmemo-vbeln.
wa_success-cmemo = wa_cmemo-vbeln.
wa_success-orders = wa_orders-vbelv.
wa_success-po = wa_po-vbeln.
wa_success-miro_no = v_docnr.
wa_success-text = 'MIRO is Posted'.
append wa_success TO it_success.
clear wa_success.
ENDIF.
*-- Read the values in the table IT_RETURN.
CLEAR it_return.
READ TABLE it_return INDEX 1.
If message type is error then roll back the work
IF it_return-type = C_E.
*-- Roll back
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*-- Move the data to Error Internal Table
wa_error-crmemo = wa_crmemo-vbeln.
wa_error-cmemo = wa_cmemo-vbeln.
wa_error-orders = wa_orders-vbelv.
wa_error-po = wa_po-vbeln.
wa_error-text = it_return-MESSAGE.
append wa_error TO it_error.
clear wa_error.
ENDIF.
refresh: it_return, it_itemdata, it_accountingdata.
clear: V_GROSSAMT, it_return, it_itemdata, wa_crmemo, wa_orders, wa_po,
wa_ekpo, WA_EKBE_TEMP, wa_rbkp, wa_rbkp_tmp, v_docnr, v_year1, WA_SUCCESS,
WA_ERROR, it_accountingdata, v_tax_per, v_tax_amt, V_FILL_ITEM, lv_rbkp_bldat.
ENDAT.
ENDLOOP.
ENDFORM. " F_PROCESS_MIRO
*& Form f_quantity_conv
Quantity Conversion
FORM f_quantity_conv .
*-- Quantity Conversion (Get the Credit Memo Quantity by passing CMR unit per one PO unit)
CLEAR: V_LINE_AMOUNT, V_CRMEMO_QTY.
call function 'MC_UNIT_CONVERSION'
EXPORTING
MATNR = WA_CRMEMO-MATNR
nach_meins = WA_EKPO-MEINS
von_meins = WA_CRMEMO-ZIEME
IMPORTING
UMREF = V_CRMEMO_QTY
EXCEPTIONS
CONVERSION_NOT_FOUND = 1
MATERIAL_NOT_FOUND = 2
NACH_MEINS_MISSING = 3
OVERFLOW = 4
VON_MEINS_MISSING = 5
OTHERS = 6.
if sy-subrc 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
V_LINE_AMOUNT = ( V_CRMEMO_QTY * WA_CRMEMO-ZMENG * WA_EKPO-peinh * WA_EKPO-NETPR ).
V_GROSSAMT = V_GROSSAMT + V_LINE_AMOUNT.
ENDIF.
ENDFORM. " f_quantity_conv
*& Form f_currency_amount_sap_to_bapi
SAP Amount to BAPI Amount
FORM f_currency_amount_sap_to_bapi USING p_waers
p_kbetr
CHANGING p_amt_doccur.
DATA : lv_waers LIKE tcurc-waers,
lv_sapamount LIKE bapicurr-bapicurr,
lv_bapi_amount LIKE bapicurr-bapicurr.
lv_waers = p_waers.
lv_sapamount = p_kbetr.
CALL FUNCTION 'CURRENCY_AMOUNT_SAP_TO_BAPI'
EXPORTING
currency = lv_waers
sap_amount = lv_sapamount
IMPORTING
bapi_amount = lv_bapi_amount.
p_amt_doccur = lv_bapi_amount. -
Hi,
Currently in J1BTAX transaction code client is able to maintain "Maintain Default Tax Rate Values - J_1BTXDEF" directly in Production.
They also want to maintain entries directly for "Maintain SubTrib Dynamic Exceptions - J_1BTXST3" in Production which is not possible now.
Please let me know what settings needs to be changed to maintain entries directly in Production for the other table.
Thanks
SatishDear,
Please check SAP Notes: Note 1297322 - MR8M: Error M8 186 during reduction
Note 432948 - MR8M: M8186 "Balance is not equal to zero: & &"
And check for any other relevant notes available.
Regards,
Syed Hussain. -
Hi expart,
When we are going to reverse MIRO, system is showing error message " Balance not zero: 137.62 debits: 376,658.38 credits: 376,796.00"
Thanks in advance,
Regards,
GoutamHI,
Most likely this error will happen when you are trying to cancel an invoice where-in there is a subsequent document is posted which you have not yet cancelled, so it creates credit to debit mismatch
Check tax rate differances while entry of the MIRO document and cancellation.
Please check the message number from the long text of the error message and search the OSS for a relavant note.
This is a situation which requires application of SAP note.There are number of notes available
Please check SAP Notes: Note 1297322 - MR8M: Error M8 186 during reduction
Note 432948 - MR8M: M8186 "Balance is not equal to zero: & &"
And check for any other relevant notes
a) 387909
b) 369322
c) 766389 (only relevant for Brazil)
d) 377128
e) 1140788
Regards,
KK
Edited by: Kishore Kumar Galla on Mar 13, 2010 12:51 PM -
Error While canceling a invoice document in MR8M
Dear All,
While canceling a MIRO document in MR8M one error is coming as "Inconsistent temporary document number assignment" Message no. F5726.
This error is coming now in a production server which has been running from last 6 months.
Diagnosis
Temporary document number '$$1' has been assigned to items in company code '1000'. However, the same temporary number ('$$1') is also used for periods '07' and '08'.
System Response
Items with the same values for company code, fiscal year, period, document type and other accounting header data must have the same temporary number in the accounting interface.
Procedure
This is a system error in the calling application.
If the document number assignment is internal, the temporary document number can be copied with its initial value.
If the document number assignment is external, you must follow the rules laid down for the accounting component.
Awaiting suggestions.
Regards
Abhijit DasHi,check note 1376351
-
Dear Guru's
i have a return po and Migo done for the same & credit note also done for the same.
but when i go to MR8M tcode to cancel the credit note i am getting the below error,
''Document XXXXXXXXXX XX 2009 already contains cleared items - reversal not
possible
Message no. F5802 ''has ur credit note(credit memo )been generated by the system due to an invoice reversal.?
-
Error when trying to Cancel an invoice document via MR8M Transaction
Greetings Everyone,
l am having an issue when trying to cancel an invoice document via MR8M transaction. It gives me the following error message;
SYSTEM ERROR: error in routine MRM_DRSEG_CR_CREATE
Message no.M8008
Procedure:
Contact your system administrator.
This invoice was related to a check payment. The check has been voided already and there is no clearing document for the accounting document. So, the item remains open. However when l try to reverse, it display the error message above.
Thanks in advanceread notes 449277 and 750455, your solution is probably there.
Maybe you are looking for
-
Itunes, putting songs on a new computer
I bought a new computer and downloaded itunes. I burned a disc and transfered the songs. I get a msg when I try to play some songs (and apps) stating they were purchased with an old Id and I need to authorize undered the old Id. I don't remember the
-
Question about security in web browsers
What are the security limitations of an applet in a Web browser? Is there any way to get around them? plz just give me a straight answer, none of this stupid link bs.
-
I just got my first Mac, a mini. I just created a test website and uploaded it to .Mac. One of the 2 photo pages I created is missing the frames around the photos and the "Start Slideshow" icon just says "Made on a Mac". I recreated the site and repu
-
Order Header Text not copied to Invoice Header
Hi All friends I have created text id for copiying sales order header to invoice header in votxn. I assign in text procedure of sales order as well as Invoice text procedure. I create sales order with maintaining text ID But when i created invoice wi
-
I am using a MacPro running OS 10.6.8. When saving an image in PS CC I no longer have a thumbnail of the image in my folder , just a generic PS symbol thumbprint. What do I do to get my image thumbnail back? Adobe Creative Cloud