Текущее время: Ср, июл 16 2025, 03:34

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


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

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


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

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