все просто, встаешь на ФМ-ку, она должна быть рфсишная, жмешь утилиты, дургие утилиты, создать веб сервис) и все :)
там далее далеее везде
потом только еще надо настроить параметры безопасности в транзакции SOAMANAGER
и все
в общем простенько очень все получается
и работает
а забыл, еще в транзакции sicf надо включить сервис всдл )
всдл получаешь в транзакции SOAMANAGER, там выбираешь свой сервис, он он тебе ссылку на шаблон дает
понедельник, 20 декабря 2010 г.
пятница, 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.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" 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.
вторник, 26 октября 2010 г.
Расчет формул в программе
CALL FUNCTION 'EVAL_FORMULA'
EXPORTING
formula =-var_factor
program = c_cprog
routine = 'GET_VALUES'
IMPORTING
value = l_result
EXCEPTIONS
OTHERS = 1.
*&---------------------------------------------------------------------*
*& Form GET_VALUES
*&---------------------------------------------------------------------*
* Значения для формулы
*----------------------------------------------------------------------*
* -->PARM Имя переменной
* -->WERT Ее значение
* -->SUBRC Код возврата
*----------------------------------------------------------------------*
FORM get_values USING name CHANGING value subrc.
FIELD-SYMBOLS:
TYPE ANY
.
value = 0.
subrc = 0.
ASSIGN COMPONENT name OF STRUCTURE ls_line TO.
IF sy-subrc EQ 0.
TRY.
MOVE TO value.
CATCH cx_root.
subrc = 1.
ENDTRY.
ELSE.
subrc = 1.
ENDIF.
ENDFORM. "GET_VALUES
*&---------------------------------------------------------------------*
*& Form CHECK_VALUES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->VAR Имя переменной
* -->SUBRC Код возврата
*----------------------------------------------------------------------*
FORM check_values USING name CHANGING subrc.
FIELD-SYMBOLS:
TYPE ANY
.
subrc = 0.
ASSIGN COMPONENT name OF STRUCTURE ls_line TO.
IF sy-subrc NE 0.
subrc = 1.
ENDIF.
ENDFORM. "CHECK_VALUES
**********************************************************************
EXPORTING
formula =
program = c_cprog
routine = 'GET_VALUES'
IMPORTING
value = l_result
EXCEPTIONS
OTHERS = 1.
*&---------------------------------------------------------------------*
*& Form GET_VALUES
*&---------------------------------------------------------------------*
* Значения для формулы
*----------------------------------------------------------------------*
* -->PARM Имя переменной
* -->WERT Ее значение
* -->SUBRC Код возврата
*----------------------------------------------------------------------*
FORM get_values USING name CHANGING value subrc.
FIELD-SYMBOLS:
.
value = 0.
subrc = 0.
ASSIGN COMPONENT name OF STRUCTURE ls_line TO
IF sy-subrc EQ 0.
TRY.
MOVE
CATCH cx_root.
subrc = 1.
ENDTRY.
ELSE.
subrc = 1.
ENDIF.
ENDFORM. "GET_VALUES
*&---------------------------------------------------------------------*
*& Form CHECK_VALUES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->VAR Имя переменной
* -->SUBRC Код возврата
*----------------------------------------------------------------------*
FORM check_values USING name CHANGING subrc.
FIELD-SYMBOLS:
.
subrc = 0.
ASSIGN COMPONENT name OF STRUCTURE ls_line TO
IF sy-subrc NE 0.
subrc = 1.
ENDIF.
ENDFORM. "CHECK_VALUES
**********************************************************************
вторник, 19 октября 2010 г.
Расчет остаточной стоимости ОС
интерфейс расчета
IM_BUKRS Importing Type ANLA-BUKRS Балансовая единица
IM_ANLN1 Importing Type ANLA-ANLN1 Основной номер основного средства
IM_ANLN2 Importing Type ANLA-ANLN2 Субномер основного средства
IM_AFABE Importing Type ANEP-AFABE Реальная область оценки
IM_DATE Importing Type DATUM Дата
EX_PERV_ST Exporting Type DATA Первоначальная стоимость
EX_NAKOP_AMORT Exporting Type DATA Накопленная амортизация
EX_TYP_AMORT Exporting Type DATA Накопленная типовая амортизация
EX_SPEC_AMORT Exporting Type DATA Накопленная особая амортизация
EX_PEREOC_PST Exporting Type DATA Переоценка ПСт
EX_PEREOC_AMORT Exporting Type DATA Переоценка Амортизации
EX_PST_BEZ_PEREOC Exporting Type DATA ПСт без учета переоценки
выбор данных
SELECT * FROM anlc
INTO TABLE gt_anlc
FOR ALL ENTRIES IN fa_list_afabe
WHERE bukrs = fa_list_afabe-bukrs
AND anln1 = fa_list_afabe-anln1
AND anln2 = fa_list_afabe-anln2
AND gjahr = gv_enddate(4)
AND afabe = fa_list_afabe-afabe_.
v_peraf+1(2) = gv_enddate+4(2).
SELECT * FROM anlp
INTO TABLE gt_anlp
FOR ALL ENTRIES IN fa_list_afabe
WHERE bukrs = fa_list_afabe-bukrs
AND gjahr = gv_enddate(4)
AND afaber = fa_list_afabe-afabe_
AND anln1 = fa_list_afabe-anln1
AND anln2 = fa_list_afabe-anln2
AND peraf <= v_peraf. SELECT * FROM anep INTO TABLE gt_anep FOR ALL ENTRIES IN fa_list_afabe WHERE bukrs = fa_list_afabe-bukrs AND anln1 = fa_list_afabe-anln1 AND anln2 = fa_list_afabe-anln2 AND afabe = fa_list_afabe-afabe_ AND bzdat BETWEEN gv_begdate AND gv_enddate. IF NOT gt_anep IS INITIAL. SELECT * FROM anea INTO TABLE gt_anea FOR ALL ENTRIES IN gt_anep WHERE bukrs = gt_anep-bukrs AND anln1 = gt_anep-anln1 AND anln2 = gt_anep-anln2 AND gjahr = gt_anep-gjahr AND afabe = gt_anep-afabe AND lnran = gt_anep-lnran. ENDIF. расчет METHOD get_amounts_on_date. FIELD-SYMBOLS TYPE anep.
FIELD-SYMBOLS TYPE anea.
FIELD-SYMBOLS TYPE anlp.
FIELD-SYMBOLS TYPE LINE OF tt_amount_on_date.
DATA ls_amounts TYPE LINE OF tt_amount_on_date.
DATA lv_anlc_gjahr TYPE gjahr.
DATA lv_peraf TYPE anlp-peraf.
DATA ls_anlc TYPE anlc.
DATA lv_prev_gjahr TYPE gjahr.
DATA lv_perv_st TYPE anep-anbtr.
DATA lv_nakop_amort TYPE anep-anbtr.
DATA lv_typ_amort TYPE anep-anbtr.
DATA lv_spec_amort TYPE anep-anbtr.
DATA lv_pereoc_pst TYPE anep-anbtr.
DATA lv_pereoc_amort TYPE anep-anbtr.
DATA lv_bwagrp TYPE tabw-bwagrp.
DATA lv_bwatyp TYPE tabwg-bwatyp.
DATA lv_gitcol TYPE tabwg-gitcol.
CLEAR: ex_perv_st, lv_perv_st.
CLEAR: ex_nakop_amort, lv_nakop_amort.
CLEAR: ex_typ_amort, lv_typ_amort.
CLEAR: ex_spec_amort, lv_spec_amort.
CLEAR: ex_pereoc_pst, lv_pereoc_pst.
CLEAR: ex_pereoc_amort, lv_pereoc_amort.
CLEAR: ex_pst_bez_pereoc.
READ TABLE gt_amounts WITH TABLE KEY bukrs = im_bukrs
anln1 = im_anln1
anln2 = im_anln2
date = im_date
afabe = im_afabe ASSIGNING.
IF sy-subrc = 0.
ex_perv_st =-perv_st.
ex_nakop_amort =-amort.
ex_typ_amort =-amort_typ.
ex_spec_amort =-amort_spec.
ex_pereoc_pst =-pereoc_pst.
ex_pereoc_amort =-pereoc_amort.
ex_pst_bez_pereoc =-pst_bez_pereoc.
EXIT.
ENDIF.
**********************************************************************
lv_prev_gjahr = gv_enddate(4) - 1.
IF im_date+4(4) = '1231' AND im_date(4) = lv_prev_gjahr.
lv_anlc_gjahr = im_date(4) + 1.
ELSE.
lv_anlc_gjahr = im_date(4).
ENDIF.
lv_peraf+1(2) = im_date+4(2).
READ TABLE gt_anlc WITH TABLE KEY bukrs = im_bukrs
anln1 = im_anln1
anln2 = im_anln2
afabe = im_afabe
gjahr = lv_anlc_gjahr INTO ls_anlc.
IF im_date+4(4) = '1231' AND im_date(4) = lv_prev_gjahr.
lv_perv_st = ls_anlc-kansw + ls_anlc-kaufw.
lv_nakop_amort = ls_anlc-knafa + ls_anlc-kaafa + ls_anlc-kaufn + ls_anlc-ksafa.
lv_typ_amort = ls_anlc-knafa + ls_anlc-kaafa + ls_anlc-kaufn.
lv_spec_amort = ls_anlc-ksafa.
lv_pereoc_pst = ls_anlc-kaufw.
lv_pereoc_amort = ls_anlc-kaufn.
ELSE.
lv_perv_st = ls_anlc-kansw + ls_anlc-kaufw.
lv_nakop_amort = ls_anlc-knafa + ls_anlc-kaafa + ls_anlc-kaufn + ls_anlc-ksafa.
lv_typ_amort = ls_anlc-knafa + ls_anlc-kaafa + ls_anlc-kaufn.
lv_spec_amort = ls_anlc-ksafa.
lv_pereoc_pst = ls_anlc-kaufw.
lv_pereoc_amort = ls_anlc-kaufn.
LOOP AT gt_anlp ASSIGNING WHERE bukrs = im_bukrs
AND gjahr = lv_anlc_gjahr
AND afaber = im_afabe
AND anln1 = im_anln1
AND anln2 = im_anln2
AND peraf <= lv_peraf. lv_nakop_amort = lv_nakop_amort +-nafaz + -aafaz + -safaz.
lv_typ_amort = lv_typ_amort +-nafaz + -aafaz.
lv_spec_amort = lv_spec_amort +-safaz.
ENDLOOP.
LOOP AT gt_anep ASSIGNING
WHERE bukrs = im_bukrs
AND anln1 = im_anln1
AND anln2 = im_anln2
AND afabe = im_afabe
AND bzdat <= im_date. zatmcl_fiaa_utilities=>get_bwasl_data( EXPORTING im_bwasl =-bwasl
IMPORTING ex_bwagrp = lv_bwagrp
ex_bwatyp = lv_bwatyp
ex_gitcol = lv_gitcol ).
CHECK lv_gitcol NE '7'.
IF lv_bwagrp(1) NE '6'.
ADD-anbtr TO lv_perv_st.
ENDIF.
IF lv_bwagrp(1) = '8' OR lv_bwatyp = '6'.
ADD-anbtr TO lv_pereoc_pst.
ENDIF.
READ TABLE gt_anea ASSIGNING
WITH KEY bukrs =-bukrs
anln1 =-anln1
anln2 =-anln2
gjahr =-gjahr
lnran =-lnran
afabe =-afabe.
IF sy-subrc = 0.
lv_nakop_amort = lv_nakop_amort +-nafav + -safav +
-nafal + -aafal +
-aufnv + -aafav +
-safal + -aufnl.
lv_typ_amort = lv_typ_amort +-nafav + -nafal +
-aafal + -aufnv +
-aafav.
lv_spec_amort = lv_spec_amort +-safav + -safal.
lv_perv_st = lv_perv_st +-aufwv + -aufwl.
IF lv_bwagrp(1) = '8' OR lv_bwatyp = '6'.
lv_pereoc_pst = lv_pereoc_pst +-aufwv + -aufwl.
lv_pereoc_amort = lv_pereoc_amort +-aufnv + -aufnl.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ls_amounts-bukrs = im_bukrs.
ls_amounts-anln1 = im_anln1.
ls_amounts-anln2 = im_anln2.
ls_amounts-afabe = im_afabe.
ls_amounts-date = im_date.
ls_amounts-perv_st = lv_perv_st.
ls_amounts-amort = lv_nakop_amort.
ls_amounts-amort_typ = lv_typ_amort.
ls_amounts-amort_spec = lv_spec_amort.
ls_amounts-pereoc_pst = lv_pereoc_pst.
ls_amounts-pereoc_amort = lv_pereoc_amort.
ls_amounts-pst_bez_pereoc = lv_perv_st - lv_pereoc_pst.
INSERT ls_amounts INTO TABLE gt_amounts.
ex_perv_st = ls_amounts-perv_st.
ex_nakop_amort = ls_amounts-amort.
ex_typ_amort = ls_amounts-amort_typ.
ex_spec_amort = ls_amounts-amort_spec.
ex_pereoc_pst = ls_amounts-pereoc_pst.
ex_pereoc_amort = ls_amounts-pereoc_amort.
ex_pst_bez_pereoc = ls_amounts-pst_bez_pereoc.
IM_BUKRS Importing Type ANLA-BUKRS Балансовая единица
IM_ANLN1 Importing Type ANLA-ANLN1 Основной номер основного средства
IM_ANLN2 Importing Type ANLA-ANLN2 Субномер основного средства
IM_AFABE Importing Type ANEP-AFABE Реальная область оценки
IM_DATE Importing Type DATUM Дата
EX_PERV_ST Exporting Type DATA Первоначальная стоимость
EX_NAKOP_AMORT Exporting Type DATA Накопленная амортизация
EX_TYP_AMORT Exporting Type DATA Накопленная типовая амортизация
EX_SPEC_AMORT Exporting Type DATA Накопленная особая амортизация
EX_PEREOC_PST Exporting Type DATA Переоценка ПСт
EX_PEREOC_AMORT Exporting Type DATA Переоценка Амортизации
EX_PST_BEZ_PEREOC Exporting Type DATA ПСт без учета переоценки
выбор данных
SELECT * FROM anlc
INTO TABLE gt_anlc
FOR ALL ENTRIES IN fa_list_afabe
WHERE bukrs = fa_list_afabe-bukrs
AND anln1 = fa_list_afabe-anln1
AND anln2 = fa_list_afabe-anln2
AND gjahr = gv_enddate(4)
AND afabe = fa_list_afabe-afabe_.
v_peraf+1(2) = gv_enddate+4(2).
SELECT * FROM anlp
INTO TABLE gt_anlp
FOR ALL ENTRIES IN fa_list_afabe
WHERE bukrs = fa_list_afabe-bukrs
AND gjahr = gv_enddate(4)
AND afaber = fa_list_afabe-afabe_
AND anln1 = fa_list_afabe-anln1
AND anln2 = fa_list_afabe-anln2
AND peraf <= v_peraf. SELECT * FROM anep INTO TABLE gt_anep FOR ALL ENTRIES IN fa_list_afabe WHERE bukrs = fa_list_afabe-bukrs AND anln1 = fa_list_afabe-anln1 AND anln2 = fa_list_afabe-anln2 AND afabe = fa_list_afabe-afabe_ AND bzdat BETWEEN gv_begdate AND gv_enddate. IF NOT gt_anep IS INITIAL. SELECT * FROM anea INTO TABLE gt_anea FOR ALL ENTRIES IN gt_anep WHERE bukrs = gt_anep-bukrs AND anln1 = gt_anep-anln1 AND anln2 = gt_anep-anln2 AND gjahr = gt_anep-gjahr AND afabe = gt_anep-afabe AND lnran = gt_anep-lnran. ENDIF. расчет METHOD get_amounts_on_date. FIELD-SYMBOLS
FIELD-SYMBOLS
FIELD-SYMBOLS
FIELD-SYMBOLS
DATA ls_amounts TYPE LINE OF tt_amount_on_date.
DATA lv_anlc_gjahr TYPE gjahr.
DATA lv_peraf TYPE anlp-peraf.
DATA ls_anlc TYPE anlc.
DATA lv_prev_gjahr TYPE gjahr.
DATA lv_perv_st TYPE anep-anbtr.
DATA lv_nakop_amort TYPE anep-anbtr.
DATA lv_typ_amort TYPE anep-anbtr.
DATA lv_spec_amort TYPE anep-anbtr.
DATA lv_pereoc_pst TYPE anep-anbtr.
DATA lv_pereoc_amort TYPE anep-anbtr.
DATA lv_bwagrp TYPE tabw-bwagrp.
DATA lv_bwatyp TYPE tabwg-bwatyp.
DATA lv_gitcol TYPE tabwg-gitcol.
CLEAR: ex_perv_st, lv_perv_st.
CLEAR: ex_nakop_amort, lv_nakop_amort.
CLEAR: ex_typ_amort, lv_typ_amort.
CLEAR: ex_spec_amort, lv_spec_amort.
CLEAR: ex_pereoc_pst, lv_pereoc_pst.
CLEAR: ex_pereoc_amort, lv_pereoc_amort.
CLEAR: ex_pst_bez_pereoc.
READ TABLE gt_amounts WITH TABLE KEY bukrs = im_bukrs
anln1 = im_anln1
anln2 = im_anln2
date = im_date
afabe = im_afabe ASSIGNING
IF sy-subrc = 0.
ex_perv_st =
ex_nakop_amort =
ex_typ_amort =
ex_spec_amort =
ex_pereoc_pst =
ex_pereoc_amort =
ex_pst_bez_pereoc =
EXIT.
ENDIF.
**********************************************************************
lv_prev_gjahr = gv_enddate(4) - 1.
IF im_date+4(4) = '1231' AND im_date(4) = lv_prev_gjahr.
lv_anlc_gjahr = im_date(4) + 1.
ELSE.
lv_anlc_gjahr = im_date(4).
ENDIF.
lv_peraf+1(2) = im_date+4(2).
READ TABLE gt_anlc WITH TABLE KEY bukrs = im_bukrs
anln1 = im_anln1
anln2 = im_anln2
afabe = im_afabe
gjahr = lv_anlc_gjahr INTO ls_anlc.
IF im_date+4(4) = '1231' AND im_date(4) = lv_prev_gjahr.
lv_perv_st = ls_anlc-kansw + ls_anlc-kaufw.
lv_nakop_amort = ls_anlc-knafa + ls_anlc-kaafa + ls_anlc-kaufn + ls_anlc-ksafa.
lv_typ_amort = ls_anlc-knafa + ls_anlc-kaafa + ls_anlc-kaufn.
lv_spec_amort = ls_anlc-ksafa.
lv_pereoc_pst = ls_anlc-kaufw.
lv_pereoc_amort = ls_anlc-kaufn.
ELSE.
lv_perv_st = ls_anlc-kansw + ls_anlc-kaufw.
lv_nakop_amort = ls_anlc-knafa + ls_anlc-kaafa + ls_anlc-kaufn + ls_anlc-ksafa.
lv_typ_amort = ls_anlc-knafa + ls_anlc-kaafa + ls_anlc-kaufn.
lv_spec_amort = ls_anlc-ksafa.
lv_pereoc_pst = ls_anlc-kaufw.
lv_pereoc_amort = ls_anlc-kaufn.
LOOP AT gt_anlp ASSIGNING
AND gjahr = lv_anlc_gjahr
AND afaber = im_afabe
AND anln1 = im_anln1
AND anln2 = im_anln2
AND peraf <= lv_peraf. lv_nakop_amort = lv_nakop_amort +
lv_typ_amort = lv_typ_amort +
lv_spec_amort = lv_spec_amort +
ENDLOOP.
LOOP AT gt_anep ASSIGNING
WHERE bukrs = im_bukrs
AND anln1 = im_anln1
AND anln2 = im_anln2
AND afabe = im_afabe
AND bzdat <= im_date. zatmcl_fiaa_utilities=>get_bwasl_data( EXPORTING im_bwasl =
IMPORTING ex_bwagrp = lv_bwagrp
ex_bwatyp = lv_bwatyp
ex_gitcol = lv_gitcol ).
CHECK lv_gitcol NE '7'.
IF lv_bwagrp(1) NE '6'.
ADD
ENDIF.
IF lv_bwagrp(1) = '8' OR lv_bwatyp = '6'.
ADD
ENDIF.
READ TABLE gt_anea ASSIGNING
WITH KEY bukrs =
anln1 =
anln2 =
gjahr =
lnran =
afabe =
IF sy-subrc = 0.
lv_nakop_amort = lv_nakop_amort +
lv_typ_amort = lv_typ_amort +
lv_spec_amort = lv_spec_amort +
lv_perv_st = lv_perv_st +
IF lv_bwagrp(1) = '8' OR lv_bwatyp = '6'.
lv_pereoc_pst = lv_pereoc_pst +
lv_pereoc_amort = lv_pereoc_amort +
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ls_amounts-bukrs = im_bukrs.
ls_amounts-anln1 = im_anln1.
ls_amounts-anln2 = im_anln2.
ls_amounts-afabe = im_afabe.
ls_amounts-date = im_date.
ls_amounts-perv_st = lv_perv_st.
ls_amounts-amort = lv_nakop_amort.
ls_amounts-amort_typ = lv_typ_amort.
ls_amounts-amort_spec = lv_spec_amort.
ls_amounts-pereoc_pst = lv_pereoc_pst.
ls_amounts-pereoc_amort = lv_pereoc_amort.
ls_amounts-pst_bez_pereoc = lv_perv_st - lv_pereoc_pst.
INSERT ls_amounts INTO TABLE gt_amounts.
ex_perv_st = ls_amounts-perv_st.
ex_nakop_amort = ls_amounts-amort.
ex_typ_amort = ls_amounts-amort_typ.
ex_spec_amort = ls_amounts-amort_spec.
ex_pereoc_pst = ls_amounts-pereoc_pst.
ex_pereoc_amort = ls_amounts-pereoc_amort.
ex_pst_bez_pereoc = ls_amounts-pst_bez_pereoc.
суббота, 31 июля 2010 г.
BAPI GET CLASS CHARACTERISTICS
DATA: lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2,
ld_objectname LIKE bapi1003_key-object,
ld_clobjkeyout TYPE bapi1003_key-object_guid,
lt_alloclist TYPE TABLE OF bapi1003_alloc_list,
ls_alloclist LIKE LINE OF lt_alloclist,
lt_allocvalnum TYPE TABLE OF bapi1003_alloc_values_num,
ls_allocvalnum TYPE bapi1003_alloc_values_num,
lt_allocvalchar TYPE TABLE OF bapi1003_alloc_values_char,
ls_allocvalchar TYPE bapi1003_alloc_values_char,
lt_allocvalcurr TYPE TABLE OF bapi1003_alloc_values_curr,
ls_allocvalcurr TYPE bapi1003_alloc_values_curr.
BREAK-POINT.
"Получаем класс для тех. места
REFRESH lt_return.
CLEAR: ld_objectname, ld_clobjkeyout.
ld_objectname = '000000010000002102'.
CALL FUNCTION 'BAPI_OBJCL_GET_KEY_OF_OBJECT'
EXPORTING
objectname = ld_objectname
objecttable = 'EQUI'
classtype = 'Z02'
IMPORTING
clobjectkeyout = ld_clobjkeyout
TABLES
return = lt_return.
IF ld_clobjkeyout IS NOT INITIAL.
"Есть класс. Получаем его внутренний код
REFRESH: lt_return, lt_alloclist.
CALL FUNCTION 'BAPI_OBJCL_GETCLASSES_KEY'
EXPORTING
clobjectkeyin = ld_clobjkeyout
TABLES
alloclist = lt_alloclist
return = lt_return.
IF LINES( lt_alloclist ) > 0.
CLEAR ls_alloclist.
READ TABLE lt_alloclist INTO ls_alloclist INDEX 1.
"Получаем список характеристик для класса и тех. места
REFRESH: lt_allocvalnum, lt_allocvalchar, lt_allocvalcurr, lt_return.
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
EXPORTING
objectkey = ld_objectname
objecttable = 'EQUI'
classnum = ls_alloclist-classnum
classtype = 'Z02'
TABLES
allocvaluesnum = lt_allocvalnum
allocvalueschar = lt_allocvalchar
allocvaluescurr = lt_allocvalcurr
return = lt_return.
BREAK-POINT.
ENDIF.
ENDIF.
ls_return TYPE bapiret2,
ld_objectname LIKE bapi1003_key-object,
ld_clobjkeyout TYPE bapi1003_key-object_guid,
lt_alloclist TYPE TABLE OF bapi1003_alloc_list,
ls_alloclist LIKE LINE OF lt_alloclist,
lt_allocvalnum TYPE TABLE OF bapi1003_alloc_values_num,
ls_allocvalnum TYPE bapi1003_alloc_values_num,
lt_allocvalchar TYPE TABLE OF bapi1003_alloc_values_char,
ls_allocvalchar TYPE bapi1003_alloc_values_char,
lt_allocvalcurr TYPE TABLE OF bapi1003_alloc_values_curr,
ls_allocvalcurr TYPE bapi1003_alloc_values_curr.
BREAK-POINT.
"Получаем класс для тех. места
REFRESH lt_return.
CLEAR: ld_objectname, ld_clobjkeyout.
ld_objectname = '000000010000002102'.
CALL FUNCTION 'BAPI_OBJCL_GET_KEY_OF_OBJECT'
EXPORTING
objectname = ld_objectname
objecttable = 'EQUI'
classtype = 'Z02'
IMPORTING
clobjectkeyout = ld_clobjkeyout
TABLES
return = lt_return.
IF ld_clobjkeyout IS NOT INITIAL.
"Есть класс. Получаем его внутренний код
REFRESH: lt_return, lt_alloclist.
CALL FUNCTION 'BAPI_OBJCL_GETCLASSES_KEY'
EXPORTING
clobjectkeyin = ld_clobjkeyout
TABLES
alloclist = lt_alloclist
return = lt_return.
IF LINES( lt_alloclist ) > 0.
CLEAR ls_alloclist.
READ TABLE lt_alloclist INTO ls_alloclist INDEX 1.
"Получаем список характеристик для класса и тех. места
REFRESH: lt_allocvalnum, lt_allocvalchar, lt_allocvalcurr, lt_return.
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
EXPORTING
objectkey = ld_objectname
objecttable = 'EQUI'
classnum = ls_alloclist-classnum
classtype = 'Z02'
TABLES
allocvaluesnum = lt_allocvalnum
allocvalueschar = lt_allocvalchar
allocvaluescurr = lt_allocvalcurr
return = lt_return.
BREAK-POINT.
ENDIF.
ENDIF.
среда, 14 июля 2010 г.
Call dialog FI position view
CALL DIALOG 'RF_ZEILEN_ANZEIGE'
EXPORTING
buztab
buztab-zeile
tcode FROM tcode
status-detail FROM space "ALRK222406
x_nochange
aktyp FROM ld_aktyp "Note 339626
IMPORTING
buztab
buztabi-index TO buztab-zeile "ALRK232386
x_nextl
new_doc
t020-aktyp TO ld_aktyp "Note 339626
x_commit.
EXPORTING
buztab
buztab-zeile
tcode FROM tcode
status-detail FROM space "ALRK222406
x_nochange
aktyp FROM ld_aktyp "Note 339626
IMPORTING
buztab
buztabi-index TO buztab-zeile "ALRK232386
x_nextl
new_doc
t020-aktyp TO ld_aktyp "Note 339626
x_commit.
среда, 7 июля 2010 г.
вторник, 6 июля 2010 г.
HELP START - show log message text
DATA: l_info_langtext TYPE help_info
, l_int_dselc TYPE TABLE OF dselc
, l_int_dval TYPE TABLE OF dval
.
l_info_langtext-call = 'D'.
l_info_langtext-spras = sy-langu.
l_info_langtext-messageid = im_line-id.
l_info_langtext-messagenr = im_line-number.
l_info_langtext-msgv1 = im_line-message_v1.
l_info_langtext-msgv2 = im_line-message_v2.
l_info_langtext-msgv3 = im_line-message_v3.
l_info_langtext-msgv4 = im_line-message_v4.
l_info_langtext-program = sy-repid.
l_info_langtext-dynpro = '0100'.
l_info_langtext-docuid = 'NA'.
l_info_langtext-cucol = 9.
l_info_langtext-curow = 2.
l_info_langtext-message = im_line-message.
l_info_langtext-title = 'Подробный текст'(004).
CALL FUNCTION 'HELP_START'
EXPORTING
help_infos = l_info_langtext
TABLES
dynpselect = l_int_dselc
dynpvaluetab = l_int_dval
EXCEPTIONS
OTHERS = 1.
, l_int_dselc TYPE TABLE OF dselc
, l_int_dval TYPE TABLE OF dval
.
l_info_langtext-call = 'D'.
l_info_langtext-spras = sy-langu.
l_info_langtext-messageid = im_line-id.
l_info_langtext-messagenr = im_line-number.
l_info_langtext-msgv1 = im_line-message_v1.
l_info_langtext-msgv2 = im_line-message_v2.
l_info_langtext-msgv3 = im_line-message_v3.
l_info_langtext-msgv4 = im_line-message_v4.
l_info_langtext-program = sy-repid.
l_info_langtext-dynpro = '0100'.
l_info_langtext-docuid = 'NA'.
l_info_langtext-cucol = 9.
l_info_langtext-curow = 2.
l_info_langtext-message = im_line-message.
l_info_langtext-title = 'Подробный текст'(004).
CALL FUNCTION 'HELP_START'
EXPORTING
help_infos = l_info_langtext
TABLES
dynpselect = l_int_dselc
dynpvaluetab = l_int_dval
EXCEPTIONS
OTHERS = 1.
вторник, 29 июня 2010 г.
Customer enhancements in electronic bank statement
Get from SAPNET
Symptom
By now, the electronic bank statement contains a variety of options that you enhance by using programming. This note provides you with an overview of these enhancements.
Note: As of Release 4.6B, you can now use the search string function to search the note to payee simply by using Customizing and (as of Release 4.6C) you can also change the bank data storage so that these user exits are unnecessary in many cases. For more information on this subject, refer to point 'Define Search String for Electronic Bank Statement' in Customizing for the electronic bank statement.
In the user exit (regardless which one), do not program any COMMIT WORK nor, in particular, any ROLLBACK WORK as they may result in inconsistencies in the database.
Other terms
Bank statement, BADI, USEREXIT, OPEN, FI, RFEBBU10, RFEBBU00
Solution
1. User exit FEB00001: For the documentation and the implementation of this enhancement, go to the point 'Develop Enhancements for Electronic Bank Statement (General)' in Customizing for the electronic bank statement. This user exit is called immediately after the interpretation of the note to payee in program RFEBBU10.
2. As of Release 4.70, there is a Business Add-In (BADI) with definition name FIEB_CHANGE_BS_DATA that is called before the interpretation algorithms and before the search string in program RFEBBU10. For the implementation go to the SAP menu, choose 'Tools->ABAP Workbench->Business Add-In', and create an enhancement that you assign to the BAdI FIEB_CHANGE_BS_DATA and implement method CHANGE_DATA. You use the BADI to change the bank data storage before the standard interpretation of the note to payee.
3. As of Release 45B, you can implement Open FI modules for the callup points 2810 and 2820. For general information about the Open FI / BTE function, go to 'Financial Accounting->Financial Accounting Basic Settings -> Business Transaction Events' in Customizing. For the callup points in the bank statement, choose 'Environment->Info system (P/S)' or 'Environment->Infosystem (Processes)' and enter interfaces 00002810 and 00002820 respectively. Then you see the sample function module and the documentation for the corresponding interface. The following is a brief summary of these interfaces:
a) The Publish & Subscribe interface 2810 is used for the registration of a line item for the processing through the respective application. Note in particular, that for the registration under Settings -> P/S function module of an SAP application (of a partner or of a customer) you need to define not only the function module but also an application. As a standard application, you can simply select FI-BA. In this case, you can also decide whether you want to suppress the standard posting for the line item. The respective function module is called before the interpretation algorithms and the search string.
b) The process interface 2820 is used for changing bank statement data. The respective module is called immediately after module Publish & Subscribe 2810 (therefore, also before the search string and the interpretation algorithms). In this case, you can change the bank data storage as in BADI FIEB_CHANGE_BS_DATA (see point 2). The module is only called if the P/S module 2810 has been implemented and if it is registered for the memo record.
c) The process interface 2810 is used to update a sale. The module is called in the posting RFEBBU00 report if the P/S module 2810 is registered for these sales.
d) The Publish & Subscribe interface 2820 is used for the display of the documents that were posted in process 2810 in postprocessing. The function module is called during the display of a line item in the postprocessing transaction (FEBA) by choosing the 'Document' button.
4. As of Release 4.70, there is a Business Add-In (BADI) with the definition name FEB_BADI that is called immediately before the standard posting in program RFEBBU00. In this case, you can change the procedure of the standard posting or make additional account assignments by changing the tables that are to be transferred to the posting interface (FTPOST, FTCLEAR). To do this, go to the SAP menu and follow the path Tools->ABAP-Workbench->Business Add-ins, create an enhancement that you assign to the FEB_BADI BAdI and then implement the CHANGE_POSTING_DATA method.
When you activate the BAdI, you receive a message, telling you that the active implementation of this BAdI already exists. If you do not use the public sector industry solution, you can deactivate the active BAdI of the IBS_PS area and activate your own implementation.
5. As of Release 3.1I, to change the standard posting you can also write your own function module that is called at the same callup point as the BAdI FEB_BADI (see point 4). For this, you have to register in user exit FEB00001 (see point 1) for the memo record first. To do this, attach a row to table t_febcl with t_febcl-selfd = 'FB' and t_febcl-selvon = 'Z_FEB_1_ZZZZ', if you want to make a change in posting area 1 or with t_febcl-selfd = 'FB' and t_febcl-selvon = 'change Z_FEB_2_ZZZZ', for changes in posting area 2. Z_FEB_1_ZZZZ or Z_FEB_2_ZZZZ are the names of the function modules for the respective areas. Here you can also select other names; however, the name of the module that is called in the area 1 must contain character string FEB_1_ and the same applies for the name of the function module of area 2 - it must contain FEB_2_. The interface of both modules must be the same as the interface of module FEB_2_STO_LASTSCHR2 or FEB_2_IMMO_LASTSCHR.
6. Enterprise Add-On EA-FIN provides the new postprocessing transaction (Transaction FEBAN or FEBA, if the add-on is set to active). For Release 2.0 of this add-on there are the following Open-FI events:
a) 2830 process: Application-specific display in the subscreen.
b) 2830 P/S: Transfer of the OK code to the application subscreen.
c) 2840 P/S: Application-specific display in the subscreen which is not item-related and which does not switch off the standard display unlike event 2830. Up to five subscreens may be included here.
d) 2850 P/S and process: Intervention when changing the bank data storage in postprocessing. This allows you to automate the filling of certain fields with the same values in postprocessing: If you change one field in the bank data storage, other fields are changed automatically.
e) 2860 process: Allows a third posting (except for posting area 1 and 2) that is only possible in postprocessing. If you carry out this posting you should display the posted document (field FEBEP-SDOC2) in postprocessing. For this purpose use event 2830 (see above).
f) 2870 process: Replace the tree or list display in postprocessing. You may also replace only one of the two with a separate display.
g) 2880 P/S and process: Replace the selection screen through with a separate selection screen.
7. As of Release 4.70 there are two Business Add-Ins for processing returned debit memos:
a) The first has the definition name FIEB_RETURNS_ADDIN and is used to read charges from the note to payee. In Customizing for the bank statement under point 'Business Add-In: Processing of Returns', you will find the documentation of this BAdI. From there you can directly call the BAdI Builder.
b) The second BAdI has the definition name FIEB_RET_CHANGE_DOC. Here you can control the document change of the document which is open again after the clearing reset. Refer to Note 576768 for this purpose.
Beside these enhancements there are still some format-specific enhancements.
For this, go to 'Develop Enhancements for Elec.Bank Statement (Format Spec.)'
8. Exit FEB00002 is called at the conversion of the Belgian Coda format to Multicash format in program RFEBBE00.
9. Exit FEB00003 is called at the import of the Finnish TITO format in program RFEBFI20.
10. Exit FEB00004 is called at the import of SWIFT MT940 in program RFEKA400.
11. FEDI0005: This is used to change the bank data storage and the internal payment advice notes (also refer to Note 501966) with the inbound EDI for account statement FINSTA01. Note that you must implement ALL components (=function modules), that is at least set the export parameters equal to the import parameters, so that the bank data storage is not initialized.
12. As of Release 4.6C, you can allocate a 'customer-specific interpretation algorithm' to an external transaction code in Customizing. If such an algorithm is set, first the standard algorithm 001 will run, and then you can perform a separate interpretation in user exit FEB00001. To suppress the standard algorithm here, see Note 414233. As of Release 470 you can implement the algorithms in function modules with Note 597428.
Header Data
Release Status: Released for Customer
Released on: 19.10.2005 12:52:10
Priority: Recommendations/additional info
Category: Consulting
Primary Component: FI-BL-PT-BA bank statement
Release-Independent
Related Notes
935218 - FEBAN: BTE 2850 standard posting is not suppressed
907386 - Account statement: Intervals not available in user exit
770215 - ZEV: BTE 2850 and RFC
738353 - Postprocessing account statement (new): BTE 2870
597428 - El.accnt statement: Customer-specific interpret.algorithms
549277 - FAQ: Electronic account statement
414233 - Accnt statement:customer-specific interpretation algorithms
Symptom
By now, the electronic bank statement contains a variety of options that you enhance by using programming. This note provides you with an overview of these enhancements.
Note: As of Release 4.6B, you can now use the search string function to search the note to payee simply by using Customizing and (as of Release 4.6C) you can also change the bank data storage so that these user exits are unnecessary in many cases. For more information on this subject, refer to point 'Define Search String for Electronic Bank Statement' in Customizing for the electronic bank statement.
In the user exit (regardless which one), do not program any COMMIT WORK nor, in particular, any ROLLBACK WORK as they may result in inconsistencies in the database.
Other terms
Bank statement, BADI, USEREXIT, OPEN, FI, RFEBBU10, RFEBBU00
Solution
1. User exit FEB00001: For the documentation and the implementation of this enhancement, go to the point 'Develop Enhancements for Electronic Bank Statement (General)' in Customizing for the electronic bank statement. This user exit is called immediately after the interpretation of the note to payee in program RFEBBU10.
2. As of Release 4.70, there is a Business Add-In (BADI) with definition name FIEB_CHANGE_BS_DATA that is called before the interpretation algorithms and before the search string in program RFEBBU10. For the implementation go to the SAP menu, choose 'Tools->ABAP Workbench->Business Add-In', and create an enhancement that you assign to the BAdI FIEB_CHANGE_BS_DATA and implement method CHANGE_DATA. You use the BADI to change the bank data storage before the standard interpretation of the note to payee.
3. As of Release 45B, you can implement Open FI modules for the callup points 2810 and 2820. For general information about the Open FI / BTE function, go to 'Financial Accounting->Financial Accounting Basic Settings -> Business Transaction Events' in Customizing. For the callup points in the bank statement, choose 'Environment->Info system (P/S)' or 'Environment->Infosystem (Processes)' and enter interfaces 00002810 and 00002820 respectively. Then you see the sample function module and the documentation for the corresponding interface. The following is a brief summary of these interfaces:
a) The Publish & Subscribe interface 2810 is used for the registration of a line item for the processing through the respective application. Note in particular, that for the registration under Settings -> P/S function module of an SAP application (of a partner or of a customer) you need to define not only the function module but also an application. As a standard application, you can simply select FI-BA. In this case, you can also decide whether you want to suppress the standard posting for the line item. The respective function module is called before the interpretation algorithms and the search string.
b) The process interface 2820 is used for changing bank statement data. The respective module is called immediately after module Publish & Subscribe 2810 (therefore, also before the search string and the interpretation algorithms). In this case, you can change the bank data storage as in BADI FIEB_CHANGE_BS_DATA (see point 2). The module is only called if the P/S module 2810 has been implemented and if it is registered for the memo record.
c) The process interface 2810 is used to update a sale. The module is called in the posting RFEBBU00 report if the P/S module 2810 is registered for these sales.
d) The Publish & Subscribe interface 2820 is used for the display of the documents that were posted in process 2810 in postprocessing. The function module is called during the display of a line item in the postprocessing transaction (FEBA) by choosing the 'Document' button.
4. As of Release 4.70, there is a Business Add-In (BADI) with the definition name FEB_BADI that is called immediately before the standard posting in program RFEBBU00. In this case, you can change the procedure of the standard posting or make additional account assignments by changing the tables that are to be transferred to the posting interface (FTPOST, FTCLEAR). To do this, go to the SAP menu and follow the path Tools->ABAP-Workbench->Business Add-ins, create an enhancement that you assign to the FEB_BADI BAdI and then implement the CHANGE_POSTING_DATA method.
When you activate the BAdI, you receive a message, telling you that the active implementation of this BAdI already exists. If you do not use the public sector industry solution, you can deactivate the active BAdI of the IBS_PS area and activate your own implementation.
5. As of Release 3.1I, to change the standard posting you can also write your own function module that is called at the same callup point as the BAdI FEB_BADI (see point 4). For this, you have to register in user exit FEB00001 (see point 1) for the memo record first. To do this, attach a row to table t_febcl with t_febcl-selfd = 'FB' and t_febcl-selvon = 'Z_FEB_1_ZZZZ', if you want to make a change in posting area 1 or with t_febcl-selfd = 'FB' and t_febcl-selvon = 'change Z_FEB_2_ZZZZ', for changes in posting area 2. Z_FEB_1_ZZZZ or Z_FEB_2_ZZZZ are the names of the function modules for the respective areas. Here you can also select other names; however, the name of the module that is called in the area 1 must contain character string FEB_1_ and the same applies for the name of the function module of area 2 - it must contain FEB_2_. The interface of both modules must be the same as the interface of module FEB_2_STO_LASTSCHR2 or FEB_2_IMMO_LASTSCHR.
6. Enterprise Add-On EA-FIN provides the new postprocessing transaction (Transaction FEBAN or FEBA, if the add-on is set to active). For Release 2.0 of this add-on there are the following Open-FI events:
a) 2830 process: Application-specific display in the subscreen.
b) 2830 P/S: Transfer of the OK code to the application subscreen.
c) 2840 P/S: Application-specific display in the subscreen which is not item-related and which does not switch off the standard display unlike event 2830. Up to five subscreens may be included here.
d) 2850 P/S and process: Intervention when changing the bank data storage in postprocessing. This allows you to automate the filling of certain fields with the same values in postprocessing: If you change one field in the bank data storage, other fields are changed automatically.
e) 2860 process: Allows a third posting (except for posting area 1 and 2) that is only possible in postprocessing. If you carry out this posting you should display the posted document (field FEBEP-SDOC2) in postprocessing. For this purpose use event 2830 (see above).
f) 2870 process: Replace the tree or list display in postprocessing. You may also replace only one of the two with a separate display.
g) 2880 P/S and process: Replace the selection screen through with a separate selection screen.
7. As of Release 4.70 there are two Business Add-Ins for processing returned debit memos:
a) The first has the definition name FIEB_RETURNS_ADDIN and is used to read charges from the note to payee. In Customizing for the bank statement under point 'Business Add-In: Processing of Returns', you will find the documentation of this BAdI. From there you can directly call the BAdI Builder.
b) The second BAdI has the definition name FIEB_RET_CHANGE_DOC. Here you can control the document change of the document which is open again after the clearing reset. Refer to Note 576768 for this purpose.
Beside these enhancements there are still some format-specific enhancements.
For this, go to 'Develop Enhancements for Elec.Bank Statement (Format Spec.)'
8. Exit FEB00002 is called at the conversion of the Belgian Coda format to Multicash format in program RFEBBE00.
9. Exit FEB00003 is called at the import of the Finnish TITO format in program RFEBFI20.
10. Exit FEB00004 is called at the import of SWIFT MT940 in program RFEKA400.
11. FEDI0005: This is used to change the bank data storage and the internal payment advice notes (also refer to Note 501966) with the inbound EDI for account statement FINSTA01. Note that you must implement ALL components (=function modules), that is at least set the export parameters equal to the import parameters, so that the bank data storage is not initialized.
12. As of Release 4.6C, you can allocate a 'customer-specific interpretation algorithm' to an external transaction code in Customizing. If such an algorithm is set, first the standard algorithm 001 will run, and then you can perform a separate interpretation in user exit FEB00001. To suppress the standard algorithm here, see Note 414233. As of Release 470 you can implement the algorithms in function modules with Note 597428.
Header Data
Release Status: Released for Customer
Released on: 19.10.2005 12:52:10
Priority: Recommendations/additional info
Category: Consulting
Primary Component: FI-BL-PT-BA bank statement
Release-Independent
Related Notes
935218 - FEBAN: BTE 2850 standard posting is not suppressed
907386 - Account statement: Intervals not available in user exit
770215 - ZEV: BTE 2850 and RFC
738353 - Postprocessing account statement (new): BTE 2870
597428 - El.accnt statement: Customer-specific interpret.algorithms
549277 - FAQ: Electronic account statement
414233 - Accnt statement:customer-specific interpretation algorithms
понедельник, 28 июня 2010 г.
Get doc number from text
*&---------------------------------------------------------------------*
*& Form GET_DOC_NUMBERS
*&---------------------------------------------------------------------*
* Get doc numbers from text table
*----------------------------------------------------------------------*
* -->P_T_FEBRE text
* -->P_T_NUMS table of docnum
*----------------------------------------------------------------------*
FORM get_doc_numbers TABLES p_t_febre STRUCTURE febre
CHANGING p_t_nums TYPE yruisit_bs_numbers.
CONSTANTS c_maxlen TYPE int4 VALUE 10.
* Templates for translation
DATA: convert1(52) TYPE c VALUE
'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ',
convert2_norway(52) TYPE c VALUE
'. , < > & " % ! ( ) = ? : # * + / $ # _ ',
convert2(52) TYPE c VALUE
'. , < > & " % ! ( ) = ? : - # * + / $ # _ ; ',
convert3(02) TYPE c VALUE
' ;'.
* Data
DATA lv_text(65000) TYPE c.
DATA lv_head(70) TYPE c.
DATA ls_nums TYPE yrussit_bs_numbers.
RANGES lr_filter FOR bkpf-belnr.
FIELD-SYMBOLS TYPE ANY TABLE.
* Range from selection screen FF.5
ASSIGN ('(RFEBBU10)FILTER[]') TO.
IF sy-subrc EQ 0.
lr_filter[] =.
ENDIF.
*** Get full string
LOOP AT p_t_febre.
CONCATENATE lv_text p_t_febre-vwezw INTO lv_text.
ENDLOOP.
*** Prepare string - keep only digits
* Translate to latin and upper
CALL FUNCTION 'SCP_REPLACE_STRANGE_CHARS'
EXPORTING
intext = lv_text
IMPORTING
outtext = lv_text
EXCEPTIONS
OTHERS = 01.
TRANSLATE lv_text TO UPPER CASE.
* Keep only digits
TRANSLATE lv_text USING convert1.
TRANSLATE lv_text USING convert2.
CONDENSE lv_text.
TRANSLATE lv_text USING convert3.
* Get numbers
CLEAR p_t_nums[].
DO.
CALL FUNCTION 'STRING_SPLIT'
EXPORTING
delimiter = ';'
string = lv_text
IMPORTING
head = lv_head
tail = lv_text
EXCEPTIONS
not_found = 1
not_valid = 2
too_long = 3
too_small = 4.
IF lv_head = space OR sy-subrc NE 0.
EXIT.
ENDIF.
IF lv_head CO ' 0123456789' AND STRLEN( lv_head ) <= c_maxlen.
CLEAR ls_nums.
ls_nums-docnum = lv_head.
IF ls_nums IN lr_filter.
INSERT ls_nums INTO TABLE p_t_nums.
ENDIF.
ENDIF.
ENDDO.
* Delete dublicates
SORT p_t_nums BY docnum.
DELETE ADJACENT DUPLICATES FROM p_t_nums COMPARING docnum.
*
ENDFORM. " GET_DOC_NUMBERS
*& Form GET_DOC_NUMBERS
*&---------------------------------------------------------------------*
* Get doc numbers from text table
*----------------------------------------------------------------------*
* -->P_T_FEBRE text
* -->P_T_NUMS table of docnum
*----------------------------------------------------------------------*
FORM get_doc_numbers TABLES p_t_febre STRUCTURE febre
CHANGING p_t_nums TYPE yruisit_bs_numbers.
CONSTANTS c_maxlen TYPE int4 VALUE 10.
* Templates for translation
DATA: convert1(52) TYPE c VALUE
'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ',
convert2_norway(52) TYPE c VALUE
'. , < > & " % ! ( ) = ? : # * + / $ # _ ',
convert2(52) TYPE c VALUE
'. , < > & " % ! ( ) = ? : - # * + / $ # _ ; ',
convert3(02) TYPE c VALUE
' ;'.
* Data
DATA lv_text(65000) TYPE c.
DATA lv_head(70) TYPE c.
DATA ls_nums TYPE yrussit_bs_numbers.
RANGES lr_filter FOR bkpf-belnr.
FIELD-SYMBOLS
* Range from selection screen FF.5
ASSIGN ('(RFEBBU10)FILTER[]') TO
IF sy-subrc EQ 0.
lr_filter[] =
ENDIF.
*** Get full string
LOOP AT p_t_febre.
CONCATENATE lv_text p_t_febre-vwezw INTO lv_text.
ENDLOOP.
*** Prepare string - keep only digits
* Translate to latin and upper
CALL FUNCTION 'SCP_REPLACE_STRANGE_CHARS'
EXPORTING
intext = lv_text
IMPORTING
outtext = lv_text
EXCEPTIONS
OTHERS = 01.
TRANSLATE lv_text TO UPPER CASE.
* Keep only digits
TRANSLATE lv_text USING convert1.
TRANSLATE lv_text USING convert2.
CONDENSE lv_text.
TRANSLATE lv_text USING convert3.
* Get numbers
CLEAR p_t_nums[].
DO.
CALL FUNCTION 'STRING_SPLIT'
EXPORTING
delimiter = ';'
string = lv_text
IMPORTING
head = lv_head
tail = lv_text
EXCEPTIONS
not_found = 1
not_valid = 2
too_long = 3
too_small = 4.
IF lv_head = space OR sy-subrc NE 0.
EXIT.
ENDIF.
IF lv_head CO ' 0123456789' AND STRLEN( lv_head ) <= c_maxlen.
CLEAR ls_nums.
ls_nums-docnum = lv_head.
IF ls_nums IN lr_filter.
INSERT ls_nums INTO TABLE p_t_nums.
ENDIF.
ENDIF.
ENDDO.
* Delete dublicates
SORT p_t_nums BY docnum.
DELETE ADJACENT DUPLICATES FROM p_t_nums COMPARING docnum.
*
ENDFORM. " GET_DOC_NUMBERS
вторник, 1 июня 2010 г.
Как установить Windows 7 или Windows Server 2008 R2 c USB-девайса
Взято с http://blogs.technet.com/b/iwalker/archive/2010/03/01/usb-windows-7-windows-7-usb.aspx
Кажется, все это было так недавно – примерно год и один месяц тому я написал пару постов, которые были посвящены установке Windows 7 с загрузочного USB-флеш и, что еще более интересно – установке Windows 7 или Windows Server 2008 R2 “рядом” с уже существующими на ПК/сервере ОС – установке Windows 7 в VHD-файл на физическом диске. Это все породило написание цепочки других, дополняющих друг друга, постов, посвященных особенности установки Windows 7 с USB и других “нетрадиционных” конфигураций:
* Как установить Windows 7 c USB-накопителя
* Как установить Windows 7 в VHD-раздел, не затрагивая другие ОС на ПК
* Как управлять VHD-файлами и VHD-разделами в Windows 7
* Что такое, как работает и как установить Windows XP Mode в Windows 7 RC
* Новые возможности Windows Server 2008 R2/Windows 7
Процедуры довольно несложные и полезные, но цивилизация и технологии тоже не стоят на месте и вот уже сам Майкрософт выпустил простую, а от того еще более полезную утилиту создания загрузочного USB-флеш c Windows 7 для установки - Windows 7 USB/DVD Download Tool. Эта утилита позволяет любому пользователю, не имеющему специальных знаний по администрированию систем и использованию команд типа DISKPART, быстро создать загрузочный USB-флеш для установки Windows 7, используя в качестве “оригинала” доступный на портале Microsoft Store образ ISO Windows 7.
Вся эта прелесть появилось еще пару месяцев назад, но лень-матушка и другие задачи не позволяли мне написать пост. Но тут пришло время сносить Windows 7 RC, у которого закончился “срок годности” – и делая для себя – решил сделать и для других – вот и записал видео и пишу пост.
Итак, сценарий работы по созданию USB-флеш c инсталяцией Windows 7 теперь крайне прост:
1. Открываем страницу, называемую “Installing Windows 7 on a netbook” и внимательно читаем инструкцию по Windows 7 USB/DVD Download Tool. Там же находим и ссылку на страницу помощи и загрузки Windows 7 USB/DVD Download Tool на сайте Microsoft Store http://cut.ms/Nj1
Внимание! загружайте файл Windows7-USB-DVD-tool.exe только с указанного сайта, в Инете масса подделок, зараженных разнообразными “зловредами”.
2. Устанавливаем загруженную утилиту и запускаем ее.
3. Выполняем все шаги мастера по созданию загрузочного USB-флеш:
1. Выбор исходного ISO-файла с образом нужной редакции Windows 7
image
2. Типа устройства (USB device)
image
3. Выбор USB устройства, на которое будет скопирован установочный образ Windows 7. Требуется USB-флеш объемом 4ГБ, который будет отформатирован
image
4. Подтверждаем форматирование (все данные на выбраной флешке будут потеряны) и дожидаемся окончания копирования. В целом вся операция занимает около 20 минут, из которых 16ть – это непосредственно копирование.
image
Чтобы не так скучно было смотреть на скриншоты, предлагаю собственно вебкаст всего этого процесса, демонстрирующий весь процесс создания загрузочной USB-флешки “в лицах”.
Взято с http://blogs.technet.com/b/iwalker/archive/2009/01/21/windows-7-windows-server-2008-r2-c-usb.aspx.
ВНИМАНИЕ! Обновленная версия инструкции по созданию загрузочного USB-флеш для установки Windows 7 с применением утилиты Windows 7 USB/DVD Download Tool здесь!!! Но это не отменяет данной инструкции :)
Продолжая тему установки бета-версии Windows 7 “на поиграться”, поднятую в предыдущем посте про установку Windows 7 в виртуальный VHD-диск, решил сделать доброе дело для всех тех, у кого на руках эти самые “недобуки/нетбуки” и кто, узнав о хорошей производительности Windows 7 на слабом железе, захотел поэкспериментировать с работой Windows 7 на нетбуке (у самого Fujitsu Lifebook u810). Но вот проблема с этими нетбуками – ну нет в них DVD-драйва, приходится усиленно искать внешний или устанавливать ОС путем предварительного “перелива” инсталляционного пакета на жесткий диск по сети и стартом его через уже установленную ОС. Потому загрузка инсталяционного пакета Windows 7 с USB – простое решение всех проблем. Да и сам факт простого создания такого инсталяционно-загрузочного USB-драйва – вещь в хозяйстве полезная. :)
Итак, подготовка USB-флеш для будущей загрузки и установки Windows 7/Windows Server 2008:
* взять USB-драйв (можно и другой носитель, типа SD-карты) размером не менее 4ГБ, подключить к USB-порту, приготовиться пожертвовать всей находящейся на нем информацией
* запустить в Windows XP/Windows Vista командную строку CMD.EXE от прав администратора
* запустить утилиту управления дисками diskpart, дождаться приглашения DISKPART>
* выполняем команду list disk, отображающую список всех дисков (не разделов!) ПК. Ищем среди них наш диск USB, в нашем примере это Disk 1
* выполняем команду select disk # (где # – это номер нашего USB-драйва, полученного в предыдущей команде). Для нашего случая – select disk 1. Данная команда указывает diskpart, что все дальнейшие операции будут проводиться с данным диском
* выполняем команду clean (прощайте данные и разделы на выбранном диске)
* выполняем команду create partition primary – создание нового раздела на диске
* выполняем команду select partition 1 – выбор раздела, как дальнейшего объекта для манипуляций
* active – делаем выбранный раздел активным
* format fs=NTFS – форматируем раздел в файловую систему NTFS
* assign – активируем процесс подключения устройства, получения букв для созданных разделов (если автостарт опция включена – всплывает окно, как будто вы только что подключили USB-драйв)
* exit – выходим из diskpart в командную строку.
USB-драйв готов к дальнейшим манипуляциям
instUSB-1
А теперь внимание. Берем имеющийся у вас дистрибутив Windows 7/Windows Server 2008 R2, допустим, на DVD-диске, установленнов в драйв G:
В командной строке (не в diskpart !!!) выполняем следуюшие команды:
* G:
* cd \boot – переходим в каталог boot дистрибутива
* выполняем команду bootsect /nt60 I: – где I: – буква, полученная только что подготовленным USB-драйвом. Данная команда подменяет на диске I: файлы загрузчика на те, которые необходимы для загрузки Vista/Windows 7
* один момент – битность базовой ОС и дистрибутива Windows 7 должны быть одинаковыми
instUSB-2
Все, USB-драйв готов. Копируем на него со стандартного инсталяционного пакета все файлы. Можно использовать как штатный Windows Explorer, так и команды xcopy или robocopy (я предпочитаю robocopy – быстро и уверенно).
Загружаем необходимый ПК с полученного USB-драйва, устанавливаем с него Windows 7.
P.S. А для тех, кто интересуется совместимостью приложений Windows XP со средой Windows 7 - предлагаю посмотреть пост о том, как установить и настроить Windows XP Mode - технологию, поставляемую вместе с Windows 7 RC и которая обеспечивает виртуализацию отдельных приложений.
P.P.S. Помню, что обещал еще написать посты о том как это все снести и как подключать внешние VHD с уже установленной ОС. На неделе сделаю. :)
Кажется, все это было так недавно – примерно год и один месяц тому я написал пару постов, которые были посвящены установке Windows 7 с загрузочного USB-флеш и, что еще более интересно – установке Windows 7 или Windows Server 2008 R2 “рядом” с уже существующими на ПК/сервере ОС – установке Windows 7 в VHD-файл на физическом диске. Это все породило написание цепочки других, дополняющих друг друга, постов, посвященных особенности установки Windows 7 с USB и других “нетрадиционных” конфигураций:
* Как установить Windows 7 c USB-накопителя
* Как установить Windows 7 в VHD-раздел, не затрагивая другие ОС на ПК
* Как управлять VHD-файлами и VHD-разделами в Windows 7
* Что такое, как работает и как установить Windows XP Mode в Windows 7 RC
* Новые возможности Windows Server 2008 R2/Windows 7
Процедуры довольно несложные и полезные, но цивилизация и технологии тоже не стоят на месте и вот уже сам Майкрософт выпустил простую, а от того еще более полезную утилиту создания загрузочного USB-флеш c Windows 7 для установки - Windows 7 USB/DVD Download Tool. Эта утилита позволяет любому пользователю, не имеющему специальных знаний по администрированию систем и использованию команд типа DISKPART, быстро создать загрузочный USB-флеш для установки Windows 7, используя в качестве “оригинала” доступный на портале Microsoft Store образ ISO Windows 7.
Вся эта прелесть появилось еще пару месяцев назад, но лень-матушка и другие задачи не позволяли мне написать пост. Но тут пришло время сносить Windows 7 RC, у которого закончился “срок годности” – и делая для себя – решил сделать и для других – вот и записал видео и пишу пост.
Итак, сценарий работы по созданию USB-флеш c инсталяцией Windows 7 теперь крайне прост:
1. Открываем страницу, называемую “Installing Windows 7 on a netbook” и внимательно читаем инструкцию по Windows 7 USB/DVD Download Tool. Там же находим и ссылку на страницу помощи и загрузки Windows 7 USB/DVD Download Tool на сайте Microsoft Store http://cut.ms/Nj1
Внимание! загружайте файл Windows7-USB-DVD-tool.exe только с указанного сайта, в Инете масса подделок, зараженных разнообразными “зловредами”.
2. Устанавливаем загруженную утилиту и запускаем ее.
3. Выполняем все шаги мастера по созданию загрузочного USB-флеш:
1. Выбор исходного ISO-файла с образом нужной редакции Windows 7
image
2. Типа устройства (USB device)
image
3. Выбор USB устройства, на которое будет скопирован установочный образ Windows 7. Требуется USB-флеш объемом 4ГБ, который будет отформатирован
image
4. Подтверждаем форматирование (все данные на выбраной флешке будут потеряны) и дожидаемся окончания копирования. В целом вся операция занимает около 20 минут, из которых 16ть – это непосредственно копирование.
image
Чтобы не так скучно было смотреть на скриншоты, предлагаю собственно вебкаст всего этого процесса, демонстрирующий весь процесс создания загрузочной USB-флешки “в лицах”.
Взято с http://blogs.technet.com/b/iwalker/archive/2009/01/21/windows-7-windows-server-2008-r2-c-usb.aspx.
ВНИМАНИЕ! Обновленная версия инструкции по созданию загрузочного USB-флеш для установки Windows 7 с применением утилиты Windows 7 USB/DVD Download Tool здесь!!! Но это не отменяет данной инструкции :)
Продолжая тему установки бета-версии Windows 7 “на поиграться”, поднятую в предыдущем посте про установку Windows 7 в виртуальный VHD-диск, решил сделать доброе дело для всех тех, у кого на руках эти самые “недобуки/нетбуки” и кто, узнав о хорошей производительности Windows 7 на слабом железе, захотел поэкспериментировать с работой Windows 7 на нетбуке (у самого Fujitsu Lifebook u810). Но вот проблема с этими нетбуками – ну нет в них DVD-драйва, приходится усиленно искать внешний или устанавливать ОС путем предварительного “перелива” инсталляционного пакета на жесткий диск по сети и стартом его через уже установленную ОС. Потому загрузка инсталяционного пакета Windows 7 с USB – простое решение всех проблем. Да и сам факт простого создания такого инсталяционно-загрузочного USB-драйва – вещь в хозяйстве полезная. :)
Итак, подготовка USB-флеш для будущей загрузки и установки Windows 7/Windows Server 2008:
* взять USB-драйв (можно и другой носитель, типа SD-карты) размером не менее 4ГБ, подключить к USB-порту, приготовиться пожертвовать всей находящейся на нем информацией
* запустить в Windows XP/Windows Vista командную строку CMD.EXE от прав администратора
* запустить утилиту управления дисками diskpart, дождаться приглашения DISKPART>
* выполняем команду list disk, отображающую список всех дисков (не разделов!) ПК. Ищем среди них наш диск USB, в нашем примере это Disk 1
* выполняем команду select disk # (где # – это номер нашего USB-драйва, полученного в предыдущей команде). Для нашего случая – select disk 1. Данная команда указывает diskpart, что все дальнейшие операции будут проводиться с данным диском
* выполняем команду clean (прощайте данные и разделы на выбранном диске)
* выполняем команду create partition primary – создание нового раздела на диске
* выполняем команду select partition 1 – выбор раздела, как дальнейшего объекта для манипуляций
* active – делаем выбранный раздел активным
* format fs=NTFS – форматируем раздел в файловую систему NTFS
* assign – активируем процесс подключения устройства, получения букв для созданных разделов (если автостарт опция включена – всплывает окно, как будто вы только что подключили USB-драйв)
* exit – выходим из diskpart в командную строку.
USB-драйв готов к дальнейшим манипуляциям
instUSB-1
А теперь внимание. Берем имеющийся у вас дистрибутив Windows 7/Windows Server 2008 R2, допустим, на DVD-диске, установленнов в драйв G:
В командной строке (не в diskpart !!!) выполняем следуюшие команды:
* G:
* cd \boot – переходим в каталог boot дистрибутива
* выполняем команду bootsect /nt60 I: – где I: – буква, полученная только что подготовленным USB-драйвом. Данная команда подменяет на диске I: файлы загрузчика на те, которые необходимы для загрузки Vista/Windows 7
* один момент – битность базовой ОС и дистрибутива Windows 7 должны быть одинаковыми
instUSB-2
Все, USB-драйв готов. Копируем на него со стандартного инсталяционного пакета все файлы. Можно использовать как штатный Windows Explorer, так и команды xcopy или robocopy (я предпочитаю robocopy – быстро и уверенно).
Загружаем необходимый ПК с полученного USB-драйва, устанавливаем с него Windows 7.
P.S. А для тех, кто интересуется совместимостью приложений Windows XP со средой Windows 7 - предлагаю посмотреть пост о том, как установить и настроить Windows XP Mode - технологию, поставляемую вместе с Windows 7 RC и которая обеспечивает виртуализацию отдельных приложений.
P.P.S. Помню, что обещал еще написать посты о том как это все снести и как подключать внешние VHD с уже установленной ОС. На неделе сделаю. :)
четверг, 27 мая 2010 г.
Сайт Компания "Система" Пермь
Начали работу над сайтом. Не прошло и года. http://www.systema-it.com/
пятница, 21 мая 2010 г.
ALV Field catalog EDIT_MASK
Have a look at keyword documentation;
- RR = right justified
- V = sign
- _ = place holder for number
- , = decimal separator
- _ = place holder for decimals
- RR = right justified
- V = sign
- _ = place holder for number
- , = decimal separator
- _ = place holder for decimals
четверг, 29 апреля 2010 г.
понедельник, 26 апреля 2010 г.
суббота, 27 марта 2010 г.
Using Google Translate in ABAP
*&---------------------------------------------------------------------*
*& Report ZSIT_GOOGLE_TRANSLATE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zsit_google_translate.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
PARAMETERS p_text TYPE text100 DEFAULT 'Hello World! Using Webservice in SAP ABAP!'.
PARAMETERS p_src TYPE zesit_net310_google_lang AS LISTBOX VISIBLE LENGTH 15 DEFAULT 'EN' .
PARAMETERS p_trg TYPE zesit_net310_google_lang AS LISTBOX VISIBLE LENGTH 15 DEFAULT 'RU' .
* I create ED and Domain zesit_net310_google_lang like char2
* with values EN and RU
*&---------------------------------------------------------------------*
*& Types and Data
*&---------------------------------------------------------------------*
DATA: http_client TYPE REF TO if_http_client ,
http_url TYPE string ,
p_content TYPE string ,
p_result TYPE string .
*&---------------------------------------------------------------------*
*& Start of Selection
*&---------------------------------------------------------------------*
START-OF-SELECTION .
CONCATENATE 'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q='
p_text '&'
'langpair=' p_src '|' p_trg
INTO http_url.
* Creation of new IF_HTTP_Client object
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = http_url
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
http_client->request->set_header_field( name = '~request_method'
value = 'GET' ).
* Send the request
http_client->send( ).
* Reterive the result
CALL METHOD http_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4.
* Get character feed
p_content = http_client->response->get_cdata( ).
p_result = p_content.
* Processing string for result
SHIFT p_content LEFT UP TO '{"translatedText":"'.
SHIFT p_content LEFT BY 19 PLACES.
SPLIT p_content AT '"}' INTO p_result p_content.
write:/ 'Источник = ', p_text,
/ 'Перевод = ', p_result.
*& Report ZSIT_GOOGLE_TRANSLATE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zsit_google_translate.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
PARAMETERS p_text TYPE text100 DEFAULT 'Hello World! Using Webservice in SAP ABAP!'.
PARAMETERS p_src TYPE zesit_net310_google_lang AS LISTBOX VISIBLE LENGTH 15 DEFAULT 'EN' .
PARAMETERS p_trg TYPE zesit_net310_google_lang AS LISTBOX VISIBLE LENGTH 15 DEFAULT 'RU' .
* I create ED and Domain zesit_net310_google_lang like char2
* with values EN and RU
*&---------------------------------------------------------------------*
*& Types and Data
*&---------------------------------------------------------------------*
DATA: http_client TYPE REF TO if_http_client ,
http_url TYPE string ,
p_content TYPE string ,
p_result TYPE string .
*&---------------------------------------------------------------------*
*& Start of Selection
*&---------------------------------------------------------------------*
START-OF-SELECTION .
CONCATENATE 'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q='
p_text '&'
'langpair=' p_src '|' p_trg
INTO http_url.
* Creation of new IF_HTTP_Client object
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = http_url
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
http_client->request->set_header_field( name = '~request_method'
value = 'GET' ).
* Send the request
http_client->send( ).
* Reterive the result
CALL METHOD http_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4.
* Get character feed
p_content = http_client->response->get_cdata( ).
p_result = p_content.
* Processing string for result
SHIFT p_content LEFT UP TO '{"translatedText":"'.
SHIFT p_content LEFT BY 19 PLACES.
SPLIT p_content AT '"}' INTO p_result p_content.
write:/ 'Источник = ', p_text,
/ 'Перевод = ', p_result.
четверг, 25 марта 2010 г.
Полезные модули, программы SAP
FI_PERIOD_CHECK - проверка периода FI
FIRST/LAST_DAY_IN_PERIOD_GET - первый/последний день периода
CL_RECA_DATE - Класс работы с датами
CL_ABAP_TSTMP - класс работы с таймштампами
HR_RU_MONTH_NAME_IN_GENITIVE - месяц в родительном падеже
WFCS_FCAL_WDAYS_GET_S - количество рабочих дней в периоде
CL_RS_TIME_SERVICE - класс работы с датами, в том числе определение рабочего дня
REUSE_ALV_EXTRACT_SAVE, REUSE_ALV_EXTRACT_LOAD - сохранение таблиц в файловом экстракте сервера
REPLACE ALL OCCURRENCES OF REGEX '(\D+)' IN str WITH ' ' IGNORING CASE. - оставляет только цифры в строке.
RS_ABAP_SOURCE_SCAN - поиск кода в программах
VRM_SET_VALUES - ФМ для динамического списка значений списка
RS_REFRESH_FROM_SELECTOPTIONS - чтение значений селекционного экрана
RA03W_FUELLEN - ФМ для нахождения остаточной стоимости ОС
STVARV - транзакция ведения параметров/диапазонов
SGRB / SGRP - пакет в выводом графики
BDCRECXY - инклюд для вызова пакетного ввода
SCP_REPLACE_STRANGE_CHARS - ФМ для транслитерации
CALCULATE_TAX_FROM_NET_AMOUNT - расчет налога
FINB_BAPIRET2_DISPLAY - показать лог bapiret2
TEXT_CONVERT_XLS_TO_SAP - загрузка из Excel в SAP
CALL_FB08, POSTING_INTERFACE_REVERSE_DOC - сторно документа FI
CALL_FBRA - отмена выравнивания
RKD_WORD_WRAP - разбивка текста на строки по словам
S_FORMULA_BUILDER - пакет работы с формулами, как в замещениях
SUTL - пакет расчета формул
SDYNAMICDOCUMENTS - динамические документы
STC1_POPUP_WITH_TABLE_CONTROL - ФМ для вывода словарной таблицы/структуры в виде TABLE CONTROL
CL_FIELD_CONVERT - класс для преобразования к внутреннему/внешнему виду
RS_CONV_EX_2_IN_NO_DD - ФМ для преобразования к внутреннему виду
FM_CO_ASS_INPUT_GET_SD - ФМ для определения контировки в сбытовом заказе
MRM_PROT_FILL - ФМ для добавления своих сообщений в MIRO
BANK_API_CHDOC_DISPLAY - вывод документа изменений
CLAF_OBJECTS_OF_CLASS - объекты к классу с данными классификации
BAPI_OBJCL_GETDETAIL - чтение признаков класса
BAPI_OBJCL_GETCLASSES - чтение классов объекта
CRS_MATERIAL_READ_ALL - чтение всех данных материала
FI_ITEMS_MASS_CHANGE - массовое изменение позиций FI (формируется BDC)
SD_GET_KOKRS_BUKRS_FROM_WERKS - БЕ,КЕ к Заводу
POPUP_GET_VALUES - параметры попапом с проверками
RSTRANSP - Перенос вариантов сел.экрана
CG3Y, CG3Z, AL11 - для работы с файлами на сервере приложений
F4_MATCHCODE_USER_EXIT - ФМ для вызова своего ФМ для выбора в SH(пример исп. SH MPLAL)
STAD - статистика сервера (по пользователю, транзакциям и тд)
SYSTEM-CALL OBJMGR CLONE me TO clone. - копирование инстанции класса.
ACCOUNT_ALLOCATION_GENERAL - контрольный счет в сбыте
RKCOOKP1 - отчет для установки/снятия блокировки периода в CO
SO_NEW_DOCUMENT_SEND_API1 - простая отправка письма
SBCOMS - пакет примеров работы с письмами
MD_CONVERT_MATERIAL_UNIT - преобразование ЕИ для материала
MLHELP_MLMASTER - ракурс Super Join: CKMLHD/CKMLPP/CKMLPR/CKMLCR для чтения данных регистра материал
SCMP - сравнение объектов (данные из таблиц и ракурсов)
OY19 - сравнение объекты настройки системы
SREPO - сравнение объекты пактов, модифицированные объекты SAP и т.п.
CL_SALV_BS_RUNTIME_INFO - данные экземпляра ALV
CL_RECA_DATA_SERVICES=>MOVE_CORRESPONDING_TABLE - move-corr для вн. таблиц
CL_RECA_GUI_F4_POPUP=>FACTORY_GRID - средство поиска по внутренней таблице
CL_RECA_COMM_SERVICES=>SEND_MAIL - быстрая отправка email
CC_CALL_TRANSACTION_NEW_TASK - ФМ для запуска транзакции в новом режиме
CL_GUI_TIMER - класс для работы со временем, например для автообновления данны
G_SET_GET_ID_FROM_NAME / G_SET_TREE_IMPORT - чтение данных набора
FIRST/LAST_DAY_IN_PERIOD_GET - первый/последний день периода
CL_RECA_DATE - Класс работы с датами
CL_ABAP_TSTMP - класс работы с таймштампами
HR_RU_MONTH_NAME_IN_GENITIVE - месяц в родительном падеже
WFCS_FCAL_WDAYS_GET_S - количество рабочих дней в периоде
CL_RS_TIME_SERVICE - класс работы с датами, в том числе определение рабочего дня
REUSE_ALV_EXTRACT_SAVE, REUSE_ALV_EXTRACT_LOAD - сохранение таблиц в файловом экстракте сервера
REPLACE ALL OCCURRENCES OF REGEX '(\D+)' IN str WITH ' ' IGNORING CASE. - оставляет только цифры в строке.
RS_ABAP_SOURCE_SCAN - поиск кода в программах
VRM_SET_VALUES - ФМ для динамического списка значений списка
RS_REFRESH_FROM_SELECTOPTIONS - чтение значений селекционного экрана
RA03W_FUELLEN - ФМ для нахождения остаточной стоимости ОС
STVARV - транзакция ведения параметров/диапазонов
SGRB / SGRP - пакет в выводом графики
BDCRECXY - инклюд для вызова пакетного ввода
SCP_REPLACE_STRANGE_CHARS - ФМ для транслитерации
CALCULATE_TAX_FROM_NET_AMOUNT - расчет налога
FINB_BAPIRET2_DISPLAY - показать лог bapiret2
TEXT_CONVERT_XLS_TO_SAP - загрузка из Excel в SAP
CALL_FB08, POSTING_INTERFACE_REVERSE_DOC - сторно документа FI
CALL_FBRA - отмена выравнивания
RKD_WORD_WRAP - разбивка текста на строки по словам
S_FORMULA_BUILDER - пакет работы с формулами, как в замещениях
SUTL - пакет расчета формул
SDYNAMICDOCUMENTS - динамические документы
STC1_POPUP_WITH_TABLE_CONTROL - ФМ для вывода словарной таблицы/структуры в виде TABLE CONTROL
CL_FIELD_CONVERT - класс для преобразования к внутреннему/внешнему виду
RS_CONV_EX_2_IN_NO_DD - ФМ для преобразования к внутреннему виду
FM_CO_ASS_INPUT_GET_SD - ФМ для определения контировки в сбытовом заказе
MRM_PROT_FILL - ФМ для добавления своих сообщений в MIRO
BANK_API_CHDOC_DISPLAY - вывод документа изменений
CLAF_OBJECTS_OF_CLASS - объекты к классу с данными классификации
BAPI_OBJCL_GETDETAIL - чтение признаков класса
BAPI_OBJCL_GETCLASSES - чтение классов объекта
CRS_MATERIAL_READ_ALL - чтение всех данных материала
FI_ITEMS_MASS_CHANGE - массовое изменение позиций FI (формируется BDC)
SD_GET_KOKRS_BUKRS_FROM_WERKS - БЕ,КЕ к Заводу
POPUP_GET_VALUES - параметры попапом с проверками
RSTRANSP - Перенос вариантов сел.экрана
CG3Y, CG3Z, AL11 - для работы с файлами на сервере приложений
F4_MATCHCODE_USER_EXIT - ФМ для вызова своего ФМ для выбора в SH(пример исп. SH MPLAL)
STAD - статистика сервера (по пользователю, транзакциям и тд)
SYSTEM-CALL OBJMGR CLONE me TO clone. - копирование инстанции класса.
ACCOUNT_ALLOCATION_GENERAL - контрольный счет в сбыте
RKCOOKP1 - отчет для установки/снятия блокировки периода в CO
SO_NEW_DOCUMENT_SEND_API1 - простая отправка письма
SBCOMS - пакет примеров работы с письмами
MD_CONVERT_MATERIAL_UNIT - преобразование ЕИ для материала
MLHELP_MLMASTER - ракурс Super Join: CKMLHD/CKMLPP/CKMLPR/CKMLCR для чтения данных регистра материал
SCMP - сравнение объектов (данные из таблиц и ракурсов)
OY19 - сравнение объекты настройки системы
SREPO - сравнение объекты пактов, модифицированные объекты SAP и т.п.
CL_SALV_BS_RUNTIME_INFO - данные экземпляра ALV
CL_RECA_DATA_SERVICES=>MOVE_CORRESPONDING_TABLE - move-corr для вн. таблиц
CL_RECA_GUI_F4_POPUP=>FACTORY_GRID - средство поиска по внутренней таблице
CL_RECA_COMM_SERVICES=>SEND_MAIL - быстрая отправка email
CC_CALL_TRANSACTION_NEW_TASK - ФМ для запуска транзакции в новом режиме
CL_GUI_TIMER - класс для работы со временем, например для автообновления данны
G_SET_GET_ID_FROM_NAME / G_SET_TREE_IMPORT - чтение данных набора
четверг, 18 марта 2010 г.
четверг, 11 марта 2010 г.
SAP ERP IDES on Ubuntu
I didn't test this yet, but i hope it will be work...
http://wiki.colar.net/isa_7_0_2004s_on_ubuntu
http://wiki.colar.net/isa_7_0_2004s_on_ubuntu
понедельник, 8 марта 2010 г.
Turkov's Blog: Working with MOD Files in Adobe Premiere Pro CS3
http://eturkov.blogspot.com/2008/05/working-with-mod-files-in-adobe.html
Turkov's Blog: Working with MOD Files in Adobe Premiere Pro CS3: "Working with MOD Files in Adobe Premiere Pro CS3
I finally purchased a Canon FS100 Camcorder (just like the FS10 and FS11, but without any built-in memory) for making my famous DIY videos. Great little camera, very happy with it so far.
I found it very convenient to be able to transfer the recorded files over from the SD media to my PC, however, getting the resulting .MOD files (a flavor of MPEG2) into Adobe Premiere Pro proved to be a challenging experience.
Throughout this tutorial, I'm going to assume that you are recording your videos in wide-screen mode in the highest quality setting.
Step 0: Enable Adobe Premiere Pro CS3 to read MOD files
Copy the file ad2ac3dec.dll to the application root of Adobe Premiere Pro CS3.
Step 1: Get the files off the SD media.
Create a folder where you would like to copy your video files (give this folder the name of your project, in this example it will be SampleProject). Simply use either the supplied USB cable to connect the camera to the computer and browse it like an external drive or use a flash memory card reader to read the SD memory card directly.
The video files on the Canon FS series are stored in SD_VIDEO/PRGXXX (in my case it's PRG001), so we want to copy or move the PRG001 folder to the SampleProject folder we created earlier. From now on when I mention the PRG001 folder, I am referring to the local copy, not the copy on the SD card.
Step 2: Rename the MOD files to M2V files
Open the PRG001 folder and copy its address:
Next, click Start, run, and type in cmd to open up the command prompt application:
After hitting 'OK,' the cmd appliation will start. Type in the command cd (change directory) then type a space, right click on the cmd application and select the 'paste' option and hit the ENTER key; see below:
then type 'rename *.MOD *.M2V' to rename all of the MOD files to M2V files:
Confirm that your PRG folder now contains M2V files instead of MOD files:
Step 3: Create A New Project
Open Adobe Premiere and select New Project:
Next, select the preset DV - NTSC -> Widescreen 48kHz
For the location field, choose the parent of the PRG folder, and for the name field, use the same name as the parent folder (I also prefer to use a lower case letter as the first letter). Click 'OK' to create the project.
Step 4: Import the Video Files
Select File -> Import and browse to the PRG folder. Sort the files by the modified property so that MOV001.M2V is at the top:
Note that in the above screen shot, the files haven't been sorted yet.
After you have properly sorted the files, select the very last file, then hold the SHIFT key and click on the very first file. The files will be imported correctly now. Just click 'OK' to import the files.
Step 5:
After premiere has finished pre-processing the files, select all of the newly imported files (you can use the same SHIFT + CLICK method as above), right click any one of the selected video files, and choose Interpret Footage...
When the Interpret Footage dialog opens, change the Pixel Aspect Ratio to D1/DV NTSC Widescreen 16:9 (1.2) and click 'OK'
Congratulations, you are now free to edit & export your video in 16:9 widescreen mode!"
Turkov's Blog: Working with MOD Files in Adobe Premiere Pro CS3: "Working with MOD Files in Adobe Premiere Pro CS3
I finally purchased a Canon FS100 Camcorder (just like the FS10 and FS11, but without any built-in memory) for making my famous DIY videos. Great little camera, very happy with it so far.
I found it very convenient to be able to transfer the recorded files over from the SD media to my PC, however, getting the resulting .MOD files (a flavor of MPEG2) into Adobe Premiere Pro proved to be a challenging experience.
Throughout this tutorial, I'm going to assume that you are recording your videos in wide-screen mode in the highest quality setting.
Step 0: Enable Adobe Premiere Pro CS3 to read MOD files
Copy the file ad2ac3dec.dll to the application root of Adobe Premiere Pro CS3.
Step 1: Get the files off the SD media.
Create a folder where you would like to copy your video files (give this folder the name of your project, in this example it will be SampleProject). Simply use either the supplied USB cable to connect the camera to the computer and browse it like an external drive or use a flash memory card reader to read the SD memory card directly.
The video files on the Canon FS series are stored in SD_VIDEO/PRGXXX (in my case it's PRG001), so we want to copy or move the PRG001 folder to the SampleProject folder we created earlier. From now on when I mention the PRG001 folder, I am referring to the local copy, not the copy on the SD card.
Step 2: Rename the MOD files to M2V files
Open the PRG001 folder and copy its address:
Next, click Start, run, and type in cmd to open up the command prompt application:
After hitting 'OK,' the cmd appliation will start. Type in the command cd (change directory) then type a space, right click on the cmd application and select the 'paste' option and hit the ENTER key; see below:
then type 'rename *.MOD *.M2V' to rename all of the MOD files to M2V files:
Confirm that your PRG folder now contains M2V files instead of MOD files:
Step 3: Create A New Project
Open Adobe Premiere and select New Project:
Next, select the preset DV - NTSC -> Widescreen 48kHz
For the location field, choose the parent of the PRG folder, and for the name field, use the same name as the parent folder (I also prefer to use a lower case letter as the first letter). Click 'OK' to create the project.
Step 4: Import the Video Files
Select File -> Import and browse to the PRG folder. Sort the files by the modified property so that MOV001.M2V is at the top:
Note that in the above screen shot, the files haven't been sorted yet.
After you have properly sorted the files, select the very last file, then hold the SHIFT key and click on the very first file. The files will be imported correctly now. Just click 'OK' to import the files.
Step 5:
After premiere has finished pre-processing the files, select all of the newly imported files (you can use the same SHIFT + CLICK method as above), right click any one of the selected video files, and choose Interpret Footage...
When the Interpret Footage dialog opens, change the Pixel Aspect Ratio to D1/DV NTSC Widescreen 16:9 (1.2) and click 'OK'
Congratulations, you are now free to edit & export your video in 16:9 widescreen mode!"
Подписаться на:
Сообщения (Atom)