Кусок кода программы, выводящий пару ALV отчетов в один список:
Code:
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
I_CALLBACK_PROGRAM = REPID
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_CALLBACK_PF_STATUS_SET = PFSTATUS.
* первая часть
* X_LAYOUT-BOX_FIELDNAME = 'PERNR'.
* X_LAYOUT-BOX_TABNAME = 'T_MAIN'.
* X_LAYOUT-LIGHTS_FIELDNAME = 'AMPEL'.
* X_LAYOUT-INFO_FIELDNAME = 'LISTINFO'.
*
clear X_LAYOUT.
X_LAYOUT-zebra = 'X'.
X_LAYOUT-colwidth_optimize = 'X'.
X_LAYOUT-totals_only = 'X'.
X_LAYOUT-totals_text = 'ИТОГО'.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IT_FIELDCAT = TABLE1[]
IS_LAYOUT = X_LAYOUT
I_TABNAME = 'T_MAIN'
IT_EVENTS = GT_XEVENTS[]
I_TEXT = TEXT-0B1
TABLES
T_OUTTAB = T_MAIN[].
* вторая часть
describe table t_0076 lines s_count.
if s_count > 0.
clear Y_LAYOUT.
Y_LAYOUT-zebra = 'X'.
Y_LAYOUT-colwidth_optimize = 'X'.
Y_LAYOUT-totals_only = 'X'.
Y_LAYOUT-totals_text = 'ИТОГО'.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IT_FIELDCAT = TABLE2[]
IS_LAYOUT = Y_LAYOUT
I_TABNAME = 'T_0076'
IT_EVENTS = GT_YEVENTS[]
I_TEXT = TEXT-0B2
TABLES
T_OUTTAB = T_0076[].
endif.
* вывод
GT_PRINT-RESERVE_LINES = 2.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
EXPORTING
IS_PRINT = GT_PRINT.
ENDFORM. " PrintALV
если указать у некоторых полей выводимой таблице, что они редактируемы вот таким участком кода:
Code:
*&---------------------------------------------------------------------*
*& Form REFRESH_ALV
*&---------------------------------------------------------------------*
FORM REFRESH_ALV CHANGING RS_SELFIELD TYPE SLIS_SELFIELD.
CALL FUNCTION 'REUSE_ALV_LIST_LAYOUT_INFO_SET'
EXPORTING
IS_LAYOUT = X_LAYOUT
IT_FIELDCAT = TABLE1[]
IT_SORT = GT_SORT1[]
* it_filter = g_filter_tab[]
* is_list_scroll = g_scroll
EXCEPTIONS
OTHERS = 1.
CALL FUNCTION 'REUSE_ALV_LIST_LAYOUT_INFO_SET'
EXPORTING
IS_LAYOUT = Y_LAYOUT
IT_FIELDCAT = TABLE2[]
IT_SORT = GT_SORT2[]
* it_filter = g_filter_tab[]
* is_list_scroll = g_scroll
EXCEPTIONS
OTHERS = 1.
RS_SELFIELD-REFRESH = 'X'.
RS_SELFIELD-COL_STABLE = 'X'.
RS_SELFIELD-ROW_STABLE = 'X'.
ENDFORM. " REFRESH_ALV
то происходит искажение полей, которые переданы как редактируемые.
Причем при первом выводе на экран все показывается правильно. Это потом, выполняя двойной клик на строке или печать документа, получаем искажение. В отладке (/h) я не могу попасть в код, который отрабатывает по двойному клику, а сразу проваливаюсь в свой обработчик "REFRESH_ALV".
Никто не сталкивался?