Текущее время: Вс, июл 20 2025, 01:03

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Принудительный вызов события SUBTOTAL_TEXT в ALV GRID.
СообщениеДобавлено: Пн, июн 26 2006, 16:36 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Добрый день!

Событие SUBTOTAL_TEXT отрабатывает только, если в ручном режиме скрыть одну из колонок в ALV GRID.
Как принудительно сделать, чтобы это событие отработало при создании ALV GRID? Свойство SUBTOT для нескольких полей устанавливается через таблицу сортировки it_sort при вызове грида.

CALL METHOD grid_alv->set_table_for_first_display
EXPORTING
is_layout = gs_layout_alv
i_save = 'U'
i_default = 'X'
CHANGING
it_fieldcatalog = field_catalog[]
it_outtab = gt_alv[]
it_sort = gt_sort[].


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 03 2006, 08:28 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июн 02 2006, 14:22
Сообщения: 138
Откуда: г.Новомичуринск
Пол: Мужской
Как событие хоть регистрируешь?

_________________
Не ломайте то что уже есть.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 03 2006, 11:18 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Чт, окт 27 2005, 17:13
Сообщения: 1068
Откуда: Из бессрочного бана
Пол: Мужской
Если поле, по которому делаешь подсуммировку необходимо на экране, то во внутренней таблице придется сделать такое же второе и скрывать его выставляя соответствующую опцию в каталоге полей. Соответственно и подсум. делать уже по этому, второму полю.

_________________
В бессрочном бане


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 03 2006, 13:06 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июн 02 2006, 14:22
Сообщения: 138
Откуда: г.Новомичуринск
Пол: Мужской
Цитата:
Если поле, по которому делаешь подсуммировку необходимо на экране, то во внутренней таблице придется сделать такое же второе и скрывать его выставляя соответствующую опцию в каталоге полей. Соответственно и подсум. делать уже по этому, второму полю.

Если стоит управление ALV Gred в это программе то то что вы предлогаете не пройдёт! Событие отрабатывает только лишь при формировании списка в уже отгруженном варианте.
Цитата:
Событие SUBTOTAL_TEXT отрабатывает только, если в ручном режиме скрыть одну из колонок в ALV GRID.

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

_________________
Не ломайте то что уже есть.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 03 2006, 13:16 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Чт, окт 27 2005, 17:13
Сообщения: 1068
Откуда: Из бессрочного бана
Пол: Мужской
Цитата:
Если стоит управление ALV Gred в это программе то то что вы предлогаете не пройдёт! Событие отрабатывает только лишь при формировании списка в уже отгруженном варианте.
:shock:

_________________
В бессрочном бане


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 03 2006, 13:28 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июн 02 2006, 14:22
Сообщения: 138
Откуда: г.Новомичуринск
Пол: Мужской
Цитата:
:shock:

В смысле событие SUBTOTAL_TEXT отрабатывает так как вы и описали но если стоит вариант по умолчанию при формировании ALV то это событие не отработает!

_________________
Не ломайте то что уже есть.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июл 03 2006, 22:37 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Если вкратце, код такой.
В самом деле, используется два поля с подсуммами, как писал Dmitriy.

Code:
CLASS lcl_ils DEFINITION DEFERRED.

DATA:  FCODE LIKE SY-UCOMM,
       FCODE2 LIKE SY-UCOMM,
       SCODE LIKE SY-UCOMM.

DATA:
      gc_alv          TYPE scrfname VALUE  'CONTAINER',
      gc_custom_alv   TYPE REF TO cl_gui_custom_container,
      grid_alv        TYPE REF TO cl_gui_alv_grid.

DATA: gt_alv   TYPE STANDARD TABLE OF ZMSD_GL WITH HEADER LINE,
      gwa_alv TYPE ZMSD_GL,
      field_catalog TYPE lvc_t_fcat WITH HEADER LINE,
      gs_layout_alv TYPE lvc_s_layo,
      gt_sort       TYPE lvc_t_sort WITH HEADER LINE.

DATA: alv_event_receiver TYPE REF TO lcl_ils.

*&---------------------------------------------------------------------*
*&       Class LCL_ILS
*&---------------------------------------------------------------------*
*        Text
*----------------------------------------------------------------------*
CLASS lcl_ils DEFINITION.
  PUBLIC SECTION.

    METHODS handle_subtotal_text for event subtotal_text of cl_gui_alv_grid
      importing
      es_subtottxt_info
      ep_subtot_line
      e_event_data.
ENDCLASS.               "LCL_ILS

*&---------------------------------------------------------------------*
*&       Class (Implementation)  lcl_ils
*&---------------------------------------------------------------------*
*        Text
*----------------------------------------------------------------------*
CLASS lcl_ils IMPLEMENTATION.

