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

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


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

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


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

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