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

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


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

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


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

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