Текущее время: Вт, июн 24 2025, 14:39

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Метод/строка таблицы в виде параметра в запросе. Abap 7.40 sp08
СообщениеДобавлено: Вт, мар 17 2015, 08:30 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 13:06
Сообщения: 137
Добрый день.

Подскажите, можно ли реализовать нечто подобное:
Code:
select *
  from bkpf
  where bukrs in @class->method()
  into table @data(lt_bkpf).

Где class->method() возвращает табличку типа selopt? Вариант
Code:
burks in @lt_table[ field = 'value' ]
тоже не работает.

Хочется избежать промежуточного объявления переменных :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Метод/строка таблицы в виде параметра в запросе. Abap 7.40 sp08
СообщениеДобавлено: Вт, мар 17 2015, 11:30 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
вероятно @ пробелы не понимает


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Метод/строка таблицы в виде параметра в запросе. Abap 7.40 sp08
СообщениеДобавлено: Ср, мар 18 2015, 07:19 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 13:06
Сообщения: 137
То есть не побороть?.. Альтернатив, кроме объявления локальных переменных и чтения в них, я так понимаю, нет?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Метод/строка таблицы в виде параметра в запросе. Abap 7.40 sp08
СообщениеДобавлено: Ср, мар 18 2015, 08:59 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Чем вам не нравятся переменные? :?

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Метод/строка таблицы в виде параметра в запросе. Abap 7.40 sp08
СообщениеДобавлено: Ср, мар 18 2015, 10:14 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 13:06
Сообщения: 137
Без них как-то красивше и компактнее :lol:
Да и просто, если можно вызвать напрямую, зачем совершать лишние действия?)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Метод/строка таблицы в виде параметра в запросе. Abap 7.40 sp08
СообщениеДобавлено: Ср, мар 18 2015, 15:19 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Ну если совсем в оффтопик уходить, то переменные позволяют посмотреть перед использованием полученное значение. В случае с методом нужно еще поискать, где и как формируется результат :roll:
А лишние действия - это придумывать, как обойтись без переменных :wink:

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Метод/строка таблицы в виде параметра в запросе. Abap 7.40 sp08
СообщениеДобавлено: Чт, мар 19 2015, 05:12 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 09:41
Сообщения: 180
Sam Stone написал(а):
Хочется избежать промежуточного объявления переменных :)

К сожалению, OPEN SQL так не умеет, как и использование строковых шаблонов, цепочек методов и т.п. удобных штук.

Можно написать свою обёртку для OPEN SQL на классах. Тогда можно будет это всё использовать, но потеряется проверка синтаксиса.

