SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Функциональные модули или классы для работы с MM



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
klkuznetsov
Специалист
Специалист


Age: 48
Joined: 06 Aug 2010
Posts: 79
Location: Ukraine

PostPosted: Wed Dec 01, 2010 11:08 am    Post subject: Функциональные модули или классы для работы с MM Reply with quote

Уважаемые коллеги, подскажите пожалуйста где мне посмотреть список ФМ или глобальных классов для работы с материалами и их движениями.
А вообщем задача такова, нужно выбрать движения материалов за период по материалу, партии, складу. Сделать это нужно не написав (собственноручно) ни одного запроса в базу, т.е. используя стандартные ФМ’ы или стандартные объекты.
Заранее спасибо...
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 170
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Wed Dec 01, 2010 1:13 pm    Post subject: Reply with quote

Типа такого 'BAPI_GOODSMVT_GETITEMS' ?

Code:
*&---------------------------------------------------------------------*
*&      Form  read_matdoc
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_SRS_PLANT  text
*      -->P_DATE1  text
*      -->P_DATE2  text
*      -->P_XTWIC0100_BWART_EINL  text
*      -->P_I_ERROR  text
*----------------------------------------------------------------------*
FORM read_matdoc  tables   P_T_gm_head structure bapi2017_gm_head_02
                           P_T_gm_item structure bapi2017_gm_item_show
                           P_i_t_bapiret2 structure BAPIRET2
                  USING    P_SRS_PLANT
                           P_DATE1
                           P_DATE2
                           P_TWIC0100_BWART_EINL.


  DATA:  plant_ra      LIKE bapi2017_gm_plant_ra
                                            OCCURS 1 WITH HEADER LINE,
         pstng_date_ra LIKE bapi2017_gm_pstng_date_ra
                                            OCCURS 1 WITH HEADER LINE,
         move_type_ra  LIKE bapi2017_gm_move_type_ra
                                            OCCURS 1 WITH HEADER LINE.

  IF NOT p_srs_plant IS INITIAL.
    plant_ra-sign   = 'I'.
    plant_ra-option = 'EQ'.
    plant_ra-low    = p_srs_plant.
*   plant_ra-high   = pi_plant.
    APPEND plant_ra.
  ENDIF.


  IF NOT p_date1 IS INITIAL and
         p_date2 is initial.
    pstng_date_ra-sign   = 'I'.
    pstng_date_ra-option = 'EQ'.
    pstng_date_ra-low    = p_date1.
*   pstng_date_ra-high   = sy-datlo.
    APPEND pstng_date_ra.
  ENDIF.

  IF NOT p_date1 IS INITIAL and
     not p_date2 is initial.
    pstng_date_ra-sign   = 'I'.
    pstng_date_ra-option = 'BT'.
    pstng_date_ra-low    = p_date1.
    pstng_date_ra-high   = p_date2.
    APPEND pstng_date_ra.
  ENDIF.

  IF NOT P_TWIC0100_BWART_EINL IS INITIAL.
    move_type_ra-sign   = 'I'.
    move_type_ra-option = 'EQ'.
    move_type_ra-low    = P_TWIC0100_BWART_EINL.
    APPEND move_type_ra.
  ENDIF.

  CALL FUNCTION 'BAPI_GOODSMVT_GETITEMS'
    TABLES
      plant_ra        = plant_ra
      move_type_ra    = move_type_ra
      pstng_date_ra   = pstng_date_ra
      goodsmvt_header = P_T_gm_head
      goodsmvt_items  = P_T_gm_item
      return          = p_i_t_bapiret2.

ENDFORM.                    " read_matdoc

_________________
Молитва - это запрос разработчику на изменение кода программы.
Back to top
View user's profile Send private message Blog Visit poster's website
klkuznetsov
Специалист
Специалист


Age: 48
Joined: 06 Aug 2010
Posts: 79
Location: Ukraine

PostPosted: Wed Dec 01, 2010 2:32 pm    Post subject: Reply with quote

Да АВАР его знает... Может быть это и подойдет... Буду пробовать... Спасибо за наводку Smile
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Wed Dec 01, 2010 5:04 pm    Post subject: Reply with quote

Посмотрите логическую базу данных MRM.
_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
klkuznetsov
Специалист
Специалист


Age: 48
Joined: 06 Aug 2010
Posts: 79
Location: Ukraine

PostPosted: Thu Dec 02, 2010 10:15 am    Post subject: Reply with quote

Удав wrote:
Посмотрите логическую базу данных MRM.


К сожалению я не умею работать с логическими базами данных Sad
Вот то что посоветовал Vga, подходит мне, но слышал я что ЛБД работают значит1ельно быстрее, потому попробую и так и так, будем учиться работе с ЛБД Smile Кстати сразу же и вопрос, а можно ли использовать ЛБД не только в отчетах?
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Thu Dec 02, 2010 10:42 am    Post subject: Reply with quote

