Автор Тема: Работа с техническими местами (BAPI_FUNCLOC_GETDETAIL, BAPI_FUNCLOC_CHANGE...)  (Прочитано 5203 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 762
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Для работы с техническими местами существуют три функциональных модуля:
  • BAPI_FUNCLOC_CREATE - Создать техническое место.
  • BAPI_FUNCLOC_GETDETAIL - Прочитать данные технического места.
  • BAPI_FUNCLOC_CHANGE - Изменить данные технического места.

В принципе использование функций простое, кроме одной мелочи, технические места ведутся в система с внутренней кодировкой и по этому в функции просмотра и изменения данных нужно передавать именно внутренний код технического места, а не его внешний идентификатор. Для этого нужно воспользоваться функциями конвертации:
  • CONVERSION_EXIT_TPLNR_INPUT - Получить внутренний код по внешнему коду
  • CONVERSION_EXIT_TPLNR_OUTPUT - Получить внешний код по внутреннему.

Пример чтения данных технического места BAPI_FUNCLOC_GETDETAIL:
Код: You are not allowed to view links. Register or Login
  DATA: l_tm_int LIKE bapi_itob_parms-funcloc_int,
        l_tm LIKE bapi_itob_parms-funcloc
        ls_data_general_exp LIKE bapi_itob,
        ls_data_specific_exp LIKE bapi_itob_fl_only.

  CLEAR: ps_return.
* Получить внутренне представление кода
  CALL FUNCTION 'CONVERSION_EXIT_TPLNR_INPUT'
       EXPORTING
            input     = l_tm
       IMPORTING
            output    = l_tm_int
       EXCEPTIONS
            not_found = 1
            OTHERS    = 2.

* Прочитать данные технического места
  CALL FUNCTION 'BAPI_FUNCLOC_GETDETAIL'
       EXPORTING
            functlocation     = l_tm_int
       IMPORTING
            data_general_exp  = ls_data_general_exp
            data_specific_exp = ls_data_specific_exp
            return            = ps_return.


Создание технического места BAPI_FUNCLOC_CREATE:
Код: You are not allowed to view links. Register or Login
  DATA: l_functlocation LIKE bapi_itob_parms-funcloc_int,
        l_funcloc LIKE bapi_itob_parms-funcloc,
        l_funcloc LIKE bapi_itob_parms-funcloc VALUE 'TEST',
        ls_data_general LIKE bapi_itob,
        ls_data_specific LIKE bapi_itob_fl_only,
        ls_data_general_exp LIKE bapi_itob,
        ls_data_specific_exp LIKE bapi_itob_fl_only.

* Завод планирующий ТОРО
   ls_data_general-planplant = space.
* Описание
   ls_data_general-descript = 'Просто техническое место'.
* Завод расположения тезнических объектов
   ls_data_general-maintplant = space.
* Адресные данные
   ls_data_general-read_adrnr = space.
* Монтаж ЕО запрещен
   ls_data_specific-eqinstall = space.
* Отдельный монтаж оборудования на техническом месте запрещен
   ls_data_specific-eqsingle = space.
* Позиция на вышестоящем техническом объекте
   ls_data_specific-posnr = space.

  CALL FUNCTION 'BAPI_FUNCLOC_CREATE'
       EXPORTING
            external_number   = l_funcloc
            data_general      = ls_data_general
            data_specific     = ls_data_specific
       IMPORTING
            functlocation     = l_functlocation
            data_general_exp  = ls_data_general_exp
            data_specific_exp = ls_data_specific_exp
            return            = ps_return.
  IF ps_return-type = space.
    COMMIT WORK AND WAIT.
*   Если место успешно создано, тогда подождать пока пройдут
*   все ообновления данных по таблицам БД
    IF sy-subrc = 0.
      CALL FUNCTION 'ENQUEUE_EIFLOT'
           EXPORTING
                tplnr          = l_functlocation
                _wait          = true
           EXCEPTIONS
                foreign_lock   = 1
                system_failure = 2
                OTHERS         = 3.
      IF sy-subrc = 0.
        CALL FUNCTION 'DEQUEUE_EIFLOT'
             EXPORTING
                  tplnr = l_functlocation.
      ENDIF.
    ELSE.
*     Ошибка выполнения COMMIT WORK!!!
      ps_return-type = 'E'.
    ENDIF.
  ELSE.
    ROLLBACK WORK.
  ENDIF.
l_functlocation - Буде возвращен внутренний код технического места, если место будет успешно создано
ls_data_general-read_adrnr - Код адресных данных, т.е. если есть адрес, то его надо сначала создать функциями создания адресов и сюда присвоить код адресных данных. Например если нужно присвоить адрес завода размещения технического места, то это можно сделать таким образом:
Код: You are not allowed to view links. Register or Login
      SELECT SINGLE adrnr INTO (ls_data_general-read_adrnr)
      FROM t001w WHERE werks = p_site-werks_tr.
ls_data_specific-supfloc - Код вышестоящего технического места. Если место включено в иерархию технических мест, то сюда нужно присвоить именно внутренний код вышестоящего технического места.

Изменение данных технического места BAPI_FUNCLOC_CHANGE:
Код: You are not allowed to view links. Register or Login
  DATA: l_functlocation LIKE  bapi_itob_parms-funcloc_int,
        l_funcloc LIKE bapi_itob_parms-funcloc VALUE 'TEST',
        ls_return LIKE bapiret2,
        ls_data_general LIKE bapi_itob,
        ls_data_generalx LIKE bapi_itobx,
        ls_data_specific LIKE bapi_itob_fl_only,
        ls_data_specificx LIKE bapi_itob_fl_onlyx,

        ls_data_general_exp LIKE bapi_itob,
        ls_data_specific_exp LIKE bapi_itob_fl_only.

* Внутренний код технического места
  CALL FUNCTION 'CONVERSION_EXIT_TPLNR_INPUT'
       EXPORTING
            input     = l_funcloc
       IMPORTING
            output    = l_functlocation
       EXCEPTIONS
            not_found = 1
            OTHERS    = 2.

* Прочитать данные технического места
  CALL FUNCTION 'BAPI_FUNCLOC_GETDETAIL'
       EXPORTING
            functlocation     = l_functlocation
       IMPORTING
            data_general_exp  = ls_data_general_exp
            data_specific_exp = ls_data_specific_exp
            return            = ls_return.
  CHECK ls_return-type = space.

  ls_data_general-objecttype = '3000000000'. "Технический тип
  ls_data_generalx-objecttype = 'X'.

* Изменить данные
  CALL FUNCTION 'BAPI_FUNCLOC_CHANGE'
       EXPORTING
            functlocation     = l_functlocation
            data_general      = ls_data_general
            data_generalx     = ls_data_generalx
            data_specific     = ls_data_specific
            data_specificx    = ls_data_specificx
       IMPORTING
            data_general_exp  = ls_data_general_exp
            data_specific_exp = ls_data_specific_exp
            return            = ls_return.

  IF ls_return-type = space. COMMIT WORK. ELSE. ROLLBACK WORK. ENDIF.