Текущее время: Ср, май 14 2025, 13:05

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Помогите пожалуйста с выводом внутренней таблицы
СообщениеДобавлено: Сб, фев 26 2005, 18:24 
Гость
Господа, нужна помощь.
Возможно ли в ABAP при LOOP по внутренней таблице как-нибудь добиться

следующего, чтобы не создавать кучу дополнительных таблиц.

Имеется внутрення таблица:
----------------------------------
| finpoz | reg | kontr | summ |
----------------------------------
| 55555 | 77 | 85 | 111.00 |
----------------------------------
| 55555 | 77 | 86 | 222.00 |
----------------------------------
| 77777 | 63 | 81 | 0.00 |
----------------------------------
| 55555 | 77 | 87 | 333.00 |
----------------------------------
| 77777 | 63 | 85 | 0.00 |
----------------------------------
| 77777 | 63 | 86 | 555.00 |
----------------------------------
| 77777 | 63 | 87 | 444.00 |
----------------------------------

Как из нее вывести из нее на экран:

-------------------
| ФинПоз | Сумм |
-------------------
| 55555 | 666.00 |
-------------------
| 55555 | 999.00 |
-------------------

Заранее благодарен за ответ.

P.S.> Удалять записи при группировке нельзя, потому что потом надо делать деталицацию, где опять же, придется группировать записи по 55555 (в данном примере) и по полю reg (77 и 63).

Помогите пожалуйста.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб, фев 26 2005, 18:36 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Без дополнительной таблицы по-моему никак. Для суммирования используется оператор COLLECT - все поля числовых типов он суммирует, а символьные поля использует в качестве ключа.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Вопрос
СообщениеДобавлено: Сб, фев 26 2005, 18:40 
Гость
Понятненько.
Я вот тоже подумал что не так.
А не мог бы примерчик кинуть небольшой с COLLECT.
Чтобы понять как он работает.
А то я из дома. Завтра надо уже задание делать срочно.

Небольшой код, можно даже, если несложно конечно, относительно моего примера как это сделать.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения: Re: Вопрос
СообщениеДобавлено: Сб, фев 26 2005, 18:57 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вс, окт 17 2004, 14:20
Сообщения: 326
Откуда: Москва
rodendrоn написал(а):
Понятненько.
Я вот тоже подумал что не так.
А не мог бы примерчик кинуть небольшой с COLLECT.
Чтобы понять как он работает.
А то я из дома. Завтра надо уже задание делать срочно.

Небольшой код, можно даже, если несложно конечно, относительно моего примера как это сделать.


Посмотри здесь:
http://help.sap.com/saphelp_47x200/helpdata/en/fc/eb36d5358411d1829f0000e829fbfe/frameset.htm


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

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Ну примерно так:
считаем, что первая табличка называется itab
потребуется еще таблица для сумм (total_itab) с двумя полями finpos и summ.

Code:
loop at itab.
  clear total_itab.
  total_itab-finpos = itab-finpos.
  total_itab-summ = itab-summ.
* здесь можно и move-corresponding использовать
  collect total_itab.
endloop.

после этого в total_itab соберутся суммы по уникальным finpos.

Вообще, я так подумал, что если просто write'ом в список суммы вывести надо, то можно обойтись и без дополнительной таблицы: надо сначала отсортировать таблицу по finpos, а потом использовать at new. Примерно так:

Code:
sort itab by finpos.
loop at itab.
  at new finpos.
    sum.
    write: / itab-finpos, itab-summ.
  endat.
  ...
endloop.


sum просуммирует все числовые поля только для одной текущей finpos.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб, фев 26 2005, 21:31 
Гость
Сереж, прости что достал вопросами.
Просто аж завтра выхожу на работу к 8 утра и поэтому до этого времени очень нужна помощь.

Да, вывожу я просто write'ами.

Тут два вопроса по:
sort itab by finpos.
loop at itab.
at new finpos.
sum.
write: / itab-finpos, itab-summ.
endat.
...
endloop.

1) "... " ты зачем поставил? Тут еще что-то подразумевал, если да, то что?
2) А этот код будет работать если его использовать в моем примере с этими 2 табличками?

Кстати мне потом при двойном щелчке на finpos надо будет вывести уже суммы по полю reg.
Но это я так понимаю можно сделать так же, определить ту finpos, по которой щелкнули, и сделать:
sort itab by finpos.
loop at itab where finpos = finpos_screen.
at new reg.
sum.
write: / itab-reg, itab-summ.
endat.
...
endloop.
Только опять же чего означают "..." ? ))
А так я так понимаю что правильно понял.
Помоги еще раз пожалуйста...


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, фев 27 2005, 11:36 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Ничего страшного в трех точках нету, я их поставил в том смысле, что там может быть еще "какой-то" код. :lol:

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Как убрать накопление списков
СообщениеДобавлено: Вс, фев 27 2005, 15:05 
Гость
Оки спасибо большое за помощь!
Все работает.

Еще вопрос есть.
Создан свой статус в котором есть кнопки меню.
Так вот, при их нажатии (пересчитать в рублях, в тыс. руб.), у меня формируется много списков.
В связи с этим вопрос. Как сделать чтобы они не копились?
И на функцию BACK повесить код, в общем сделать так, чтобы при нажатии "Назад" у меня выводился самый первый список.

Смысл общий такой.
Я вывел отчет. Потом понажимал на кнопки. Пощелкал посмотрел детализацию. Потом поредактировал записи. Потом нажал "Назад" и попал на самый первый лист, но с обновленными данными.

LEAVE SCREEN, LEAVE LIST-PROCESSING и т.д. - выкидывает на селекционный экран

Заранее благодарен за ответ.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, фев 27 2005, 17:00 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Попробуй по кнопке BACK установить SY-LSIND (точно не помню как называется, не в системе я) - индекс списка в 1 (или в 0).

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, фев 27 2005, 18:13 
Гость
Оки я как раз об этом подумал, но хотел узнать.
Назвал ты его точно правильно. Но системные параметры точно можно менять?


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, фев 27 2005, 19:43 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Можно, можно..

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, фев 27 2005, 20:41 
Гость
Спасибки. Завтра попробуем.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, мар 01 2005, 02:22 
Гость
Раз уж тебе нужны обновленные данные, то выборку надо перечитывать, значит с чистой совестью можно на BACK повесить запуск этого же отчета с этими же параметрами ...
например на селекционном экране у тебя параметр p_bukrs и селект-опшн so_dat ... на BACK вешаешь:
Code:
submit <сам себя> with p_bukrs = p_bukrs with so_dat in so_dat.


только and return в сабмите не ставь :)


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, мар 20 2005, 16:31 
Гость
Прикольно,
Я даже не успел просто и услышать об этом.
Столько нового узнаю
то есть я так понял, что на пальцах это выглядит так:

submit my_program with p_bukrs = p_bukrs with so_dat in so_dat.

Где my_program - программа
а остальное - параметры селекционного экрана?


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 21 2005, 03:30 
Гость
rodendron написал(а):
submit my_program with p_bukrs = p_bukrs with so_dat in so_dat.

Где my_program - программа
а остальное - параметры селекционного экрана?


совершенно верно ...


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

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


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

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


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

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