Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SE37 - Построитель функций => Тема начата: Паганель от Март 29, 2011, 01:41:29 am
-
Очень удобная FM, вводишь номер заказа, а на выходе получаешь список всех ниже стоящих заказов (если это сеть заказов), список компонентов и тд., для удобства обернул в form.
Отдельно объявления данных:
DATA:
gt_header LIKE bapi_order_header1 OCCURS 0,
gt_position LIKE bapi_order_item OCCURS 0,
gt_sequence LIKE bapi_order_sequence OCCURS 0,
gt_operation LIKE bapi_order_operation1 OCCURS 0,
gt_trigger_point LIKE bapi_order_trigger_point OCCURS 0,
gt_component LIKE bapi_order_component OCCURS 0,
gt_prod_rel_tool LIKE bapi_order_prod_rel_tools OCCURS 0,
gt_BAPIRET2 LIKE BAPIRET2 OCCURS 0.
rs_order TYPE afko-aufnr.
пример вызова:
rs_order = '100000000424'. " подставляйте свой ;)
perform get_orders rs_order.
сама форма:
FORM get_orders
USING rs_order TYPE afko-aufnr.
DATA: l_order_objects TYPE bapi_pp_order_objects.
l_order_objects-header = 'X'.
l_order_objects-positions = 'X'.
"SEQUENCES
"OPERATIONS
l_order_objects-components = 'X'.
"PROD_REL_TOOLS
"TRIGGER_POINTS
"SUBOPERATIONS
REFRESH gt_header. REFRESH gt_position. REFRESH gt_sequence.
REFRESH gt_operation. REFRESH gt_trigger_point. REFRESH gt_component.
REFRESH gt_prod_rel_tool. REFRESH gt_BAPIRET2.
CALL FUNCTION 'BAPI_PRODORD_GET_DETAIL'
EXPORTING
number = rs_order
collective_order = 'X'
order_objects = l_order_objects
IMPORTING
RETURN = gt_BAPIRET2
TABLES
header = gt_header
position = gt_position
sequence = gt_sequence
operation = gt_operation
trigger_point = gt_trigger_point
component = gt_component
prod_rel_tool = gt_prod_rel_tool .
Думаю все понятно, по типам и названиям можно понять что получаем на выходе
header - данные заголовков
position - позиции
sequence - последовательности
component - компоненты
Мне лично нужны были первая и последняя таблички.
-
Небольшое уточнение, ошибся в типе (когда адаптировал для примера на форум)
DATA:
gt_header LIKE bapi_order_header1 OCCURS 0,
gt_position LIKE bapi_order_item OCCURS 0,
gt_sequence LIKE bapi_order_sequence OCCURS 0,
gt_operation LIKE bapi_order_operation1 OCCURS 0,
gt_trigger_point LIKE bapi_order_trigger_point OCCURS 0,
gt_component LIKE bapi_order_component OCCURS 0,
gt_prod_rel_tool LIKE bapi_order_prod_rel_tools OCCURS 0,
"gt_BAPIRET2 LIKE BAPIRET2 OCCURS 0. " <=== тут неправильно
l_BAPIRET2 LIKE BAPIRET2. " теперь правильно
rs_order TYPE afko-aufnr.
Форма соответственно:
FORM get_orders
USING rs_order TYPE afko-aufnr.
DATA: l_order_objects TYPE bapi_pp_order_objects.
l_order_objects-header = 'X'.
l_order_objects-positions = 'X'.
"SEQUENCES
"OPERATIONS
l_order_objects-components = 'X'.
"PROD_REL_TOOLS
"TRIGGER_POINTS
"SUBOPERATIONS
REFRESH gt_header. REFRESH gt_position. REFRESH gt_sequence.
REFRESH gt_operation. REFRESH gt_trigger_point. REFRESH gt_component.
REFRESH gt_prod_rel_tool.
CALL FUNCTION 'BAPI_PRODORD_GET_DETAIL'
EXPORTING
number = rs_order
collective_order = 'X'
order_objects = l_order_objects
IMPORTING
RETURN = l_BAPIRET2 " <=== тут
TABLES
header = gt_header
position = gt_position
sequence = gt_sequence
operation = gt_operation
trigger_point = gt_trigger_point
component = gt_component
prod_rel_tool = gt_prod_rel_tool .
-
REFRESH gt_header. REFRESH gt_position. REFRESH gt_sequence.
REFRESH gt_operation. REFRESH gt_trigger_point. REFRESH gt_component.
REFRESH gt_prod_rel_tool.
Ну и еще в качестве уточнения или улучшения, многие похоже забывают что операторы ABAP имеют синтаксис множественного применения, .т.е. этот же код можно было бы написать как:
REFRESH: gt_header, gt_position, gt_sequence, gt_operation, gt_trigger_point, gt_component,
gt_prod_rel_tool.
Что выглядит более приятно глазу. Ну или второй вариант
CLEAR: gt_header[], gt_position[], gt_sequence[], gt_operation[], gt_trigger_point[], gt_component[],
gt_prod_rel_tool[].
-
Ну и еще в качестве уточнения или улучшения, многие похоже забывают что операторы ABAP имеют синтаксис множественного применения, .т.е. этот же код можно было бы написать как:...
Ну кому как, мне так нагляднее и удобнее, кто как привык и «о вкусах не спорят»....
Что выглядит более приятно глазу. Ну или второй вариант
Как по мне, тоже имхо (см. выше, что о вкусах не спорят), так приятнее, а вообще, часто пишешь так, как тебе более читабельнее