ВНИМАНИЕ РЕКЛАМА!
Я пользуюсь своим велосипедом на классе, который расширяет возможности OPEN SQL и облегчает труд программиста.
Если интересно, могу скинуть в личку, но там много лишних действий делается для Вашей задачи и система у Вас новее, сам жду, когда у нас до 7.4 SP08 обновят, чтобы ещё удобнее всё сделать и быстрее...
Code:
  zcldev_dyndatbuf=>select(
    EXPORTING
      iv_table  = 'BSEG'        " Название таблицы для выборки
      i_key     = lt_income     " Ключ для выборки (первич.ключ/поле=<>значен/структура/таблица)
      iv_comp   =               " Компоненты структуры/таблицы I_KEY для выборки из таблицы + доп. фильтры
                  `BELNR=BELNR_MM `     &&
                  `GJAHR=ZGETDATE(4) `  &&
                  `WERKS `              &&
                  `XREF3=NLIST+6(10) `  &&
                  `AUGDT=&SY-DATUM& `   &&
                  `DMBTR>'0' `          &&
                  `WRBTR<=&I_VAR1& `    &&
                  `KOART=&I_VAR2& `     &&
                  `SHKZG=&I_VAR3& `
                  " Формат: фильтры, разделённые пробелом
                  " (поле таблицы)[знак[['константа'](компонент ключа[+смещение[(длина)]])['константа']]
                  "                    |[('константа')]
                  "                    |[(&переменная&)]
                  "               ]
      i_var1    = '100'         " Значение 1-ой переменной в фильтре (WRBTR<=&I_VAR1&)
      i_var2    = ls_bseg-koart " Значение 2-ой переменной в фильтре (KOART=&I_VAR2&)
      i_var3    = lr_shkzg      " 1-ый RANGE (SHKZG=&I_VAR3&)
      iv_append = 'X'           " Флаг добавления строк к возвращаемым данным (не очищ.E_DATA)
      iv_empty  = 'X'           " Флаг необходимости выборки из IV_TABLE по пустым ключам
                                " (с пустым BELNR_MM, ZGETDATE(4), WERKS, NLIST+6(10) в lt_income)
    IMPORTING
      e_data    = lt_bseg       " Таблица с выбранными данными (+ старые данные, т.к. iv_append = 'X')
      ev_subrc  = lv_subrc      " Флаг наличия выбранных данных
    CHANGING
      ct_buf    = gst_bseg      " Все когда-либо выбираемые данные из БД по этой таблице
                                " дублировать в буферную переменную gst_bseg
  ).
  " Делает примерно это
  DATA:
    lt_bseg_buf     LIKE lt_bseg[],
    lt_income_buf   LIKE lt_income[],
    ls_bseg_buf     LIKE LINE OF lt_bseg_buf,
    ls_income       LIKE LINE OF lt_income_buf.

  lv_subrc = zcldev_dyndatbuf=>c_subrc_no_data. " = 4

  " Формирование уникальных ключей
  lt_income_buf[] = lt_income[].
  SORT lt_income_buf BY belnr_mm zgetdate werks nlist.
  DELETE ADJACENT DUPLICATES FROM lt_income_buf COMPARING belnr_mm zgetdate werks nlist.

  LOOP AT lt_income_buf INTO ls_income.
    ls_income-zgetdate  = ls_income-zgetdate(4).
    ls_income-werks     = ls_income-werks(4).
    ls_income-nlist     = ls_income-nlist+6(10).
    MODIFY lt_income_buf FROM ls_income TRANSPORTING zgetdate werks nlist.

    " Выборка из буферной таблицы
    LOOP AT gst_bseg INTO ls_bseg_buf USING KEY werks_key
                     WHERE belnr  = ls_income-belnr_mm
                       AND gjahr  = ls_income-zgetdate(4)
                       AND werks  = ls_income-werks(4)
                       AND xref3  = ls_income-nlist+6(10)
                       AND augdt  = sy-datum
                       AND dmbtr  > '0'
                       AND wrbtr <= '100'
                       AND koart  = ls_bseg-koart
                       AND shkzg IN lr_shkzg.
      INSERT ls_bseg_buf INTO TABLE lt_bseg.
      DELETE lt_income_buf.
      lv_subrc = zcldev_dyndatbuf=>c_subrc_data_found.  " = 0
    ENDLOOP.
  ENDLOOP.

  IF NOT lt_income_buf[] IS INITIAL.
    " Выборка новых данных
    SELECT bukrs belnr gjahr buzei augdt koart shkzg mwskz dmbtr wrbtr werks xref3
    INTO TABLE lt_bseg_buf
    FROM bseg
    FOR ALL ENTRIES IN lt_income_buf
    WHERE belnr   = lt_income_buf-belnr_mm
     "AND gjahr   = lt_income_buf-zgetdate
     "AND werks   = lt_income_buf-werks
     "AND xref3   = lt_income_buf-nlist
      AND augdt   = sy-datum
      AND dmbtr  >  '0'
      AND wrbtr  <= '100'
      AND koart   = ls_bseg-koart
      AND shkzg  IN lr_shkzg.
    IF sy-subrc <> 0.
      lv_subrc = zcldev_dyndatbuf=>c_subrc_no_new_data. " = 8
    ENDIF.

    INSERT LINES OF lt_bseg_buf INTO TABLE: gst_bseg, lt_bseg.
  ENDIF.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Метод/строка таблицы в виде параметра в запросе. Abap 7.40 sp08
