Текущее время: Пн, июл 28 2025, 23:23

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Проблема с Select-ом
СообщениеДобавлено: Пт, авг 14 2009, 19:37 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 19 2008, 21:02
Сообщения: 202
Откуда: Moscow, Russia.
Пол: Мужской
Добрый день. Подскажите плиз. У меня есть динамический селект который в новой версии системы отрабатывает на ура. Перенес программу в старую версию 4.6 селект перестал работать. Свёл к минимуму выборку (условие) и окозалось что он на отрез отказывается работать с оперетором IN.
Пример
Code:
        SELECT
         (lt_select_fields)
        FROM
         (l_tabname)
        APPENDING CORRESPONDING FIELDS OF TABLE
          pt_alv_tab
        WHERE
         (lt_condition).


Где в lt_condition храниться:

Code:
  APPEND 'bukrs EQ pr_bukrs AND' TO lt_condition[].       "#EC *
  APPEND 'gjahr IN pt_r_gjahr AND' TO lt_condition[].       "#EC *
  APPEND 'monat IN pt_r_monat AND' TO lt_condition[].       "#EC *
  APPEND 'budat IN pt_r_budat' TO lt_condition[].

Я так понял что проблема в IN. Как его можно обойти???

Пономарев Артем: пользуйтесь тэгами для оформления кода, пожалуйста.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Select-ом
СообщениеДобавлено: Пт, авг 14 2009, 23:41 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Не припоминаю никаких ограничений на использование конструкции IN в 4.6.
А вот насчет возможности использовать FROM (l_tabname) сильно сомневаюсь.
Если поля и условия для выбора можно в 4.6 задавать динамически, на источник эта возможность, если я правильно помню, не распространяется.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема с Select-ом
СообщениеДобавлено: Сб, авг 15 2009, 01:26 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
k_aleksei написал:
Я так понял что проблема в IN. Как его можно обойти???

Насколько я помню, в версии 4.6 в таблице условий селекта lt_condition[] допустимы только конструкции с константами типа: BUKRS = '1000'. Никаких переменных. Вероятно RANGE придется раскладывать вручную на опреаторы сравнений со значениями.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Select-ом
СообщениеДобавлено: Сб, авг 15 2009, 15:18 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
А таки да, Parazit прав. Глянул хелп для 4.6:
help.sap.com написал(а):
To specify a condition dynamically, use:

SELECT ... WHERE (<itab>) ...

where <itab> is an internal table with line type C and maximum length 72 characters. All of the conditions listed above except for selection tables, can be written into the lines of <itab>.

Обойти, видимо, только распарсиванием.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема с Select-ом
СообщениеДобавлено: Вс, авг 16 2009, 08:13 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Пономарев Артем написал:
Обойти, видимо, только распарсиванием.

ну или GENERATE SUBROUTINE POOL, если распарсивать очень не хочется

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Select-ом
СообщениеДобавлено: Пн, авг 17 2009, 10:51 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 19 2008, 21:02
Сообщения: 202
Откуда: Moscow, Russia.
Пол: Мужской
Parazit написал:
Насколько я помню, в версии 4.6 в таблице условий селекта lt_condition[] допустимы только конструкции с константами типа: BUKRS = '1000'. Никаких переменных. Вероятно RANGE придется раскладывать вручную на опреаторы сравнений со значениями.


НЕТ. Переменные там задаются:
APPEND 'bukrs EQ pr_bukrs AND' TO lt_condition[]. Я вроде бы указывал.
Потом "From" отрабатывает тоже отлично. Опять таки если условие я ставлю через "=".
Как только я пытаюсь поставить 'IN' - программ падает в дамп. В хелпе написано (я правдо не селен в английском, могу ошибаться) что операции выбора придется делать через индексы. Что за индексы? я никак понять не могу.

Пономарев Артем написал:
Обойти, видимо, только распарсиванием.


Это имеется в виду из Range перекладывать в переменные и добавлять в услвие черех равно, связывая оператором OR. Да?


ArmAnn написал:
ну или GENERATE SUBROUTINE POOL, если распарсивать очень не хочется


А что такое "GENERATE SUBROUTINE POOL"? Как им можно воспользоваться в данном примере?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Select-ом
СообщениеДобавлено: Пн, авг 17 2009, 11:00 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
k_aleksei написал:
А что такое "GENERATE SUBROUTINE POOL"? Как им можно воспользоваться в данном примере?

Если кратко - то можно на лету генерить подпрограммы, более подробно - тут.
По трудоемкости будет не проще чем разворачивать RANGE, но зато интереснее :)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с Select-ом
СообщениеДобавлено: Пн, авг 17 2009, 11:02 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
k_aleksei написал:
Это имеется в виду из Range перекладывать в переменные и добавлять в условия через равно, связывая оператором OR. Да?

Да. Именно так.
k_aleksei написал:
А что такое "GENERATE SUBROUTINE POOL"?

Посмотрите справку.
Этот оператор создает временный пул подпрограмм из вашего кода.
Соответственно в таком варианте IN должно работать.
Но есть и ограничения. Максимально можно создать 36 таких временных пулов.


k_aleksei написал:
В хелпе написано (я правдо не селен в английском, могу ошибаться) что операции выбора придется делать через индексы. Что за индексы? я никак понять не могу.

Процитируйте. Мне кажется вы неправильно поняли. Или это не имеет отношения к вашему случаю.
Я цитировал кусок хелпа, который однозначно говорит о том, что в 4.6 использование IN с seltab'ами в динамическом WHERE невозможно.


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

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


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

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


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

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