11 сентября 2016

Типы данных

Простые типы

Типы данных делятся на три категории: стандартные, локальные и глобальные.

Стандартные типы бывают фиксированной, заданной или переменной длины.

Фиксированной длины
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.

  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Имя пользователя

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. Режим редактирования активирован.

21 июня 2016

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. Примеры кода, полезные транзакции и ФМы.