Текущее время: Вт, июл 22 2025, 06:32

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Для чего нужно чистить OK_CODE?
СообщениеДобавлено: Пн, фев 18 2008, 11:57 
Начинающий
Начинающий

Зарегистрирован:
Чт, июл 12 2007, 15:52
Сообщения: 13
Народ, подскажите, пожалуйста, популярно, для чего в PAI нужно чистить OK_CODE? А то что-то я призабыл уже. Кажется, если его не почистить, он перейдёт в качестве кода на следующий экран?

И ещё вопрос, почему принято для ок-кода пользоваться экранной переменной, а не напрямую sy-ucomm?

Спасибо.


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

Зарегистрирован:
Ср, ноя 22 2006, 12:06
Сообщения: 32
В двух словах на частном примере:
При нажатии на экране ENTER или зеленой птички, PAI экрана срабатывает, но переменная sy-ucomm (если для зеленой кнопки не задан код функции) содержит последнее значение (т.е. не обновляется).
Соответственно, если мы до этого нажали какую-либо кнопку и не почистили sy-ucomm, то при последующем нажатии ENTER сработает "старый" код функции.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 18 2008, 12:25 
Начинающий
Начинающий

Зарегистрирован:
Чт, июл 12 2007, 15:52
Сообщения: 13
Спасибо. Чувствуется сертифицированный специалист. :)

Как насчёт второго вопроса?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 18 2008, 13:22 
Начинающий
Начинающий

Зарегистрирован:
Вт, фев 12 2008, 10:56
Сообщения: 8
чего-то не понимаю.
Цитата:
At runtime (that is, when the user selects a function), the function code is passed either to the system field SY-UCOMM (in the case of a report program) or to the OK code field (in the case of a dialog program) and can then be interpreted by the ABAP program

