Рассмотрим чтение длинных текстов на примере текста к основным данным материала (текстовый объект - MATERIAL, идентификатор - GRUN). Чтение длинного текста осуществляется с помощью функционального модуля READ_TEXT.
20 марта 2017
19 марта 2017
Прибавить/отнять N лет/месяцев/дней к дате
Чтобы прибавить к дате некоторое количество лет/месяцев/дней, используем функциональный модуль RP_CALC_DATE_IN_INTERVAL.
Чтобы отнять от даты некоторое количество лет/месяцев/дней используем signum = '-'.
DATA: lv_days(2) TYPE n,
lv_months(2) TYPE n,
lv_years(2) TYPE n,
lv_date TYPE d.
" Прибавить к текущей дате 6 месяцев
lv_months = '6'.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = sy-datum
days = lv_days
months = lv_months
* signum = '+'
years = lv_years
IMPORTING
calc_date = lv_date.
Чтобы отнять от даты некоторое количество лет/месяцев/дней используем signum = '-'.
Последний день месяца
Для определения последнего дня месяца используем функциональный модуль BKK_GET_MONTH_LASTDAY.
DATA: lv_date TYPE d.
CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
EXPORTING
i_date = sy-datum
IMPORTING
e_date = lv_date.
" lv_date содержит последний день текущего месяца
Чтение признаков партии и материала
Для чтения признаков партии используем функциональный модуль BAPI_OBJCL_GETDETAIL.
DATA: lv_objkey TYPE bapi1003_key-object,
lt_num TYPE TABLE OF bapi1003_alloc_values_num,
lt_char TYPE TABLE OF bapi1003_alloc_values_char,
lt_curr TYPE TABLE OF bapi1003_alloc_values_curr,
lt_return TYPE TABLE OF bapiret2.
FIELD-SYMBOLS: <lfs_char> LIKE LINE OF lt_char.
CONCATENATE p_matnr p_werks p_charg INTO lv_objkey.
" или
lv_objkey+0(18) = p_matnr.
lv_objkey+18(4) = p_werks.
lv_objkey+22(10) = p_charg.
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
EXPORTING
objectkey = lv_objkey
objecttable = 'MCHA'
classnum = 'ZCLASS01'
classtype = '022'
TABLES
allocvaluesnum = lt_num
allocvalueschar = lt_char
allocvaluescurr = lt_curr
return = lt_return.
READ TABLE lt_char ASSIGNING <lfs_char> WITH KEY charact = 'Z_PARAM01'.
IF sy-subrc EQ 0.
" <lfs_char>-value_char содержит значение признака Z_PARAM01
ENDIF.
Для чтения признаков материала используем objecttable = 'MARA'.
11 сентября 2016
Типы данных
Простые типы
Типы данных делятся на три категории: стандартные, локальные и глобальные.
Стандартные типы бывают фиксированной, заданной или переменной длины.
Стандартные типы могут использоваться для определения локальных типов данных. Локальные типы существуют только в программе и могут использоваться только в ней. Локальный тип определяется служебным словом TYPES.
Глобальные типы определяются в ABAP-словаре и могут использоваться во всей системе (во всей рассматриваемой SAP-системе).
Структуры
Структуры содержат фиксированное число полей и служат для объединения простых полей в более сложный, например, данные о сотруднике. Структуры объявляются служебными словами BEGIN OF и END OF.
Аналогично можно объявить тип структуры, чтобы в дальнейшем использовать его для объявления полей.
Для обращения к полю структуры надо указать её имя и через дефис имя поля.
Системные поля
В системе предусмотрена глобальная структура SYST, которая хранит системные данные. Доступ к ней в программе осуществляется по имени SY. Некоторые значения системных переменных указаны ниже.
Типы данных делятся на три категории: стандартные, локальные и глобальные.
Стандартные типы бывают фиксированной, заданной или переменной длины.
| Фиксированной длины | |
| D | Дата (Date) |
| Формат – ГГГГММДД | |
| Длина – 8 | |
| Значение по умолчанию – ‘00000000’ | |
| T | Время (Time) |
| Формат – ЧЧММСС | |
| Длина – 6 | |
| Значение по умолчанию – ‘000000’ | |
| I | Целое число (Integer) |
| Длина – 4 | |
| Значение по умолчанию – 0 | |
| F | Число с плавающей запятой (Float) |
| Длина – 8 | |
| Значение по умолчанию – 0.0 | |
| Заданной длины | |
| C | Последовательность символов (Character) |
| Длина по умолчанию – 1 | |
| Значение по умолчанию – ‘’ (пустая строка) | |
| N | Последовательность числовых символов (Numericalcharacter) |
| Длина по умолчанию – 1 | |
| Значение по умолчанию – ‘0’ | |
| X | Байтовая последовательность (Hexadecimal) |
| Длина по умолчанию – 1 | |
| Значение по умолчанию – ‘00’ | |
| P | Упакованное число (Packed number) |
| Длина по умолчанию – 8 | |
| Значение по умолчанию – 0 | |
| Переменной длины | |
| STRING | Последовательность символов переменной длины (String) |
| XSTRING | Байтовая последовательность переменной длины (Hexadecimal string) |
Поле – это переменная, которая хранит данные. Поля объявляются служебным словом DATA с указанием типа данных, а также длины и количества десятичных разрядов, если это применимо.
" Объявление поля name символьного типа длиной 30 символов DATA name TYPE c LENGTH 30. " Также длину поля можно указать в скобках DATA name(30) TYPE c. " Можно задать начальное значение поля служебным словом VALUE DATA name(30) TYPE c VALUE 'John'. " Если не указан тип поля, по умолчанию используется " символьный тип C DATA name(30) VALUE 'John'. " Если не указана длина поля, используется длина по умолчанию " для указанного типа DATA flag TYPE c. " Объявление поля flag символьного типа длиной 1 символ DATA flag. " Объявление поля count целого типа DATA count TYPE i. " Объявление поля amount упакованного типа длиной 10 " с количеством десятичных разрядов 3 DATA amount(10) TYPE p DECIMALS 3.
Объявление нескольких полей можно объединить, поставив после DATA двоеточие и записав объявление полей через запятую.
DATA: name(30),
count TYPE i,
flag.
При объявлении упакованного типа надо учитывать, что на один символ приходится полбайта, включая знак числа. Т.е. при указании длины 10 подразумевается, что итоговая разрядность числа будет 16 (1 символ определяет знак числа +/-, 3 символа приходится на десятичную часть и оставшиеся 16 символов – на целую часть). Таким образом, диапазон чисел, которые может хранить поле amount из последнего примера от -9 999 999 999 999 999,999 до 9 999 999 999 999 999,999.
Чтобы определить поле того же типа, что и ранее объявленное, вместо TYPE используется LIKE.
Чтобы определить поле того же типа, что и ранее объявленное, вместо TYPE используется LIKE.
DATA: first_name(50) TYPE c,
last_name LIKE first_name.
Константа определяется словом CONSTANTS с указанием типа, длины и числа десятичных разрядов аналогично объявлению полей. Дополнение VALUE для константы обязательно. Таким образом определяется её значение.
CONSTANTS name_john TYPE c LENGTH 30 VALUE 'John'.
Стандартные типы могут использоваться для определения локальных типов данных. Локальные типы существуют только в программе и могут использоваться только в ней. Локальный тип определяется служебным словом TYPES.
" Определяется символьный тип длиной 30 символов TYPES t_name(30). " Определяется поле типа t_name DATA name TYPE t_name.
Глобальные типы определяются в ABAP-словаре и могут использоваться во всей системе (во всей рассматриваемой SAP-системе).
Структуры
Структуры содержат фиксированное число полей и служат для объединения простых полей в более сложный, например, данные о сотруднике. Структуры объявляются служебными словами BEGIN OF и END OF.
DATA: BEGIN OF employee,
first_name(50),
last_name(50),
birthday TYPE d,
END OF employee.
TYPES: BEGIN OF t_employee,
first_name(50),
last_name(50),
birthday TYPE d,
END OF t_employee.
DATA: employee TYPE t_employee.
Для обращения к полю структуры надо указать её имя и через дефис имя поля.
employee-first_name = 'John'. employee-last_name = 'Smith'. employee-birthday = '19820101'.
Системные поля
В системе предусмотрена глобальная структура SYST, которая хранит системные данные. Доступ к ней в программе осуществляется по имени SY. Некоторые значения системных переменных указаны ниже.
| SY-DATUM | Актуальная дата сервера приложений |
| SY-UZEIT | Актуальное время сервера приложений |
| SY-INDEX | Счетчик цикла DO |
| SY-TABIX | Индекс в цикле LOOP |
| SY-SUBRC | Код возврата, содержит результат последней выполненной операции. SY-SUBRC = 0 в случае успешного выполнения. |
| SY-LANGU | Язык входа в систему |
| SY-BATCH | Программа выполняется в фоновом режиме |
| SY-BINPT | Программа выполняется в рамках пакетного ввода |
| SY-REPID | Имя текущей программы |
| SY-UNAME | Имя пользователя |
28 августа 2016
Расширение Документа материала
Расширение структур MSEG, BAPI_TE_XMSEG, IMSEG и пример использования BAPI BAPI_GOODSMVT_CREATE.
03 августа 2016
Прямое редактирование записей в таблице
1. Запускаем транзакцию SE16N.
2. Вводим имя таблицы.
3. Активируем отладку ("/h" в поле команды и Enter).
4. Нажимаем "Выполнить" (клавиша F8).
5. В отладчике подменяем значение полей GD-EDIT и GD-SAPEDIT на "X".
6. Нажимаем "Далее" (клавиша F8).
7. Режим редактирования активирован.
Ещё один вариант:
1. Запускаем транзакцию SE16N.
2. Вводим "&SAP_EDIT" в поле команды и Enter.
3. Нажимаем "Выполнить" (клавиша F8).
4. Режим редактирования активирован.
2. Вводим имя таблицы.
3. Активируем отладку ("/h" в поле команды и Enter).
4. Нажимаем "Выполнить" (клавиша F8).
5. В отладчике подменяем значение полей GD-EDIT и GD-SAPEDIT на "X".
6. Нажимаем "Далее" (клавиша F8).
7. Режим редактирования активирован.
Ещё один вариант:
1. Запускаем транзакцию SE16N.
2. Вводим "&SAP_EDIT" в поле команды и Enter.
3. Нажимаем "Выполнить" (клавиша F8).
4. Режим редактирования активирован.
21 июня 2016
Расширение ОЗМ
Расширение структур MARA, BAPI_TE_MARA, BAPI_TE_MARAX и пример использования BAPI BAPI_MATERIAL_SAVEDATA.
11 июня 2016
Цвета ALV Grid

