Текущее время: Пн, июл 21 2025, 05:06

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Listbox обработка при нажатии Enter
СообщениеДобавлено: Пт, ноя 28 2008, 15:34 
Специалист
Специалист

Зарегистрирован:
Чт, ноя 06 2008, 18:46
Сообщения: 114
Откуда: Moscow
На экране имеется Listbox.
Выпадающий список заполняю с помощью функции 'VRM_SET_VALUES'.
Все работает, но хотелось бы чтобы обработка происходила не сразу после выбора значения из выпадающего списка, а только после нажатия на Enter.
Подскажите пожалуйста как это сделать.


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

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Не надо код функции этому лист-боксу присваивать — он и не будет генерировать события.


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

Зарегистрирован:
Чт, ноя 06 2008, 18:46
Сообщения: 114
Откуда: Moscow
Спасибо


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

Зарегистрирован:
Чт, ноя 06 2008, 18:46
Сообщения: 114
Откуда: Moscow
Возник еще один вопрос как получить значение выбранное в Listbox?
Имя Listbox'а OBTP. Разве не должно в поле OBTP в PAI экрана записаться выбранное значение?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, дек 01 2008, 17:28 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, окт 20 2008, 10:29
Сообщения: 339
Откуда: Мюнхен
Пол: Мужской
Ну у меня экран не рисованый, а через selection-screen, то значение лежит в переменной листбокса...

Code:
PARAMETERS: p_ptype(1) AS LISTBOX VISIBLE LENGTH 4 DEFAULT 'D'      OBLIGATORY

if p_ptype = 'D'.
...


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

