Текущее время: Пн, авг 04 2025, 16:34

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Проблема с обновлением внутренней таблицы отображенной на ALV
СообщениеДобавлено: Вт, июн 10 2008, 17:40 
Начинающий
Начинающий

Зарегистрирован:
Чт, май 29 2008, 07:32
Сообщения: 9
Здравствуйте! Вн. таблица открывается в ALV
(который REUSE_ALV_GRID_DISPLAY). В ALV должны быть редактируемы только не ключевые поля (поэтому использую fieldcat-edit='X'). Писать вот так: LS_LAYOUT-edit = 'X', нельзя поскольку тогда все поля редактируемы.
Так вот при редактировании, на экране ALV показывает измененные данные, а во внутренней таблице данные не изменяются.

Не подскажете что необходимо сделать чтобы данные во внутренней таблице обновлялись,

P.S.: хотя бы при нажатии на Enter. [/code]


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июн 10 2008, 18:10 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, июн 25 2007, 17:37
Сообщения: 350
Пол: Мужской
FORM BUILD_FIELDCAT TABLES fcat.
DATA: wa TYPE lvc_s_fcat.

CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'ZSD_T012K_BANK'
CHANGING
ct_fieldcat = fcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

LOOP AT fcat INTO wa.
"Скрываем лишние поля
search 'CPUDT/CPUTM/USNAME/ISDEL' for wa-fieldname.
if sy-subrc eq 0.
wa-no_out = 'X'.
MODIFY fcat FROM wa.
endif.

CASE wa-fieldname. " Укорачиваем видимую длину наименования
WHEN 'BUKRS'.
wa-coltext = 'БЕ'.
wa-style = cl_gui_alv_grid=>mc_style_enabled. " Запрет на редактирование
MODIFY fcat FROM wa.
WHEN 'BANKL'.
wa-coltext = 'Ключ Банка'.
wa-style = cl_gui_alv_grid=>mc_style_enabled. " Запрет на редактирование
wa-outputlen = 10.
MODIFY fcat FROM wa.
WHEN 'HBKID'.
wa-coltext = 'Собст.Банк'.
wa-outputlen = 9.
wa-style = cl_gui_alv_grid=>mc_style_enabled. " Запрет на редактирование
MODIFY fcat FROM wa.
WHEN 'ZHKTID'.
wa-coltext = 'Ид. счёта'.
wa-outputlen = 9.
MODIFY fcat FROM wa.
WHEN 'SPRAS'.
wa-coltext = 'Язык'.
wa-outputlen = 5.
MODIFY fcat FROM wa.
WHEN 'NAME1'.
wa-coltext = 'Название банка'.
wa-lowercase = 'X'.
wa-outputlen = 40.
MODIFY fcat FROM wa.
WHEN 'POST_CODE'.
wa-coltext = 'Индекс'.
wa-outputlen = 9.
MODIFY fcat FROM wa.
WHEN 'POSTALAREA'.
wa-coltext = 'Район'.
wa-outputlen = 15.
MODIFY fcat FROM wa.
WHEN 'CITY'.
wa-coltext = 'Город'.
wa-outputlen = 30.
MODIFY fcat FROM wa.
WHEN 'STREET'.
wa-coltext = 'Улица'.
wa-outputlen = 50.
MODIFY fcat FROM wa.
"##################################################
WHEN 'CPUDT'.
wa-coltext = 'Дата'.
wa-style = cl_gui_alv_grid=>mc_style_enabled. " Запрет на редактирование
MODIFY fcat FROM wa.
WHEN 'CPUTM'.
wa-coltext = 'Время'.
wa-style = cl_gui_alv_grid=>mc_style_enabled. " Запрет на редактирование
MODIFY fcat FROM wa.
WHEN 'USNAME'.
wa-coltext = 'Пользователь'.
wa-style = cl_gui_alv_grid=>mc_style_enabled. " Запрет на редактирование
MODIFY fcat FROM wa.
WHEN 'ISDEL'.
wa-style = cl_gui_alv_grid=>mc_style_enabled. " Запрет на редактирование
MODIFY fcat FROM wa.
ENDCASE.
ENDLOOP.
gs_layout-edit = 'X'.
gs_layout-no_toolbar = ''.
ENDFORM.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июн 10 2008, 18:10 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, июн 25 2007, 17:37
Сообщения: 350
Пол: Мужской
CALL METHOD grid->refresh_table_display. " обновление


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 11 2008, 07:22 
Начинающий
Начинающий

Зарегистрирован:
Чт, май 29 2008, 07:32
Сообщения: 9
Спасибо за ответ, но у меня ведь используется Call Function 'REUSE_ALV_GRID_DISPLAY' и соответственно CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE', а там такое походу не провернуть. Вот если бы laout насраивался на каждое поле отдельно, было бы замечательно (но это похожа на сказку).

