Текущее время: Сб, авг 23 2025, 10:11

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




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Очистка значений таблицы I_T_VAR_RANGE.
СообщениеДобавлено: Пт, фев 22 2013, 10:39 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, фев 21 2013, 13:16
Сообщения: 288
Всем привет.

Для формирования отчета в BEx Query Designer в моем случае нужны переменные типа Customer-Exit.
Как известно для этого используется транзакция CMOD и функция EXIT_SAPLRRS0_001 проекта RSR00001.
В этой функции находится INCLUDE ZXRSRU01, в котором и задается код для таких переменных.

Признак, на котором базируется мой отчет, имеет некоторую специфику.
Поэтому мне необходимо взять значения, введенные пользователем, и произвести некоторую выборку на их основе.
Но далее есть ньюанс, мне необходимо исключить значения введенные пользователем, так чтобы они вообще не попали в фильтр.

И вот здесь возникает проблема...
Насколько я понимаю, user-input всегда, в конечном счете, хранится в таблице I_T_VAR_RANGE.

Изображение

И казалось бы всё просто, надо всего-лишь очистить эти строки в этой таблице, и продолжить выполнение программы.

Я пробовал сделать это разными способами, например вот так:

Code:
DELETE I_T_VAR_RANGE WHERE VNAM = 'Z_DATE_UI'.


Причем как на уровне I_STEP = 2 так и на уровне I_STEP = 3.

И согласно отладчику - все ОК, эта строка успешно удаляется.
Но на следующем уровне, она возникает в I_T_VAR_RANGE снова, словно феникс из пепла.

Наверное, наиболее логично зачищать эту строку именно на уровне I_STEP = 3
Потому что, как я понимаю, он и нужен для подобных целей. Однако это не помогает...

