cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Creating a BP (Customer Role) and Associating a Company

dinis_falcao
Explorer
0 Kudos
410

Hi everyone,

I’m currently working on a project where I need to create a Business Partner in SAP and assign the Customer role (ZFLCU0) to it. I have the code working for these parts, but I’m struggling with the last step — associating a company to the Business Partner.

Here is the code I have so far, which is functional:

ls_central-SEARCHTERM1 = customer-name1.
ls_central-PARTNERTYPE = 'GE00'.
APPEND ls_central TO lt_central.

" Create Business Partner
CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'
  EXPORTING
    partnercategory = '1'
    centraldata = ls_central
  IMPORTING
    business_partner = lv_bpartner
  TABLES
    return = lt_return.

" Assign Customer Role (ZFLCU0)
CALL FUNCTION 'BAPI_BUPA_ROLE_ADD'
  EXPORTING
    businesspartner = lv_bpartner
    businesspartnerrole = 'ZFLCU0'
  TABLES
    return = lt_return.

" Commit creation and changes
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
  EXPORTING
    wait = abap_true.

Thanks in advance for your help!

Accepted Solutions (1)

Accepted Solutions (1)

dinis_falcao
Explorer
0 Kudos

After resolving this issue, and considering that there were not many responses and I couldn’t find concrete examples, I am sharing my solution to it.

This solution involved using several BAPIs: BAPI_BUPA_CREATE_FROM_DATABAPI_BUPA_ROLE_ADD_2BUPA_TAX_ADDBAPI_BUPA_FRG0040_CHANGECVI_EI_INBOUND_MAIN and BAPI_TRANSACTION_COMMIT.

Below is an example ABAP code showcasing this implementation:

      DATA:
          ls_central TYPE BAPIBUS1006_CENTRAL,
          ls_central_org TYPE BAPIBUS1006_CENTRAL_ORGAN,
          ls_addressdata TYPE BAPIBUS1006_ADDRESS,
          lv_bpnumber TYPE BAPIBUS1006_HEAD-BPARTNER,
          lt_return TYPE TABLE OF BAPIRET2.

      ls_central-partnertype = 'GE00'. " Geral
      ls_central-searchterm1 = 'Test'.

      ls_central_org-name1 = 'Name'.

      ls_addressdata-standardaddress = 'X'.
      ls_addressdata-c_o_name = 'Test'.
      ls_addressdata-city = 'Lisbon'.
      ls_addressdata-postl_cod1 = '0000-000'.
      ls_addressdata-country = 'PT'.
      ls_addressdata-street = 'Lisbon Street 101'.
      ls_addressdata-langu = 'P'.

      CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'
        EXPORTING
          partnercategory = '2' " Organization
          centraldata = ls_central
          centraldataorganization = ls_central_org
          addressdata = ls_addressdata
        IMPORTING
          businesspartner = lv_bpnumber
        TABLES
          return = lt_return.

      DATA:
          lv_businesspartner TYPE BAPIBUS1006_HEAD-BPARTNER,
          lv_businesspartnerrole TYPE BAPIBUS1006_BPROLES-PARTNERROLE.

      lv_businesspartner = lv_bpnumber.

      lv_businesspartnerrole = 'ZFLCU0'. " Customer Role

      CALL FUNCTION 'BAPI_BUPA_ROLE_ADD_2'
        EXPORTING
          businesspartner = lv_businesspartner
          businesspartnerrole = lv_businesspartnerrole
        TABLES
          return = lt_return.

      CALL FUNCTION 'BUPA_TAX_ADD'
        EXPORTING
          iv_partner            = lv_businesspartner
          iv_tax_type           = 'PT0'
          iv_tax_number         = 'PT266598820'
          iv_x_save             = 'X'
        TABLES
          ct_return             = lt_return
        EXCEPTIONS
          record_already_exists = 1
          invalid_data          = 2
          foreign_lock          = 3
          OTHERS                = 4.

      DATA:
          ls_datachange TYPE BAPIBUS1006040_SALESCLASS,
          ls_datachangex TYPE BAPIBUS1006040_SALESCLASSX.

      ls_datachange-attribute = '01'.
      ls_datachangex-attribute = 'X'.

      CALL FUNCTION 'BAPI_BUPA_FRG0040_CHANGE'
        EXPORTING
          businesspartner = lv_businesspartner
          data = ls_datachange
          datax = ls_datachangex
        TABLES
          return = lt_return.

      DATA:
           lt_i_data TYPE CVIS_EI_EXTERN_T,
           ls_i_data TYPE CVIS_EI_EXTERN,
           ls_company TYPE CMDS_EI_COMPANY,
           wa_partn TYPE BUS_EI_EXTERN,
           wa_partn_hdr TYPE BUS_EI_HEADER,
           ls_return TYPE BAPIRETM.

      SELECT partner_guid INTO @DATA(lv_guid)
        FROM but000
        WHERE partner = @LV_businesspartner.
      ENDSELECT.

      wa_partn_hdr-object_instance-bpartnerguid = lv_guid.
      wa_partn_hdr-object_instance-bpartner = lv_businesspartner.
      wa_partn_hdr-object_task = 'M'. " Modify
      MOVE-CORRESPONDING wa_partn_hdr TO wa_partn-header.
      MOVE-CORRESPONDING wa_partn TO ls_i_data-partner.

      ls_i_data-customer-header-object_instance-kunnr = lv_businesspartner.
      ls_i_data-customer-header-object_task = 'U'. " Update

      ls_company-task = 'I'. " Insert
      ls_company-data_key = '101'. " Company Code

      ls_company-data-akont = '2111100000'.
      ls_company-datax-akont = 'X'.
      APPEND ls_company TO ls_i_data-customer-company_data-company.
      APPEND ls_i_data TO lt_i_data.

      CALL FUNCTION 'CVI_EI_INBOUND_MAIN'
        EXPORTING
          i_data = lt_i_data
        IMPORTING
          e_return = ls_return.

      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = abap_true.

This method populates the following tables: BUT000, KNA1, and KNB1.

I would like to thank you for the help provided!

Answers (1)

Answers (1)

Lakshmipathi
SAP Champion
SAP Champion

To associate a company (i.e., assign company code data to the Business Partner), you need to create customer company code data using the appropriate BAPI. The BAPI you're currently using (BAPI_BUPA_CREATE_FROM_DATA) only creates the general Business Partner record. Assigning a company requires customer-specific data under a company code.

You should use BAPI_CUSTOMER_CREATEFROMDATA1 after assigning the customer role where

  • ls_companydata includes the company code and other financial data.
  • ls_companydatadetail includes payment terms, reconciliation account, etc.

Alternatively, if the Business Partner already exists and you just want to extend it to a company code, use BAPI_CUSTOMER_CHANGEFROMDATA1. After assigning company data, don’t forget to commit

dinis_falcao
Explorer
0 Kudos

Hi Lakshmipathi,

Thanks for the explanation regarding the use of BAPI_CUSTOMER_CREATEFROMDATA1 to assign company code data to the Business Partner. However, I have a question about the PI_SALESORG field in the BAPI_CUSTOMER_CHANGEFROMDATA1.

According to the BAPI documentation, this field is mandatory, but in my case, since this is a Customer FI (not SD), it’s neither required nor expected to associate sales organization or sales-related data.

I would like to confirm whether, for a Customer FI, it’s acceptable to leave this field empty or ignore it during the update, as no sales data is relevant in my scenario.

Thanks in advance for your help!