Текущее время: Вт, июл 29 2025, 12:00

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Двойная группировка в АБАП
СообщениеДобавлено: Чт, апр 26 2012, 10:29 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 15 2011, 15:02
Сообщения: 122
Согласен с zsap, что Native SQL, тем более для таких задач, зло.
В стандарте SAPа я не припомню программ, где данные из инфотипов выбираются с помощью select-ов.
Все делается через LBD или функции *READ_INFOTYPE.

Зачем простую задачу, подобных которой возникают десятки в HR модуле, решать с помощью костылей на Native SQL.

Запрос выборки данных из инфотипов и последующая выборка текстов это две разные задачи.
Разбейте задачу на куски.
Зачем пытаться запихать все выборки в один magic query :D , который выберет вам все данные.

_________________
Поздравляю тебя, Шарик, ты - балбес!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Двойная группировка в АБАП
СообщениеДобавлено: Чт, апр 26 2012, 11:10 
Начинающий
Начинающий

Зарегистрирован:
Вт, апр 24 2012, 09:49
Сообщения: 6
сначала обрадовался SQL, а потом долго ругался.... любая мелкая ошибка валит сессию САПА. решил использовать вариант от LATа:

Code:
SORT wa0009 BY massg.
LOOP AT wa0009 REFERENCE INTO r_pp0001.
  IF x_massg-massg <> r_pp0001->massg.
    x_massg-massg = r_pp0001->massg.
    x_massg-mgtxt = r_pp0001->mgtxt.
    APPEND x_massg TO t_massg.
  ENDIF.
  READ TABLE t_final REFERENCE INTO r_final WITH KEY orgeh = r_pp0001->orgeh.
  IF sy-subrc <> 0.
    APPEND INITIAL LINE TO t_final REFERENCE INTO r_final. " тут, возможно, мизерная потеря в производительности
    r_final->orgeh = r_pp0001->orgeh.
    r_final->orgtx = r_pp0001->orgtx.
  ENDIF.
  READ TABLE r_final->t_massg REFERENCE INTO r_massg WITH KEY massg = r_pp0001->massg.
  IF sy-subrc <> 0.
    APPEND INITIAL LINE TO r_final->t_massg REFERENCE INTO r_massg. " тут, возможно, мизерная потеря в производительности
    r_massg->massg = r_pp0001->massg.
    r_massg->count = r_massg->count + 1.
    add 1 to r_massg->count.
  ENDIF.
ENDLOOP.


вывел всё в эксель и красиво оформил.
одна проблема:
в таблице wa0009 три записи с причиной (massg=05):
    50020104 ЦТП БригадаПоРемВнешГазоп
    50020104 ЦТП БригадаПоРемВнешГазоп
    50020104 ЦТП БригадаПоРемВнешГазоп

а вот r_massg->count показывает "1" всегда.

короче всё работает. все причины учитываются, но только один раз. у меня итоговая таблица вышла только с 0 и 1.
ох и трудный этот САП.... всё исковырял... не могу найти причину.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Двойная группировка в АБАП
СообщениеДобавлено: Чт, апр 26 2012, 11:54 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
billion написал(а):
одна проблема:
в таблице wa0009 три записи с причиной (massg=05):
    50020104 ЦТП БригадаПоРемВнешГазоп
    50020104 ЦТП БригадаПоРемВнешГазоп
    50020104 ЦТП БригадаПоРемВнешГазоп
а вот r_massg->count показывает "1" всегда.

Я таки чуток набокопорил :). Но это радует: если свеженаписанная программа при первом же запуске работает, как следует, это не к добру...
Попробуйте заменить:
Code:
  READ TABLE r_final->t_massg REFERENCE INTO r_massg WITH KEY massg = r_pp0001->massg.
  IF sy-subrc <> 0.
    APPEND INITIAL LINE TO r_final->t_massg REFERENCE INTO r_massg. " тут, возможно, мизерная потеря в производительности
    r_massg->massg = r_pp0001->massg.
    r_massg->count = r_massg->count + 1.
    add 1 to r_massg->count.
  ENDIF.
на
Code:
  READ TABLE r_final->t_massg REFERENCE INTO r_massg WITH KEY massg = r_pp0001->massg.
  IF sy-subrc <> 0.
    APPEND INITIAL LINE TO r_final->t_massg REFERENCE INTO r_massg. " тут, возможно, мизерная потеря в производительности
    r_massg->massg = r_pp0001->massg.
  ENDIF.
  r_massg->count = r_massg->count + 1.

Примечание. add 1 to r_massg->count. - то же самое, что r_massg->count = r_massg->count + 1.

billion написал(а):
.... всё исковырял... не могу найти причину.
??? Ошибка очень простая.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Двойная группировка в АБАП
СообщениеДобавлено: Чт, апр 26 2012, 12:09 
Начинающий
Начинающий

Зарегистрирован:
Вт, апр 24 2012, 09:49
Сообщения: 6
ВО! заработало! я именно с этими строками и игрался. поэтому и на форум вставил код с двойной инкрементацией :) повставлял счётчики, поставил точки остановки, запустил дебаггер, код c IF комментировал по всякому, но именно инкремент вынести за IF не догадался. Спасибо! заработало! Задачка простая для тех кто в САПе хоть чуть-чуть шарит, а я в него третий день тока как залез :) на MS SQL я бы эту задачку за 10 минут не спеша бы нарисовал, а тут ни "чихнуть" ни "пукнуть" низя :)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2

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


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

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


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

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