Sy subrc abap что это

Русские Блоги

[Готово] Введение в новые функции ABAP 7.40 (вкл.)

ABAP 7.40 Quick Reference

Description

Before 7.40

With 7.40

Data statement

DATA text TYPE string.
text = `ABC`.

DATA(text) = `ABC`.

Loop at into work area

DATA wa like LINE OF itab.
LOOP AT itab INTO wa.

ENDLOOP.

LOOP AT itab INTO DATA(wa).

ENDLOOP
.

Call method

DATA a1 TYPE

DATA a2 TYPE

oref->meth( IMPORTING p1 = a1

IMPORTING p2 = a2).

oref->meth(

IMPORTING p1 = DATA(a1)

IMPORTING p2 = DATA(a2) ).

Loop at assigning

ENDLOOP.

LOOP AT itab

Read assigning

READ TABLE itab

READ TABLE itab

Select into

table

DATA itab TYPE TABLE OF dbtab.

SELECT * FROM dbtab

INTO TABLE itab

WHERE fld1 =lv_fld1.

SELECT * FROM dbtab

INTO TABLE DATA(itab)

WHERE fld1 = @lv_fld1.

Select single

into

SELECT SINGLE f1 f2

FROM dbtab

INTO (lv_f1, lv_f2)

WHERE

WRITE: / lv_f1, lv_f2.

SELECT SINGLE f1 AS my_f1,

F2 AS abc

FROM dbtab

INTO DATA(ls_structure)

WHERE

WRITE: / ls_structure-my_f1, ls_structure-abc.

If a table line is not found, the exception CX_SY_ITAB_LINE_NOT_FOUND is raised. No sy-subrc.

Description

Before 7.40

With 7.40

Read Table index

READ TABLE itab INDEX idx

INTO wa.

wa = itab[ idx ].

Read Table using key

READ TABLE itab INDEX idx

USING KEY key

INTO wa.

wa = itab[ KEY key INDEX idx ].

Read Table with key

READ TABLE itab

WITH KEY col1 =

col2 =

INTO wa.

wa = itab[ col1 = … col2 = …].

Read Table with key components

READ TABLE itab

WITH TABLE KEY key

COMPONENTS col1 =

col2 =

INTO wa.

wa = itab[ KEY key col1 =

col2 = …].

Does record exist?

READ TABLE itab

TRANSPORTING NO FIELDS.

IF sy-subrc = 0.

ENDIF.

IF line_exists( itab[ … ] ).

ENDIF.

Get table index

DATA idx type sy-tabix.

READ TABLE

TRANSPORTING NO FIELDS.

idx = sy-tabix.

DATA(idx) =

line_index( itab[ … ] ).

NB : There will be a short dump if you use an inline expression that references a non-existent record.

SAP says you should therefore assign a field symbol and check sy-subrc.

Примечание. Если вы используете встроенное выражение для ссылки на несуществующую запись, появится дамп. Поэтому SAP рекомендует указать символ поля и проверить sy-subrc.

ASSIGN lt_tab[ 1 ] to FIELD –SYMBOL( ).
IF sy – subrc = 0.

ENDIF.

NB : Use itab [ table_line = … ] for untyped tables.

Примечание. Для нетипизированных таблиц используйте itab [ table_line = … ]

CONV dtype|#( … )

dtype = Type you want to convert to (explicit)

# = compiler must use the context to decide the type to convert to (implicit)

Method cl_abap_codepage=>convert_to expects a string

Sy subrc abap что это. baf415014bfce77dd278abd2e5264d78. Sy subrc abap что это фото. Sy subrc abap что это-baf415014bfce77dd278abd2e5264d78. картинка Sy subrc abap что это. картинка baf415014bfce77dd278abd2e5264d78

4. Оператор значения VALUE-Оператор значения VALUE

Переменные: VALUE dtype|#( )

Структуры: VALUE dtype|#( comp1 = a1 comp2 = a2 … )

Внутренние таблицы Таблицы: VALUE dtype|#( ( … ) ( … ) … ) …

Elementary line type:

FOR wa| IN itab [INDEX INTO idx] [cond]

This effectively causes a loop at itab. For each loop the row read is assigned to a work area (wa) or field-symbol( ).

This wa or is local to the expression i.e. if declared in a subrourine the variable wa or is a local variable of

that subroutine. Index like SY-TABIX in loop.

