воскресенье, 4 октября 2015 г.

Negative numbers in integer division

Решил проверить как работают операции целочисленного деления и остаток от целочисленного деления. Для этого написал небольшую программу:

REPORT z_test_integer_division.

CLASS lcl_controller DEFINITION ABSTRACT FINAL.
  PUBLIC SECTION.
    CLASS-METHODS:
      main.
ENDCLASS.

CLASS lcl_controller IMPLEMENTATION.
  METHOD main.
    " Test integer division and remainder of integer division operators.
    DATA:
      a TYPE i,
      b TYPE i,
      TYPE i.

    a 9.
    b 7.
    DIV b.
    WRITE'Result of 'a' DIV 'b' = 'c.
    a -9.
    b 7.
    DIV b.
    WRITE'Result of 'a' DIV 'b' = 'c.
    a 9.
    b -7.
    DIV b.
    WRITE'Result of 'a' DIV 'b' = 'c.
    a -9.
    b -7.
    DIV b.
    WRITE'Result of 'a' DIV 'b' = 'c.

    a 9.
    b 7.
    MOD b.
    WRITE'Result of 'a' MOD 'b' = 'c.
    a -9.
    b 7.
    MOD b.
    WRITE'Result of 'a' MOD 'b' = 'c.
    a 9.
    b -7.
    MOD b.
    WRITE'Result of 'a' MOD 'b' = 'c.
    a -9.
    b -7.
    MOD b.
    WRITE'Result of 'a' MOD 'b' = 'c.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  lcl_controller=>main).
 

Результат выполнения кода следующий:

Result of           9   DIV           7   =           1
Result of           9-  DIV           7   =           2
Result of           9   DIV           7-  =           1
Result of           9-  DIV           7-  =           2
Result of           9   MOD           7   =           2
Result of           9-  MOD           7   =           5
Result of           9   MOD           7-  =           2
Result of           9-  MOD           7-  =           5


Вывод по результата выполнения программы.
Используется метод отбрасывания дробной части с приближением к наименьшему целому. Знак ближайшего целого определяется по знаку первого операнда. Например, при отрицательном -9 результат деления будет -2, а не -1, т. к. в вещественных числах результат больше -1, а наименьшее целое как раз и будет -2.

вторник, 21 июля 2015 г.

среда, 18 марта 2015 г.

Eclipse IDE tuning for SAP Development Tools

Были проблемы с установкой плагинов SAP Development Tools.
Ошибка получения данных постоянно возникала.
Нашёл решение проблемы в следующем обсуждении. Добавил в параметры запуска исполняемого модуля следующую опцию:
-vmargs -Djava.net.preferIPv4Stack=true

вторник, 27 января 2015 г.

SoapUI: решение проблем с зависанием при запуске

Начал изучать реализацию веб-сервисов в SAP. Нашёл утилиту soapui для тестирования веб-сервисов. Но после установки возникли проблемы по работе с программой. После появления главного окна программы нельзя произвести никаких действий, программа не отвечает на нажатия кнопок мыши и клавиатуры.
В нескольких местах в Интернет нашёл рекомендации по добавлению опции -Dsoapui.jxbrowser.disable=true в файл bin/SoapUI-5.0.0.vmoptions. Но это мне не помогло.
Затем нашёл ещё одну интересную ссылку. По ней начал изменять значение параметра -Xmx в меньшую сторону и опытным путём подобрал, что на значении -Xmx128m программа стала стабильно запускаться.
Мои знания в технологиях Java нулевые. Поэтому подробной расшифровки ошибки дать не могу, но это видимо связано с тем, что ВМ Java требуется целый большой блок ОЗУ, а она его не получает и "зависает".

воскресенье, 17 августа 2014 г.

Round numbers with ROUND FM

Стандартная фунация round() требует подачи на вход значения P типа. Для того, чтобы выполнить округление переменной-числа типа P, можно воспользоваться ФМ ROUND. К этому ФМ есть документация с примером использования.

Замечания по тестированию ФМ. Его не получается толком протестировать из режима тестирования транзакции SE37, т.к. транзакция передаёт значение типа C, а внутри ФМ ROUND выполняется проверка типа переданного параметра, и он должен быть одним из F, P, I. Тест всегда завершается с исключением. Решением является написание тестовой программы.
 

вторник, 29 апреля 2014 г.

Testing ABAP Objects knowledge

Deleting Leading Zeros

The example of code:

REPORT ztest_delete_zeros NO STANDARD PAGE HEADING.

PARAMETERS: str TYPE char10.

START-OF-SELECTION.
  DATA: str2 TYPE char20.

  " Variant 1.
  str2 = str.
  SHIFT str2 LEFT DELETING LEADING '0'.
  WRITE: / 'Before deleting:', str.
  WRITE: / 'After deleting:', str2.

  " Variant 2.
  str2 = str.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
      input  = str2
    IMPORTING
      output = str2.

  WRITE: / 'Before deleting:', str.
  WRITE: / 'After deleting:', str2.

  " Difference between the two variants:
  " variant 1: '00000' --> '';
  " variant 2: '00000' --> '0'.