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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Хочу предложить вниманию пользователей ФМ по группировке таблиц.
СообщениеДобавлено: Пт, апр 05 2013, 08:53 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
Добрый день.
Хочу предложить вниманию пользователей ФМ по группировке таблиц.
Если интересно, могу поделиться...
Вообще цель - тестирование данного ФМ.
Данный ФМ исправлен для использования Include структур.

Code:
FUNCTION Z_GROUP_TABLE.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     REFERENCE(FIELDS_GROUP) TYPE  STRING
*"     REFERENCE(FIELDS_SUM) TYPE  STRING
*"  TABLES
*"      IT
*"----------------------------------------------------------------------

*" Функциональный модуль осуществляет группировку таблицы по указанным полям
*" FIELDS_GROUP, и суммирование указанных полей FIELDS_SUM.
*" Результат помещается в ту же таблицу, где содержались первоначальные данные.
*" Пример в программе: ZGROUP_TABLE.

field-symbols:
  <fld>            type any,
  <wa>             type any,
  <wa_if_data>     type any,
  <it_if_data>     type standard table,
  <it_if_data_new> type standard table.

types:
  abap_keyname  type c length 255.

types:
  begin of abap_keydescr,
    name        type abap_keyname,
  end   of abap_keydescr.

data:
  F_GROUP         type string,
  F_SUM           type string,
  p_key           type STANDARD TABLE OF abap_keydescr
                       WITH KEY name,
  w_key           type abap_keydescr,
  itab_g          type table of string with header line,
  itab_s          type table of string with header line,
  dref            type ref to data,
  itab_type       type ref to cl_abap_tabledescr,
  comp_fld        type cl_abap_structdescr=>component,
  comp_fld_inc    type cl_abap_structdescr=>component,
  comp_tab        type cl_abap_structdescr=>component_table,
  comp_tab_new    type cl_abap_structdescr=>component_table,
  comp_tab_inc    type cl_abap_structdescr=>component_table,
  struct_type     type ref to cl_abap_structdescr,
  struct_type_inc type ref to cl_abap_structdescr.

  F_GROUP = FIELDS_GROUP.
  F_SUM   = FIELDS_SUM.
  if F_GROUP <> '' and F_SUM <> ''.
    translate F_GROUP to upper case.
    translate F_SUM   to upper case.
    split F_GROUP at ',' into table itab_g.
    split F_SUM   at ',' into table itab_s.
    struct_type ?= cl_abap_typedescr=>describe_by_data( it ).
    comp_tab     = struct_type->get_components( ).
    loop at comp_tab into comp_fld.
      if comp_fld-as_include = 'X'.
        struct_type_inc ?= comp_fld-type.
        comp_tab_inc     = struct_type_inc->get_components( ).
        loop at comp_tab_inc into comp_fld_inc.
          append comp_fld_inc to comp_tab.
        endloop.
      endif.
    endloop.
    delete comp_tab where as_include = 'X'.

    refresh: comp_tab_new, p_key.
    loop at itab_g.
      loop at comp_tab into comp_fld.
        if comp_fld-name = itab_g.
          append comp_fld to comp_tab_new.
          w_key-name = comp_fld-name.
          append w_key to p_key.
        endif.
      endloop.
    endloop.
    loop at itab_s.
      loop at comp_tab into comp_fld.
        if comp_fld-name = itab_s.
          append comp_fld to comp_tab_new.
        endif.
      endloop.
    endloop.
    struct_type = cl_abap_structdescr=>create( comp_tab_new ).
    itab_type   = cl_abap_tabledescr=>create( p_line_type  = struct_type
                                              p_table_kind = cl_abap_tabledescr=>tablekind_std
                                              p_key        = p_key ).
    create data dref type handle itab_type.
    assign dref->* to <it_if_data>.
    assign dref->* to <it_if_data_new>.
    create data dref like line of <it_if_data>. assign dref->* to <wa_if_data>.
    create data dref like line of it.           assign dref->* to <wa>.
    create data dref like <it_if_data>.         assign dref->* to <it_if_data_new>.
    loop at it into <wa>.
      move-corresponding <wa> to <wa_if_data>.
      append <wa_if_data> to <it_if_data>.
    endloop.
    sort <it_if_data>.
    loop at <it_if_data> into <wa_if_data>.
      collect <wa_if_data> into <it_if_data_new>.
    endloop.
    refresh it.
    clear it.
    loop at <it_if_data_new> into <wa_if_data>.
      clear <wa>.
      move-corresponding <wa_if_data> to <wa>.
      append <wa> to it.
    endloop.
  endif.
ENDFUNCTION.


