2007 Nov 24 10:51 PM
Hello Experts,
I am trying to update the VBPA table by changing the entries in the XVBPA structure in the sales order user-exit MV45AFZZ.I have set the updation flag as 'I' for the UPDKZ field.
The problem I am facing is that there is a termination which occurs in the standard code due to the insert.The termination occurs in the 'SD_PARTNER_UPDATE' function module line 480.I wish to know if there is any validation which I can execute on the partner function determination procedure before I actually try to update the partner function.
Kindly give your pointerts for the same.
Thank you.
Best Regards,
Gaurav.
2007 Nov 25 2:46 AM
You should write your code to update the partner function in the USEREXIT_MOVE_DATA_VBPA.
Regards,
Naimesh Patel
2007 Nov 25 4:10 AM
Hi Naimesh,
Thank you for your reply, could you please give more details as to where I can find this user exit.
Thank you.
Best regards,
Gaurav.
2022 Jan 28 8:14 AM
Hello, I had to change region of Shipt To Party from ADRC in MV45AFZZ when sales order gets saved.
I tried it with changing xvbadr but i did not work.
The solution which worked for me is with function modules around ADDR_UPDATE if address exists on database and ADDR_MAINTAIN_COMPLETE if only address handle exits but not on databse. I added the form in MV45AFZZ USER_SAVE_DOCUMENT_PREPARE:
*&---------------------------------------------------------------------*
*& Form UPDATE_WE_ADDRESS_REGION
*&---------------------------------------------------------------------*
* Update Region of WE
*----------------------------------------------------------------------*
FORM update_we_address_region USING p_region.
FIELD-SYMBOLS: <fs_badr> LIKE xvbadr,
<fs_vbpa> LIKE xvbpa.
DATA: ls_addr1_sel TYPE ADDR1_SEL,
ls_addr1_value TYPE ADDR1_VAL,
ls_addr1_data TYPE ADDR1_DATA,
lt_return TYPE TABLE OF ADDR_ERROR,
lv_return_code TYPE AD_RETCODE,
lv_address_handle TYPE AD_HANDLE.
LOOP AT xvbpa[] ASSIGNING <fs_vbpa> WHERE parvw = 'WE'.
READ TABLE xvbadr[] ASSIGNING <fs_badr> WITH KEY adrnr = <fs_vbpa>-adrnr.
IF sy-subrc eq 0.
<fs_badr>-regio = p_region.
clear: ls_addr1_sel, ls_addr1_value, ls_addr1_data, lv_return_code.
ls_addr1_sel-addrnumber = <fs_badr>-adrnr.
call function 'ADDR_GET'
exporting
address_selection = ls_addr1_sel
importing
address_value = ls_addr1_value
exceptions
parameter_error = 1
address_not_exist = 2
version_not_exist = 3
internal_error = 4
others = 5.
" case if address exists on database already
IF sy-subrc EQ 0.
MOVE-CORRESPONDING ls_addr1_value TO ls_addr1_data.
ls_addr1_data-region = p_region.
REFRESH lt_return.
CALL FUNCTION 'ADDR_UPDATE'
EXPORTING
address_data = ls_addr1_data
address_number = ls_addr1_value-addrnumber
nation = ls_addr1_value-nation
check_empty_address = ' '
check_address = ' '
IMPORTING
returncode = lv_return_code
TABLES
error_table = lt_return
EXCEPTIONS
address_not_exist = 1
parameter_error = 2
version_not_exist = 3
internal_error = 4
OTHERS = 5.
IF sy-subrc EQ 0 AND lv_return_code NE 'E'.
CALL FUNCTION 'ADDR_MEMORY_SAVE'
EXCEPTIONS
address_number_missing = 1
person_number_missing = 2
internal_error = 3
database_error = 4
reference_missing = 5
OTHERS = 6.
IF sy-subrc EQ 0.
CALL FUNCTION 'ADDR_MEMORY_CLEAR'
EXCEPTIONS
unsaved_data_exist = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
ENDIF.
ENDIF.
ELSE.
" case if address handle exists but not on database
lv_address_handle = <fs_badr>-adrnr.
DATA: lt_addr_complete TYPE SZADR_ADDR1_COMPLETE.
CALL FUNCTION 'ADDR_GET_COMPLETE'
EXPORTING
ADDRHANDLE = lv_address_handle
IMPORTING
ADDR1_COMPLETE = lt_addr_complete
EXCEPTIONS
PARAMETER_ERROR = 1
ADDRESS_NOT_EXIST = 2
INTERNAL_ERROR = 3
WRONG_ACCESS_TO_ARCHIVE = 4
ADDRESS_BLOCKED = 5
OTHERS = 6.
IF sy-subrc EQ 0.
READ TABLE lt_addr_complete-addr1_tab INDEX 1 ASSIGNING FIELD-SYMBOL(<fs_complete_addr>).
IF sy-subrc EQ 0.
<fs_complete_addr>-data-region = p_region.
REFRESH lt_return.
DATA: lv_update_kz TYPE AD_UPDFLAG.
lv_update_kz = 'U'.
CALL FUNCTION 'ADDR_MAINTAIN_COMPLETE'
EXPORTING
updateflag = lv_update_kz
addr1_complete = lt_addr_complete
address_group = 'SD01'
CONSIDER_CONSNUMBER_FOR_INSERT = 'X'
IV_TIME_DEPENDENT_COMM_DATA = 'X'
IMPORTING
RETURNCODE = lv_return_code
TABLES
ERROR_TABLE = lt_return
EXCEPTIONS
PARAMETER_ERROR = 1
ADDRESS_NOT_EXIST = 2
HANDLE_EXIST = 3
INTERNAL_ERROR = 4
ADDRESS_BLOCKED = 5
OTHERS = 6.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
2022 Jan 28 8:27 AM
Again, don't use old question
and posting several time the same question, is not a good practice