Вам нужно сделать средство поиска
не через "Метод выбора"-->>указание ракурса,
а через "ПользовСредстПоиск"-->> указание функционального модуля SH-exit (пример которого приведен ниже: FUNCTION zos_search_blls1)
В данном примере, в средство поиска выведется таблица lt_outtab. Прямо в этом Ф.М. вы определяете её структуру, наименование полей, а также, наполняете требуемыми данными.
Code:
FUNCTION zos_search_blls1.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" TABLES
*" SHLP_TAB TYPE SHLP_DESCT
*" RECORD_TAB STRUCTURE SEAHLPRES
*" CHANGING
*" VALUE(SHLP) TYPE SHLP_DESCR
*" VALUE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL
*"----------------------------------------------------------------------
CASE callcontrol-step.
*=======================================================================
WHEN 'PRESEL1'.
*=======================================================================
* переименование полей
FIELD-SYMBOLS: <fielddescr> TYPE dfies.
READ TABLE shlp-fielddescr ASSIGNING <fielddescr> WITH KEY fieldname = 'BKTXT_PP'.
IF sy-subrc EQ 0.
<fielddescr>-fieldtext = <fielddescr>-reptext =
<fielddescr>-scrtext_s = <fielddescr>-scrtext_m =
<fielddescr>-scrtext_l = 'ПП'.
ENDIF.
READ TABLE shlp-fielddescr ASSIGNING <fielddescr> WITH KEY fieldname = 'DMBTR_DZ'.
IF sy-subrc EQ 0.
<fielddescr>-fieldtext = <fielddescr>-reptext =
<fielddescr>-scrtext_s = <fielddescr>-scrtext_m =
<fielddescr>-scrtext_l = 'Сумма ДЗ'.
ENDIF.
READ TABLE shlp-fielddescr ASSIGNING <fielddescr> WITH KEY fieldname = 'DMBTR_VV'.
IF sy-subrc EQ 0.
<fielddescr>-fieldtext = <fielddescr>-reptext =
<fielddescr>-scrtext_s = <fielddescr>-scrtext_m =
<fielddescr>-scrtext_l = 'Сумма ВВ'.
ENDIF.
*=======================================================================
WHEN 'SELECT'.
*=======================================================================
*---------------------------
* РАЗБОР ПАРАМЕТРОВ
*---------------------------
DATA:
ls_selopt TYPE ddshselopt.
RANGES:
lr_bukrs FOR bkpf-bukrs,
lr_gjahr FOR bkpf-gjahr,
lr_belnr FOR bkpf-belnr,
lr_bktxt FOR bkpf-bktxt,
lr_blart FOR bkpf-blart.
FIELD-SYMBOLS:
<lr_blart> LIKE LINE OF lr_blart.
LOOP AT shlp-selopt INTO ls_selopt.
CASE ls_selopt-shlpfield.
WHEN 'BUKRS'.
CLEAR lr_bukrs.
MOVE-CORRESPONDING ls_selopt TO lr_bukrs.
COLLECT lr_bukrs.
WHEN 'GJAHR'.
CLEAR lr_gjahr.
MOVE-CORRESPONDING ls_selopt TO lr_gjahr.
COLLECT lr_gjahr.
WHEN 'BELNR'.
CLEAR lr_belnr.
MOVE-CORRESPONDING ls_selopt TO lr_belnr.
COLLECT lr_belnr.
WHEN 'BKTXT'.
CLEAR lr_bktxt.
MOVE-CORRESPONDING ls_selopt TO lr_bktxt.
COLLECT lr_bktxt.
ENDCASE.
ENDLOOP.
* вид документа берем из настройки
SELECT sign opti AS option low high
INTO CORRESPONDING FIELDS OF TABLE lr_blart
FROM tvarv
WHERE name EQ 'ZOS_BLART_SCHET'.
LOOP AT lr_blart ASSIGNING <lr_blart> .
IF <lr_blart>-sign IS INITIAL.
<lr_blart>-sign = 'I'.
ENDIF.
CHECK <lr_blart>-option IS INITIAL.
IF <lr_blart>-high IS INITIAL.
<lr_blart>-option = 'EQ'.
ELSE.
<lr_blart>-option = 'BT'.
ENDIF.
ENDLOOP.
*---------------------------
* ФОРМИРОВАНИЕ НАБОРА ДАННЫХ
*---------------------------
TYPES:
BEGIN OF stype_outtab,
belnr TYPE belnr_d,
bukrs TYPE bukrs,
gjahr TYPE gjahr,
bktxt TYPE bktxt,
bktxt_pp TYPE bktxt,
dmbtr_vv TYPE dmbtr,
dmbtr_dz TYPE dmbtr,
END OF stype_outtab,
ttype_outtab TYPE STANDARD TABLE OF stype_outtab.
DATA:
ls_outtab TYPE stype_outtab,
lt_outtab TYPE ttype_outtab.
DATA:
ls_bills_bkpf TYPE bkpf,
lt_bills_bkpf TYPE STANDARD TABLE OF bkpf,
ls_bills_bsak TYPE bsak,
lt_bills_bsak TYPE STANDARD TABLE OF bsak,
ls_payord TYPE zfi_unific_bill_2_payord1,
lt_payord TYPE STANDARD TABLE OF zfi_unific_bill_2_payord1,
ls_tab TYPE zfi_unific_debzadol_4_payord1,
lt_tab TYPE STANDARD TABLE OF zfi_unific_debzadol_4_payord1.
* Выбор релевантных счетов на оплату
SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_bills_bkpf
FROM bkpf
UP TO callcontrol-maxrecords ROWS
WHERE bukrs IN lr_bukrs
AND belnr IN lr_belnr
AND gjahr IN lr_gjahr
AND blart IN lr_blart
AND bktxt IN lr_bktxt
AND stblg EQ space
AND EXISTS ( SELECT *
FROM bsak
WHERE bukrs EQ bkpf~bukrs
AND belnr EQ bkpf~belnr
AND gjahr EQ bkpf~gjahr ).
CHECK sy-subrc EQ 0.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_bills_bsak
FROM bsak
FOR ALL ENTRIES IN lt_bills_bkpf
WHERE bukrs EQ lt_bills_bkpf-bukrs
AND belnr EQ lt_bills_bkpf-belnr
AND gjahr EQ lt_bills_bkpf-gjahr.
* По найденным Счетам, поиск Платежных поручений
CALL FUNCTION 'ZFI_UNIFIC_BILL_2_PAYORD'
EXPORTING
i_search_payord_in_bsik = space " -->> интересуют только выровненные Платежные поручения
TABLES
it_bills = lt_bills_bkpf
et_payord = lt_payord
EXCEPTIONS
OTHERS = 2.
CHECK sy-subrc EQ 0.
* Находим дебиторскую задолженность
LOOP AT lt_payord INTO ls_payord.
CLEAR ls_tab.
MOVE:
ls_payord-bukrs TO ls_tab-bukrs,
ls_payord-belnr TO ls_tab-belnr,
ls_payord-gjahr TO ls_tab-gjahr.
APPEND ls_tab TO lt_tab.
ENDLOOP.
CALL FUNCTION 'ZFI_UNIFIC_DEBZADOL_4_PAYORD'
TABLES
ct_tab = lt_tab
EXCEPTIONS
OTHERS = 2.
* Формируем таблицу для вывода в SH
LOOP AT lt_bills_bkpf INTO ls_bills_bkpf.
CLEAR ls_outtab.
* поля из счета на оплату
MOVE:
ls_bills_bkpf-bukrs TO ls_outtab-bukrs,
ls_bills_bkpf-gjahr TO ls_outtab-gjahr,
ls_bills_bkpf-belnr TO ls_outtab-belnr,
ls_bills_bkpf-bktxt TO ls_outtab-bktxt.
* текст из платежного поручения
READ TABLE lt_payord INTO ls_payord
WITH KEY bl_bukrs = ls_bills_bkpf-bukrs
bl_belnr = ls_bills_bkpf-belnr
bl_gjahr = ls_bills_bkpf-gjahr.
IF sy-subrc EQ 0.
ls_outtab-bktxt_pp = ls_payord-bktxt.
* дебиторская задолженность
READ TABLE lt_tab INTO ls_tab
WITH KEY bukrs = ls_payord-bukrs
belnr = ls_payord-belnr
gjahr = ls_payord-gjahr.
IF sy-subrc EQ 0.
ls_outtab-dmbtr_dz = ls_tab-dmbtr_dz.
ENDIF.
ENDIF.
LOOP AT lt_bills_bsak INTO ls_bills_bsak
WHERE bukrs EQ ls_bills_bkpf-bukrs
AND belnr EQ ls_bills_bkpf-belnr
AND gjahr EQ ls_bills_bkpf-gjahr.
ADD ls_bills_bsak-dmbtr TO ls_outtab-dmbtr_vv.
ENDLOOP.
CHECK NOT ls_outtab-dmbtr_dz IS INITIAL.
APPEND ls_outtab TO lt_outtab.
ENDLOOP.
*---------------------------
* МАПИНГ
*---------------------------
CALL FUNCTION 'F4UT_RESULTS_MAP'
EXPORTING
apply_restrictions = 'X'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
source_tab = lt_outtab
CHANGING
shlp = shlp
callcontrol = callcontrol
EXCEPTIONS
illegal_structure = 1
OTHERS = 2.
IF record_tab[] IS INITIAL.
callcontrol-step = 'PRESEL'.
ELSE.
callcontrol-step = 'DISP'.
ENDIF.
*=======================================================================
WHEN OTHERS.
*=======================================================================
ENDCASE.
ENDFUNCTION.