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

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


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

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


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

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