Текущее время: Чт, май 15 2025, 20:41

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Запуск ALV с нажатием пользовательской кнопки
СообщениеДобавлено: Вт, окт 04 2005, 13:36 
Специалист
Специалист

Зарегистрирован:
Чт, авг 19 2004, 07:31
Сообщения: 234
Откуда: Нижнекамск
Столкнулся с такой проблемой
Необходимо запустить ALV и программно нажать кнопку.

История вопроса.
ALV создал объектами. Кнопку вставил в статус экрана.
После запуска ALV (PBO экрана) вставил
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
работает только если в ALV нету данных, а если есть не работает.
Поставил CALL METHOD cl_gui_cfw=>set_new_ok_code
забивает на это дело.
Потом этот же cl_gui_cfw=>set_new_ok_code вставил в событие after_refresh ALV-ешки. Событие срабатывает но кнопка не вызывается, причем только при первом запуске, т.е. если потом после формирования ALV нажатием какой либо стандартной кнопки вызвать refresh то всё сработает.
Пробовал также SET USER-COMMAND тоже не помогло.
Вставил кнопку в статус самой ALV-ешки и сделал
CALL METHOD alv->set_function_code. Не сработало.
Где туплю то а? Я задолбался уже :evil:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запуск ALV с нажатием пользовательской кнопки
СообщениеДобавлено: Ср, окт 05 2005, 01:47 
Гость
Eugene написал(а):
...После запуска ALV (PBO экрана) вставил
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
работает только если в ALV нету данных, а если есть не работает.


насколько я понял ты вызываешь SAPGUI_SET_FUNCTIONCODE после вызова REUSE_ALV_GRID_DISPLAY ... если так, то понятно почему не срабатывает, когда данные есть управление находится у модуля REUSE и программа дальше не идет, а если данных нету, то выполнение программы продолжается ...
это размышления вслух ) как решить проблему хз, ща буду пробовать ...


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 05 2005, 01:56 
Гость
вот как получилось:
создаешь форму на событие END_OF_LIST,
а в ней:
Code:
call function:                                       
    'CONTROL_INIT',                                   
    'CONTROL_SETFUNCTIONCODE' exporting fcode = 'нужный код',
    'CONTROL_FLUSH'.

и не забудь таблицу с событиями в REUSE передать :)

возможно у тебя сработает и call function 'SAPGUI_SET_FUNCTIONCODE', но у нас в 4.0 почему то не работает, только вот так, как привел в примере ...


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 05 2005, 07:07 
Специалист
Специалист

Зарегистрирован:
Чт, авг 19 2004, 07:31
Сообщения: 234
Откуда: Нижнекамск
неее...я использую cl_gui_alv_grid

хотя там тоже наверное можно событие найти типа end_of_list просто кривовато как то работает...
я конечно не пробовал код из 'SAPGUI_SET_FUNCTIONCODE' написать

что интересно CALL METHOD alv->set_function_code - если вызвать стандартную кнопочку из статуса ALV сработает, если свою - ни хрена


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запуск ALV с нажатием пользовательской кнопки
СообщениеДобавлено: Ср, окт 05 2005, 09:48 
Гость
Eugene написал(а):
...
История вопроса.
ALV создал объектами. Кнопку вставил в статус экрана.
После запуска ALV (PBO экрана) вставил
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
работает только если в ALV нету данных, а если есть не работает.
...
Где туплю то а? Я задолбался уже :evil:

Проблема в том, что обработка функциональных кодов производится не в PBO, а в PAI-логике.(Как правильно заметил EНОТ)
То есть, в PBO-логике эмуляция нажатия кнопки неприменима, так как после выполнения PBO-логики экрана управление передается не в PAI-логику, а объекту ALV Grid.
Вот если в событии ALV Grid (например TOP_OF_PAGE) прописать вызов кнопки (ФМ 'SAPGUI_SET_FUNCTIONCODE' или 'CONTROL_SETFUNCTIONCODE' или метод cl_gui_cfw=>set_new_ok_code
), то PAI-логика экрана отработает.
Метод alv->set_function_code срабатывает только внутри объекта alv.
Удачи!


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 05 2005, 10:26 
Специалист
Специалист

