В языке ABAP/4 есть замечательная вещь — внутренняя таблица. Это массив данных, который структурирован по полям. Замечательно в этой штуке то, что её можно создать на основе таблицы или структуры словаря, можно описать вручную. При этом поля внутренней таблицы могут ссылаться на поля таблиц словаря, могут быть описаны явно, при помощи ссылки на тип данных.

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

Ранее мы написали программу, которая вычисляет количество рабочих дней в интервале между двумя датами (даты включались в интервал), алгоритм там был основан на переборе дат в периоде и проверке, является ли следующая дата выходным.

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

REPORT  ZART_TEST1.
parameters: d_start like  SCAL-DATE obligatory,
d_end   like  SCAL-DATE obligatory.
data:       holidays type table of ISCAL_DAY.
data:       n_holidays(100) type n.
data:       n_factdays(100) type n.

CALL FUNCTION ‘HOLIDAY_GET’
EXPORTING
HOLIDAY_CALENDAR                 = ‘RU’
FACTORY_CALENDAR                 = ‘RU’
DATE_FROM                        = d_start
DATE_TO                          = d_end
* IMPORTING
*   YEAR_OF_VALID_FROM               =
*   YEAR_OF_VALID_TO                 =
*   RETURNCODE                       =
TABLES
HOLIDAYS                         = holidays
* EXCEPTIONS
*   FACTORY_CALENDAR_NOT_FOUND       = 1
*   HOLIDAY_CALENDAR_NOT_FOUND       = 2
*   DATE_HAS_INVALID_FORMAT          = 3
*   DATE_INCONSISTENCY               = 4
*   OTHERS                           = 5
.
IF SY-SUBRC <> 0.
write:/ ‘Ошибка!!!’.
else.
describe table holidays lines n_holidays.
n_factdays = d_end - d_start - n_holidays + 1.

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_OUTPUT’
EXPORTING
INPUT         = n_factdays
IMPORTING
OUTPUT        = n_factdays
.

write:/’Число рабочих дней: ‘, n_factdays.
ENDIF.

 Оставить комментарий

(требуется)

(требуется)


шесть − один =

Вы можете использовать HTML теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

   
© 2013 sap-blog.ru
Яндекс.Метрика