ФМ для получения данных PP-заказа (заказов, разузлование)

Автор Паганель, Березень 29, 2011, 01:41:29 ДП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

Паганель

Очень удобная 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 .




Uukrul


   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[].


Паганель

Цитата: Uukrul  від Березень 29, 2011, 10:48:27 ПП
Ну и еще в качестве уточнения или улучшения, многие похоже забывают что операторы ABAP имеют синтаксис множественного применения, .т.е. этот же код можно было бы написать как:...

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

Цитата: Uukrul  від Березень 29, 2011, 10:48:27 ПП
Что выглядит более приятно глазу. Ну или второй вариант

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


SMF spam blocked by CleanTalk