Sapforum.Biz

Инструменты => ABAP - Инструментальные средства => SE37 - Построитель функций => Тема начата: Паганель от Март 29, 2011, 01:41:29 am

Название: ФМ для получения данных PP-заказа (заказов, разузлование)
Отправлено: Паганель от Март 29, 2011, 01:41:29 am
Очень удобная FM, вводишь номер заказа, а на выходе получаешь список всех ниже стоящих заказов (если это сеть заказов), список компонентов и тд., для удобства обернул в form.
Отдельно объявления данных:
Код: You are not allowed to view links. Register or Login
  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.

пример вызова:
Код: You are not allowed to view links. Register or Login
rs_order = '100000000424'. " подставляйте свой  ;)
perform get_orders rs_order.

сама форма:
Код: You are not allowed to view links. Register or Login
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 - компоненты
Мне лично нужны были первая и последняя таблички.
Название: Re: ФМ для получения данных PP-заказа (заказов, разузлование)
Отправлено: Паганель от Март 29, 2011, 10:31:59 pm
Небольшое уточнение, ошибся в типе (когда адаптировал для примера на форум)
Код: You are not allowed to view links. Register or Login
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.
Форма соответственно:
Код: You are not allowed to view links. Register or Login
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 .


Название: Re: ФМ для получения данных PP-заказа (заказов, разузлование)
Отправлено: Uukrul от Март 29, 2011, 10:48:27 pm
Код: You are not allowed to view links. Register or Login
   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 имеют синтаксис множественного применения, .т.е. этот же код можно было бы написать как:
Код: You are not allowed to view links. Register or Login
    REFRESH: gt_header,  gt_position,  gt_sequence, gt_operation,  gt_trigger_point,  gt_component,
             gt_prod_rel_tool.
Что выглядит более приятно глазу. Ну или второй вариант
Код: You are not allowed to view links. Register or Login
    CLEAR: gt_header[],  gt_position[],  gt_sequence[], gt_operation[],  gt_trigger_point[],  gt_component[],
           gt_prod_rel_tool[].
Название: Re: ФМ для получения данных PP-заказа (заказов, разузлование)
Отправлено: Паганель от Март 30, 2011, 01:17:49 am
You are not allowed to view links. Register or Login
Ну и еще в качестве уточнения или улучшения, многие похоже забывают что операторы ABAP имеют синтаксис множественного применения, .т.е. этот же код можно было бы написать как:...

Ну кому как, мне так нагляднее и удобнее, кто как привык и «о вкусах не спорят»....

You are not allowed to view links. Register or Login
Что выглядит более приятно глазу. Ну или второй вариант

Как по мне, тоже имхо (см. выше, что о вкусах не спорят), так приятнее, а вообще, часто пишешь так, как тебе более читабельнее