Duplication checking

Hello gurus!
Is there anybody who used ADDRESS_SEARCH and ADDRESS_UPDATE badies for duplication checking?
Could you provide me with roadmap (code samples, descriptions) how to use them? My case: Business Partner duplication check by name and telephone number.
I have read next document, but unfortunately this field is still unclear for me.
http://help.sap.com/saphelp_crm50/helpdata/en/a3/eaa43ab9db4814e10000000a11402f/frameset.htm
Thank you in advance!
Kirill

Hello Krill,
1)You are creating a BP,category Organization  and saved it.
2)You have activated those BADI'S that you've mentioned(Address_search,Address_Update) what happens is the sytem will carry out a duplicate check based on certain threshold values that you have mentioned in the customizing.(a dialogue box pops up indicating all possible duplicates)
3)You can tell the system that the BP you are trying to create is not a duplicate,
its duplicate, or you can create a cleansing Case.
4)Using BUPA_CLEAR, you can manually search for duplicates, enter the weighing factor, select the process (Note you can manually do the cleansing process of Automatically.
5)Execute the BT and drag and drop the BP you want to cleance.
6)In the transction enter BUPA_CLEAR enter the cleansing case number.
7)Compare the BP for a node comparision.
8)Maintain the number range for Data Cleansing. in CA>SAP BP>Data Cleansing
9)enter the Numebr range object.
10)Define Priorities.
11)Activate Duplicate cleansing.
12)Remember we need to make settings in the BAS(Business Address Service)
which is integrated with the SAP Regional Structure, which has to be populated with data either manually(administration overhead is a constraint, or using a Program), Activate Duplicate check index pools.(SAP Web application server)
13)use Transaction SM30
14) display table /SMBCRM/TSAD10
15) this is where you find all the tables.
Finally If your BADIS(Address_Search and ADDRESS_UPDATE) will work accordingly and they only provide an interface for  a third party application to come in to contact and do the actuall work. they are defenitely helpless without an external application. Check with SAP for the list of 3rd Party tool available.
Reward with points.
cheers,
Muralidhar Prasad.C

