Найти в Дзене
Гарантирует ли coverage 100% отсутствие runtime error? Нет.
Abap Unit-test являются полезным и мощным функционалом, улучшающим стабильность разработок. В данной заметке я хотел бы показать одну из особенностей подсчета coverage при IF, а именно, что в coverage считается как выполнение условия, так и его отрицание (независимо от того есть ли ELSE или нет), но динамические типы не учитываются. Рассмотрим пример: у нас есть такой метод. Покроем этот метод unit-test (пример ниже). Теперь посчитаем coverage-метрики (покрытие) для branch (по сути строк). Система покажет метрику 2/3, а не 100%...
5 месяцев назад
Определение размера файла на application server SAP NetWeaver
Есть несколько способов определения размеров файлов, так или иначе сводятся к 4 способам. Полный листинг на github. (самый медленный и неэкономный по памяти). Для определения размера файла можно прочитать весь файл и посчитать его размер через xstrlen. ABAP help к функции доступен по ссылке. (также медленный, но экономный по памяти). Читаем файл по строкам, но фиксируем только длину строки через дополнение ACTUAL SIZE к READ DATASET. (экономный по памяти). (через команду операционной системы; если базис/регламент позволяет)...
8 месяцев назад
Работа с производственным календарем (SCAL / OY05) (factory calendar), полезные ФМы и best-practise
В одной из предыдущих статей мы рассматривали как работать с датами и временем: прибавлять и отнимать количество дней/секунд, а также форматировать (статья1, статья2). Однако, зачастую приходится работать именно с датами производственного календаря, а не с простой последовательностью дат. Производственный календарь – это календарь с учетом рабочих и праздничных дней. Его цель – правильно спланировать производственные мощности, сориентироать клиента по срокам производства/доставки, корректно начислить зар...
8 месяцев назад
Еще способы группировки в ABAP-среде: итератор и …
В одной из предыдущих статей мы рассматривали различные способы группировки в ABAP. Однако, тот список не был исчерпывающий (и даже текущий – тоже не исчерпывающий 😊), и есть еще, способы. В данной статье рассмотрим способ через паттерн итератор. Не будем здесь приводить детальное описание паттерна итератор (если нужно – дайте знать в комментариях). Но важно сказать, что это поведенческий паттерн; и его назначение предоставить последовательный доступ ко всем элементам составного объекта (в нашем случае – внутренней таблицы), не раскрывая внутреннего представления...
9 месяцев назад
Использование RTTI для шаблонов на основе sap-script текстов
В одной из предыдущих статей мы разбирали работу с транзакцией SO10 (ведение sap-script длинных текстов): как можно вести текстовый шаблон, как можно копировать и использовать глобальные переменные для вставки значений. Однако, зачастую для вставки значений переменных используют простой find and replace – подход. Этим способом можно вставлять как элементарные переменные, так и табличные. Давайте его рассмотрим. Сделаем через SO10 простой текст и укажем название переменных, которые мы будет подменять...
9 месяцев назад
Способы группировки в ABAP: 3 + 1 способ
При обработке данных иногда требуется сгруппировать данные и посчитать какое-либо агрегированное значение (MAX, MIN, AVG, SUM, COUNT и другие). Традиционно, такие функции реализуются в SQL; однако и на сервере приложений приходится выполнять такие вычисления. В ABAP имеется 3 стандартных способа (встроенных) для группировки с последующим вычислением агрегированных значений, а именно: 1) Группировка с помощью ключей сортированной таблицы 2) Группировка с помощью относительного недавно введенного оператора...
9 месяцев назад
Тройничок: ABAP-Компилятор и ABAP-Runtime и сортированная таблица
В большинстве случае ABAP-компилятор и ABAP-Runtime показывают один и тот же результат: рекомендации или ошибки. Однако не в 100% случаев. Сниппет ниже демонстрирует один из таких вариантов. (полный код). При активации (компиляции) программа не выдаст ошибки, однако в runtime (при запуске) система остановится и будет runtime error: MOVE_TO_LIT_NOTALLOWED_NODATA. Причина: changing параметр предполагает изменение переменной. А в качестве строки в сниппете указана сортированная таблица. В ней нельзя менять порядок строк; и RUNTIME плохо себя чувствует, когда строка передаётся на changing...
9 месяцев назад
QuarzBox: как поступать, если встретил настроечную таблицу
При чтении и анализе можно встретить настроечные таблицы как стандартные так и кастомные. Стандартные ERP-таблицы, имеющие довольно важное значение, начинаются с букву T* (T001, T001L). Но важным свойством настроечной таблицы является пометка C – customizing (для настроечных таблиц клиента) и G – для стандартных настроечных таблиц. Настроечные таблицы, как правило, редактируется через перенос: в системе разработки вносится изменение и далее через транспортную систему осуществляется перенос. Это связано...
10 месяцев назад
QuarzBox / Кварцевая шкаТУЛка - содержимое
В этой колонке пойдет речь о полезных функциональных модулях и классах для вычислений/преобразований, применяемых в ERP и около-ERP системах, а также об алгоритмах, заложенных в подобных функциях. Почему кварцевая? Потому что пьезоэлекрический эффект и точность тактов важны для электроники, а следовательно, для вычислительной техники.. .. и иногда ERP-задачи напоминают: квартеЦ, который затеяли сыграть... :-) Системные переменные (SYST) для даты и времени Конвертация даты и времени (преобразование во внешний формат) Арифметические операции с датой и временем ABAP-help-latest (+ file=built-in types) (E1) Усл...
11 месяцев назад
QuarzBox: Арифметические операции с датой и временем
Дата и время в ABAP – это отдельный тип данных и арифметические операции с этими типами возможны. Давайте рассмотрим простейший расчет первых и последних дней текущего, предыдущего и следующего месяцев. Полный код здесь. -{abap} Листинг1 Первый день месяца текущего, предыдущего и следующего месяца [[[ METHOD _first_day_of_cur_month. DATA lv_target_day TYPE sydatum. DATA ls_res_out TYPE ts_res_out. lv_target_day = sy-datum. lv_target_day+6(2) = '01'. ls_res_out-show_txt = '1st Day of Month'...
11 месяцев назад
QuarzBox: Конвертация даты и времени (преобразование во внешний формат)
Частая операция с датами и времени – это преобразование во внешний и внутренний формат. Давайте рассмотрим варианты преобразования во внешний формат (во внутренний, то есть парсинг – рассмотрим в одной из следующих заметок). Полный код программы находится по ссылке. Есть несколько возможностей преобразования даты во внешний формат: 1) С помощью EDIT MASK -{} Листинг1 [Преобразование во внешний формат с помощью EDIT MASK] DATA ls_date_conv TYPE ts_conv. DATA lv_date_some TYPE sydatum . DATA lv_date_some_str TYPE char10...
11 месяцев назад
QuarzBox: Системные переменные (SYST) для даты и времени
В системных переменных есть несколько переменных, отведенные для определения текущего времени (описание можно найти в справке). SY-DATUM – текущее время сервера; SY-UZEIT – текущее время на сервере; SY-DATLO – текущее время клиента; SY-TIMLO – время клиента; SY-ZONLO – временная зона клиента (из настроек пользователя)...
11 месяцев назад