klkuznetsov wrote:
Кстати сразу же и вопрос, а можно ли использовать ЛБД не только в отчетах?


Можно

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
klkuznetsov
Специалист
Специалист


Age: 48
Joined: 06 Aug 2010
Posts: 79
Location: Ukraine

PostPosted: Fri Dec 03, 2010 1:35 pm    Post subject: Reply with quote

Мдя... я думал что будет быстрее... Что-то быстрее не работает, может я что-то не так делаю?
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Fri Dec 03, 2010 3:48 pm    Post subject: Reply with quote

klkuznetsov wrote:
Мдя... я думал что будет быстрее... Что-то быстрее не работает, может я что-то не так делаю?

Ну смотря что делаете Smile Приведите код.

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
klkuznetsov
Специалист
Специалист


Age: 48
Joined: 06 Aug 2010
Posts: 79
Location: Ukraine

PostPosted: Fri Dec 03, 2010 5:45 pm    Post subject: Reply with quote

Удав wrote:
klkuznetsov wrote:
Мдя... я думал что будет быстрее... Что-то быстрее не работает, может я что-то не так делаю?

Ну смотря что делаете Smile Приведите код.


Пытаюсь выбрать документы движения материалов за период, пока побеждает выборка с помощью запроса. Хотя нас начальство всегда тыкает мордой, что вы не используете стандартный функционал для данных выборок, в пример приводит ЛДБ и ФМ’ы. Начальство говорит, что стандарт работает быстрее чем наши кустарные запросы Smile Вот ниже приведен код выборки из ЛБД. То же самое самое сделано с помощью запроса SQL.

Code:
 *&---------------------------------------------------------------------*
*& Report  Z_XAXA
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  z_xaxa.
TABLES: mkpf, mseg.
"SELECT-OPTIONS S_CARR FOR SPFLI-CARRID.


TYPE-POOLS: rsds, rsfs, abap.

DATA: callback TYPE TABLE OF ldbcb,
      callback_wa LIKE LINE OF callback.

DATA: seltab TYPE TABLE OF rsparams,
      seltab_wa LIKE LINE OF seltab.


DATA: texpr TYPE rsds_texpr,
      fsel  TYPE rsfs_fields,
      fields like RSFS_STRUC OCCURS 10," WITH HEADER LINE,
      fields_wa TYPE RSFS_STRUC,
      fsel_wa  TYPE RSFS_TAB_FIELDS.

DATA: lc_mjahr TYPE mjahr,
      lc_budat TYPE budat,
      lc_mblnr TYPE mblnr,
      lc_charg TYPE CHARG_D,
      lc_vgart TYPE vgart.

SELECT-OPTIONS: s_mjahr FOR lc_mjahr,
                s_budat FOR lc_budat,
                s_mblnr FOR lc_mblnr,
                s_charg FOR lc_charg,
                s_vgart FOR lc_vgart.

*SELECT mseg~werks mseg~aufnr mseg~mjahr mseg~matnr mseg~bwart mseg~erfmg mseg~erfme mkpf~budat
*           mseg~dmbtr mseg~mblnr mseg~zeile mseg~menge mseg~meins mkpf~bktxt mkpf~bldat
*      FROM mseg
*      INNER JOIN mkpf ON mkpf~mblnr = mseg~mblnr
*      APPENDING CORRESPONDING FIELDS OF TABLE it_kalk
*      WHERE ( mseg~werks = p_werks )
*      AND ( mseg~mjahr = p_mjahr )
*      AND   mseg~kostl IN s_kostl AND mseg~bwart IN ('981', '982').

*CALLBACK_WA-LDBNODE     = 'SPFLI'.
*CALLBACK_WA-GET         = 'X'.
*CALLBACK_WA-GET_LATE    = 'X'.
*CALLBACK_WA-CB_PROG     = SY-REPID.
*CALLBACK_WA-CB_FORM     = 'CALLBACK_SPFLI'.
*APPEND CALLBACK_WA TO CALLBACK.
*
*CLEAR CALLBACK_WA.
*CALLBACK_WA-LDBNODE     = 'SFLIGHT'.
*CALLBACK_WA-GET         = 'X'.
*CALLBACK_WA-CB_PROG     = SY-REPID.
*CALLBACK_WA-CB_FORM     = 'CALLBACK_SFLIGHT'.
*APPEND CALLBACK_WA TO CALLBACK.

callback_wa-ldbnode     = 'MKPF'.
callback_wa-get         = 'X'.
callback_wa-get_late    = 'X'.
callback_wa-cb_prog     = sy-repid.
callback_wa-cb_form     = 'CALLBACK_MKPF'.
APPEND callback_wa TO callback.

