Age: 48 Joined: 06 Aug 2010 Posts: 79 Location: Ukraine
Posted: Thu May 05, 2011 5:45 pm Post subject: Динамические экраны
Всем доброго времени суток!
Вообщем задача такова, есть таблица в которой нужно отредактировать только определенные поля, потому хочу на основе разрешенных для редактирования полей сформировать экранчик для их редактирования динамически. Задача в принципе решена но по самому простому пути, я нарисовал экранчик в которые поместил все поля этой таблицы, и те которые редактировать нельзя программно запретил редактирование, но это не наш метод т.к. в таблице могут добавиться еще поля и прийдется менять программу.
Может кто ткнет меня носом в решение даннной проблемы ибо самостоятельные поиски результата не дали
Как вариант писать динамически код программы, в котором формировать экран выбора с полями из таблицы и вашими условиями обработки, и потом запускать его при редактировании.
как то так.
Age: 46 Joined: 05 Nov 2007 Posts: 725 Location: КраснАдар
Posted: Fri May 06, 2011 10:36 am Post subject:
Моя природная лень любит делать динамические экраны так
Code:
TYPE-POOLS: abap.
DATA: pvalue TYPE TABLE OF sval WITH HEADER LINE,
retcode TYPE string,
struc TYPE spfli,
*struc TYPE spfli.
DATA: l_oref_structure TYPE REF TO cl_abap_structdescr,
l_wa TYPE abap_compdescr.
FIELD-SYMBOLS: <field>.
PARAMETERS: carrid LIKE spfli-carrid,
connid LIKE spfli-connid.
START-OF-SELECTION.
" Выбираем данные из базы
SELECT SINGLE * FROM spfli INTO struc
WHERE carrid = carrid AND connid = connid.
IF sy-subrc <> 0.
MESSAGE 'Не нашли...' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
" Сохраняем на память исходную запись
*struc = struc.
" Получаем данные по структуре
l_oref_structure ?= cl_abap_typedescr=>describe_by_data(
struc ).
" Заполняем данные для экрана
LOOP AT l_oref_structure->components INTO l_wa.
CLEAR pvalue.
pvalue-tabname = 'SPFLI'.
pvalue-fieldname = l_wa-name.
ASSIGN COMPONENT pvalue-fieldname OF STRUCTURE struc
TO <field>.
IF <field> IS ASSIGNED.
MOVE <field> TO pvalue-value.
IF l_wa-type_kind = 'I'.
CONDENSE pvalue-value.
ENDIF.
UNASSIGN <field>.
ENDIF.
APPEND pvalue.
ENDLOOP.
" Собственно вызов и обработка самого экрана
WHILE retcode IS INITIAL.
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
popup_title = 'Редактирование записи'
IMPORTING
returncode = retcode
TABLES
fields = pvalue
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.
IF sy-subrc <> 0.
retcode = 'X'.
EXIT.
ENDIF.
IF retcode EQ 'A'.
MESSAGE s701(bc) WITH 'Отменено пользователем'.
LEAVE PROGRAM.
ELSE.
LOOP AT pvalue.
ASSIGN COMPONENT pvalue-fieldname OF STRUCTURE struc
TO <field>.
IF <field> IS ASSIGNED.
<field> = pvalue-value.
UNASSIGN <field>.
ENDIF.
ENDLOOP.
IF *struc <> struc.
MESSAGE 'Запись изменена' TYPE 'I'.
" Здесь апдейтим базу
ELSE.
MESSAGE 'Ничего не поменяли' TYPE 'I'.
ENDIF.
" Выходим из цикла
" Цикл реализован для того чтобы была возможность
" осуществлять проверки введенных значений и не уходить
" с экрана изменения информации пока не исправят
" некорректный ввод
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.