Всем доброго дня.
Стоит передо мною следующая задача: при сохранении заказа в VA01/VA02 внести кое-какие изменения в конфигурацию позиций (имеющихся и добавляемых). Использовать для этих целей предполагается USEREXIT_SAVE_DOCUMENT_PREPARE в SAPMV45A.
Изначально консультантом было предложено использовать BAPI_SALESORDER_CHANGE, но, судя по всему, этот ФМ сам дергает программу SAPMV45A, что приводит либо к утыканию в блокировки, либо бесконечной рекурсии. Соответственно, сейчас стоит проблема в том, чтобы найти альтернативное решение.
Мне удалось найти пару вроде бы подходящих ФМ: CUCB_GET_CONFIGURATION и CUCB_SET_CONFIGURATION, которые я использую примерно следующим образом:
Code:
" Получаем текущую конфигурацию для позиции
CALL FUNCTION 'CUCB_GET_CONFIGURATION'
EXPORTING
instance = xvbap-cuobj
IMPORTING
configuration = lt_conf.
READ TABLE lt_conf INTO ls_conf INDEX 1.
... " Тут вношу какие-то изменения: добавляю записи, правлю существующие и т.п.
" У новых позиций OWNER не тот, что нужен. Подглядел, каким он должен быть у существующих.
ls_conf-owner-object_type = 'VBPS'.
ls_conf-owner-object_key = xvbap-vbeln && xvbap-posnr.
CLEAR lt_conf.
APPEND ls_conf TO lt_conf.
" Обновляем конфигурацию
CALL FUNCTION 'CUCB_SET_CONFIGURATION'
EXPORTING
root_instance = ls_conf-root
IMPORTING
configuration = lt_conf.
Для существующих позиций оно вроде работает, а вот для новых нет: никаких ошибок не выдается, но изменений не происходит. Видимо, это из-за того, что позиция еще не сохранена в БД. Пробовал завернуть указанный код в ФМ и вызывать его в UPDATE TASK (и V1, и V2) - не помогло.
Помогите, пожалуйста, довести этот подход до ума или найти более правильное решение. Буду премного благодарен