CLEAR callback_wa.
callback_wa-ldbnode     = 'MSEG'.
callback_wa-get         = 'X'.
callback_wa-cb_prog     = sy-repid.
callback_wa-cb_form     = 'CALLBACK_MSEG'.
APPEND callback_wa TO callback.
**********************************************************************
seltab_wa-kind = 'S'.
"SELTAB_WA-SELNAME = 'CARRID'.
seltab_wa-selname = 'LN_MJAHR'.
LOOP AT s_mjahr.
  MOVE-CORRESPONDING s_mjahr TO seltab_wa.
  APPEND seltab_wa TO seltab.
ENDLOOP.
*
seltab_wa-kind = 'S'.
seltab_wa-selname = 'LN_BUDAT'.
LOOP AT s_mjahr.
  MOVE-CORRESPONDING s_budat TO seltab_wa.
  APPEND seltab_wa TO seltab.
ENDLOOP.

SELTAB_WA-KIND = 'S'.
SELTAB_WA-SELNAME = 'LN_MBLNR'.
LOOP AT S_MJAHR.
  MOVE-CORRESPONDING S_MBLNR TO SELTAB_WA.
  APPEND SELTAB_WA TO SELTAB.
ENDLOOP.

SELTAB_WA-KIND = 'S'.
SELTAB_WA-SELNAME = 'LN_CHARG'.
LOOP AT S_MJAHR.
  MOVE-CORRESPONDING S_MBLNR TO SELTAB_WA.
  APPEND SELTAB_WA TO SELTAB.
ENDLOOP.

SELTAB_WA-KIND = 'S'.
SELTAB_WA-SELNAME = 'LN_VGART'.
LOOP AT S_MJAHR.
  MOVE-CORRESPONDING S_MBLNR TO SELTAB_WA.
  APPEND SELTAB_WA TO SELTAB.
ENDLOOP.
**********************************************************************
*fields_wa-line = 'MBLNR'.
*APPEND fields_wa to fields.
**
*fields_wa = 'CHARG'.
*APPEND fields_wa to  fields.
**
*fields_wa = 'BWART'.
*APPEND fields_wa to  fields.
**
*fields_wa = 'MATNR'.
*APPEND fields_wa to  fields.
*
*fsel_wa-TABLENAME = 'MSEG'.
*fsel_wa-fields = fields.
*APPEND  fsel_wa to fsel.


**********************************************************************
CALL FUNCTION 'LDB_PROCESS'
  EXPORTING
    ldbname                     = 'LNM'
    variant                     = ' '
    expressions                 = texpr
    field_selection             = fsel
  TABLES
    callback                    = callback
    selections                  = seltab
  EXCEPTIONS
    ldb_not_reentrant           = 1
    ldb_incorrect               = 2
    ldb_already_running         = 3
    ldb_error                   = 4
    ldb_selections_error        = 5
    ldb_selections_not_accepted = 6
    variant_not_existent        = 7
    variant_obsolete            = 8
    variant_error               = 9
    free_selections_error       = 10
    callback_no_event           = 11
    callback_node_duplicate     = 12
    OTHERS                      = 13.

IF sy-subrc <0>NAME       text
*      -->WA         text
*      -->EVT        text
*      -->CHECK      text
*----------------------------------------------------------------------*
FORM callback_mkpf USING name  TYPE ldbn-ldbnode
                          wa    TYPE mkpf
                          evt   TYPE c
                          check TYPE c.

  CASE evt.
    WHEN 'G'.
      WRITE: / wa-mblnr, wa-budat.
      ULINE.
    WHEN 'L'.
      ULINE.
  ENDCASE.
ENDFORM.                    "CALLBACK_MKPF

*&---------------------------------------------------------------------*
*&      Form  CALLBACK_MSEG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->NAME       text
*      -->WA         text
*      -->EVT        text
*      -->CHECK      text
*----------------------------------------------------------------------*
FORM callback_mseg USING name  TYPE ldbn-ldbnode
                            wa    TYPE mseg
                            evt   TYPE c
                            check TYPE c.
  CASE evt.
    WHEN 'G'.
      WRITE: / wa-aufnr, wa-matnr, wa-mblnr.
      ULINE.
    WHEN 'L'.
      ULINE.
  ENDCASE.
ENDFORM.                    "CALLBACK_MSEG
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Mon Dec 06, 2010 11:50 am    Post subject: Reply with quote

Ну конкретно с документами материалов (MKPF+MSEG) вообще с каждой выборкой отдельно надо заниматься совместно с базисниками Smile

На самом деле использование ЛБД означает:
1.Для выборок по конкретным полям, указанным на экране выбора ЛБД существуют индексы, что ускоряет выборку по этим полям.
2.Производится проверка полномочий для каждой записи.

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.