СообщениеДобавлено: Чт, мар 19 2015, 08:12 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 13:06
Сообщения: 137
Спасибо за ответы, буду юзать переменные :)
UKY, я думал над динамически собираемым запросом, в нем сложнее следить за ошибками/опечатками, которые сразу покажет редактор, поэтому мне дешевле объявить переменные :)
:pivo:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Метод/строка таблицы в виде параметра в запросе. Abap 7.40 sp08
СообщениеДобавлено: Чт, мар 19 2015, 08:22 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Sam Stone написал(а):
Спасибо за ответы, буду юзать переменные :)
UKY, я думал над динамически собираемым запросом, в нем сложнее следить за ошибками/опечатками, которые сразу покажет редактор

Динамически создаваемые запросы и оптимизировать сложнее, т.к. трассировка SQL будет переходить только к коду "велосипеда" ;)

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Метод/строка таблицы в виде параметра в запросе. Abap 7.40 sp08
СообщениеДобавлено: Чт, мар 19 2015, 10:20 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
Цитата:
разработки участников форума:
Изображение


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Метод/строка таблицы в виде параметра в запросе. Abap 7.40 sp08
СообщениеДобавлено: Чт, мар 19 2015, 10:24 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Поддержу Удава - эти велосипеды и динамически собираемые запросы по большей части только тешат самолюбие автора, а при дальнейшей доработке/поддержке/оптимизации это очень неудобная вещь (особенно если занимается этим уже не автор).
Помните про принцип KISS :)

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Метод/строка таблицы в виде параметра в запросе. Abap 7.40 sp08
СообщениеДобавлено: Пт, мар 20 2015, 05:02 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 09:41
Сообщения: 180
trop написал(а):
Цитата:
разработки участников форума:
Изображение

Зачотная картинка! Всё так и есть :)

Sam Stone, Удав, ArmAnn, я и не спорю, что теряется синтаксическая проверка (хотя это тоже решаемая проблема через ручной парсинг исходного кода + тестовые классы, но это та ещё задача...), что сложно использовать не автору, что это не так быстро, как нормально написанный код, но реально код становится проще именно для чтения, быстрее для написания и для изменения. Запросы генерируются простые, без всяких джоинов. Там и оптимизировать-то нечего - только правильные индексы подобрать :)

Никто и не заставляет использовать этот инструмент, а если встретится - то всегда можно посмотреть примеры и описание как это работает.

Просто лично меня огорчают ограничения в OpenSQL и чтобы избавиться от них я сделал прослойку (с детства люблю слойки!).

Вот, например, по теме - желание автора свой велосипед может решить, но появятся другие проблемы, да. Тут каждый решает для себя сам что ему нужнее :)

P.S.: Сам люблю проверку синтаксиса и анализатор кода, но ещё больше люблю писать меньше, читать и изменять быстрее ;)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Метод/строка таблицы в виде параметра в запросе. Abap 7.40 sp08
СообщениеДобавлено: Ср, апр 15 2015, 17:04 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, авг 18 2010, 15:38
Сообщения: 97
UKY написал(а):
но реально код становится проще именно для чтения, быстрее для написания и для изменения.

для вас. Подумайте о коллегах...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Метод/строка таблицы в виде параметра в запросе. Abap 7.40 sp08
СообщениеДобавлено: Чт, апр 16 2015, 19:55 
Специалист
Специалист

Зарегистрирован:
Вт, ноя 28 2006, 16:02
Сообщения: 114
На проектах может быть довольно жесткий аудит Z разработок, который предполагает полное отсутствие запросов с динамическими условиями.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Метод/строка таблицы в виде параметра в запросе. Abap 7.40 sp08
СообщениеДобавлено: Пт, апр 17 2015, 04:11 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 09:41
Сообщения: 180
Fugitive написал(а):
На проектах может быть довольно жесткий аудит Z разработок, который предполагает полное отсутствие запросов с динамическими условиями.

Ого, а вот про такое я даже и не задумывался...
Хорошо, что из велосипеда всегда можно легко переписать на OpenSQL+READ TABLE.

А вообще надеемся и ждём, что в 7.5 всё же появится возможность, которая нужна автору темы :)


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

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


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

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


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

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