Суть задачи в следующем:
Есть таблица TabA, в строках которой в поле SHName указаны средства поиска
В таблице TabB, есть поле FieldA, и поле FieldB.
В поле FieldA лежит ключ который однозначно определяет строку таблицы TabA, а для ввода значения в поле FieldB необходимо воспользоваться SH из поля SHName строки таблицы TabA
Пытаюсь реализовать через вызов пользовательского средства поиска
Создал следующий ФМ:
Code:
FUNCTION f4ut_zde_hdbk_pos_code_sap.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" TABLES
*" SHLP_TAB TYPE SHLP_DESCT
*" RECORD_TAB STRUCTURE SEAHLPRES
*" CHANGING
*" REFERENCE(SHLP) TYPE SHLP_DESCR
*" REFERENCE(CALLCONTROL) TYPE DDSHF4CTRL
*"----------------------------------------------------------------------
DATA: ls_shlp TYPE shlp_descr
,ls_shlp_hlp TYPE shlp_descr
,ls_ifc TYPE ddshiface
,ls_selopt TYPE ddshselopt
,ls_seahlpres TYPE seahlpres
,lv_value TYPE char10
.
DATA: lv_hdbk_number_sap TYPE zde_hdbk_number_sap
,lv_hdbk_code TYPE zsap_hdbk_code
,lv_shlpname TYPE shlpname
.
FIELD-SYMBOLS: <ls_ifc> TYPE ddshiface.
DATA: lt_retval TYPE fkk_ddshretval_t
,ls_retval TYPE ddshretval
,lv_rc TYPE sysubrc
.
LOOP AT ls_shlp-interface
ASSIGNING <ls_ifc>.
<ls_ifc>-valfield = 'X'.
ENDLOOP.
IF callcontrol-step EQ 'SELECT'.
READ TABLE shlp_tab
INTO ls_shlp
INDEX 1.
CLEAR ls_ifc.
READ TABLE ls_shlp-interface
INTO ls_ifc
WITH KEY shlpfield = 'HDBK_NUMBER_SAP'
.
IF sy-subrc EQ 0.
lv_hdbk_number_sap = ls_ifc-value+0(10).
ENDIF.
IF lv_hdbk_number_sap IS INITIAL.
READ TABLE ls_shlp-selopt
INTO ls_selopt
WITH KEY shlpfield = 'HDBK_NUMBER_SAP'
.
IF sy-subrc EQ 0.
lv_hdbk_code = ls_selopt-low+0(10).
CALL FUNCTION 'CONVERSION_EXIT_ZZHNR_INPUT'
EXPORTING
input = lv_hdbk_code
IMPORTING
output = lv_hdbk_number_sap.
ENDIF.
ENDIF.
CHECK lv_hdbk_number_sap IS NOT INITIAL.
SELECT SINGLE
shname
FROM TabA
INTO lv_shlpname
WHERE hdbk_number EQ lv_hdbk_number_sap
AND
loevm EQ ''
.
IF sy-subrc EQ 0.
CALL FUNCTION 'F4IF_GET_SHLP_DESCR'
EXPORTING
shlpname = lv_shlpname
IMPORTING
shlp = ls_shlp_hlp.
LOOP AT ls_shlp_hlp-interface
ASSIGNING <ls_ifc>.
<ls_ifc>-valfield = 'X'.
ENDLOOP.
CALL FUNCTION 'F4IF_START_VALUE_REQUEST'
EXPORTING
shlp = ls_shlp_hlp
IMPORTING
rc = lv_rc
TABLES
return_values = lt_retval.
READ TABLE lt_retval
INTO ls_retval
INDEX 1
.
ls_seahlpres-string = ls_retval-fieldval+0(10).
APPEND ls_seahlpres TO record_tab.
callcontrol-step = 'EXIT'.
ENDIF.
ENDIF.
ENDFUNCTION.
средство поиска необходимое вызывается
'F4IF_START_VALUE_REQUEST' возвращает значения
а f4ut_zde_hdbk_pos_code_sap значения не возвращает