* добавляет слово 'Итого' перед subtotal текстом
  METHOD handle_subtotal_text.
    DATA: LEN TYPE I,
         POS TYPE I.
    assign ep_subtot_line->* to <fs1>.
    es_subtottxt_info = es_subtottxt_info.
    assign  e_event_data->m_data->* to <fs>.
    LEN = STRLEN( <fs> ).
    WHILE POS < LEN.
      IF <fs>+POS(1) EQ ' '.
        EXIT.
      ENDIF.
      POS = POS + 1.
    ENDWHILE.
    IF POS < LEN.
      SHIFT <fs> BY POS PLACES.
      CONCATENATE 'Итого '(103) <fs> INTO <fs>.
    ENDIF.
  ENDMETHOD.

ENDCLASS.               "lcl_ils

*&---------------------------------------------------------------------*
*&      Module  STATUS_0200  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0200 OUTPUT.

  SET PF-STATUS 'STATUS_0200'.
  SET TITLEBAR 'TITLE_0200'.
  PERFORM FILL_KORR_TABLE.

  IF gc_custom_alv IS INITIAL.
    CREATE OBJECT gc_custom_alv
         EXPORTING
           container_name = gc_alv
         EXCEPTIONS
            cntl_error = 1
            cntl_system_error = 2
            create_error = 3
            lifetime_error = 4
            lifetime_dynpro_dynpro_link = 5.
    if sy-subrc ne 0.
* add your handling, for example
      call function 'POPUP_TO_INFORM'
           exporting
                titel = sy-repid
                txt2  = sy-subrc
                txt1  = 'The control could not be created'(510).
    endif.

    CREATE OBJECT grid_alv
      EXPORTING
      i_parent = gc_custom_alv
      I_APPL_EVENTS = 'X'.      " Enable PBO/PAI

    PERFORM MASK_COLUMNS TABLES field_catalog GT_SORT.

    gs_layout_alv-grid_title = text-100.

    CALL METHOD grid_alv->set_table_for_first_display
       EXPORTING
            is_layout = gs_layout_alv
            i_save    = 'U'
            i_default = 'X'
       CHANGING
           it_fieldcatalog = field_catalog[]
           it_outtab       = gt_alv[]
           it_sort         = gt_sort[].

    IF alv_event_receiver IS INITIAL.
      CREATE OBJECT alv_event_receiver.
      set handler alv_event_receiver->handle_subtotal_text for grid_alv.
      SET HANDLER alv_event_receiver->on_dblclick FOR grid_alv.
    ENDIF.

    call method cl_gui_control=>set_focus exporting control = grid_alv.

  ENDIF.

ENDMODULE.                 " STATUS_0200  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0200  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0200 INPUT.
  SCODE = FCODE2.
  CLEAR FCODE2.
  CASE SCODE.
    WHEN 'EXIT' OR 'CANC' OR 'BACK'.
       call method gc_custom_alv->free.
       free alv_event_receiver.
       free grid_alv.
       free gc_custom_alv.
       LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0200  INPUT

*&---------------------------------------------------------------------*
*&      Form  MASK_COLUMNS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_FIELDCAT  text
*----------------------------------------------------------------------*
form MASK_COLUMNS
      tables  p_gt_fieldcat type lvc_t_fcat
              p_GT_SORT type lvc_t_SORT.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
       EXPORTING
            i_structure_name       = 'ZMSD_GL'
       CHANGING
            ct_fieldcat            = p_gt_fieldcat[].

    LOOP AT field_catalog.
      IF field_catalog-fieldname = 'BUKRS'
        OR field_catalog-fieldname = 'WAERS'
        OR  field_catalog-fieldname = 'SAKNRD'
        OR  field_catalog-fieldname = 'SAKNRK'
        OR  field_catalog-fieldname = 'SHKZG'.
        field_catalog-key_sel = 'X'.
        field_catalog-no_out = 'X'.
        modify field_catalog.
      ELSEIF field_catalog-fieldname = 'PERIOD'.
        field_catalog-no_out = 'X'.
        field_catalog-EDIT_MASK = '==ZPRD'.
        modify field_catalog.
      ELSEIF field_catalog-fieldname = 'PERIOD_VISIBLE'.
        IF X_PERIOD NE 'X'.
          field_catalog-no_out = 'X'.
        ELSE.
          field_catalog-EDIT_MASK = '==ZPRD'.
          field_catalog-OUTPUTLEN = 15.
        ENDIF.
        modify field_catalog.
      ELSEIF field_catalog-fieldname = 'DMBTRD'
        OR field_catalog-fieldname = 'DMBTRK'.
        field_catalog-DO_SUM = 'X'.
        field_catalog-CURRENCY = 'X'.
        modify field_catalog.
      ELSEIF field_catalog-fieldname = 'KS'.
        field_catalog-OUTPUTLEN = 10.
        modify field_catalog.
      ELSEIF field_catalog-fieldname = 'DS_VISIBLE'.
        field_catalog-OUTPUTLEN = 20.
        modify field_catalog.
      ELSEIF field_catalog-fieldname = 'DS'.
        field_catalog-no_out = 'X'.
        modify field_catalog.
      ENDIF.
    ENDLOOP.

    GT_SORT-fieldname = 'DS'.
    GT_SORT-up = 'X'.
    GT_SORT-spos = 1.
    GT_SORT-SUBTOT = 'X'.
    APPEND GT_SORT to P_GT_SORT.

    IF X_PERIOD EQ 'X'.
      CLEAR GT_SORT.
      GT_SORT-fieldname = 'PERIOD'.
      GT_SORT-up = 'X'.
      GT_SORT-spos = 1.
      GT_SORT-SUBTOT = 'X'.
      APPEND GT_SORT to P_GT_SORT.
    ENDIF.

