Задача: Есть переменная BPS типа иерархия. Но основании того, какой узел иерархии выбран, в переменную типа - Признак (или же тоже значение иерархии) необходимо занести все дочерние узлы этого узла.
+ к задаче. Если переменная типа Признак ( вводиться пользователем ) не пустая, то заполнять переменную только теми дочерними узлами, первые две цифры которых совпадают с первыми двумя цифрами этой переменной.
Решение по шагам.
Основная переменная на вход ( Тип иерархия. Тех имя для примера - NHIERIN )
Доп. переменная на вход (Тип - значения признака. Тех имя для примера - NVCOMP (компания) )
Переменная на выход: (Тип значения признака. Тех имя для примера - NCHAROUT )
Переменная на выход: (Тип значения иерархия. Тех имя для примера - NHEIROUT )
1) Переменные BPS
2) для варианта когда на выход подаем значения в переменную типа значения признака
Используем FM
YN_UPF_VARIABLE_USER_EXIT_PREV
Описание интерфейса
*"---------------------------------------------------------------------- *"*"Локальный интерфейс: *" IMPORTING *" VALUE(I_AREA) TYPE UPC_Y_AREA *" VALUE(I_VARIABLE) TYPE UPC_Y_VARIABLE *" VALUE(I_CHANM) TYPE UPC_Y_CHANM OPTIONAL *" VALUE(ITO_CHANM) TYPE UPC_YTO_CHA *" EXPORTING *" REFERENCE(ETO_CHARSEL) TYPE UPC_YTO_CHARSEL *" REFERENCE(ET_HIE_NODES2) TYPE UPC_YT_HIESEL *"----------------------------------------------------------------------
код:
CLEAR ET_HIE_NODES2. ************************************ CALL METHOD cl_sem_variable=>get_instance “ получаем инстанцию иерархии для “переменной на вход1 EXPORTING i_area = I_AREA "'MMT03' i_variable = 'NHIERIN' " для переменной RECEIVING rr_variable = lr_var3 “ инстанция сюда EXCEPTIONS not_existing = 1 OTHERS = 2. “ получаем инстанцию иерархии для “переменной на вход2 CALL METHOD cl_sem_variable=>get_instance EXPORTING i_area = I_AREA "'MMT03' i_variable = 'NVCOMP' " переменная 2 (компания. Доп переменная) RECEIVING rr_variable = lr_var2 EXCEPTIONS not_existing = 1 OTHERS = 2. CALL METHOD lr_var3->get_hie_nodes " получаем значение выбранного узла “иерархии RECEIVING rt_value = et_hie_nodes2 “ в таблицу EXCEPTIONS error = 1 OTHERS = 2. CALL METHOD lr_var2->get_value " значения компании RECEIVING rto_value = ETO_CHARSEL EXCEPTIONS error = 1 OTHERS = 2. “ немного колдоства с header line WHERE NODENAME = ET_HIE_NODES3-NODENAME and OBJVERS eq 'A'. WHERE NODENAME = ET_HIE_NODES3-NODENAME and HIEID = HeirID and OBJVERS eq 'A'. *'PP'. WHERE HIEID eq HeirID and IOBJNM eq 'Y_FICTR' and OBJVERS eq 'A' and PARENTID eq PID213. “ выбираем все дочерние узлы LOOP at companyh. “ доп “условие с компанией cr = companyh-NODENAME+0(2). clear ls_charsel. ls_charsel-chanm = i_chanm. ls_charsel-seqno = SY-TABiX. ls_charsel-sign = 'I'. ls_charsel-opt = 'EQ'. ls_charsel-low = companyh-NODENAME. LOOP at companyh. clear ls_charsel. ls_charsel-chanm = i_chanm. ls_charsel-seqno = SY-TABiX. ls_charsel-sign = 'I'. ls_charsel-opt = 'EQ'. ls_charsel-low = companyh-NODENAME. ************************************ **************************************************** ****************************************************
3) для варианта когда на выход подаем значения в переменную типа переменная используем FM YN_UPF_VARIABLE_USER_EXIT_HIER
Код
FUNCTION YN_UPF_VARIABLE_USER_EXIT_HIER. *"---------------------------------------------------------------------- *"*"Локальный интерфейс: *" IMPORTING *" VALUE(I_TYPE) TYPE UPC_Y_VAR_TYPE *" VALUE(I_AREA) TYPE UPC_Y_AREA *" VALUE(I_VARIABLE) TYPE UPC_Y_VARIABLE *" VALUE(IS_HIE_KEY) TYPE UPC_YS_HIE_KEY *" EXPORTING *" REFERENCE(ET_HIE_NODES) TYPE UPC_YT_HIESEL *" REFERENCE(ET_HIE_NODES2) TYPE UPC_YT_HIESEL *" REFERENCE(ETO_CHARSEL) TYPE UPC_YTO_CHARSEL *" EXCEPTIONS *" FAILED *"---------------------------------------------------------------------- * this example shows how the function module for variables of * type User-Exit should look like * this example shows variable of type HIER - hierarchy node values * input parameters: * i_type : type of the variable * i_area : Planning area, in which the variable is defined. * i_variable : The name of the variable. * is_hie_key : contents the hierarchy, which the variable contains * export parameters: * et_hie_nodes : hierarchy-nodes as the content for the variable * exceptions: * when it's necessary to raise an exception within exit function module, * it's possible by the statement message ... raising * name_of_the_exception. Every exception can be used and the error will * be handled * ------------------------------------------------------------------- * fill export table et_hie_nodes of structure UPC_YS_HIESEL * fields: CHANM - Characteristic * HIENM - Hierarchy name * HIEVER - Hierarchy version * DATETO - Hierarchy valid to * NODENAME - Node name * HIECHA - Characteristic value of node * DUMMY_LEAF - Indicator: Help Nodes * TO_CHADEP - Values of Compound Characteristics * CHANM - compound Characteristic * CHAVLINT - Value of compound Characteristic * -------------------------------------------------------------------- * clear export table CLEAR et_hie_nodes. CLEAR ETO_CHARSEL. *--------------------------------------------------------------------- * Example: This example is based on the infoobject 0D_COUNTRY. For * testing please first define a bw text hierarchy for this * infoobject with at least two text nodes (AMERICA and EUROPE). * The export table is filled with a selection of these text * nodes. *--------------------------------------------------------------------- CALL METHOD cl_sem_variable=>get_instance EXPORTING i_area = I_AREA "'MMT03' i_variable = 'NHIERIN' " выбранный узел инстанция RECEIVING rr_variable = lr_var EXCEPTIONS not_existing = 1 OTHERS = 2. CALL METHOD cl_sem_variable=>get_instance EXPORTING i_area = I_AREA "'MMT03' i_variable = 'NVCOMP' " выбранный узел инстанция RECEIVING rr_variable = lr_var2 EXCEPTIONS not_existing = 1 OTHERS = 2. CALL METHOD lr_var->get_hie_nodes " значения верхнего узла RECEIVING rt_value = et_hie_nodes2 EXCEPTIONS error = 1 OTHERS = 2. CALL METHOD lr_var2->get_value " значения компании RECEIVING rto_value = ETO_CHARSEL EXCEPTIONS error = 1 OTHERS = 2. WHERE NODENAME = ET_HIE_NODES3-NODENAME and OBJVERS eq 'A'. WHERE NODENAME = ET_HIE_NODES3-NODENAME and HIEID = HeirID and OBJVERS eq 'A'. *'PP'. WHERE HIEID eq HeirID and IOBJNM eq 'Y_FICTR' and OBJVERS eq 'A' and PARENTID eq PID213. LOOP at companyh. cr = companyh-NODENAME+0(2). * text node 'AMERICA' l_hie_nodes_wa-chanm = is_hie_key-chanm. l_hie_nodes_wa-hienm = is_hie_key-hienm. l_hie_nodes_wa-hiever = is_hie_key-hiever. l_hie_nodes_wa-dateto = is_hie_key-dateto. l_hie_nodes_wa-nodename = companyh-NODENAME. l_hie_nodes_wa-hiecha = 'Y_FICTR'. l_hie_nodes_wa-dummy_leaf = ''. * l_hie_nodes_wa-to_chadep is inital LOOP at companyh. * text node 'AMERICA' l_hie_nodes_wa-chanm = is_hie_key-chanm. l_hie_nodes_wa-hienm = is_hie_key-hienm. l_hie_nodes_wa-hiever = is_hie_key-hiever. l_hie_nodes_wa-dateto = is_hie_key-dateto. l_hie_nodes_wa-nodename = companyh-NODENAME. l_hie_nodes_wa-hiecha = 'Y_FICTR'. l_hie_nodes_wa-dummy_leaf = ''. * l_hie_nodes_wa-to_chadep is inital * text node 'EUROPE' * l_hie_nodes_wa-chanm = is_hie_key-chanm. * l_hie_nodes_wa-hienm = is_hie_key-hienm. * l_hie_nodes_wa-hiever = is_hie_key-hiever. * l_hie_nodes_wa-dateto = is_hie_key-dateto. * l_hie_nodes_wa-nodename = 'EUROPE'. * l_hie_nodes_wa-hiecha = '0HIER_NODE'. * l_hie_nodes_wa-dummy_leaf = ''. * INSERT l_hie_nodes_wa INTO TABLE et_hie_nodes.