В общем, в конце концов увенчалось успехом. Использование встроенных фунций 'MM_MAINTAIN_PARTNERS' и 'MM_READ_PARTNERS' оказалось неудачным, поэтому все-таки пошел путем "вклинивания" в пространство переменных SAPLEKPA. При этом меняется содержимое не только самой XMMPA, но еще и вспомогательных переменных: таблицы IMMPA и TAB_LINES.
Беса, спасибо за подсказанную идею!
Публикую код, возможно кому-то еще пригодится для автодетерминации партнера:
(предполагается, что структура ls_mmpa содержит данные для добавляемого партнера)
Code:
MOVE-CORRESPONDING ls_wyt3 TO ls_mmpa.
CLEAR ls_mmpa-werks.
FIELD-SYMBOLS: <fs_xmmpa> TYPE ANY TABLE,
<fs_immpa> TYPE ANY TABLE,
<fs_mmpa> TYPE ANY,
<fs_tablines> TYPE ANY.
TYPES: BEGIN OF ty_immpa,
tabix LIKE sy-tabix,
END OF ty_immpa.
DATA: ls_immpa TYPE ty_immpa.
DATA: BEGIN OF lt_immpa OCCURS 20,
tabix LIKE sy-tabix,
END OF lt_immpa.
DATA: lt_mmpa TYPE TABLE OF mmpa WITH HEADER LINE.
ASSIGN ('(SAPLEKPA)XMMPA[]') TO <fs_xmmpa>.
ASSIGN ('(SAPLEKPA)MMPA') TO <fs_mmpa>.
ASSIGN ('(SAPLEKPA)IMMPA[]') TO <fs_immpa>.
ASSIGN ('(SAPLEKPA)TAB_LINES') TO <fs_tablines>.
IF <fs_xmmpa> IS ASSIGNED AND <fs_mmpa> IS ASSIGNED AND <fs_immpa> IS ASSIGNED AND <fs_tablines> IS ASSIGNED.
CLEAR ls_mmpa_temp.
lt_mmpa[] = <fs_xmmpa>[].
READ TABLE lt_mmpa INTO ls_mmpa_temp WITH KEY parvw = 'SP'. "if CR agent is not already there
IF sy-subrc NE 0.
MOVE-CORRESPONDING ls_mmpa TO <fs_mmpa>.
PERFORM determine_counter IN PROGRAM SAPLEKPA USING ls_mmpa CHANGING ls_mmpa-parza.
ls_mmpa-ernam = sy-uname.
ls_mmpa-erdat = sy-datum.
APPEND ls_mmpa TO lt_mmpa.
<fs_xmmpa>[] = lt_mmpa[].
CLEAR ls_immpa.
READ TABLE lt_mmpa.
ls_immpa-tabix = sy-tabix.
lt_immpa[] = <fs_immpa>[].
APPEND ls_immpa TO lt_immpa.
<fs_immpa>[] = lt_immpa[].
<fs_tablines> = <fs_tablines> + 1.
ENDIF.
ENDIF.