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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Группировка
СообщениеДобавлено: Пт, июл 02 2010, 14:39 
Председатель
Председатель

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Группировка
СообщениеДобавлено: Пт, июл 02 2010, 15:01 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Да, и даже реализовали :wink:
1.ФМ для выбора полей
-На вход подается fieldcatalog
-На выходе - fieldcatalog для результирующей таблицы
2.ФМ для создания структуры данных по выбранным полям и выполнения COLLECT
-На входе:
fieldcatalog для результирующей таблицы
таблица с данными
-На выходе - REF TO DATA (указатель к результрующей таблице)

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


Последний раз редактировалось Удав Пт, июл 02 2010, 15:04, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Группировка
СообщениеДобавлено: Пт, июл 02 2010, 15:03 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
Поделитесь идеей :) если не жалко конечно


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Группировка
СообщениеДобавлено: Пт, июл 02 2010, 15:06 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Для выбора полей подойдет стандартный ФМ FIELD_CHOICE, динамическое создание таблицы многократно обсуждалось ;)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Группировка
СообщениеДобавлено: Пт, июл 02 2010, 15:16 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
А можно чуть поподробней.
Я не особо понял с обработкой таблицы.
на вход необходимо дать таблицу type table ?
у меня вопрос как унифицировать группировку - механизм какой :)
(просто я туплю... )


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Группировка
СообщениеДобавлено: Пт, июл 02 2010, 15:41 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
На вход - нетипизированная таблица data_in (в TABLES).
А дальше так:
Code:
  CREATE DATA dref_in LIKE LINE OF data_in.
  ASSIGN dref_in->* TO <fs_s_in>.

  ASSIGN data_out->* TO <fs_t_out>.
  CREATE DATA dref_out LIKE LINE OF <fs_t_out>.
  ASSIGN dref_out->* TO <fs_s_out>.

и цикл по data_in ;)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Группировка
СообщениеДобавлено: Пт, июл 02 2010, 15:58 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
Code:
*"----------------------------------------------------------------------
*"*"Globale Schnittstelle:
*"  IMPORTING
*"     IT_FCAT TYPE LVC_T_FCAT
*"     IT_SRC  TYPE STANDARD TABLE
*"  EXPORTING
*"     ERF_DATA TYPE REF TO DATA
*"----------------------------------------------------------------------


Code:
DATA:
LRF_NEW_LINE TYPE REF TO DATA.

FIELD-SYMBOLS:
<FS_OUT_TAB> TYPE STANDARD TABLE,
<FS_LINE1>       TYPE ANY,
<FS_LINE2>       TYPE ANY,
<FS_FIELD1>     TYPE ANY,
<FS_FIELD2>     TYPE ANY,
<FS_FCAT>        TYPE LVC_S_FCAT.
*


CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE(
  EXPORTING
    IT_FIELDCATALOG = IT_FCAT[]
  IMPORTING
    EP_TABLE = ERF_DATA ).


ASSIGN ERF_DATA->* TO <FS_OUT_TAB>.
CHECK SY-SUBRC = 0.

CREATE DATA LRF_NEW_LINE LIKE LINE OF <FS_OUT_TAB>.
ASSIGN LRF_NEW_LINE->* TO <FS_LINE2>.
CHECK SY-SUBRC = 0.

LOOP AT IT_SRC ASSIGNING <FS_LINE1>.
  CLEAR <FS_LINE2>.
  LOOP AT IT_FCAT ASSIGNING <FS_FCAT>.
    ASSIGN COMPONENT <FS_FCAT>-FIELDNAME OF STRUCTURE <FS_LINE1> TO <FS_FIELD1>.
    CHECK SY-SUBRC = 0.

    ASSIGN COMPONENT <FS_FCAT>-FIELDNAME OF STRUCTURE <FS_LINE2> TO <FS_FIELD2>.
    CHECK SY-SUBRC = 0.
   
    <FS_FIELD2> = <FS_FIELD1>.
  ENDLOOP.
  COLLECT <FS_LINE2> INTO <FS_OUT_TAB>.
ENDLOOP.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Группировка
СообщениеДобавлено: Пт, июл 02 2010, 16:14 
Председатель
Председатель

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Группировка
СообщениеДобавлено: Пт, июл 02 2010, 16:20 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
hub2002 написал(а):
Спасибо.
посмотрю...



Только учтите, что суммовые поля в каталоге полей должны быть описаны с запасом по длине, чтобы при коллекте входной таблицы в выходную они не переполнились, иначе получите "авар - динамическая ошибка"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Группировка
СообщениеДобавлено: Пн, июл 05 2010, 08:43 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Art386 написал:
Code:
  LOOP AT IT_FCAT ASSIGNING <FS_FCAT>.
    ASSIGN COMPONENT <FS_FCAT>-FIELDNAME OF STRUCTURE <FS_LINE1> TO <FS_FIELD1>.
    CHECK SY-SUBRC = 0.

    ASSIGN COMPONENT <FS_FCAT>-FIELDNAME OF STRUCTURE <FS_LINE2> TO <FS_FIELD2>.
    CHECK SY-SUBRC = 0.
   
    <FS_FIELD2> = <FS_FIELD1>.
  ENDLOOP.

Вместо этого нужно использовать
Code:
MOVE-CORRESPONDING <FS_LINE1> to <FS_LINE2>
;)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Группировка
СообщениеДобавлено: Пн, июл 05 2010, 09:10 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
to Удав
в 4.6 такая конструкция не сработает :wink:
http://sapboard.ru/forum/viewtopic.php?f=13&t=59842&start=0


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Группировка
СообщениеДобавлено: Пн, июл 05 2010, 09:26 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Besa, я в курсе ;)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Группировка
СообщениеДобавлено: Ср, июл 07 2010, 16:27 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
Цитата:
Вместо этого нужно использовать

Почему же так категорично? "нужно"? Я бы сказал, "можно" :) Ибо, как было сказано выше, не везде будет работать такая конструкция. А мой пример будет работать везде :)
А так ведь непринципиально... так или эдак


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Группировка
СообщениеДобавлено: Пт, июл 09 2010, 11:42 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Art386 написал:
А так ведь непринципиально... так или эдак

Как это непринципиально? :o
А в SE30 смотрели, что получается при Вашем варианте в случае обработки большого объема данных? :wink:

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Группировка
СообщениеДобавлено: Пт, июл 09 2010, 12:41 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
Удав написал(а):
Art386 написал:
А так ведь непринципиально... так или эдак

Как это непринципиально? :o
А в SE30 смотрели, что получается при Вашем варианте в случае обработки большого объема данных? :wink:

UPD:
В плане производительности я с вами абсолютно согласен!! Это замечание в тему.
Уточню, я имел в виду: непринципиально в плане кода (и тот, и тот работает правильно и выдает одинаковый результат). Я думаю, понятно, что встроенный оператор наверняка выполнит операцию быстрее, чем покомпонентное присваивание через field-symbols...


Итого, надо было изначально написать так:
- система до 4.7: используется первый вариант;
- система выше - второй вариант.

:)


Последний раз редактировалось Art386 Пт, июл 09 2010, 13:27, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

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


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

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


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

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