понедельник, 9 февраля 2015 г.

Exchange rate

RSCUR

RSIMPCURFILE - загрузка currency из файла
BAPI_EXCHRATE_CREATEMULTIPLE

RSIMPCURR - for scheduling job

TCURR Currency values
TCURC Currency codes
TCURT Currency name
TCURX Decimal places for currencies.

http://scn.sap.com/docs/DOC-47620
OB07 - ведение Exchange rate types
OB08 - ведение курсов в таблице TCURR
OBBS - maintance Currencies:Translation Ratios

CONVERT_TO_FOREIGN_CURRENCY- Translate local currency amount to foreign currency
CONVERT_TO_LOCAL_CURRENCY - Translate foreign currency amount to local currency
RSW_CURRENCY_TRANSLATION
READ_EXCHANGE_RATE to get the exchange rate.

В докидку если надо будет хранить курс в показателе
http://scn.sap.com/docs/DOC-12019

среда, 4 февраля 2015 г.

Вставка значений в инфо-пакет

Время от времени возникает задачи загрузки данных из исходной системы по определенным ограничениям. Проблема возникает, когда этих ограничений не пара десятков, а пара тысяч и более... и полная загрузка не возможна \ не желательна.

Можно конечно, создать отдельный признак или DSO откуда Вы будете считывать данные в ABAP рутине, а туда загружать файлом. Но есть путь проще...

Используя OLAP переменную вызвать стандартный диалог ввода значений. После запуска пакета Вы получите диалог ввода значений.


Для универсальности я сделал customer-exit переменную на признаке 0TCTIOBJVAL (из тех.контента и 60CHAR) с следующими настройками.


CMOD:

IF I_STEP = 0 AND I_VNAM = 'ZC_SO_0TCTIOBJVAL'.

  CALL FUNCTION 'COMPLEX_SELECTIONS_DIALOG'
    EXPORTING
*     TITLE                   = ' '
      TEXT                    = 'Enter correct values'
*     SIGNED                  = 'X'
*     LOWER_CASE              = ' '
*     NO_INTERVAL_CHECK       = ' '
*     JUST_DISPLAY            = ' '
      JUST_INCL               = 'X'
*     EXCLUDED_OPTIONS        =
*     DESCRIPTION             =
*     HELP_FIELD              =
*     SEARCH_HELP             =
*     TAB_AND_FIELD           =
    TABLES
      RANGE                   = E_T_RANGE
   EXCEPTIONS
     NO_RANGE_TAB            = 1
     CANCELLED               = 2
     INTERNAL_ERROR          = 3
     INVALID_FIELDNAME       = 4
     OTHERS                  = 5
            .
  IF SY-SUBRC <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDIF.

 

И указать переменную в пакете

Готово.

Плюсы:
- OLAP переменная может быть вставлена на любую характеристику, любого пакета, любого источника - универсальность.
- пакеты обычно измеряемы в прод, т.о. вы готовы
- переменную можно использовать несколько раз в одном пакете
- значения ограничения введенные в ручную и через переменную работают вместе


Минусы:
- из-за универсальности, необходимо следить за форматом значений. т.е. если нужны ведущие нули, будьте добры добавить. Но для спорадических задач по загрузке больших блоков данных этого более чем достаточно.

Особенности: Количество передаваемых ограничений через параметры ограничено и зависит от размера характеристики. Ноту я не нашел.... но 700 значений за раз я передавал.

Доработки:
Можно сделать несколько таких переменных, с преобразованием значения признака и подключенным search help. Для этого при вызове COMPLEX_SELECTIONS_DIALOG использовать параметры:

     SEARCH_HELP
     TAB_AND_FIELD




Цепочки

Цепочка с задержкой

RSPCLOGCHAIN
RSPCCHAIN


RSPCVARIANT
SE37 - RSPC_VARIANT_DELETE


Коллегам тут понадобилось организовать запуск процесса с задержкой. Очень было удобно организовать это с помощью опции Debug Loop.



 Тестовый пример реализации:

Обработка ошибок

Далее... необходимо было чтобы цепочка завершалась с зеленым статусом, в случае если произошла предусмотренная ошибка (красная линия). Данная настройка как раз позволяет это сделать. В случае если в цепочке произойдет сбой без обработчика - статус будет красным.

Сообщения привязанные к этой цепочке (снаружи) отрабатывали согласно статусу цепочки.

Process Chain \ Attributes \ Process status valuation



запуск ABAP

Казалось бы, какие могут быть вопросы.

Но попали на нюанс, что ALEREMOTE не имел достаточным прав в продуктиве (се ля ви) и нужно запускать под другим пользователем. И да, ошибка авторизации не всплывала как ошибка, ABAP программа отрабатывала "успешно" с зеленым статусом.

Process Chain \ Attributes \ Execution User


Если ABAP программа склонна к дампу, то лучше её обернуть в цепочку. В общем, при дампе программы просто прерывалось выполнение всей цепочки. Обернутая же, и продолжала выполнение, и статус возвращала.

Цикл

Для циклической загрузки данных удобно использовать элемент Previous Run Active? а саму цепочку запланировать выполняться каждые 20 минут.


Если нужна будут выборки, ну приодеться повозиться с переменными и TVARV.

Интересное решение на основе статистики SAP BI - Load Schedule Map
И ещё - BW Tools - /SSA/BWT