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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Группировка массива с суммированием и конкатенацией строк
СообщениеДобавлено: Ср, окт 08 2014, 14:09 
Начинающий
Начинающий

Зарегистрирован:
Ср, окт 08 2014, 13:32
Сообщения: 2
Здравствуйте! Помогите разобраться в следующей ситуации. Нужно сгруппировать данные по двум полям и произвести суммирование и конкатенацию строк.

Есть тип (или глобальная таблица, не знаю как тут правильно сказать) fi_excel, который состоит из множества полей
В частности если сократить
Code:
TYPES: BEGIN OF fi_excel,
ndz TYPE excel-ndz,
npdz TYPE excel-ndz,
p_sumnds TYPE excel-p_sumnds,
p_sum TYPE excel-p_sum,
p_nom TYPE excel-p_nom,
END OF fi_excel,

Code:
TYPES ts_excel TYPE fi_excel
TYPES tt_excel TYPE TABLE OF ts_excel

DATA: lt_temp_excel TYPE tt_excel

1) Нужно сгруппировать данные по полям NDZ, NPDZ.
2) Суммировать значения в полях P_SUMNDS, P_SUM.
3) Склеить через запятую поле P_NOM

Грубо говоря есть данные вида:
NDZ | NPDZ | P_SUMNDS | P_SUM | P_NOM
111 | 1 | 525 | 525 | 117
111 | 1 | -525| -525 | 118

Должно получиться
NDZ | NPDZ | P_SUMNDS | P_SUM | P_NOM
111 | 1 | 0 | 0 | 117, 118

При этом на вход я получаю такую же по структуре lt_excel

Первое что делаю, это копирую во временный массив
Code:
APPEND LINES OF lt_excel TO lt_temp_excel.
REFRESH lt_excel.

Далее нужно из временной таблицы с необходимым суммирование и конкатенацией записать данные в результирующую таблицу...

И вот тут у меня ступор, как это сделать? Где ни смотрю в темах, используется конструкция LOOP с применением SORT до цикла.

Code:
SORT lt_temp_excel BY ndz,npdz.
LOOP AT lt_temp_excel.
....
END LOOP.

Если не затруднит, поможете разобраться?

Я понимаю прекрасно, как написать запросом SELECT с GROUP BY в SQL. А вот в ABAP не приходилось программировать.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Группировка массива с суммированием и конкатенацией строк
СообщениеДобавлено: Чт, окт 09 2014, 03:34 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 09:41
Сообщения: 180
Можно попробовать сделать как-то так:
Code:
DATA lv_nom TYPE fi_excel-p_nom.

APPEND LINES OF lt_excel TO lt_temp_excel.
REFRESH lt_excel.

SORT lt_temp_excel BY ndz npdz.
LOOP AT lt_temp_excel.
  AT NEW npdz.
    CLEAR lv_nom.
  ENDAT.

  IF lv_nom IS INITIAL.
    lv_nom = lt_temp_excel-nom.
  ELSE.
    CONCATENATE lv_nom lt_temp_excel-nom SEPARATED BY ','.
  ENDIF.

  AT END OF npdz.
    SUM.
    lt_excel = lt_temp_excel.
    lt_excel-nom = lv_nom.
    APPEND lt_excel.
  ENDAT.
ENDLOOP.

Важно, чтобы в fi_excel поля ndz и pndz были первыми.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Группировка массива с суммированием и конкатенацией строк
СообщениеДобавлено: Чт, окт 09 2014, 11:23 
Начинающий
Начинающий

Зарегистрирован:
Ср, окт 08 2014, 13:32
Сообщения: 2
UKY написал(а):
Важно, чтобы в fi_excel поля ndz и pndz были первыми.


Они чуть ли не в конце, это так важно? Я думал в типизированном массиве по большому счету нет разницы, в каком месте описано поле.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Группировка массива с суммированием и конкатенацией строк
СообщениеДобавлено: Чт, окт 09 2014, 11:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
LE}{US "Добро пожаловать в наш фиговый мир"(С)
Цитата:
Они чуть ли не в конце, это так важно? Я думал в типизированном массиве по большому счету нет разницы, в каком месте описано поле.

1) вам показали код. в нем используются операторы, для нормальной работы которых нужно выполнение указанного условия (AT NEW, AT END OF). Причем, надо чтобы они не только были в начале, но и еще в нужном порядке. См.хелп
2) в абапе нет массивов. внутр.таблица издалека и в темноте на них только похожа

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


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

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


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

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


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

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