Зарегистрирован:
Чт, авг 19 2004, 07:31
Сообщения: 234
Откуда: Нижнекамск
спасибо
только один вопрос такой
почему тогда вот это сработает
CALL METHOD alv->set_table_for_first_display
CHANGING
it_outtab = it_alv[]
it_fieldcatalog = fieldcat_lvc[]
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
syucomm = '&GRAPH'. это стандартная кнопка ALV
CALL METHOD alv->set_function_code
CHANGING
c_ucomm = syucomm.

а вот это нет

CALL METHOD alv->set_table_for_first_display
CHANGING
it_outtab = it_alv[]
it_fieldcatalog = fieldcat_lvc[]
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
syucomm = '&GRAPH_M'. это моя добавленная кнопка в ALV
CALL METHOD alv->set_function_code
CHANGING
c_ucomm = syucomm.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 05 2005, 11:13 
Гость
Для обработки своей кнопки в ALV необходимо написать обработчик события USER_COMMAND и присвоить обработчик объекту alv.
Пример:

class lcl_handler definition.
public section.
methods handle_user_command for event user_command of cl_gui_alv_grid exporting e_ucomm.

endclass.

class lcl_handler implementation.

....

enclass.

data: g_handler type ref to lcl_handler.


......
PBO-логика

Цитата:
CALL METHOD alv->set_table_for_first_display
CHANGING
it_outtab = it_alv[]
it_fieldcatalog = fieldcat_lvc[]
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.


set handler g_handler for alv.

Цитата:
syucomm = '&GRAPH_M'. это моя добавленная кнопка в ALV
CALL METHOD alv->set_function_code
CHANGING
c_ucomm = syucomm.

Это должно сработать.
:) [/quote]


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 05 2005, 11:18 
Гость
Удав написал(а):
set handler g_handler for alv.

Упс...
set handler g_handler->handle_user_command for alv
:roll:


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 05 2005, 11:25 
Специалист
Специалист

Зарегистрирован:
Чт, авг 19 2004, 07:31
Сообщения: 234
Откуда: Нижнекамск
я что похож на идиота сильно? :D

я просто кратко написал...
естественно обработчики написаны и присвоены
и нажатие на кнопке приводит к запуску моего обработчика

вот полный код
если заменить на стандартную кнопку он сработает, если оставить мою кнопку то не сработает

Code:
REPORT zbudget_graph.
INCLUDE <icon>.
DATA: alv       TYPE REF TO cl_gui_alv_grid,
      container TYPE REF TO cl_gui_custom_container,
      fieldcat_lvc TYPE lvc_t_fcat WITH HEADER LINE,
      fieldcat_slis TYPE slis_t_fieldcat_alv WITH HEADER LINE,
      kurve_nr(2),
      punkt_nr(2).

DATA: BEGIN OF it_alv OCCURS 10.
        INCLUDE STRUCTURE zzbudgett.
DATA: END OF it_alv.

TYPES: BEGIN OF sdata,
        w TYPE p,
        f TYPE f.
TYPES: END OF sdata.
DATA: sdata1 TYPE TABLE OF sdata WITH HEADER LINE,
      sdata2 TYPE TABLE OF sdata WITH HEADER LINE,
      sdata3 TYPE TABLE OF sdata WITH HEADER LINE,
      sdata4 TYPE TABLE OF sdata WITH HEADER LINE,
      sdata  TYPE TABLE OF sdata WITH HEADER LINE.
DATA syucomm LIKE sy-ucomm.

DATA: BEGIN OF sopts OCCURS 1,
        c(80),
      END OF sopts.
CLASS lcl_application DEFINITION DEFERRED.
INCLUDE zbudget_application.
DATA g_application TYPE REF TO lcl_application.

