Определение рабочей области tables

Определение глобальных и локальных переменных

Глобальная переменная – та, которая определена за пределами подпрограммы при использовании оператора tables или data.

Локальная переменная – переменная, которая определена в подпрограмме, используя local, data, или оператор statics. Переменные, определенные при использовании local, доступны вне подпрограммы; переменные, определенные при использовании data или statics, нет. Таким образом, если подпрограмма вызывает другую подпрограмму, переменные, определенные при использовании local, видима изнутри названных переменных подпрограммы, определенных при использовании data или statics, нет.

Для локальных переменных, определенных при использовании local или data, память выделяется при вызове подпрограммы. Эта память освобождается, когда подпрограмма заканчивается, и таким образом значения теряются. Для statics память сохраняется.

Переменные, определенные при использовании оператора tables, всегда являются глобальными переменными. Размещение оператора tables вначале программы определяет глобальную field String. Размещение того же самого оператора в подпрограмме также определяет global field string того же названия. Поэтому, Вы не должны использовать оператора tables в подпрограмме, так как определена всегда глобальная переменная; глобальные определения должны быть помещены вначале Вашей программы.

Локальная рабочая область таблицы в подпрограмме определяется используя local вместо оператора tables. Синтаксис такой же как tables, но он определяет local field string вместо глобальной. Переменные, определенные при использовании local, видимы изнутри подпрограммы и всех подпрограмм, которые она вызывает.

report ztx1709.

tables ztxlfa1.

 

select single * from ztxlfa1 where lifnr = 'V9'.

write: / '*-----', ztxlfa1-lifnr.

perform s1.

write: / '*S1---', ztxlfa1-lifnr.

perform s2.

write: / '*S2---', ztxlfa1-lifnr.

 

form s1.

write: / ' S1-A', ztxlfa1-lifnr.

local ztxlfa1.

select single * from ztxlfa1 where lifnr = 'V1'.

write: / ' S1-B', ztxlfa1-lifnr.

perform s2.

write: / ' S1-C', ztxlfa1-lifnr.

endform.

 

form s2.

write: / ' S2-A', ztxlfa1-lifnr.

select single * from ztxlfa1 where lifnr = 'V2'.

write: / ' S2-B', ztxlfa1-lifnr.

endform.

* - - - - -V9

S1-A V9

S1-B V1

S2-A V1

S2-B V2

S1-C V2

*S1 - - -V9

S2-A V9

S2-B V2

*S2 - - -V2

Если Вы определите локальную переменную, имеющую то же самое название как глобальная переменная, то локальная переменная будет иметь приоритет в подпрограмме. Следовательно, Вы не будете в состоянии обратиться к глобальной переменной того же самого названия в пределах той подпрограммы.