Текущее время: Пт, июл 18 2025, 02:04

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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