Последний раз редактировалось hub2002 Ср, апр 17 2013, 10:28, всего редактировалось 3 раз(а).

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Хочу предложить вниманию пользователей ФМ по группировке таблиц.
СообщениеДобавлено: Пт, апр 05 2013, 09:37 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, окт 22 2009, 12:41
Сообщения: 473
Конечно интересно, выкладывайте :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хочу предложить вниманию пользователей ФМ по группировке таблиц.
СообщениеДобавлено: Пт, апр 05 2013, 11:10 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
А чем обычный LOOP не устраивает?
Code:
LOOP AT table INTO wa.
  AT END OF field_n.
     SUM.
*    В wa получаем суммы всех числовых полей с группировкой по field_1 - field_n
  ENDAT.
ENDLOOP.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хочу предложить вниманию пользователей ФМ по группировке таблиц.
СообщениеДобавлено: Пт, апр 05 2013, 11:27 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
Обычный устраивает, но сделано но основе field symbols...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Хочу предложить вниманию пользователей ФМ по группировке таблиц.
СообщениеДобавлено: Пт, апр 05 2013, 13:44 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Мы реализовали подобное по-другому:
-На входе таблица, fieldcatalog к ней и список итоговых полей
-на выходе reference на итоговую таблицу и ее fieldcatalog.

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

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хочу предложить вниманию пользователей ФМ по группировке таблиц.
СообщениеДобавлено: Пт, апр 05 2013, 13:52 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
Рассматривал тоже fieldcatalog, но просто отбросил как лишний параметр.
Используется так:
Code:
      call function 'Z_GROUP_TABLE'
        exporting
          FIELDS_GROUP       = 'WAERS,VKORG'
          FIELDS_SUM         = 'ZKP_PLAN_OUT,ZKP_FAKT_OUT,ZKP_PLAN_TPROFIT,ZKP_FAKT_TPROFIT,ZKP_PLAN_ARRMONE,ZKP_FAKT_ARRMONE'
        tables
          IT                 = it_alv.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Хочу предложить вниманию пользователей ФМ по группировке таблиц.
СообщениеДобавлено: Пт, апр 05 2013, 15:14 
Начинающий
Начинающий

Зарегистрирован:
Вт, май 22 2012, 11:55
Сообщения: 4
hub2002 написал(а):
Рассматривал тоже fieldcatalog, но просто отбросил как лишний параметр.
Используется так:
Code:
      call function 'Z_GROUP_TABLE'
        exporting
          FIELDS_GROUP       = 'WAERS,VKORG'
          FIELDS_SUM         = 'ZKP_PLAN_OUT,ZKP_FAKT_OUT,ZKP_PLAN_TPROFIT,ZKP_FAKT_TPROFIT,ZKP_PLAN_ARRMONE,ZKP_FAKT_ARRMONE'
        tables
          IT                 = it_alv.


Не очень работает для таблиц у которых поля объявлены через структуру. Например PA0001.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Хочу предложить вниманию пользователей ФМ по группировке таблиц.
СообщениеДобавлено: Пт, апр 05 2013, 15:20 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
А в чем проблема?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Хочу предложить вниманию пользователей ФМ по группировке таблиц.
СообщениеДобавлено: Пт, апр 05 2013, 15:26 
Начинающий
Начинающий

Зарегистрирован:
Вт, май 22 2012, 11:55
Сообщения: 4
hub2002 написал(а):
А в чем проблема?


comp_tab = struct_type->get_components( ). - не получается список полей, ну и далее дамп.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Хочу предложить вниманию пользователей ФМ по группировке таблиц.
СообщениеДобавлено: Пт, апр 05 2013, 15:29 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
Можно пример.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Хочу предложить вниманию пользователей ФМ по группировке таблиц.
СообщениеДобавлено: Пт, апр 05 2013, 15:33 
Начинающий
Начинающий

Зарегистрирован:
Вт, май 22 2012, 11:55
Сообщения: 4
hub2002 написал(а):
Можно пример.

Code:
DATA lt_0008 TYPE TABLE OF pa0008.

SELECT * INTO TABLE lt_0008
  FROM pa0008.

CALL FUNCTION 'ZFM_TEST'
  EXPORTING
    fields_group = 'PERNR,SUBTY'
    fields_sum   = 'BET01,BET03'
  TABLES
    it           = lt_0008.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Хочу предложить вниманию пользователей ФМ по группировке таблиц.
СообщениеДобавлено: Пт, апр 05 2013, 15:44 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
Понял...
Спасибо.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Хочу предложить вниманию пользователей ФМ по группировке таблиц.
СообщениеДобавлено: Ср, апр 17 2013, 10:26 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
Исправлен ФМ для работы с include структурами...


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

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


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

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


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

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