к тому же у меня как раз не пашет с этим делом что-то. причём не то, что не должно. а то, что не должно -- пашет. хотя не должно.
ненавижу понедельники(


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

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Арахноид написал(а):
чего-то не понимаю.
Цитата:
At runtime (that is, when the user selects a function), the function code is passed either to the system field SY-UCOMM (in the case of a report program) or to the OK code field (in the case of a dialog program) and can then be interpreted by the ABAP program

к тому же у меня как раз не пашет с этим делом что-то. причём не то, что не должно. а то, что не должно -- пашет. хотя не должно.
ненавижу понедельники(
Черезвычайно содержательное сообщение. Ясно только одно - описанный эффект проявляется исключительно в понедельник!

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 18 2008, 13:35 
Начинающий
Начинающий

Зарегистрирован:
Чт, июл 12 2007, 15:52
Сообщения: 13
Перевожу. :)

Когда юзер что-нибудь нажимает, соответствующий функциональный код попадает как в системную переменную sy-ucomm, так и в экранный атрибут с хитрым типом OK_CODE. В программе можно завести глобальную переменную, назначить вот этому атрибуту её имя и тогда функциональный код нажатой кнопки будет также записываться и в нашу глобальную переменную. Так обычно и делают. Внимание, вопрос -- нафига? Если достаточно прочитать sy-ucomm, а потом просто его очистить, чтобы не фонил на следующий экран.


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

Зарегистрирован:
Ср, ноя 22 2006, 12:06
Сообщения: 32
Вот что написано в SAP Library.
Цитата:
In your ABAP programs, you should work with the OK_CODE field instead of SY-UCOMM. There are two reasons for this: Firstly, the ABAP program has full control over fields declared within it, and secondly, you should never change the value of an ABAP system field


В принципе, пиво тоже необязательно пить из бокала, можно прямо из бутылки :D


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 18 2008, 14:45 
Начинающий
Начинающий

Зарегистрирован:
Чт, июл 12 2007, 15:52
Сообщения: 13
А написано это вот здесь:
http://help.sap.com/saphelp_nw70/helpda ... ameset.htm


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

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
sy-ucomm гуляет по вложенным экранам, поэтому его лучше не трогать


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 04 2008, 10:59 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
А вот тут не подскажете:
тр AS02 добавлен собственный подэкран (ФГ XAIS).
Там таблица и кнопочка добавить запись .
Нажали на кнопочку - код занесся в sy-ucomm, действия выполнились (добавилась строка) почистил ДАЖЕ! sy-ucomm Жму просто на кнопочку прокрутки таблицы - и вижу что в sy-ucomm по-прежнему код моей кнопки и соответственно выполняется добавление строки.
Как пофиксить этот трабл?


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

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
Был невнимателен Вопрос снимается :oops:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Для чего нужно чистить OK_CODE?
СообщениеДобавлено: Пт, мар 06 2009, 13:04 
Начинающий
Начинающий

Зарегистрирован:
Ср, окт 24 2007, 13:56
Сообщения: 22
Добрый день!
Возник вот такой вопрос. В своём инфо-типе в инклюде MP9***10 (Data Definitions) объявляю:
Code:
DATA: ok_code LIKE sy-ucomm,
          save_ok LIKE sy-ucomm.


затем в PAI (MP9***30) пишу:
Code:
save_ok = ok_code.
CLEAR ok_code.

IF save_ok = 'UPD'.
  IF P9***-ZZPOLE = ' '.
      message e004(ms99).
  ENDIF.
ENDIF.

Типа при сохранении должно проверяться, если поле не заполнено выдавать ошибку (стандартные настройки экрана инфо-типа здесь не подойдут).
Только вот не работает эта штука, в отладке смотрю, не присваивается ok_code-у ничего, подскажите плиз, в чём может быть проблемма?

Спасибо!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Для чего нужно чистить OK_CODE?
СообщениеДобавлено: Пт, мар 06 2009, 13:47 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, мар 03 2009, 12:33
Сообщения: 141
самое первое, что приходит на ум - ok_code не сопоставлен типу ОК на закладке СписокЭлементов экрана.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Для чего нужно чистить OK_CODE?
СообщениеДобавлено: Пт, мар 06 2009, 13:51 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
zxz написал(а):
Добрый день!
Возник вот такой вопрос. В своём инфо-типе в инклюде MP9***10 (Data Definitions) объявляю:
Code:
DATA: ok_code LIKE sy-ucomm,
          save_ok LIKE sy-ucomm.


затем в PAI (MP9***30) пишу:
Code:
save_ok = ok_code.
CLEAR ok_code.

IF save_ok = 'UPD'.
  IF P9***-ZZPOLE = ' '.
      message e004(ms99).
  ENDIF.
ENDIF.

Типа при сохранении должно проверяться, если поле не заполнено выдавать ошибку (стандартные настройки экрана инфо-типа здесь не подойдут).
Только вот не работает эта штука, в отладке смотрю, не присваивается ok_code-у ничего, подскажите плиз, в чём может быть проблемма?
А почему эта штука должна работать? OK_CODE не является каким либо специальным зарезервированным именем. Это раз.
В пуле модулей инфотипа изначально предусмотрена отдельная переменная под ок-код - OK-CODE. Это два.
И подобные проверки наиболее правильно делать через badi. Это три.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re:
СообщениеДобавлено: Вт, мар 10 2009, 09:41 
Начинающий
Начинающий

Зарегистрирован:
Ср, окт 24 2007, 13:56
Сообщения: 22
Согласен, выглядит неадекватно, попытался сделать как здесь:
Mangalor написал(а):
А написано это вот здесь:
http://help.sap.com/saphelp_nw70/helpda ... ameset.htm

видимо что-то не так понял ((.

Подскажите пожалуйста тогда, как сделать правильно, чтобы в такой ситуации:
Code:
IF sy-ucomm = 'UPD'.
  IF P9***-ZZPOLE = ' '.
      message e004(ms99).
  ENDIF.
ENDIF.

при нажатии enter обнулять sy-ucomm, а то он зацикливается на этом сообщении.

Спасибо.


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

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


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

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


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

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