Автор Тема: Работа с классификацией в системе  (Прочитано 71361 раз)

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

Оффлайн Uukrul

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

CLBPA - BAPIs Klassifizierung

Который содержит в себе следующие функции:
Код: You are not allowed to view links. Register or Login
                    "BAPI_OBJCL_CREATE
                    "BAPI_OBJCL_CHANGE
                    "BAPI_OBJCL_CONCATENATEKEY
                    "BAPI_OBJCL_DELETE
                    "BAPI_OBJCL_EXISTENCECHECK
                    "BAPI_OBJCL_GETDETAIL
                    "BAPI_OBJCL_GETOBJECTS
                    "BAPI_OBJCL_GETSTATUS
                    "BAPI_OBJCL_SPLITKEY
                    "BAPI_OBJCL_GETCLASSES
                    "BAPI_OBJCL_GET_KEY_OF_OBJECT
                    "BAPI_OBJCL_GET_OBJECT_OF_KEY
                    "BAPI_OBJCL_CHANGE_KEY
                    "BAPI_OBJCL_CREATE_KEY
                    "BAPI_OBJCL_EXISTENCECHECK_KEY
                    "BAPI_OBJCL_GETCLASSES_KEY
                    "BAPI_OBJCL_GETDETAIL_KEY
                    "BAPI_OBJCL_GETOBJECTS_KEY
                    "BAPI_OBJCL_GETSTATUS_KEY
                    "BAPI_OBJCL_DELETE_KEY
                    "BAPI_OBJCL_SPLITKEY_KEY
                    "BAPI_OBJCL_CONCATENATEKEY_KEY
                    "CLBPA_DISPLAY_ALLOWED_VALUES
                    "ALE_OBJCL_CREATE_KEY
                    "IDOC_INPUT_CLASSIFICATION_CREA

Мне пока всем этим хозяйством, пользоваться не доводилось, так сказать нужды не было  ::) пока. Но по мере востребования, примеры постараюсь выкладывать. Ну или если кто сам чего нароет, то может выкладывать.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Так сказать из последнего и наиболее часто используемого модуля BAPI_OBJCL_GETCLASSES. Полезного в нем не только то, что он читает класс, но так же может прочитать и значения признаков классификации объекта. В примере представлен вызов для чтения классификации CO-заказа.

Код: You are not allowed to view links. Register or Login
DATA: l_aufk LIKE aufk,
      l_count LIKE sy-tabix,
      l_lvalues TYPE tabelle,
      l_classtype_imp LIKE bapi1003_key-classtype,
      l_objectkey_imp LIKE bapi1003_key-object,
      lt_alloclist LIKE bapi1003_alloc_list OCCURS 1 WITH HEADER LINE,
      lt_allocvalueschar LIKE bapi1003_alloc_values_char
                              OCCURS 1 WITH HEADER LINE,
      lt_return LIKE bapiret2 OCCURS 1 WITH HEADER LINE.

cls_table: pt_anka.

SELECT SINGLE * INTO l_aufk
FROM aufk WHERE aufnr = 'Номер CO-заказа'.
IF sy-subrc <> 0. <заказ CO-не существует> ENDIF.

l_classtype_imp = '013'.
l_objectkey_imp = l_aufk-objnr.
l_lvalues = 'AUFK'.
CALL FUNCTION 'BAPI_OBJCL_GETCLASSES'
     EXPORTING
          objectkey_imp   = l_objectkey_imp
          objecttable_imp = l_lvalues
          classtype_imp   = l_classtype_imp
          read_valuations = 'X'
     TABLES
          alloclist       = lt_alloclist
          allocvalueschar = lt_allocvalueschar
          return          = lt_return.

READ TABLE lt_return WITH KEY type   = 'S'
                              id     = 'CL'
                              number = '741'.
IF sy-subrc = 0. <Классификация к заказу прочитана> ENDIF.

Оффлайн NachDenken

  • Newbie
  • *
  • Сообщений: 158
  • Репутация: +9/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
Так сказать из последнего и наиболее часто используемого модуля BAPI_OBJCL_GETCLASSES. Полезного в нем не только то, что он читает класс, но так же может прочитать и значения признаков классификации объекта. В примере представлен вызов для чтения классификации CO-заказа.
а вот названия классов партий тоже можно или не к этой классификации?
« Последнее редактирование: Май 21, 2008, 12:41:21 pm от Uukrul »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
а вот названия классов партий тоже можно или не к этой классификации?
Думаю можно... судя по всему группа функций общего назначения. Поиграюсь пример выложу.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Типа пришла зима, надо было этими ФМ-ками почитать классификацию партий. Ну что можно сказать, что таки работают
Код: You are not allowed to view links. Register or Login
TABLES: mcha.

PARAMETERS: p_matnr LIKE mcha-matnr,
            p_werks LIKE mcha-werks,
            p_charg LIKE mcha-charg.

DATA: l_objectkey LIKE bapi1003_key-object,
      l_classnum LIKE bapi1003_key-classnum,
      l_status LIKE bapi1003_key-status,
      l_standardclass LIKE bapi1003_key-stdclass.
DATA: lt_allocvaluesnum LIKE bapi1003_alloc_values_num
                             OCCURS 1 WITH HEADER LINE,
      lt_allocvalueschar LIKE bapi1003_alloc_values_char
                             OCCURS 1 WITH HEADER LINE,
      lt_allocvaluescurr LIKE bapi1003_alloc_values_curr
                             OCCURS 1 WITH HEADER LINE,
      lt_return LIKE bapiret2
                             OCCURS 1 WITH HEADER LINE.

****
DEFINE ext_to_int.
  call function 'CONVERSION_EXIT_ALPHA_INPUT'
       exporting
            input  = &1
       importing
            output = &2.
END-OF-DEFINITION.
****

