Добрый день, у меня такой вопрос к знающим людя:
Создал динамически внутреннюю таблицу:
Code:
FORM f_create_dyn_table .
PERFORM f_dyn_list USING 'LEDNR'.
PERFORM f_dyn_list USING 'OBJNR'.
PERFORM f_dyn_list USING 'GJAHR'.
PERFORM f_dyn_list USING 'KSTAR'.
PERFORM f_dyn_list USING 'WRTTP'.
PERFORM f_dyn_list USING 'HRKFT'.
PERFORM f_dyn_list USING 'VRGNG'.
PERFORM f_dyn_list USING 'PARGB'.
PERFORM f_dyn_list USING 'PAROB'.
PERFORM f_dyn_list USING 'USPOB'.
PERFORM f_dyn_list USING 'BEKNZ'.
PERFORM f_dyn_list USING 'TWAER'.
PERFORM f_dyn_list USING 'PERBL'.
PERFORM f_dyn_list USING 'MEINH'.
PERFORM f_increment USING p_periv p_perib.
WHILE p_n LE p_k.
CLEAR: fieldname.
CASE p_curtp.
WHEN '10'.
CONCATENATE 'WOG' p_n INTO fieldname.
PERFORM f_dyn_list USING fieldname.
WHEN '30'.
CONCATENATE 'WKG' p_n INTO fieldname.
PERFORM f_dyn_list USING fieldname.
ENDCASE.
ADD 1 TO p_n.
ENDWHILE.
PERFORM f_increment USING p_periv p_perib.
WHILE p_n LE p_k.
CLEAR: fieldname.
CONCATENATE 'MEG' p_n INTO fieldname.
PERFORM f_dyn_list USING fieldname.
ADD 1 TO p_n.
ENDWHILE.
ASSIGN it_data TO <fs_data>.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_dyn
IMPORTING
ep_table = <fs_data>
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
ASSIGN <fs_data>->* TO <dyn_table>.
* Create dynamic work area and assign to FS
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
ENDFORM. " f_create_dyn_table
Создал динамичски список полей:
Code:
FORM f_build_field_list USING value(tabname) TYPE any.
REFRESH field_list.
CLEAR field_list.
PERFORM f_list USING 'LEDNR'."FROM COSS and COSP
PERFORM f_list USING 'OBJNR'."FROM COSS and COSP
PERFORM f_list USING 'GJAHR'."FROM COSS and COSP
PERFORM f_list USING 'KSTAR'."FROM COSS and COSP
PERFORM f_list USING 'WRTTP'."FROM COSS and COSP
PERFORM f_list USING 'HRKFT'."FROM COSS and COSP
PERFORM f_list USING 'VRGNG'."FROM COSS and COSP
IF tabname = 'COSP'.
PERFORM f_list USING 'PARGB'."FROM COSS
ENDIF.
IF tabname = 'COSS'.
PERFORM f_list USING 'PAROB'."FROM COSP
PERFORM f_list USING 'USPOB'."FROM COSP
ENDIF.
PERFORM f_list USING 'BEKNZ'."FROM COSS and COSP
PERFORM f_list USING 'TWAER'."FROM COSS and COSP
PERFORM f_list USING 'PERBL'."FROM COSS and COSP
PERFORM f_list USING 'MEINH'."FROM COSS and COSP
PERFORM f_increment USING p_periv p_perib.
WHILE p_n LE p_k.
CLEAR: fieldname.
CASE p_curtp.
WHEN '10'.
CONCATENATE 'WOG' p_n INTO fieldname.
PERFORM f_list USING fieldname.
WHEN '30'.
CONCATENATE 'WKG' p_n INTO fieldname.
PERFORM f_list USING fieldname.
ENDCASE.
ADD 1 TO p_n.
ENDWHILE.
PERFORM f_increment USING p_periv p_perib.
WHILE p_n LE p_k.
CLEAR: fieldname.
CONCATENATE 'MEG' p_n INTO fieldname.
PERFORM f_list USING fieldname.
ADD 1 TO p_n.
ENDWHILE.
ENDFORM. " f_build_field_list
При выполнении запроса, программа валится в дамп:
Code:
FORM f_get_data .
*........build field list from COSP....................................*
PERFORM f_build_field_list USING 'COSP'.
SELECT (field_list)
APPENDING CORRESPONDING FIELDS OF TABLE <dyn_table> FROM cosp
FOR ALL ENTRIES IN it_obj
WHERE objnr = it_obj-objnr
AND lednr = '00'
AND gjahr = p_gjahr
AND wrttp IN ('01', '04')
AND versn = p_versn
AND perbl = '016'.
*........build field list from COSP....................................*
PERFORM f_build_field_list USING 'COSS'.
SELECT (field_list)
APPENDING CORRESPONDING FIELDS OF TABLE <dyn_table>
FROM coss
FOR ALL ENTRIES IN it_obj
WHERE objnr = it_obj-objnr
AND lednr = '00'
AND gjahr = p_gjahr
AND wrttp IN ('01', '04')
AND versn = p_versn
AND perbl = '016'.
ENDFORM. " f_get_data
Пишет ошибку:DBIF_RSQL_INVALID_RSQL
Сразу хочу сказать в field_list находятся только те поля, которые содержатся в БД.