Что такое внутренняя таблицы, её тело и строка заголовка. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Что такое внутренняя таблицы, её тело и строка заголовка.



Что такое внутренняя таблицы, её тело и строка заголовка.

Внутренняя таблица (Internal Table) — временная таблица, сохраняемая в оперативной памяти на сервере приложений.

Она создается и заполняется программой во время выполнения и уничтожается после завершения выполнения программы. Как и таблица базы данных, внутренняя таблица состоит из одной или более строк идентичной структуры, но в отличие от таблицы базы данных, она не может использоваться после завершения программы. Она используется как временная память для обработки данных или как временный буфер.

Внутренняя таблица состоит из тела и дополнительной строки заголовка.

Тело (Body) содержит строки внутренней таблицы. Все строки имеют одинаковую структуру. Термин «внутренняя таблица» обычно относится непосредственно к телу внутренней таблицы.

Строка заголовка (Header Line)— Field String той же структуры, что и у строки тела таблицы, но она может содержать только одну строку. Это — буфер, используемый для содержания каждой записи перед ее добавлением во внутреннюю таблицу, или каждой записи, прочитанной из внутренней таблицы.

Определение внутренней таблицы со строкой заголовка используя begin of и like.

Для определения внутренней таблицы со строкой заголовка нужно включить в определение или begin of, или with header line. Если в определении задано begin of, строка заголовка создается автоматически. Если вместо begin of используется like, у внутренней таблицы не будет строки заголовка, если не добавить with header line после выражения occurs.

В единственном случае внутренняя таблица используется без строки заголовка — в случае вложенной внутренней таблицы. У вложенной внутренней таблицы не может быть строки заголовка.

report ztx1101.

data: begin of it1 occurs 10,

f1,

f2,

f3,

end of it1.

Определение внутренней таблицы без строки заголовка.

data it2 like ztxlfa1 occurs 100.

У нее те же компоненты, что и у структуры DDIC ztxlfa1. У нее нет заголовка, потому что в определении нет ни begin of, ни with header line

Когда выделяется память для внутренней таблицы.

Память для тела внутренней таблицы выделяется не при ее описании, а при добавлении первой строки в таблицу.

Особенности дополнения occurs.

Дополнение occurs не ограничивает число строк, которые могут быть добавлены во внутреннюю таблицу. Например, если определить occurs 10, то во внутреннюю таблицу можно поместить больше 10 строк. Число строк, которые можно поместить во внутреннюю таблицу, теоретически ограничено только количеством виртуальной памяти, доступной на сервере приложений.

Система использует выражение occurs только как руководство для определения объема памяти, который нужно распределять. При добавлении первой строки во внутреннюю таблицу распределяется объем памяти, равный объему для содержания числа строк, определенных в выражении occurs. Если эта память израсходуется, будет выделено памяти столько, сколько необходимо.

Как альтернатива, можно определить occurs 0. В этом случае система распределяет 8 КБ памяти за один раз.

При определении внутренней таблицы рекомендуется выбирать значение в дополнении occurs, равное среднему максимальному числу строк в таблице.

Операторы, используемые для чтения данных из внутренней таблицы, их форматы.

Для чтения данных из внутренней таблицы обычно используются два оператора:

§ loop at

§ read table

Оператор цикла loop at используется для чтения множества строк из внутренней таблицы, оператор read table — для чтения единственной строки.

Синтаксис оператора loop at:

loop at it [into wa ] [from m ] [to n ] [where exp ].

---

Endloop.

где:

it — имя внутренней таблицы

wa — имя рабочей области

m и n — целочисленные literals, константы или переменные, представляющие относительный номер ряда. Например, 1 означает первую строку в таблице, 2 означает вторую и т.д.

exp — логическое выражение, ограничивающее читаемые строки

--- — любое число строк программы (эти строки выполняются один раз для каждой строки, восстановленной из внутренней таблицы)

Синтаксис оператора read table:

read table it [into wa ] [index i | with key keyexp [binary search] ]

[comparing cmpexp ]

[transporting texp ].

где:

it — имя внутренней таблицы

wa — имя рабочей области