Программа для демонстрации цветов:
TYPES: BEGIN OF ty_s_data,
text TYPE text10,
linecolor TYPE lvc_t_scol,
END OF ty_s_data.
DATA: lv_index TYPE i,
ls_color TYPE lvc_s_scol,
lt_color TYPE lvc_t_scol,
lt_data TYPE TABLE OF ty_s_data,
ls_data LIKE LINE OF lt_data,
lr_alv TYPE REF TO cl_salv_table,
lr_layout TYPE REF TO cl_salv_layout,
ls_key TYPE salv_s_layout_key,
lr_functions TYPE REF TO cl_salv_functions_list,
lr_columns TYPE REF TO cl_salv_columns_table.
* empty row with default color
APPEND ls_data TO lt_data.
* rows with possible colors
DO 7 TIMES.
ls_color-color-col = sy-index. " 1-7
DO 2 TIMES.
lv_index = sy-index - 1.
ls_color-color-int = lv_index. " 0-1
DO 2 TIMES.
lv_index = sy-index - 1.
ls_color-color-inv = lv_index. " 0-1
APPEND ls_color TO lt_color.
* ls_data-col = ls_color-color-col.
* ls_data-int = ls_color-color-int.
* ls_data-inv = ls_color-color-inv.
ls_data-text = 'C' && ls_color-color-col && ls_color-color-int && ls_color-color-inv.
ls_data-linecolor = lt_color.
APPEND ls_data TO lt_data.
CLEAR lt_color.
ENDDO.
ENDDO.
ENDDO.
CLEAR ls_data.
APPEND ls_data TO lt_data.
cl_salv_table=>factory(
IMPORTING
r_salv_table = lr_alv
CHANGING
t_table = lt_data ).
lr_layout = lr_alv->get_layout( ).
ls_key-report = sy-repid.
ls_key-handle = 'ALV1'.
lr_layout->set_key( ls_key ).
lr_layout->set_default( abap_true ).
lr_layout->set_save_restriction( ).
lr_functions = lr_alv->get_functions( ).
lr_functions->set_all( abap_true ).
lr_columns = lr_alv->get_columns( ).
lr_columns->set_optimize( abap_true ).
lr_columns->set_color_column( 'LINECOLOR' ).
lr_alv->display( ).
10 июня 2016
Средство поиска вариантов для ALV Grid
DATA: gs_vari TYPE disvariant.
gs_vari-report = sy-repid.
gs_vari-handle = 'ALV1'.
CALL FUNCTION 'LVC_VARIANT_DEFAULT_GET'
EXPORTING
i_save = 'A'
CHANGING
cs_variant = gs_vari
EXCEPTIONS
wrong_input = 1
not_found = 2
program_error = 3
OTHERS = 4.
CALL FUNCTION 'LVC_VARIANT_F4'
EXPORTING
is_variant = gs_vari
* it_default_fieldcat =
i_save = 'A'
IMPORTING
* e_exit =
es_variant = gs_vari
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
08 июня 2016
Средство поиска для ввода даты
Для вызова средства поиска для ввода даты можно использовать функциональный модуль "F4_DATE".
CALL FUNCTION 'F4_DATE'
EXPORTING
date_for_first_month = lv_date_start
* display = ' '
* factory_calendar_id = ' '
* gregorian_calendar_flag = ' '
* holiday_calendar_id = ' '
* progname_for_first_month = ' '
IMPORTING
select_date = lv_date_select
* select_week =
* select_week_begin =
* select_week_end =
EXCEPTIONS
calendar_buffer_not_loadable = 1
date_after_range = 2
date_before_range = 3
date_invalid = 4
factory_calendar_not_found = 5
holiday_calendar_not_found = 6
parameter_conflict = 7
OTHERS = 8.
Приветствие!
Привет всем!
Здесь будем писать обо всём, что связано с ABAP. Примеры кода, полезные транзакции и ФМы.
Здесь будем писать обо всём, что связано с ABAP. Примеры кода, полезные транзакции и ФМы.
Подписаться на:
Сообщения (Atom)