Все что я хочу, это чтобы отображалась редактируемая таблица (т.е. прямо в гриде), и отловить событие изменения записи.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с обновлением внутренней таблицы отображенной на ALV
СообщениеДобавлено: Ср, июн 11 2008, 07:44 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
JuvickAul написал(а):
Здравствуйте! Вн. таблица открывается в ALV
(который REUSE_ALV_GRID_DISPLAY). В ALV должны быть редактируемы только не ключевые поля (поэтому использую fieldcat-edit='X'). Писать вот так: LS_LAYOUT-edit = 'X', нельзя поскольку тогда все поля редактируемы.
Так вот при редактировании, на экране ALV показывает измененные данные, а во внутренней таблице данные не изменяются.

Не подскажете что необходимо сделать чтобы данные во внутренней таблице обновлялись,

P.S.: хотя бы при нажатии на Enter. [/code]
data_changed_finished в ФМ reuse_alv_grid_display
Эмуляция нажатия клавиши (ф.кода) в REUSE_ALV_GRID_DISPLAY

_________________
"I have a dream"(c)Martin Luther King, Jr.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 11 2008, 08:17 
Гость
Я думаю этот текст ответит на все Ваши вопросы :)

Code:
*&---------------------------------------------------------------------*
*& Report  ZTEST_ALV                                                   *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  ZTEST_ALV                               .

TYPE-POOLS: SLIS.
DATA: LT_T001 LIKE T001 OCCURS 0,
      L_REPID LIKE SY-REPID,
      LT_CT TYPE SLIS_T_FIELDCAT_ALV,
      L_CT LIKE LINE OF LT_CT,
      LT_EVENTS TYPE SLIS_T_EVENT,
      LS_EVENT TYPE SLIS_ALV_EVENT.


START-OF-SELECTION.
  CLEAR: LT_T001, LT_T001[].
  L_REPID = SY-REPID.
  SELECT * FROM T001 APPENDING TABLE LT_T001.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      I_STRUCTURE_NAME       = 'T001'
    CHANGING
      CT_FIELDCAT            = LT_CT[]
    EXCEPTIONS
      INCONSISTENT_INTERFACE = 1
      PROGRAM_ERROR          = 2
      OTHERS                 = 3.

  LOOP AT LT_CT INTO L_CT WHERE KEY = SPACE.
    L_CT-EDIT = 'X'.
    MODIFY LT_CT FROM L_CT.
  ENDLOOP.

  CLEAR: LT_EVENTS. REFRESH LT_EVENTS.
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      I_LIST_TYPE = 1
    IMPORTING
      ET_EVENTS   = LT_EVENTS.

  DELETE  LT_EVENTS WHERE NAME = 'DATA_CHANGED'.
  MOVE 'DATA_CHANGED' TO LS_EVENT-NAME.
  MOVE 'EDITDATA' TO LS_EVENT-FORM.
  APPEND LS_EVENT TO LT_EVENTS.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM      = L_REPID
      I_CALLBACK_USER_COMMAND = 'USCOM'
      I_CALLBACK_TOP_OF_PAGE  = 'TOP'
      IT_FIELDCAT             = LT_CT[]
      I_SAVE                  = 'A'
      IT_EVENTS               = LT_EVENTS[]
    TABLES
      T_OUTTAB                = LT_T001[].

*&---------------------------------------------------------------------*
*&      Form  editdata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RR_DATA_CHANGED  text
*----------------------------------------------------------------------*
FORM EDITDATA USING RR_DATA_CHANGED TYPE REF TO
                                        CL_ALV_CHANGED_DATA_PROTOCOL.
  DATA: L_GRID TYPE REF TO CL_GUI_ALV_GRID,
        L_STABLE TYPE LVC_S_STBL.
  L_STABLE-COL = 'X'.
  L_STABLE-ROW = 'X'.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = L_GRID.
  CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY
    EXPORTING
      IS_STABLE = L_STABLE.
ENDFORM.                    "EDITDATA

*&---------------------------------------------------------------------*
*&      Form  uscom
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM USCOM USING R_UCOMM     LIKE SY-UCOMM
                        RS_SELFIELD TYPE SLIS_SELFIELD.
  DATA: L_GRID TYPE REF TO CL_GUI_ALV_GRID.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = L_GRID.
* Приводим в соответствие экранные данные со внутренней табличкой
  CALL METHOD L_GRID->CHECK_CHANGED_DATA.
*
* Обработка пользовательских команд
*
ENDFORM.                    "uscom

*&---------------------------------------------------------------------*
*&      Form  top
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM TOP.
  DATA: L_GRID TYPE REF TO CL_GUI_ALV_GRID.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = L_GRID.
  CALL METHOD L_GRID->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.

* Зарегистрировали событие Enter
ENDFORM.                    "top


Принять этот ответ
Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB