Текущее время: Чт, июл 24 2025, 06:31

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


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

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


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

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