Зарегистрирован:
Чт, ноя 06 2008, 18:46
Сообщения: 114
Откуда: Moscow
У меня экран рисованный и почему-то в переменную листбокса значение не передается :(


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

Зарегистрирован:
Пн, май 14 2007, 13:05
Сообщения: 561
Откуда: Москва
AAK написал(а):
Возник еще один вопрос как получить значение выбранное в Listbox?
Имя Listbox'а OBTP. Разве не должно в поле OBTP в PAI экрана записаться выбранное значение?

Необходимо прописать в программе глобальную переменную с таким же именем. т.е. OBTP

_________________
Sapere aude!


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

Зарегистрирован:
Чт, ноя 06 2008, 18:46
Сообщения: 114
Откуда: Moscow
Цитата:
Необходимо прописать в программе глобальную переменную с таким же именем. т.е. OBTP

Таковая имеется в наличии, описана в TOP


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 02 2008, 08:31 
Директор
Директор

Зарегистрирован:
Пт, окт 07 2005, 09:10
Сообщения: 752
Откуда: 4.6C
Пол: Мужской
1. Попробуй удалить поле с экрана, а затем добавить с помощью кнопки Окно словаря/полей программы. Т.е. в программе оно должно уже быть. Видимо экран при настройке листбокса проверяет, что поле подходящее.
2. Если заполняешь листбокс через VRM_SET_VALUES, то твоя переменная должна быть не менее, чем поле внутр.таблицы, где лежат отображаемые значения, хоть и возвращается в переменную ключ, который меньше по длине.

Только что <я не знать русский языка>, пока не выполнил эти два условия тоже ничего не видел в PAI.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 03 2008, 22:38 
Специалист
Специалист

Зарегистрирован:
Чт, ноя 06 2008, 18:46
Сообщения: 114
Откуда: Moscow
Цитата:
1. Попробуй удалить поле с экрана, а затем добавить с помощью кнопки Окно словаря/полей программы. Т.е. в программе оно должно уже быть. Видимо экран при настройке листбокса проверяет, что поле подходящее.
2. Если заполняешь листбокс через VRM_SET_VALUES, то твоя переменная должна быть не менее, чем поле внутр.таблицы, где лежат отображаемые значения, хоть и возвращается в переменную ключ, который меньше по длине.


Несколько раз пробовал,не получилось :(
Есть подозрение, что со структурой, на которую ссылается поле, что-то не то, буду дальше искать ошибку


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 03 2008, 22:44 
Специалист
Специалист

Зарегистрирован:
Чт, ноя 06 2008, 18:46
Сообщения: 114
Откуда: Moscow
Либо возможно, что после нажатия Enter Listbox очищается?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, дек 04 2008, 06:56 
Директор
Директор

Зарегистрирован:
Пт, окт 07 2005, 09:10
Сообщения: 752
Откуда: 4.6C
Пол: Мужской
Уточните, пжлста, тип переменной на которую ссылается поле экрана?
В моем случае это C с длиной 80 и это не поле структуры.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, дек 04 2008, 11:42 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
AAK написал(а):
Либо возможно, что после нажатия Enter Listbox очищается?

Вы привидите те фрагменты кода, которые относятся к работе с Listbox - PAI\PBO\заполнение\определение данных
А то гадать можно долго. Очищение по Enter говорит о том что либо нет связи поля с переменной в ABAP(т.е. нет такой переменной), либо у Вас в где то в коде идёт очистка этой самой переменной.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, дек 04 2008, 22:56 
Специалист
Специалист

Зарегистрирован:
Чт, ноя 06 2008, 18:46
Сообщения: 114
Откуда: Moscow
Code:
MODULE prepare_listbox_create OUTPUT.

if it_intf01_c01 is initial.
DATA i TYPE I.
  SELECT * FROM ZAI_INTF01_C01
    INTO TABLE it_intf01_c01.
i = 1.
DELETE ADJACENT DUPLICATES FROM it_intf01_c01.
LOOP AT it_intf01_c01.
  DROPDOWN-KEY = i.
  DROPDOWN-TEXT = it_intf01_c01-obtp.
  APPEND DROPDOWN TO V.
  i = i + 1.
ENDLOOP.

CALL FUNCTION 'VRM_SET_VALUES'
  EXPORTING
    ID                    = 'OBTP'
    VALUES                = V
* EXCEPTIONS
*   ID_ILLEGAL_NAME       = 1
*   OTHERS                = 2
          .
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.


ENDMODULE.                               

MODULE user_command_0102 INPUT.
p_OBTP = OBTP.
  BREAK-POINT.
  IF ok_code = 'CANCEL' or ok_code = 'BACK' or ok_code = 'EXIT'.
    LEAVE PROGRAM.
  ENDIF.

ENDMODULE.

Поле OBTP в TOP определено как:
Code:
DATA OBTP LIKE it_intf01_c01-obtp.

Так же в TOP:
Code:
TABLES:
        ZAI_INTF01_C01,
        ZAI_INTF01_C02.

DATA:
it_intf01_c01 LIKE ZAI_INTF01_C01 OCCURS 0 WITH HEADER LINE,
     it_intf01_c02 LIKE ZAI_INTF01_C02 OCCURS 0 WITH HEADER LINE,

Логика выполнения экрана:

Code:
PROCESS BEFORE OUTPUT.
MODULE STATUS_0105.
MODULE prepare_listbox_create.

PROCESS AFTER INPUT.
MODULE user_command_0102.
MODULE call_ZAI_INTF01CREATE.


it_intf01_c01-obtp это char длиной 4, на экране тоже поле формата char
и длиной 4.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 05 2008, 06:55 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пт, янв 18 2008, 10:34
Сообщения: 716
Откуда: Moscow
Пол: Мужской
а нужно
Code:
LOOP AT it_intf01_c01.
  DROPDOWN-KEY = i.
  DROPDOWN-TEXT = it_intf01_c01-obtp.
  APPEND DROPDOWN TO V.
  i = i + 1.
ENDLOOP.


а нужно
Code:
LOOP AT it_intf01_c01.
  DROPDOWN-KEY = it_intf01_c01-obtp.
  DROPDOWN-TEXT = i.
  APPEND DROPDOWN TO V.
  i = i + 1.
ENDLOOP.

_________________
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э. Йодан)


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

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


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

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


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

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