i — целочисленный literal, константа или переменная, представляющая относительный номера ряда. Например, 1 означает первую строку в таблице, 2 означает вторую и так далее

keyexp — выражение, представляющее значение, которое будет найдено

cmpexp — выражение сравнения, представляющее тест, который будет выполнен на найденной строке

texp — выражение, представляющее поля, которые будут транспортироваться в рабочую область после того, как строка будет найдена

(если определены и comparing, и transporting, то comparing должно быть на первом месте)

Endloop.

где:

it — имя внутренней таблицы

wa — имя рабочей области

m и n — целочисленные literals, константы или переменные, представляющие относительный номер ряда. Например, 1 означает первую строку в таблице, 2 означает вторую и т.д.

exp — логическое выражение, ограничивающее читаемые строки

--- — любое число строк программы (эти строки выполняются один раз для каждой строки, восстановленной из внутренней таблицы)

Строки читаются из внутренней таблицы по одной и помещаются последовательно в рабочую область. Строки программы между loop at и endloop выполняются для каждой прочитанной строки. Цикл заканчивается автоматически после прочтения последней строки, и тогда выполняется оператор после endloop.

Read table it index 7.

читает седьмую строку из внутренней таблицы и помещает ее в строку заголовка.

Если чтение было успешным (i -ая строка существует), sy-subrc устанавливается в нуль, а sy-tabix — в i.

Дополнение index в операторе read table определяет местонахождение

единственной строки по ее относительному номеру ряда.

13. Дополнение with key keyexp оператора read table, его особенности.

Если определено with key keyexp, система находит строку, которая соответствует ключевому выражению и помещает ее в строку заголовка. Используя keyexp, можно определить единственную строку, которая будет прочитана. Если выражению соответствует более одной строки, то возвращается первая найденная (с самым малым индексом).

Ключевые выражения и их эффекты:

Keyexp Эффект
c1 = v1 c2 = v2... Определяет местоположение первой строки во внутренней таблице, где у компонентыc1есть значениеv1 и у компонентыc2есть значениеv2и т.д.v1— литерал, константа или переменная
(f1) = v1 (f2) = v2... То же, что и выше, ноf1является переменной, содержащей имя компоненты, которая будет сравнена. Значение вf1должно быть в верхнем регистре. Еслиf1— пробел, сравнение проигнорировано
= wa wa — рабочая область, идентичная по структуре строке внутренней таблицы. Это ключевое выражение определяет местоположение первой строки во внутренней таблице, чье содержимое точно равно содержимомуwa. Пробелы обработаны как значения, которые будут найдены; они не соответствуют никакому значению, кроме пробелов
wa wa — рабочая область, идентичная или короче, чем структура внутренней таблицы. Если уwaесть n полей, поляwaдолжны соответствовать первым n полям строки внутренней таблицы. Это ключевое выражение определяет местоположение первой строки во внутренней таблице, чьи первые n полей соответствуют содержимомуwa. Пробелы обработаны как значения, которые будут найдены; они не соответствуют никакому значению, кроме пробелов.

Free it.

где:

it — имя внутренней таблицы с- или без- строки заголовка

Особенности использования оператора free:

§ Удаляются все строки, и освобождается вся память, используемая телом внутренней таблицы

§ Строка заголовка, если она есть, остается неизменной

Refresh it.

где:

it — имя внутренней таблицы с- или без- строки заголовка

Особенности использования оператора refresh:

§ Все строки удаляются. Вся память, используемая телом внутренней таблицы, остается распределенной.

§ Строка заголовка, если она есть, неизменна

refresh используется, когда хотят удалить все строки, но использовать таблицу с другими данными

At first.

---

Endat.

---

At last.

---

Endat.

---

Endloop.

где:

it — внутренняя таблица

--- — любое число строк программы

Особенности использования операторов:

§ Операторы могут использоваться только в loop at; они не могут использоваться в select

§ at first не обязан быть до at last (операторы могут использоваться в любом порядке)

§ Операторы могут использоваться многократно в одном и том же цикле, например, можно иметь два at first и три at last в одном и том же цикле, и они могут появиться в любом порядке