Это эффективно распространяет внутреннюю таблицу itab. Для каждого цикла каждая прочитанная строка назначается рабочей области (wa) или символу поля ( ).

Sy subrc abap что это. 4b6506f5e3b3c036edeae00400429855. Sy subrc abap что это фото. Sy subrc abap что это-4b6506f5e3b3c036edeae00400429855. картинка Sy subrc abap что это. картинка 4b6506f5e3b3c036edeae00400429855

Populate internal table GT_CITYS with the cities from GT_SHIPS.

Sy subrc abap что это. 60b435f43f59732ea8dcd633806d9f37. Sy subrc abap что это фото. Sy subrc abap что это-60b435f43f59732ea8dcd633806d9f37. картинка Sy subrc abap что это. картинка 60b435f43f59732ea8dcd633806d9f37

Populate internal table GT_CITYS with the cities from GT_SHIPS where the route is R0001.

Sy subrc abap что это. fd2b09af8eb898f07bf64f26e29ed8ef. Sy subrc abap что это фото. Sy subrc abap что это-fd2b09af8eb898f07bf64f26e29ed8ef. картинка Sy subrc abap что это. картинка fd2b09af8eb898f07bf64f26e29ed8ef

Note: ls_ship does not appear to have been declared but it is declared implicitly.

FOR i = … [THEN expr] UNTIL|WHILE log_exp

Populate an internal table as follows:

Sy subrc abap что это. f6dc8f5e58afd7129d6bb7cfb3e52194. Sy subrc abap что это фото. Sy subrc abap что это-f6dc8f5e58afd7129d6bb7cfb3e52194. картинка Sy subrc abap что это. картинка f6dc8f5e58afd7129d6bb7cfb3e52194

INIT result = start_value

While VALUE and NEW expressions can include FOR expressions, REDUCE must include at least one FOR expression. You can use all kinds of FOR expressions in REDUCE:

хотя VALUE с NEW Выражение может содержать выражения FOR, но REDUCE должно содержать хотя бы одно выражение FOR. В REDUCE можно использовать различные выражения FOR:

Count lines of table that meet a condition (field F1 contains “XYZ”).

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

Sy subrc abap что это. f6dc8f5e58afd7129d6bb7cfb3e52194. Sy subrc abap что это фото. Sy subrc abap что это-f6dc8f5e58afd7129d6bb7cfb3e52194. картинка Sy subrc abap что это. картинка f6dc8f5e58afd7129d6bb7cfb3e52194

Sum the values 1 to 10 stored in the column of a table defined as follows

Сложите значения 1 и 10, хранящиеся в таблице, как показано ниже.

Sy subrc abap что это. f7d35d63ba9aa5adb0780dbc5698db48. Sy subrc abap что это фото. Sy subrc abap что это-f7d35d63ba9aa5adb0780dbc5698db48. картинка Sy subrc abap что это. картинка f7d35d63ba9aa5adb0780dbc5698db48

Using a class reference – works because “write” method returns reference to instance object

Sy subrc abap что это. e54718780fd7f37beceda49b673a691e. Sy subrc abap что это фото. Sy subrc abap что это-e54718780fd7f37beceda49b673a691e. картинка Sy subrc abap что это. картинка e54718780fd7f37beceda49b673a691e

… COND dtype|#( WHEN log_exp1 THEN result1
[ WHEN log_exp2 THEN result2 ]

[ ELSE resultn ] ) …

… SWITCH dtype|#( operand
WHEN const1 THEN result1
[ WHEN const2 THEN result2 ]

[ ELSE resultn ] ) …

… CORRESPONDING type( [BASE ( base )] struct|itab [mapping|except] )

Sy subrc abap что это. 999d4b347e317e6fa09aa4d216d67a25. Sy subrc abap что это фото. Sy subrc abap что это-999d4b347e317e6fa09aa4d216d67a25. картинка Sy subrc abap что это. картинка 999d4b347e317e6fa09aa4d216d67a25

Given structures ls_line1 & ls_line2 defined and populated as above.

Определение и заполнение данной структуры ls_line1 и ls_line2 описаны выше.

Sy subrc abap что это. 72f1c48b866ba5bf92cf119a0d172c02. Sy subrc abap что это фото. Sy subrc abap что это-72f1c48b866ba5bf92cf119a0d172c02. картинка Sy subrc abap что это. картинка 72f1c48b866ba5bf92cf119a0d172c02

