Текущее время: Чт, июл 17 2025, 11:09

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Не очищается E_T_RANGE?
СообщениеДобавлено: Пн, авг 25 2008, 22:13 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 18 2008, 17:00
Сообщения: 110
Откуда: From Hell
Пол: Мужской
Всем вечер добрый.
Есть отчет, в нем 2 признака - Country и Region.

Значения основных данных для Country: 0001, 0002.
Значения основных данных для Region: 10, 20.

Хочу сделать так, чтобы в зависимости от значения Country в отчете выводились только соответствующие значения для Region (какой-то логической связи между ними нет, просто хочу, чтобы отрабатывала моя выдуманная связь). Например, для 0001, чтобы выводилось 10; а для 0002 выводилось 20.

Что делаю:
1. Для Country делаю переменную, которую пользователь заполняет вручную при старте отчета в аналайзере.
2. Значение Region определяю в ZXRSRU01. Код вот такой:
Цитата:
*&---------------------------------------------------------------------*
*& Include ZXRSRU01
*&---------------------------------------------------------------------*

DATA: L_S_RANGE TYPE RSR_S_RANGESID.
DATA: L_S_VAR_RANGE TYPE RRRANGEEXIT.


CLEAR E_T_RANGE.

CASE I_VNAM.

WHEN 'Region'.

IF I_STEP = 2.
LOOP AT I_T_VAR_RANGE INTO L_S_VAR_RANGE
WHERE VNAM = 'Country'.

IF SY-SUBRC = 0.
CLEAR L_S_RANGE.

L_S_RANGE-SIGN = 'I'.
L_S_RANGE-OPT = 'EQ'.

IF L_S_VAR_RANGE-LOW = '#'.
L_S_RANGE-LOW = '#'.
ENDIF.

IF L_S_VAR_RANGE-LOW = '0001'.
L_S_RANGE-LOW = '10'.
ENDIF.

IF L_S_VAR_RANGE-LOW = '0002'.
L_S_RANGE-LOW = '20'.
ENDIF.


APPEND L_S_RANGE TO E_T_RANGE.

ENDIF.
ENDLOOP.
ENDIF.


ENDCASE.


Обе переменные вставил в фильтр запроса.

Теперь, собственно, вопросы...
Задачу, которую я описал вначале, код решает на ура. Но. :roll:
1. Если "закомментарить" часть кода, в которой обрабатывается ввод 0002 пользователем, то все равно для 0002 значение региона в отчете выведется 20. Несмотря на то, что вначале кода у меня стоит очистка E_T_RANGE. В чем же дело, откуда аналайзер берет, что для 0002 надо выводить 20?!

2. Кроме того, если я хочу, чтобы при Country = '0002' выводилось не одно значения региона, а все значения основных данных, соответствующим образом исправляю код, то аналайзер выдает ошибку :evil: Как сделать так, чтобы при вводе страны 0002 выводились все значения региона :?:

Для начала, пожалуй, хватит. Вобщем, кто достаточно много работал с user-exit, надеюсь на ваши ответы. Где я не прав? :?

P.S. Если что непонятно объяснил, буду уточнять...

_________________
В 9.00 начался и в 00.45 закончился 7-й 8-часовой рабочий день 5-дневной рабочей недели...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, авг 26 2008, 09:31 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пт, окт 21 2005, 09:24
Сообщения: 832
Откуда: от верблюда...тоже:)
Пол: Мужской
1 если хотите очищать таблицы - делайте это правильно...хотя бы так:
clear: e_t_range, e_t_range[].
немного не понятно в какой момент у вас это происходит. что там у вас - отчет или книжка...какие типы переменных.
2. переменная Region - с множественным выбором?

_________________
а подпись...а подписи не будет :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, авг 26 2008, 10:01 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 18 2008, 17:00
Сообщения: 110
Откуда: From Hell
Пол: Мужской
Blizzard написал:
1 если хотите очищать таблицы - делайте это правильно...хотя бы так:
clear: e_t_range, e_t_range[].

А можете объяснить, что значит очищение e_t_range[]? Не встречал пока такого синтаксиса... :roll:

Blizzard написал:
немного не понятно в какой момент у вас это происходит. что там у вас - отчет или книжка...какие типы переменных.

В какой момент?.. Этим вопросом, честно говоря, Вы меня в тупик ставите...

Вобщем, уя создал отчет, который запускаю в аналайзере. Простенькую логику (сопоставление одиночных значений) - он делает. Как только пытаюсь изменить код (шаг влево, шаг вправо), наченаются "чудеса".
Первое, что меня повергло в ступор - это то, что, когда я закомментарил кусок когда, относящийся к обработке ввода значения 0002, - он продолжал отрабатывать как прежде. Ни тебе ругательств, что значение переменной не определено, ни тебе чего другого... Как будто где-то в кеше засело - и делай что хочешь. Вот и српашиваю - кто виноват и что делать :lol:
Потом попробовал при вводе 0002 руками сделать так, чтобы выводилось не одно значения для региона, а несколько (в моем случае 2, но не принципиально). Но тут уже система ругаться начала на ошибки (логические, а не синтаксические), хотя я обработку L_S_RANGE внутрь IF...END IF запихивал... Как такую простенькую задачку сделать (т.е. если ввожу 0001, то хочу, чтобы регион был 10; если ввожу 0002, то хочу, чтобы регион был {10, 20})?