§ Эти операторы не должны быть вложены друг в друга

§ У этих операторов нет дополнений

at first используется для:

§ обработки инициализации цикла

§ записи общих количеств наверху отчета

§ записи заголовков

at last используется для:

§ обработки выхода из цикла

§ записи общих количеств внизу отчета

§ записи «подвала» (footings) отчета

At first.

---

Endat.

---

At last.

---

Endat.

---

Endloop.

где:

it — внутренняя таблица

--- — любое число строк программы

Особенности использования операторов:

§ Операторы могут использоваться только в loop at; они не могут использоваться в select

§ at first не обязан быть до at last (операторы могут использоваться в любом порядке)

§ Операторы могут использоваться многократно в одном и том же цикле, например, можно иметь два at first и три at last в одном и том же цикле, и они могут появиться в любом порядке

§ Эти операторы не должны быть вложены друг в друга

§ У этих операторов нет дополнений

at first используется для:

§ обработки инициализации цикла

§ записи общих количеств наверху отчета

§ записи заголовков

at last используется для:

§ обработки выхода из цикла

§ записи общих количеств внизу отчета

§ записи «подвала» (footings) отчета

Sort by c.

loop at it.

---

at new c.

---

Endat.

---

at end of c.

---

Endat.

---

Endloop.

где:

it — внутренняя таблица

c — компонента it

--- — любое число строк программы

Особенности использования операторов:

§ Операторы могут использоваться только в loop at; они не могут использоваться в select

§ at new не обязан быть до at end of (операторы могут использоваться в любом порядке)

§ Операторы могут использоваться многократно в одном и том же цикле, например, можно иметь два at new и три at end of в одном и том же цикле, и они могут появиться в любом порядке

§ Эти операторы не должны быть вложены друг в друга

§ У этих операторов нет дополнений

Операторы между at new и endat выполняется каждый раз при изменении значения c. Этот блок выполняется также во время первого прохода цикла или при изменении каких-нибудь полей слева от c. Между at и endat числовые поля справа от c устанавливаются в нуль. Нечисловые поля заполняются звездочками (*). Если есть множественные вхождения at new, они все выполняются. at end of ведет себя подобным образом.

Уровень управления (control level) — компонента, названная в операторе разрыва управления; она регулирует разрыв управления. Например, в следующем фрагменте кода f2 — уровень управления, потому что она появляется в операторе at new:

Loop at it.

At new f2.

"(some code here)

Endat.

Endloop.

Говорят, что вызван разрыв управления, если уровень управления изменяется. Это означает что, когда содержимое уровня управления изменяются, выполняется код между at и endat.

Разрыв управления вызывается также, если изменяется любое из полей в структуре до уровня управления. Поэтому, нужно определить внутреннюю структуру таблицы так, чтобы начать с полей, которые формируют уровни управления. Нужно также сортировать все поля до c включительно.

Между at и endat числовые поля справа от уровня управления будут нулевыми, и нечисловые поля будут заполнены звездочками.

 

Sort by c.

loop at it.

---

at new c.

---

Endat.

---

at end of c.

---

Endat.

---

Endloop.

где:

it — внутренняя таблица

c — компонента it

--- — любое число строк программы

Особенности использования операторов:

§ Операторы могут использоваться только в loop at; они не могут использоваться в select

§ at new не обязан быть до at end of (операторы могут использоваться в любом порядке)

§ Операторы могут использоваться многократно в одном и том же цикле, например, можно иметь два at new и три at end of в одном и том же цикле, и они могут появиться в любом порядке

§ Эти операторы не должны быть вложены друг в друга

§ У этих операторов нет дополнений

Операторы между at new и endat выполняется каждый раз при изменении значения c. Этот блок выполняется также во время первого прохода цикла или при изменении каких-нибудь полей слева от c. Между at и endat числовые поля справа от c устанавливаются в нуль. Нечисловые поля заполняются звездочками (*). Если есть множественные вхождения at new, они все выполняются. at end of ведет себя подобным образом.

Уровень управления (control level) — компонента, названная в операторе разрыва управления; она регулирует разрыв управления. Например, в следующем фрагменте кода f2 — уровень управления, потому что она появляется в операторе at new:

Loop at it.

At new f2.

"(some code here)

Endat.

Endloop.

Говорят, что вызван разрыв управления, если уровень управления изменяется. Это означает что, когда содержимое уровня управления изменяются, выполняется код между at и endat.

Разрыв управления вызывается также, если изменяется любое из полей в структуре до уровня управления. Поэтому, нужно определить внутреннюю структуру таблицы так, чтобы начать с полей, которые формируют уровни управления. Нужно также сортировать все поля до c включительно.

Между at и endat числовые поля справа от уровня управления будут нулевыми, и нечисловые поля будут заполнены звездочками.

At first/last/new/end of.

---

Sum.

---

Endat.

где --- — любое число строк программы

Оператор выполняет следующие действия:

§ находит все строки, у которых есть те же значения в пределах поля уровня управления и всех полей слева от него

§ суммирует каждый числовой столбец справа от уровня управления

помещает общие количества в соответствующие поля рабочей области

Endon.

где:

v1 и v2 — имена переменных или Field String

... указывает, что может использоваться любое число or

--- — любое число строк программы

Особенности использования оператора on change of:

§ Если значение любой из переменных (v1, v2 и так далее) изменено от одного теста до следующего, выполняются операторы, следующие после on change of

§ Если никаких изменений не обнаружено и else определено, выполняются операторы после else

Оператор on change of отличается от at new следующим:

§ Он может использоваться в любой конструкции цикла, не только в loop at. Например, он может использоваться в select-endselect, do-enddo или while-endwhile, а также внутри события get

§ Один on change of может быть вызван изменением одного или более полей, названных следом и отделенных or. Эти поля могут быть элементарными полями или Field Strings. В пределах цикла эти поля не должны принадлежать циклу

§ При использовании в цикле изменение в поле слева от уровня управления не вызывает разрыв управления

§ При использовании в цикле поля справа все еще содержат свои оригинальные значения; они не изменены на нули или звездочки

§ Можно использовать else между on change of и endon

§ Можно использовать с циклом loop at it where...

§ Можно использовать sum c on change of (это суммирует все числовые поля кроме поля(ей), названного(ых) после of)

§ Любые изменения значений в пределах on change of сохраняются после endon. Содержимое строки заголовка не восстанавливается, поскольку оно используется для at и endat

Когда цикл начинает выполнение, система создает глобальное вспомогательное поле для каждого поля, указанного в операторе on change of. При создании этим полям присваиваются заданные по умолчанию начальные значения (пробелы или нули). Созданные поля освобождаются по завершении цикла. Каждый раз при выполнении on change of, содержимое его полей сравниваются с содержимым глобальных вспомогательных полей. Если они различны, то выполняется on change of, и вспомогательные поля обновляются новыми значениями. Если они совпадают, код в пределах on change of не выполняется. Поскольку глобальные вспомогательные поля не существуют вне цикла, нельзя использовать on change of за пределами цикла.

 

Что такое внутренняя таблицы, её тело и строка заголовка.

Внутренняя таблица (Internal Table) — временная таблица, сохраняемая в оперативной памяти на сервере приложений.

Она создается и заполняется программой во время выполнения и уничтожается после завершения выполнения программы. Как и таблица базы данных, внутренняя таблица состоит из одной или более строк идентичной структуры, но в отличие от таблицы базы данных, она не может использоваться после завершения программы. Она используется как временная память для обработки данных или как временный буфер.

Внутренняя таблица состоит из тела и дополнительной строки заголовка.

Тело (Body) содержит строки внутренней таблицы. Все строки имеют одинаковую структуру. Термин «внутренняя таблица» обычно относится непосредственно к телу внутренней таблицы.

Строка заголовка (Header Line)— Field String той же структуры, что и у строки тела таблицы, но она может содержать только одну строку. Это — буфер, используемый для содержания каждой записи перед ее добавлением во внутреннюю таблицу, или каждой записи, прочитанной из внутренней таблицы.



Поделиться:


Последнее изменение этой страницы: 2017-01-19; просмотров: 169; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 44.200.40.97 (0.096 с.)