SAPфорум.RU
https://www.sapboard.ru/forum/

Область видимости переменных из подпрограммы
https://www.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/