Текущее время: Сб, авг 02 2025, 05:53

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Динамическое условие в if
СообщениеДобавлено: Пт, мар 27 2009, 11:26 
Начинающий
Начинающий

Зарегистрирован:
Пт, мар 27 2009, 11:15
Сообщения: 5
Некий функциональный модуль возвращает мне строку с условием в виде
" (tab1.a = 3 or tab1.a = 7) and tab1.b ='Москва' "
По этому условию я должен фильтровать внутреннюю таблицу tab1. Если бы я мог использовать select с внутренними таблицу проблем бы не было. Я бы воткнул бы строку условие в переменную, обрамил бы ее скобками и использовал в where.
А как быть если я пользую loop и if??

P.S. Прошу прощения если недоискал


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое условие в if
СообщениеДобавлено: Пт, мар 27 2009, 12:05 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
Если не ошибаюсь, то в 7.1 обещали что-то реализовать для loop.
А так, видимо, придется разбирать строчку и при желании воспользоваться GENERATE SUBROUTINE-POOL для создания програм обработки.

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое условие в if
СообщениеДобавлено: Пт, мар 27 2009, 12:13 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пн, май 14 2007, 13:05
Сообщения: 561
Откуда: Москва
lomancool написал(а):
" (tab1.a = 3 or tab1.a = 7) and tab1.b ='Москва' "
Парсить строчку по любому и использовать Ranges
Code:
r_a = 3,7   r_b = 'Москва'
loop at itab where a in r_a and b in r_b

_________________
Sapere aude!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое условие в if
СообщениеДобавлено: Пт, мар 27 2009, 12:16 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, ноя 01 2004, 12:17
Сообщения: 298
Пол: Мужской
Макросом?
примерно так:
DEFINE my_dynamic_check.
if &1.
write:/ 'Success'.
else.
write:/ 'Failed'.
endif.
END-OF-DEFINITION.

Вызов: my_dynamic_check you_condition


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое условие в if
СообщениеДобавлено: Пт, мар 27 2009, 12:27 
Начинающий
Начинающий

Зарегистрирован:
Пт, мар 27 2009, 11:15
Сообщения: 5
N/A написал(а):
lomancool написал(а):
" (tab1.a = 3 or tab1.a = 7) and tab1.b ='Москва' "
Парсить строчку по любому и использовать Ranges
Code:
r_a = 3,7   r_b = 'Москва'
loop at itab where a in r_a and b in r_b


Парсить клево если я точно знаю сколько полей у меня используется и каких, в моем случае это не так.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое условие в if
СообщениеДобавлено: Пт, мар 27 2009, 12:29 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
N/A написал(а):
lomancool написал(а):
" (tab1.a = 3 or tab1.a = 7) and tab1.b ='Москва' "
Парсить строчку по любому и использовать Ranges
Code:
r_a = 3,7   r_b = 'Москва'
loop at itab where a in r_a and b in r_b


Хорошая мысль.
Только кол-во ranges не понятно и их тип, хотя можно предусмотреть, конечно, на какие-то определенный поля.

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


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

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

To Lars: По рэйнджам - т.к. пустые рэйнджи не учитываются - объявить штук десять-двадцать как TYPE ANY TABLE и все.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическое условие в if
СообщениеДобавлено: Пт, мар 27 2009, 12:35 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
Пономарев Артем написал:
lomancool, парсинг, в общем случае, и нужен чтобы разобрать любую строку ;)
Смотрите в сторону регулярных выражений.

To Lars: По рэйнджам - т.к. пустые рэйнджи не учитываются - объявить штук десять-двадцать как TYPE ANY TABLE и все.


Смотреть в сторону регулярных выражений нужно, но легче повеситься, учитывая вложенные скобки :)
Рэйнджи - все ли так просто, учитывая возмоджную необходимость преобразования форматов, строки и ведущие нули?

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


Последний раз редактировалось Lars Пт, мар 27 2009, 12:42, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое условие в if
СообщениеДобавлено: Пт, мар 27 2009, 12:39 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
lomancool написал(а):

