SAP ABAP Table Control с примери
⚡ Умно обобщение
SAP ABAP Table Control показва вътрешна таблица като превъртаща се решетка на екран, вграден в Screen. PainterТази страница обяснява неговите характеристики, декларацията CONTROLS, обработката на курсора, циклите PBO и PAI и атрибутите на колоните.
Какво е табличен контрол в SAP ABAP?
Контролите на таблицата и стъпковите цикли са обекти за показване на екранна таблица, които добавяте към екран в екрана Painter.
От гледна точка на програмирането контролите на таблицата и стъпковите цикли са почти напълно еднакви. Контролите на таблицата са просто подобрени стъпкови цикли, които показват данни с вида и усещането, свързани с таблиците в настолните приложения.
Характеристики на ABAP Table Control
С табличните контроли потребителят може:
- Превъртете таблицата вертикално и хоризонтално
- Преоразмерете ширината на колона
- Превъртане в рамките на поле (когато съдържанието на полето е по-широко от полето)
- Изберете редове или колони на таблицата
- Пренаредете последователността от колони
- Запазете текущите настройки на дисплея за бъдеща употреба
Контролите за таблици също предлагат специални функции за форматиране (някои автоматични, някои по избор), които правят таблиците по-лесни за разглеждане и използване. Table Control осигурява –
- автоматично преоразмеряване на таблицата (вертикално и хоризонтално), когато потребителят преоразмерява прозореца
- разделителни линии между редовете и между колоните (вертикални и хоризонтални)
- полета за заглавки на колони за всички колони
Като цяло, много от функциите, предоставени от контролата на таблицата, се управляват локално от вашата система SAPgui frontend, така че не е необходимо да ги програмирате сами. Единственото забележимо изключение от това е вертикалното превъртане.
Пример (транзакция TZ60)
Транзакция TZ60 по-горе показва крайния резултат: решетка със заглавки на колони, разделителни линии и колона за избор. Разликите от по-стария цикъл на стъпките са обобщени по-долу.
Контрол на таблицата срещу стъпков цикъл
Една от характеристиките на стъпковите цикли е, че редовете в таблицата им могат да обхващат повече от един ред на екрана. Ред на табличен контрол, от друга страна, винаги трябва да се съдържа в един ред (въпреки че е възможно превъртане). Таблицата по-долу сравнява двата елемента на екрана.
| Критерии | Контрол на таблицата | Стъпков цикъл |
|---|---|---|
| Разположение на редове | Един ред винаги е един ред на екрана | Един ред може да обхваща няколко реда на екрана |
| Обработка на колони | Колоните могат да бъдат преоразмерявани, пренареждани и скривани от потребителя | Фиксирано оформление на колоните, дефинирано на екрана |
| Превъртане | Хоризонтално скролиране от фронтенда, вертикално скролиране, програмирано в PAI | Програмиран изцяло в ABAP кода |
| Декларация | КОНТРОЛИТЕ ... ВЪВЕДЕТЕ TABLEVIEW, ИЗПОЛЗВАЙКИ SCREEN | Няма контролна структура в програмата |
| Настройки на дисплея | Потребителят може да запази лично оформление | Не е налично |
Тъй като табличният контрол е модерният елемент, останалата част от тази страница програмира точно него.
Как да създадете и програмирате табличен контрол
Табличен контрол се нуждае от екранен елемент, контролна структура в програмата и цикъл както в PBO, така и в PAI. Подсекциите по-долу следват този ред.
Деклариране на контрола
За да управлявате таблични контроли в ABAP програми, трябва да декларирате контрола в декларационната част на програмата за всяка таблична контрола, като използвате следния оператор:
CONTROLS <ctrl> TYPE TABLEVIEW USING SCREEN <scr>
където е името на контролата на таблицата на екрана в програмата ABAP. Контролата позволява на програмата ABAP да чете атрибутите на контролата на таблицата и да влияе на контролата. Тук, е номерът на екрана, където се зареждат първоначалните стойности на таблицата.
Задаване и отчитане на позицията на курсора
Позицията на курсора за контрола на таблицата може да бъде зададена по следните начини:
В PBO можете да поставите курсора върху конкретно поле на конкретен ред от контрола на таблица.
SET CURSOR FIELD <f> LINE <lin> [OFFSET <off>]
Като използвате незадължителната добавка OFFSET, можете да въведете отместването на курсора в полето, както е описано в Задаване на позицията на курсора.
В PAI можете да прочетете текущата позиция на курсора.
GET CURSOR FIELD <f> LINE <lin> ...
В допълнение към информацията, дадена в полето Откриване на позицията на курсора съдържа информация върху кой ред от табличната контрола в момента се намира курсорът. Можете също да използвате
GET CURSOR LINE <lin>.
за да определите реда на табличния контрол. SY-SUBRC ви позволява да проверите дали курсорът е поставен в ред на табличен контрол.
Четене на съответния вътрешен ред от таблицата
За получаване на съответния ред на вътрешна маса:
GET CURSOR line <lin>. ind = <table_control>-top_line + <lin> - 1. Read table <itab> index ind.
Системната променлива stepl – съдържа текущия индекс на реда на таблицата в цикъл … endloop. Loopc – съдържа броя редове, видими в таблицата
Създаване на контрола на екрана Painter
За да създадете контрола на таблица
- Добавете елемент за управление на таблица към екрана си
- Дайте име на табличния контрол. В ABAP програмата декларирайте структура със същото (CONTROLS тип TABLEVIEW с помощта на екрана )
- За да създадете полета, отидете на функцията Dict./Program fields.
- Въведете името на структурата, чиито полета искате. (Ако искате да го избере от речника на вашата програма, щракнете върху съответния бутон).
- В списъка с полета изберете желаните полета и изберете OK.
- Щракнете в зоната за управление на таблицата
Ако искате колона за избор, поставете отметка в съответното квадратче в атрибутите и дайте име. Създайте полето в ABAP програма.
Кодиране на PBO и PAI контурите
В PBO трябва да имате извлечението
LOOP at <itab> USING CONTROL <cntrl_name>. ENDLOOP.
В PAI трябва да имате.
LOOP at <itab>. ENDLOOP.
Именно в рамките на циклите се осъществява трансфер на данни между екрана и вътрешната таблица. Когато попълвате вътрешната таблица, използвайте DESCRIBE TABLE. LINEС -lines, за да се съхрани общият брой редове в контролата. FIELD операторът може да се използва за контрол на това кога се извършва прехвърлянето на данни.
⚠️ Предупреждение: PBO цикълът трябва да именува контрола с USING CONTROL. Без него контролът не знае колко реда съществуват и вертикалното скролиране спира да работи.
Промяна на атрибутите на колоните по време на изпълнение
За да промените атрибутите на отделни клетки, временно променете таблицата SCREEN в PBO. Можете да промените атрибутите на структурата, създадена от оператора CONTROLS
<cntrl>-fixed_cols etc are the attributes of the control <cntrl>-cols-index etc are the attributes of the columns. <cntrl>-cols-screen-invisible etc are the screen attributes of each column.
💡 Съвет: Превъртане -cols в PBO, за да скриете или защитите колона за дадена потребителска роля, вместо да изграждате втори екран.