START-OF-SELECTION.

  CREATE OBJECT g_application.
  CALL SCREEN 100.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_0100'.
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  must_die  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE must_die INPUT.
  LEAVE PROGRAM.
ENDMODULE.                 " must_die  INPUT
*&---------------------------------------------------------------------*
*&      Module  user_command_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE sy-ucomm.
    WHEN 'CANCEL'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 " user_command_0100  INPUT
*---------------------------------------------------------------------*
*       FORM graph_init                                               *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM graph_init.
  REFRESH sdata1.
  REFRESH sdata2.
  REFRESH sdata3.
  REFRESH sdata4.
  REFRESH sdata.

  LOOP AT it_alv.
    sdata1-w = sy-tabix.
    sdata1-f = it_alv-tsl06.
    APPEND sdata1.
    sdata2-w = sy-tabix.
    sdata2-f = it_alv-tsl07.
    APPEND sdata2.
    sdata3-w = sy-tabix.
    sdata3-f = it_alv-tsl08.
    APPEND sdata3.
    sdata4-w = sy-tabix.
    sdata4-f = it_alv-tsl09.
    APPEND sdata4.
    IF sy-tabix = 12.
      EXIT.
    ENDIF.
  ENDLOOP.
  APPEND LINES OF sdata1 TO sdata.
  APPEND LINES OF sdata2 TO sdata.
  APPEND LINES OF sdata3 TO sdata.
  APPEND LINES OF sdata4 TO sdata.

  sopts = '$'.
  WRITE '12' TO sopts+1.
  APPEND sopts.
  sopts = 'COLOR=7'.              "//   Kurvenfarbe
  APPEND sopts.
  sopts = 'THICK=1'.              "//   Kurvendicke
  APPEND sopts.
  sopts = 'LTEXT=COSINUS'.        "//   Legendentexte
  APPEND sopts.
  sopts = 'DTEXT=Darstellung der COS-Kurve'.
  APPEND sopts.

  sopts = '$'.
  WRITE '12' TO sopts+1.
  APPEND sopts.
  sopts = 'COLOR=2'.
  APPEND sopts.
  sopts = 'THICK=1'.
  APPEND sopts.
  sopts = 'LTEXT=SINUS'.
  APPEND sopts.
  sopts = 'DTEXT=Darstellung der SINUS-Kurve'.
  APPEND sopts.

  sopts = '$'.
  WRITE '12' TO sopts+1.
  APPEND sopts.
  sopts = 'COLOR=3'.
  APPEND sopts.
  sopts = 'THICK=1'.
  APPEND sopts.
  sopts = 'LTEXT=SINUS'.
  APPEND sopts.
  sopts = 'DTEXT=Darstellung der SINUS-Kurve'.
  APPEND sopts.

  sopts = '$'.
  WRITE '12' TO sopts+1.
  APPEND sopts.
  sopts = 'COLOR=4'.
  APPEND sopts.
  sopts = 'THICK=1'.
  APPEND sopts.
  sopts = 'LTEXT=SINUS'.
  APPEND sopts.
  sopts = 'DTEXT=Darstellung der SINUS-Kurve'.
  APPEND sopts.

  CALL FUNCTION 'STAT_GRAPH'
       EXPORTING
            ttext  = 'Funktionsverlauf'
            utext  = 'Sinus- und Cosinusfunktion'
            taxis  = 'Winkel in Grad'
            x_art  = 'LIN'
            y_art  = 'LIN'
            inform = 'X'
            winpos = '5'
            winszx = '100'
            winszy = '100'
       IMPORTING
            kurve  = kurve_nr
            index  = punkt_nr
       TABLES
            data   = sdata
            opts   = sopts.
  CALL FUNCTION 'GRAPH_DIALOG'
       EXPORTING
            close = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  start_alv  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE start_alv OUTPUT.
  DATA: events TYPE cntl_simple_events,
        event TYPE cntl_simple_event.

  IF container IS INITIAL.
    CREATE OBJECT container
        EXPORTING container_name = 'CONTAINER'.

    CREATE OBJECT alv
     EXPORTING
       i_parent = container.
    CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
         EXPORTING
              i_program_name         = 'ZBUDGET_GRAPH'
              i_internal_tabname     = 'IT_ALV'
              i_inclname             = 'ZBUDGET_GRAPH'
              i_client_never_display = 'X'
              i_bypassing_buffer     = 'X'
         CHANGING
              ct_fieldcat            = fieldcat_slis[]
         EXCEPTIONS
              OTHERS                 = 3.

    CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS'
         EXPORTING
              it_fieldcat_alv = fieldcat_slis[]
         IMPORTING
              et_fieldcat_lvc = fieldcat_lvc[]
         TABLES
              it_data         = it_alv
         EXCEPTIONS
              it_data_missing = 1
              OTHERS          = 2.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    SELECT *
    FROM zzbudgett
    APPENDING CORRESPONDING FIELDS OF TABLE it_alv.

    SET HANDLER g_application->alv_toolbar FOR alv.
    SET HANDLER g_application->alv_user_command FOR alv.

    CALL METHOD alv->set_table_for_first_display
      CHANGING
       it_outtab                     = it_alv[]
       it_fieldcatalog               = fieldcat_lvc[]
      EXCEPTIONS
       invalid_parameter_combination = 1
       program_error                 = 2
       too_many_lines                = 3
       OTHERS                        = 4
            .
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ELSE.

      syucomm = '&GRAPH_M'.
      CALL METHOD alv->set_function_code
        CHANGING
          c_ucomm = syucomm.
    ENDIF.
  ENDIF.
