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

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


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

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


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

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