1、The contents of ls_line1 are moved to ls_line2 where there is a matching column name. Where there is no match the column of ls_line2 is initialised.

При наличии совпадающего имени столбца переместите содержимое ls_line1 в ls_line2. Если совпадений нет, инициализируйте столбец ls_line2.

2、This uses the existing contents of ls_line2 as a base and overwrites the matching columns from ls_line1. This is exactly like MOVE-CORRESPONDING.

Используйте существующее содержимое ls_line2 в качестве основы и перезапишите его на основе соответствующего столбца в ls_line1. Это точно как MOVE-CORRESPONDING 。

3、This creates a third and new structure (ls_line3) which is based on ls_line2 but overwritten by matching columns of ls_line1.

Создайте третью новую структуру (ls_line3), которая основана на ls_line2, а затем ls_line2 перезаписывается соответствующим столбцом ls_line1.

MAPPING allows you to map fields with non-identically named components to qualify for the data transfer.

Сопоставление позволяет сопоставить поля компонентов, имена которых не соответствуют условиям передачи данных.

… MAPPING t1 = s1 t2 = s2

EXCEPT allows you to list fields that must be excluded from the data transfer.

EXCEPT Позволяет перечислить поля, которые должны быть исключены из передачи данных.

Источник

Sy subrc abap что это

SELECT SUM( SUM_WO_NDS20 ) SUM( SUM_NDS20 )
SUM( SUM_WO_NDS10 ) SUM( SUM_NDS10 )
FROM ZZZ_BOOK_SALE
INTO (TSUM-SUM_WO_NDS20, TSUM-SUM_NDS20,
TSUM-SUM_WO_NDS10, TSUM-SUM_NDS10 )
WHERE GSBER IN GSBER AND
GJAHR = GJAHR AND
MONAT = MONAT.

IF SY-SUBRC NE 0.
* То ошибка нет данных и т.д.
ENDIF.

Почему даже если данные отсутствют sy-subrc всегда равен нулю.

Специалист
Sy subrc abap что это. 3. Sy subrc abap что это фото. Sy subrc abap что это-3. картинка Sy subrc abap что это. картинка 3

Зарегистрирован:
Чт, авг 19 2004, 07:31
Сообщения: 234
Откуда: Нижнекамск

Э-э-э. данные не совсем отсутствуют

запрос по любому возвращает данные с нулевыми суммами

Почетный гуру
Sy subrc abap что это. vet. Sy subrc abap что это фото. Sy subrc abap что это-vet. картинка Sy subrc abap что это. картинка vet

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640

Специалист
Sy subrc abap что это. 3. Sy subrc abap что это фото. Sy subrc abap что это-3. картинка Sy subrc abap что это. картинка 3
Sy subrc abap что это. file.php?avatar=2504. Sy subrc abap что это фото. Sy subrc abap что это-file.php?avatar=2504. картинка Sy subrc abap что это. картинка file.php?avatar=2504

Зарегистрирован:
Ср, июн 22 2005, 09:51
Сообщения: 208
Пол: Мужской

Select single count( * ) into iCount from.

if iCount eq 0.
*** Криком кричим, надрываемся.
else.
*** Тут молчим, ухмыляемся.
endif.

_________________
С уважением, В.Ш.
4.6C

Старший специалист
Sy subrc abap что это. 4. Sy subrc abap что это фото. Sy subrc abap что это-4. картинка Sy subrc abap что это. картинка 4

Зарегистрирован:
Ср, авг 18 2004, 09:17
Сообщения: 477
Откуда: Москва
Пол: Мужской

Старший специалист
Sy subrc abap что это. 4. Sy subrc abap что это фото. Sy subrc abap что это-4. картинка Sy subrc abap что это. картинка 4

Зарегистрирован:
Ср, авг 18 2004, 09:17
Сообщения: 477
Откуда: Москва
Пол: Мужской

Select single count( * ) into iCount from.

if iCount eq 0.
*** Криком кричим, надрываемся.
else.
*** Тут молчим, ухмыляемся.
endif.

Господа саперы я наверно не совсем правильно вам объяснил, что меня интересует.

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

Вот что я сделал чтобы sy-subrc все таки менялся.