ENDMODULE.                 " start_alv  OUTPUT

*----------------------------------------------------------------------*
*   INCLUDE ZBUDGET_APPLICATION                                        *
*----------------------------------------------------------------------*
CLASS lcl_application DEFINITION.
  PUBLIC SECTION.
    METHODS:
      alv_toolbar
        FOR EVENT toolbar OF cl_gui_alv_grid
            IMPORTING e_object e_interactive,
      alv_user_command
        FOR EVENT user_command
        OF cl_gui_alv_grid
        IMPORTING e_ucomm.
ENDCLASS.

*---------------------------------------------------------------------*
*       CLASS lcl_application IMPLEMENTATION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_application IMPLEMENTATION.

  METHOD alv_toolbar.
    DATA: ls_toolbar  TYPE stb_button.

    CLEAR ls_toolbar.
    MOVE 3 TO ls_toolbar-butn_type.
    APPEND ls_toolbar TO e_object->mt_toolbar.
    CLEAR ls_toolbar.
    MOVE icon_employee TO ls_toolbar-icon.
    MOVE '&GRAPH_M' TO ls_toolbar-function.
    MOVE 'Графика' TO ls_toolbar-quickinfo.
    MOVE 'Графика' TO ls_toolbar-text.
    MOVE 0 TO ls_toolbar-butn_type.
    MOVE ' ' TO ls_toolbar-disabled.
    APPEND ls_toolbar TO e_object->mt_toolbar.

  ENDMETHOD.

  METHOD alv_user_command.
    CASE e_ucomm.
      WHEN '&GRAPH_M'.
        PERFORM graph_init.
    ENDCASE.
  ENDMETHOD.

ENDCLASS.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 05 2005, 13:56 
Гость
После set_table_for_first display вызови метод
alv->set_toolbar_interactive


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 05 2005, 14:23 
Специалист
Специалист

Зарегистрирован:
Чт, авг 19 2004, 07:31
Сообщения: 234
Откуда: Нижнекамск
вызвал
результат тот же


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 05 2005, 15:11 
Гость
Да уж..
посмотри, что справка по этому поводу пишет.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 05 2005, 15:18 
Специалист
Специалист

Зарегистрирован:
Чт, авг 19 2004, 07:31
Сообщения: 234
Откуда: Нижнекамск
ага
понял почему не запускается...спасибо


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

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


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

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


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

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