SAPфорум.RU https://sapboard.ru/forum/ |
|
Область видимости переменных из подпрограммы https://sapboard.ru/forum/viewtopic.php?f=13&t=96707 |
Страница 1 из 1 |
Автор: | other95 [ Пт, авг 10 2018, 13:58 ] |
Заголовок сообщения: | Область видимости переменных из подпрограммы |
Добрый день. Возникла следующая проблема: Нужно реализовать несколько расширений в подпрограммах программы RM07RESL, которые должны работать с переменными, а точнее таблицами которые должны быть "видны" во всех этих расширениях. Проблема в том что сделать расширение в самой головной программе и объявить переменную там как глобальную - возможности нет. Можно конечно манипулировать данными и передавать их через импорт память, но такое решение кажется "некрасивым". Вопрос: Можно ли объявить переменную в подпрограмме с глобальной областью видимости? Или может быть есть какие то иные способы решения такой проблемы? |
Автор: | Бородин Игорь [ Пт, авг 10 2018, 15:08 ] |
Заголовок сообщения: | Re: Область видимости переменных из подпрограммы |
Можно создать, например, пул подпрограмм (либо отчет, либо гр.функций, ....) для хранения глобальных переменных: Code: PROGRAM Z_TEST . * declarations DATA: gv_var1 TYPE char10 . DATA: gv_var2 TYPE char10 . * SET/GET variable 1 FORM set_var1 USING pv_var1 . gv_var1 = pv_var1 . ENDFORM . FORM get_var1 CHANGING cv_var1 . cv_var1 = gv_var1 . ENDFORM . * SET/GET variable 2 FORM set_var2 USING pv_var2 . gv_var2 = pv_var2 . ENDFORM . FORM get_var2 CHANGING cv_var2 . cv_var2 = gv_var2 . ENDFORM . И обращаться к ним из расширений как-то так: Code: PERFORM set_var1(z_test1) USING 'value1' . Вместо подпрограмм можно использовать методы класса.
PERFORM get_var1(z_test1) CHANGING lv_value1. |
Автор: | ghost [ Пт, авг 10 2018, 15:27 ] |
Заголовок сообщения: | Re: Область видимости переменных из подпрограммы |
other95 написал: Добрый день. Возникла следующая проблема: Нужно реализовать несколько расширений в подпрограммах программы RM07RESL, которые должны работать с переменными, а точнее таблицами которые должны быть "видны" во всех этих расширениях. Проблема в том что сделать расширение в самой головной программе и объявить переменную там как глобальную - возможности нет. Можно конечно манипулировать данными и передавать их через импорт память, но такое решение кажется "некрасивым". Вопрос: Можно ли объявить переменную в подпрограмме с глобальной областью видимости? Или может быть есть какие то иные способы решения такой проблемы? STATICS думаю вам в помощь для такого случая. |
Автор: | ArmAnn [ Пт, авг 10 2018, 15:40 ] |
Заголовок сообщения: | Re: Область видимости переменных из подпрограммы |
Еще вариант - завести вспомогательный глобальный класс (в se24), в котором статические поля - это переменные и таблицы для использования в расширениях |
Автор: | Besa [ Пт, авг 10 2018, 15:42 ] |
Заголовок сообщения: | Re: Область видимости переменных из подпрограммы |
В добавок к тому, что написал Бородин Игорь, можно сделать через атрибуты класса. Единственное я бы не стал использовать perfroms(prog), лучше SET/GET методы класса или SET/GET ФМы одной Гф. Если посложнее - можно посмотреть в сторону Shared Memory Objects,. |
Автор: | other95 [ Вт, авг 14 2018, 13:07 ] |
Заголовок сообщения: | Re: Область видимости переменных из подпрограммы |
Огромное спасибо! Решение через пул подпрограмм отлично сработало. Решение при помощи объявления переменных как STATICS не подошло, такие переменные не видны в другой подрограмме. А решение через глобальный класс, и вызов методов класса еще не попробовал, попробую реализовать позже. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |