Текущее время: Вс, июн 29 2025, 00:04

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


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

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


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

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