Как посмотрю тема АКН в разрезе периодов пользуется популярностью...
В связи с этим выкладываю здесь реализацию коллеги
LS.
Сразу предупреждаю, что реализация сыровата, поэтому потребуется определенная работа напильником
Code:
1. создать структуру FMAVC_S_FILTER_BADI_AVC_LINE (SE11):
Short Description: Structure for the BAdI FMAVC_ENTRY_FILTER: AVC Line
Component Component Type
ALDNR BUAVC_ALDNR
ARCTY BUAVC_ARCTY
CEFFYEAR_AVC GNJHR
ACO_ADDRESS FMAVC_S_DIMENSIONS
CHECKHORIZON BUAVC_CHECKHORIZON
CURRENCY FM_WAERS
RPMAX RPMAX
2. Создать структуру FMAVC_S_FILTER_BADI_VALUES (SE11):
Short Description: Structure for the BAdI FMAVC_ENTRY_FILTER: AVC Values
Component Component Type Reference Table Ref. Field
LVAL01 LVALXX9 FM01 WAERS
LVAL02 LVALXX9 FM01 WAERS
LVAL03 LVALXX9 FM01 WAERS
LVAL04 LVALXX9 FM01 WAERS
LVAL05 LVALXX9 FM01 WAERS
LVAL06 LVALXX9 FM01 WAERS
LVAL07 LVALXX9 FM01 WAERS
LVAL08 LVALXX9 FM01 WAERS
LVAL09 LVALXX9 FM01 WAERS
LVAL10 LVALXX9 FM01 WAERS
LVAL11 LVALXX9 FM01 WAERS
LVAL12 LVALXX9 FM01 WAERS
LVAL13 LVALXX9 FM01 WAERS
LVAL14 LVALXX9 FM01 WAERS
LVAL15 LVALXX9 FM01 WAERS
LVAL16 LVALXX9 FM01 WAERS
3. Создать BAdi definition FMAVC_ENTRY_FILTER (SE18):
Definition short Text: Enhance the Filter Settings for Availability Control (FM)
Закладка 'Interface'
Даблклик на интерфейсе IF_EX_FMAVC_ENTRY_FILTER:
Создать след. методы:
Method Level Description
BUDGET_FILTER Instance Method Apply filter exit for budget values
POSTING_FILTER Instance Method Apply filter exit for posting values
Параметры для метода BUDGET_FILTER:
Parameter Type Typing Associated Type
I_S_BUDGET_LINE Importing Type FMKU_S_LINE
I_S_AVC_LINE Importing Type FMAVC_S_FILTER_BADI_AVC_LINE
E_FLG_SKIP_ENTRY Exporting Type XFELD
C_S_AVC_VALUES Changing Type FMAVC_S_FILTER_BADI_VALUES
Параметры для метода POSTING_FILTER:
Parameter Type Typing Associated Type
I_S_POSTING_LINE Importing Type FMAVC_S_ACTUALS_LINE
I_S_AVC_LINE Importing Type FMAVC_S_FILTER_BADI_AVC_LINE
E_FLG_SKIP_ENTRY Exporting Type XFELD
C_S_AVC_VALUES Changing Type FMAVC_S_FILTER_BADI_VALUES
Активировать и вернуться к BAdi Definition.
Нажать кнопку 'Check' :)
Нажать Regenerate (Меню: Utilities/Regeneration).
4. Модифицировать класс CL_FMAVC_LEDGER (SE24):
4.1. Новые атрибуты:
Attribute Level Visibility Typing Associated type Initial Value
C_NAME_FILTER_BADI Constant Protected Type EXIT_DEF 'FMAVC_ENTRY_FILTER'
G_REF_FILTER_BADI Instance Attribute Protected Type Ref To IF_EX_FMAVC_ENTRY_FILTER
4.2. Новый метод:
Method Level Visibility Description
FILTER_EXIT_UPD_APPLY Instance Method Protected Apply filter for posting data
Параметры:
Parameter Type Typing Associated Type
I_S_ORIG_ENTRY Importing Type FMAVC_S_ACTUALS_LINE
E_FLG_SKIP_ENTRY Exporting Type XFELD
C_S_ENTRY_BUFFER_LINE Changing Type ANY
Код:
METHOD filter_exit_upd_apply.
DATA: l_f_avc_line TYPE fmavc_s_filter_badi_avc_line,
l_f_avc_values TYPE fmavc_s_filter_badi_values.
FIELD-SYMBOLS: <avc_area> TYPE avc_area,
<address> TYPE address,
<category> TYPE category,
<check_att> TYPE check_att,
<values> TYPE values.
CLEAR e_flg_skip_entry.
IF me->g_ref_filter_badi IS INITIAL.
CALL METHOD cl_exithandler=>get_instance
EXPORTING
exit_name = me->c_name_filter_badi
null_instance_accepted = seex_true
CHANGING
instance = me->g_ref_filter_badi
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
CLEAR me->g_ref_filter_badi.
MESSAGE x012(01).
ENDIF.
ENDIF.
CHECK NOT ( me->g_ref_filter_badi IS INITIAL ).
ASSIGN COMPONENT: 'AVC_AREA'
OF STRUCTURE c_s_entry_buffer_line
TO <avc_area>,
'ADDRESS'
OF STRUCTURE c_s_entry_buffer_line
TO <address>,
'CATEGORY'
OF STRUCTURE c_s_entry_buffer_line
TO <category>,
'CHECK_ATT'
OF STRUCTURE c_s_entry_buffer_line
TO <check_att>,
'VALUES'
OF STRUCTURE c_s_entry_buffer_line
TO <values>.
MOVE: <avc_area>-rldnr TO l_f_avc_line-aldnr,
<category>-rrcty TO l_f_avc_line-arcty,
<category>-ceffyear TO l_f_avc_line-ceffyear_avc,
<address>-dimensions TO l_f_avc_line-aco_address,
<check_att>-check_horizon TO l_f_avc_line-checkhorizon,
<check_att>-currency TO l_f_avc_line-currency,
<values>-rpmax TO l_f_avc_line-rpmax.
MOVE-CORRESPONDING <values> TO l_f_avc_values.
CALL METHOD me->g_ref_filter_badi->posting_filter
EXPORTING
i_s_posting_line = i_s_orig_entry
i_s_avc_line = l_f_avc_line
IMPORTING
e_flg_skip_entry = e_flg_skip_entry
CHANGING
c_s_avc_values = l_f_avc_values.
MOVE-CORRESPONDING l_f_avc_values TO <values>.
ENDMETHOD.
4.3. Модифицировать IF_FMAVC_LEDGER~COLLECT_UPD:
4.3.1 Replace:
l_matching_record TYPE xfeld.
By:
l_matching_record TYPE xfeld,
l_skip_record TYPE xfeld.
4.3.2 After:
CALL METHOD me->avc_area_fill
EXPORTING
i_s_orig_entry = l_f_collect-line
CHANGING
c_s_entry_buffer_line = <collect_buffer_line>.
Insert:
***********************************************************************
*--- Apply the filter BAdI for posting data:
***********************************************************************
CALL METHOD me->filter_exit_upd_apply
EXPORTING
i_s_orig_entry = l_f_collect-line
IMPORTING
e_flg_skip_entry = l_skip_record
CHANGING
c_s_entry_buffer_line = <collect_buffer_line>.
CHECK l_skip_record IS INITIAL.
.....
ЕЖЕМЕСЯЧНЫЙ АVC:
1. Cоздать BADI ZFMAVC_ENTRY_FILTER (SE19):
Definition name: FMAVC_ENTRY_FILTER
Implementation short text: Monthly AVC
Код для метода IF_EX_FMAVC_ENTRY_FILTER~POSTING_FILTER:
METHOD if_ex_fmavc_entry_filter~posting_filter.
DATA: values TYPE zfmavc_s_filter_badi_values.
IF i_s_avc_line-aldnr > 'H' AND
i_s_avc_line-aldnr < 'HZ'.
values = c_s_avc_values.
CLEAR c_s_avc_values.
CASE i_s_avc_line-aldnr.
WHEN 'H1'.
c_s_avc_values-lval01 = values-lval01.
WHEN 'H2'.
c_s_avc_values-lval02 = values-lval02.
WHEN 'H3'.
c_s_avc_values-lval03 = values-lval03.
WHEN 'H4'.
c_s_avc_values-lval04 = values-lval04.
WHEN 'H5'.
c_s_avc_values-lval05 = values-lval05.
WHEN 'H6'.
c_s_avc_values-lval06 = values-lval06.
WHEN 'H7'.
c_s_avc_values-lval07 = values-lval07.
WHEN 'H8'.
c_s_avc_values-lval08 = values-lval08.
WHEN 'H9'.
c_s_avc_values-lval09 = values-lval09.
WHEN 'HA'.
c_s_avc_values-lval10 = values-lval10.
WHEN 'HB'.
c_s_avc_values-lval11 = values-lval11.
WHEN 'HC'.
c_s_avc_values-lval12 = values-lval12.
ENDCASE.
ENDIF.
ENDMETHOD.