Similar Messages

  • Invoices Duplication Check

    Hello to you all,
    In vendor master record you can flag the checkbox "Check Flag for Double Invoices or Credit Memos" this flag activate Invoices Duplication Check in Logistics documents and in FI documents separately,
    Meaning I can enter the same invoice twice, As a Logistics document and by mistake as a FI document again.
    Does anyone know how can I prevent it using standard customization?
    Regards,
    Dan

    Dear Atif,
    Thanks,
    This Info is display in the field documentation.
    The customization is relevant only to the logistic side.
    I am looking for cross module costomization.
    Regards,
    Dan

  • Duplication Check for Business Partner

    Hi,
    In my project for BP Duplicate check  i have activated Trex Settings.
    The duplication Check is based on only Address of the BP. But my we need to check duplication based on Pan number given in Identification Tab.
    Can we check duplication based on Pan number? If yes help us.
    With Regards,
    Selvam T

    For duplication badi ADDRESS_SEARCH is available. You can try implement additional logic in method IF_EX_ADDRESS_SEARCH~ADDRESS_SEARCH.

  • Duplication check for Lead and Contact

    Hi,
    Can i confirm that, there is no duplication check for Lead and Contact during the new reacord adding?
    I also realise that during the Lead convertion, CRMOD also never check for duplication even i have existing contact available?
    Is there anyway for us to activate the duplication check during the Lead convertion?
    Regards,
    SK

    SK,
    System can check duplicate if you add external id for record (Lead and Contact).
    For more information please refer topic 'About record duplicates and external ids' on page no.1303 of OnDemand help.
    Hope this helps.
    Santosh

  • DRQ : Customer / Vendor ref. no. duplication check

    Hi Expert,
    At present Customer / Vendor ref. no. duplication check is perform on all documents (e.g. A/R Invoice / A/P Invoice)
    Where as I believe it should be performed Customer / Vendor wise.
    The reason is simple, say in a new year all customer / vendor will generate their respective A/R invoice OR A/P invoice starting from 1. So verifing it accross the documents seems sence less. If is verified that whether the same Customer / Vendor 's same document is entered earlier or not then it makes sence.
    Samir Gandhi

    as I reach 10 post, I have to compulsorily close this thread

  • Order Duplication check

    Hi Experts,
    we have a requirement to have Order duplication check for all the Orders we recieve as IDoc(ORDERS05).
    And when we get a duplicated order, we need to stop the process (sales order creation) and report the error.
    Can you please suggest on how to acheive the above requirement.
    Thanks,
    MK

    Hi,
    When u check and find out tht the given order being processed is a duplicate, then you can change the status of the IDOC to 51.. this will raise an error.. and the irder wil not be created in ur system.
    Hope this helps.

  • VA01 userexit for PO duplication check

    Hi Experts,
    I have an urgent requirement regarding PO duplication check and I need to know if there is a userexit for VA01 where I can perform PO duplication check. This PO duplication check will consists of fields VBAK-KUNNR, VBAK-BSTKD and VBAK-BNAME.
    Points will be awarded. Thanks in advance.
    Regards,
    Leo

    hi,
    check the include MV45AFZZ...It has number of userexits....put a breakpoint and check..
    Regards,
    Nagaraj

  • Customer duplication check

    i want to know how to switch on an automatic duplication check for customer
    thanks in advance

    Alternatively, you can also do the same via IMG Path FI --> Accounts Receivable and Accounts Payable --> Customer Accounts --> Master Data --> Preparing for Creating Customer Master Data --> Change Message Control for Customer Master Data
    thanks
    G. Lakshmipathi

  • Duplication check through form personalization

    Hi
    i was wondering what to write on when validate record or when new item instance for any duplicate checking.what are the reserve words to check the entered value if present in databse table then error.
    Regards

    Hi
    thanks for help.Can i also used this type of personalization for format mask checking in any field.like if i applied format mask on any field it will give error at bootom of window that field must be of type 9999.Can i through a meaning ful alert in case of error as we are displaying error in form of alert in duplication case.
    Regards

  • Duplication Check for Vendor Invoices

    Can we check for duplicate invoices in SAP
    Regards
    Satish

    Hi
    The configuration settings are made in
    IMG>Materials Management>Logistics Invoice Verification>Incoming Invoice>Set Check for Duplicate Invoice
    In vendor master you need to maintain the tick for Duplicate Invoice Check
    Thanks & Best Regards
    Sanil K Bhandari

  • Use of Mobile Number for Duplication check in CRM 7.0

    Dear All,
    We are using SAP CRM 7.0 (Marketing). While creating a Business Partner, currenlty we are able get a Warning message based on Address check via TREX 7.0. But we need to check for duplicate based on "Mobile / Phone Number".
    Request you to share the approach for achieving this.
    Thanks.
    Raj

    Hi,
    As Den said you need to write your own code.
    Please see the badi ADDRESS_SEARCH. This badi  controls the duplicates search procedure .
    You have to implement this badi in your own way to find out the duplicate checks.
    Mobile number can not be brought in via BAS index fields.
    So the importing parameters in this badi will bring in other address attributes but not mobile number.
    So you have to find a provision to bring the mobile number of the bp inside the badi so that you can check on database with that value.
    please see the thread [How BUPA_ADDR_CHECK triggered;. A way of bringing mobile number in, is mentioned in this thread.
    Thanks,
    Rajini

  • Duplication Check for P.O at Sales Order level

    Dear Gurus,
    As per my clients requirement we have configured the system to give an error message when an existing P.O number is entered in the Sales Order screen.It works fine.But we are having a problem that whenever we change anything in the Sales order it doesn't allow us to save our sales order for the second time and gives the error that 'P.O number exists'
    Do anyone have solution for this?
    Advance Thanks.
    Regards,
    Ravi

    Hello,
    Kindly seek the help of ABAPer in this case because during the saving of the Sales order the error related to Purchase order
    number is thrown even though you are editing the PO field in the Sales order. One more check you should carry before saving
    the sales order --> ensure that you have entered a new purchase order.
    Regards,
    Sarthak

  • Accounts orderring and duplication check

    iI find this puzzling and need help to write the code wherein I have to override the base class given below and implement the same after increasing the number of accounts to 10.
    Please help me write the code for the same
    Thanks
    package Account;
    import javax.servlet.http.*;
    import java.util.*;
    public class accounCheck {
    public accounCheck() {
    this.setDirectory("/acctdata/");
    /***************Purpose: To re-order the priorties when accounts are deleted. Exisitin code is for 3 accounts its to be
    made for 10 accounts. *******************/
    protected void reorderAccount(UserRequestParameters reqParams, HttpServletRequest request) {
    int numberOfAccounts = 0;
    try {
    numberOfAccounts = Integer.parseInt(request.getParameter("NO_ACCTS"));
    } catch (NumberFormatException e) {
    // if all of the accounts are being deleted then don't bother shifting anyting
    boolean deleteAll = ((StringUtil.ns(reqParams.get("AccountValues_0")).equals("Delete") ||
    StringUtil.ns(reqParams.get("AccountValues_0")).equals("-Select-"))
    && (StringUtil.ns(reqParams.get("AccountValues_1")).equals("Delete") ||
    StringUtil.ns(reqParams.get("AccountValues_1")).equals("-Select-"))
    && (StringUtil.ns(reqParams.get("AccountValues_2")).equals("Delete") ||
    StringUtil.ns(reqParams.get("AccountValues_2")).equals("-Select-")));
    if (!deleteAll) {
    // processing for three accounts
    if (numberOfAccounts == 3) {
    int doubleShift = 0;
    for (int i = 2; i > -1; i--) {
    if (reqParams.get("AccountValues_" + i) != null && reqParams.get("AccountValues_" +
    i).trim().equals("Delete")) {
    // Single Down Shift (3 to 2 or 2 to 1)
    reqParams.put("PriorityValues_" + (i + 1), String.valueOf(i+1));
    doubleShift ++;
    if (doubleShift == 2) {
    // Down Shift (3 to 1);
    reqParams.put("PriorityValues_2" , String.valueOf(1));
    } else if (reqParams.get("AccountValues_0" ) != null &&
    reqParams.get("AccountValues_0").trim().equals("Delete")) {    
    // Down Shift 3 to 2 if 1 is deleted
    if (reqParams.get("AccountValues_2" ) != null) {
    reqParams.put("PriorityValues_2", String.valueOf(2));
    } else if (numberOfAccounts == 2) {
    if (reqParams.get("AccountValues_0") != null &&
    reqParams.get("AccountValues_0").trim().equals("Delete")) {
    // Single Down Shift (2 to 1)
    reqParams.put("PriorityValues_1", String.valueOf(1));
    /****************** Purpose: To make sure that the account numbers are not Duplicated ******************/
    protected void checkForDuplicateAccounts(UserRequestParameters reqParams, Vector errors) {
    String acct0 = StringUtil.ns(reqParams.get("accountNbr_0").trim());
    String acct1 = StringUtil.ns(reqParams.get("accountNbr_1").trim());
    String acct2 = StringUtil.ns(reqParams.get("accountNbr_2").trim());
    String acct0Type = StringUtil.ns(reqParams.get("AccountValues_0").trim());
    String acct1Type = StringUtil.ns(reqParams.get("AccountValues_1").trim());
    String acct2Type = StringUtil.ns(reqParams.get("AccountValues_2").trim());
    String acct0Rout = StringUtil.ns(reqParams.get("transferNbr_0").trim());
    String acct1Rout = StringUtil.ns(reqParams.get("transferNbr_1").trim());
    String acct2Rout = StringUtil.ns(reqParams.get("transferNbr_2").trim());
    boolean validRow0 = (!acct0.equals("") && !acct0Type.equals("-Select-") && !acct0Type.equals("Delete") &&
    !acct0Type.equals("") && !acct0Rout.equals(""));
    boolean validRow1 = (!acct1.equals("") && !acct1Type.equals("-Select-") && !acct1Type.equals("Delete") &&
    !acct1Type.equals("") && !acct1Rout.equals(""));
    boolean validRow2 = (!acct2.equals("") && !acct2Type.equals("-Select-") && !acct2Type.equals("Delete") &&
    !acct2Type.equals("") && !acct2Rout.equals(""));
    // compare 0 and 1
    if (validRow0 && validRow1) {
    if (acct0Rout.equals(acct1Rout)) {
    if (acct0Type.equals(acct1Type)) {
    if (acct0.equals(acct1)) {
    errors.add(new ErrorListItem(msgDuplicateAccount));
    return;
    // compare 0 and 2
    if (validRow0 && validRow2) {
    if (acct0Rout.equals(acct2Rout)) {
    if (acct0Type.equals(acct2Type)) {
    if (acct0.equals(acct2)) {
    errors.add(new ErrorListItem(msgDuplicateAccount));
    return;
    // compare 1 and 2
    if (validRow1 && validRow2) {
    if (acct1Rout.equals(acct2Rout)) {
    if (acct1Type.equals(acct2Type)) {
    if (acct1.equals(acct2)) {
    errors.add(new ErrorListItem(msgDuplicateAccount));
    return;
    /********************** Purpose: To figure out the number of accounts and Note error message display ***********/
    protected boolean isNoteErrorRequired(UserRequestParameters reqParams, Customer customer) {
    boolean error = false;
    Vector accounts = new Vector();
    try {
    accounts = customer.getItemsRented();
    } catch (Exception e) {
    ErrorLog.log(e, customer, "customer.getItemsRented() thru an exception");
    int numberOfAccounts = accounts.size();
    if (numberOfAccounts > 0 && StringUtil.ns(reqParams.get("balanceAmmount")).equals("4")) {
    numberOfAccounts--;
    // check the number of accounts
    if (!StringUtil.ns(reqParams.get("AccountValues_" + (numberOfAccounts))).equals("Delete") &&
    !StringUtil.ns(reqParams.get("AccountValues_" + (numberOfAccounts))).equals("-Select-") &&
    !StringUtil.ns(reqParams.get("AccountValues_" + (numberOfAccounts))).trim().equals("")) {
    // an extra row has been added
    return true;
    if (numberOfAccounts == 0) {
    for (int i = 0; i < 3; i++) {
    if (StringUtil.ns(reqParams.get("AccountValues_" + i)).equals("R") ||
    StringUtil.ns(reqParams.get("AccountValues_" + i)).equals("P")) {
    return true;
    for (int i = 0; i < accounts.size(); i++) {
    // Check for differences
    if
    (!StringUtil.ns(((ItemsRented)accounts.elementAt(i)).getAccountNbr()).equals(StringUtil.ns(reqParams.get("accountNbr_" +
    i)))) {
    return true;
    if (StringUtil.ns(reqParams.get("AccountValues_" + i)).equals("R") ||
    StringUtil.ns(reqParams.get("AccountValues_" + i)).equals("P")) {
    if
    (!StringUtil.ns(((ItemsRented)accounts.elementAt(i)).getType()).equals(StringUtil.ns(reqParams.get("AccountValues_" + i)))) {
    return true;
    if
    (!StringUtil.ns(((ItemsRented)accounts.elementAt(i)).getRegistrationNumber()).equals(StringUtil.ns(reqParams.get("transferNbr
    _" + i)))) {               
    return true;
    return error;
    /************ To make sure that the priority numbers are all in order.
    * This returns a boolean which tells the calling clients that
    * the row that has excess checked also has the lowest priority so the calling method
    * will know to display the origional data.
    protected boolean checkPriorityNumbers(Customer Customer, Vector items, Vector errors) {
    boolean[] p = new boolean[items.size()];
    boolean returnFlag = true;
    // Check to make sure the priorities are in order
    for (int i = 0; i < items.size(); i++){
    if (((ItemsRentedCs)items.elementAt(i)).getPriority() == 1) {
    if(p[0] == true) {
    errors.add(new ErrorListItem(msgPriorityUnique));
    break;
    } else {
    p[0] = true;
    if (((ItemsRentedCs)items.elementAt(i)).getPriority() == 2) {
    if(p[1] == true) {
    errors.add(new ErrorListItem(msgPriorityUnique));
    break;
    } else {
    p[1] = true;
    if (((ItemsRentedCs)items.elementAt(i)).getPriority() == 3) {
    if(p[2] == true) {
    errors.add(new ErrorListItem(msgPriorityUnique));
    break;
    } else {
    p[2] = true;
    // Make sure that the row that has excess checked also has the lowest priority
    for (int i = 0; i < items.size(); i++){
    if (((ItemsRented)items.elementAt(i)).isExcessAllowed()) {
    if (((ItemsRentedCs)items.elementAt(i)).getPriority() != items.size()) {
    errors.add(new ErrorListItem(msgFNDLowPriority));
    returnFlag = false;
    // The full net deposit cannot have a balance in the Deposit Amount field
    if (((ItemsRented)items.elementAt(i)).getDepositAmount() != 0) {
    errors.add(new ErrorListItem(msgItemRentedAmt));
    return returnFlag;
    * Purpose: To return a vector of the valid rows */
    protected Vector getValidItemRowNums(UserRequestParameters reqParams, HttpServletRequest request, Vector errors) {
    Vector validItemRowNum = new Vector();
    int errorCount = 0;
    Vector tmpErrors = new Vector();
    // Flags to tell when a certain type of error has been reported (don't want to report the same error 2x)
    // These are implemented as counters so that when errors are added for an acount row that is empty
    // The specifice error counter can be decremented
    int accountTypeErrorCount = 0;
    int priorityErrorCount = 0;
    int transferNumberErrorCount = 0;
    int accountNumberErrorCount = 0;
    int accountAmountErrorCount = 0;
    for (int i = 0; i < 3; i++) {
    // Reset the error counter and tmpErrors vector
    errorCount = 0;
    tmpErrors.clear();
    // gather initial errors
    if (reqParams.get("AccountValues_" + i).equals("Delete")) {
    // The user selected the row for deletion, so just don't include it
    // and don't display any error messages for it
    // JUST SKIP IT!
    } else {
    // Validate the data in the row.
    // Check the account type
    if (reqParams.get("AccountValues_" + i).equals("-Select-")) {
    if (accountTypeErrorCount == 0) tmpErrors.add(new ErrorListItem(msgAcctTypeReq));
    errorCount++;
    accountTypeErrorCount++;
    // Check the priority
    if (reqParams.get("PriorityValues_" + i).equals("-Select-")) {
    if (priorityErrorCount == 0) tmpErrors.add(new ErrorListItem(msgPriorityNumReq));
    errorCount++;
    priorityErrorCount++;
    // Check the transfer number
    // the following line is commented out because we now have database registration number validation in
    // the saveItemsRented() method
    // if (reqParams.get("transferNbr_" + i) == null ||
    !isRegistrationNumberValid(reqParams.get("transferNbr_" + i))) {
    if (reqParams.get("transferNbr_" + i) == null || reqParams.get("transferNbr_" + i).trim().length() <
    1) {
    if (transferNumberErrorCount == 0) tmpErrors.add(new
    ErrorListItem(msgStoreRegistrationNbrReq));
    errorCount++;
    transferNumberErrorCount++;
    // Check the account number
    if (reqParams.get("accountNbr_" + i) == null || reqParams.get("accountNbr_" + i).trim().length() < 1)
    if (accountNumberErrorCount == 0) tmpErrors.add(new ErrorListItem(msgAcctNbrReq));
    errorCount++;
    accountNumberErrorCount++;
    // Check the amount
    try {
    String itemNbr = reqParams.get("itemNbr_" + i);
    itemNbr = StringUtil.removeNonDecimalChars(itemNbr).trim();
    if (itemNbr == null || itemNbr.length() == 0) {
    itemNbr = "0";
    if (Double.parseDouble(itemNbr) <= 0) {
    // OK for no amount if full net deposit is checked.
    if (reqParams.get("remainingPay") != null) {
    if (new Integer(Integer.parseInt(reqParams.get("remainingPay"))).intValue()
    != (i+1)) {
    if (accountAmountErrorCount == 0) tmpErrors.add(new
    ErrorListItem(msgDepAmtReq));
    errorCount++;
    accountAmountErrorCount++;
    } else if (Double.parseDouble(itemNbr) > 99999999.99) {
    if (accountAmountErrorCount == 0) tmpErrors.add(new ErrorListItem(msgDepMaxAmt));
    errorCount++;
    accountAmountErrorCount++;
    } // Get the parse exception
    catch (Exception e) {
    ErrorLog.log("Parse exception for the deposit in getValidItemsRowNums",
    ErrorLog.ABORTED_TRANSACTION, e);
    // If there was an error in EVERY field and the error
    // count is all of the fields but one, there's NO WAY it's valid
    // so don't include it in the count
    if (errorCount == ITEM_RENTED_FIELD_COUNT || (reqParams.get("balanceAmmount") == null && errorCount
    == (ITEM_RENTED_FIELD_COUNT - 1))) {
    // decrement the error counters
    accountTypeErrorCount--;
    priorityErrorCount--;
    transferNumberErrorCount--;
    accountNumberErrorCount--;
    accountAmountErrorCount--;
    } else {
    validDepositRowNum.add(Integer.toString(i));
    errors.addAll(tmpErrors);
    return validDepositRowNum;

    Or, if that price is too steep, you could try posting a better question. A copule of tips:
    1) When you post code, please use [code] and [/code] tags as described in Formatting Help on the message entry page. It makes it much easier to read.
    2) Post a more specific question. Don't just ask to have it done for you. Do what you can, and post a specific question when you get help.
    3) When posting that question, be detailed about what behavior is desired vs. what is observed. Post any error messages. (Copy and paste the exact message--don't just say "It gave me a null error or something.")
    4) Don't post that much code. Post a small example that demonstrates your problem. We should be able to copy and paste your code and see the same problem you're observing, and ideally the code should be at most a screenful or two.
    &para;

  • Additional fields for bp duplication check

    Hello,
    I'm in a process of implementing ADDRESS_SEARCH BADI. Is there any way to bring additianal fields (phone number and date of birth) to the BADI interface?
    Thanks

    Hi Rahul,
    Sure, this can be easily configured.
    There is a BADI - ADDRESS_SEARCH which is used to implement duplicate checks on BP name + address. You can either write your own implementation or you can use the SAP provided implementation SIC_ADDRESS_SEARCH.
    You should also be able to find the relevant documentation with the BADI itself in SE18. You would also need to do some minor customizing to choose which fields should be checked for duplicate values. You can find this customizing in the IMG customizing (transaction SPRO) (Just search for duplicate check and the search will find the relevant node in the customizing menu)
    This should solve your problem.
    Cheers,
    Rishu.

  • Account document archiving and duplication check

    Hi all,
    If i have performed FI accounting document (FI_DOCUMNT) data archive, it the invoice duplicate check still work?
    Thanks.

    Hi Christy,
    I am going to archive the archiving object FI_DOCUMNT which will delete the BKPF/BSEG table. After the archiving, is the vendor invoice duplicate also reads from archive?
    Thanks.

Maybe you are looking for

  • Free goods Detemination

    Hi SAP Gurus, Greetings to all. I just have a question regarding above topic. I understand that Free Goods is only automatically determined only to those that have Document Category if "C" w/c is Order. However, my client insists that they want to se

  • Set the date and time

    how to set the date and time in apple tv?

  • MATERIAL GROUP & MOVEMENT TYPE

    Hi, I want a report in which Material Group & Movemt type combinely should be display. Allready search in SDN Thanks in Advance Regards Vinay

  • Error when running adpatch

    Hi, I am doing upgradation from 11i to 12.1.1. Database is upgraded to 11.1.0.7. Now when applying a patch on application side. I am getting error as below: AD Administration is verifying your username/password. The status of various features in this

  • Sytem sleep vs. Shutdown

    Greetings ! I have been reading about this here on the board a lot. There seems to be strong support for either option. For a relative layman, it's pretty confusing. Is there a "right" way at all ?