Текущее время: Чт, июн 26 2025, 17:21

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Chekbox в ALV
СообщениеДобавлено: Пт, сен 09 2005, 14:53 
Гость
Люди, выручайте!
Снова занялся АВАР-ом после 3-х летнего перерыва. ALV-технологию знаю плохо. Проблема вот в чём: использую функцию REUSE_ALV_GRID_DISPLAY. В гриде есть редактируемый чекбокс. Когда меняю програмно это поле(например при Select All), то на экране изменения отображаются. Когда взвожу чекбокс на экране, то соответствующее поле внутренней таблицы не изменяется...:о(
Дайте, пожалуйста, совет!!!


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 09 2005, 15:02 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 08:55
Сообщения: 331
Откуда: Украина, г.Мариуполь
Пол: Мужской
Каким образом известно, что внутр. табл. не меняется? У нас была такая проблема, когда нажимали кнопку (правда, это был не функциональный алв-грид, а на юзер-экране) в pf-статусе программы. Когда нажимали кнопку в pf-статусе грида, все отображалось. Лечили так: по нажатию на соотв. кнопку обновляли программно грид, и тогда все изменения видимые переносились во внутр. табл.

З.Ы. Кстати, по незнанию алв кнопку Select All добавлял сам к стандартному статусу и обрабатывал программно... :oops:


Последний раз редактировалось RoadRunner Пт, сен 09 2005, 15:06, всего редактировалось 1 раз.

Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 09 2005, 15:04 
Гость
используй CHECK_CHANGED_DATA


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 09 2005, 15:07 
Гость
и зарегистрируй событие DATA_CHANGED


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:   Тема решена
СообщениеДобавлено: Пт, сен 09 2005, 15:31 
Гость
а что есть CHECK_CHANGED_DATA???

событие зарегистрировал так:
LR_EVENT-NAME = SLIS_EV_DATA_CHANGED.
LR_EVENT-FORM = 'DATA_CHANGED'.
APPEND LR_EVENT TO LT_EVENTS.

но при изменении чекбоксов ничё не генерится... то есть FORM DATA_CHANGED не вызывается...

а можно примерчик привести???


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 09 2005, 16:43 
Гость
Code:
REPORT  ZTEST_ALV                                 .


TYPE-POOLS: SLIS.

DATA: PRN LIKE SY-REPID.
DATA: LT_EVENTS TYPE SLIS_T_EVENT,
      LS_EVENT TYPE SLIS_ALV_EVENT.
DATA: LS_LAYOUT TYPE SLIS_LAYOUT_ALV,
      LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
      LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
DATA: BEGIN OF ZAP OCCURS 0,
        CH,
        ENAME(20),
      END OF ZAP.
DATA: L_GRID     TYPE REF TO CL_GUI_ALV_GRID.
DATA: G_EXIT,
      GS_EXIT TYPE SLIS_EXIT_BY_USER.

START-OF-SELECTION.

  CLEAR: ZAP. REFRESH: ZAP.

  ZAP-ENAME = 'Иванов'. APPEND ZAP.
  ZAP-ENAME = 'Петров'. APPEND ZAP.
  ZAP-ENAME = 'Сидоров'. APPEND ZAP.

  PRN = SY-REPID.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'ZAP'.
  LS_FIELDCAT-FIELDNAME = 'CH'.
  LS_FIELDCAT-CHECKBOX = 'X'.
  LS_FIELDCAT-EDIT = 'X'.
  LS_FIELDCAT-OUTPUTLEN = 3.
  APPEND LS_FIELDCAT TO LT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'ZAP'.
  LS_FIELDCAT-FIELDNAME = 'ENAME'.
  LS_FIELDCAT-OUTPUTLEN = 10."длина вывода
  LS_FIELDCAT-SELTEXT_L = 'Фамилия'.
  APPEND LS_FIELDCAT TO LT_FIELDCAT.


  PRN = SY-REPID.


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

  CLEAR LS_EVENT.
  LS_EVENT-NAME = 'DATA_CHANGED'.
  APPEND LS_EVENT TO LT_EVENTS.
  CLEAR LS_EVENT.
  READ TABLE LT_EVENTS WITH KEY NAME = 'DATA_CHANGED'
       INTO LS_EVENT.
  IF SY-SUBRC = 0.
    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.
  ENDIF.




  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM = PRN
      IS_LAYOUT          = LS_LAYOUT
      I_SAVE             = 'A'
      IT_EVENTS          = LT_EVENTS[]
      IT_FIELDCAT        = LT_FIELDCAT[]
    TABLES
      T_OUTTAB           = ZAP.


*&---------------------------------------------------------------------*
*&      Form  EDITDATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RR_DATA_CHANGED  text
*----------------------------------------------------------------------*
FORM EDITDATA USING RR_DATA_CHANGED TYPE REF TO
                                          CL_ALV_CHANGED_DATA_PROTOCOL.

  SKIP.
ENDFORM.                    "EDITDATA


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 09 2005, 16:45 
Гость
поставь точку прерывания на SKIP
и увидешь, что туда прога попадает после любого
изменения в данных при нажатии почти на любую кнопку.

При это подпрограмму необязательно чем-то заполнять,
ее вызов уже меняет табличку


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 09 2005, 17:16 
Гость
Спасибо!!!!
Получилось. Правда, только если использую стандартный UCOMM. Если в PF-STATUS вставляю свою функцию, то фича не работает. Но это победимо! :)


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 09 2005, 17:22 
Гость
если не получится со своей - пиши :) пример черкану


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 09 2005, 17:35 
Гость
Не получилось... :( Привязал обработчик к стандартной, которая мне в оригинале не нужна...
Если не трудно, то был бы благодарен за примерчик!


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 12 2005, 10:22 
Гость
Code:
REPORT  ZTEST_ALV                                 .


TYPE-POOLS: SLIS.

DATA: PRN LIKE SY-REPID.
DATA: LT_EVENTS TYPE SLIS_T_EVENT,
      LS_EVENT TYPE SLIS_ALV_EVENT.
DATA: LS_LAYOUT TYPE SLIS_LAYOUT_ALV,
      LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
      LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
DATA: BEGIN OF ZAP OCCURS 0,
        CH,
        ENAME(20),
      END OF ZAP.
DATA: L_GRID     TYPE REF TO CL_GUI_ALV_GRID.
DATA: G_EXIT,
      GS_EXIT TYPE SLIS_EXIT_BY_USER.

START-OF-SELECTION.

  CLEAR: ZAP. REFRESH: ZAP.

  ZAP-ENAME = 'Иванов'. APPEND ZAP.
  ZAP-ENAME = 'Петров'. APPEND ZAP.
  ZAP-ENAME = 'Сидоров'. APPEND ZAP.

  PRN = SY-REPID.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'ZAP'.
  LS_FIELDCAT-FIELDNAME = 'CH'.
  LS_FIELDCAT-CHECKBOX = 'X'.
  LS_FIELDCAT-EDIT = 'X'.
  LS_FIELDCAT-OUTPUTLEN = 3.
  APPEND LS_FIELDCAT TO LT_FIELDCAT.

  CLEAR LS_FIELDCAT.
  LS_FIELDCAT-TABNAME = 'ZAP'.
  LS_FIELDCAT-FIELDNAME = 'ENAME'.
  LS_FIELDCAT-OUTPUTLEN = 10."длина вывода
  LS_FIELDCAT-SELTEXT_L = 'Фамилия'.
  APPEND LS_FIELDCAT TO LT_FIELDCAT.


  PRN = SY-REPID.


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

  CLEAR LS_EVENT.
  LS_EVENT-NAME = 'DATA_CHANGED'.
  APPEND LS_EVENT TO LT_EVENTS.
  CLEAR LS_EVENT.
  READ TABLE LT_EVENTS WITH KEY NAME = 'DATA_CHANGED'
       INTO LS_EVENT.
  IF SY-SUBRC = 0.
    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.
  ENDIF.




  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM      = PRN
      IS_LAYOUT               = LS_LAYOUT
      I_SAVE                  = 'A'
      IT_EVENTS               = LT_EVENTS[]
      IT_FIELDCAT             = LT_FIELDCAT[]
      I_CALLBACK_USER_COMMAND = 'USCOM'
    TABLES
      T_OUTTAB                = ZAP.


FORM EDITDATA USING RR_DATA_CHANGED TYPE REF TO
                                          CL_ALV_CHANGED_DATA_PROTOCOL.

  SKIP.
ENDFORM.                    "EDITDATA

FORM USCOM USING R_UCOMM TYPE SY-UCOMM LS 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.

  LS-REFRESH = 'X'.
ENDFORM.                    "USCOM


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 12 2005, 11:02 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
один минус при таком подходе - если записей в таблице много, да плюс сервер находится хрен его знает где (да еще линии связи далеки от совершенства) - то процедура обновления работает долго.


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

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


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

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


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

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