Инкремент шестнадцатеричных чисел на ABAP

добавлено: 21 сен 18
понравилось:0
просмотров: 849
комментов: 1

теги:

Автор: Изя Шниперсон

Друзья, всем известен способ ведения генерации порядковых номеров документов для номеров
с десятеричными цифрами. В транзакции SNRO ведутся диапазоны номеров, а с помощью
функционального модуля NUMBER_GET_NEXT можно получить следующий порядковый номер из диапазона.
В этом очерке описываю, генератор номеров с шестнадцатеричными цифрами на ABAP,
представляю небольшую подпрограмму, увеличивающую шестнадцатеричное число на единицу.
Подпрограмма получает на вход шестнадцатеричное число и увеличивает его на единицу.
*&---------------------------------------------------------------------*
*&      Form  INCREASE_KEY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM INCREASE_KEY  CHANGING pv_key type wanid.
  CONSTANTS:

     c_transl  type text100 value

               '0112233445566778899AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ0'.

  TRANSLATE pv_key+2(1)  USING c_transl.

  IF pv_key+2(1) = '0'.

    TRANSLATE pv_key+1(1)  USING c_transl.

    IF pv_key+1(1) = '0'.

      TRANSLATE pv_key+0(1)  USING c_transl.

    ENDIF.

  ENDIF.

ENDFORM.                    " INCREASE_KEY

Комментарии


  • А в чем польза этой функции? Генерация порядковых номеров является потокобезопасной - при одновременном вызове в двух и более потоках она корректно вернет разные числа.
    Если же нужно сгенерировать новый шестнадцатиричный номер, используя предыдущий, то при параллельном вызове такой функции в двух потоках на входе и на выходе будет одно и то же число.



Необходимо войти на сайт, чтобы оставлять комментарии