endform.                               " MASK_COLUMNS


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 04 2006, 07:19 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июн 02 2006, 14:22
Сообщения: 138
Откуда: г.Новомичуринск
Пол: Мужской
Цитата:
Code:
*&---------------------------------------------------------------------*
*&       Class (Implementation)  lcl_ils
*&---------------------------------------------------------------------*
*        Text
*----------------------------------------------------------------------*
CLASS lcl_ils IMPLEMENTATION.

* добавляет слово 'Итого' перед subtotal текстом
  METHOD handle_subtotal_text.
    DATA: LEN TYPE I,
         POS TYPE I.
    assign ep_subtot_line->* to <fs1>.
    es_subtottxt_info = es_subtottxt_info.
    assign  e_event_data->m_data->* to <fs>.
    LEN = STRLEN( <fs> ).
    WHILE POS < LEN.
      IF <fs>+POS(1) EQ ' '.
        EXIT.
      ENDIF.
      POS = POS + 1.
    ENDWHILE.
    IF POS < LEN.
      SHIFT <fs> BY POS PLACES.
      CONCATENATE 'Итого '(103) <fs> INTO <fs>.
    ENDIF.
  ENDMETHOD.

ENDCLASS.               "lcl_ils

ккакой структуре он относится <fs1> ?
И попробуй Вот такой код:
Code:
    data:
        event_matnr type zebanebkn-matnr
       ,event_mng02 type zebanebkn-mng02
       ,event_mng03 type zebanebkn-mng03
       ,event_menge type zebanebkn-menge
       ,event_txz01 type zebanebkn-txz01
       ,event_str(132)
       ,event_matnr_int type i
    .
    field-symbols:
     <zmm_zebanebkn1> type zebanebkn
    ,<zmm_zebanebkn2> type zebanebkn
    ,<zmm_data>       type any
     .
    if es_subtottxt_info-criteria = 'MATNR'.

      free: event_matnr, event_mng02, event_str.
      assign ep_subtot_line->* to <zmm_zebanebkn1>.
      event_matnr = <zmm_zebanebkn1>-matnr.
      event_menge = <zmm_zebanebkn1>-menge.
      assign e_event_data->m_data->* to <zmm_data>.
      event_str = <zmm_data>.
      condense event_matnr no-gaps.
      concatenate
        event_matnr
        'Итого:'
        mt61d-maktx
      into event_str separated by space.
      <zmm_data> = event_str.
      <zmm_zebanebkn1>-mng02 = event_mng02.
      <zmm_zebanebkn1>-mng03 = event_mng03.
  endmethod.                           "handle_subtotal_text

Событие олтрабатывает на все строчки подсумирования кроме большой жёлтой итоговой. Управлять как видно из кода можно всеё строчкой, вплоть изменять получившиеся суммы.

_________________
Не ломайте то что уже есть.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 04 2006, 13:06 
Начинающий
Начинающий

Зарегистрирован:
Вт, июн 27 2006, 16:29
Сообщения: 13
У меня, как я понимаю, такая же проблема. Все итоги отлично подменяются по требованию, но только после того, как было что-то нажато (свернут уровень суммирования, например), но не получается сделать так, чтобы Grid открывался с уже измененными мной итогами.

Очевидно, я чего-то не понимаю :(. Подскажите, если можно.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 04 2006, 13:49 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июн 02 2006, 14:22
Сообщения: 138
Откуда: г.Новомичуринск
Пол: Мужской
Цитата:
У меня, как я понимаю, такая же проблема. Все итоги отлично подменяются по требованию, но только после того, как было что-то нажато (свернут уровень суммирования, например), но не получается сделать так, чтобы Grid открывался с уже измененными мной итогами.

Очевидно, я чего-то не понимаю . Подскажите, если можно.

Можно после вывода grid сделать обманный ход например метод refresh_table_display

_________________
Не ломайте то что уже есть.


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

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


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

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


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

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