SELECT VID_CH_F SUM( SUM_ALL ) SUM( SUM_WO_NDS20 ) SUM( SUM_NDS20 )
SUM( SUM_WO_NDS10 ) SUM( SUM_NDS10 ) SUM( SUM_WO_NDS0 )
SUM( SUM_NO_NALOG )
FROM ZZZ_BOOK_SALE
INTO (TSUM-VID_CH_F, TSUM-SUM_ALL, TSUM-SUM_WO_NDS20, TSUM-SUM_NDS20,
TSUM-SUM_WO_NDS10, TSUM-SUM_NDS10, TSUM-SUM_WO_NDS0,
TSUM-SUM_NO_NALOG )
WHERE GSBER IN GSBER AND
GJAHR = GJAHR AND
MONAT = MONAT AND
VID_CH_F EQ ‘1’ AND
ANULL NE ‘X’
GROUP BY VID_CH_F.
ENDSELECT.
IF SY-SUBRC NE 0.
NO_DATA = ‘X’.
ENDIF.

Но по-моему добавлять лишнее поле(nom_ch_f) в выборку и соотвественно еще производить GROUP BY по нему(по-другому не работает. ) это полный бред.

Старший специалист
Sy subrc abap что это. 4. Sy subrc abap что это фото. Sy subrc abap что это-4. картинка Sy subrc abap что это. картинка 4

Зарегистрирован:
Ср, авг 18 2004, 09:17
Сообщения: 477
Откуда: Москва
Пол: Мужской

Гуру-эксперт
Sy subrc abap что это. 5stars. Sy subrc abap что это фото. Sy subrc abap что это-5stars. картинка Sy subrc abap что это. картинка 5stars

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan

Гуру-эксперт
Sy subrc abap что это. 5stars. Sy subrc abap что это фото. Sy subrc abap что это-5stars. картинка Sy subrc abap что это. картинка 5stars

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan

sy-dbcnt возвращает количество обработанных записей

Специалист
Sy subrc abap что это. 3. Sy subrc abap что это фото. Sy subrc abap что это-3. картинка Sy subrc abap что это. картинка 3

Зарегистрирован:
Чт, авг 19 2004, 07:31
Сообщения: 234
Откуда: Нижнекамск

sy-dbcnt возвратит единицу для первоначального запроса

лучше действительно count использовать как многие советуют

Всем спасибо. Действительно ситуацию исправил пресловутый count.

Рад был со всеми пообщаться. Спасибо.

Часовой пояс: UTC + 3 часа

Кто сейчас на конференции

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Логотип © 2006 Андрей Горшков
Поддержка: Кирилл Андреев, 2011-…

Источник

ABAP Blog

Все о разработке в решениях от SAP

ABAP Blog

Все о разработке в решениях от SAP

Ссылки

Цитаты

Сложность убивает. Она вытягивает жизненные силы из разработчиков, затрудняя планирование, построение и тестирование продуктов.

Р. Оззи.

Новое

Последние комментарии

ABAP bad practice

Sy subrc abap что это. Dzheki Chan mem. Sy subrc abap что это фото. Sy subrc abap что это-Dzheki Chan mem. картинка Sy subrc abap что это. картинка Dzheki Chan memПо своему роду деятельности часто приходится разбираться с чужим ABAP кодом, в котором постоянно встречаются одни и те же проблемы, вызывающие «головную боль» при сопровождении. В данной статье будут рассмотрены основные из них.

UPDATE. На сайт добавлен раздел с лучшими практиками.

Незнание основополагающих принципов разработки

Описанные далее принципы не относятся напрямую к языку ABAP и применимы так же к другим языкам.

KISS принцип

Существует множество расшифровок данного принципа:

Проще говоря, программный код должен состоять из как можно более простых для понимания и сопровождения блоков. Не должно быть «портянок» по 10 тыс. строк подряд, особенностью такого кода является увеличение вложенности условных конструкций и общее усложнение логики работы. Относительно гайдлайна по ABAP, процедура или метод должны содержать не более 150 выражений.

На приведенном ниже рисунке (из официальной документации ABAP) показан пример того, как после рефакторинга 1 метод со сложной логикой был разделен на 3 отдельных.

Sy subrc abap что это. pic1. Sy subrc abap что это фото. Sy subrc abap что это-pic1. картинка Sy subrc abap что это. картинка pic1

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

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

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

Разделение ответственности (SoC)

