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
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) или символу поля ( ).
Populate internal table GT_CITYS with the cities from GT_SHIPS.
Populate internal table GT_CITYS with the cities from GT_SHIPS where the route is R0001.
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:
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»).
Sum the values 1 to 10 stored in the column of a table defined as follows
Сложите значения 1 и 10, хранящиеся в таблице, как показано ниже.
Using a class reference – works because “write” method returns reference to instance object
… 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] )
Given structures ls_line1 & ls_line2 defined and populated as above.
Определение и заполнение данной структуры ls_line1 и ls_line2 описаны выше.
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 всегда равен нулю.
Специалист |
Зарегистрирован:
Чт, авг 19 2004, 07:31
Сообщения: 234
Откуда: Нижнекамск
Э-э-э. данные не совсем отсутствуют запрос по любому возвращает данные с нулевыми суммами |
Почетный гуру |
Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Специалист |
Зарегистрирован:
Ср, июн 22 2005, 09:51
Сообщения: 208
Пол: Мужской
Select single count( * ) into iCount from. if iCount eq 0. _________________ |
Старший специалист |
Зарегистрирован:
Ср, авг 18 2004, 09:17
Сообщения: 477
Откуда: Москва
Пол: Мужской
Старший специалист |
Зарегистрирован:
Ср, авг 18 2004, 09:17
Сообщения: 477
Откуда: Москва
Пол: Мужской
Select single count( * ) into iCount from. if iCount eq 0. Господа саперы я наверно не совсем правильно вам объяснил, что меня интересует. Меня интересует наличие записей в таблице по заданным критериям выборки, а не вообще наличие любых. Вот что я сделал чтобы sy-subrc все таки менялся. SELECT VID_CH_F SUM( SUM_ALL ) SUM( SUM_WO_NDS20 ) SUM( SUM_NDS20 ) Но по-моему добавлять лишнее поле(nom_ch_f) в выборку и соотвественно еще производить GROUP BY по нему(по-другому не работает. ) это полный бред. |
Старший специалист |
Зарегистрирован:
Ср, авг 18 2004, 09:17
Сообщения: 477
Откуда: Москва
Пол: Мужской
Гуру-эксперт |
Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
Гуру-эксперт |
Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
sy-dbcnt возвращает количество обработанных записей |
Специалист |
Зарегистрирован:
Чт, авг 19 2004, 07:31
Сообщения: 234
Откуда: Нижнекамск
sy-dbcnt возвратит единицу для первоначального запроса лучше действительно count использовать как многие советуют Всем спасибо. Действительно ситуацию исправил пресловутый count. Рад был со всеми пообщаться. Спасибо. Часовой пояс: UTC + 3 часа Кто сейчас на конференции |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |
Логотип © 2006 Андрей Горшков
Поддержка: Кирилл Андреев, 2011-…
ABAP Blog
Все о разработке в решениях от SAP
ABAP Blog
Все о разработке в решениях от SAP
Ссылки
Цитаты
Сложность убивает. Она вытягивает жизненные силы из разработчиков, затрудняя планирование, построение и тестирование продуктов.
Р. Оззи.
Новое
Последние комментарии
ABAP bad practice
По своему роду деятельности часто приходится разбираться с чужим ABAP кодом, в котором постоянно встречаются одни и те же проблемы, вызывающие «головную боль» при сопровождении. В данной статье будут рассмотрены основные из них.
UPDATE. На сайт добавлен раздел с лучшими практиками.
Незнание основополагающих принципов разработки
Описанные далее принципы не относятся напрямую к языку ABAP и применимы так же к другим языкам.
KISS принцип
Существует множество расшифровок данного принципа:
Проще говоря, программный код должен состоять из как можно более простых для понимания и сопровождения блоков. Не должно быть «портянок» по 10 тыс. строк подряд, особенностью такого кода является увеличение вложенности условных конструкций и общее усложнение логики работы. Относительно гайдлайна по ABAP, процедура или метод должны содержать не более 150 выражений.
На приведенном ниже рисунке (из официальной документации ABAP) показан пример того, как после рефакторинга 1 метод со сложной логикой был разделен на 3 отдельных.
Подобный рефакторинг позволяет упростить для понимания и сопровождения систему. Каждый из выделенных методов отвечает за конкретные операции. В лучшем случае изменяя один, не придется менять остальные.
В данном примере можно выделить запись истории в отдельную процедуру, которая будет отвечать именно за запись журнала:
При необходимости изменения таблицы с журналами, вам не придется менять остальные процедуры в которых вызывается процедура записи истории.
Разделение ответственности (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-кода.
Выглядит примерно так:
Добро пожаловать под кат.
Поехали! Определим глобальные переменные:
— Выходная таблица нашего отчета, пусть она будет на основе всем известной таблицы 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) Обновим отчет.
Запускаем! Любуемся на итог страданий:
UPDATE: можно довести до:
Вроде простая штука, а в 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.
- Как играть в настольный вархаммер
- Как зовут жителей старой руссы