Posted: Tue Nov 01, 2011 11:21 am Post subject: Альтернатива Collect и Control Level Processing
Такой вопрос: есть таблица полётов, по ней рассчитывается, скажем сумма проданных билетов с помощью оператора Collect и Control Level Processing. Как получить ту же сумму, не используя первых 2-х двух и НЕ ПРИМЕНЯЯ циклов? Цикл можно применить только для вывода уже сформированной информации.
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Tue Nov 01, 2011 5:11 pm Post subject:
Поясните вопрос:
Под таблицей полетов подразумевается таблица БД sflight или внутренняя таблица, в которую уже выбраны данные sflight?
Если внутренняя таблица, то что является "сформированной информацией" - результат ввода данных пользователем с помощью ALV?
В любом случае при вводе данных в ALV они запоминаются во внутренней таблице - это единственное место хранения актуальных данных.
И обработка этих данных доступна только с помощью цикла по внутренней таблице. Другое дело, что для подсуммирования необязательно использовать AT NEW и AT END OF. _________________ С уважением,
Удав.
Уважаемый удав, поясняю. С помощью Control level processing я выводила подсуммысуммы за конкретный период и выводила write-ами, используя информацию из sflight. С помощью оператора Collect была сформирована соответствующая внутренняя таблица с теми же нужными подсуммами по таблице sflight. Так вот, нужен 3-ий способ для подсуммирования. Вы сказали, что для этого необязательно использовать AT NEW и AT END OF. Так это сделать? Помогите, пожалуйста!
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Wed Nov 02, 2011 10:39 am Post subject:
Недостаток AT NEW...AT END заключается в том, что контрольные поля должны располагаться в начале внутренней таблицы.
Недостаток COLLECT в том, что формируется другая внутренняя таблица.
По произвольным полям подсуммирование осуществляется в ALV-Grid.
В общем случае задача решается с помощью динамического программирования. Если заранее известно, по каким полям нужно суммировать, то делается следующее:
1.Объявляется внутренняя таблица с именами полей для группировки it_sort
2.Объявляются 2 переменных (old_sort и curr_sort) такого же типа, что и строка таблицы
3.Заполняется таблица it_sort
4.Производится сортировка по нужным полям
5.В цикле по внутренней таблице:
а) присваиваются значения структуре curr_sort.
б) в curr_sort очищаются поля, которых нет в таблице it_sort
в) производится сравнение curr_sort и old_sort
г) если структуры не равны то:
-если old_sort непустая, выводится строка с суммами
-очищаются поля суммирования,
-производится присвоение old_sort = curr_sort.
д) в поля суммирования добавляются значения сумм из sflight
6.После окончания цикла выводятся поля сумм для последней группировки. _________________ С уважением,
Удав.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.