Доброго дня стоит задача ввод данных на уровне ячейки экрнной таблицы, то есть для тех записей которые добовлялись пользователем в интерфейсе экранной таблицы необходимо обеспечит ввод данных в некоторые поля, а для тех записей которые расчитал отчет для экранной таблицы - запретить редактирование
Что быбыло понятнее такое реализовано в заказе на поставку например если открыть на редактирование любой заказ то в обзоре позиций для строки нельзя редактировать поля тип контировки, материа и т.д. но зато можно редактировать поля текст позиции и т.д.
Вот такое же необходимо реализовать. В стандартной обработке так все замудрено((((
Итак имею следующую конструкцию
Code:
PROCESS BEFORE OUTPUT.
*&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'SCREEN_TABLE'
MODULE SCREEN_TABLE_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE SCREEN_TABLE_CHANGE_COL_ATTR.
LOOP AT GT_ORDER_ITAB
INTO GS_ORDER_ITAB
WITH CONTROL SCREEN_TABLE
CURSOR SCREEN_TABLE-CURRENT_LINE.
MODULE SCREEN_TABLE_GET_LINES_C.
* FIELD GS_ORDER_ITAB-SEL
* MODULE SCREEN_TABLE_MARK.
*&SPWIZARD: MODULE SCREEN_TABLE_CHANGE_FIELD_ATTR
ENDLOOP.
PROCESS AFTER INPUT.
*&SPWIZARD: PAI FLOW LOGIC FOR TABLECONTROL 'SCREEN_TABLE'
LOOP AT GT_ORDER_ITAB.
CHAIN.
FIELD GS_ORDER_ITAB-VORNR.
FIELD GS_ORDER_ITAB-UVORN.
FIELD GS_ORDER_ITAB-ARBPL.
FIELD GS_ORDER_ITAB-WERKS.
FIELD GS_ORDER_ITAB-LTXA1.
FIELD GS_ORDER_ITAB-SHORT.
FIELD GS_ORDER_ITAB-PLARB.
FIELD GS_ORDER_ITAB-FCARB.
FIELD GS_ORDER_ITAB-UNARB.
endchain.
FIELD GS_ORDER_ITAB-SEL
MODULE SCREEN_TABLE_MARK ON REQUEST.
ENDLOOP.
MODULE SCREEN_TABLE_USER_COMMAND.
*&SPWIZARD: MODULE SCREEN_TABLE_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE SCREEN_TABLE_CHANGE_COL_ATTR.
MODULE USER_COMMAND_0300.
логику обработки полей реализовал в этом модуле
Code:
*&---------------------------------------------------------------------*
*& Module SCREEN_TABLE_GET_LINES_C OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE SCREEN_TABLE_GET_LINES_C OUTPUT.
loop at SCREEN_TABLE-cols into l_col.
IF l_col-SCREEN-NAME = 'GS_ORDER_ITAB-PLARB'.
IF GS_ORDER_ITAB-INS = 'X'. " ввод разрешен
l_col-SCREEN-OUTPUT = 1.
l_col-SCREEN-REQUIRED = 1.
l_col-SCREEN-ACTIVE = 1.
l_col-SCREEN-INPUT = 1.
ELSE.
l_col-SCREEN-OUTPUT = 1. " ввод запрещен
l_col-SCREEN-ACTIVE = 1.
l_col-SCREEN-REQUIRED = 0.
l_col-SCREEN-INPUT = 0.
ENDIF.
ENDIF.
modify SCREEN_TABLE-cols from l_col.
endloop.
ENDMODULE. " SCREEN_TABLE_GET_LINES_C OUTPUT
собственно само поле ввода GS_ORDER_ITAB-PLARB имеет свойства: поле ввода = Х и поле вывода = Х
но не работает эта конструкция(( что не так? Причем заметил что например свойство ACTIVE отрабатывает как положено)