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

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


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

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


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

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