Текущее время: Ср, июл 23 2025, 14:00

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Выход из Функционального модуля.
СообщениеДобавлено: Пт, мар 16 2012, 14:48 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 08:40
Сообщения: 226
Здравствуйте!
Подскажите возможно ли такое.
Функциональный модуль вызывается в программе в цикле 10 раз. В теле самого функционально модуля находится подпрограмма(form). Когда мы находимся в подпрограмме функционального модуля, нужно при определенном условии выходить из ФМ на уровень программы. Операторы exit, return не подходят, так как при их использовании мы выходим из подпрограммы только на уровень Функционального модуля, а надо выйти на уровень программы( не заканчивая обработки программы а лишь продолжая следующую итерацию вызова ФМ).


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выход из Функционального модуля.
СообщениеДобавлено: Пт, мар 16 2012, 15:20 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пн, фев 15 2010, 13:14
Сообщения: 46
Откуда: Минск
Пол: Женский
Определите в своем ФМ исключения (exceptions, например go_out). И в подпрограмме пишите raise go_out.
функциональный модуль завершать работу не будет.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выход из Функционального модуля.
СообщениеДобавлено: Вт, мар 20 2012, 18:23 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 15 2011, 15:02
Сообщения: 122
Мне кажется, что такой код не совсем корректен.
ИМХО правильнее по коду завершения от form уже кидать исключение и выходить из ФМа.
что-то вроде:
Code:
perform some_form
    changing lv_subrc.

if lv_subrc NE 0.
    raise <exc>.
endif.

_________________
Поздравляю тебя, Шарик, ты - балбес!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выход из Функционального модуля.
СообщениеДобавлено: Вт, мар 20 2012, 19:08 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пн, фев 15 2010, 13:14
Сообщения: 46
Откуда: Минск
Пол: Женский
Вот этот код работает так, как спрашивает skaa. На втором брейк уже не останавливается. Что здесь некорректного?
Code:
FUNCTION y_test_raise .
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  EXCEPTIONS
*"      GO_OUT
*"----------------------------------------------------------------------
  IF sy-uname = 'MY_USER'.
    BREAK-POINT.
  ENDIF.

  PERFORM check.

  IF sy-uname = 'MY_USER'.
    BREAK-POINT.
  ENDIF.

ENDFUNCTION.

*&---------------------------------------------------------------------*
*&      Form  check
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM check.
  RAISE go_out.
ENDFORM.                    "check


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выход из Функционального модуля.
СообщениеДобавлено: Ср, мар 21 2012, 10:40 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 15 2011, 15:02
Сообщения: 122
Я немного про другое, код то конечно работает правильно и выйдет и ФМа.
Я считаю, что такой стиль написания не совсем корректен.

_________________
Поздравляю тебя, Шарик, ты - балбес!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выход из Функционального модуля.
СообщениеДобавлено: Ср, мар 21 2012, 11:39 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пн, фев 15 2010, 13:14
Сообщения: 46
Откуда: Минск
Пол: Женский
Ну тогда "для корректности" лучше писать так:
Code:
FUNCTION y_test_raise .
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  EXCEPTIONS
*"      GO_OUT
*"----------------------------------------------------------------------
**************************************************** 
TRY .
      PERFORM check.
    CATCH CX_*error*.
      RAISE go_out.
  ENDTRY.
****************************************************

ENDFUNCTION.

*&---------------------------------------------------------------------*
*&      Form  check
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM check RAISING CX_*error*.
****************************************************
  RAISE EXCEPTION TYPE CX_*error*.
****************************************************
ENDFORM.                    "check


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выход из Функционального модуля.
СообщениеДобавлено: Ср, мар 21 2012, 12:00 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
8051core написал(а):
Я считаю, что такой стиль написания не совсем корректен.

По каким причинам?

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выход из Функционального модуля.
СообщениеДобавлено: Ср, мар 21 2012, 12:11 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 15 2011, 15:02
Сообщения: 122
Получается что точка выхода из ФМа находится не в самом ФМе, а во вложенной форме, что затрудняет как чтение кода, так и его отладку.

Не претендую на истину в последней инстанции :) ,
но для меня это из той же серии правил кодирования:
что переменные и формы нельзя называть 1-3 буквами и транслитом,
что в программе не должно быть "мертвого" кода,
а так же по возможности не использовать множественные выходы из функций.


Поэтому временами очень бесит, когда вместо понятного имени для select-option или parameters приходится придумывать,
что-то состоящее из 8 символов (два из которых уже заняты под p_ или s_). Но это так оффтоп уже :idea:

_________________
Поздравляю тебя, Шарик, ты - балбес!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выход из Функционального модуля.
СообщениеДобавлено: Ср, мар 21 2012, 12:42 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
8051core написал(а):
Получается что точка выхода из ФМа находится не в самом ФМе, а во вложенной форме, что затрудняет как чтение кода, так и его отладку.

Для других языков программирования это наверно так и есть. Для ABAP - спорно.
1.Механизм RAISE как раз придуман, чтобы минимизировать ненужную обработку переменных при ошибках.
-каждое исключение имеет свое название, все исключения описаны в интерфейсе ФМ
-есть поиск по ключевым словам по всей группе функций
2.Для отладки достаточно установить точку останова на операторе RAISE и например, на message с указанным классом и номером

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выход из Функционального модуля.
СообщениеДобавлено: Ср, мар 21 2012, 13:08 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 15 2011, 15:02
Сообщения: 122
После таких доводов соглашусь с вами. :D

Но для человека, который больше программировал на других языках,
чем на ABAPе выглядит непривычно, как и некоторые другие вещи.

_________________
Поздравляю тебя, Шарик, ты - балбес!


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

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


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

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


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

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