Для работы с техническими местами существуют три функциональных модуля:
- BAPI_FUNCLOC_CREATE - Создать техническое место.
- BAPI_FUNCLOC_GETDETAIL - Прочитать данные технического места.
- BAPI_FUNCLOC_CHANGE - Изменить данные технического места.
В принципе использование функций простое, кроме одной мелочи, технические места ведутся в система с внутренней кодировкой и по этому в функции просмотра и изменения данных нужно передавать именно внутренний код технического места, а не его внешний идентификатор. Для этого нужно воспользоваться функциями конвертации:
- CONVERSION_EXIT_TPLNR_INPUT - Получить внутренний код по внешнему коду
- CONVERSION_EXIT_TPLNR_OUTPUT - Получить внешний код по внутреннему.
Пример чтения данных технического места
BAPI_FUNCLOC_GETDETAIL:
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:
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 - Код адресных данных, т.е. если есть адрес, то его надо сначала создать функциями создания адресов и сюда присвоить код адресных данных. Например если нужно присвоить адрес завода размещения технического места, то это можно сделать таким образом:
SELECT SINGLE adrnr INTO (ls_data_general-read_adrnr)
FROM t001w WHERE werks = p_site-werks_tr.
ls_data_specific-supfloc - Код вышестоящего технического места. Если место включено в иерархию технических мест, то сюда нужно присвоить именно внутренний код вышестоящего технического места.
Изменение данных технического места
BAPI_FUNCLOC_CHANGE:
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.