Откуда же она берется снова?
Можно ли вообще как-то программно зачистить этот статический фильтр, чтобы он вообще никак не влиял на результаты отчета?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очистка значений таблицы I_T_VAR_RANGE.
СообщениеДобавлено: Пт, фев 22 2013, 11:25 
Почетный гуру
Почетный гуру

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
На I_STEP = 3 Вы можете только проверить введенные значения и либо принять их (тогда выполнение отчета идет дальше), либо отклонить с созданием особой ситуации и выводом сообщения (тогда процесс автоматически сбрасывается к I_STEP = 2, но добавить или удалить значения из I_T_VAR_RANGE на I_STEP = 3 Вы не можете.
Попробуйте на I_STEP = 2 добавить новую строку с теми данными, которые Вы хотели удалить, при этом в поле SING указать E (Exclude).

P.S. Переменная при этом вроде бы должна быть типа "Опция выбора".


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очистка значений таблицы I_T_VAR_RANGE.
СообщениеДобавлено: Пт, фев 22 2013, 12:35 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, ноя 26 2010, 20:07
Сообщения: 240
Пол: Мужской
Добрый день, если я правильно понимаю суть вопроса, то как вариант можно создать две переменные одна из которых - "Готова ко вводу" и заполняется вручную, пользователь вводит значения на СЭ, затем во второй переменной типа Customer-exit считываются на этапе I_STEP = 2 значения первой, производятся необходимые Вам расчеты, заполняется внутренняя таблица, E_T_RANGE для второй переменной.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Очистка значений таблицы I_T_VAR_RANGE.
СообщениеДобавлено: Пн, мар 04 2013, 10:46 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, фев 21 2013, 13:16
Сообщения: 288
Air_demon

Cпасибо за идею, попробовал так.
Однако, такой подход вызывает свои собственные трудности

Да, действительно, если пробовать такую комбинацию типов:
Переменная ввода (UI) = Interval, Кустомер-экзит-переменная (CE) = Interval.
И вот такой абап-код:

Code:
L_S_RANGE-SIGN = 'E'.
L_S_RANGE-OPT = 'BT'.
L_S_RANGE-LOW = low_date.
L_S_RANGE-HIGH = high_date.
APPEND L_S_RANGE TO e_t_range.


То возникает ошибка на уровне CE-переменной.

Если же использовать переменную типа Опция Выбора, то какая бы переменная ей не являлась (не важно, UI или CE, или обе), то возникает ошибка наподобие такой:
Изображение

Получается, что для атрибутов типа дата вообще нельзя использовать переменные Опция Выбора, так чтоли...

Но не понятно как реализовать эту идею с исключением диапазона.


Последний раз редактировалось Olapster Пн, мар 04 2013, 11:09, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очистка значений таблицы I_T_VAR_RANGE.
СообщениеДобавлено: Пн, мар 04 2013, 11:06 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, фев 21 2013, 13:16
Сообщения: 288
AlexanderGamov

Добрый день, а что означает фраза "пользователь вводит значения на СЭ"?

Но, если я правильно вас понял, я примерно так и делаю (точнее, я уже пробовал различные комбинации).
Однако возникают всяческие ньюансы, которые всё портят.

В моем случае переменная-1 (Customer Exit, Multiple Single Values) берет значения из переменной-2 (User Input, Interval)
И посредством SELECT на основании переменной-2 формирует выбор из 5 значений которые попадают в E_T_RANGE.
И на этом этапе все работает верно, и так как нужно.

Однако, тот факт что переменная-2 все-таки содержит некий диапазон, то он остается в I_T_VAR_RANGE, и в последствии искажает эту мою правильную выборку из 5 значений.

Причем, мне индусы на другом форуме подсказали, что во вкладке Фильтр значения более глобальны, пробуй делать через Ограниченные Показатели. Ну я попробовал сделать и так, но это помогает лишь отчасти (если диапазон не соприкасается с sy-datum), плюс дает дополнительные проблемы, связанные с обязательностью ввода...

Фишка в том, что у меня есть другой почти такой же отчет, он не требует ввода от пользователя, и юзает только I_STEP = 1 уровень.
И в нем стоит точно такой же SELECT что и здесь. И все прекрасно работает. Но вот стоит только пропускать все через I_STEP=2, то сразу идут искажения.

Простейшим решением проблемы была бы просто возможность зачистки I_T_VAR_RANGE, однако может быть это вообще невозможно (у нас кстати SAP GUI 7.20). Если это так, то жаль, тогда придется выдумывать какие-то шаманские фокусы. В принципе, если интересно, я могу описать задачу подробнее, это в целом несложный отчет на базе признака с составным ключем (вкладка Compound). Возможно есть какое-то более оптимальное решение.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очистка значений таблицы I_T_VAR_RANGE.
СообщениеДобавлено: Пн, мар 04 2013, 12:48 
Почетный гуру
Почетный гуру

Зарегистрирован:
Чт, фев 03 2005, 10:18
Сообщения: 503
Olapster написал(а):
Да, действительно, если пробовать такую комбинацию типов:
Переменная ввода (UI) = Interval, Кустомер-экзит-переменная (CE) = Interval.
И вот такой абап-код:

Code:
L_S_RANGE-SIGN = 'E'.
L_S_RANGE-OPT = 'BT'.
L_S_RANGE-LOW = low_date.
L_S_RANGE-HIGH = high_date.
APPEND L_S_RANGE TO e_t_range.


То возникает ошибка на уровне CE-переменной.

Какая ошибка?
Если ругается, что нельзя применить L_S_RANGE-SIGN = 'E', то поставьте "I" и попробуйте сделать исключение на уровне определения ограничений в QD.
Изображение
Olapster написал(а):
Если же использовать переменную типа Опция Выбора, то какая бы переменная ей не являлась (не важно, UI или CE, или обе), то возникает ошибка наподобие такой:

А переменные находятся в разных областях запроса (одна в фильтре, другая в значениях по умолчанию)?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очистка значений таблицы I_T_VAR_RANGE.
СообщениеДобавлено: Вт, мар 05 2013, 10:05 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, фев 21 2013, 13:16
Сообщения: 288
Цитата:
Какая ошибка?


Вот такая, весьма невнятная:
Изображение
Изображение

Цитата:
Если ругается, что нельзя применить L_S_RANGE-SIGN = 'E', то поставьте "I" и попробуйте сделать исключение на уровне определения ограничений в QD.

[s]Почему-то у меня эта опция не всегда доступна. Как-то раньше мне удалось включить исключение для старой переменной типа даты, а вот теперь эта кнопка почему-то не активна.
Изображение
Есть какая-то специфика?[/s]
C этим моментом разобрался. Просто переменная не была сохранена.

[s]Но даже когда я вставлял старую переменную таким образом, получалось вот такое:
Изображение
То есть вероятно гарантии нет, но я еще пробую как-то подкручивать.[/s]
Ошибки удалось избежать, продолжаю экспериментировать.


Последний раз редактировалось Olapster Вт, мар 05 2013, 11:04, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очистка значений таблицы I_T_VAR_RANGE.
СообщениеДобавлено: Вт, мар 05 2013, 10:11 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, фев 21 2013, 13:16
Сообщения: 288
Цитата:
А переменные находятся в разных областях запроса (одна в фильтре, другая в значениях по умолчанию)?


Я пробовал по всякому. Сначала переменные были в области "Фильтр" причем по такому принципу:

Атрибут1:
Переменная ввода1
Переменная C-Exit1

Атрибут2:
Переменная ввода2
Переменная C-Exit2

Причем Переменна С-Еxit2 использует для своей работы Переменную Ввода1.

Впоследствии, я перешел на чуть более результативный подход:
Изображение

Однако тут возникают свои проблемы: эти переменные, вмонтированные в ограниченный показатель (или это точнее сказать "локальный выбор?", потому что он только для отчета создался), почему-то превращаются в ОБЯЗАТЕЛЬНЫЕ, а это не желательно.
И там еще остается проблема неправильного прощета, когда диапазон касается sy-datum.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очистка значений таблицы I_T_VAR_RANGE.
СообщениеДобавлено: Пн, мар 11 2013, 08:51 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, фев 21 2013, 13:16
Сообщения: 288
ОК, отчасти всё получилось.

Но, конешно, вопрос очистки этой таблицы так и остается открытым.

Но в моем случае удалось применить обходной маневр этой проблемы.
Спасибо Air_Demon'у за поддержку.

По иронии, главная загвоздка была в том, что UI-переменная была типа "Интервал", а СЕ-переменная "Несколько значений".
Не заметив этого момента, я потратил много времени на попытку обойти "вероятные системные ограничения", а ларчик просто открывался.

В результате нашлось такое решение, CE-переменная превращается в диапазон от 00000000 до sy-datum, что модифицирует диапазон введенный пользователем.


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

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


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

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


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

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