Разделение ответственности (separation of concerns) говорит о разделении программы на функциональные блоки и о том, что эти функциональные блоки не должны перекрывать друг друга относительно своих функций. Взаимодействие между такими блоками должно быть через определенные для этого интерфейсы. Разделение ответственности позволяет снизить системную сложность, повысить надежность и адаптивность программ, а также обеспечить возможность их повторного использования.

В качестве примера рассмотрим стандартный пример из справки ABAP:

В данном примере видно классический образец портянки на её начальной стадии (для столь простых программ как в примере, соблюдение принципа не является необходимостью, однако, когда речь идет больших программах, его нарушение чревато проблемами при сопровождении). Программа состоит из нескольких логических блоков: получения, проверки (обработки) и отображения данных, однако все эти блоки слиты воедино в обработке START-OF-SELECTION (не явно).

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

YAGNI

Сокращение от английского (You Ain’t Gonna Need It – вам это не понадобится). Принцип, который декларирует в качестве основной цели отказ от избыточной функциональности или от добавления функциональности, в которой нет необходимости.

Желание написания кода, который может потребоваться в будущем приводит к следующим последствиям:

Пример нарушения, с которым часто приходится сталкиваться:

Источник

ABAP: Красивый

Эта публикация предназначена ABAP-разработчикам в SAP ERP и всем им сочувствующим.

Немногие знают, что в fullscreen ALV можно подключать HTML-заголовки. Еще больше не знают, что можно сделать красивый стандартный выпадающий список, он же select-box, только для такой по сути стандартной фичи, потребуется много вашего Z-кода.

Выглядит примерно так:

Sy subrc abap что это. image loader. Sy subrc abap что это фото. Sy subrc abap что это-image loader. картинка Sy subrc abap что это. картинка image loader

Добро пожаловать под кат.

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

— Выходная таблица нашего отчета, пусть она будет на основе всем известной таблицы MARA;
— Переменная, в которой мы будем хранить текущее значение выбранной в селект-боксе;
— константу с подпрограммой для HTML-header;
— класс-handler, который будет срабатывать при выборе данных, и объект handler.

Напишем главную программу отчета и подпрограммы по инициализации, получении данных и выводе отчета. Здесь особо отмечу, что нужно создать объект handler и подключить HTML-заголовок: i_callback_html_top_of_page = gc_form_top.

Для HTML-хедера создаем подпрограмму с именем, указанным в глобальном константе. Вызовем из нее подпрограмму, которая создаст нашу красоту:

Посмотрим подпрограмму по созданию селект-бокса. Здесь отмечу, что если в отчете была команда, снять фильтры, зачищаем нашу глобальную переменную (gv_matnr) со значением. Потом создаем линию, в которую добавляем заголовок фильтра, вызываем подпрограмму, которая заполнит нам значения в нем, и сам фильтр на форму, закрываем линию:

В программе по заполнению фильтра добавим сначала то значение, которое сейчас выбрано, чтобы оно было первым в списке. Потом добавим значение Все, если у нас в таблице больше одного значения. И потом все записи из таблицы:

Внедрим наш handler. Здесь в sender->value значение, выбранное пользователем. Запишем его сразу в нашу глобальную переменную gv_matnr. В подпрограмме set_filter по обработке стандартной фильтрации:

1) Получим глобальный grid в локальный объект;
2) Получим уже установленные параметры фильтрации, и снимем уже установленный ранее фильтр, по полю, которое мы фильтруем, через селект-бокс;
3) Добавим новые параметры фильтрации;
4) Сохраним фильтр;
5) Обновим отчет.

Запускаем! Любуемся на итог страданий:

Sy subrc abap что это. image loader. Sy subrc abap что это фото. Sy subrc abap что это-image loader. картинка Sy subrc abap что это. картинка image loader

Sy subrc abap что это. image loader. Sy subrc abap что это фото. Sy subrc abap что это-image loader. картинка Sy subrc abap что это. картинка image loader

UPDATE: можно довести до:
Sy subrc abap что это. image loader. Sy subrc abap что это фото. Sy subrc abap что это-image loader. картинка Sy subrc abap что это. картинка image loader
Вроде простая штука, а в SAPе нужно постараться еще. Всем спасибо.

Источник

Создание диалоговых программ в системе SAP R/3

Экраны SAP R/3

ЭКРАНЫ ВЫБОРА

Параметр определяет поле, которое может использоваться программой-отчетом как обычное поле, определенное с помощью оператора data. После ввода значения в поле ввода данного параметра на экране выбора и нажатия кнопки EXECUTE, это значение заносится в соответствующее поле, определенное параметром.