Blizzard написал:
2. переменная Region - с множественным выбором?

Это вы об определении переменной говорите? Что-то я это упустил из виду, сейчас гляну :roll:

_________________
В 9.00 начался и в 00.45 закончился 7-й 8-часовой рабочий день 5-дневной рабочей недели...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, авг 26 2008, 10:13 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 18 2008, 17:00
Сообщения: 110
Откуда: From Hell
Пол: Мужской
Да, Близзард, Вы телепат. Я создал переменную с single value и пытаюсь в нее диапазон втиснуть :shock:
Сейчас, попробую исправить на интервал и посмотреть, что получился :P

P.S. Я правильно понимаю, что даже если переменная имеет "тип" интервал, то для того, чтобы она содержала только одно значение, вполне корректно присваивать только LOW :?:

_________________
В 9.00 начался и в 00.45 закончился 7-й 8-часовой рабочий день 5-дневной рабочей недели...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, авг 26 2008, 10:26 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пт, окт 21 2005, 09:24
Сообщения: 832
Откуда: от верблюда...тоже:)
Пол: Мужской
InMyMind написал:
Да, Близзард, Вы телепат. Я создал переменную с single value и пытаюсь в нее диапазон втиснуть :shock:
Сейчас, попробую исправить на интервал и посмотреть, что получился :P

P.S. Я правильно понимаю, что даже если переменная имеет "тип" интервал, то для того, чтобы она содержала только одно значение, вполне корректно присваивать только LOW :?:

Сам ты телепат :lol: :lol: :lol: :lol: Шуткую я :lol:
команда clear e_t_range[] очищает саму таблицу а команда clear e_t_range только ворк арею :lol:
На счет того что засело в кеше...сие вполне возможно. Закрой аналайзер и открой снова. а ещё очень советую в логику вставить внешнюю точку останова...это такая с человечком...это тебе поможет протрассировать что же ты там всамом деле наколбасил

_________________
а подпись...а подписи не будет :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, авг 26 2008, 12:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
InMyMind написал:
А можете объяснить, что значит очищение e_t_range[]? Не встречал пока такого синтаксиса... :roll:


В готовом коде -- встречается повсюду.
А в книжках пишут про refresh e_t_range.

_________________
Глаза боятся, а руки крюки


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

Зарегистрирован:
Пн, авг 18 2008, 17:00
Сообщения: 110
Откуда: From Hell
Пол: Мужской
Попробовал сделать так:
Цитата:
CLEAR L_S_RANGE.

IF L_S_VAR_RANGE-LOW = '#'.
L_S_RANGE-SIGN = 'I'.
L_S_RANGE-OPT = 'EQ'.
L_S_RANGE-LOW = '#'.
ENDIF.

IF L_S_VAR_RANGE-LOW = '0001'.
L_S_RANGE-SIGN = 'I'.
L_S_RANGE-OPT = 'BT'.
L_S_RANGE-LOW = '10'.
L_S_RANGE-HIGH = '20'.
ENDIF.

IF L_S_VAR_RANGE-LOW = '0002'.
L_S_RANGE-SIGN = 'I'.
L_S_RANGE-OPT = 'EQ'.
L_S_RANGE-LOW = '20'.
ENDIF.

Ругается, что указываю "BT" (установил опытным путем, что именно на это :roll: )
Если указываю "EQ". то значение HIGH для 0001 вообще игнорится :cry:

Создал переменную со значениями "Интервал". Добился того, что в отчет выводится набор значений для Region. НО!
Если Country = '#', то хочу присвоить Region = '#', в итоге выпадает ошибка "Для переменной не удалось определить значения". Как быть?
Присваиваю так:
Цитата:
IF SY-SUBRC = 0.
CLEAR L_S_RANGE.


L_S_RANGE-SIGN = 'I'.
L_S_RANGE-OPT = 'BT'.


IF L_S_VAR_RANGE-LOW = '#'.
L_S_RANGE-LOW = '#'.
L_S_RANGE-HIGH = '#'.
ENDIF.

IF L_S_VAR_RANGE-LOW = '0001'.
L_S_RANGE-LOW = '10'.
L_S_RANGE-HIGH = '20'.
ENDIF.

Усё, поборол-таки я все ошибки. User-exit делает все. что я от него хотел :!:

_________________
В 9.00 начался и в 00.45 закончился 7-й 8-часовой рабочий день 5-дневной рабочей недели...


Последний раз редактировалось InMyMind Вт, авг 26 2008, 14:08, всего редактировалось 5 раз(а).

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, авг 26 2008, 12:41 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 18 2008, 17:00
Сообщения: 110
Откуда: From Hell
Пол: Мужской
G написал:
В готовом коде -- встречается повсюду.
А в книжках пишут про refresh e_t_range.

Я пока только пару саповских хаутушек прочитал, там такого не было.. :oops:
А что за книжки, если не секрет? Не по АБАПу же? :roll:

_________________
В 9.00 начался и в 00.45 закончился 7-й 8-часовой рабочий день 5-дневной рабочей недели...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, авг 26 2008, 13:46 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
InMyMind написал:
А что за книжки, если не секрет? Не по АБАПу же? :roll:


По ABAP! :)

_________________
Глаза боятся, а руки крюки


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

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


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

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


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

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