* Имя класса партии значения которого хотим получить
l_classnum = 'BATCH_CLASS'.
* Сформировать ключ объекта партии
ext_to_int: p_matnr l_objectkey(18),
            p_werks l_objectkey+18(4),
            p_charg l_objectkey+22(10).
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
     EXPORTING
          objectkey        = l_objectkey
          objecttable      = 'MCHA'
          classnum         = l_classnum
          classtype        = '022'
          keydate          = sy-datum
          unvaluated_chars = ' '
          language         = sy-langu
     IMPORTING
          status           = l_status
          standardclass    = l_standardclass
     TABLES
          allocvaluesnum   = lt_allocvaluesnum
          allocvalueschar  = lt_allocvalueschar
          allocvaluescurr  = lt_allocvaluescurr
          return           = lt_return.

READ TABLE lt_return WITH KEY type = 'S'
                              id = 'CL'
                              number = '731'.
IF sy-subrc = 0. WRITE: / 'Класс считан!'. ENDIF.
Собственно говоря в таблицах признаки и значения для объекта...

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Репутация: +7/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Работа с классификацией в системе
« Ответ #5 : Февраль 08, 2009, 11:27:59 pm »
Работать то эти BAPI(особенно по чтению данных) работают, но на практике они применимы для небольшого количества вызовов в рамках одной программы.
Как часто это бывает у индусов, внутренние таблицы в функциях для внутреннего применения не очищаются.
Более того, внутренние таблицы не являются сортированными.
Как будет время побаловаться с SE30 - выложу примеры как для чтения данных классификации, так и для записи.
У меня получилась следующая оптимальная схема работы:
Чтение: напрямую из INOB + AUSP, если нужны текстовые значения из признаков - с помощью связки CAWN+CAWNT
Запись: через BAPI, для ускорения работы при большом объеме вводимых данных используется запуск ФМ в режиме STARTING NEW TASK ...PERFORMING ..

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Работа с классификацией в системе
« Ответ #6 : Февраль 08, 2009, 11:54:30 pm »
You are not allowed to view links. Register or Login
Работать то эти BAPI(особенно по чтению данных) работают, но на практике они применимы для небольшого количества вызовов в рамках одной программы.
Ну никто не спорит, практически любая BAPI по чтению данных будет медленнее, чем чтение данных из таблицы внутри своей программы, так же это относится и к BAPI по записи данных, хотя конечно запись на несколько порядков сложнее, но в принципе тоже реализуема, хотя конечно вероятность повредить данные при прямой записи очень большая и можно легко отгрести от гнезда, за такие вещи  ::), что касается вообще BAPI то конечно все зависит от требований, если нет массовой обработки данных, т.е. это диалоговая транзакция, то тут все равно основное время занимает ожидание ввода от пользователя, а BAPI это удобно, но если вам надо пройтись по всем  классам, то... SELECT это ваш инструмент.

PS: Результаты сравнений производительности, хотелось бы конечно на посмотреть... думаю информация к размышлению будет полезная, да и тема уже есть подходящая You are not allowed to view links. Register or Login (Оптимизация ABAP), так что будет время, ждем-с примеров.

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Репутация: +7/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Работа с классификацией в системе
« Ответ #7 : Февраль 10, 2009, 05:24:49 pm »
Ну вот и результаты:
Чтение 1500 классификаций:
1. через BAPI ~ 20 с.
2. через SELECT из INOB + AUSP + CAWN + CAWNT ~6 c.
Изменение 190 классификаций партий через BAPI_OBJCL_CHANGE:
1. В цикле - 730 с.
2. В цикле с использованием STARTING NEW TASK в синхронном режиме с PERFORMING NEW TASK(количество процессов для классификации - 1) - 760 с.
3. В цикле с использованием STARTING NEW TASK в синхронном режиме с PERFORMING NEW TASK(количество процессов для классификации - 5) - 260 с.

ЗЫ: Как файлы измерений выкладывать - через файлообменники?
« Последнее редактирование: Февраль 10, 2009, 05:31:55 pm от Удав »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Работа с классификацией в системе
« Ответ #8 : Февраль 10, 2009, 05:43:47 pm »
You are not allowed to view links. Register or Login
ЗЫ: Как файлы измерений выкладывать - через файлообменники?
Не понял вопрос... имеется в виду как прицепить файл к сообщению?

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Репутация: +7/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Работа с классификацией в системе
« Ответ #9 : Февраль 10, 2009, 05:55:11 pm »
Ну да :)

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Работа с классификацией в системе
« Ответ #10 : Февраль 10, 2009, 06:05:06 pm »
You are not allowed to view links. Register or Login
Ну да :)
Ну тут все просто... мышаком клик в поле, дополнительный опции (выделено красным), дальше или руками или кнопка обзор для выбора пути к вложению. Если вложений несколько тогда мышкой по ссылке "Вложения", выделено черным, будут добавляться поля ввода. Пока можно 20 вложений, размером кажется не более 2 мб на один файл.

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Репутация: +7/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Работа с классификацией в системе
« Ответ #11 : Февраль 10, 2009, 07:33:22 pm »
Результат SE30 по чтению классификации:
а) через BAPI (READ_BAPI...),
б) через SELECT (READ_AUSP)
в)по изменению классификации через BAPI(SAVE_BAPI...). Нужно заметить, что для очистки внутренних таблиц перед BAPI_OBJCL_CHANGE вызывается ФМ VB_INIT. Без него время выполнения было бы значительно хуже на большом количестве изменяемых классификаций.
« Последнее редактирование: Февраль 10, 2009, 07:38:13 pm от Удав »

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Работа с классификацией в системе
« Ответ #12 : Август 31, 2010, 12:21:02 am »
You are not allowed to view links. Register or Login
Результат SE30 по чтению классификации:
а) через BAPI (READ_BAPI...),
б) через SELECT (READ_AUSP)
в)по изменению классификации через BAPI(SAVE_BAPI...). Нужно заметить, что для очистки внутренних таблиц перед BAPI_OBJCL_CHANGE вызывается ФМ VB_INIT. Без него время выполнения было бы значительно хуже на большом количестве изменяемых классификаций.


Если не сложно, можно примеры выложить
 save_bapi_head-44 партии.htm (10.96 Кб - загружено 40 раз.)
 SAVE_BAPI-44 партии.htm (413.75 Кб - загружено 99 раз.)
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Работа с классификацией в системе
« Ответ #13 : Сентябрь 06, 2010, 02:01:31 pm »
Цитата: Uukrul  link=topic=170.msg2411#msg2411 date=1231757741
Типа пришла зима, надо было этими ФМ-ками почитать классификацию партий. Ну что можно сказать, что таки работают
Код: You are not allowed to view links. Register or Login
TABLES: mcha.

PARAMETERS: p_matnr LIKE mcha-matnr,
            p_werks LIKE mcha-werks,
            p_charg LIKE mcha-charg.

DATA: l_objectkey LIKE bapi1003_key-object,
      l_classnum LIKE bapi1003_key-classnum,
      l_status LIKE bapi1003_key-status,
      l_standardclass LIKE bapi1003_key-stdclass.
DATA: lt_allocvaluesnum LIKE bapi1003_alloc_values_num
                             OCCURS 1 WITH HEADER LINE,
      lt_allocvalueschar LIKE bapi1003_alloc_values_char
                             OCCURS 1 WITH HEADER LINE,
      lt_allocvaluescurr LIKE bapi1003_alloc_values_curr
                             OCCURS 1 WITH HEADER LINE,
      lt_return LIKE bapiret2
                             OCCURS 1 WITH HEADER LINE.

****
DEFINE ext_to_int.
  call function 'CONVERSION_EXIT_ALPHA_INPUT'
       exporting
            input  = &1
       importing
            output = &2.
END-OF-DEFINITION.
****

* Имя класса партии значения которого хотим получить
l_classnum = 'BATCH_CLASS'.
* Сформировать ключ объекта партии
ext_to_int: p_matnr l_objectkey(18),
            p_werks l_objectkey+18(4),
            p_charg l_objectkey+22(10).
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
     EXPORTING
          objectkey        = l_objectkey
          objecttable      = 'MCHA'
          classnum         = l_classnum
          classtype        = '022'
          keydate          = sy-datum
          unvaluated_chars = ' '
          language         = sy-langu
     IMPORTING
          status           = l_status
          standardclass    = l_standardclass
     TABLES
          allocvaluesnum   = lt_allocvaluesnum
          allocvalueschar  = lt_allocvalueschar
          allocvaluescurr  = lt_allocvaluescurr
          return           = lt_return.

READ TABLE lt_return WITH KEY type = 'S'
                              id = 'CL'
                              number = '731'.
IF sy-subrc = 0. WRITE: / 'Класс считан!'. ENDIF.
Собственно говоря в таблицах признаки и значения для объекта...

Небольшое уточнение, следует учитывать уровень партии, таблица TCUCH
" Определяем уровень партии (OMCT) spro- Общая логистика - Управление партиями - Уровень партии"

У меня например уровень партии "1 - Партия однозначно ведется на уровне материала", а в коде привязывается к уровню партии, как то не кошерно  ;) (сказал же настроить на уровне завода, а мои настройщики настроили, по крайней мере в тестовом манданте.... ) .....
и так, код выглядит следующим образом (ссори, переделывать не стал, выдернул с BADi, думаю кому надо ls_ximseg-matnr  поменяют на p_matnr)

Код: You are not allowed to view links. Register or Login
DATA: l_objectkey TYPE bapi1003_key-object,
        l_classnum TYPE bapi1003_key-classnum,
        l_status TYPE bapi1003_key-status,
        l_standardclass TYPE bapi1003_key-stdclass.
  DATA: lt_allocvaluesnum TYPE STANDARD TABLE OF bapi1003_alloc_values_num,
        lt_allocvalueschar TYPE STANDARD TABLE OF bapi1003_alloc_values_char,
        ls_allocvalueschar TYPE bapi1003_alloc_values_char,
        lt_allocvaluescurr TYPE STANDARD TABLE OF bapi1003_alloc_values_curr,
        lt_return TYPE STANDARD TABLE OF bapiret2.
  DATA: ls_ximseg TYPE LINE OF shp_imsegvb_t.
  DATA: ls_ausp TYPE ausp.

************************************************
  DEFINE ext_to_int.
    call function 'CONVERSION_EXIT_ALPHA_INPUT'
      exporting
        input  = &1
      importing
        output = &2.
  END-OF-DEFINITION.
************************************************

  l_classnum = 'ZMM_BATCH_SEARCH'.

  " Определяем уровень партии (OMCT) spro- Общая логистика - Управление партиями - Уровень партии
  " 0 - Партии однозначно ведутся на уровне завода
  " 1 - Партия однозначно ведется на уровне материала
  " 2 - Партия однозначно ведется на уровне манданта

  DATA: l_kzdch TYPE kzdch.
  SELECT SINGLE kzdch INTO l_kzdch from TCUCH.

  LOOP AT ct_ximseg INTO ls_ximseg.

    " Сформировать ключ объекта материала
    " !!! Внимание, зависит от уровня партии !!!*
    CASE l_kzdch .
      WHEN 0. " 0 - Партии однозначно ведутся на уровне завода
        ext_to_int: ls_ximseg-matnr l_objectkey(18),
                    ls_ximseg-werks l_objectkey+18(4),
                    ls_ximseg-charg l_objectkey+18(10).
      WHEN 1. " 1 - Партия однозначно ведется на уровне материала
           ext_to_int: ls_ximseg-matnr l_objectkey(18),
*                ls_ximseg-werks l_objectkey+18(4),
                 ls_ximseg-charg l_objectkey+18(10).
      WHEN 2. " 2 - Партия однозначно ведется на уровне манданта
           ext_to_int: ls_ximseg-charg l_objectkey+18.
    ENDCASE.

    CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
      EXPORTING
        objectkey        = l_objectkey
        " objecttable      = 'MCHA' " При уровне партии на уровне мандата
        objecttable      = 'MCH1'  " Партии (при межзаводском управлении партиями)
        classnum         = l_classnum
        classtype        = '023'
        keydate          = sy-datum
        unvaluated_chars = ' '
        language         = sy-langu
      IMPORTING
        status           = l_status
        standardclass    = l_standardclass
      TABLES
        allocvaluesnum   = lt_allocvaluesnum
        allocvalueschar  = lt_allocvalueschar
        allocvaluescurr  = lt_allocvaluescurr
        return           = lt_return."lt_return.
" ..................
« Последнее редактирование: Сентябрь 06, 2010, 02:08:31 pm от Паганель »
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Работа с классификацией в системе
« Ответ #14 : Сентябрь 06, 2010, 03:08:09 pm »
Дополнительно, как я понимаю, при межзаводском уровне партий  вместо MCHA надо использовать табличку MCH1, т.е.
   0 -   Партии однозначно ведутся на уровне завода - таблица MCH1
   1 -   Партия однозначно ведется на уровне материала - таблица MCHA
   2 -   Партия однозначно ведется на уровне манданта - вот тут не ясно, скорее всего  MCHA?

что то не вьяжется ....  при "1 -   Партия однозначно ведется на уровне материала" выборку надо делать с MCH1.
« Последнее редактирование: Сентябрь 06, 2010, 03:21:47 pm от Паганель »
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Работа с классификацией в системе
« Ответ #15 : Сентябрь 14, 2010, 11:35:40 am »
You are not allowed to view links. Register or Login
Дополнительно, как я понимаю, при межзаводском уровне партий  вместо MCHA надо использовать табличку MCH1, т.е.
   0 -   Партии однозначно ведутся на уровне завода - таблица MCH1
   1 -   Партия однозначно ведется на уровне материала - таблица MCHA
   2 -   Партия однозначно ведется на уровне манданта - вот тут не ясно, скорее всего  MCHA?

что то не вьяжется ....  при "1 -   Партия однозначно ведется на уровне материала" выборку надо делать с MCH1.

Немного не правильно, разберусь - отпишусь.

А для програм лучше использовать ФМ "VB_BATCH_DEFINITION"
Код: You are not allowed to view links. Register or Login
DATA: gv_batch_level        LIKE tcuch-kzdch.         "Batch-Level

CALL FUNCTION 'VB_BATCH_DEFINITION'
        IMPORTING
          kzdch = gv_batch_level.
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Работа с классификацией в системе
« Ответ #16 : Сентябрь 14, 2010, 12:46:54 pm »
You are not allowed to view links. Register or Login
Дополнительно, как я понимаю, при межзаводском уровне партий  вместо MCHA надо использовать табличку MCH1, т.е.
   0 -   Партии однозначно ведутся на уровне завода - таблица MCH1
   1 -   Партия однозначно ведется на уровне материала - таблица MCHA
   2 -   Партия однозначно ведется на уровне манданта - вот тут не ясно, скорее всего  MCHA?

что то не вьяжется ....  при "1 -   Партия однозначно ведется на уровне материала" выборку надо делать с MCH1.

Разобрался
   0 -   Партии однозначно ведутся на уровне завода - таблица MCHA
   1 -   Партия однозначно ведется на уровне материала - таблица MCHA
   2 -   Партия однозначно ведется на уровне манданта - вот тут не ясно, скорее всего  MCH1

P.S. Меня ввело в заблуждение название таблички MCH1 - "Партии (при межзаводском управлении партиями)", т.е. подразумевался уровень материала или манданта, не данные партии для завода
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Работа с классификацией в системе
« Ответ #17 : Сентябрь 14, 2010, 01:00:12 pm »
Как пример выборки и использования функции You are not allowed to view links. Register or Login
Цитировать
REPORT  zmm_test.


SELECTION-SCREEN BEGIN OF BLOCK 01.
PARAMETERS: p_matnr TYPE matnr.
PARAMETERS: p_charg TYPE charg_d.
PARAMETERS: p_werks TYPE werks_d.
SELECTION-SCREEN END OF BLOCK 01.


* 0 -   Партии однозначно ведутся на уровне завода
* 1 -   Партия однозначно ведется на уровне материала
* 2 -   Партия однозначно ведется на уровне манданта

CONSTANTS: client                 LIKE tcuch-kzdch VALUE '2',
           material               LIKE tcuch-kzdch VALUE '1',
           plant                  LIKE tcuch-kzdch VALUE '0'.

DATA: gv_batch_level        LIKE tcuch-kzdch.         "Batch-Level

DATA: gt_mch1 TYPE STANDARD TABLE OF mch1 WITH HEADER LINE.
DATA: gt_mcha TYPE STANDARD TABLE OF mcha WITH HEADER LINE.

START-OF-SELECTION.

  CALL FUNCTION 'VB_BATCH_DEFINITION'
    IMPORTING
      kzdch = gv_batch_level.


  CASE gv_batch_level.
    WHEN client.
      SELECT  * FROM mch1
        INTO CORRESPONDING FIELDS OF TABLE gt_mch1
        WHERE
         charg EQ p_charg.
    WHEN material.
      SELECT  * FROM mch1
          INTO CORRESPONDING FIELDS OF TABLE gt_mch1
          WHERE
                matnr EQ p_matnr
                AND charg EQ p_charg.
    WHEN plant.
      SELECT  * FROM mcha
        INTO CORRESPONDING FIELDS OF TABLE gt_mcha
        WHERE
            matnr EQ p_matnr AND
            charg EQ p_charg AND
            werks EQ p_werks.
  ENDCASE.
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Работа с классификацией в системе
« Ответ #18 : Сентябрь 27, 2010, 12:03:16 pm »
Небольшой примерчик использования BAPI_OBJCL_CHANGE
и ФМ для получения уровня партии и таблиц VB_BATCH_DEFINITION.

Оформлен как FORM fill_classifications, на вход передаются 2 структуры (данные позиции материала, в т.ч. партия и материал, и данные значений признаков).


Код: You are not allowed to view links. Register or Login
" Значения признаков
DATA: BEGIN OF items.
  DATA: dhsdat  TYPE string.
  DATA: lifnr type lifnr.
DATA: END OF items.

DATA: gt_mseg TYPE STANDARD TABLE OF mseg WITH HEADER LINE.

DATA: l_mseg type mseg.


START-OF-SELECTION.

items-dhsdat = '01.10.2010'.

SELECT * FROM mseg
INTO CORRESPONDING FIELDS OF TABLE gt_mseg
WHERE mblnr = '4900000591'


LOOP AT gt_mseg INTO ls_mseg.
    PERFORM fill_classifications USING ls_mseg  items.
ENDLOOP.


FORM do_fill_classifications
  USING rs_mseg LIKE mseg
        rs_items type items.

DATA: git_bapi1003 TYPE TABLE OF bapi1003_alloc_values_num,
      git_values_char TYPE TABLE OF bapi1003_alloc_values_char,
      git_values_curr TYPE TABLE OF bapi1003_alloc_values_curr,
      git_bapiret2    TYPE TABLE OF bapiret2,
      ls_bapiret2           TYPE bapiret2.

DATA: gs_bapi1003     TYPE bapi1003_alloc_values_num,
      gs_values_char  TYPE bapi1003_alloc_values_char,
      gs_values_curr  TYPE bapi1003_alloc_values_char,
      gc_flag_x(1)       TYPE c VALUE 'X'.

DATA: l_objectkey TYPE bapi1003_key-object.

* CHARACT  Имя признака
* VALUE_CHAR  Значение признака
* VALUE_NEUTRAL  Значение признака
* CHARACT_DESCR  Название признака

" Определяем уровень партии (тр. OMCT) spro- Общая логистика - Управление партиями - Уровень партии
" 0 - Партии однозначно ведутся на уровне завода - MCHA
" 1 - Партия однозначно ведется на уровне материала - MCH1
" 2 - Партия однозначно ведется на уровне манданта - MCH1

" KZDCH Уровень TCUCH-KZDCH
" KLART Класс TCLA-KLART
" OBTAB Таблица TCLT-OBTAB

DATA: l_objecttable  TYPE bapi1003_key-objecttable. " OBTAB  Таблица TCLT-OBTAB
DATA: gv_batch_level LIKE tcuch-kzdch.         "Batch-Level
DATA: classtype TYPE tcla-klart.

CALL FUNCTION 'VB_BATCH_DEFINITION'
        IMPORTING
          kzdch = gv_batch_level
          klart = classtype
          obtab = l_objecttable.

 CASE gv_batch_level.
  WHEN 0.
    "l_objecttable = 'MCHA'.
    ext_to_int:     rs_mseg-matnr l_objectkey(18),
                    rs_mseg-werks l_objectkey+18(4),
                    rs_mseg-charg l_objectkey+18(10).

  WHEN 1.
      "l_objecttable = 'MCH1'.
      ext_to_int:      rs_mseg-matnr l_objectkey(18),
                       rs_mseg-charg l_objectkey+18(10).

  WHEN 2.
      "l_objecttable = 'MCH1'.
      ext_to_int: rs_mseg-charg l_objectkey+18.
 ENDCASE.


 REFRESH git_values_char.

  gs_values_char-charact = 'ZMM_BATH_DHSDAT'.
  gs_values_char-value_neutral = rs_items-dhsdat.
  APPEND gs_values_char TO git_values_char.

  gs_values_char-charact = 'ZMM_LIFNR'.
  gs_values_char-value_neutral = rs_items-lifnr.
  APPEND gs_values_char TO git_values_char.


 APPEND gs_values_char TO git_values_char.

CALL FUNCTION 'BAPI_OBJCL_CHANGE'
  EXPORTING
    objectkey                = l_objectkey
    objecttable              = l_objecttable  " MCHA или  MCH1
    classnum                 = 'ZMM_BATCH_SEARCH'  "Class Number
    classtype                =  classtype         " 022, 023
*   STATUS                   = '1'
*   STANDARDCLASS         =
*   CHANGENUMBER           =
*   KEYDATE                    = SY-DATUM
*   NO_DEFAULT_VALUES   = ' '
* IMPORTING
*   CLASSIF_STATUS       =
  TABLES
    allocvaluesnumnew       = git_bapi1003
    allocvaluescharnew      = git_values_char
    allocvaluescurrnew      = git_values_curr
    return                  = git_bapiret2.

IF sy-subrc NE 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.


CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
 EXPORTING
   wait          = 'X'
 IMPORTING
   return        = ls_bapiret2.


ENDFORM.                    " DO_CHANGE_CHARACTERISIC
« Последнее редактирование: Сентябрь 27, 2010, 12:08:21 pm от Паганель »
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн nick_papkov

  • Newbie
  • *
  • Сообщений: 5
  • Репутация: +0/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Работа с классификацией в системе
« Ответ #19 : Сентябрь 15, 2013, 02:42:53 am »
You are not allowed to view links. Register or Login
Ну вот и результаты:
Чтение 1500 классификаций:
1. через BAPI ~ 20 с.
2. через SELECT из INOB + AUSP + CAWN + CAWNT ~6 c.
Изменение 190 классификаций партий через BAPI_OBJCL_CHANGE:
1. В цикле - 730 с.
2. В цикле с использованием STARTING NEW TASK в синхронном режиме с PERFORMING NEW TASK(количество процессов для классификации - 1) - 760 с.
3. В цикле с использованием STARTING NEW TASK в синхронном режиме с PERFORMING NEW TASK(количество процессов для классификации - 5) - 260 с.

ЗЫ: Как файлы измерений выкладывать - через файлообменники?

Последовательность INOB + AUSP + CAWN + CAWNT не всегда правильно сработает. Там есть один подводный камень. Правильнее последовательность INOB + AUSP + KSSK + KSML, и на основании значений 2 столбцов из KSML тащить уже CAWN + CAWNT. BAPI этот момент учитывает, вы нет. Соответственно и результат тестирования будет другим.

Оффлайн nick_papkov

  • Newbie
  • *
  • Сообщений: 5
  • Репутация: +0/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Работа с классификацией в системе
« Ответ #20 : Сентябрь 15, 2013, 02:49:20 am »
You are not allowed to view links. Register or Login
Небольшой примерчик использования BAPI_OBJCL_CHANGE
и ФМ для получения уровня партии и таблиц VB_BATCH_DEFINITION.

Оформлен как FORM fill_classifications, на вход передаются 2 структуры (данные позиции материала, в т.ч. партия и материал, и данные значений признаков).


Код: You are not allowed to view links. Register or Login
" Значения признаков
DATA: BEGIN OF items.
  DATA: dhsdat  TYPE string.
  DATA: lifnr type lifnr.
DATA: END OF items.

DATA: gt_mseg TYPE STANDARD TABLE OF mseg WITH HEADER LINE.

DATA: l_mseg type mseg.


START-OF-SELECTION.

items-dhsdat = '01.10.2010'.

SELECT * FROM mseg
INTO CORRESPONDING FIELDS OF TABLE gt_mseg
WHERE mblnr = '4900000591'


LOOP AT gt_mseg INTO ls_mseg.
    PERFORM fill_classifications USING ls_mseg  items.
ENDLOOP.


FORM do_fill_classifications
  USING rs_mseg LIKE mseg
        rs_items type items.

DATA: git_bapi1003 TYPE TABLE OF bapi1003_alloc_values_num,
      git_values_char TYPE TABLE OF bapi1003_alloc_values_char,
      git_values_curr TYPE TABLE OF bapi1003_alloc_values_curr,
      git_bapiret2    TYPE TABLE OF bapiret2,
      ls_bapiret2           TYPE bapiret2.

DATA: gs_bapi1003     TYPE bapi1003_alloc_values_num,
      gs_values_char  TYPE bapi1003_alloc_values_char,
      gs_values_curr  TYPE bapi1003_alloc_values_char,
      gc_flag_x(1)       TYPE c VALUE 'X'.

DATA: l_objectkey TYPE bapi1003_key-object.

* CHARACT  Имя признака
* VALUE_CHAR  Значение признака
* VALUE_NEUTRAL  Значение признака
* CHARACT_DESCR  Название признака

" Определяем уровень партии (тр. OMCT) spro- Общая логистика - Управление партиями - Уровень партии
" 0 - Партии однозначно ведутся на уровне завода - MCHA
" 1 - Партия однозначно ведется на уровне материала - MCH1
" 2 - Партия однозначно ведется на уровне манданта - MCH1

" KZDCH Уровень TCUCH-KZDCH
" KLART Класс TCLA-KLART
" OBTAB Таблица TCLT-OBTAB

DATA: l_objecttable  TYPE bapi1003_key-objecttable. " OBTAB  Таблица TCLT-OBTAB
DATA: gv_batch_level LIKE tcuch-kzdch.         "Batch-Level
DATA: classtype TYPE tcla-klart.

CALL FUNCTION 'VB_BATCH_DEFINITION'
        IMPORTING
          kzdch = gv_batch_level
          klart = classtype
          obtab = l_objecttable.

 CASE gv_batch_level.
  WHEN 0.
    "l_objecttable = 'MCHA'.
    ext_to_int:     rs_mseg-matnr l_objectkey(18),
                    rs_mseg-werks l_objectkey+18(4),
                    rs_mseg-charg l_objectkey+18(10).

  WHEN 1.
      "l_objecttable = 'MCH1'.
      ext_to_int:      rs_mseg-matnr l_objectkey(18),
                       rs_mseg-charg l_objectkey+18(10).

  WHEN 2.
      "l_objecttable = 'MCH1'.
      ext_to_int: rs_mseg-charg l_objectkey+18.
 ENDCASE.


 REFRESH git_values_char.

  gs_values_char-charact = 'ZMM_BATH_DHSDAT'.
  gs_values_char-value_neutral = rs_items-dhsdat.
  APPEND gs_values_char TO git_values_char.

  gs_values_char-charact = 'ZMM_LIFNR'.
  gs_values_char-value_neutral = rs_items-lifnr.
  APPEND gs_values_char TO git_values_char.


 APPEND gs_values_char TO git_values_char.

CALL FUNCTION 'BAPI_OBJCL_CHANGE'
  EXPORTING
    objectkey                = l_objectkey
    objecttable              = l_objecttable  " MCHA или  MCH1
    classnum                 = 'ZMM_BATCH_SEARCH'  "Class Number
    classtype                =  classtype         " 022, 023
*   STATUS                   = '1'
*   STANDARDCLASS         =
*   CHANGENUMBER           =
*   KEYDATE                    = SY-DATUM
*   NO_DEFAULT_VALUES   = ' '
* IMPORTING
*   CLASSIF_STATUS       =
  TABLES
    allocvaluesnumnew       = git_bapi1003
    allocvaluescharnew      = git_values_char
    allocvaluescurrnew      = git_values_curr
    return                  = git_bapiret2.

IF sy-subrc NE 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.


CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
 EXPORTING
   wait          = 'X'
 IMPORTING
   return        = ls_bapiret2.


ENDFORM.                    " DO_CHANGE_CHARACTERISIC

А чем вас не устроил VB_CHANGE_BATCH ? Он тоже позволяет классифицировать партию. Более того, у вас каждая партия обрабатывается отдельным LUW, а VB_CHANGE_BATCH позволяет запихнуть все обновления в один LUW.
« Последнее редактирование: Сентябрь 15, 2013, 02:54:47 am от nick_papkov »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Работа с классификацией в системе
« Ответ #21 : Сентябрь 15, 2013, 10:27:01 am »
You are not allowed to view links. Register or Login
А чем вас не устроил VB_CHANGE_BATCH ? Он тоже позволяет классифицировать партию. Более того, у вас каждая партия обрабатывается отдельным LUW, а VB_CHANGE_BATCH позволяет запихнуть все обновления в один LUW.
Ну вообще-то это разные функции, приведенная в качестве примера BAPI_OBJCL_CHANGE глобальная BAPI для изменения классификации любых объектов, а вот это VB_CHANGE_BATCH работает только с партиями, а тема называлась "Работа с классификацией в системе" без привязки к объекту классификации.

Оффлайн nick_papkov

  • Newbie
  • *
  • Сообщений: 5
  • Репутация: +0/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Работа с классификацией в системе
« Ответ #22 : Сентябрь 15, 2013, 03:31:27 pm »
You are not allowed to view links. Register or Login
Ну вообще-то это разные функции, приведенная в качестве примера BAPI_OBJCL_CHANGE глобальная BAPI для изменения классификации любых объектов, а вот это VB_CHANGE_BATCH работает только с партиями, а тема называлась "Работа с классификацией в системе" без привязки к объекту классификации.

Я не оспариваю, что BAPI_OBJCL_CHANGE - это универсальный инструмент на все случаи жизни :-). Но гайки можно закручивать как разводным ключом, так и ключом определенного размера под конкретную гайку :-). И в хозяйстве хорошего мастера есть и тот, и другой ключ. Поэтому и стоит упомянуть, что в частном случае можно использовать специализированные non-BAPI ФМ, если этого требует постановка задачи. Но вам как adminу виднее стоит это упоминать или нет.

Оффлайн nick_papkov

  • Newbie
  • *
  • Сообщений: 5
  • Репутация: +0/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Работа с классификацией в системе
« Ответ #23 : Сентябрь 15, 2013, 03:46:42 pm »
You are not allowed to view links. Register or Login
В общем для работы с классификацией в системе написано довольно много всяких функций, полезных и местами не очень, но как мне кажется самым кошерным в данном случае является группа функций:

CLBPA - BAPIs Klassifizierung

Который содержит в себе следующие функции:
Код: You are not allowed to view links. Register or Login
                    "BAPI_OBJCL_CREATE
                    "BAPI_OBJCL_CHANGE
                    "BAPI_OBJCL_CONCATENATEKEY
                    "BAPI_OBJCL_DELETE
                    "BAPI_OBJCL_EXISTENCECHECK
                    "BAPI_OBJCL_GETDETAIL
                    "BAPI_OBJCL_GETOBJECTS
                    "BAPI_OBJCL_GETSTATUS
                    "BAPI_OBJCL_SPLITKEY
                    "BAPI_OBJCL_GETCLASSES
                    "BAPI_OBJCL_GET_KEY_OF_OBJECT
                    "BAPI_OBJCL_GET_OBJECT_OF_KEY
                    "BAPI_OBJCL_CHANGE_KEY
                    "BAPI_OBJCL_CREATE_KEY
                    "BAPI_OBJCL_EXISTENCECHECK_KEY
                    "BAPI_OBJCL_GETCLASSES_KEY
                    "BAPI_OBJCL_GETDETAIL_KEY
                    "BAPI_OBJCL_GETOBJECTS_KEY
                    "BAPI_OBJCL_GETSTATUS_KEY
                    "BAPI_OBJCL_DELETE_KEY
                    "BAPI_OBJCL_SPLITKEY_KEY
                    "BAPI_OBJCL_CONCATENATEKEY_KEY
                    "CLBPA_DISPLAY_ALLOWED_VALUES
                    "ALE_OBJCL_CREATE_KEY
                    "IDOC_INPUT_CLASSIFICATION_CREA

Мне пока всем этим хозяйством, пользоваться не доводилось, так сказать нужды не было  ::) пока. Но по мере востребования, примеры постараюсь выкладывать. Ну или если кто сам чего нароет, то может выкладывать.

Есть еще одна полезная функция CLAF_CLASSIFICATION_OF_OBJECTS. Позволяет считывать классификацию любого объекта при чем в зависимости от одного входного параметра выдает либо значение, либо код значения в случае ведения справочника данных. Более того по сравнению с BAPI_OBJCL_GETDETAIL позволяет сразу получить список заранее указанных признаков класса, а не все.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Работа с классификацией в системе
« Ответ #24 : Сентябрь 16, 2013, 11:33:20 am »
You are not allowed to view links. Register or Login
Поэтому и стоит упомянуть, что в частном случае можно использовать специализированные non-BAPI ФМ, если этого требует постановка задачи. Но вам как adminу виднее стоит это упоминать или нет.
Я не возражаю, просто предлагаю отдельно сделать тему где расписать использование этого ФМ: VB_CHANGE_BATCH на каком-то примере. Как в прочем и CLAF_CLASSIFICATION_OF_OBJECTS  8)

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Репутация: +7/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Работа с классификацией в системе
« Ответ #25 : Октябрь 04, 2014, 01:04:25 pm »
You are not allowed to view links. Register or Login
Последовательность INOB + AUSP + CAWN + CAWNT не всегда правильно сработает. Там есть один подводный камень. Правильнее последовательность INOB + AUSP + KSSK + KSML, и на основании значений 2 столбцов из KSML тащить уже CAWN + CAWNT. BAPI этот момент учитывает, вы нет. Соответственно и результат тестирования будет другим.
Никто не заставляет CAWN+CAWNT в JOIN с AUSP использовать. ;)
Для работы со справочными значениями оптимальнее искать значения справочников в цикле с последующим кэшированием.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Работа с классификацией в системе
« Ответ #26 : Март 14, 2015, 12:55:31 pm »
Пример работы с классификацией, когда нужно выполнить классификацию объекта в своей программе. Стандартно SAP когда выполняет такие операции, то вы всегда переходите на стандартные экраны классификации, где выбираете класс и затем заполняете свойства признаков. Следовательно можно организовать вызов стандартных экранов для классификации объектов из своей программы. Данная программа небольшой пример классификации ОЗМ для вида класса 001. В принципе можно использовать любые допустимые в системы виды классов. Комментарии, по использованию вызываемых функциональных модулей  в данном примере, в коде программы.

Внимание: Из особенностей работы, нужно понимать, что объект классификации и создаваемый объект системы, в данном случае ОЗМ, это разные вещи. Поэтому например кода материала  '000000000500003609' в системе может и не существовать,но это не помешает сделать объект классификации с таким кодом объекта.
Код: You are not allowed to view links. Register or Login
REPORT z_test_clas_mara.
DATA: l_updateflag LIKE rmclk-updat,
      l_ok_code    LIKE sy-ucomm,
      l_object     LIKE rmclf-objek,
      l_objtxt     LIKE rmclf-obtxt.

* Вызвать классификацию объекта
l_object = '000000000500003609'.   "Код объекта, для 001 типа класса = полный номер ОЗМ
l_objtxt = 'Термометр 200'.        "Крактий текст наименования, обычно текст ОЗМ
CALL FUNCTION 'CLFM_OBJECT_CLASSIFICATION'
  EXPORTING
    table                    = 'MARA'       "Объект/таблица классификации
    object                   = l_object
    objtxt                   = l_objtxt
    classtype                = '001'        "Вид класса
    status                   = '1'          "1 - создание, 2 - изменение, 3 - просмотр
    initflag                 = 'X'
    ref_datuv                = sy-datum
  IMPORTING
    updateflag               = l_updateflag  "Требуется обновление, были изменения в классе
    ok_code                  = l_ok_code     "Команда выбранная пользователм на экране классификация
  EXCEPTIONS
    classification_not_found = 1
    class_not_valid          = 2.


* Получить параметры класса и значения признаков, заданные на экране классификации
DATA: lt_exp_ausp_tab TYPE rmclausp OCCURS 1 WITH HEADER LINE,
      lt_exp_kssk_tab TYPE rmclkssk OCCURS 1 WITH HEADER LINE.

CALL FUNCTION 'CLFM_GET_INTERNAL_TABLES'
  EXPORTING
    i_allausp    = 'X'
    i_allkssk    = 'X'
  TABLES
    exp_ausp_tab = lt_exp_ausp_tab     "Данные признаков для классов, указанные на экране
    exp_kssk_tab = lt_exp_kssk_tab.    "Данные классов указаннные на экране классификации

* Если пользователь выбрал сохранить или стрелка далее на экране классификации и были изменения
* тогда вызвать сохранение объекта классификации.
IF ( l_ok_code = 'SAVE' OR l_ok_code = 'WEI1' ) AND l_updateflag = 'X'.
* Сохранить изменения классификации
  CALL FUNCTION 'CUOB_COMMIT_WORK'
    EXPORTING
      on_commit = 'X'.    "X - Сохранение в общем процессе обновления иначе немедленное сохранение

  COMMIT WORK AND WAIT.
ENDIF.

* После выполнения COMMIT WORK данные вунтри функций рабоыт с классами очищаются, это занчит что функция
* CLFM_GET_INTERNAL_TABLES больше не будет возвращать значений параметров класса и признаков, поэтому
* необходимо по новму считать во внутренние структуры значения классификации объекта и признаков объекта
DATA: l_object_read   LIKE rmclf-objek,
      lt_allocations LIKE api_kssk OCCURS 1 WITH HEADER LINE.

* Прочитать имена классов которым классифицирован объект. В общем виде это может быть
* несколько классов для типа класса, в данном случае тип класса = 001 - ОЗМ

l_object_read = '000000000500003609'.   "Код объекта, для 001 типа класса = полный номер ОЗМ
CALL FUNCTION 'CLAP_DDB_GET_CLASSIFICATION'
  EXPORTING
    object                 = l_object_read
    obtab                  = 'MARA'
    date_of_change         = sy-datum
    classtype              = '001'
    sort_posnr             = 'X'
  TABLES
    allocations            = lt_allocations
  EXCEPTIONS
    no_allocation          = 1
    foreign_lock           = 2
    system_failure         = 3
    set_aennr              = 4
    change_nr_not_exist    = 5
    date_in_past           = 6
    error_class            = 7
    error_date_restriction = 8
    error_status           = 9
    OTHERS                 = 10.

* Прочитать параметры классификации объекта для кажадого класса
LOOP AT lt_allocations.
  CALL FUNCTION 'CLAP_DDB_SHOW_CLASSIFICATION'
    EXPORTING
      class                    = lt_allocations-class
      object                   = l_object
      classtype                = lt_allocations-klart
    EXCEPTIONS
      allocation_not_available = 1
      class_not_found          = 2
      OTHERS                   = 3.
ENDLOOP.

* Теперь функция CLFM_GET_INTERNAL_TABLES будет возвращать данные классификации, значения признаков и т.д.

Оффлайн nikitinas

  • Newbie
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Работа с классификацией в системе
« Ответ #27 : Ноябрь 09, 2018, 09:14:21 am »
Добрый день. Коллеги у меня проблема с использованием bapi_objcl_change
Транзакция MIGO, Post_Documetn  и там я вызываю все рекомендованные Вами FM-ы.

Так вот один из всех, параметр LOBM_LIFNR не хочет добавляться в новую партию - не сталкивались с такой ситуацией и что можете посоветовать?

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Работа с классификацией в системе
« Ответ #28 : Ноябрь 09, 2018, 03:01:44 pm »
You are not allowed to view links. Register or Login
Так вот один из всех, параметр LOBM_LIFNR не хочет добавляться в новую партию - не сталкивались с такой ситуацией и что можете посоветовать?
Так это вроде как системные признаки, они должны вестись автоматически при настройке соответствующих операций. Вам именно нужен точно этот LOBM_* или может создадите свой типа Z_LIFNR

Оффлайн nikitinas

  • Newbie
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Работа с классификацией в системе
« Ответ #29 : Ноябрь 09, 2018, 03:06:11 pm »
К сожалению хотят список признаков в точности, как в партии ссылочного документа.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Работа с классификацией в системе
« Ответ #30 : Ноябрь 09, 2018, 03:20:41 pm »
You are not allowed to view links. Register or Login
К сожалению хотят список признаков в точности, как в партии ссылочного документа.
Я конечно допускаю, что может все таки причина в другом, но это специализированные признаки которые начинаются на LOBM_* и боюсь, что таки система их блокирует, но это только в отладке можно убедится так оно или нет. Ну чтобы ответить на их "хотят", как-то аргументировано.

Оффлайн nikitinas

  • Newbie
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Работа с классификацией в системе
« Ответ #31 : Ноябрь 09, 2018, 03:59:56 pm »
Спасибо, так и придется делать.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Работа с классификацией в системе
« Ответ #32 : Ноябрь 14, 2018, 11:35:23 am »
You are not allowed to view links. Register or Login
Спасибо, так и придется делать.
Хотелось бы конечно узнать результат, точнее подтверждение выдвинутой версии.

Sapforum.Biz

Re: Работа с классификацией в системе
« Ответ #32 : Ноябрь 14, 2018, 11:35:23 am »