При вводе значений параметров или составных критериев выборки количество извлекаемых данных автоматически не ограничивается. В предложении WHERE оператора SELECT соответствующие параметры следует размещать так же, как и обычные поля.
Поскольку параметры выполняют роль интерфейсных объектов экрана выбора, то в синтаксисе определения parameters и data есть небольшие различия:
1) Начальное значение параметра определяется с помощью дополнения default (а не value, как для data). Однако это дополнение не является обязательным.
2) Структурированные параметры не поддерживаются (типа записей, задаваемых с помощью операторов BEGIN OF / END OF).
3) Параметры типа C длиной 1 могут выводиться на экран в виде переключателя, если использовать дополнение as checkbox в определении параметра. При выборе поля значение параметра будет равно Х, в противном случае он будет пустым.
Каждый параметр связан со своей определяемой на естественном языке меткой (или названием поля), которая отображается на экране перед полем ввода. Эту метку можно изменить или перевести на другой язык без изменения исходного текста программы.
СОСТАВНЫЕ КРИТЕРИИ ВЫБОРКИ
Составные критерии выборки (SELECT-OPTIONS) обычно применяются при задании сложной выборки (например, диапазона значений, исходного шаблона или их сочетания). Стандартная форма SELECT-OPTIONS на экране выбора имеет 2 поля ввода, позволяющих задать единственное значение или интервал.
Пример:

ABAP/4 автоматически сохраняет введенную информацию во внутренней, стандартно структурированной таблице, которая может использоваться в динамическом предложении WHERE оператора SELECT.

Задание составного критерия выборки в диалоговом окне
COMPLEX SELECTIONS:

Внутренняя таблица, соответствующая составному критерию SELECT-OPTION, всегда состоит из 4 столбцов: SIGN (признак), OPTION (операция), LOW (нижнее значение), HIGH (верхнее значение).
Каждая строка этой таблицы соответствует определенному условию выборки. Поля LOW и HIGH содержат используемые при сравнении значения и связаны с соответствующими полями таблицы: они должны иметь одинаковые тип и длину. Поле HIGH применяется только для задания диапазона значений, в противном случае оно сохраняет начальное значение.
При выполнении программы внутренняя таблица, связанная с составным критерием, автоматически заполняется данными, введенными пользователем на экране выбора. Однако ее можно заполнить значениями по умолчанию до отображения этого экрана, а также работать с ней, как с обычной таблицей (например, проверять введенные пользователем данные на корректность или правдоподобность).
Выполнение таких проверок лучше всего организовать на основе событий экрана выбора. Если какое-нибудь условие проверки не удовлетворяется, на экран выбора можно вывести соответствующее сообщение, после чего обновить экран и разрешить новый ввод данных в поля.
СОБЫТИЯ ЭКРАНА ВЫБОРА
В ABAP/4 предусмотрены события, обеспечивающие задание значений на экране выбора и присвоение критерию выборки этих значений:
INITIALIZATION в?» выполняется сразу после начала создания отчета и до обработки значений, заданных на экране выбора
AT SELECTION-SCREEN OUTPUT в?» выполняется до того, как будет выведен экран выбора
AT SELECTION-SCREEN ON P/S в?» выполняется после задания пользователем параметра p или составного критерия s
AT SELECTION-SCREEN в?» выполняется после ввода всех критериев выборки
Событие INITIALIZATION происходит только однажды, а событие AT SELECTION-SCREEN OUTPUT в?» при каждом нажатии Enter, если экран выборки активен. После обработки всех перечисленных событий ABAP/4 продолжает выполнение события START-OF-SELECTION, обрабатывая самый верхний уровень вложения выборки из базы данных.
События AT SELECTION-SCREEN и AT SELECTION-SCREEN ON P/S рекомендуется использовать для проверки введенных пользователем данных на допустимость значений и правдоподобие.
Каждое сообщение об ошибке, получаемое по событию AT SELECTION-SCREEN, немедленно останавливает программу-отчет и обновляет экран выбора. При этом можно изменить все критерии выборки. Если используется дополнение on p/s, то после события разрешается ввод только данного параметра или составного критерия. Текст сообщения об ошибке создается или изменяется двойным щелчком мыши на поле текста и хранится в системной таблице, содержащей информацию, определяемую на естественном языке.
Для ускорения получения отчета следует запретить неограниченные запросы к базе данных. Во избежание этого в составном критерии можно указать количество строк, которое следует использовать в предложении WHERE оператора SELECT.
Если внутренняя таблица, содержащая составной критерий, пуста, а пользователь не указал никакого критерия, то желательно выводить на экран сообщение об ошибке.
Пример:

ЭКРАНЫ ДИАЛОГА

Логика ДинПро (Dynamic Programs)

Содержимое полей в рабочей области экрана передается соответствующим элементам в программе в модулях PAI или считывается из элементов программы в модулях PBO.

Основной синтаксис описан в таблице.
Ключевое слово Назначение
MODULE Вызывает диалоговый модуль в ABAP программе
FIELD Обозначает точку переноса содержимого поля
ON Используется в сочетании с FIELD
VALUES Используется в сочетании c FIELD
CHAIN Стартует цепочку обработки полей
ENDCHAIN Завершает цепочку обработки полей
CALL Вызывает подэкран
LOOP Цикл обработки экранной таблицы
ENDLOOP Завершает цикл обработки экранной таблицы
Пример:

Обработка событий на экране осуществляется через обработку OK_CODE в модуле PAI (POH, POV).

Вызов ABAP диалоговых модулей

Для проверки нескольких полей используется следующий синтаксис в логике ДинПро:

Следующий модуль вызывается по user-command CS и function type S. Обычно такой код присваивается клавише F2 и так же срабатывает по mouse double-click. Модуль обрабатывается в порядке присутствия во Flow Logic и не пропускает проверок по input.

MODULE AT CURSOR-SELECTION

ПЕРЕДАЧА ДАННЫХ МЕЖДУ ABAP ПРОГРАММАМИ И ЭКРАНАМИ

ТИПЫ СООБЩЕНИЙ ОБ ОШИБКАХ

Технологии расширений функциональности системы SAP R/3

SAP-расширения (User Exits, Customer Exits)

Персонализация
Роли:
Варианты пользователя
Модификация
Нерегистрируемые модификации
Вспомогательные модификации
User exits
Расширение
ABAP dictionary
— Таблицы
— Field exit
Customer exits
-Function module exits
— Menu exits
— Screen exits
Business transaction events
Business Add-Ins
Стандарт R/3 (бизнес приложения)
Доработки

Транзакция SMOD

SE80. Имена Include c User exits содержат 8 позиций и содержат ‘FZ*’.

РЕКОМЕНДАЦИИ ПО ПРОГРАММИРОВАНИЮ USER EXITS

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

Вместо ‘USER’ должно быть имя пользователя под которым вы входите в SAP.

User exits типа в?? INCLUDEs в?? (которые включены в стандартную транзакцию) активизируются сразу после сохранения. Поэтому берегите нервы зарубежных партнеров и наших коллег, которые работают с этой транзакцией, и проверяйте ваш код, а только потом сохраняйте.
User exits типа в??User exits которые используют таблицыв?? надо обязательно активировать иначе ваши последние изменения не будут работать.
Программную точку останова в программе можно сделать так:

Самая информативная утилита для нахождения дополнительной информации это отладчик. В нем можно найти необходимые структуры данных и поля. Проверить область видимости и т.п.

В случае необходимости передать значения между user exit- ми (они часто имеют разные области видимости) используйте механизмы EXPORT в?»IMPORT.

ТРАНЗАКЦИОННЫЕ МОДИФИКАЦИИ

Загрузка данных в систему R/3

Работа с файлами

РАБОТА С ФАЙЛАМИ, НАХОДЯЩИМИСЯ НА СЕРВЕРЕ ПРИЛОЖЕНИЙ

