cancel
Showing results for 
Search instead for 
Did you mean: 

problem creating vendor with VMD_EI_API=>MAINTAIN_BAPI

lcs00
Explorer
0 Kudos
5,788

hi guys

im using vmd_ei_api=>maintain_bapi to create vendor

i can create a vendor successfully with below's code but there are some problems:

1. even though i have populated central_data-central-data-stcd1 (identification - tax number), address-postal-data-country, address-postal-data-langu, they are not showing in tcode BP?

2. there is no place to populate ( identification - tax number's category )?

3. after calling maintain_bapi and commit, i cannot use the same lifnr number returned from it in tcode BP. It seems that i need to add '1' to the number in order to view it in BP? It says the previous lifnr is not confirmed yet?

Could you guys please advise what went wrong with the code? i have spent hours to debug but yet to find the problem.

Thanks.

DATA:   ls_vmds_ei_main    TYPE vmds_ei_main,
        ls_vmds_ei_extern  TYPE vmds_ei_extern,
        ls_vmds_ei_company TYPE vmds_ei_company.


  CLEAR ls_vmds_ei_main.
  LOOP AT gt_input INTO gs_input.

    CLEAR ls_vmds_ei_extern.
    CLEAR ls_vmds_ei_company.

    "check whether existing record exists
    READ TABLE lt_lfb1 INTO DATA(ls_lfb1)
    WITH KEY bukrs = gs_input-bukrs
             altkn = gs_input-lifnr
             BINARY SEARCH.
    IF sy-subrc = 0.

      "key
      ls_vmds_ei_extern-header-object_instance-lifnr = |{ gs_input-lifnr ALPHA = IN }|.
      ls_vmds_ei_extern-header-object_task           = 'U'.  "change
    ELSE.

      "key

      "get new number
      READ TABLE lt_tb001 INTO DATA(ls_tb001)
        WITH KEY bu_group = gs_input-ktokk.
      IF sy-subrc = 0.
        CALL FUNCTION 'NUMBER_GET_NEXT'
          EXPORTING
            nr_range_nr             = 'V8'
            object                  = 'BU_PARTNER'
          IMPORTING
            number                  = ls_vmds_ei_extern-header-object_instance-lifnr
          EXCEPTIONS
            interval_not_found      = 1
            number_range_not_intern = 2
            object_not_found        = 3
            quantity_is_0           = 4
            quantity_is_not_1       = 5
            interval_overflow       = 6
            buffer_overflow         = 7
            OTHERS                  = 8.

      ENDIF.

      ls_vmds_ei_extern-header-object_task           = 'I'.  "create
    ENDIF.

    "general data
    ls_vmds_ei_extern-central_data-central-data-ktokk = 'ZEMP'. 
    ls_vmds_ei_extern-central_data-central-data-stcd1 = gs_input-stcd1.    <<=====================
    ls_vmds_ei_extern-central_data-central-data-stkzn = gs_input-stkzn.
    ls_vmds_ei_extern-central_data-central-data-sexkz = gs_input-sexkz.
    ls_vmds_ei_extern-central_data-central-data-j_1kfrepre = 'person1'.
    ls_vmds_ei_extern-central_data-central-data-j_1kftbus = 'ABC'.
    ls_vmds_ei_extern-central_data-central-data-j_1kftind = 'ABC'.

    ls_vmds_ei_extern-central_data-central-datax-ktokk = abap_true.
    ls_vmds_ei_extern-central_data-central-datax-stcd1 = abap_true.      <<=====================
    ls_vmds_ei_extern-central_data-central-datax-stkzn = abap_true.
    ls_vmds_ei_extern-central_data-central-datax-sexkz = abap_true.
    ls_vmds_ei_extern-central_data-central-datax-j_1kfrepre = abap_true.
    ls_vmds_ei_extern-central_data-central-datax-j_1kftbus = abap_true.
    ls_vmds_ei_extern-central_data-central-datax-j_1kftind = abap_true.

    ls_vmds_ei_extern-central_data-address-task = 'M'.
    ls_vmds_ei_extern-central_data-address-postal-data-name = gs_input-name1.
    ls_vmds_ei_extern-central_data-address-postal-data-street = 'Street 1'.   <<=====================
    ls_vmds_ei_extern-central_data-address-postal-data-country = gs_input-land1.  <<==================
    ls_vmds_ei_extern-central_data-address-postal-data-langu = gs_input-spras.   <<===================
    ls_vmds_ei_extern-central_data-address-postal-data-sort1 = gs_input-sortl.

    ls_vmds_ei_extern-central_data-address-postal-datax-name = abap_true.
    ls_vmds_ei_extern-central_data-address-postal-datax-street = abap_true.  <<=====================
    ls_vmds_ei_extern-central_data-address-postal-datax-country = abap_true.  <<=====================
    ls_vmds_ei_extern-central_data-address-postal-datax-langu = abap_true.  <<=====================
    ls_vmds_ei_extern-central_data-address-postal-datax-sort1 = abap_true.

    READ TABLE lt_country_iso INTO DATA(ls_country_iso) WITH KEY land1 = gs_input-land1.
    IF sy-subrc = 0.
      ls_vmds_ei_extern-central_data-address-postal-data-countryiso = ls_country_iso-intca.
      ls_vmds_ei_extern-central_data-address-postal-datax-countryiso = abap_true.
    ENDIF.

    READ TABLE lt_language_iso INTO DATA(ls_language_iso) WITH KEY spras = gs_input-spras.
    IF sy-subrc = 0.
      ls_vmds_ei_extern-central_data-address-postal-data-langu_iso = ls_language_iso-laiso.
      ls_vmds_ei_extern-central_data-address-postal-datax-langu_iso = abap_true.
    ENDIF.


    "company code page
    ls_vmds_ei_company-task           = 'M'.  "create or change
    ls_vmds_ei_company-data_key-bukrs = gs_input-bukrs.
    ls_vmds_ei_company-data-akont     = gs_input-akont.
    ls_vmds_ei_company-data-altkn     = gs_input-lifnr.
    ls_vmds_ei_company-data-zterm     = 'Z000'.
    ls_vmds_ei_company-data-reprf     = 'X'.
    ls_vmds_ei_company-data-zwels     = gs_output-zwels(1).

    ls_vmds_ei_company-datax-akont    = abap_true.
    ls_vmds_ei_company-datax-altkn    = abap_true.
    ls_vmds_ei_company-datax-zterm    = abap_true.
    ls_vmds_ei_company-datax-reprf    = abap_true.
    ls_vmds_ei_company-datax-zwels    = abap_true.

    APPEND ls_vmds_ei_company TO ls_vmds_ei_extern-company_data-company[].

    APPEND ls_vmds_ei_extern TO ls_vmds_ei_main-vendors[].

  ENDLOOP.

  CALL METHOD vmd_ei_api=>maintain_bapi
    EXPORTING
      iv_test_run              = p_test
      iv_collect_messages      = abap_true
      is_master_data           = ls_vmds_ei_main
    IMPORTING
      es_master_data_correct   = DATA(ls_vendor_correct)
      es_message_correct       = DATA(ls_message_correct)
      es_master_data_defective = DATA(ls_vendor_defective)
      es_message_defective     = DATA(ls_message_defective).

  IF p_test = ' '.
    COMMIT WORK.
  ENDIF.

Accepted Solutions (1)

Accepted Solutions (1)

lcs00
Explorer

i have solved the issue by using class cl_md_bp_maintain=>maintain

here is the code sample in case anyone wants to refer

  DATA: lt_cvis_ei_extern TYPE cvis_ei_extern_t,
        ls_cvis_ei_extern TYPE cvis_ei_extern,
        ls_vmds_ei_company  TYPE vmds_ei_company,

        ls_role           TYPE bus_ei_bupa_roles,
        ls_taxnumber      TYPE bus_ei_bupa_taxnumber,
        ls_address        TYPE bus_ei_bupa_address,
        ls_bank_detail    TYPE bus_ei_bupa_bankdetail,

        lt_return_map     TYPE mdg_bs_bp_msgmap_t,
        ls_return         TYPE bapiret2,
        lt_return         TYPE bapiret2_t.

 LOOP AT gt_input INTO gs_input.

    CLEAR ls_cvis_ei_extern.

    "business partner data

    ls_cvis_ei_extern-ensure_create-create_vendor = abap_true.

    "key
    CALL METHOD cl_system_uuid=>if_system_uuid_static~create_uuid_c32
        RECEIVING
          uuid = ls_cvis_ei_extern-partner-header-object_instance-bpartnerguid.

    

    ls_cvis_ei_extern-partner-header-object_task = 'M' .    "I / U / M / D

    ls_cvis_ei_extern-partner-central_data-common-data-bp_control-category = '2'. "organization
    ls_cvis_ei_extern-partner-central_data-common-data-bp_control-grouping = 'ZEMP'. 

    ls_cvis_ei_extern-partner-central_data-common-data-bp_centraldata-searchterm1  = gs_input-sortl.
    ls_cvis_ei_extern-partner-central_data-common-datax-bp_centraldata-searchterm1 = abap_true.

    ls_cvis_ei_extern-partner-central_data-common-data-bp_organization-name1  = gs_input-name1.
    ls_cvis_ei_extern-partner-central_data-common-datax-bp_organization-name1 = abap_true.

    "address
    CLEAR ls_address.
    ls_address-task                             = 'M'.   "I U M D (S)tandard
    ls_address-data_key-operation               = 'XXDFLT'. "standard
    ls_address-data-postal-data-standardaddress = abap_true.
    ls_address-data-postal-data-street          = 'street1'. "mandatory
    ls_address-data-postal-data-country         = gs_input-land1.
    ls_address-data-postal-data-langu           = gs_input-spras.
    ls_address-data-postal-datax-standardaddress = abap_true.
    ls_address-data-postal-datax-street          = abap_true.
    ls_address-data-postal-datax-country         = abap_true.
    ls_address-data-postal-datax-langu           = abap_true.
    ls_address-currently_valid                   = abap_true.
    APPEND ls_address TO ls_cvis_ei_extern-partner-central_data-address-addresses[].

    "bank details
    CLEAR ls_bank_detail.
    ls_bank_detail-task = 'I'.  "I U D
    ls_bank_detail-data-bank_ctry = gs_input-land1.
    ls_bank_detail-data-bank_key  = '3'.
    ls_bank_detail-data-bank_acct = gs_input-bankn.
    ls_bank_detail-data-ctrl_key = '1'.
    ls_bank_detail-data-bank_ref = 'TESTBANK'.

    ls_bank_detail-datax-bank_ctry = abap_true.
    ls_bank_detail-datax-bank_key  = abap_true.
    ls_bank_detail-datax-bank_acct = abap_true.
    ls_bank_detail-datax-ctrl_key  = abap_true.
    ls_bank_detail-datax-bank_ref  = abap_true.
    ls_bank_detail-currently_valid = abap_true.
    APPEND ls_bank_detail TO ls_cvis_ei_extern-partner-central_data-bankdetail-bankdetails[].

    "tax number
    CLEAR ls_taxnumber.
    ls_taxnumber-task = 'I'.                        "I / U / D
    ls_taxnumber-data_key-taxtype = 'X1'.
    ls_taxnumber-data_key-taxnumber = gs_input-stcd1.
    APPEND ls_taxnumber TO ls_cvis_ei_extern-partner-central_data-taxnumber-taxnumbers[].
    ls_cvis_ei_extern-partner-central_data-taxnumber-common-data-nat_person = gs_input-stkzn.
    ls_cvis_ei_extern-partner-central_data-taxnumber-common-datax-nat_person = abap_true.

    "role
    CLEAR ls_role.
    ls_role-task = 'I'.                          "I / D
    ls_role-data_key = 'FLVN00'.
    ls_role-data-rolecategory = 'FLVN00'.
    ls_role-data-valid_from = sy-datum.
    ls_role-data-valid_to = '99991231'.
    ls_role-datax-valid_from = abap_true.
    ls_role-datax-valid_to = abap_true.
    ls_role-currently_valid = abap_true.
    APPEND ls_role TO  ls_cvis_ei_extern-partner-central_data-role-roles[].

    "======================================================================
    "vendor maintenance LFB1


      ls_cvis_ei_extern-vendor-header-object_task           = 'I'.
      CLEAR ls_cvis_ei_extern-vendor-header-object_instance-lifnr.
   

    ls_cvis_ei_extern-vendor-central_data-central-data-ktokk      = 'ZEMP'. 
    ls_cvis_ei_extern-vendor-central_data-central-data-stcd1      = gs_input-stcd1.
    ls_cvis_ei_extern-vendor-central_data-central-data-stkzn      = gs_input-stkzn.
    ls_cvis_ei_extern-vendor-central_data-central-data-sexkz      = gs_input-sexkz.
    ls_cvis_ei_extern-vendor-central_data-central-data-j_1kfrepre = 'test'.  "mandatory
    ls_cvis_ei_extern-vendor-central_data-central-data-j_1kftbus  = 'CoD'.    "mandatory
    ls_cvis_ei_extern-vendor-central_data-central-data-j_1kftind  = 'ABC'.    "mandatory
    ls_cvis_ei_extern-vendor-central_data-central-datax-ktokk      = abap_true.
    ls_cvis_ei_extern-vendor-central_data-central-datax-stcd1      = abap_true.
    ls_cvis_ei_extern-vendor-central_data-central-datax-stkzn      = abap_true.
    ls_cvis_ei_extern-vendor-central_data-central-datax-sexkz      = abap_true.
    ls_cvis_ei_extern-vendor-central_data-central-datax-j_1kfrepre = abap_true.
    ls_cvis_ei_extern-vendor-central_data-central-datax-j_1kftbus  = abap_true.
    ls_cvis_ei_extern-vendor-central_data-central-datax-j_1kftind  = abap_true.

    """address will be copied from business partner above
*    ls_cvis_ei_extern-vendor-central_data-address-task                = 'M'.  "I U D M
*    ls_cvis_ei_extern-vendor-central_data-address-postal-data-name    = gs_input-name1.
*    ls_cvis_ei_extern-vendor-central_data-address-postal-data-street  = 'street1'.  "mandatory
*    ls_cvis_ei_extern-vendor-central_data-address-postal-data-country = gs_input-land1.
*    ls_cvis_ei_extern-vendor-central_data-address-postal-data-langu   = gs_input-spras.
*    ls_cvis_ei_extern-vendor-central_data-address-postal-data-sort1   = gs_input-sortl.
*    ls_cvis_ei_extern-vendor-central_data-address-postal-datax-name    = abap_true.
*    ls_cvis_ei_extern-vendor-central_data-address-postal-datax-street  = abap_true.
*    ls_cvis_ei_extern-vendor-central_data-address-postal-datax-country = abap_true.
*    ls_cvis_ei_extern-vendor-central_data-address-postal-datax-langu   = abap_true.
*    ls_cvis_ei_extern-vendor-central_data-address-postal-datax-sort1   = abap_true.

    """bank detail will be copied from business partner above
*    CLEAR ls_cvis_bank_detail.
*    APPEND ls_cvis_bank_detail TO ls_cvis_ei_extern-vendor-central_data-bankdetail-bankdetails[].

    "company code page
    CLEAR ls_vmds_ei_company.
    ls_vmds_ei_company-task           = 'M'.  "create or change  "I U M
    ls_vmds_ei_company-data_key-bukrs = gs_input-bukrs.
    ls_vmds_ei_company-data-akont     = gs_input-akont.
    ls_vmds_ei_company-data-altkn     = gs_input-lifnr.
    ls_vmds_ei_company-data-zterm     = 'Z000'.
    ls_vmds_ei_company-data-reprf     = 'X'.
    ls_vmds_ei_company-data-zwels     = gs_input-zwels(1).
    ls_vmds_ei_company-datax-akont    = abap_true.
    ls_vmds_ei_company-datax-altkn    = abap_true.
    ls_vmds_ei_company-datax-zterm    = abap_true.
    ls_vmds_ei_company-datax-reprf    = abap_true.
    ls_vmds_ei_company-datax-zwels    = abap_true.

    APPEND ls_vmds_ei_company TO ls_cvis_ei_extern-vendor-company_data-company[].

    "validate
    REFRESH lt_return_map.
    CALL METHOD cl_md_bp_maintain=>validate_single
      EXPORTING
        i_data        = ls_cvis_ei_extern
      IMPORTING
        et_return_map = lt_return_map.

    LOOP AT lt_return_map INTO DATA(ls_return_map) WHERE type = 'A' OR type = 'E'.
      EXIT.
    ENDLOOP.

    "if no problem, append to table for next processing
    IF sy-subrc <> 0.
      APPEND ls_cvis_ei_extern TO lt_cvis_ei_extern[].
    ENDIF.
  ENDLOOP.

  IF p_test IS INITIAL.
    IF lt_cvis_ei_extern[] IS NOT INITIAL.
      CALL METHOD cl_md_bp_maintain=>maintain
        EXPORTING
          i_data   = lt_cvis_ei_extern
        IMPORTING
          e_return = DATA(lt_bapiretm).
    ENDIF.

    CLEAR ls_return.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait   = abap_true
      IMPORTING
        return = ls_return.

  ENDIF.

Answers (1)

Answers (1)

Former Member

Hi lead

Not sure on your program as I need to be able to run it and debug to understand whats the issue

But this is how I did it used FM BAPI_BUPA_CREATE_FROM_DATA and added all the data in the segments using IDOC and was able to create the vendor,

For identification use BADI BADI_FITV_VENDOR_SYNC and you can try method

IF_FITV_VENDOR_SYNC~MODIFY_IDENTIFICATION_NUMBERS

CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'

EXPORTING
partnercategory = lv_partnercategory
partnergroup = lv_partnergroup
centraldata = ls_centraldata
centraldataperson = ls_centraldataperson
addressdata = ls_addressdata
IMPORTING
businesspartner = lv_businesspartner
TABLES
telefondata = lt_phones
e_maildata = lt_emails
return = lt_return.


Regards

Vinita