KEU написал(а):
KEU написал(а):
1.Про виртуальный показатель можно подробнее
Добрый вечер, KEU.
Эта ветка вам очень поможет =
http://sapboard.ru/forum/viewtopic.php?f=12&t=14535На старом тестовом кубе попробовал, сработало.
Cube Name = 'ZBT_C01'
CHARACTERISTIC = 'ZBTAMAT1' - Material.
KEY FIGURE = 'ZBTAVIRKA' - Virtual Key Figure aka VKFДопустим стоит задача, что если Material = 'М1', то VKF = 10, если 'M2', то VKF = 20. (под себя заточите)Добавил KEY FIGURE = 'ZBTAVIRKA' в Cube 'ZBT_C01'.
СОздание ВИРТУАЛЬНОГО ПОКАЗАТЕЛЯ VKF:1. SE19.
2. Implementation Name = ZBTA_BADI_ZBT_C01 (дадите свое название)
3. Click Button = CREATE.
4. InfoProv = ZBT_C01.
5. Click Tab = Interface
6. Double CLick Name of implementing class: 'ZCL_IM_BTA_BADI_ZBT_C01'
7. Tab Attributes. Создадите
P_KYF_ZBTAVIRKA и
P_CHA_ZBTAMAT1 с параметрами = LEVEL = INSTANCE, Visibility = PUBLIC, Associated Type = I.
8. Tab Methods:
IF_EX_RSR_OLAP_BADI~DEFINE Static Method Public
IF_EX_RSR_OLAP_BADI~INITIALIZE Instance Method Public
IF_EX_RSR_OLAP_BADI~COMPUTE Instance Method Public
9.
IF_EX_RSR_OLAP_BADI~DEFINECode:
METHOD if_ex_rsr_olap_badi~define.
DATA: l_s_chanm TYPE rrke_s_chanm,
l_kyfnm TYPE rsd_kyfnm.
CASE i_s_rkb1d-infocube.
WHEN 'ZBT_C01'.
l_s_chanm-chanm = 'ZBTAMAT1'.
l_s_chanm-mode = rrke_c_mode-read.
APPEND l_s_chanm TO c_t_chanm.
APPEND 'ZBTAVIRKA' TO c_t_kyfnm.
ENDCASE.
ENDMETHOD.
IF_EX_RSR_OLAP_BADI~INITIALIZECode:
METHOD if_ex_rsr_olap_badi~initialize.
DATA:
l_global_name TYPE string.
FIELD-SYMBOLS:
<l_global> TYPE i,
<l_s_sfc> TYPE rrkg_s_sfc,
<l_s_sfk> TYPE rrkg_s_sfk.
CLASS cl_exm_im_rsr_olap_badi DEFINITION LOAD.
* break-point.
LOOP AT i_th_sfc ASSIGNING <l_s_sfc> WHERE keyreturnnm IS NOT INITIAL.
CONCATENATE 'P_CHA' <l_s_sfc>-chanm
INTO l_global_name
SEPARATED BY '_'.
UNASSIGN <l_global>.
ASSIGN (l_global_name) TO <l_global>.
CHECK <l_global> IS ASSIGNED.
<l_global> = cl_exm_im_rsr_olap_badi=>get_field_position_d(
i_fieldnm = <l_s_sfc>-keyreturnnm
i_s_data = i_s_data ).
ENDLOOP.
LOOP AT i_th_sfk ASSIGNING <l_s_sfk>.
CONCATENATE 'P_KYF' <l_s_sfk>-kyfnm
INTO l_global_name
SEPARATED BY '_'.
UNASSIGN <l_global>.
ASSIGN (l_global_name) TO <l_global>.
CHECK <l_global> IS ASSIGNED.
<l_global> = cl_exm_im_rsr_olap_badi=>get_field_position_d(
i_fieldnm = <l_s_sfk>-kyfnm
i_s_data = i_s_data ).
ENDLOOP.
ENDMETHOD.
IF_EX_RSR_OLAP_BADI~COMPUTECode:
METHOD if_ex_rsr_olap_badi~compute.
FIELD-SYMBOLS <fs_zbtamat1> TYPE ANY.
FIELD-SYMBOLS <fs_zbtavirka> TYPE ANY.
* MATERIAL
ASSIGN COMPONENT p_cha_zbtamat1 OF STRUCTURE c_s_data TO
<fs_zbtamat1>.
* Virtual Key Figure
ASSIGN COMPONENT p_kyf_zbtavirka OF STRUCTURE c_s_data TO
<fs_zbtavirka>.
*LOGIC
CASE <fs_zbtamat1>.
WHEN 'M1'.
<fs_zbtavirka> = '10'.
WHEN 'M2'.
<fs_zbtavirka> = '20'.
* WHEN OTHERS.
* <fs_zbtavirka> = '100'.
ENDCASE.
ENDMETHOD. "IF_EX_RSR_OLAP_BADI~COMPUTE
10. АКТИВИРУЕМ ВСЕ ЭТО ДОБРО.
11. Проверяем работает-ли? Идем в TCODE =
RSRT Query = 'ZBT_C01/ZBT_C01_Q5000'.
12. Жмем
Generate Report13.EXECUTE и получаем, то что хотели =
Code:
M1 10,000
M2 20,000
Overall Result 30,000