Парсить клево если я точно знаю сколько полей у меня используется и каких, в моем случае это не так.


А что за модуль возвращает Вам эту строку и на какой основе он её получает?
Исходные данные у него какие-то есть для того чтобы её сформировать?
Не CONVERT_SELECT_INTO_WHERE ?

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое условие в if
СообщениеДобавлено: Пт, мар 27 2009, 13:23 
Начинающий
Начинающий

Зарегистрирован:
Пт, мар 27 2009, 11:15
Сообщения: 5
Пономарев Артем написал:
lomancool, парсинг, в общем случае, и нужен чтобы разобрать любую строку ;)
Смотрите в сторону регулярных выражений.

To Lars: По рэйнджам - т.к. пустые рэйнджи не учитываются - объявить штук десять-двадцать как TYPE ANY TABLE и все.


Я понимаю смысл слова парсить, и имею представление о регулярных выражениях.
Меня смущает то что для того чтобы написать условие в таком виде:
loop at itab where a in r_a and b in r_b
мне необходимо точно знать какие поля есть в моей таблице tab1 и сколько их. Я не располагаю заранее такой информацией. Да я могу ее выудить из строки, но в том то и вопрос как подставить ее в условие... :?:

Функциональный модуль мой же, условия он формирует из нескольких таблиц(не из исходной).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое условие в if
СообщениеДобавлено: Пт, мар 27 2009, 13:36 
Начинающий
Начинающий

Зарегистрирован:
Пт, мар 27 2009, 11:15
Сообщения: 5
RA написал:
Макросом?
примерно так:
DEFINE my_dynamic_check.
if &1.
write:/ 'Success'.
else.
write:/ 'Failed'.
endif.
END-OF-DEFINITION.

Вызов: my_dynamic_check you_condition


Не совсем врубился как я смогу фильтровать записи в loop, разве DEFINE может вернуть какое либо значение?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое условие в if
СообщениеДобавлено: Пт, мар 27 2009, 14:18 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, ноя 01 2004, 12:17
Сообщения: 298
Пол: Мужской
Был неправ.

Предполагалось следующее:

[code]

DEFINE my_dynamic_check.
if &1 &2 &3 .
&4 = 1.
else.
&4 = 0.
endif.
END-OF-DEFINITION.

my_dynamic_check var1 eq var2 result.
" my_dynamic_check var1 GE var2 result.

IF result = 1.
WRITE:/ 'Success'.
ENDIF.


но для вашего случая это не подойдет. :-(.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое условие в if
СообщениеДобавлено: Пт, мар 27 2009, 14:35 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
lomancool написал(а):
Некий функциональный модуль возвращает мне строку с условием в виде
" (tab1.a = 3 or tab1.a = 7) and tab1.b ='Москва' "
По этому условию я должен фильтровать внутреннюю таблицу tab1. Если бы я мог использовать select с внутренними таблицу проблем бы не было. Я бы воткнул бы строку условие в переменную, обрамил бы ее скобками и использовал в where.
А как быть если я пользую loop и if??

P.S. Прошу прощения если недоискал

Если не очень критично быстродействие, то можно попробовать воспользоваться ФМ из группы функций 'CALC'

_________________
"После" - не значит "вследствие"


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

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
lomancool, если до вечера не решите проблему - напишу вариант с разбором строки и рэнджами. Сейчас работа, времени нет.
Это несложно.
Единственное ограничение, на которое Lars уже обратил внимание: в строке для разбора значения должны совпадать с внутренним представлением САПа.
Хотя тоже решаемо. Можно вытащить подпрограмму преобразования из словаря.


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

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
Мне кажется несколько нелогичным распарсивать строку, которая и так была создана динамически неким ФМ, который знает и поля и значения.

Опять же насколько сложной может быть возвращаемая строка.
Например при такой:
(tab1.f1 = 1 and tab1.f2 = 2 ) or ( tab1.f1 = 3 and tab2.f2 = 4 )

range не помогут, как мне кажется.

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


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

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


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

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


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

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