Текущее время: Вс, июл 20 2025, 20:41

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


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

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


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

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