Текущее время: Сб, июл 19 2025, 19:51

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


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

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


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

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