Помогите, как сделать нередактируемые строки в АЛВ ГРИД, в динамической таблице? Разумеется по условию. А также оставить редактируемые строки в этой же таблице.
Пример. В строках материалы, в столбцах заводы. И то, и то динамическое. На пересечении - максимальный запас материала на заводе.
Поле материал - нередактируемое. Ячейки с запасом != 0 - нередактируемые.
Чтобы строку сделать нередактируемой Вам нужно все ее поля сделать нередактируемыми - то есть в строке в таблицу STYLE занести MC_STYLE_DISABLED для каждого поля.
Code:
REPORT ztest_dyn_table_alv.
TYPE-POOLS abap.
TYPES:
BEGIN OF ts_alv,
matnr TYPE matnr,
werks TYPE mabst,
style TYPE lvc_t_styl,
END OF ts_alv,
tt_alv TYPE TABLE OF ts_alv.
DATA gs_alv TYPE ts_alv.
DATA gtp_alv TYPE REF TO data.
DATA gt_marc TYPE SORTED TABLE OF marc WITH UNIQUE KEY matnr werks.
DATA gt_werks TYPE TABLE OF werks_d.
DATA gt_fcat TYPE lvc_t_fcat.
DATA gs_fcat TYPE lvc_s_fcat.
DATA gs_style TYPE lvc_s_styl.
DATA go_struct TYPE REF TO cl_abap_structdescr.
DATA go_table TYPE REF TO cl_abap_tabledescr.
DATA gt_components TYPE cl_abap_structdescr=>component_table.
DATA gs_component TYPE abap_componentdescr.
DATA gv_werks TYPE werks_d.
DATA gv_index TYPE i.
DATA gs_layout TYPE lvc_s_layo.
FIELD-SYMBOLS:
<s_alv> TYPE ANY,
<s_marc> TYPE marc,
<v_mabst> TYPE mabst,
<t_alv> TYPE STANDARD TABLE.
SELECT
matnr
werks
mabst
FROM marc
* UP TO 200 ROWS
INTO CORRESPONDING FIELDS OF TABLE gt_marc
.
LOOP AT gt_marc ASSIGNING <s_marc>.
APPEND <s_marc>-werks TO gt_werks.
ENDLOOP.
SORT gt_werks.
DELETE ADJACENT DUPLICATES FROM gt_werks.
LOOP AT gt_werks INTO gv_werks.
CONCATENATE 'WERKS' gv_werks INTO gs_component-name SEPARATED BY '_'.
INSERT gs_component INTO gt_components INDEX gv_index.
ADD 1 TO gv_index.
CREATE DATA gtp_alv TYPE HANDLE go_table.
ASSIGN gtp_alv->* TO <t_alv>.
LOOP AT gt_marc ASSIGNING <s_marc>.
AT NEW matnr.
CLEAR gs_alv.
APPEND INITIAL LINE TO <t_alv> ASSIGNING <s_alv>.
ENDAT.
CONCATENATE 'WERKS' <s_marc>-werks INTO gs_component-name
SEPARATED BY '_'.
ASSIGN COMPONENT gs_component-name OF STRUCTURE <s_alv> TO <v_mabst>.
IF sy-subrc = 0.
<v_mabst> = <s_marc>-mabst.
ENDIF.
IF <s_marc>-mabst IS NOT INITIAL.
gs_style-fieldname = gs_component-name.
gs_style-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT gs_style INTO TABLE gs_alv-style.
ENDIF.
AT END OF matnr.
gs_alv-matnr = <s_marc>-matnr.
gs_style-fieldname = 'MATNR'.
gs_style-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT gs_style INTO TABLE gs_alv-style.
MOVE-CORRESPONDING gs_alv TO <s_alv>.
ENDAT.
Его я переделал, для себя, сейчас он делает нередактируемую строку.
Но у меня проблема не в этом. Конкретно в этом примере делается нередактируемой строка, так что каждый её столбец делается нередактируемый, через их названия (названия столбцов).
У меня же есть динамическая таблица (dyn_table) и структура(dyn_wa), так же есть чекбоксик <fs_otklonenie>. В dyn_table неизвестно количество столбцов, количество строк, название столбцов и содержание самих ячеек. Поэтому мне надо как-то сделать нередактируемую строку, лишь по какому-то условию (я проверяю условие по чекбоксику <fs_otklonenie>), в зависимости от него я окрашиваю (делаю нередактируемой) строку.
Если чем-то поможет, то названия столбцов в дин.таблице заносятся с помощью ссылочного объекта.
Если dyn_table приходит уже динамическая и Вы не знаете ее структуру в момент выполнения:
1. Создайте объект-описатель для таблицы типа CL_ABAP_TABLEDESCR с помощью статического метода этого класса DESCRIBE_BY_DATA, передав ему в качестве параметра как раз свою таблицу
2. Из объекта-описателя таблицы, полученного выше, с помощью его метода GET_TABLE_LINE_TYPE получите объект-описатель для строки таблицы типа CL_ABAP_STRUCTDESCR.
3. C помощью метода GET_COMPONENTS объекта-описателя строки получите таблицу полей в строке. Поле name - имя поля в исходной динамической таблице. Это позволит построить FIeldCatalog и заполнить STYLE
4. Если в исходной таблице нет поля для STYLE (типа LVC_T_STYL), добавьте его к списку полей, полученному через GET_COMPONENTS, создайте новую структуру на основе этих полей, на основе структуры новую таблицу и скопируйте в нее оригинальную, дополнительно добавив в таблицу STYLE каждой строки записи для закрытия полей от редактирования. Если поле STYLE изначально было, то только закрыть поля.
Если dyn_table приходит уже динамическая и Вы не знаете ее структуру в момент выполнения:
1. Создайте объект-описатель для таблицы типа CL_ABAP_TABLEDESCR с помощью статического метода этого класса DESCRIBE_BY_DATA, передав ему в качестве параметра как раз свою таблицу
2. Из объекта-описателя таблицы, полученного выше, с помощью его метода GET_TABLE_LINE_TYPE получите объект-описатель для строки таблицы типа CL_ABAP_STRUCTDESCR.
3. C помощью метода GET_COMPONENTS объекта-описателя строки получите таблицу полей в строке. Поле name - имя поля в исходной динамической таблице. Это позволит построить FIeldCatalog и заполнить STYLE
4. Если в исходной таблице нет поля для STYLE (типа LVC_T_STYL), добавьте его к списку полей, полученному через GET_COMPONENTS, создайте новую структуру на основе этих полей, на основе структуры новую таблицу и скопируйте в нее оригинальную, дополнительно добавив в таблицу STYLE каждой строки записи для закрытия полей от редактирования. Если поле STYLE изначально было, то только закрыть поля.
DATA: otkl_tab TYPE REF TO cl_abap_tabledescr,
otkl_struc TYPE REF TO cl_abap_structdescr,
it_components TYPE abap_component_tab.
it_components TYPE ABAP_COMPDESCR_TAB Вам не нужен. Потому что если Вы собрались строить новую структуру с добавленным полем, то метод cl_ABAP_STRUCTDESCR=>CREATE принимает на вход именно abap_component_tab.
Вместо атрибута otkl_struc->components используйте метод otkl_struc->get_components( )
Last edited by alezhu on Thu Jul 19, 2012 9:08 am; edited 1 time in total
Теперь у меня в таблице it_components есть столбец NAME, а в нём все поля которые нужно покрасить (сделать нередактируемыми) в другой таблице. Так же в этой таблице, в столбце NAME есть поле STYLE, которое нужно для покраски.
Спасибо, за помощь.
Дальше буду пытаться закрасить ячейки, а потом уж и строки.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.