Возникла необходимость дополнить условия выбора в ЛБД SDF по номеру документа. Стандартных select-options по номеру документа я в ней не нашёл. Попробовал динамические, но выборка не происходит.
Code:
REPORT ZTESTLBD .
TYPE-POOLS: RSDS, RSFS.
DATA: gc_ldb TYPE TRDIR-LDBNAME,
lt_params TYPE STANDARD TABLE OF RSPARAMS,
lt_callbacks TYPE STANDARD TABLE OF LDBCB.
DATA: lt_texpr TYPE RSDS_TEXPR,
lt_fields TYPE RSFS_FIELDS.
TYPES: BEGIN OF st_documents,
number(10) TYPE c,
xreversal(1) TYPE c,
monat(2) TYPE c,
END OF st_documents.
TYPES: tt_documents TYPE STANDARD TABLE OF st_documents WITH KEY number.
DATA: documents TYPE tt_documents,
str_documents TYPE st_documents.
DATA: bal_unit(4) TYPE c,
account(10) TYPE c,
year(4) TYPE c.
*Параметры выборки
bal_unit = '1100'.
account = '91.6054000'.
year = '2008'.
REFRESH: lt_callbacks, lt_params, lt_texpr.
CLEAR : lt_callbacks, lt_params, lt_texpr.
PERFORM build_callback_2 TABLES lt_callbacks.
PERFORM build_params_2 TABLES lt_params
USING bal_unit account year.
PERFORM build_fields TABLES lt_fields.
PERFORM build_dynsel TABLES lt_texpr.
gc_ldb = 'SDF'.
REFRESH: documents. CLEAR documents.
CALL FUNCTION 'LDB_PROCESS'
EXPORTING
LDBNAME = gc_ldb
EXPRESSIONS = lt_texpr
FIELD_SELECTION = lt_fields
TABLES
CALLBACK = lt_callbacks
SELECTIONS = lt_params
EXCEPTIONS
LDB_SELECTIONS_NOT_ACCEPTED = 4
OTHERS = 1.
LOOP AT documents INTO str_documents.
WRITE: / str_documents-number, str_documents-xreversal, str_documents-monat.
ENDLOOP.
FORM build_params_2 TABLES pt_params STRUCTURE RSPARAMS
USING bal_unit LIKE bal_unit
account LIKE account
year LIKE year.
pt_params-selname = 'SD_BUKRS'.
pt_params-sign = 'I'.
pt_params-option = 'EQ'.
pt_params-low = bal_unit.
APPEND pt_params.
pt_params-selname = 'SD_SAKNR'.
pt_params-sign = 'I'.
pt_params-option = 'EQ'.
pt_params-low = account.
APPEND pt_params.
pt_params-selname = 'SD_GJAHR'.
pt_params-sign = 'I'.
pt_params-option = 'EQ'.
pt_params-low = year.
APPEND pt_params.
ENDFORM.
FORM build_callback_2 TABLES pt_callbacks STRUCTURE LDBCB.
pt_callbacks-ldbnode = 'BKPF'.
pt_callbacks-get = 'X'.
pt_callbacks-get_late = ' '.
pt_callbacks-cb_prog = SY-REPID.
pt_callbacks-cb_form = 'LDB_CALLBACK_2'.
APPEND pt_callbacks.
ENDFORM.
FORM LDB_CALLBACK_2 USING pd_node LIKE LDBN-LDBNODE
pd_workarea TYPE BKPF
pd_mode TYPE C
pd_selected TYPE C.
CASE pd_node.
WHEN 'BKPF'.
str_documents-number = PD_WORKAREA-BELNR.
str_documents-xreversal = PD_WORKAREA-XREVERSAL.
str_documents-monat = PD_WORKAREA-MONAT.
APPEND str_documents TO documents.
ENDCASE.
pd_selected = 'X'.
ENDFORM.
FORM build_dynsel TABLES dyn_sel TYPE RSDS_TEXPR.
DATA: str_dyn_sel TYPE RSDS_EXPR.
DATA: tab_name(30) TYPE C.
DATA: dyn_sel_opt TYPE RSDS_EXPR_TAB,
str_dyn_sel_opt TYPE RSDSEXPR.
tab_name = 'BSEG'.
str_dyn_sel_opt-logop = 'OR'.
str_dyn_sel_opt-arity = '2'.
str_dyn_sel_opt-fieldname = 'BELNR'.
str_dyn_sel_opt-option = 'EQ'.
str_dyn_sel_opt-low = '4080057123'.
* str_dyn_sel_opt-high = '4080057123'.
APPEND str_dyn_sel_opt TO dyn_sel_opt.
str_dyn_sel_opt-logop = 'OR'.
str_dyn_sel_opt-arity = '2'.
str_dyn_sel_opt-fieldname = 'BELNR'.
str_dyn_sel_opt-option = 'EQ'.
str_dyn_sel_opt-low = '4080057128'.
* str_dyn_sel_opt-high = '4080057128'.
APPEND str_dyn_sel_opt TO dyn_sel_opt.
str_dyn_sel-tablename = tab_name.
str_dyn_sel-expr_tab = dyn_sel_opt.
APPEND str_dyn_sel TO dyn_sel.
ENDFORM.
FORM build_fields TABLES dyn_fields TYPE RSFS_FIELDS.
DATA: str_dyn_fields TYPE RSFS_TAB_FIELDS.
DATA: tab_name(30) TYPE C.
DATA: fields LIKE RSFS_STRUC OCCURS 10,
str_fields TYPE RSFS_STRUC.
tab_name = 'BSEG'.
str_fields-line = 'BELNR'.
APPEND str_fields TO fields.
str_dyn_fields-tablename = tab_name.
str_dyn_fields-fields = fields.
APPEND str_dyn_fields TO dyn_fields.
ENDFORM.
Без параметра EXPRESSIONS программа выбирает некоторые документы. Я попытался занести два документа из этой выборки в динамические условия выбора, но ничего не получилось.
Если кто-нибудь знает в чём дело, напишите, пожалуйста.