SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Динамические экраны



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
klkuznetsov
Специалист
Специалист


Age: 47
Joined: 06 Aug 2010
Posts: 79
Location: Ukraine

PostPosted: Thu May 05, 2011 5:45 pm    Post subject: Динамические экраны Reply with quote

Всем доброго времени суток!
Вообщем задача такова, есть таблица в которой нужно отредактировать только определенные поля, потому хочу на основе разрешенных для редактирования полей сформировать экранчик для их редактирования динамически. Задача в принципе решена но по самому простому пути, я нарисовал экранчик в которые поместил все поля этой таблицы, и те которые редактировать нельзя программно запретил редактирование, но это не наш метод т.к. в таблице могут добавиться еще поля и прийдется менять программу.
Может кто ткнет меня носом в решение даннной проблемы ибо самостоятельные поиски результата не дали Sad

З.Ы. Да версия ядра 6.40.
З.Ы.Ы. Заранее спасибо.
Back to top
View user's profile Send private message
YuriT
Участник
Участник



Joined: 03 Nov 2008
Posts: 35

PostPosted: Thu May 05, 2011 6:40 pm    Post subject: Reply with quote

Думаю с такой динамичностью вам поможет только редактируемый ALV Grid.
Back to top
View user's profile Send private message
demst
Участник
Участник



Joined: 17 Jul 2008
Posts: 18

PostPosted: Fri May 06, 2011 10:09 am    Post subject: Reply with quote

Как вариант писать динамически код программы, в котором формировать экран выбора с полями из таблицы и вашими условиями обработки, и потом запускать его при редактировании.
как то так.
Back to top
View user's profile Send private message
John Doe
Модератор
Модератор


Age: 46
Joined: 05 Nov 2007
Posts: 725
Location: КраснАдар

PostPosted: Fri May 06, 2011 10:36 am    Post subject: Reply with quote

Моя природная лень любит делать динамические экраны так
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.

      " Выходим из цикла
      " Цикл реализован для того чтобы была возможность
      " осуществлять проверки введенных значений и не уходить
      " с экрана изменения информации пока не исправят
      " некорректный ввод

      retcode = 'X'.
      EXIT.

    ENDIF.
  ENDWHILE.

_________________
FunCoding.ru
KicksCollector.ru
Back to top
View user's profile Send private message Blog
demst
Участник
Участник



Joined: 17 Jul 2008
Posts: 18

PostPosted: Fri May 06, 2011 10:38 am    Post subject: Reply with quote

John Doe wrote:
Моя природная лень любит делать динамические экраны так
Code:
    CALL FUNCTION 'POPUP_GET_VALUES'

Прикольный ФМчик.
Не знал )
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
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.