Текущее время: Сб, июл 19 2025, 23:43

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


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

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


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

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