Применение файлового интерфейса включает в себя три основных действия:
открытие файла;
запись или чтение;
закрытие файла.
Для открытия файла, принадлежащего файловой системе на сервере приложений, используется оператор OPEN DATASET, затем указывается имя файла. Для того, чтобы пользователь мог задать имя файла на экране выбора, предусмотрен параметр FILENAME, имеющий атрибут LOWER CASE, поскольку записи пути доступа и имени файла в некоторых ОС чувствительны к регистру.
Если файла с таким именем не существует, то команда OPEN DATASET создаст его. При наличии такого файла впоследствии в него будет записана новая информация. Если к содержимому файла требуется только дописать данные, следует использовать команду OPEN DATASET с дополнением FOR APPENDING. Тогда новые данные будут записаны после существующих.
Дополнение FOR OUTPUT команды OPEN DATASET означает, что данный файл открывается программой ABAP/4 для записи в него выходных данных (результатов). Дополнение IN TEXT MODE сообщает программе, что данные в файле будут представлены в виде строк текста. Разрешается использовать принятое по умолчанию дополнение IN BINARY MODE (в двоичном виде). Двоичные записи применяются для неструктурированных и необработанных данных, которые невозможно интерпретировать при стандартных операциях ввода/вывода. Так, исполняемые программы всегда передаются в виде двоичных кодов.
Если файл недоступен (например, отсутствует заданный путь доступа или соответствующие права доступа к файлу), система возвращает ненулевой код завершения оператора в переменной SY-SUBRC. Текст сообщения об ошибке передается в поле MSG_TEXT, которое следует за дополнением MESSAGE.
Чтобы переслать данные в файл, используется оператор TRANSFER.
Несмотря на то, что система закрывает все открытые программой файлы после ее исполнения, в программировании считается хорошим тоном после завершения работы с файлом закрывать его в явном виде с помощью оператора CLOSE. После того, как файл закрыт и открыт вновь, каждая последующая операция TRANSFER и READ DATASET (запись или чтение) выполняется с начала файла.

Чтение содержимого файла выполняется оператором READ DATASET. Убедиться, что структура данных при записи и чтении файла одинакова, можно, обратившись к Dictionary и используя для обеих программ общие файлы include, содержащие определения структур данных.

ИСПОЛЬЗОВАНИЕ ФАЙЛОВОЙ СИСТЕМЫ РАБОЧЕЙ СТАНЦИИ

В небольшой системе R/3 персональный компьютер (или рабочая станция) одновременно является и сервером представления данных, и сервером приложений. В этом случае пользователь всегда работает с файловой системой ПК и вполне может обходиться рассмотренными ранее командами записи и чтения файла.

В крупных системах сервер приложений обычно устанавливается на другом компьютере. Поскольку исполнительная система ABAP/4 работает на сервере приложений, программные команды transfer и read dataset будут работать с файлами файловой системы сервера приложений. Если же разработчик хочет использовать файловую систему ПК и его сервер представления данных, то следует применять специальные функции ABAP/4:
WS_DOWNLOAD (DOWNLOAD) в?» для сохранения внутренней таблицы в виде файла на сервере представления данных.
WS_UPLOAD (UPLOAD)в?» для загрузки размещенного на сервере представления данных файла во внутреннюю таблицу
Пример:

Технология пакетного ввода (Batch Input, Call Transaction)

Один из принципов системы SAP R/3 в?» ввод информации в систему через бизнес-транзакции, а не путем прямой записи в таблицы базы данных. При этом сохраняется непротиворечивость информации, т.к. база данных обновляется системой, а не напрямую программами разработчика. Для этого в системе SAP R/3 предусмотрена возможность автоматического ввода больших объемов информации (например, из внешнего файла или выполнения повторяющихся действий оператора при обработке значительных объемов информации) через бизнес-транзакции системы.

Технология BAPI

BAPI в?» это строго определенный интерфейс для процессов и данных для прикладных приложений, реализованный в качестве методов объектов.
Бизнес-объекты формируют основу для связи на высоких (удобных для пользователя) уровнях сети. Например, они позволяют системе R/3 функционировать через Интернет или осуществлять связь с программами на настольных ПК. Целью объектно-ориентированной SAP-стратегии является интеграция объектов на хозяйственном, а не на чисто техническом уровне.
Бизнес-объекты:
создают основу для четко определенной связи между системами клиент/сервер;
ориентированы на хозяйственную деятельность: например, существуют такие объекты, как «дебитор», «заказ» или «сотрудник»;
предоставляют бизнес-функции (методы). Например, для объекта «дебитор» существуют такие методы, как «Создание дебитора» и «Просмотр дебитора». Названия таких методов позволяют программировать понятно и, следовательно, без ошибок;
управляются централизованно в системе R/3, в репозитарии бизнес-объектов (РВО).
Интерфейсы BAPI (Business Application Programming Interfaces) являются функциональными интерфейсами. Они используют бизнес-функции, определенные для бизнес-объектов. Интерфесы BAPI можно вызвать как из системы R/3, так и вне ее.
Для поиска BAPI используется транзакция BAPI.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *