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

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


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

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


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

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