понедельник, 20 декабря 2010 г.

Web service using FM. Веб сервис на базе ФМ

все просто, встаешь на ФМ-ку, она должна быть рфсишная, жмешь утилиты, дургие утилиты, создать веб сервис) и все :)
там далее далеее везде
потом только еще надо настроить параметры безопасности в транзакции SOAMANAGER
и все
в общем простенько очень все получается
и работает
а забыл, еще в транзакции sicf надо включить сервис всдл )
всдл получаешь в транзакции SOAMANAGER, там выбираешь свой сервис, он он тебе ссылку на шаблон дает

пятница, 17 декабря 2010 г.

Дробное число прописью

FUNCTION z_spell_fract.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(IM_NUMBER)
*" EXPORTING
*" VALUE(EX_SPELL)
*"----------------------------------------------------------------------

DATA lv_dec TYPE int4.
DATA lv_int TYPE int4.
DATA ls_spell TYPE spell.
* Количество десятичных разрядов
DESCRIBE FIELD im_number DECIMALS lv_dec.
* Начнем преобразование
lv_int = TRUNC( im_number ).
CALL FUNCTION 'SPELL_AMOUNT'
EXPORTING
amount = lv_int
currency = '0'
language = 'R'
IMPORTING
in_words = ls_spell
EXCEPTIONS
OTHERS = 1.
ex_spell = ls_spell-word.
* Для дробных чисел
CHECK lv_dec IS NOT INITIAL.
CONCATENATE ex_spell 'целых'
INTO ex_spell SEPARATED BY space.
* Один заменим на Одна
REPLACE 'один целых' IN ex_spell WITH 'одна целая'.
* Дробная часть
im_number = im_number - lv_int.
* Тысячные
im_number = im_number * 1000.
lv_int = TRUNC( im_number ).
im_number = im_number - lv_int.
lv_dec = lv_dec - 3.
IF lv_int IS NOT INITIAL.
CALL FUNCTION 'SPELL_AMOUNT'
EXPORTING
amount = lv_int
currency = '0'
language = 'R'
IMPORTING
in_words = ls_spell
EXCEPTIONS
OTHERS = 1.
TRANSLATE ls_spell-word TO LOWER CASE.
CONCATENATE ex_spell ls_spell-word
INTO ex_spell SEPARATED BY space.
CONCATENATE ex_spell 'тысячных'
INTO ex_spell SEPARATED BY space.
REPLACE 'один тысячных' IN ex_spell WITH 'одна тысячная'.
REPLACE 'два тысячных' IN ex_spell WITH 'две тысячных'.
ENDIF.
* Миллионые
CHECK lv_dec > 0.
im_number = im_number * 1000.
lv_int = TRUNC( im_number ).
im_number = im_number - lv_int.
lv_dec = lv_dec - 3.
IF lv_int IS NOT INITIAL.
CALL FUNCTION 'SPELL_AMOUNT'
EXPORTING
amount = lv_int
currency = '0'
language = 'R'
IMPORTING
in_words = ls_spell
EXCEPTIONS
OTHERS = 1.
TRANSLATE ls_spell-word TO LOWER CASE.
CONCATENATE ex_spell ls_spell-word
INTO ex_spell SEPARATED BY space.
CONCATENATE ex_spell 'миллионных'
INTO ex_spell SEPARATED BY space.
REPLACE 'один миллионных' IN ex_spell WITH 'одна миллионная'.
REPLACE 'два миллионных' IN ex_spell WITH 'две миллионных'.
ENDIF.
* Миллиардные
CHECK lv_dec > 0.
im_number = im_number * 1000.
lv_int = TRUNC( im_number ).
im_number = im_number - lv_int.
lv_dec = lv_dec - 3.
IF lv_int IS NOT INITIAL.
CALL FUNCTION 'SPELL_AMOUNT'
EXPORTING
amount = lv_int
currency = '0'
language = 'R'
IMPORTING
in_words = ls_spell
EXCEPTIONS
OTHERS = 1.
TRANSLATE ls_spell-word TO LOWER CASE.
CONCATENATE ex_spell ls_spell-word
INTO ex_spell SEPARATED BY space.
CONCATENATE ex_spell 'миллиардных'
INTO ex_spell SEPARATED BY space.
REPLACE 'один миллиардных' IN ex_spell WITH 'одна миллиардная'.
REPLACE 'два миллиардных' IN ex_spell WITH 'две миллиардных'.
ENDIF.
*
ENDFUNCTION.